Hacked By AnonymousFox

Current Path : C:/AppServ/www/financial/stacked/code/es5/
Upload File :
Current File : C:/AppServ/www/financial/stacked/code/es5/highcharts-gantt.js.map

{"version":3,"sources":["<anon>"],"sourcesContent":["/**\n * @license Highcharts JS v12.1.2 (2025-01-09)\n * @module highcharts/highcharts\n *\n * (c) 2009-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"highcharts/highcharts\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"highcharts\"] = factory();\n\telse\n\t\t((root[\"Highcharts\"] && root[\"Highcharts\"].error(16, true)), root[\"Highcharts\"] = factory());\n})(this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \t// The require scope\n/******/ \tvar __webpack_require__ = {};\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  \"default\": function() { return /* binding */ highcharts_gantt_src; }\n});\n\n;// ./code/es5/es-modules/Core/Globals.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 *  Namespace\n *\n * */\n/**\n * Shared Highcharts properties.\n * @private\n */\nvar Globals;\n(function (Globals) {\n    /* *\n     *\n     *  Constants\n     *\n     * */\n    var _a,\n        _b;\n    Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '12.1.2', Globals.win = (typeof window !== 'undefined' ?\n        window :\n        {}), // eslint-disable-line node/no-unsupported-features/es-builtins\n    Globals.doc = Globals.win.document, Globals.svg = (Globals.doc &&\n        Globals.doc.createElementNS &&\n        !!Globals.doc.createElementNS(Globals.SVG_NS, 'svg').createSVGRect), Globals.pageLang = (_b = (_a = Globals.doc === null || Globals.doc === void 0 ? void 0 : Globals.doc.documentElement) === null || _a === void 0 ? void 0 : _a.closest('[lang]')) === null || _b === void 0 ? void 0 : _b.lang, Globals.userAgent = (Globals.win.navigator && Globals.win.navigator.userAgent) || '', Globals.isChrome = Globals.win.chrome, Globals.isFirefox = Globals.userAgent.indexOf('Firefox') !== -1, Globals.isMS = /(edge|msie|trident)/i.test(Globals.userAgent) && !Globals.win.opera, Globals.isSafari = !Globals.isChrome && Globals.userAgent.indexOf('Safari') !== -1, Globals.isTouchDevice = /(Mobile|Android|Windows Phone)/.test(Globals.userAgent), Globals.isWebKit = Globals.userAgent.indexOf('AppleWebKit') !== -1, Globals.deg2rad = Math.PI * 2 / 360, Globals.marginNames = [\n        'plotTop',\n        'marginRight',\n        'marginBottom',\n        'plotLeft'\n    ], Globals.noop = function () { }, Globals.supportsPassiveEvents = (function () {\n        // Checks whether the browser supports passive events, (#11353).\n        var supportsPassive = false;\n        // Object.defineProperty doesn't work on IE as well as passive\n        // events - instead of using polyfill, we can exclude IE totally.\n        if (!Globals.isMS) {\n            var opts = Object.defineProperty({}, 'passive', {\n                    get: function () {\n                        supportsPassive = true;\n                }\n            });\n            if (Globals.win.addEventListener && Globals.win.removeEventListener) {\n                Globals.win.addEventListener('testPassive', Globals.noop, opts);\n                Globals.win.removeEventListener('testPassive', Globals.noop, opts);\n            }\n        }\n        return supportsPassive;\n    }());\n    /**\n     * An array containing the current chart objects in the page. A chart's\n     * position in the array is preserved throughout the page's lifetime. When\n     * a chart is destroyed, the array item becomes `undefined`.\n     *\n     * @name Highcharts.charts\n     * @type {Array<Highcharts.Chart|undefined>}\n     */\n    Globals.charts = [];\n    /**\n     * A shared registry between all bundles to keep track of applied\n     * compositions.\n     * @private\n     */\n    Globals.composed = [];\n    /**\n     * A hook for defining additional date format specifiers. New\n     * specifiers are defined as key-value pairs by using the\n     * specifier as key, and a function which takes the timestamp as\n     * value. This function returns the formatted portion of the\n     * date.\n     *\n     * Using `dateFormats` is also a convenient way to define new keys for\n     * complex locale-aware date formats compatible with the\n     * [Intl.DateTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat)\n     * browser API, whenever the built-in formats are not sufficient.\n     *\n     * @sample highcharts/global/dateformats/\n     *         Adding support for week number\n     * @sample highcharts/global/dateformats-object/\n     *         A locale-aware date format using `Intl.DateTimeFormat`\n     *\n     * @name Highcharts.dateFormats\n     * @type {Record<string, Highcharts.TimeFormatCallbackFunction>}\n     */\n    Globals.dateFormats = {};\n    /**\n     * @private\n     * @deprecated\n     * @todo Use only `Core/Series/SeriesRegistry.seriesTypes`\n     */\n    Globals.seriesTypes = {};\n    /**\n     * @private\n     */\n    Globals.symbolSizes = {};\n    /* *\n     *\n     *  Properties\n     *\n     * */\n    // eslint-disable-next-line prefer-const\n    Globals.chartCount = 0;\n})(Globals || (Globals = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Core_Globals = (Globals);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * Theme options that should get applied to the chart. In module mode it\n * might not be possible to change this property because of read-only\n * restrictions, instead use {@link Highcharts.setOptions}.\n *\n * @deprecated\n * @name Highcharts.theme\n * @type {Highcharts.Options}\n */\n(''); // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Utilities.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\n\nvar charts = Core_Globals.charts, doc = Core_Globals.doc, win = Core_Globals.win;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Provide error messages for debugging, with links to online explanation. This\n * function can be overridden to provide custom error handling.\n *\n * @sample highcharts/chart/highcharts-error/\n *         Custom error handler\n *\n * @function Highcharts.error\n *\n * @param {number|string} code\n *        The error code. See\n *        [errors.xml](https://github.com/highcharts/highcharts/blob/master/errors/errors.xml)\n *        for available codes. If it is a string, the error message is printed\n *        directly in the console.\n *\n * @param {boolean} [stop=false]\n *        Whether to throw an error or just log a warning in the console.\n *\n * @param {Highcharts.Chart} [chart]\n *        Reference to the chart that causes the error. Used in 'debugger'\n *        module to display errors directly on the chart.\n *        Important note: This argument is undefined for errors that lack\n *        access to the Chart instance. In such case, the error will be\n *        displayed on the last created chart.\n *\n * @param {Highcharts.Dictionary<string>} [params]\n *        Additional parameters for the generated message.\n *\n * @return {void}\n */\nfunction error(code, stop, chart, params) {\n    var severity = stop ? 'Highcharts error' : 'Highcharts warning';\n    if (code === 32) {\n        code = \"\" + severity + \": Deprecated member\";\n    }\n    var isCode = isNumber(code);\n    var message = isCode ?\n            \"\" + severity + \" #\" + code + \": www.highcharts.com/errors/\" + code + \"/\" :\n            code.toString();\n    var defaultHandler = function () {\n            if (stop) {\n                throw new Error(message);\n        }\n        // Else ...\n        if (win.console &&\n            error.messages.indexOf(message) === -1 // Prevent console flooting\n        ) {\n            console.warn(message); // eslint-disable-line no-console\n        }\n    };\n    if (typeof params !== 'undefined') {\n        var additionalMessages_1 = '';\n        if (isCode) {\n            message += '?';\n        }\n        objectEach(params, function (value, key) {\n            additionalMessages_1 += \"\\n - \".concat(key, \": \").concat(value);\n            if (isCode) {\n                message += encodeURI(key) + '=' + encodeURI(value);\n            }\n        });\n        message += additionalMessages_1;\n    }\n    fireEvent(Core_Globals, 'displayError', { chart: chart, code: code, message: message, params: params }, defaultHandler);\n    error.messages.push(message);\n}\n(function (error) {\n    error.messages = [];\n})(error || (error = {}));\n/**\n * Utility function to deep merge two or more objects and return a third object.\n * If the first argument is true, the contents of the second object is copied\n * into the first object. The merge function can also be used with a single\n * object argument to create a deep copy of an object.\n *\n * @function Highcharts.merge<T>\n *\n * @param {true | T} extendOrSource\n *        Whether to extend the left-side object,\n *        or the first object to merge as a deep copy.\n *\n * @param {...Array<object|undefined>} [sources]\n *        Object(s) to merge into the previous one.\n *\n * @return {T}\n *         The merged object. If the first argument is true, the return is the\n *         same as the second argument.\n */\nfunction merge(extendOrSource) {\n    var sources = [];\n    for (var _a = 1; _a < arguments.length; _a++) {\n        sources[_a - 1] = arguments[_a];\n    }\n    var i,\n        args = __spreadArray([extendOrSource],\n        sources,\n        true),\n        ret = {};\n    var doCopy = function (copy,\n        original) {\n            // An object is replacing a primitive\n            if (typeof copy !== 'object') {\n                copy = {};\n        }\n        objectEach(original, function (value, key) {\n            // Prototype pollution (#14883)\n            if (key === '__proto__' || key === 'constructor') {\n                return;\n            }\n            // Copy the contents of objects, but not arrays or DOM nodes\n            if (isObject(value, true) &&\n                !isClass(value) &&\n                !isDOMElement(value)) {\n                copy[key] = doCopy(copy[key] || {}, value);\n                // Primitives and arrays are copied over directly\n            }\n            else {\n                copy[key] = original[key];\n            }\n        });\n        return copy;\n    };\n    // If first argument is true, copy into the existing object. Used in\n    // setOptions.\n    if (extendOrSource === true) {\n        ret = args[1];\n        args = Array.prototype.slice.call(args, 2);\n    }\n    // For each argument, extend the return\n    var len = args.length;\n    for (i = 0; i < len; i++) {\n        ret = doCopy(ret, args[i]);\n    }\n    return ret;\n}\n/**\n * Constrain a value to within a lower and upper threshold.\n *\n * @private\n * @param {number} value The initial value\n * @param {number} min The lower threshold\n * @param {number} max The upper threshold\n * @return {number} Returns a number value within min and max.\n */\nfunction clamp(value, min, max) {\n    return value > min ? value < max ? value : max : min;\n}\n/**\n * Utility for crisping a line position to the nearest full pixel depening on\n * the line width\n * @param {number} value       The raw pixel position\n * @param {number} lineWidth   The line width\n * @param {boolean} [inverted] Whether the containing group is inverted.\n *                             Crisping round numbers on the y-scale need to go\n *                             to the other side because the coordinate system\n *                             is flipped (scaleY is -1)\n * @return {number}            The pixel position to use for a crisp display\n */\nfunction crisp(value, lineWidth, inverted) {\n    if (lineWidth === void 0) { lineWidth = 0; }\n    var mod = lineWidth % 2 / 2,\n        inverter = inverted ? -1 : 1;\n    return (Math.round(value * inverter - mod) + mod) * inverter;\n}\n// eslint-disable-next-line valid-jsdoc\n/**\n * Return the deep difference between two objects. It can either return the new\n * properties, or optionally return the old values of new properties.\n * @private\n */\nfunction diffObjects(newer, older, keepOlder, collectionsWithUpdate) {\n    var ret = {};\n    /**\n     * Recurse over a set of options and its current values, and store the\n     * current values in the ret object.\n     */\n    function diff(newer, older, ret, depth) {\n        var keeper = keepOlder ? older : newer;\n        objectEach(newer, function (newerVal, key) {\n            if (!depth &&\n                collectionsWithUpdate &&\n                collectionsWithUpdate.indexOf(key) > -1 &&\n                older[key]) {\n                newerVal = splat(newerVal);\n                ret[key] = [];\n                // Iterate over collections like series, xAxis or yAxis and map\n                // the items by index.\n                for (var i = 0; i < Math.max(newerVal.length, older[key].length); i++) {\n                    // Item exists in current data (#6347)\n                    if (older[key][i]) {\n                        // If the item is missing from the new data, we need to\n                        // save the whole config structure. Like when\n                        // responsively updating from a dual axis layout to a\n                        // single axis and back (#13544).\n                        if (newerVal[i] === void 0) {\n                            ret[key][i] = older[key][i];\n                            // Otherwise, proceed\n                        }\n                        else {\n                            ret[key][i] = {};\n                            diff(newerVal[i], older[key][i], ret[key][i], depth + 1);\n                        }\n                    }\n                }\n            }\n            else if (isObject(newerVal, true) &&\n                !newerVal.nodeType // #10044\n            ) {\n                ret[key] = isArray(newerVal) ? [] : {};\n                diff(newerVal, older[key] || {}, ret[key], depth + 1);\n                // Delete empty nested objects\n                if (Object.keys(ret[key]).length === 0 &&\n                    // Except colorAxis which is a special case where the empty\n                    // object means it is enabled. Which is unfortunate and we\n                    // should try to find a better way.\n                    !(key === 'colorAxis' && depth === 0)) {\n                    delete ret[key];\n                }\n            }\n            else if (newer[key] !== older[key] ||\n                // If the newer key is explicitly undefined, keep it (#10525)\n                (key in newer && !(key in older))) {\n                if (key !== '__proto__' && key !== 'constructor') {\n                    ret[key] = keeper[key];\n                }\n            }\n        });\n    }\n    diff(newer, older, ret, 0);\n    return ret;\n}\n/**\n * Shortcut for parseInt\n *\n * @private\n * @function Highcharts.pInt\n *\n * @param {*} s\n *        any\n *\n * @param {number} [mag]\n *        Magnitude\n *\n * @return {number}\n *         number\n */\nfunction pInt(s, mag) {\n    return parseInt(s, mag || 10);\n}\n/**\n * Utility function to check for string type.\n *\n * @function Highcharts.isString\n *\n * @param {*} s\n *        The item to check.\n *\n * @return {boolean}\n *         True if the argument is a string.\n */\nfunction isString(s) {\n    return typeof s === 'string';\n}\n/**\n * Utility function to check if an item is an array.\n *\n * @function Highcharts.isArray\n *\n * @param {*} obj\n *        The item to check.\n *\n * @return {boolean}\n *         True if the argument is an array.\n */\nfunction isArray(obj) {\n    var str = Object.prototype.toString.call(obj);\n    return str === '[object Array]' || str === '[object Array Iterator]';\n}\n/**\n * Utility function to check if an item is of type object.\n *\n * @function Highcharts.isObject\n *\n * @param {*} obj\n *        The item to check.\n *\n * @param {boolean} [strict=false]\n *        Also checks that the object is not an array.\n *\n * @return {boolean}\n *         True if the argument is an object.\n */\nfunction isObject(obj, strict) {\n    return (!!obj &&\n        typeof obj === 'object' &&\n        (!strict || !isArray(obj))); // eslint-disable-line @typescript-eslint/no-explicit-any\n}\n/**\n * Utility function to check if an Object is a HTML Element.\n *\n * @function Highcharts.isDOMElement\n *\n * @param {*} obj\n *        The item to check.\n *\n * @return {boolean}\n *         True if the argument is a HTML Element.\n */\nfunction isDOMElement(obj) {\n    return isObject(obj) && typeof obj.nodeType === 'number';\n}\n/**\n * Utility function to check if an Object is a class.\n *\n * @function Highcharts.isClass\n *\n * @param {object|undefined} obj\n *        The item to check.\n *\n * @return {boolean}\n *         True if the argument is a class.\n */\nfunction isClass(obj) {\n    var c = obj && obj.constructor;\n    return !!(isObject(obj, true) &&\n        !isDOMElement(obj) &&\n        (c && c.name && c.name !== 'Object'));\n}\n/**\n * Utility function to check if an item is a number and it is finite (not NaN,\n * Infinity or -Infinity).\n *\n * @function Highcharts.isNumber\n *\n * @param {*} n\n *        The item to check.\n *\n * @return {boolean}\n *         True if the item is a finite number\n */\nfunction isNumber(n) {\n    return typeof n === 'number' && !isNaN(n) && n < Infinity && n > -Infinity;\n}\n/**\n * Remove the last occurence of an item from an array.\n *\n * @function Highcharts.erase\n *\n * @param {Array<*>} arr\n *        The array.\n *\n * @param {*} item\n *        The item to remove.\n *\n * @return {void}\n */\nfunction erase(arr, item) {\n    var i = arr.length;\n    while (i--) {\n        if (arr[i] === item) {\n            arr.splice(i, 1);\n            break;\n        }\n    }\n}\n/**\n * Insert a series or an axis in a collection with other items, either the\n * chart series or yAxis series or axis collections, in the correct order\n * according to the index option and whether it is internal. Used internally\n * when adding series and axes.\n *\n * @private\n * @function Highcharts.Chart#insertItem\n * @param  {Highcharts.Series|Highcharts.Axis} item\n *         The item to insert\n * @param  {Array<Highcharts.Series>|Array<Highcharts.Axis>} collection\n *         A collection of items, like `chart.series` or `xAxis.series`.\n * @return {number} The index of the series in the collection.\n */\nfunction insertItem(item, collection) {\n    var indexOption = item.options.index,\n        length = collection.length;\n    var i;\n    for (\n    // Internal item (navigator) should always be pushed to the end\n    i = item.options.isInternal ? length : 0; i < length + 1; i++) {\n        if (\n        // No index option, reached the end of the collection,\n        // equivalent to pushing\n        !collection[i] ||\n            // Handle index option, the element to insert has lower index\n            (isNumber(indexOption) &&\n                indexOption < pick(collection[i].options.index, collection[i]._i)) ||\n            // Insert the new item before other internal items\n            // (navigator)\n            collection[i].options.isInternal) {\n            collection.splice(i, 0, item);\n            break;\n        }\n    }\n    return i;\n}\n/**\n * Adds an item to an array, if it is not present in the array.\n *\n * @function Highcharts.pushUnique\n *\n * @param {Array<unknown>} array\n * The array to add the item to.\n *\n * @param {unknown} item\n * The item to add.\n *\n * @return {boolean}\n * Returns true, if the item was not present and has been added.\n */\nfunction pushUnique(array, item) {\n    return array.indexOf(item) < 0 && !!array.push(item);\n}\n/**\n * Check if an object is null or undefined.\n *\n * @function Highcharts.defined\n *\n * @param {*} obj\n *        The object to check.\n *\n * @return {boolean}\n *         False if the object is null or undefined, otherwise true.\n */\nfunction defined(obj) {\n    return typeof obj !== 'undefined' && obj !== null;\n}\n/**\n * Set or get an attribute or an object of attributes.\n *\n * To use as a setter, pass a key and a value, or let the second argument be a\n * collection of keys and values. When using a collection, passing a value of\n * `null` or `undefined` will remove the attribute.\n *\n * To use as a getter, pass only a string as the second argument.\n *\n * @function Highcharts.attr\n *\n * @param {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement} elem\n *        The DOM element to receive the attribute(s).\n *\n * @param {string|Highcharts.HTMLAttributes|Highcharts.SVGAttributes} [keyOrAttribs]\n *        The property or an object of key-value pairs.\n *\n * @param {number|string} [value]\n *        The value if a single property is set.\n *\n * @return {string|null|undefined}\n *         When used as a getter, return the value.\n */\nfunction attr(elem, keyOrAttribs, value) {\n    var isGetter = isString(keyOrAttribs) && !defined(value);\n    var ret;\n    var attrSingle = function (value,\n        key) {\n            // Set the value\n            if (defined(value)) {\n                elem.setAttribute(key,\n        value);\n            // Get the value\n        }\n        else if (isGetter) {\n            ret = elem.getAttribute(key);\n            // IE7 and below cannot get class through getAttribute (#7850)\n            if (!ret && key === 'class') {\n                ret = elem.getAttribute(key + 'Name');\n            }\n            // Remove the value\n        }\n        else {\n            elem.removeAttribute(key);\n        }\n    };\n    // If keyOrAttribs is a string\n    if (isString(keyOrAttribs)) {\n        attrSingle(value, keyOrAttribs);\n        // Else if keyOrAttribs is defined, it is a hash of key/value pairs\n    }\n    else {\n        objectEach(keyOrAttribs, attrSingle);\n    }\n    return ret;\n}\n/**\n * Check if an element is an array, and if not, make it into an array.\n *\n * @function Highcharts.splat\n *\n * @param {*} obj\n *        The object to splat.\n *\n * @return {Array}\n *         The produced or original array.\n */\nfunction splat(obj) {\n    return isArray(obj) ? obj : [obj];\n}\n/**\n * Set a timeout if the delay is given, otherwise perform the function\n * synchronously.\n *\n * @function Highcharts.syncTimeout\n *\n * @param {Function} fn\n *        The function callback.\n *\n * @param {number} delay\n *        Delay in milliseconds.\n *\n * @param {*} [context]\n *        An optional context to send to the function callback.\n *\n * @return {number}\n *         An identifier for the timeout that can later be cleared with\n *         Highcharts.clearTimeout. Returns -1 if there is no timeout.\n */\nfunction syncTimeout(fn, delay, context) {\n    if (delay > 0) {\n        return setTimeout(fn, delay, context);\n    }\n    fn.call(0, context);\n    return -1;\n}\n/**\n * Internal clear timeout. The function checks that the `id` was not removed\n * (e.g. by `chart.destroy()`). For the details see\n * [issue #7901](https://github.com/highcharts/highcharts/issues/7901).\n *\n * @function Highcharts.clearTimeout\n *\n * @param {number|undefined} id\n * Id of a timeout.\n */\nfunction internalClearTimeout(id) {\n    if (defined(id)) {\n        clearTimeout(id);\n    }\n}\n/* eslint-disable valid-jsdoc */\n/**\n * Utility function to extend an object with the members of another.\n *\n * @function Highcharts.extend<T>\n *\n * @param {T|undefined} a\n *        The object to be extended.\n *\n * @param {Partial<T>} b\n *        The object to add to the first one.\n *\n * @return {T}\n *         Object a, the original object.\n */\nfunction extend(a, b) {\n    /* eslint-enable valid-jsdoc */\n    var n;\n    if (!a) {\n        a = {};\n    }\n    for (n in b) { // eslint-disable-line guard-for-in\n        a[n] = b[n];\n    }\n    return a;\n}\n/* eslint-disable valid-jsdoc */\n/**\n * Return the first value that is not null or undefined.\n *\n * @function Highcharts.pick<T>\n *\n * @param {...Array<T|null|undefined>} items\n *        Variable number of arguments to inspect.\n *\n * @return {T}\n *         The value of the first argument that is not null or undefined.\n */\nfunction pick() {\n    var args = arguments;\n    var length = args.length;\n    for (var i = 0; i < length; i++) {\n        var arg = args[i];\n        if (typeof arg !== 'undefined' && arg !== null) {\n            return arg;\n        }\n    }\n}\n/**\n * Set CSS on a given element.\n *\n * @function Highcharts.css\n *\n * @param {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement} el\n *        An HTML DOM element.\n *\n * @param {Highcharts.CSSObject} styles\n *        Style object with camel case property names.\n *\n * @return {void}\n */\nfunction css(el, styles) {\n    extend(el.style, styles);\n}\n/**\n * Utility function to create an HTML element with attributes and styles.\n *\n * @function Highcharts.createElement\n *\n * @param {string} tag\n *        The HTML tag.\n *\n * @param {Highcharts.HTMLAttributes} [attribs]\n *        Attributes as an object of key-value pairs.\n *\n * @param {Highcharts.CSSObject} [styles]\n *        Styles as an object of key-value pairs.\n *\n * @param {Highcharts.HTMLDOMElement} [parent]\n *        The parent HTML object.\n *\n * @param {boolean} [nopad=false]\n *        If true, remove all padding, border and margin.\n *\n * @return {Highcharts.HTMLDOMElement}\n *         The created DOM element.\n */\nfunction createElement(tag, attribs, styles, parent, nopad) {\n    var el = doc.createElement(tag);\n    if (attribs) {\n        extend(el, attribs);\n    }\n    if (nopad) {\n        css(el, { padding: '0', border: 'none', margin: '0' });\n    }\n    if (styles) {\n        css(el, styles);\n    }\n    if (parent) {\n        parent.appendChild(el);\n    }\n    return el;\n}\n// eslint-disable-next-line valid-jsdoc\n/**\n * Extend a prototyped class by new members.\n *\n * @deprecated\n * @function Highcharts.extendClass<T>\n *\n * @param {Highcharts.Class<T>} parent\n *        The parent prototype to inherit.\n *\n * @param {Highcharts.Dictionary<*>} members\n *        A collection of prototype members to add or override compared to the\n *        parent prototype.\n *\n * @return {Highcharts.Class<T>}\n *         A new prototype.\n */\nfunction extendClass(parent, members) {\n    var obj = (function () { });\n    obj.prototype = new parent(); // eslint-disable-line new-cap\n    extend(obj.prototype, members);\n    return obj;\n}\n/**\n * Left-pad a string to a given length by adding a character repetitively.\n *\n * @function Highcharts.pad\n *\n * @param {number} number\n *        The input string or number.\n *\n * @param {number} [length]\n *        The desired string length.\n *\n * @param {string} [padder=0]\n *        The character to pad with.\n *\n * @return {string}\n *         The padded string.\n */\nfunction pad(number, length, padder) {\n    return new Array((length || 2) +\n        1 -\n        String(number)\n            .replace('-', '')\n            .length).join(padder || '0') + number;\n}\n/**\n * Return a length based on either the integer value, or a percentage of a base.\n *\n * @function Highcharts.relativeLength\n *\n * @param {Highcharts.RelativeSize} value\n *        A percentage string or a number.\n *\n * @param {number} base\n *        The full length that represents 100%.\n *\n * @param {number} [offset=0]\n *        A pixel offset to apply for percentage values. Used internally in\n *        axis positioning.\n *\n * @return {number}\n *         The computed length.\n */\nfunction relativeLength(value, base, offset) {\n    return (/%$/).test(value) ?\n        (base * parseFloat(value) / 100) + (offset || 0) :\n        parseFloat(value);\n}\n/**\n * Replaces text in a string with a given replacement in a loop to catch nested\n * matches after previous replacements.\n *\n * @function Highcharts.replaceNested\n *\n * @param {string} text\n * Text to search and modify.\n *\n * @param {...Array<(RegExp|string)>} replacements\n * One or multiple tuples with search pattern (`[0]: (string|RegExp)`) and\n * replacement (`[1]: string`) for matching text.\n *\n * @return {string}\n * Text with replacements.\n */\nfunction replaceNested(text) {\n    var replacements = [];\n    for (var _a = 1; _a < arguments.length; _a++) {\n        replacements[_a - 1] = arguments[_a];\n    }\n    var previous,\n        replacement;\n    do {\n        previous = text;\n        for (var _b = 0, replacements_1 = replacements; _b < replacements_1.length; _b++) {\n            replacement = replacements_1[_b];\n            text = text.replace(replacement[0], replacement[1]);\n        }\n    } while (text !== previous);\n    return text;\n}\n/**\n * Wrap a method with extended functionality, preserving the original function.\n *\n * @function Highcharts.wrap\n *\n * @param {*} obj\n *        The context object that the method belongs to. In real cases, this is\n *        often a prototype.\n *\n * @param {string} method\n *        The name of the method to extend.\n *\n * @param {Highcharts.WrapProceedFunction} func\n *        A wrapper function callback. This function is called with the same\n *        arguments as the original function, except that the original function\n *        is unshifted and passed as the first argument.\n */\nfunction wrap(obj, method, func) {\n    var proceed = obj[method];\n    obj[method] = function () {\n        var outerArgs = arguments,\n            scope = this;\n        return func.apply(this, [\n            function () {\n                return proceed.apply(scope, arguments.length ? arguments : outerArgs);\n            }\n        ].concat([].slice.call(arguments)));\n    };\n}\n/**\n * Get the magnitude of a number.\n *\n * @function Highcharts.getMagnitude\n *\n * @param {number} num\n *        The number.\n *\n * @return {number}\n *         The magnitude, where 1-9 are magnitude 1, 10-99 magnitude 2 etc.\n */\nfunction getMagnitude(num) {\n    return Math.pow(10, Math.floor(Math.log(num) / Math.LN10));\n}\n/**\n * Take an interval and normalize it to multiples of round numbers.\n *\n * @deprecated\n * @function Highcharts.normalizeTickInterval\n *\n * @param {number} interval\n *        The raw, un-rounded interval.\n *\n * @param {Array<*>} [multiples]\n *        Allowed multiples.\n *\n * @param {number} [magnitude]\n *        The magnitude of the number.\n *\n * @param {boolean} [allowDecimals]\n *        Whether to allow decimals.\n *\n * @param {boolean} [hasTickAmount]\n *        If it has tickAmount, avoid landing on tick intervals lower than\n *        original.\n *\n * @return {number}\n *         The normalized interval.\n *\n * @todo\n * Move this function to the Axis prototype. It is here only for historical\n * reasons.\n */\nfunction normalizeTickInterval(interval, multiples, magnitude, allowDecimals, hasTickAmount) {\n    var i,\n        retInterval = interval;\n    // Round to a tenfold of 1, 2, 2.5 or 5\n    magnitude = pick(magnitude, getMagnitude(interval));\n    var normalized = interval / magnitude;\n    // Multiples for a linear scale\n    if (!multiples) {\n        multiples = hasTickAmount ?\n            // Finer grained ticks when the tick amount is hard set, including\n            // when alignTicks is true on multiple axes (#4580).\n            [1, 1.2, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10] :\n            // Else, let ticks fall on rounder numbers\n            [1, 2, 2.5, 5, 10];\n        // The allowDecimals option\n        if (allowDecimals === false) {\n            if (magnitude === 1) {\n                multiples = multiples.filter(function (num) {\n                    return num % 1 === 0;\n                });\n            }\n            else if (magnitude <= 0.1) {\n                multiples = [1 / magnitude];\n            }\n        }\n    }\n    // Normalize the interval to the nearest multiple\n    for (i = 0; i < multiples.length; i++) {\n        retInterval = multiples[i];\n        // Only allow tick amounts smaller than natural\n        if ((hasTickAmount &&\n            retInterval * magnitude >= interval) ||\n            (!hasTickAmount &&\n                (normalized <=\n                    (multiples[i] +\n                        (multiples[i + 1] || multiples[i])) / 2))) {\n            break;\n        }\n    }\n    // Multiply back to the correct magnitude. Correct floats to appropriate\n    // precision (#6085).\n    retInterval = correctFloat(retInterval * magnitude, -Math.round(Math.log(0.001) / Math.LN10));\n    return retInterval;\n}\n/**\n * Sort an object array and keep the order of equal items. The ECMAScript\n * standard does not specify the behaviour when items are equal.\n *\n * @function Highcharts.stableSort\n *\n * @param {Array<*>} arr\n *        The array to sort.\n *\n * @param {Function} sortFunction\n *        The function to sort it with, like with regular Array.prototype.sort.\n */\nfunction stableSort(arr, sortFunction) {\n    // @todo It seems like Chrome since v70 sorts in a stable way internally,\n    // plus all other browsers do it, so over time we may be able to remove this\n    // function\n    var length = arr.length;\n    var sortValue,\n        i;\n    // Add index to each item\n    for (i = 0; i < length; i++) {\n        arr[i].safeI = i; // Stable sort index\n    }\n    arr.sort(function (a, b) {\n        sortValue = sortFunction(a, b);\n        return sortValue === 0 ? a.safeI - b.safeI : sortValue;\n    });\n    // Remove index from items\n    for (i = 0; i < length; i++) {\n        delete arr[i].safeI; // Stable sort index\n    }\n}\n/**\n * Non-recursive method to find the lowest member of an array. `Math.min` raises\n * a maximum call stack size exceeded error in Chrome when trying to apply more\n * than 150.000 points. This method is slightly slower, but safe.\n *\n * @function Highcharts.arrayMin\n *\n * @param {Array<*>} data\n *        An array of numbers.\n *\n * @return {number}\n *         The lowest number.\n */\nfunction arrayMin(data) {\n    var i = data.length,\n        min = data[0];\n    while (i--) {\n        if (data[i] < min) {\n            min = data[i];\n        }\n    }\n    return min;\n}\n/**\n * Non-recursive method to find the lowest member of an array. `Math.max` raises\n * a maximum call stack size exceeded error in Chrome when trying to apply more\n * than 150.000 points. This method is slightly slower, but safe.\n *\n * @function Highcharts.arrayMax\n *\n * @param {Array<*>} data\n *        An array of numbers.\n *\n * @return {number}\n *         The highest number.\n */\nfunction arrayMax(data) {\n    var i = data.length,\n        max = data[0];\n    while (i--) {\n        if (data[i] > max) {\n            max = data[i];\n        }\n    }\n    return max;\n}\n/**\n * Utility method that destroys any SVGElement instances that are properties on\n * the given object. It loops all properties and invokes destroy if there is a\n * destroy method. The property is then delete.\n *\n * @function Highcharts.destroyObjectProperties\n *\n * @param {*} obj\n *        The object to destroy properties on.\n *\n * @param {*} [except]\n *        Exception, do not destroy this property, only delete it.\n */\nfunction destroyObjectProperties(obj, except, destructablesOnly) {\n    objectEach(obj, function (val, n) {\n        // If the object is non-null and destroy is defined\n        if (val !== except && (val === null || val === void 0 ? void 0 : val.destroy)) {\n            // Invoke the destroy\n            val.destroy();\n        }\n        // Delete the property from the object\n        if ((val === null || val === void 0 ? void 0 : val.destroy) || !destructablesOnly) {\n            delete obj[n];\n        }\n    });\n}\n/**\n * Discard a HTML element\n *\n * @function Highcharts.discardElement\n *\n * @param {Highcharts.HTMLDOMElement} element\n *        The HTML node to discard.\n */\nfunction discardElement(element) {\n    if (element && element.parentElement) {\n        element.parentElement.removeChild(element);\n    }\n}\n/**\n * Fix JS round off float errors.\n *\n * @function Highcharts.correctFloat\n *\n * @param {number} num\n *        A float number to fix.\n *\n * @param {number} [prec=14]\n *        The precision.\n *\n * @return {number}\n *         The corrected float number.\n */\nfunction correctFloat(num, prec) {\n    // When the number is higher than 1e14 use the number (#16275)\n    return num > 1e14 ? num : parseFloat(num.toPrecision(prec || 14));\n}\n/**\n * The time unit lookup\n *\n * @ignore\n */\nvar timeUnits = {\n    millisecond: 1,\n    second: 1000,\n    minute: 60000,\n    hour: 3600000,\n    day: 24 * 3600000,\n    week: 7 * 24 * 3600000,\n    month: 28 * 24 * 3600000,\n    year: 364 * 24 * 3600000\n};\n/**\n * Easing definition\n *\n * @private\n * @function Math.easeInOutSine\n *\n * @param {number} pos\n *        Current position, ranging from 0 to 1.\n *\n * @return {number}\n *         Ease result\n */\nMath.easeInOutSine = function (pos) {\n    return -0.5 * (Math.cos(Math.PI * pos) - 1);\n};\n/**\n * Convenience function to get the align factor, used several places for\n * computing positions\n * @private\n */\nvar getAlignFactor = function (align) {\n    if (align === void 0) { align = ''; }\n    return ({\n        center: 0.5,\n        right: 1,\n        middle: 0.5,\n        bottom: 1\n    }[align] || 0);\n};\n/**\n * Find the closest distance between two values of a two-dimensional array\n * @private\n * @function Highcharts.getClosestDistance\n *\n * @param {Array<Array<number>>} arrays\n *          An array of arrays of numbers\n *\n * @return {number | undefined}\n *          The closest distance between values\n */\nfunction getClosestDistance(arrays, onError) {\n    var allowNegative = !onError;\n    var closest,\n        loopLength,\n        distance,\n        i;\n    arrays.forEach(function (xData) {\n        if (xData.length > 1) {\n            loopLength = xData.length - 1;\n            for (i = loopLength; i > 0; i--) {\n                distance = xData[i] - xData[i - 1];\n                if (distance < 0 && !allowNegative) {\n                    onError === null || onError === void 0 ? void 0 : onError();\n                    // Only one call\n                    onError = void 0;\n                }\n                else if (distance && (typeof closest === 'undefined' || distance < closest)) {\n                    closest = distance;\n                }\n            }\n        }\n    });\n    return closest;\n}\n/**\n * Returns the value of a property path on a given object.\n *\n * @private\n * @function getNestedProperty\n *\n * @param {string} path\n * Path to the property, for example `custom.myValue`.\n *\n * @param {unknown} obj\n * Instance containing the property on the specific path.\n *\n * @return {unknown}\n * The unknown property value.\n */\nfunction getNestedProperty(path, parent) {\n    var pathElements = path.split('.');\n    while (pathElements.length && defined(parent)) {\n        var pathElement = pathElements.shift();\n        // Filter on the key\n        if (typeof pathElement === 'undefined' ||\n            pathElement === '__proto__') {\n            return; // Undefined\n        }\n        if (pathElement === 'this') {\n            var thisProp = void 0;\n            if (isObject(parent)) {\n                thisProp = parent['@this'];\n            }\n            return thisProp !== null && thisProp !== void 0 ? thisProp : parent;\n        }\n        var child = parent[pathElement.replace(/[\\\\'\"]/g, '')];\n        // Filter on the child\n        if (!defined(child) ||\n            typeof child === 'function' ||\n            typeof child.nodeType === 'number' ||\n            child === win) {\n            return; // Undefined\n        }\n        // Else, proceed\n        parent = child;\n    }\n    return parent;\n}\n/**\n * Get the computed CSS value for given element and property, only for numerical\n * properties. For width and height, the dimension of the inner box (excluding\n * padding) is returned. Used for fitting the chart within the container.\n *\n * @function Highcharts.getStyle\n *\n * @param {Highcharts.HTMLDOMElement} el\n * An HTML element.\n *\n * @param {string} prop\n * The property name.\n *\n * @param {boolean} [toInt=true]\n * Parse to integer.\n *\n * @return {number|string|undefined}\n * The style value.\n */\nfunction getStyle(el, prop, toInt) {\n    var style;\n    // For width and height, return the actual inner pixel size (#4913)\n    if (prop === 'width') {\n        var offsetWidth = Math.min(el.offsetWidth,\n            el.scrollWidth);\n        // In flex boxes, we need to use getBoundingClientRect and floor it,\n        // because scrollWidth doesn't support subpixel precision (#6427) ...\n        var boundingClientRectWidth = el.getBoundingClientRect &&\n                el.getBoundingClientRect().width;\n        // ...unless if the containing div or its parents are transform-scaled\n        // down, in which case the boundingClientRect can't be used as it is\n        // also scaled down (#9871, #10498).\n        if (boundingClientRectWidth < offsetWidth &&\n            boundingClientRectWidth >= offsetWidth - 1) {\n            offsetWidth = Math.floor(boundingClientRectWidth);\n        }\n        return Math.max(0, // #8377\n        (offsetWidth -\n            (getStyle(el, 'padding-left', true) || 0) -\n            (getStyle(el, 'padding-right', true) || 0)));\n    }\n    if (prop === 'height') {\n        return Math.max(0, // #8377\n        (Math.min(el.offsetHeight, el.scrollHeight) -\n            (getStyle(el, 'padding-top', true) || 0) -\n            (getStyle(el, 'padding-bottom', true) || 0)));\n    }\n    // Otherwise, get the computed style\n    var css = win.getComputedStyle(el,\n        void 0); // eslint-disable-line no-undefined\n        if (css) {\n            style = css.getPropertyValue(prop);\n        if (pick(toInt, prop !== 'opacity')) {\n            style = pInt(style);\n        }\n    }\n    return style;\n}\n/**\n * Return the value of the first element in the array that satisfies the\n * provided testing function.\n *\n * @function Highcharts.find<T>\n *\n * @param {Array<T>} arr\n *        The array to test.\n *\n * @param {Function} callback\n *        The callback function. The function receives the item as the first\n *        argument. Return `true` if this item satisfies the condition.\n *\n * @return {T|undefined}\n *         The value of the element.\n */\nvar find = Array.prototype.find ?\n    function (arr, callback) {\n        return arr.find(callback);\n    } :\n    // Legacy implementation. PhantomJS, IE <= 11 etc. #7223.\n    function (arr, callback) {\n        var i;\n        var length = arr.length;\n        for (i = 0; i < length; i++) {\n            if (callback(arr[i], i)) { // eslint-disable-line node/callback-return\n                return arr[i];\n            }\n        }\n    };\n/**\n * Get the element's offset position, corrected for `overflow: auto`.\n *\n * @function Highcharts.offset\n *\n * @param {global.Element} el\n *        The DOM element.\n *\n * @return {Highcharts.OffsetObject}\n *         An object containing `left` and `top` properties for the position in\n *         the page.\n */\nfunction offset(el) {\n    var docElem = doc.documentElement,\n        box = (el.parentElement || el.parentNode) ?\n            el.getBoundingClientRect() :\n            { top: 0,\n        left: 0,\n        width: 0,\n        height: 0 };\n    return {\n        top: box.top + (win.pageYOffset || docElem.scrollTop) -\n            (docElem.clientTop || 0),\n        left: box.left + (win.pageXOffset || docElem.scrollLeft) -\n            (docElem.clientLeft || 0),\n        width: box.width,\n        height: box.height\n    };\n}\n/* eslint-disable valid-jsdoc */\n/**\n * Iterate over object key pairs in an object.\n *\n * @function Highcharts.objectEach<T>\n *\n * @param {*} obj\n *        The object to iterate over.\n *\n * @param {Highcharts.ObjectEachCallbackFunction<T>} fn\n *        The iterator callback. It passes three arguments:\n *        * value - The property value.\n *        * key - The property key.\n *        * obj - The object that objectEach is being applied to.\n *\n * @param {T} [ctx]\n *        The context.\n */\nfunction objectEach(obj, fn, ctx) {\n    /* eslint-enable valid-jsdoc */\n    for (var key in obj) {\n        if (Object.hasOwnProperty.call(obj, key)) {\n            fn.call(ctx || obj[key], obj[key], key, obj);\n        }\n    }\n}\n/* eslint-disable valid-jsdoc */\n/**\n * Add an event listener.\n *\n * @function Highcharts.addEvent<T>\n *\n * @param  {Highcharts.Class<T>|T} el\n *         The element or object to add a listener to. It can be a\n *         {@link HTMLDOMElement}, an {@link SVGElement} or any other object.\n *\n * @param  {string} type\n *         The event type.\n *\n * @param  {Highcharts.EventCallbackFunction<T>|Function} fn\n *         The function callback to execute when the event is fired.\n *\n * @param  {Highcharts.EventOptionsObject} [options]\n *         Options for adding the event.\n *\n * @sample highcharts/members/addevent\n *         Use a general `render` event to draw shapes on a chart\n *\n * @return {Function}\n *         A callback function to remove the added event.\n */\nfunction addEvent(el, type, fn, options) {\n    /* eslint-enable valid-jsdoc */\n    if (options === void 0) { options = {}; }\n    // Add hcEvents to either the prototype (in case we're running addEvent on a\n    // class) or the instance. If hasOwnProperty('hcEvents') is false, it is\n    // inherited down the prototype chain, in which case we need to set the\n    // property on this instance (which may itself be a prototype).\n    var owner = typeof el === 'function' && el.prototype || el;\n    if (!Object.hasOwnProperty.call(owner, 'hcEvents')) {\n        owner.hcEvents = {};\n    }\n    var events = owner.hcEvents;\n    // Allow click events added to points, otherwise they will be prevented by\n    // the TouchPointer.pinch function after a pinch zoom operation (#7091).\n    if (Core_Globals.Point && // Without H a dependency loop occurs\n        el instanceof Core_Globals.Point &&\n        el.series &&\n        el.series.chart) {\n        el.series.chart.runTrackerClick = true;\n    }\n    // Handle DOM events\n    // If the browser supports passive events, add it to improve performance\n    // on touch events (#11353).\n    var addEventListener = el.addEventListener;\n    if (addEventListener) {\n        addEventListener.call(el, type, fn, Core_Globals.supportsPassiveEvents ? {\n            passive: options.passive === void 0 ?\n                type.indexOf('touch') !== -1 : options.passive,\n            capture: false\n        } : false);\n    }\n    if (!events[type]) {\n        events[type] = [];\n    }\n    var eventObject = {\n            fn: fn,\n            order: typeof options.order === 'number' ? options.order : Infinity\n        };\n    events[type].push(eventObject);\n    // Order the calls\n    events[type].sort(function (a, b) { return a.order - b.order; });\n    // Return a function that can be called to remove this event.\n    return function () {\n        removeEvent(el, type, fn);\n    };\n}\n/* eslint-disable valid-jsdoc */\n/**\n * Remove an event that was added with {@link Highcharts#addEvent}.\n *\n * @function Highcharts.removeEvent<T>\n *\n * @param {Highcharts.Class<T>|T} el\n *        The element to remove events on.\n *\n * @param {string} [type]\n *        The type of events to remove. If undefined, all events are removed\n *        from the element.\n *\n * @param {Highcharts.EventCallbackFunction<T>} [fn]\n *        The specific callback to remove. If undefined, all events that match\n *        the element and optionally the type are removed.\n *\n * @return {void}\n */\nfunction removeEvent(el, type, fn) {\n    /* eslint-enable valid-jsdoc */\n    /**\n     * @private\n     */\n    function removeOneEvent(type, fn) {\n        var removeEventListener = el.removeEventListener;\n        if (removeEventListener) {\n            removeEventListener.call(el, type, fn, false);\n        }\n    }\n    /**\n     * @private\n     */\n    function removeAllEvents(eventCollection) {\n        var types,\n            len;\n        if (!el.nodeName) {\n            return; // Break on non-DOM events\n        }\n        if (type) {\n            types = {};\n            types[type] = true;\n        }\n        else {\n            types = eventCollection;\n        }\n        objectEach(types, function (_val, n) {\n            if (eventCollection[n]) {\n                len = eventCollection[n].length;\n                while (len--) {\n                    removeOneEvent(n, eventCollection[n][len].fn);\n                }\n            }\n        });\n    }\n    var owner = typeof el === 'function' && el.prototype || el;\n    if (Object.hasOwnProperty.call(owner, 'hcEvents')) {\n        var events = owner.hcEvents;\n        if (type) {\n            var typeEvents = (events[type] || []);\n            if (fn) {\n                events[type] = typeEvents.filter(function (obj) {\n                    return fn !== obj.fn;\n                });\n                removeOneEvent(type, fn);\n            }\n            else {\n                removeAllEvents(events);\n                events[type] = [];\n            }\n        }\n        else {\n            removeAllEvents(events);\n            delete owner.hcEvents;\n        }\n    }\n}\n/* eslint-disable valid-jsdoc */\n/**\n * Fire an event that was registered with {@link Highcharts#addEvent}.\n *\n * @function Highcharts.fireEvent<T>\n *\n * @param {T} el\n *        The object to fire the event on. It can be a {@link HTMLDOMElement},\n *        an {@link SVGElement} or any other object.\n *\n * @param {string} type\n *        The type of event.\n *\n * @param {Highcharts.Dictionary<*>|Event} [eventArguments]\n *        Custom event arguments that are passed on as an argument to the event\n *        handler.\n *\n * @param {Highcharts.EventCallbackFunction<T>|Function} [defaultFunction]\n *        The default function to execute if the other listeners haven't\n *        returned false.\n *\n * @return {void}\n */\nfunction fireEvent(el, type, eventArguments, defaultFunction) {\n    /* eslint-enable valid-jsdoc */\n    eventArguments = eventArguments || {};\n    if (doc.createEvent &&\n        (el.dispatchEvent ||\n            (el.fireEvent &&\n                // Enable firing events on Highcharts instance.\n                el !== Core_Globals))) {\n        var e = doc.createEvent('Events');\n        e.initEvent(type, true, true);\n        eventArguments = extend(e, eventArguments);\n        if (el.dispatchEvent) {\n            el.dispatchEvent(eventArguments);\n        }\n        else {\n            el.fireEvent(type, eventArguments);\n        }\n    }\n    else if (el.hcEvents) {\n        if (!eventArguments.target) {\n            // We're running a custom event\n            extend(eventArguments, {\n                // Attach a simple preventDefault function to skip\n                // default handler if called. The built-in\n                // defaultPrevented property is not overwritable (#5112)\n                preventDefault: function () {\n                    eventArguments.defaultPrevented = true;\n                },\n                // Setting target to native events fails with clicking\n                // the zoom-out button in Chrome.\n                target: el,\n                // If the type is not set, we're running a custom event\n                // (#2297). If it is set, we're running a browser event.\n                type: type\n            });\n        }\n        var events = [];\n        var object = el;\n        var multilevel = false;\n        // Recurse up the inheritance chain and collect hcEvents set as own\n        // objects on the prototypes.\n        while (object.hcEvents) {\n            if (Object.hasOwnProperty.call(object, 'hcEvents') &&\n                object.hcEvents[type]) {\n                if (events.length) {\n                    multilevel = true;\n                }\n                events.unshift.apply(events, object.hcEvents[type]);\n            }\n            object = Object.getPrototypeOf(object);\n        }\n        // For performance reasons, only sort the event handlers in case we are\n        // dealing with multiple levels in the prototype chain. Otherwise, the\n        // events are already sorted in the addEvent function.\n        if (multilevel) {\n            // Order the calls\n            events.sort(function (a, b) { return a.order - b.order; });\n        }\n        // Call the collected event handlers\n        events.forEach(function (obj) {\n            // If the event handler returns false, prevent the default handler\n            // from executing\n            if (obj.fn.call(el, eventArguments) === false) {\n                eventArguments.preventDefault();\n            }\n        });\n    }\n    // Run the default if not prevented\n    if (defaultFunction && !eventArguments.defaultPrevented) {\n        defaultFunction.call(el, eventArguments);\n    }\n}\nvar serialMode;\n/**\n * Get a unique key for using in internal element id's and pointers. The key is\n * composed of a random hash specific to this Highcharts instance, and a\n * counter.\n *\n * @example\n * let id = uniqueKey(); // => 'highcharts-x45f6hp-0'\n *\n * @function Highcharts.uniqueKey\n *\n * @return {string}\n * A unique key.\n */\nvar uniqueKey = (function () {\n    var hash = Math.random().toString(36).substring(2, 9) + '-';\n    var id = 0;\n    return function () {\n        return 'highcharts-' + (serialMode ? '' : hash) + id++;\n    };\n}());\n/**\n * Activates a serial mode for element IDs provided by\n * {@link Highcharts.uniqueKey}. This mode can be used in automated tests, where\n * a simple comparison of two rendered SVG graphics is needed.\n *\n * **Note:** This is only for testing purposes and will break functionality in\n * webpages with multiple charts.\n *\n * @example\n * if (\n *   process &&\n *   process.env.NODE_ENV === 'development'\n * ) {\n *   Highcharts.useSerialIds(true);\n * }\n *\n * @function Highcharts.useSerialIds\n *\n * @param {boolean} [mode]\n * Changes the state of serial mode.\n *\n * @return {boolean|undefined}\n * State of the serial mode.\n */\nfunction useSerialIds(mode) {\n    return (serialMode = pick(mode, serialMode));\n}\nfunction isFunction(obj) {\n    return typeof obj === 'function';\n}\nfunction ucfirst(s) {\n    return ((isString(s) ?\n        s.substring(0, 1).toUpperCase() + s.substring(1) :\n        String(s)));\n}\n/* *\n *\n *  External\n *\n * */\n// Register Highcharts as a plugin in jQuery\nif (win.jQuery) {\n    /**\n     * Highcharts-extended JQuery.\n     *\n     * @external JQuery\n     */\n    /**\n     * Helper function to return the chart of the current JQuery selector\n     * element.\n     *\n     * @function external:JQuery#highcharts\n     *\n     * @return {Highcharts.Chart}\n     *         The chart that is linked to the JQuery selector element.\n     */ /**\n    * Factory function to create a chart in the current JQuery selector\n    * element.\n    *\n    * @function external:JQuery#highcharts\n    *\n    * @param {'Chart'|'Map'|'StockChart'|string} [className]\n    *        Name of the factory class in the Highcharts namespace.\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 {JQuery}\n    *         The current JQuery selector.\n    */\n    win.jQuery.fn.highcharts = function () {\n        var args = [].slice.call(arguments);\n        if (this[0]) { // `this[0]` is the renderTo div\n            // Create the chart\n            if (args[0]) {\n                new Core_Globals[ // eslint-disable-line computed-property-spacing, no-new\n                // Constructor defaults to Chart\n                isString(args[0]) ? args.shift() : 'Chart'](this[0], args[0], args[1]);\n                return this;\n            }\n            // When called without parameters or with the return argument,\n            // return an existing chart\n            return charts[attr(this[0], 'data-highcharts-chart')];\n        }\n    };\n}\n/* *\n *\n *  Default Export\n *\n * */\n// TODO use named exports when supported.\nvar Utilities = {\n    addEvent: addEvent,\n    arrayMax: arrayMax,\n    arrayMin: arrayMin,\n    attr: attr,\n    clamp: clamp,\n    clearTimeout: internalClearTimeout,\n    correctFloat: correctFloat,\n    createElement: createElement,\n    crisp: crisp,\n    css: css,\n    defined: defined,\n    destroyObjectProperties: destroyObjectProperties,\n    diffObjects: diffObjects,\n    discardElement: discardElement,\n    erase: erase,\n    error: error,\n    extend: extend,\n    extendClass: extendClass,\n    find: find,\n    fireEvent: fireEvent,\n    getAlignFactor: getAlignFactor,\n    getClosestDistance: getClosestDistance,\n    getMagnitude: getMagnitude,\n    getNestedProperty: getNestedProperty,\n    getStyle: getStyle,\n    insertItem: insertItem,\n    isArray: isArray,\n    isClass: isClass,\n    isDOMElement: isDOMElement,\n    isFunction: isFunction,\n    isNumber: isNumber,\n    isObject: isObject,\n    isString: isString,\n    merge: merge,\n    normalizeTickInterval: normalizeTickInterval,\n    objectEach: objectEach,\n    offset: offset,\n    pad: pad,\n    pick: pick,\n    pInt: pInt,\n    pushUnique: pushUnique,\n    relativeLength: relativeLength,\n    removeEvent: removeEvent,\n    replaceNested: replaceNested,\n    splat: splat,\n    stableSort: stableSort,\n    syncTimeout: syncTimeout,\n    timeUnits: timeUnits,\n    ucfirst: ucfirst,\n    uniqueKey: uniqueKey,\n    useSerialIds: useSerialIds,\n    wrap: wrap\n};\n/* harmony default export */ var Core_Utilities = (Utilities);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * An animation configuration. Animation configurations can also be defined as\n * booleans, where `false` turns off animation and `true` defaults to a duration\n * of 500ms and defer of 0ms.\n *\n * @interface Highcharts.AnimationOptionsObject\n */ /**\n* A callback function to execute when the animation finishes.\n* @name Highcharts.AnimationOptionsObject#complete\n* @type {Function|undefined}\n*/ /**\n* The animation defer in milliseconds.\n* @name Highcharts.AnimationOptionsObject#defer\n* @type {number|undefined}\n*/ /**\n* The animation duration in milliseconds.\n* @name Highcharts.AnimationOptionsObject#duration\n* @type {number|undefined}\n*/ /**\n* The name of an easing function as defined on the `Math` object.\n* @name Highcharts.AnimationOptionsObject#easing\n* @type {string|Function|undefined}\n*/ /**\n* A callback function to execute on each step of each attribute or CSS property\n* that's being animated. The first argument contains information about the\n* animation and progress.\n* @name Highcharts.AnimationOptionsObject#step\n* @type {Function|undefined}\n*/\n/**\n * Creates a frame for the animated SVG element.\n *\n * @callback Highcharts.AnimationStepCallbackFunction\n *\n * @param {Highcharts.SVGElement} this\n *        The SVG element to animate.\n *\n * @return {void}\n */\n/**\n * Interface description for a class.\n *\n * @interface Highcharts.Class<T>\n * @extends Function\n */ /**\n* Class constructor.\n* @function Highcharts.Class<T>#new\n* @param {...Array<*>} args\n*        Constructor arguments.\n* @return {T}\n*         Class instance.\n*/\n/**\n * A style object with camel case property names to define visual appearance of\n * a SVG element or HTML element. The properties can be whatever styles are\n * supported on the given SVG or HTML element.\n *\n * @example\n * {\n *    fontFamily: 'monospace',\n *    fontSize: '1.2em'\n * }\n *\n * @interface Highcharts.CSSObject\n */ /**\n* @name Highcharts.CSSObject#[key:string]\n* @type {boolean|number|string|undefined}\n*/ /**\n* Background style for the element.\n* @name Highcharts.CSSObject#background\n* @type {string|undefined}\n*/ /**\n* Background color of the element.\n* @name Highcharts.CSSObject#backgroundColor\n* @type {Highcharts.ColorString|undefined}\n*/ /**\n* Border style for the element.\n* @name Highcharts.CSSObject#border\n* @type {string|undefined}\n*/ /**\n* Radius of the element border.\n* @name Highcharts.CSSObject#borderRadius\n* @type {number|undefined}\n*/ /**\n* Color used in the element. The 'contrast' option is a Highcharts custom\n* property that results in black or white, depending on the background of the\n* element.\n* @name Highcharts.CSSObject#color\n* @type {'contrast'|Highcharts.ColorString|undefined}\n*/ /**\n* Style of the mouse cursor when resting over the element.\n* @name Highcharts.CSSObject#cursor\n* @type {Highcharts.CursorValue|undefined}\n*/ /**\n* Font family of the element text. Multiple values have to be in decreasing\n* preference order and separated by comma.\n* @name Highcharts.CSSObject#fontFamily\n* @type {string|undefined}\n*/ /**\n* Font size of the element text.\n* @name Highcharts.CSSObject#fontSize\n* @type {string|undefined}\n*/ /**\n* Font weight of the element text.\n* @name Highcharts.CSSObject#fontWeight\n* @type {string|undefined}\n*/ /**\n* Height of the element.\n* @name Highcharts.CSSObject#height\n* @type {number|undefined}\n*/ /**\n* The maximum number of lines. If lines are cropped away, an ellipsis will be\n* added.\n* @name Highcharts.CSSObject#lineClamp\n* @type {number|undefined}\n*/ /**\n* Width of the element border.\n* @name Highcharts.CSSObject#lineWidth\n* @type {number|undefined}\n*/ /**\n* Opacity of the element.\n* @name Highcharts.CSSObject#opacity\n* @type {number|undefined}\n*/ /**\n* Space around the element content.\n* @name Highcharts.CSSObject#padding\n* @type {string|undefined}\n*/ /**\n* Behaviour of the element when the mouse cursor rests over it.\n* @name Highcharts.CSSObject#pointerEvents\n* @type {string|undefined}\n*/ /**\n* Positioning of the element.\n* @name Highcharts.CSSObject#position\n* @type {string|undefined}\n*/ /**\n* Alignment of the element text.\n* @name Highcharts.CSSObject#textAlign\n* @type {string|undefined}\n*/ /**\n* Additional decoration of the element text.\n* @name Highcharts.CSSObject#textDecoration\n* @type {string|undefined}\n*/ /**\n* Outline style of the element text.\n* @name Highcharts.CSSObject#textOutline\n* @type {string|undefined}\n*/ /**\n* Line break style of the element text. Highcharts SVG elements support\n* `ellipsis` when a `width` is set.\n* @name Highcharts.CSSObject#textOverflow\n* @type {string|undefined}\n*/ /**\n* Top spacing of the element relative to the parent element.\n* @name Highcharts.CSSObject#top\n* @type {string|undefined}\n*/ /**\n* Animated transition of selected element properties.\n* @name Highcharts.CSSObject#transition\n* @type {string|undefined}\n*/ /**\n* Line break style of the element text.\n* @name Highcharts.CSSObject#whiteSpace\n* @type {string|undefined}\n*/ /**\n* Width of the element.\n* @name Highcharts.CSSObject#width\n* @type {number|undefined}\n*/\n/**\n * All possible cursor styles.\n *\n * @typedef {'alias'|'all-scroll'|'auto'|'cell'|'col-resize'|'context-menu'|'copy'|'crosshair'|'default'|'e-resize'|'ew-resize'|'grab'|'grabbing'|'help'|'move'|'n-resize'|'ne-resize'|'nesw-resize'|'no-drop'|'none'|'not-allowed'|'ns-resize'|'nw-resize'|'nwse-resize'|'pointer'|'progress'|'row-resize'|'s-resize'|'se-resize'|'sw-resize'|'text'|'vertical-text'|'w-resize'|'wait'|'zoom-in'|'zoom-out'} Highcharts.CursorValue\n */\n/**\n * All possible dash styles.\n *\n * @typedef {'Dash'|'DashDot'|'Dot'|'LongDash'|'LongDashDot'|'LongDashDotDot'|'ShortDash'|'ShortDashDot'|'ShortDashDotDot'|'ShortDot'|'Solid'} Highcharts.DashStyleValue\n */\n/**\n * Generic dictionary in TypeScript notation.\n * Use the native `AnyRecord` instead.\n *\n * @deprecated\n * @interface Highcharts.Dictionary<T>\n */ /**\n* @name Highcharts.Dictionary<T>#[key:string]\n* @type {T}\n*/\n/**\n * The function callback to execute when the event is fired. The `this` context\n * contains the instance, that fired the event.\n *\n * @callback Highcharts.EventCallbackFunction<T>\n *\n * @param {T} this\n *\n * @param {Highcharts.Dictionary<*>|Event} [eventArguments]\n *        Event arguments.\n *\n * @return {boolean|void}\n */\n/**\n * The event options for adding function callback.\n *\n * @interface Highcharts.EventOptionsObject\n */ /**\n* The order the event handler should be called. This opens for having one\n* handler be called before another, independent of in which order they were\n* added.\n* @name Highcharts.EventOptionsObject#order\n* @type {number}\n*/ /**\n* Whether an event should be passive or not.\n* When set to `true`, the function specified by listener will never call\n* `preventDefault()`.\n* @name Highcharts.EventOptionsObject#passive\n* @type boolean\n*/\n/**\n * Formats data as a string. Usually the data is accessible through the `this`\n * keyword.\n *\n * @callback Highcharts.FormatterCallbackFunction<T>\n *\n * @param {T} this\n *        Context to format\n *\n * @return {string}\n *         Formatted text\n */\n/**\n * An object of key-value pairs for HTML attributes.\n *\n * @typedef {Highcharts.Dictionary<boolean|number|string|Function>} Highcharts.HTMLAttributes\n */\n/**\n * An HTML DOM element. The type is a reference to the regular HTMLElement in\n * the global scope.\n *\n * @typedef {global.HTMLElement} Highcharts.HTMLDOMElement\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement\n */\n/**\n * The iterator callback.\n *\n * @callback Highcharts.ObjectEachCallbackFunction<T>\n *\n * @param {T} this\n *        The context.\n *\n * @param {*} value\n *        The property value.\n *\n * @param {string} key\n *        The property key.\n *\n * @param {*} obj\n *        The object that objectEach is being applied to.\n */\n/**\n * An object containing `left` and `top` properties for the position in the\n * page.\n *\n * @interface Highcharts.OffsetObject\n */ /**\n* Left distance to the page border.\n* @name Highcharts.OffsetObject#left\n* @type {number}\n*/ /**\n* Top distance to the page border.\n* @name Highcharts.OffsetObject#top\n* @type {number}\n*/\n/**\n * Describes a range.\n *\n * @interface Highcharts.RangeObject\n */ /**\n* Maximum number of the range.\n* @name Highcharts.RangeObject#max\n* @type {number}\n*/ /**\n* Minimum number of the range.\n* @name Highcharts.RangeObject#min\n* @type {number}\n*/\n/**\n * If a number is given, it defines the pixel length. If a percentage string is\n * given, like for example `'50%'`, the setting defines a length relative to a\n * base size, for example the size of a container.\n *\n * @typedef {number|string} Highcharts.RelativeSize\n */\n/**\n * Proceed function to call original (wrapped) function.\n *\n * @callback Highcharts.WrapProceedFunction\n *\n * @param {*} [arg1]\n *        Optional argument. Without any arguments defaults to first argument of\n *        the wrapping function.\n *\n * @param {*} [arg2]\n *        Optional argument. Without any arguments defaults to second argument\n *        of the wrapping function.\n *\n * @param {*} [arg3]\n *        Optional argument. Without any arguments defaults to third argument of\n *        the wrapping function.\n *\n * @return {*}\n *         Return value of the original function.\n */\n/**\n * The Highcharts object is the placeholder for all other members, and various\n * utility functions. The most important member of the namespace would be the\n * chart constructor.\n *\n * @example\n * let chart = Highcharts.chart('container', { ... });\n *\n * @namespace Highcharts\n */\n''; // Detach doclets above\n\n;// ./code/es5/es-modules/Core/Chart/ChartDefaults.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 *  API Options\n *\n * */\n/**\n * General options for the chart.\n *\n * @optionparent chart\n */\nvar ChartDefaults = {\n    /**\n     * Default `mapData` for all series, in terms of a GeoJSON or TopoJSON\n     * object. If set to a string, it functions as an index into the\n     * `Highcharts.maps` array.\n     *\n     * For picking out individual shapes and geometries to use for each series\n     * of the map, see [series.mapData](#series.map.mapData).\n     *\n     * @sample    maps/demo/geojson\n     *            Loading GeoJSON data\n     * @sample    maps/chart/topojson\n     *            Loading TopoJSON data\n     *\n     * @type      {string|Array<*>|Highcharts.GeoJSON|Highcharts.TopoJSON}\n     * @since     5.0.0\n     * @product   highmaps\n     * @apioption chart.map\n     */\n    /**\n     * Set lat/lon transformation definitions for the chart. If not defined,\n     * these are extracted from the map data.\n     *\n     * @type      {*}\n     * @since     5.0.0\n     * @product   highmaps\n     * @apioption chart.mapTransforms\n     */\n    /**\n     * When using multiple axes, the ticks of two or more opposite axes\n     * will automatically be aligned by adding ticks to the axis or axes\n     * with the least ticks, as if `tickAmount` were specified.\n     *\n     * This can be prevented by setting `alignTicks` to false. If the grid\n     * lines look messy, it's a good idea to hide them for the secondary\n     * axis by setting `gridLineWidth` to 0.\n     *\n     * If `startOnTick` or `endOnTick` in the axis options are set to false,\n     * then the `alignTicks ` will be disabled for the axis.\n     *\n     * Disabled for logarithmic axes.\n     *\n     * @sample {highcharts} highcharts/chart/alignticks-true/\n     *         True by default\n     * @sample {highcharts} highcharts/chart/alignticks-false/\n     *         False\n     * @sample {highstock} stock/chart/alignticks-true/\n     *         True by default\n     * @sample {highstock} stock/chart/alignticks-false/\n     *         False\n     *\n     * @type      {boolean}\n     * @default   true\n     * @product   highcharts highstock gantt\n     * @apioption chart.alignTicks\n     */\n    /**\n     * When using multiple axes, align the thresholds. When this is true, other\n     * ticks will also be aligned.\n     *\n     * Note that for line series and some other series types, the `threshold`\n     * option is set to `null` by default. This will in turn cause their y-axis\n     * to not have a threshold. In order to avoid that, set the series\n     * `threshold` to 0 or another number.\n     *\n     * If `startOnTick` or `endOnTick` in the axis options are set to false, or\n     * if the axis is logarithmic, the threshold will not be aligned.\n     *\n     * @sample {highcharts} highcharts/chart/alignthresholds/ Set to true\n     *\n     * @since 10.0.0\n     * @product   highcharts highstock gantt\n     * @apioption chart.alignThresholds\n     */\n    alignThresholds: false,\n    /**\n     * Set the overall animation for all chart updating. Animation can be\n     * disabled throughout the chart by setting it to false here. It can\n     * be overridden for each individual API method as a function parameter.\n     * The only animation not affected by this option is the initial series\n     * animation, see [plotOptions.series.animation](\n     * #plotOptions.series.animation).\n     *\n     * The animation can either be set as a boolean or a configuration\n     * object. If `true`, it will use the 'swing' jQuery easing and a\n     * duration of 500 ms. If used as a configuration object, the following\n     * properties are supported:\n     *\n     * - `defer`: The animation delay time in milliseconds.\n     *\n     * - `duration`: The duration of the animation in milliseconds.\n     *\n     * - `easing`: A string reference to an easing function set on the\n     *   `Math` object. See\n     *   [the easing demo](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/plotoptions/series-animation-easing/).\n     *\n     * When zooming on a series with less than 100 points, the chart redraw\n     * will be done with animation, but in case of more data points, it is\n     * necessary to set this option to ensure animation on zoom.\n     *\n     * @sample {highcharts} highcharts/chart/animation-none/\n     *         Updating with no animation\n     * @sample {highcharts} highcharts/chart/animation-duration/\n     *         With a longer duration\n     * @sample {highcharts} highcharts/chart/animation-easing/\n     *         With a jQuery UI easing\n     * @sample {highmaps} maps/chart/animation-none/\n     *         Updating with no animation\n     * @sample {highmaps} maps/chart/animation-duration/\n     *         With a longer duration\n     *\n     * @type      {boolean|Partial<Highcharts.AnimationOptionsObject>}\n     * @default   true\n     * @apioption chart.animation\n     */\n    /**\n     * A CSS class name to apply to the charts container `div`, allowing\n     * unique CSS styling for each chart.\n     *\n     * @type      {string}\n     * @apioption chart.className\n     */\n    /**\n     * Event listeners for the chart.\n     *\n     * @apioption chart.events\n     */\n    /**\n     * Fires when a series is added to the chart after load time, using the\n     * `addSeries` method. One parameter, `event`, is passed to the\n     * function, containing common event information. Through\n     * `event.options` you can access the series options that were passed to\n     * the `addSeries` method. Returning false prevents the series from\n     * being added.\n     *\n     * @sample {highcharts} highcharts/chart/events-addseries/\n     *         Alert on add series\n     * @sample {highstock} stock/chart/events-addseries/\n     *         Alert on add series\n     *\n     * @type      {Highcharts.ChartAddSeriesCallbackFunction}\n     * @since     1.2.0\n     * @context   Highcharts.Chart\n     * @apioption chart.events.addSeries\n     */\n    /**\n     * Fires when clicking on the plot background. One parameter, `event`,\n     * is passed to the function, containing common event information.\n     *\n     * Information on the clicked spot can be found through `event.xAxis`\n     * and `event.yAxis`, which are arrays containing the axes of each\n     * dimension and each axis' value at the clicked spot. The primary axes\n     * are `event.xAxis[0]` and `event.yAxis[0]`. Remember the unit of a\n     * datetime axis is milliseconds since 1970-01-01 00:00:00.\n     *\n     * ```js\n     * click: function(e) {\n     *     console.log(\n     *         Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', e.xAxis[0].value),\n     *         e.yAxis[0].value\n     *     )\n     * }\n     * ```\n     *\n     * @sample {highcharts} highcharts/chart/events-click/\n     *         Alert coordinates on click\n     * @sample {highcharts} highcharts/chart/events-container/\n     *         Alternatively, attach event to container\n     * @sample {highstock} stock/chart/events-click/\n     *         Alert coordinates on click\n     * @sample {highstock} highcharts/chart/events-container/\n     *         Alternatively, attach event to container\n     * @sample {highmaps} maps/chart/events-click/\n     *         Record coordinates on click\n     * @sample {highmaps} highcharts/chart/events-container/\n     *         Alternatively, attach event to container\n     *\n     * @type      {Highcharts.ChartClickCallbackFunction}\n     * @since     1.2.0\n     * @context   Highcharts.Chart\n     * @apioption chart.events.click\n     */\n    /**\n     * Fires when the chart is finished loading. Since v4.2.2, it also waits\n     * for images to be loaded, for example from point markers. One\n     * parameter, `event`, is passed to the function, containing common\n     * event information.\n     *\n     * There is also a second parameter to the chart constructor where a\n     * callback function can be passed to be executed on chart.load.\n     *\n     * @sample {highcharts} highcharts/chart/events-load/\n     *         Alert on chart load\n     * @sample {highcharts} highcharts/chart/events-render/\n     *         Load vs Redraw vs Render\n     * @sample {highstock} stock/chart/events-load/\n     *         Alert on chart load\n     * @sample {highmaps} maps/chart/events-load/\n     *         Add series on chart load\n     *\n     * @type      {Highcharts.ChartLoadCallbackFunction}\n     * @context   Highcharts.Chart\n     * @apioption chart.events.load\n     */\n    /**\n     * Fires when the chart is redrawn, either after a call to\n     * `chart.redraw()` or after an axis, series or point is modified with\n     * the `redraw` option set to `true`. One parameter, `event`, is passed\n     * to the function, containing common event information.\n     *\n     * @sample {highcharts} highcharts/chart/events-redraw/\n     *         Alert on chart redraw\n     * @sample {highcharts} highcharts/chart/events-render/\n     *         Load vs Redraw vs Render\n     * @sample {highstock} stock/chart/events-redraw/\n     *         Alert on chart redraw when adding a series or moving the\n     *         zoomed range\n     * @sample {highmaps} maps/chart/events-redraw/\n     *         Set subtitle on chart redraw\n     *\n     * @type      {Highcharts.ChartRedrawCallbackFunction}\n     * @since     1.2.0\n     * @context   Highcharts.Chart\n     * @apioption chart.events.redraw\n     */\n    /**\n     * Fires after initial load of the chart (directly after the `load`\n     * event), and after each redraw (directly after the `redraw` event).\n     *\n     * @sample {highcharts} highcharts/chart/events-render/\n     *         Load vs Redraw vs Render\n     *\n     * @type      {Highcharts.ChartRenderCallbackFunction}\n     * @since     5.0.7\n     * @context   Highcharts.Chart\n     * @apioption chart.events.render\n     */\n    /**\n     * Fires when an area of the chart has been selected. Selection is\n     * enabled by setting the chart's zoomType. One parameter, `event`, is\n     * passed to the function, containing common event information. The\n     * default action for the selection event is to zoom the chart to the\n     * selected area. It can be prevented by calling\n     * `event.preventDefault()` or return false.\n     *\n     * Information on the selected area can be found through `event.xAxis`\n     * and `event.yAxis`, which are arrays containing the axes of each\n     * dimension and each axis' min and max values. The primary axes are\n     * `event.xAxis[0]` and `event.yAxis[0]`. Remember the unit of a\n     * datetime axis is milliseconds since 1970-01-01 00:00:00.\n     *\n     * ```js\n     * selection: function(event) {\n     *     // log the min and max of the primary, datetime x-axis\n     *     console.log(\n     *         Highcharts.dateFormat(\n     *             '%Y-%m-%d %H:%M:%S',\n     *             event.xAxis[0].min\n     *         ),\n     *         Highcharts.dateFormat(\n     *             '%Y-%m-%d %H:%M:%S',\n     *             event.xAxis[0].max\n     *         )\n     *     );\n     *     // log the min and max of the y axis\n     *     console.log(event.yAxis[0].min, event.yAxis[0].max);\n     * }\n     * ```\n     *\n     * @sample {highcharts} highcharts/chart/events-selection/\n     *         Report on selection and reset\n     * @sample {highcharts} highcharts/chart/events-selection-points/\n     *         Select a range of points through a drag selection\n     * @sample {highstock} stock/chart/events-selection/\n     *         Report on selection and reset\n     * @sample {highstock} highcharts/chart/events-selection-points/\n     *         Select a range of points through a drag selection\n     *         (Highcharts)\n     *\n     * @type      {Highcharts.ChartSelectionCallbackFunction}\n     * @apioption chart.events.selection\n     */\n    /**\n     * The margin between the outer edge of the chart and the plot area.\n     * The numbers in the array designate top, right, bottom and left\n     * respectively. Use the options `marginTop`, `marginRight`,\n     * `marginBottom` and `marginLeft` for shorthand setting of one option.\n     *\n     * By default there is no margin. The actual space is dynamically\n     * calculated from the offset of axis labels, axis title, title,\n     * subtitle and legend in addition to the `spacingTop`, `spacingRight`,\n     * `spacingBottom` and `spacingLeft` options.\n     *\n     * @sample {highcharts} highcharts/chart/margins-zero/\n     *         Zero margins\n     * @sample {highstock} stock/chart/margin-zero/\n     *         Zero margins\n     *\n     * @type      {number|Array<number>}\n     * @apioption chart.margin\n     */\n    /**\n     * The margin between the bottom outer edge of the chart and the plot\n     * area. Use this to set a fixed pixel value for the margin as opposed\n     * to the default dynamic margin. See also `spacingBottom`.\n     *\n     * @sample {highcharts} highcharts/chart/marginbottom/\n     *         100px bottom margin\n     * @sample {highstock} stock/chart/marginbottom/\n     *         100px bottom margin\n     * @sample {highmaps} maps/chart/margin/\n     *         100px margins\n     *\n     * @type      {number}\n     * @since     2.0\n     * @apioption chart.marginBottom\n     */\n    /**\n     * The margin between the left outer edge of the chart and the plot\n     * area. Use this to set a fixed pixel value for the margin as opposed\n     * to the default dynamic margin. See also `spacingLeft`.\n     *\n     * @sample {highcharts} highcharts/chart/marginleft/\n     *         150px left margin\n     * @sample {highstock} stock/chart/marginleft/\n     *         150px left margin\n     * @sample {highmaps} maps/chart/margin/\n     *         100px margins\n     *\n     * @type      {number}\n     * @since     2.0\n     * @apioption chart.marginLeft\n     */\n    /**\n     * The margin between the right outer edge of the chart and the plot\n     * area. Use this to set a fixed pixel value for the margin as opposed\n     * to the default dynamic margin. See also `spacingRight`.\n     *\n     * @sample {highcharts} highcharts/chart/marginright/\n     *         100px right margin\n     * @sample {highstock} stock/chart/marginright/\n     *         100px right margin\n     * @sample {highmaps} maps/chart/margin/\n     *         100px margins\n     *\n     * @type      {number}\n     * @since     2.0\n     * @apioption chart.marginRight\n     */\n    /**\n     * The margin between the top outer edge of the chart and the plot area.\n     * Use this to set a fixed pixel value for the margin as opposed to\n     * the default dynamic margin. See also `spacingTop`.\n     *\n     * @sample {highcharts} highcharts/chart/margintop/ 100px top margin\n     * @sample {highstock} stock/chart/margintop/\n     *         100px top margin\n     * @sample {highmaps} maps/chart/margin/\n     *         100px margins\n     *\n     * @type      {number}\n     * @since     2.0\n     * @apioption chart.marginTop\n     */\n    /**\n     * Callback function to override the default function that formats all\n     * the numbers in the chart. Returns a string with the formatted number.\n     *\n     * @sample highcharts/members/highcharts-numberformat\n     *      Arabic digits in Highcharts\n     * @type {Highcharts.NumberFormatterCallbackFunction}\n     * @since 8.0.0\n     * @apioption chart.numberFormatter\n     */\n    /**\n     * When a chart with an x and a y-axis is rendered, we first pre-render the\n     * labels of both in order to measure them. Then, if either of the axis\n     * labels take up so much space that it significantly affects the length of\n     * the other axis, we repeat the process.\n     *\n     * By default we stop at two axis layout runs, but it may be that the second\n     * run also alter the space required by either axis, for example if it\n     * causes the labels to rotate. In this situation, a subsequent redraw of\n     * the chart may cause the tick and label placement to change for apparently\n     * no reason.\n     *\n     * Use the `axisLayoutRuns` option to set the maximum allowed number of\n     * repetitions. But keep in mind that the default value of 2 is set because\n     * every run costs performance time.\n     *\n     * **Note:** Changing that option to higher than the default might decrease\n     * performance significantly, especially with bigger sets of data.\n     *\n     * @type      {number}\n     * @default   2\n     * @since     11.3.0\n     * @apioption chart.axisLayoutRuns\n     */\n    /**\n     * Allows setting a key to switch between zooming and panning. Can be\n     * one of `alt`, `ctrl`, `meta` (the command key on Mac and Windows\n     * key on Windows) or `shift`. The keys are mapped directly to the key\n     * properties of the click event argument (`event.altKey`,\n     * `event.ctrlKey`, `event.metaKey` and `event.shiftKey`).\n     *\n     * @type       {string}\n     * @since      4.0.3\n     * @product    highcharts gantt\n     * @validvalue [\"alt\", \"ctrl\", \"meta\", \"shift\"]\n     * @apioption  chart.panKey\n     */\n    /**\n     * Allow panning in a chart. Best used with [panKey](#chart.panKey)\n     * to combine zooming and panning.\n     *\n     * On touch devices, when the [tooltip.followTouchMove](\n     * #tooltip.followTouchMove) option is `true` (default), panning\n     * requires two fingers. To allow panning with one finger, set\n     * `followTouchMove` to `false`.\n     *\n     * @sample  {highcharts} highcharts/chart/pankey/ Zooming and panning\n     * @sample  {highstock} stock/chart/panning/ Zooming and xy panning\n     */\n    panning: {\n        /**\n         * Enable or disable chart panning.\n         *\n         * @type      {boolean}\n         * @default   {highcharts} false\n         * @default   {highstock|highmaps} true\n         */\n        enabled: false,\n        /**\n         * Decides in what dimensions the user can pan the chart. Can be\n         * one of `x`, `y`, or `xy`.\n         *\n         * During panning, all axes will behave as if\n         * [`startOnTick`](#yAxis.startOnTick) and\n         * [`endOnTick`](#yAxis.endOnTick) were set to `false`. After the\n         * panning action is finished, the axes will adjust to their actual\n         * settings.\n         *\n         * @sample {highcharts} highcharts/chart/panning-type\n         *         Zooming and xy panning\n         *\n         * @declare    Highcharts.OptionsChartPanningTypeValue\n         * @type       {string}\n         * @validvalue [\"x\", \"y\", \"xy\"]\n         * @product    highcharts highstock gantt\n         */\n        type: 'x'\n    },\n    /**\n     * Equivalent to [zoomType](#chart.zoomType), but for multitouch\n     * gestures only. By default, the `pinchType` is the same as the\n     * `zoomType` setting. However, pinching can be enabled separately in\n     * some cases, for example in stock charts where a mouse drag pans the\n     * chart, while pinching is enabled. When [tooltip.followTouchMove](\n     * #tooltip.followTouchMove) is true, pinchType only applies to\n     * two-finger touches.\n     *\n     * @type       {string}\n     * @default    {highcharts} undefined\n     * @default    {highstock} undefined\n     * @since      3.0\n     * @product    highcharts highstock gantt\n     * @deprecated\n     * @validvalue [\"x\", \"y\", \"xy\"]\n     * @apioption  chart.pinchType\n     */\n    /**\n     * Whether to apply styled mode. When in styled mode, no presentational\n     * attributes or CSS are applied to the chart SVG. Instead, CSS rules\n     * are required to style the chart. The default style sheet is\n     * available from `https://code.highcharts.com/css/highcharts.css`.\n     *\n     * [Read more in the docs](https://www.highcharts.com/docs/chart-design-and-style/style-by-css)\n     * on what classes and variables are available.\n     *\n     * @sample highcharts/css/colors\n     *         Color theming with CSS\n     * @sample highcharts/css/prefers-color-scheme\n     *         Dynamic theme based on system settings\n     * @type       {boolean}\n     * @default    false\n     * @since      7.0\n     * @apioption  chart.styledMode\n     */\n    styledMode: false,\n    /**\n     * The corner radius of the outer chart border.\n     *\n     * @sample {highcharts} highcharts/chart/borderradius/\n     *         20px radius\n     * @sample {highstock} stock/chart/border/\n     *         10px radius\n     * @sample {highmaps} maps/chart/border/\n     *         Border options\n     *\n     */\n    borderRadius: 0,\n    /**\n     * In styled mode, this sets how many colors the class names\n     * should rotate between. With ten colors, series (or points) are\n     * given class names like `highcharts-color-0`, `highcharts-color-1`\n     * [...] `highcharts-color-9`. The equivalent in non-styled mode\n     * is to set colors using the [colors](#colors) setting.\n     *\n     * @since      5.0.0\n     */\n    colorCount: 10,\n    /**\n     * By default, (because of memory and performance reasons) the chart does\n     * not copy the data but keeps it as a reference. In some cases, this might\n     * result in mutating the original data source. In order to prevent that,\n     * set that property to false. Please note that changing that might decrease\n     * performance, especially with bigger sets of data.\n     *\n     * @type       {boolean}\n     * @since 10.1.0\n     */\n    allowMutatingData: true,\n    /**\n     * If true, the axes will scale to the remaining visible series once\n     * one series is hidden. If false, hiding and showing a series will\n     * not affect the axes or the other series. For stacks, once one series\n     * within the stack is hidden, the rest of the stack will close in\n     * around it even if the axis is not affected.\n     *\n     * @sample {highcharts} highcharts/chart/ignorehiddenseries-true/\n     *         True by default\n     * @sample {highcharts} highcharts/chart/ignorehiddenseries-false/\n     *         False\n     * @sample {highcharts} highcharts/chart/ignorehiddenseries-true-stacked/\n     *         True with stack\n     * @sample {highstock} stock/chart/ignorehiddenseries-true/\n     *         True by default\n     * @sample {highstock} stock/chart/ignorehiddenseries-false/\n     *         False\n     *\n     * @since   1.2.0\n     * @product highcharts highstock gantt\n     */\n    ignoreHiddenSeries: true,\n    /**\n     * Whether to invert the axes so that the x axis is vertical and y axis\n     * is horizontal. When `true`, the x axis is [reversed](#xAxis.reversed)\n     * by default.\n     *\n     * @productdesc {highcharts}\n     * If a bar series is present in the chart, it will be inverted\n     * automatically. Inverting the chart doesn't have an effect if there\n     * are no cartesian series in the chart.\n     *\n     * @sample {highcharts} highcharts/chart/inverted/\n     *         Inverted line\n     * @sample {highstock} stock/navigator/inverted/\n     *         Inverted stock chart\n     *\n     * @type      {boolean}\n     * @default   false\n     * @product   highcharts highstock gantt\n     * @apioption chart.inverted\n     */\n    /**\n     * The distance between the outer edge of the chart and the content,\n     * like title or legend, or axis title and labels if present. The\n     * numbers in the array designate top, right, bottom and left\n     * respectively. Use the options spacingTop, spacingRight, spacingBottom\n     * and spacingLeft options for shorthand setting of one option.\n     *\n     * @type    {Array<number>}\n     * @see     [chart.margin](#chart.margin)\n     * @default [10, 10, 15, 10]\n     * @since   3.0.6\n     */\n    spacing: [10, 10, 15, 10],\n    /**\n     * The button that appears after a selection zoom, allowing the user\n     * to reset zoom. This option is deprecated in favor of\n     * [zooming](#chart.zooming).\n     *\n     * @since      2.2\n     * @deprecated 10.2.1\n     */\n    resetZoomButton: {\n        /**\n         * What frame the button placement should be related to. Can be\n         * either `plotBox` or `spacingBox`.\n         *\n         * @sample {highcharts} highcharts/chart/resetzoombutton-relativeto/\n         *         Relative to the chart\n         * @sample {highstock} highcharts/chart/resetzoombutton-relativeto/\n         *         Relative to the chart\n         *\n         * @type      {Highcharts.ButtonRelativeToValue}\n         * @apioption chart.resetZoomButton.relativeTo\n         */\n        /**\n         * A collection of attributes for the button. The object takes SVG\n         * attributes like `fill`, `stroke`, `stroke-width` or `r`, the\n         * border radius. The theme also supports `style`, a collection of\n         * CSS properties for the text. Equivalent attributes for the hover\n         * state are given in `theme.states.hover`.\n         *\n         * @sample {highcharts} highcharts/chart/resetzoombutton-theme/\n         *         Theming the button\n         * @sample {highstock} highcharts/chart/resetzoombutton-theme/\n         *         Theming the button\n         *\n         * @type {Highcharts.SVGAttributes}\n         */\n        theme: {\n        /**\n         * The z-index of the button.\n         *\n         * @type {number}\n         * @apioption chart.resetZoomButton.theme.zIndex\n         */\n        },\n        /**\n         * The position of the button.\n         *\n         * @sample {highcharts} highcharts/chart/resetzoombutton-position/\n         *         Above the plot area\n         * @sample {highstock} highcharts/chart/resetzoombutton-position/\n         *         Above the plot area\n         * @sample {highmaps} highcharts/chart/resetzoombutton-position/\n         *         Above the plot area\n         *\n         * @type {Highcharts.AlignObject}\n         */\n        position: {\n        /**\n         * The horizontal alignment of the button.\n         *\n         * @type {number}\n         * @apioption chart.resetZoomButton.position.align\n         */\n        /**\n         * The horizontal offset of the button.\n         *\n         * @type {number}\n         * @apioption chart.resetZoomButton.position.x\n         */\n        /**\n         * The vertical alignment of the button.\n         *\n         * @type      {Highcharts.VerticalAlignValue}\n         * @apioption chart.resetZoomButton.position.verticalAlign\n         */\n        /**\n         * The vertical offset of the button.\n         *\n         * @type {number}\n         * @apioption chart.resetZoomButton.position.y\n         */\n        }\n    },\n    /**\n     * The pixel width of the plot area border.\n     *\n     * @sample {highcharts} highcharts/chart/plotborderwidth/\n     *         1px border\n     * @sample {highstock} stock/chart/plotborder/\n     *         2px border\n     * @sample {highmaps} maps/chart/plotborder/\n     *         Plot border options\n     *\n     * @type      {number}\n     * @default   0\n     * @apioption chart.plotBorderWidth\n     */\n    /**\n     * Whether to apply a drop shadow to the plot area. Requires that\n     * plotBackgroundColor be set. The shadow can be an object configuration\n     * containing `color`, `offsetX`, `offsetY`, `opacity` and `width`.\n     *\n     * @sample {highcharts} highcharts/chart/plotshadow/\n     *         Plot shadow\n     * @sample {highstock} stock/chart/plotshadow/\n     *         Plot shadow\n     * @sample {highmaps} maps/chart/plotborder/\n     *         Plot border options\n     *\n     * @type      {boolean|Highcharts.ShadowOptionsObject}\n     * @default   false\n     * @apioption chart.plotShadow\n     */\n    /**\n     * When true, cartesian charts like line, spline, area and column are\n     * transformed into the polar coordinate system. This produces _polar\n     * charts_, also known as _radar charts_.\n     *\n     * @sample {highcharts} highcharts/demo/polar/\n     *         Polar chart\n     * @sample {highcharts} highcharts/demo/polar-wind-rose/\n     *         Wind rose, stacked polar column chart\n     * @sample {highcharts} highcharts/demo/polar-spider/\n     *         Spider web chart\n     * @sample {highcharts} highcharts/parallel-coordinates/polar/\n     *         Star plot, multivariate data in a polar chart\n     *\n     * @type      {boolean}\n     * @default   false\n     * @since     2.3.0\n     * @product   highcharts\n     * @requires  highcharts-more\n     * @apioption chart.polar\n     */\n    /**\n     * Whether to reflow the chart to fit the width of the container div\n     * on resizing the window.\n     *\n     * @sample {highcharts} highcharts/chart/reflow-true/\n     *         True by default\n     * @sample {highcharts} highcharts/chart/reflow-false/\n     *         False\n     * @sample {highstock} stock/chart/reflow-true/\n     *         True by default\n     * @sample {highstock} stock/chart/reflow-false/\n     *         False\n     * @sample {highmaps} maps/chart/reflow-true/\n     *         True by default\n     * @sample {highmaps} maps/chart/reflow-false/\n     *         False\n     *\n     * @since     2.1\n     */\n    reflow: true,\n    /**\n     * The HTML element where the chart will be rendered. If it is a string,\n     * the element by that id is used. The HTML element can also be passed\n     * by direct reference, or as the first argument of the chart\n     * constructor, in which case the option is not needed.\n     *\n     * @sample {highcharts} highcharts/chart/reflow-true/\n     *         String\n     * @sample {highcharts} highcharts/chart/renderto-object/\n     *         Object reference\n     * @sample {highstock} stock/chart/renderto-string/\n     *         String\n     * @sample {highstock} stock/chart/renderto-object/\n     *         Object reference\n     *\n     * @type      {string|Highcharts.HTMLDOMElement}\n     * @apioption chart.renderTo\n     */\n    /**\n     * The background color of the marker square when selecting (zooming\n     * in on) an area of the chart.\n     *\n     * @see In styled mode, the selection marker fill is set with the\n     *      `.highcharts-selection-marker` class.\n     *\n     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @default   rgba(51,92,173,0.25)\n     * @since     2.1.7\n     * @apioption chart.selectionMarkerFill\n     */\n    /**\n     * Whether to apply a drop shadow to the global series group. This causes\n     * all the series to have the same shadow. Contrary to the `series.shadow`\n     * option, this prevents items from casting shadows on each other, like for\n     * others series in a stack. The shadow can be an object configuration\n     * containing `color`, `offsetX`, `offsetY`, `opacity` and `width`.\n     *\n     * @sample highcharts/chart/seriesgroupshadow/ Shadow\n     *\n     * @type      {boolean|Highcharts.ShadowOptionsObject}\n     * @default   false\n     * @apioption chart.shadow\n     */\n    /**\n     * Whether to apply a drop shadow to the outer chart area. Requires\n     * that backgroundColor be set. The shadow can be an object\n     * configuration containing `color`, `offsetX`, `offsetY`, `opacity` and\n     * `width`.\n     *\n     * @sample {highcharts} highcharts/chart/shadow/\n     *         Shadow\n     * @sample {highstock} stock/chart/shadow/\n     *         Shadow\n     * @sample {highmaps} maps/chart/border/\n     *         Chart border and shadow\n     *\n     * @type      {boolean|Highcharts.ShadowOptionsObject}\n     * @default   false\n     * @apioption chart.shadow\n     */\n    /**\n     * Whether to show the axes initially. This only applies to empty charts\n     * where series are added dynamically, as axes are automatically added\n     * to cartesian series.\n     *\n     * @sample {highcharts} highcharts/chart/showaxes-false/\n     *         False by default\n     * @sample {highcharts} highcharts/chart/showaxes-true/\n     *         True\n     *\n     * @type      {boolean}\n     * @since     1.2.5\n     * @product   highcharts gantt\n     * @apioption chart.showAxes\n     */\n    /**\n     * The space between the bottom edge of the chart and the content (plot\n     * area, axis title and labels, title, subtitle or legend in top\n     * position).\n     *\n     * @sample {highcharts} highcharts/chart/spacingbottom/\n     *         Spacing bottom set to 100\n     * @sample {highstock} stock/chart/spacingbottom/\n     *         Spacing bottom set to 100\n     * @sample {highmaps} maps/chart/spacing/\n     *         Spacing 100 all around\n     *\n     * @type      {number}\n     * @default   15\n     * @since     2.1\n     * @apioption chart.spacingBottom\n     */\n    /**\n     * The space between the left edge of the chart and the content (plot\n     * area, axis title and labels, title, subtitle or legend in top\n     * position).\n     *\n     * @sample {highcharts} highcharts/chart/spacingleft/\n     *         Spacing left set to 100\n     * @sample {highstock} stock/chart/spacingleft/\n     *         Spacing left set to 100\n     * @sample {highmaps} maps/chart/spacing/\n     *         Spacing 100 all around\n     *\n     * @type      {number}\n     * @default   10\n     * @since     2.1\n     * @apioption chart.spacingLeft\n     */\n    /**\n     * The space between the right edge of the chart and the content (plot\n     * area, axis title and labels, title, subtitle or legend in top\n     * position).\n     *\n     * @sample {highcharts} highcharts/chart/spacingright-100/\n     *         Spacing set to 100\n     * @sample {highcharts} highcharts/chart/spacingright-legend/\n     *         Legend in right position with default spacing\n     * @sample {highstock} stock/chart/spacingright/\n     *         Spacing set to 100\n     * @sample {highmaps} maps/chart/spacing/\n     *         Spacing 100 all around\n     *\n     * @type      {number}\n     * @default   10\n     * @since     2.1\n     * @apioption chart.spacingRight\n     */\n    /**\n     * The space between the top edge of the chart and the content (plot\n     * area, axis title and labels, title, subtitle or legend in top\n     * position).\n     *\n     * @sample {highcharts} highcharts/chart/spacingtop-100/\n     *         A top spacing of 100\n     * @sample {highcharts} highcharts/chart/spacingtop-10/\n     *         Floating chart title makes the plot area align to the default\n     *         spacingTop of 10.\n     * @sample {highstock} stock/chart/spacingtop/\n     *         A top spacing of 100\n     * @sample {highmaps} maps/chart/spacing/\n     *         Spacing 100 all around\n     *\n     * @type      {number}\n     * @default   10\n     * @since     2.1\n     * @apioption chart.spacingTop\n     */\n    /**\n     * Additional CSS styles to apply inline to the container `div` and the root\n     * SVG.\n     *\n     * According to the CSS syntax documentation, it is recommended to quote\n     * font family names that contain white space, digits, or punctuation\n     * characters other than hyphens. In such cases, wrap the fontFamily\n     * name as follows: `fontFamily: '\"Font name\"'`.\n     *\n     * Since v11, the root font size is 1rem by default, and all child element\n     * are given a relative `em` font size by default. This allows implementers\n     * to control all the chart's font sizes by only setting the root level.\n     *\n     * @see    In styled mode, general chart styles can be set with the\n     *         `.highcharts-root` class.\n     * @sample {highcharts} highcharts/chart/style-serif-font/\n     *         Using a serif type font\n     * @sample {highcharts} highcharts/chart/style-special-font/\n     *         Using a font with special character in name\n     * @sample {highcharts} highcharts/members/relative-font-size/\n     *         Relative font sizes\n     * @sample {highcharts} highcharts/css/em/\n     *         Styled mode with relative font sizes\n     * @sample {highstock} stock/chart/style/\n     *         Using a serif type font\n     * @sample {highmaps} maps/chart/style-serif-font/\n     *         Using a serif type font\n     *\n     * @type      {Highcharts.CSSObject}\n     * @default   {\"fontFamily\": \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', sans-serif\", \"fontSize\":\"1rem\"}\n     * @apioption chart.style\n     */\n    /**\n     * The default series type for the chart. Can be any of the chart types\n     * listed under [plotOptions](#plotOptions) and [series](#series) or can\n     * be a series provided by an additional module.\n     *\n     * In TypeScript this option has no effect in sense of typing and\n     * instead the `type` option must always be set in the series.\n     *\n     * @sample {highcharts} highcharts/chart/type-bar/\n     *         Bar\n     * @sample {highstock} stock/chart/type/\n     *         Areaspline\n     * @sample {highmaps} maps/chart/type-mapline/\n     *         Mapline\n     *\n     * @type       {string}\n     * @default    {highcharts} line\n     * @default    {highstock} line\n     * @default    {highmaps} map\n     * @since      2.1.0\n     * @apioption  chart.type\n     */\n    type: 'line',\n    /**\n     * Decides in what dimensions the user can zoom by dragging the mouse.\n     * Can be one of `x`, `y` or `xy`.\n     *\n     * @see [panKey](#chart.panKey)\n     *\n     * @sample {highcharts} highcharts/chart/zoomtype-none/\n     *         None by default\n     * @sample {highcharts} highcharts/chart/zoomtype-x/\n     *         X\n     * @sample {highcharts} highcharts/chart/zoomtype-y/\n     *         Y\n     * @sample {highcharts} highcharts/chart/zoomtype-xy/\n     *         Xy\n     * @sample {highcharts} highcharts/chart/zoomtype-polar/\n     *         Zoom on polar chart\n     * @sample {highstock} stock/demo/basic-line/\n     *         None by default\n     * @sample {highstock} stock/chart/zoomtype-x/\n     *         X\n     * @sample {highstock} stock/chart/zoomtype-y/\n     *         Y\n     * @sample {highstock} stock/chart/zoomtype-xy/\n     *         Xy\n     * @sample {highmaps} maps/chart/zoomtype-xy/\n     *         Map with selection zoom\n     *\n     * @type       {string}\n     * @validvalue [\"x\", \"y\", \"xy\"]\n     * @deprecated\n     * @apioption  chart.zoomType\n     */\n    /**\n     * Enables zooming by a single touch, in combination with\n     * [chart.zoomType](#chart.zoomType). When enabled, two-finger pinch\n     * will still work as set up by [chart.pinchType](#chart.pinchType).\n     * However, `zoomBySingleTouch` will interfere with touch-dragging the\n     * chart to read the tooltip. And especially when vertical zooming is\n     * enabled, it will make it hard to scroll vertically on the page.\n     * @since      9.0.0\n     * @sample     highcharts/chart/zoombysingletouch\n     *             Zoom by single touch enabled, with buttons to toggle\n     * @product    highcharts highstock gantt\n     * @deprecated\n     */\n    /**\n     * Chart zooming options.\n     * @since 10.2.1\n     */\n    zooming: {\n        /**\n         * Equivalent to [type](#chart.zooming.type), but for multitouch\n         * gestures only. By default, the `pinchType` is the same as the\n         * `type` setting. However, pinching can be enabled separately in\n         * some cases, for example in stock charts where a mouse drag pans the\n         * chart, while pinching is enabled. When [tooltip.followTouchMove](\n         * #tooltip.followTouchMove) is true, pinchType only applies to\n         * two-finger touches.\n         *\n         * @type       {string}\n         * @default    {highcharts} undefined\n         * @default    {highstock} x\n         * @product    highcharts highstock gantt\n         * @validvalue [\"x\", \"y\", \"xy\"]\n         * @apioption  chart.zooming.pinchType\n         */\n        /**\n         * Decides in what dimensions the user can zoom by dragging the mouse.\n         * Can be one of `x`, `y` or `xy`.\n         *\n         * @declare    Highcharts.OptionsChartZoomingTypeValue\n         * @type       {string}\n         * @default    {highcharts} undefined\n         * @product    highcharts highstock gantt\n         * @validvalue [\"x\", \"y\", \"xy\"]\n         * @apioption  chart.zooming.type\n         */\n        /**\n         * Set a key to hold when dragging to zoom the chart. This is useful to\n         * avoid zooming while moving points. Should be set different than\n         * [chart.panKey](#chart.panKey).\n         *\n         * @type       {string}\n         * @default    {highcharts} undefined\n         * @validvalue [\"alt\", \"ctrl\", \"meta\", \"shift\"]\n         * @requires   modules/draggable-points\n         * @apioption  chart.zooming.key\n         */\n        /**\n         * Enables zooming by a single touch, in combination with\n         * [chart.zooming.type](#chart.zooming.type). When enabled, two-finger\n         * pinch will still work as set up by [chart.zooming.pinchType]\n         * (#chart.zooming.pinchType). However, `singleTouch` will interfere\n         * with touch-dragging the chart to read the tooltip. And especially\n         * when vertical zooming is enabled, it will make it hard to scroll\n         * vertically on the page.\n         *\n         * @sample  highcharts/chart/zoombysingletouch\n         *          Zoom by single touch enabled, with buttons to toggle\n         *\n         * @product highcharts highstock gantt\n         */\n        singleTouch: false,\n        /**\n         * The button that appears after a selection zoom, allowing the user\n         * to reset zoom.\n         */\n        resetButton: {\n            /**\n             * What frame the button placement should be related to. Can be\n             * either `plotBox` or `spacingBox`.\n             *\n             * @sample {highcharts} highcharts/chart/resetzoombutton-relativeto/\n             *         Relative to the chart\n             * @sample {highstock} highcharts/chart/resetzoombutton-relativeto/\n             *         Relative to the chart\n             *\n             * @type      {Highcharts.ButtonRelativeToValue}\n             * @default   plot\n             * @apioption chart.zooming.resetButton.relativeTo\n             */\n            /**\n             * A collection of attributes for the button. The object takes SVG\n             * attributes like `fill`, `stroke`, `stroke-width` or `r`, the\n             * border radius. The theme also supports `style`, a collection of\n             * CSS properties for the text. Equivalent attributes for the hover\n             * state are given in `theme.states.hover`.\n             *\n             * @sample {highcharts} highcharts/chart/resetzoombutton-theme/\n             *         Theming the button\n             * @sample {highstock} highcharts/chart/resetzoombutton-theme/\n             *         Theming the button\n             *\n             * @type  {Highcharts.SVGAttributes}\n             * @since 10.2.1\n             */\n            theme: {\n                /** @internal */\n                zIndex: 6\n            },\n            /**\n             * The position of the button.\n             *\n             * Note: Adjusting position values might cause overlap with chart\n             * elements. Ensure coordinates do not obstruct other components or\n             * data visibility.\n             *\n             * @sample {highcharts} highcharts/chart/resetzoombutton-position/\n             *         Above the plot area\n             * @sample {highstock} highcharts/chart/resetzoombutton-position/\n             *         Above the plot area\n             * @sample {highmaps} highcharts/chart/resetzoombutton-position/\n             *         Above the plot area\n             *\n             * @type  {Highcharts.AlignObject}\n             * @since 10.2.1\n             */\n            position: {\n                /**\n                 * The horizontal alignment of the button.\n                 */\n                align: 'right',\n                /**\n                 * The horizontal offset of the button.\n                 */\n                x: -10,\n                /**\n                 * The vertical alignment of the button.\n                 *\n                 * @type       {Highcharts.VerticalAlignValue}\n                 * @default    top\n                 * @apioption  chart.zooming.resetButton.position.verticalAlign\n                 */\n                /**\n                 * The vertical offset of the button.\n                 */\n                y: 10\n            }\n        }\n    },\n    /**\n     * An explicit width for the chart. By default (when `null`) the width\n     * is calculated from the offset width of the containing element.\n     *\n     * @sample {highcharts} highcharts/chart/width/\n     *         800px wide\n     * @sample {highstock} stock/chart/width/\n     *         800px wide\n     * @sample {highmaps} maps/chart/size/\n     *         Chart with explicit size\n     *\n     * @type {null|number|string}\n     */\n    width: null,\n    /**\n     * An explicit height for the chart. If a _number_, the height is\n     * given in pixels. If given a _percentage string_ (for example\n     * `'56%'`), the height is given as the percentage of the actual chart\n     * width. This allows for preserving the aspect ratio across responsive\n     * sizes.\n     *\n     * By default (when `null`) the height is calculated from the offset\n     * height of the containing element, or 400 pixels if the containing\n     * element's height is 0.\n     *\n     * @sample {highcharts} highcharts/chart/height/\n     *         Forced 200px height\n     * @sample {highstock} stock/chart/height/\n     *         300px height\n     * @sample {highmaps} maps/chart/size/\n     *         Chart with explicit size\n     * @sample highcharts/chart/height-percent/\n     *         Highcharts with percentage height\n     * @sample highcharts/chart/height-inherited/\n     *         Chart with inherited height\n     *\n     * @type {null|number|string}\n     */\n    height: null,\n    /**\n     * The color of the outer chart border.\n     *\n     * @see In styled mode, the stroke is set with the\n     *      `.highcharts-background` class.\n     *\n     * @sample {highcharts} highcharts/chart/bordercolor/\n     *         Brown border\n     * @sample {highstock} stock/chart/border/\n     *         Brown border\n     * @sample {highmaps} maps/chart/border/\n     *         Border options\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    borderColor: \"#334eff\" /* Palette.highlightColor80 */,\n    /**\n     * The pixel width of the outer chart border.\n     *\n     * @see In styled mode, the stroke is set with the\n     *      `.highcharts-background` class.\n     *\n     * @sample {highcharts} highcharts/chart/borderwidth/\n     *         5px border\n     * @sample {highstock} stock/chart/border/\n     *         2px border\n     * @sample {highmaps} maps/chart/border/\n     *         Border options\n     *\n     * @type      {number}\n     * @default   0\n     * @apioption chart.borderWidth\n     */\n    /**\n     * The background color or gradient for the outer chart area.\n     *\n     * @see In styled mode, the background is set with the\n     *      `.highcharts-background` class.\n     *\n     * @sample {highcharts} highcharts/chart/backgroundcolor-color/\n     *         Color\n     * @sample {highcharts} highcharts/chart/backgroundcolor-gradient/\n     *         Gradient\n     * @sample {highstock} stock/chart/backgroundcolor-color/\n     *         Color\n     * @sample {highstock} stock/chart/backgroundcolor-gradient/\n     *         Gradient\n     * @sample {highmaps} maps/chart/backgroundcolor-color/\n     *         Color\n     * @sample {highmaps} maps/chart/backgroundcolor-gradient/\n     *         Gradient\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    backgroundColor: \"#ffffff\" /* Palette.backgroundColor */,\n    /**\n     * The background color or gradient for the plot area.\n     *\n     * @see In styled mode, the plot background is set with the\n     *      `.highcharts-plot-background` class.\n     *\n     * @sample {highcharts} highcharts/chart/plotbackgroundcolor-color/\n     *         Color\n     * @sample {highcharts} highcharts/chart/plotbackgroundcolor-gradient/\n     *         Gradient\n     * @sample {highstock} stock/chart/plotbackgroundcolor-color/\n     *         Color\n     * @sample {highstock} stock/chart/plotbackgroundcolor-gradient/\n     *         Gradient\n     * @sample {highmaps} maps/chart/plotbackgroundcolor-color/\n     *         Color\n     * @sample {highmaps} maps/chart/plotbackgroundcolor-gradient/\n     *         Gradient\n     *\n     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @apioption chart.plotBackgroundColor\n     */\n    /**\n     * The URL for an image to use as the plot background. To set an image\n     * as the background for the entire chart, set a CSS background image\n     * to the container element. Note that for the image to be applied to\n     * exported charts, its URL needs to be accessible by the export server.\n     *\n     * @see In styled mode, a plot background image can be set with the\n     *      `.highcharts-plot-background` class and a [custom pattern](\n     *      https://www.highcharts.com/docs/chart-design-and-style/gradients-shadows-and-patterns).\n     *\n     * @sample {highcharts} highcharts/chart/plotbackgroundimage/\n     *         Skies\n     * @sample {highstock} stock/chart/plotbackgroundimage/\n     *         Skies\n     *\n     * @type      {string}\n     * @apioption chart.plotBackgroundImage\n     */\n    /**\n     * The color of the inner chart or plot area border.\n     *\n     * @see In styled mode, a plot border stroke can be set with the\n     *      `.highcharts-plot-border` class.\n     *\n     * @sample {highcharts} highcharts/chart/plotbordercolor/\n     *         Blue border\n     * @sample {highstock} stock/chart/plotborder/\n     *         Blue border\n     * @sample {highmaps} maps/chart/plotborder/\n     *         Plot border options\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    plotBorderColor: \"#cccccc\" /* Palette.neutralColor20 */\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Chart_ChartDefaults = (ChartDefaults);\n\n;// ./code/es5/es-modules/Core/Color/Palettes.js\n/*\n * Series palettes for Highcharts. Series colors are defined in highcharts.css.\n * **Do not edit this file!** This file is generated using the 'gulp palette' task.\n */\nvar SeriesPalettes = {\n    /**\n     * Colors for data series and points\n     */\n    colors: [\n        '#2caffe',\n        '#544fc5',\n        '#00e272',\n        '#fe6a35',\n        '#6b8abc',\n        '#d568fb',\n        '#2ee0ca',\n        '#fa4b42',\n        '#feb56a',\n        '#91e8e1'\n    ],\n};\n/* harmony default export */ var Palettes = (SeriesPalettes);\n\n;// ./code/es5/es-modules/Core/Time.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar pageLang = Core_Globals.pageLang, Time_win = Core_Globals.win;\n\nvar Time_defined = Core_Utilities.defined, Time_error = Core_Utilities.error, Time_extend = Core_Utilities.extend, Time_isNumber = Core_Utilities.isNumber, Time_isObject = Core_Utilities.isObject, Time_isString = Core_Utilities.isString, Time_merge = Core_Utilities.merge, Time_objectEach = Core_Utilities.objectEach, Time_pad = Core_Utilities.pad, Time_splat = Core_Utilities.splat, Time_timeUnits = Core_Utilities.timeUnits, Time_ucfirst = Core_Utilities.ucfirst;\n/* *\n *\n *  Constants\n *\n * */\n// To do: Remove this when we no longer need support for Safari < v14.1\nvar hasOldSafariBug = Core_Globals.isSafari &&\n    Time_win.Intl &&\n    !Time_win.Intl.DateTimeFormat.prototype.formatRange;\nvar isDateTimeFormatOptions = function (obj) {\n    return obj.main === void 0;\n};\n// We use the Spanish locale for internal weekday handling because it uses\n// unique letters for narrow weekdays\nvar spanishWeekdayIndex = function (weekday) {\n    return ['D', 'L', 'M', 'X', 'J', 'V', 'S'].indexOf(weekday);\n};\n/* *\n *\n *  Class\n *\n * */\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/**\n * The Time class. Time settings are applied in general for each page using\n * `Highcharts.setOptions`, or individually for each Chart item through the\n * [time](https://api.highcharts.com/highcharts/time) options set.\n *\n * The Time object is available from {@link Highcharts.Chart#time}, which refers\n * to  `Highcharts.time` unless individual time settings are applied for each\n * chart.\n *\n * When configuring time settings for individual chart instances, be aware that\n * using `Highcharts.dateFormat` or `Highcharts.time.dateFormat` within\n * formatter callbacks relies on the global time object, which applies the\n * global language and time zone settings. To ensure charts with local time\n * settings function correctly, use `chart.time.dateFormat? instead. However,\n * the recommended best practice is to use `setOptions` to define global time\n * settings unless specific configurations are needed for each chart.\n *\n * @example\n * // Apply time settings globally\n * Highcharts.setOptions({\n *     time: {\n *         timezone: 'Europe/London'\n *     }\n * });\n *\n * // Apply time settings by instance\n * const chart = Highcharts.chart('container', {\n *     time: {\n *         timezone: 'America/New_York'\n *     },\n *     series: [{\n *         data: [1, 4, 3, 5]\n *     }]\n * });\n *\n * // Use the Time object of a chart instance\n * console.log(\n *        'Current time in New York',\n *        chart.time.dateFormat('%Y-%m-%d %H:%M:%S', Date.now())\n * );\n *\n * // Standalone use\n * const time = new Highcharts.Time({\n *    timezone: 'America/New_York'\n * });\n * const s = time.dateFormat('%Y-%m-%d %H:%M:%S', Date.UTC(2020, 0, 1));\n * console.log(s); // => 2019-12-31 19:00:00\n *\n * @since 6.0.5\n *\n * @class\n * @name Highcharts.Time\n *\n * @param {Highcharts.TimeOptions} [options] Time options as defined in\n * [chart.options.time](/highcharts/time).\n */\nvar Time = /** @class */ (function () {\n    /* *\n     *\n     *  Constructors\n     *\n     * */\n    function Time(options) {\n        /* *\n         *\n         *  Properties\n         *\n         * */\n        this.options = {\n            timezone: 'UTC'\n        };\n        this.variableTimezone = false;\n        this.Date = Time_win.Date;\n        this.update(options);\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Update the Time object with current options. It is called internally on\n     * initializing Highcharts, after running `Highcharts.setOptions` and on\n     * `Chart.update`.\n     *\n     * @private\n     * @function Highcharts.Time#update\n     *\n     * @param {Highcharts.TimeOptions} [options]\n     *\n     */\n    Time.prototype.update = function (options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        this.dTLCache = {};\n        this.options = options = Time_merge(true, this.options, options);\n        var timezoneOffset = options.timezoneOffset,\n            useUTC = options.useUTC;\n        // Allow using a different Date class\n        this.Date = options.Date || Time_win.Date || Date;\n        // Assign the time zone. Handle the legacy, deprecated `useUTC` option.\n        var timezone = options.timezone;\n        if (Time_defined(useUTC)) {\n            timezone = useUTC ? 'UTC' : void 0;\n        }\n        // The Etc/GMT time zones do not support offsets with half-hour\n        // resolutions\n        if (timezoneOffset && timezoneOffset % 60 === 0) {\n            timezone = 'Etc/GMT' + ((timezoneOffset > 0 ? '+' : '')) + timezoneOffset / 60;\n        }\n        /*\n         * The time object has options allowing for variable time zones, meaning\n         * the axis ticks or series data needs to consider this.\n         */\n        this.variableTimezone = timezone !== 'UTC' &&\n            (timezone === null || timezone === void 0 ? void 0 : timezone.indexOf('Etc/GMT')) !== 0;\n        this.timezone = timezone;\n        // Assign default time formats from locale strings\n        ['months', 'shortMonths', 'weekdays', 'shortWeekdays'].forEach(function (name) {\n            var isMonth = /months/i.test(name), isShort = /short/.test(name), options = { timeZone: 'UTC' };\n            options[isMonth ? 'month' : 'weekday'] = isShort ? 'short' : 'long';\n            _this[name] = (isMonth ?\n                [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] :\n                [3, 4, 5, 6, 7, 8, 9]).map(function (position) { return _this.dateFormat(options, (isMonth ? 31 : 1) * 24 * 36e5 * position); });\n        });\n    };\n    /**\n     * Get a date in terms of numbers (year, month, day etc) for further\n     * processing. Takes the current `timezone` setting into account. Inverse of\n     * `makeTime` and the native `Date` constructor and `Date.UTC`.\n     *\n     * The date is returned in array format with the following indices:\n     *\n     * 0: year,\n     * 1: month (zero based),\n     * 2: day,\n     * 3: hours,\n     * 4: minutes,\n     * 5: seconds,\n     * 6: milliseconds,\n     * 7: weekday (Sunday as 0)\n     *\n     * @function Highcharts.Time#toParts\n     *\n     * @param {number|Date} [timestamp]\n     *                 The timestamp in milliseconds since January 1st 1970.\n     *                 A Date object is also accepted.\n     *\n     * @return {Array<number>} The date parts in array format.\n     */\n    Time.prototype.toParts = function (timestamp) {\n        var _a = this.dateTimeFormat({\n                weekday: 'narrow',\n                day: 'numeric',\n                month: 'numeric',\n                year: 'numeric',\n                hour: 'numeric',\n                minute: 'numeric',\n                second: 'numeric'\n            }, timestamp, 'es')\n                .split(/(?:, |\\/|:)/g), weekday = _a[0], dayOfMonth = _a[1], month = _a[2], year = _a[3], hours = _a[4], minutes = _a[5], seconds = _a[6];\n        return [\n            year,\n            +month - 1,\n            dayOfMonth,\n            hours,\n            minutes,\n            seconds,\n            // Milliseconds\n            Math.floor(Number(timestamp) || 0) % 1000,\n            // Weekday index\n            spanishWeekdayIndex(weekday)\n        ].map(Number);\n    };\n    /**\n     * Shorthand to get a cached `Intl.DateTimeFormat` instance.\n     */\n    Time.prototype.dateTimeFormat = function (options, timestamp, locale) {\n        var _a;\n        if (locale === void 0) { locale = this.options.locale || pageLang; }\n        var cacheKey = JSON.stringify(options) + locale;\n        if (Time_isString(options)) {\n            options = this.str2dtf(options);\n        }\n        var dTL = this.dTLCache[cacheKey];\n        if (!dTL) {\n            (_a = options.timeZone) !== null && _a !== void 0 ? _a : (options.timeZone = this.timezone);\n            try {\n                dTL = new Intl.DateTimeFormat(locale, options);\n            }\n            catch (e) {\n                if (/Invalid time zone/i.test(e.message)) {\n                    Time_error(34);\n                    options.timeZone = 'UTC';\n                    dTL = new Intl.DateTimeFormat(locale, options);\n                }\n                else {\n                    Time_error(e.message, false);\n                }\n            }\n        }\n        this.dTLCache[cacheKey] = dTL;\n        return (dTL === null || dTL === void 0 ? void 0 : dTL.format(timestamp)) || '';\n    };\n    /**\n     * Take a locale-aware string format and return a full DateTimeFormat in\n     * object form.\n     */\n    Time.prototype.str2dtf = function (s, dtf) {\n        if (dtf === void 0) { dtf = {}; }\n        var mapping = {\n                L: { fractionalSecondDigits: 3 },\n                S: { second: '2-digit' },\n                M: { minute: 'numeric' },\n                H: { hour: '2-digit' },\n                k: { hour: 'numeric' },\n                E: { weekday: 'narrow' },\n                a: { weekday: 'short' },\n                A: { weekday: 'long' },\n                d: { day: '2-digit' },\n                e: { day: 'numeric' },\n                b: { month: 'short' },\n                B: { month: 'long' },\n                m: { month: '2-digit' },\n                o: { month: 'numeric' },\n                y: { year: '2-digit' },\n                Y: { year: 'numeric' }\n            };\n        Object.keys(mapping).forEach(function (key) {\n            if (s.indexOf(key) !== -1) {\n                Time_extend(dtf, mapping[key]);\n            }\n        });\n        return dtf;\n    };\n    /**\n     * Make a time and returns milliseconds. Similar to `Date.UTC`, but takes\n     * the current `timezone` setting into account.\n     *\n     * @function Highcharts.Time#makeTime\n     *\n     * @param {number} year\n     *        The year\n     *\n     * @param {number} month\n     *        The month. Zero-based, so January is 0.\n     *\n     * @param {number} [date=1]\n     *        The day of the month\n     *\n     * @param {number} [hours=0]\n     *        The hour of the day, 0-23.\n     *\n     * @param {number} [minutes=0]\n     *        The minutes\n     *\n     * @param {number} [seconds=0]\n     *        The seconds\n     *\n     * @return {number}\n     *         The time in milliseconds since January 1st 1970.\n     */\n    Time.prototype.makeTime = function (year, month, date, hours, minutes, seconds, milliseconds) {\n        if (date === void 0) { date = 1; }\n        if (hours === void 0) { hours = 0; }\n        // eslint-disable-next-line new-cap\n        var d = this.Date.UTC(year,\n            month,\n            date,\n            hours,\n            minutes || 0,\n            seconds || 0,\n            milliseconds || 0);\n        if (this.timezone !== 'UTC') {\n            var offset = this.getTimezoneOffset(d);\n            d += offset;\n            // Adjustments close to DST transitions\n            if (\n            // Optimize for speed by limiting the number of calls to\n            // `getTimezoneOffset`. According to\n            // https://en.wikipedia.org/wiki/Daylight_saving_time_by_country,\n            // DST change may only occur in these months.\n            [2, 3, 8, 9, 10, 11].indexOf(month) !== -1 &&\n                // DST transitions occur only in the night-time\n                (hours < 5 || hours > 20)) {\n                var newOffset = this.getTimezoneOffset(d);\n                if (offset !== newOffset) {\n                    d += newOffset - offset;\n                    // A special case for transitioning from summer time to winter\n                    // time. When the clock is set back, the same time is repeated\n                    // twice, i.e. 02:30 am is repeated since the clock is set back\n                    // from 3 am to 2 am. We need to make the same time as local\n                    // Date does.\n                }\n                else if (offset - 36e5 === this.getTimezoneOffset(d - 36e5) &&\n                    !hasOldSafariBug) {\n                    d -= 36e5;\n                }\n            }\n        }\n        return d;\n    };\n    /**\n     * Parse a datetime string. Unless the string contains time zone\n     * information, apply the current `timezone` from options. If the argument\n     * is a number, return it.\n     *\n     * @function Highcharts.Time#parse\n     * @param    {string|number|undefined} s The datetime string to parse\n     * @return   {number|undefined}          Parsed JavaScript timestamp\n     */\n    Time.prototype.parse = function (s) {\n        if (!Time_isString(s)) {\n            return s !== null && s !== void 0 ? s : void 0;\n        }\n        s = s\n            // Firefox fails on YYYY/MM/DD\n            .replace(/\\//g, '-')\n            // Replace some non-standard notations\n            .replace(/(GMT|UTC)/, '');\n        // Extend shorthand hour timezone offset like +02\n        // .replace(/([+-][0-9]{2})$/, '$1:00');\n        // Check if the string has time zone information\n        var hasTimezone = s.indexOf('Z') > -1 ||\n                /([+-][0-9]{2}):?[0-9]{2}$/.test(s), isYYYYMMDD = /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/.test(s);\n        if (!hasTimezone && !isYYYYMMDD) {\n            s += 'Z';\n        }\n        var ts = Date.parse(s);\n        if (Time_isNumber(ts)) {\n            // Unless the string contains time zone information, convert from\n            // the local time result of `Date.parse` via UTC into the current\n            // timezone of the time object.\n            return ts + ((!hasTimezone || isYYYYMMDD) ?\n                this.getTimezoneOffset(ts) :\n                0);\n        }\n    };\n    /**\n     * Get the time zone offset based on the current timezone information as\n     * set in the global options.\n     *\n     * @function Highcharts.Time#getTimezoneOffset\n     *\n     * @param {number} timestamp\n     *        The JavaScript timestamp to inspect.\n     *\n     * @return {number}\n     *         The timezone offset in minutes compared to UTC.\n     */\n    Time.prototype.getTimezoneOffset = function (timestamp) {\n        if (this.timezone !== 'UTC') {\n            // eslint-disable-next-line @typescript-eslint/no-unused-vars\n            var _a = this.dateTimeFormat({ timeZoneName: 'shortOffset' }, timestamp, 'en')\n                    .split(/(GMT|:)/)\n                    .map(Number), date = _a[0], gmt = _a[1], hours = _a[2], colon = _a[3], _b = _a[4], minutes = _b === void 0 ? 0 : _b, offset = -(hours + minutes / 60) * 60 * 60000;\n            // Possible future NaNs stop here\n            if (Time_isNumber(offset)) {\n                return offset;\n            }\n        }\n        return 0;\n    };\n    /**\n     * Formats a JavaScript date timestamp (milliseconds since January 1 1970)\n     * into a human readable date string.\n     *\n     * The `format` parameter accepts two types of values:\n     * - An object containing settings that are passed directly on to\n     *   [Intl.DateTimeFormat.prototype.format](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/format).\n     * - A format string containing either individual or locale-aware format\n     *   keys. **Individual keys**, for example `%Y-%m-%d`, are listed below.\n     *   **Locale-aware keys** are grouped by square brackets, for example\n     *   `%[Ymd]`. The order of keys within the square bracket doesn't affect\n     *   the output, which is determined by the locale. See example below.\n     *   Internally, the locale-aware format keys are just a shorthand for the\n     *   full object formats, but are particularly practical in\n     *   [templating](https://www.highcharts.com/docs/chart-concepts/templating)\n     *   where full object definitions are not an option.\n     *\n     * The available string format keys are listed below. Additional formats can\n     * be given in the {@link Highcharts.dateFormats} hook.\n     *\n     * Supported format keys:\n     * | Key  | Description                     | Notes on locale-aware format |\n     * -------|----------------------------------------------|-------|\n     * | `%A` | Long weekday, like 'Monday'                  |       |\n     * | `%a` | Short weekday, like 'Mon'                    |       |\n     * | `%E` | Narrow weekday, single character             |       |\n     * | `%d` | Two digit day of the month, 01 to 31         |       |\n     * | `%e` | Day of the month, 1 through 31               |       |\n     * | `%w` | Day of the week, 0 through 6                 | N/A   |\n     * | `%b` | Short month, like 'Jan'                      |       |\n     * | `%B` | Long month, like 'January'                   |       |\n     * | `%m` | Two digit month number, 01 through 12        |       |\n     * | `%o` | Month number, 1 through 12                   |       |\n     * | `%y` | Two digits year, like 24 for 2024            |       |\n     * | `%Y` | Four digits year, like 2024                  |       |\n     * | `%H` | Two digits hours in 24h format, 00 through 23 | Depending on the locale, 12h format may be instered. |\n     * | `%k` | Hours in 24h format, 0 through 23            | Depending on the locale, 12h format may be instered. |\n     * | `%I` | Two digits hours in 12h format, 00 through 11 | N/A. The locale determines the hour format. |\n     * | `%l` | Hours in 12h format, 1 through 12            | N/A. The locale determines the hour format. |\n     * | `%M` | Two digits minutes, 00 through 59            |       |\n     * | `%p` | Upper case AM or PM                          | N/A. The locale determines whether to add AM and PM. |\n     * | `%P` | Lower case AM or PM                          | N/A. The locale determines whether to add AM and PM. |\n     * | `%S` | Two digits seconds, 00 through 59            |       |\n     * | `%L` | Milliseconds (naming from Ruby)              |       |\n     *\n     * @example\n     * // Object format, US English\n     * const time1 = new Highcharts.Time({ locale: 'en-US' });\n     * console.log(\n     *     time1.dateFormat({\n     *         day: 'numeric',\n     *         month: 'short',\n     *         year: 'numeric',\n     *         hour: 'numeric',\n     *         minute: 'numeric'\n     *     }, Date.UTC(2024, 11, 31))\n     * ); // => Dec 31, 2024, 12:00 AM\n     *\n     * // Object format, British English\n     * const time2 = new Highcharts.Time({ locale: 'en-GB' });\n     * console.log(\n     *     time2.dateFormat({\n     *         day: 'numeric',\n     *         month: 'short',\n     *         year: 'numeric',\n     *         hour: 'numeric',\n     *         minute: 'numeric'\n     *     }, Date.UTC(2024, 11, 31))\n     * ); // => 31 Dec 2024, 00:00\n     *\n     * // Individual key string replacement\n     * const time3 = new Highcharts.Time();\n     * console.log(\n     *     time3.dateFormat('%Y-%m-%d %H:%M:%S', Date.UTC(2024, 11, 31))\n     * ); // => 2024-12-31 00:00:00\n     *\n     * // Locale-aware keys, US English\n     * const time4 = new Highcharts.Time({ locale: 'en-US' });\n     * console.log(\n     *     time4.dateFormat('%[YebHM]', Date.UTC(2024, 11, 31))\n     * ); // => Dec 31, 2024, 12:00 AM\n     *\n     * // Locale-aware keys, British English\n     * const time5 = new Highcharts.Time({ locale: 'en-GB' });\n     * console.log(\n     *     time5.dateFormat('%[YebHM]', Date.UTC(2024, 11, 31))\n     * ); // => 31 Dec 2024, 00:00\n     *\n     * // Mixed locale-aware and individual keys\n     * console.log(\n     *     time5.dateFormat('%[Yeb], %H:%M', Date.UTC(2024, 11, 31))\n     * ); // => 31 Dec 2024, 00:00\n     *\n     * @function Highcharts.Time#dateFormat\n     *\n     * @param {string|Highcharts.DateTimeFormatOptions} format\n     *        The desired string format where various time representations are\n     *        prefixed with %, or an object representing the locale-aware format\n     *        options.\n     *\n     * @param {number} [timestamp]\n     *        The JavaScript timestamp.\n     *\n     * @param {boolean} [upperCaseFirst=false]\n     *        Upper case first letter in the return.\n     *\n     * @return {string}\n     *         The formatted date.\n     */\n    Time.prototype.dateFormat = function (format, timestamp, upperCaseFirst) {\n        var _a;\n        var lang = (_a = Core_Globals.defaultOptions) === null || _a === void 0 ? void 0 : _a.lang;\n        if (!Time_defined(timestamp) || isNaN(timestamp)) {\n            return (lang === null || lang === void 0 ? void 0 : lang.invalidDate) || '';\n        }\n        format = format !== null && format !== void 0 ? format : '%Y-%m-%d %H:%M:%S';\n        // First, identify and replace locale-aware formats like %[Ymd]\n        if (Time_isString(format)) {\n            var localeAwareRegex = /%\\[([a-zA-Z]+)\\]/g;\n            var match = void 0;\n            while ((match = localeAwareRegex.exec(format))) {\n                format = format.replace(match[0], this.dateTimeFormat(match[1], timestamp));\n            }\n        }\n        // Then, replace static formats like %Y, %m, %d etc.\n        if (Time_isString(format) && format.indexOf('%') !== -1) {\n            var time_1 = this,\n                _b = this.toParts(timestamp),\n                fullYear = _b[0],\n                month = _b[1],\n                dayOfMonth = _b[2],\n                hours = _b[3],\n                minutes = _b[4],\n                seconds = _b[5],\n                milliseconds = _b[6],\n                weekday = _b[7],\n                langWeekdays = (lang === null || lang === void 0 ? void 0 : lang.weekdays) || this.weekdays,\n                shortWeekdays = (lang === null || lang === void 0 ? void 0 : lang.shortWeekdays) || this.shortWeekdays,\n                months = (lang === null || lang === void 0 ? void 0 : lang.months) || this.months,\n                shortMonths = (lang === null || lang === void 0 ? void 0 : lang.shortMonths) || this.shortMonths, \n                // List all format keys. Custom formats can be added from the\n                // outside.\n                replacements = Time_extend({\n                    // Day\n                    // Short weekday, like 'Mon'\n                    a: shortWeekdays ?\n                        shortWeekdays[weekday] :\n                        langWeekdays[weekday].substr(0, 3),\n                    // Long weekday, like 'Monday'\n                    A: langWeekdays[weekday],\n                    // Two digit day of the month, 01 to 31\n                    d: Time_pad(dayOfMonth),\n                    // Day of the month, 1 through 31\n                    e: Time_pad(dayOfMonth, 2, ' '),\n                    // Day of the week, 0 through 6\n                    w: weekday,\n                    // Week (none implemented)\n                    // 'W': weekNumber(),\n                    // Month\n                    // Short month, like 'Jan'\n                    b: shortMonths[month],\n                    // Long month, like 'January'\n                    B: months[month],\n                    // Two digit month number, 01 through 12\n                    m: Time_pad(month + 1),\n                    // Month number, 1 through 12 (#8150)\n                    o: month + 1,\n                    // Year\n                    // Two digits year, like 09 for 2009\n                    y: fullYear.toString().substr(2, 2),\n                    // Four digits year, like 2009\n                    Y: fullYear,\n                    // Time\n                    // Two digits hours in 24h format, 00 through 23\n                    H: Time_pad(hours),\n                    // Hours in 24h format, 0 through 23\n                    k: hours,\n                    // Two digits hours in 12h format, 00 through 11\n                    I: Time_pad((hours % 12) || 12),\n                    // Hours in 12h format, 1 through 12\n                    l: (hours % 12) || 12,\n                    // Two digits minutes, 00 through 59\n                    M: Time_pad(minutes),\n                    // Upper case AM or PM\n                    p: hours < 12 ? 'AM' : 'PM',\n                    // Lower case AM or PM\n                    P: hours < 12 ? 'am' : 'pm',\n                    // Two digits seconds, 00 through 59\n                    S: Time_pad(seconds),\n                    // Milliseconds (naming from Ruby)\n                    L: Time_pad(milliseconds, 3)\n                },\n                Core_Globals.dateFormats);\n            // Do the replaces\n            Time_objectEach(replacements, function (val, key) {\n                if (Time_isString(format)) {\n                    // Regex would do it in one line, but this is faster\n                    while (format.indexOf('%' + key) !== -1) {\n                        format = format.replace('%' + key, typeof val === 'function' ?\n                            val.call(time_1, timestamp) :\n                            val);\n                    }\n                }\n            });\n        }\n        else if (Time_isObject(format)) {\n            var tzHours = (this.getTimezoneOffset(timestamp) || 0) /\n                    (60000 * 60), timeZone = this.timezone || ('Etc/GMT' + (tzHours >= 0 ? '+' : '') + tzHours), _c = format.prefix, prefix = _c === void 0 ? '' : _c, _d = format.suffix, suffix = _d === void 0 ? '' : _d;\n            format = prefix + this.dateTimeFormat(Time_extend({ timeZone: timeZone }, format), timestamp) + suffix;\n        }\n        // Optionally sentence-case the string and return\n        return upperCaseFirst ? Time_ucfirst(format) : format;\n    };\n    /**\n     * Resolve legacy formats of dateTimeLabelFormats (strings and arrays) into\n     * an object.\n     * @private\n     * @param {string|Array<T>|Highcharts.Dictionary<T>} f\n     * General format description\n     * @return {Highcharts.Dictionary<T>}\n     * The object definition\n     */\n    Time.prototype.resolveDTLFormat = function (f) {\n        if (!Time_isObject(f, true)) { // Check for string or array\n            f = Time_splat(f);\n            return {\n                main: f[0],\n                from: f[1],\n                to: f[2]\n            };\n        }\n        // Type-check DateTimeFormatOptions against DateTimeLabelFormatObject\n        if (Time_isObject(f, true) && isDateTimeFormatOptions(f)) {\n            return { main: f };\n        }\n        return f;\n    };\n    /**\n     * Return an array with time positions distributed on round time values\n     * right and right after min and max. Used in datetime axes as well as for\n     * grouping data on a datetime axis.\n     *\n     * @function Highcharts.Time#getTimeTicks\n     *\n     * @param {Highcharts.TimeNormalizedObject} normalizedInterval\n     *        The interval in axis values (ms) and the count\n     *\n     * @param {number} [min]\n     *        The minimum in axis values\n     *\n     * @param {number} [max]\n     *        The maximum in axis values\n     *\n     * @param {number} [startOfWeek=1]\n     *\n     * @return {Highcharts.AxisTickPositionsArray}\n     * Time positions\n     */\n    Time.prototype.getTimeTicks = function (normalizedInterval, min, max, startOfWeek) {\n        var time = this,\n            tickPositions = [],\n            higherRanks = {},\n            _a = normalizedInterval.count,\n            count = _a === void 0 ? 1 : _a,\n            unitRange = normalizedInterval.unitRange;\n        var _b = time.toParts(min),\n            year = _b[0],\n            month = _b[1],\n            dayOfMonth = _b[2],\n            hours = _b[3],\n            minutes = _b[4],\n            seconds = _b[5],\n            milliseconds = (min || 0) % 1000,\n            variableDayLength;\n        startOfWeek !== null && startOfWeek !== void 0 ? startOfWeek : (startOfWeek = 1);\n        if (Time_defined(min)) { // #1300\n            milliseconds = unitRange >= Time_timeUnits.second ?\n                0 : // #3935\n                count * Math.floor(milliseconds / count);\n            if (unitRange >= Time_timeUnits.second) { // Second\n                seconds = unitRange >= Time_timeUnits.minute ?\n                    0 : // #3935\n                    count * Math.floor(seconds / count);\n            }\n            if (unitRange >= Time_timeUnits.minute) { // Minute\n                minutes = unitRange >= Time_timeUnits.hour ?\n                    0 :\n                    count * Math.floor(minutes / count);\n            }\n            if (unitRange >= Time_timeUnits.hour) { // Hour\n                hours = unitRange >= Time_timeUnits.day ?\n                    0 :\n                    count * Math.floor(hours / count);\n            }\n            if (unitRange >= Time_timeUnits.day) { // Day\n                dayOfMonth = unitRange >= Time_timeUnits.month ?\n                    1 :\n                    Math.max(1, count * Math.floor(dayOfMonth / count));\n            }\n            if (unitRange >= Time_timeUnits.month) { // Month\n                month = unitRange >= Time_timeUnits.year ? 0 :\n                    count * Math.floor(month / count);\n            }\n            if (unitRange >= Time_timeUnits.year) { // Year\n                year -= year % count;\n            }\n            // Week is a special case that runs outside the hierarchy\n            if (unitRange === Time_timeUnits.week) {\n                if (count) {\n                    min = time.makeTime(year, month, dayOfMonth, hours, minutes, seconds, milliseconds);\n                }\n                // Get start of current week, independent of count\n                var weekday = this.dateTimeFormat({\n                        timeZone: this.timezone,\n                        weekday: 'narrow'\n                    },\n                    min, 'es'),\n                    weekdayNo = spanishWeekdayIndex(weekday);\n                dayOfMonth += -weekdayNo + startOfWeek +\n                    // We don't want to skip days that are before\n                    // startOfWeek (#7051)\n                    (weekdayNo < startOfWeek ? -7 : 0);\n            }\n            min = time.makeTime(year, month, dayOfMonth, hours, minutes, seconds, milliseconds);\n            // Handle local timezone offset\n            if (time.variableTimezone && Time_defined(max)) {\n                // Detect whether we need to take the DST crossover into\n                // consideration. If we're crossing over DST, the day length may\n                // be 23h or 25h and we need to compute the exact clock time for\n                // each tick instead of just adding hours. This comes at a cost,\n                // so first we find out if it is needed (#4951).\n                variableDayLength = (\n                // Long range, assume we're crossing over.\n                max - min > 4 * Time_timeUnits.month ||\n                    // Short range, check if min and max are in different time\n                    // zones.\n                    time.getTimezoneOffset(min) !==\n                        time.getTimezoneOffset(max));\n            }\n            // Iterate and add tick positions at appropriate values\n            var t = min,\n                i = 1;\n            while (t < max) {\n                tickPositions.push(t);\n                // Increase the years\n                if (unitRange === Time_timeUnits.year) {\n                    t = time.makeTime(year + i * count, 0);\n                    // Increase the months\n                }\n                else if (unitRange === Time_timeUnits.month) {\n                    t = time.makeTime(year, month + i * count);\n                    // If we're using local time, the interval is not fixed as it\n                    // jumps one hour at the DST crossover\n                }\n                else if (variableDayLength && (unitRange === Time_timeUnits.day ||\n                    unitRange === Time_timeUnits.week)) {\n                    t = time.makeTime(year, month, dayOfMonth +\n                        i * count * (unitRange === Time_timeUnits.day ? 1 : 7));\n                }\n                else if (variableDayLength &&\n                    unitRange === Time_timeUnits.hour &&\n                    count > 1) {\n                    // Make sure higher ranks are preserved across DST (#6797,\n                    // #7621)\n                    t = time.makeTime(year, month, dayOfMonth, hours + i * count);\n                    // Else, the interval is fixed and we use simple addition\n                }\n                else {\n                    t += unitRange * count;\n                }\n                i++;\n            }\n            // Push the last time\n            tickPositions.push(t);\n            // Handle higher ranks. Mark new days if the time is on midnight\n            // (#950, #1649, #1760, #3349). Use a reasonable dropout threshold\n            // to prevent looping over dense data grouping (#6156).\n            if (unitRange <= Time_timeUnits.hour && tickPositions.length < 10000) {\n                tickPositions.forEach(function (t) {\n                    if (\n                    // Speed optimization, no need to run dateFormat unless\n                    // we're on a full or half hour\n                    t % 1800000 === 0 &&\n                        // Check for local or global midnight\n                        time.dateFormat('%H%M%S%L', t) === '000000000') {\n                        higherRanks[t] = 'day';\n                    }\n                });\n            }\n        }\n        // Record information on the chosen unit - for dynamic label formatter\n        tickPositions.info = Time_extend(normalizedInterval, {\n            higherRanks: higherRanks,\n            totalRange: unitRange * count\n        });\n        return tickPositions;\n    };\n    /**\n     * Get the optimal date format for a point, based on a range.\n     *\n     * @private\n     * @function Highcharts.Time#getDateFormat\n     *\n     * @param {number} range\n     *        The time range\n     *\n     * @param {number} timestamp\n     *        The timestamp of the date\n     *\n     * @param {number} startOfWeek\n     *        An integer representing the first day of the week, where 0 is\n     *        Sunday.\n     *\n     * @param {Highcharts.Dictionary<string>} dateTimeLabelFormats\n     *        A map of time units to formats.\n     *\n     * @return {string}\n     *         The optimal date format for a point.\n     */\n    Time.prototype.getDateFormat = function (range, timestamp, startOfWeek, dateTimeLabelFormats) {\n        var dateStr = this.dateFormat('%m-%d %H:%M:%S.%L', timestamp), blank = '01-01 00:00:00.000', strpos = {\n                millisecond: 15,\n                second: 12,\n                minute: 9,\n                hour: 6,\n                day: 3\n            };\n        var n = 'millisecond', \n            // For sub-millisecond data, #4223\n            lastN = n;\n        for (n in Time_timeUnits) { // eslint-disable-line guard-for-in\n            // If the range is exactly one week and we're looking at a\n            // Sunday/Monday, go for the week format\n            if (range === Time_timeUnits.week &&\n                +this.dateFormat('%w', timestamp) === startOfWeek &&\n                dateStr.substr(6) === blank.substr(6)) {\n                n = 'week';\n                break;\n            }\n            // The first format that is too great for the range\n            if (Time_timeUnits[n] > range) {\n                n = lastN;\n                break;\n            }\n            // If the point is placed every day at 23:59, we need to show\n            // the minutes as well. #2637.\n            if (strpos[n] &&\n                dateStr.substr(strpos[n]) !== blank.substr(strpos[n])) {\n                break;\n            }\n            // Weeks are outside the hierarchy, only apply them on\n            // Mondays/Sundays like in the first condition\n            if (n !== 'week') {\n                lastN = n;\n            }\n        }\n        return this.resolveDTLFormat(dateTimeLabelFormats[n]).main;\n    };\n    return Time;\n}());\n/* *\n *\n * Default export\n *\n * */\n/* harmony default export */ var Core_Time = (Time);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Normalized interval.\n *\n * @interface Highcharts.TimeNormalizedObject\n */ /**\n* The count.\n*\n* @name Highcharts.TimeNormalizedObject#count\n* @type {number|undefined}\n*/ /**\n* The interval in axis values (ms).\n*\n* @name Highcharts.TimeNormalizedObject#unitRange\n* @type {number}\n*/\n/**\n * Function of an additional date format specifier.\n *\n * @callback Highcharts.TimeFormatCallbackFunction\n *\n * @param {number} timestamp\n *        The time to format.\n *\n * @return {string}\n *         The formatted portion of the date.\n */\n/**\n * Time ticks.\n *\n * @interface Highcharts.AxisTickPositionsArray\n * @extends global.Array<number>\n */ /**\n* @name Highcharts.AxisTickPositionsArray#info\n* @type {Highcharts.TimeTicksInfoObject|undefined}\n*/\n/**\n * A callback to return the time zone offset for a given datetime. It\n * takes the timestamp in terms of milliseconds since January 1 1970,\n * and returns the timezone offset in minutes. This provides a hook\n * for drawing time based charts in specific time zones using their\n * local DST crossover dates, with the help of external libraries.\n *\n * @callback Highcharts.TimezoneOffsetCallbackFunction\n *\n * @param {number} timestamp\n * Timestamp in terms of milliseconds since January 1 1970.\n *\n * @return {number}\n * Timezone offset in minutes.\n */\n/**\n * Options for formatting dates and times using the [Intl.DateTimeFormat](\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat\n * ) API, and extended with some custom options for Highcharts.\n *\n * @interface Highcharts.DateTimeFormatOptions\n */ /**\n* The locale matching algorithm to use.\n*\n* @name Highcharts.DateTimeFormatOptions#localeMatcher\n* @type {string|undefined}\n*/ /**\n* The time zone to use. The default is the browser's default time zone.\n*\n* @name Highcharts.DateTimeFormatOptions#timeZone\n* @type {string|undefined}\n*/ /**\n* Whether to use 12-hour time (as opposed to 24-hour time).\n*\n* @name Highcharts.DateTimeFormatOptions#hour12\n* @type {'auto'|'always'|'never'|undefined}\n*/ /**\n* The format matching algorithm to use.\n*\n* @name Highcharts.DateTimeFormatOptions#formatMatcher\n* @type {string|undefined}\n*/ /**\n* The representation of the weekday.\n*\n* @name Highcharts.DateTimeFormatOptions#weekday\n* @type {'narrow'|'short'|'long'|undefined}\n*/ /**\n* The representation of the era.\n*\n* @name Highcharts.DateTimeFormatOptions#era\n* @type {'narrow'|'short'|'long'|undefined}\n*/ /**\n* The representation of the year.\n*\n* @name Highcharts.DateTimeFormatOptions#year\n* @type {'numeric'|'2-digit'|undefined}\n*/ /**\n* The representation of the month.\n* \"narrow\", \"short\", \"long\".\n*\n* @name Highcharts.DateTimeFormatOptions#month\n* @type {'numeric'|'2-digit'|'narrow'|'short'|'long'|undefined}\n*/ /**\n* The representation of the day.\n*\n* @name Highcharts.DateTimeFormatOptions#day\n* @type {'numeric'|'2-digit'|undefined}\n*/ /**\n* The representation of the hour.\n*\n* @name Highcharts.DateTimeFormatOptions#hour\n* @type {'numeric'|'2-digit'|undefined}\n*/ /**\n* The representation of the minute.\n*\n* @name Highcharts.DateTimeFormatOptions#minute\n* @type {'numeric'|'2-digit'|undefined}\n*/ /**\n* The representation of the second.\n*\n* @name Highcharts.DateTimeFormatOptions#second\n* @type {'numeric'|'2-digit'|undefined}\n*/ /**\n* The number of fractional digits to use. 3 means milliseconds.\n*\n* @name Highcharts.DateTimeFormatOptions#fractionalSecondDigits\n* @type {number|undefined}\n*/ /**\n* The representation of the time zone name.\n*\n* @name Highcharts.DateTimeFormatOptions#timeZoneName\n* @type {'short'|'long'|undefined}\n*/ /**\n* A prefix for the time string. Custom Highcharts option.\n*\n* @name Highcharts.DateTimeFormatOptions#prefix\n* @type {'string'|undefined}\n*/ /**\n* A suffix for the time string. Custom Highcharts option.\n*\n* @name Highcharts.DateTimeFormatOptions#suffix\n* @type {'string'|undefined}\n*/\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Defaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar isTouchDevice = Core_Globals.isTouchDevice;\n\n\n\nvar Defaults_fireEvent = Core_Utilities.fireEvent, Defaults_merge = Core_Utilities.merge;\n/* *\n *\n *  API Options\n *\n * */\n/**\n * Global default settings.\n *\n * @name Highcharts.defaultOptions\n * @type {Highcharts.Options}\n */ /**\n* @optionparent\n* @private\n*/\nvar defaultOptions = {\n    /**\n     * An array containing the default colors for the chart's series. When\n     * all colors are used, new colors are pulled from the start again.\n     *\n     * Default colors can also be set on a series or series.type basis,\n     * see [column.colors](#plotOptions.column.colors),\n     * [pie.colors](#plotOptions.pie.colors).\n     *\n     * In styled mode, the colors option doesn't exist. Instead, colors\n     * are defined in CSS and applied either through series or point class\n     * names, or through the [chart.colorCount](#chart.colorCount) option.\n     *\n     * @sample {highcharts} highcharts/chart/colors/\n     *         Assign a global color theme\n     * @sample highcharts/members/theme-v10/\n     *         Latest release styled like version 10\n     *\n     * @type    {Array<(Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject)>}\n     * @default [\n     *     \"#2caffe\",\n     *     \"#544fc5\",\n     *     \"#00e272\",\n     *     \"#fe6a35\",\n     *     \"#6b8abc\",\n     *     \"#d568fb\",\n     *     \"#2ee0ca\",\n     *     \"#fa4b42\",\n     *     \"#feb56a\",\n     *     \"#91e8e1\"\n     * ]\n     */\n    colors: Palettes.colors,\n    /**\n     * Styled mode only. Configuration object for adding SVG definitions for\n     * reusable elements. See [gradients, shadows and\n     * patterns](https://www.highcharts.com/docs/chart-design-and-style/gradients-shadows-and-patterns)\n     * for more information and code examples.\n     *\n     * @type      {*}\n     * @since     5.0.0\n     * @apioption defs\n     */\n    /**\n     * @ignore-option\n     */\n    symbols: ['circle', 'diamond', 'square', 'triangle', 'triangle-down'],\n    /**\n     * An object containing language-related strings and settings. A typical\n     * setup uses `Highcharts.setOptions` to make the options apply to all\n     * charts in the same page.\n     *\n     * ```js\n     * Highcharts.setOptions({\n     *     lang: {\n     *         locale: 'fr'\n     *     }\n     * });\n     * ```\n     */\n    lang: {\n        /**\n         * The browser locale to use for date and number formatting. The actual\n         * locale used for each chart is determined in three steps:\n         * 1. If this `lang.locale` option is specified, it is used.\n         * 2. Else, look for the closest ancestor HTML element with a `lang`\n         *    attribute, typically the `<html>` element.\n         * 3. If no 'lang' attribute is found, use the default browser locale.\n         *\n         * Use `en-GB`, British English, for approximate consistency with\n         * Highcharts v < 12.\n         *\n         * @sample highcharts/lang/locale/\n         *         Set the locale using the `lang.locale` option\n         * @sample highcharts/lang/locale-attribute/\n         *         Pick up the locale from the HTML `lang` attribute\n         * @sample highcharts/members/highcharts-numberformat\n         *         Arabic locale with digits and dates         *\n         *\n         * @since 12.0.0\n         * @type {string|Array<string>}\n         */\n        locale: void 0,\n        /**\n         * The loading text that appears when the chart is set into the loading\n         * state following a call to `chart.showLoading`.\n         */\n        loading: 'Loading...',\n        /**\n         * An array containing the months names. Corresponds to the `%B` format\n         * in `Highcharts.dateFormat()`. Defaults to 'undefined',\n         * meaning the default month names are used according to the\n         * `lang.locale` setting.\n         *\n         * @type    {Array<string>}\n         */\n        months: void 0,\n        /**\n         * An array containing the months names in abbreviated form. Corresponds\n         * to the `%b` format in `Highcharts.dateFormat()`. Defaults to\n         * 'undefined', meaning the default short month names are used according\n         * to the `lang.locale` setting.\n         *\n         * @type    {Array<string>}\n         */\n        shortMonths: void 0,\n        /**\n         * An array containing the weekday names. Defaults to 'undefined',\n         * meaning the default weekday names are used according to the\n         * `lang.locale` setting.\n         *\n         * @type    {Array<string>}\n         */\n        weekdays: void 0,\n        /**\n         * Short week days, starting Sunday. Defaults to 'undefined', meaning\n         * the default short weekday names are used according to the\n         * `lang.locale` setting.\n         *\n         * @sample highcharts/lang/shortweekdays/\n         *         Finnish two-letter abbreviations\n         *\n         * @type      {Array<string>}\n         * @since     4.2.4\n         * @apioption lang.shortWeekdays\n         */\n        /**\n         * What to show in a date field for invalid dates. Defaults to an empty\n         * string.\n         *\n         * @type      {string}\n         * @since     4.1.8\n         * @product   highcharts highstock\n         * @apioption lang.invalidDate\n         */\n        /**\n         * The title appearing on hovering the zoom in button. The text itself\n         * defaults to \"+\" and can be changed in the button options.\n         *\n         * @type      {string}\n         * @default   Zoom in\n         * @product   highmaps\n         * @apioption lang.zoomIn\n         */\n        /**\n         * The title appearing on hovering the zoom out button. The text itself\n         * defaults to \"-\" and can be changed in the button options.\n         *\n         * @type      {string}\n         * @default   Zoom out\n         * @product   highmaps\n         * @apioption lang.zoomOut\n         */\n        /**\n         * The default decimal point used in the `Highcharts.numberFormat`\n         * method unless otherwise specified in the function arguments. Defaults\n         * to the locale decimal point as determined by `lang.locale`.\n         *\n         * @type      {string}\n         * @default   undefined\n         * @since     1.2.2\n         * @apioption lang.decimalPoint\n         */\n        /**\n         * [Metric prefixes](https://en.wikipedia.org/wiki/Metric_prefix) used\n         * to shorten high numbers in axis labels. Replacing any of the\n         * positions with `null` causes the full number to be written. Setting\n         * `numericSymbols` to `undefined` disables shortening altogether.\n         *\n         * @sample {highcharts} highcharts/lang/numericsymbols/\n         *         Replacing the symbols with text\n         * @sample {highstock} highcharts/lang/numericsymbols/\n         *         Replacing the symbols with text\n         *\n         * @type    {Array<string>}\n         * @default [\"k\", \"M\", \"G\", \"T\", \"P\", \"E\"]\n         * @since   2.3.0\n         */\n        numericSymbols: ['k', 'M', 'G', 'T', 'P', 'E'],\n        /**\n         * The magnitude of [numericSymbols](#lang.numericSymbol) replacements.\n         * Use 10000 for Japanese, Korean and various Chinese locales, which\n         * use symbols for 10^4, 10^8 and 10^12.\n         *\n         * @sample highcharts/lang/numericsymbolmagnitude/\n         *         10000 magnitude for Japanese\n         *\n         * @type      {number}\n         * @default   1000\n         * @since     5.0.3\n         * @apioption lang.numericSymbolMagnitude\n         */\n        /**\n         * The default thousands separator used in the `Highcharts.numberFormat`\n         * method unless otherwise specified in the function arguments. Defaults\n         * to the locale thousands separator as determined by `lang.locale`.\n         *\n         * @type      {string}\n         * @default   undefined\n         * @since     1.2.2\n         * @apioption lang.thousandsSep\n         */\n        /**\n         * The text for the label appearing when a chart is zoomed.\n         *\n         * @since 1.2.4\n         */\n        resetZoom: 'Reset zoom',\n        /**\n         * The tooltip title for the label appearing when a chart is zoomed.\n         *\n         * @since 1.2.4\n         */\n        resetZoomTitle: 'Reset zoom level 1:1'\n    },\n    /**\n     * Global options that don't apply to each chart. These options, like\n     * the `lang` options, must be set using the `Highcharts.setOptions`\n     * method.\n     *\n     * ```js\n     * Highcharts.setOptions({\n     *     global: {\n     *         buttonTheme: {\n     *             fill: '#d0d0d0'\n     *         }\n     *     }\n     * });\n     * ```\n     */\n    global: {\n        /**\n         * General theme for buttons. This applies to the zoom button, exporting\n         * context menu, map navigation, range selector buttons and custom\n         * buttons generated using the `SVGRenderer.button` function. However,\n         * each of these may be overridden with more specific options.\n         *\n         * @sample highcharts/global/buttontheme\n         *         General button theme\n         * @since 11.4.2\n         */\n        buttonTheme: {\n            /**\n             * The fill color for buttons\n             */\n            fill: \"#f7f7f7\" /* Palette.neutralColor3 */,\n            /**\n             * The padding of buttons\n             */\n            padding: 8,\n            /**\n             * The border radius for buttons\n             */\n            r: 2,\n            /**\n             * The stroke color for buttons\n             */\n            stroke: \"#cccccc\" /* Palette.neutralColor20 */,\n            /**\n             * The stroke width for buttons\n             */\n            'stroke-width': 1,\n            /**\n             * CSS styling for the buttons' text\n             */\n            style: {\n                color: \"#333333\" /* Palette.neutralColor80 */,\n                cursor: 'pointer',\n                fontSize: '0.8em',\n                fontWeight: 'normal'\n            },\n            /**\n             * State overrides for the buttons\n             */\n            states: {\n                /**\n                 * Hover state overrides for the buttons are applied in addition\n                 * to the normal state options\n                 */\n                hover: {\n                    fill: \"#e6e6e6\" /* Palette.neutralColor10 */\n                },\n                /**\n                 * Select state overrides for the buttons are applied in\n                 * addition to the normal state options\n                 */\n                select: {\n                    fill: \"#e6e9ff\" /* Palette.highlightColor10 */,\n                    style: {\n                        color: \"#000000\" /* Palette.neutralColor100 */,\n                        fontWeight: 'bold'\n                    }\n                },\n                /**\n                 * Disabled state overrides for the buttons are applied in\n                 * addition to the normal state options\n                 */\n                disabled: {\n                    /**\n                     * Disabled state CSS style overrides for the buttons' text\n                     */\n                    style: {\n                        color: \"#cccccc\" /* Palette.neutralColor20 */\n                    }\n                }\n            }\n        }\n    },\n    /**\n     * Time options that can apply globally or to individual charts. These\n     * settings affect how `datetime` axes are laid out, how tooltips are\n     * formatted, how series\n     * [pointIntervalUnit](#plotOptions.series.pointIntervalUnit) works and how\n     * the Highcharts Stock range selector handles time.\n     *\n     * The common use case is that all charts in the same Highcharts object\n     * share the same time settings, in which case the global settings are set\n     * using `setOptions`.\n     *\n     * ```js\n     * // Apply time settings globally\n     * Highcharts.setOptions({\n     *     time: {\n     *         timezone: 'Europe/London'\n     *     }\n     * });\n     * // Apply time settings by instance\n     * const chart = Highcharts.chart('container', {\n     *     time: {\n     *         timezone: 'America/New_York'\n     *     },\n     *     series: [{\n     *         data: [1, 4, 3, 5]\n     *     }]\n     * });\n     *\n     * // Use the Time object\n     * console.log(\n     *        'Current time in New York',\n     *        chart.time.dateFormat('%Y-%m-%d %H:%M:%S', Date.now())\n     * );\n     * ```\n     *\n     * Since v6.0.5, the time options were moved from the `global` object to the\n     * `time` object, and time options can be set on each individual chart.\n     *\n     * @sample {highcharts|highstock}\n     *         highcharts/time/timezone/\n     *         Set the timezone globally\n     * @sample {highcharts}\n     *         highcharts/time/individual/\n     *         Set the timezone per chart instance\n     * @sample {highstock}\n     *         stock/time/individual/\n     *         Set the timezone per chart instance\n     *\n     * @since     6.0.5\n     * @optionparent time\n     */\n    time: {\n        /**\n         * A custom `Date` class for advanced date handling. For example,\n         * [JDate](https://github.com/tahajahangir/jdate) can be hooked in to\n         * handle Jalali dates.\n         *\n         * @type      {*}\n         * @since     4.0.4\n         * @product   highcharts highstock gantt\n         */\n        Date: void 0,\n        /**\n         * A named time zone. Supported time zone names rely on the browser\n         * implementations, as described in the [mdn\n         * docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#timezone).\n         * If the given time zone is not recognized by the browser, Highcharts\n         * provides a warning and falls back to returning a 0 offset,\n         * corresponding to the UTC time zone.\n         *\n         * The time zone affects axis scaling, tickmark placement and\n         * time display in `Highcharts.dateFormat`.\n         *\n         * Setting `timezone` to `undefined` falls back to the default browser\n         * timezone setting.\n         *\n         * Until v11.2.0, this option depended on moment.js.\n         *\n         * @sample {highcharts|highstock} highcharts/time/timezone/ Europe/Oslo\n         *\n         * @type      {string}\n         * @since     5.0.7\n         * @product   highcharts highstock gantt\n         */\n        timezone: 'UTC',\n        /**\n         * The timezone offset in minutes. Positive values are west, negative\n         * values are east of UTC, as in the ECMAScript\n         * [getTimezoneOffset](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset)\n         * method. Use this to display UTC based data in a predefined time zone.\n         *\n         * This option is deprecated as of v11.4.1 and will be removed in a\n         * future release. Use the [time.timezone](#time.timezone) option\n         * instead.\n         *\n         * @see [time.getTimezoneOffset](#time.getTimezoneOffset)\n         *\n         * @sample {highcharts|highstock} highcharts/time/timezoneoffset/\n         *         Timezone offset\n         *\n         * @since     3.0.8\n         * @deprecated 11.4.2\n         * @product   highcharts highstock gantt\n         */\n        timezoneOffset: 0,\n        /**\n         * Whether to use UTC time for axis scaling, tickmark placement and\n         * time display in `Highcharts.dateFormat`. Advantages of using UTC\n         * is that the time displays equally regardless of the user agent's\n         * time zone settings. Local time can be used when the data is loaded\n         * in real time or when correct Daylight Saving Time transitions are\n         * required.\n         *\n         * Setting `useUTC` to true is equivalent to setting `time.timezone` to\n         * `\"UTC\"`. Setting `useUTC` to false is equivalent to setting\n         * `time.timezone` to `undefined`.\n         *\n         * @see [time.timezone](#timezone)\n         *\n         * @sample {highcharts} highcharts/time/useutc-true/\n         *         True by default\n         * @sample {highcharts} highcharts/time/useutc-false/\n         *         False\n         *\n         * @deprecated\n         */\n        useUTC: void 0\n    },\n    chart: Chart_ChartDefaults,\n    /**\n     * The chart's main title.\n     *\n     * @sample {highmaps} maps/title/title/\n     *         Title options demonstrated\n     * @sample {highcharts} highcharts/title/align-auto/\n     *         Default title alignment\n     */\n    title: {\n        /**\n         * When the title is floating, the plot area will not move to make space\n         * for it.\n         *\n         * @sample {highcharts} highcharts/chart/zoomtype-none/\n         *         False by default\n         * @sample {highcharts} highcharts/title/floating/\n         *         True - title on top of the plot area\n         * @sample {highstock} stock/chart/title-floating/\n         *         True - title on top of the plot area\n         *\n         * @type      {boolean}\n         * @default   false\n         * @since     2.1\n         * @apioption title.floating\n         */\n        /**\n         * Whether to\n         * [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n         * to render the text.\n         *\n         * @type      {boolean}\n         * @default   false\n         * @apioption title.useHTML\n         */\n        /**\n         * The vertical alignment of the title. Can be one of `\"top\"`,\n         * `\"middle\"` and `\"bottom\"`. When a value is given, the title behaves\n         * as if [floating](#title.floating) were `true`.\n         *\n         * @sample {highcharts} highcharts/title/verticalalign/\n         *         Chart title in bottom right corner\n         * @sample {highstock} stock/chart/title-verticalalign/\n         *         Chart title in bottom right corner\n         *\n         * @type      {Highcharts.VerticalAlignValue}\n         * @since     2.1\n         * @apioption title.verticalAlign\n         */\n        /**\n         * The x position of the title relative to the alignment within\n         * `chart.spacingLeft` and `chart.spacingRight`.\n         *\n         * @sample {highcharts} highcharts/title/align/\n         *         Aligned to the plot area (x = 70px = margin left - spacing\n         *         left)\n         * @sample {highstock} stock/chart/title-align/\n         *         Aligned to the plot area (x = 50px = margin left - spacing\n         *         left)\n         *\n         * @type      {number}\n         * @default   0\n         * @since     2.0\n         * @apioption title.x\n         */\n        /**\n         * The y position of the title relative to the alignment within\n         * [chart.spacingTop](#chart.spacingTop) and [chart.spacingBottom](\n         * #chart.spacingBottom). By default it depends on the font size.\n         *\n         * @sample {highcharts} highcharts/title/y/\n         *         Title inside the plot area\n         * @sample {highstock} stock/chart/title-verticalalign/\n         *         Chart title in bottom right corner\n         *\n         * @type      {number}\n         * @since     2.0\n         * @apioption title.y\n         */\n        /**\n         * CSS styles for the title. Use this for font styling, but use `align`,\n         * `x` and `y` for text alignment.\n         *\n         * Note that the default [title.minScale](#title.minScale) option also\n         * affects the rendered font size. In order to keep the font size fixed\n         * regardless of title length, set `minScale` to 1.\n         *\n         * In styled mode, the title style is given in the `.highcharts-title`\n         * class.\n         *\n         * @sample {highcharts} highcharts/title/style/\n         *         Custom color and weight\n         * @sample {highstock} stock/chart/title-style/\n         *         Custom color and weight\n         * @sample highcharts/css/titles/\n         *         Styled mode\n         *\n         * @type      {Highcharts.CSSObject}\n         * @default   {highcharts|highmaps} { \"color\": \"#333333\", \"fontSize\": \"18px\" }\n         * @default   {highstock} { \"color\": \"#333333\", \"fontSize\": \"16px\" }\n         */\n        style: {\n            color: \"#333333\" /* Palette.neutralColor80 */,\n            fontWeight: 'bold'\n        },\n        /**\n         * The title of the chart. To disable the title, set the `text` to\n         * `undefined`.\n         *\n         * @sample {highcharts} highcharts/title/text/\n         *         Custom title\n         * @sample {highstock} stock/chart/title-text/\n         *         Custom title\n         *\n         * @default {highcharts|highmaps} Chart title\n         * @default {highstock} undefined\n         */\n        text: 'Chart title',\n        /**\n         * The horizontal alignment of the title. Can be one of \"left\", \"center\"\n         * and \"right\".\n         *\n         * Since v12 it defaults to `undefined`, meaning the alignment is\n         * computed for best fit. If the text fits in one line, it aligned to\n         * the center, but if it is wrapped into multiple lines, it is aligned\n         * to the left.\n         *\n         * @sample {highcharts} highcharts/title/align-auto/\n         *         Default alignment, dynamic\n         * @sample {highcharts} highcharts/title/align/\n         *         Aligned to the plot area (x = 70px = margin left - spacing\n         *         left)\n         * @sample {highstock} stock/chart/title-align/\n         *         Aligned to the plot area (x = 50px = margin left - spacing\n         *         left)\n         *\n         * @type      {Highcharts.AlignValue}\n         * @default   undefined\n         * @since     2.0\n         * @apioption title.align\n         */\n        /**\n         * The margin between the title and the plot area, or if a subtitle\n         * is present, the margin between the subtitle and the plot area.\n         *\n         * @sample {highcharts} highcharts/title/margin-50/\n         *         A chart title margin of 50\n         * @sample {highcharts} highcharts/title/margin-subtitle/\n         *         The same margin applied with a subtitle\n         * @sample {highstock} stock/chart/title-margin/\n         *         A chart title margin of 50\n         *\n         * @since 2.1\n         */\n        margin: 15,\n        /**\n         * When the title is too wide to fit in the chart, the default behavior\n         * is to scale it down to fit, or apply word wrap if it is scaled down\n         * to `minScale` and still doesn't fit.\n         *\n         * The default value reflects the scale, when using default font sizes,\n         * when the title font size matches that of the subtitle. The title\n         * still stands out as it is bold by default.\n         *\n         * Set `minScale` to 1 to avoid downscaling.\n         *\n         * @sample {highcharts} highcharts/title/align-auto/\n         *         Downscaling demonstrated\n         *\n         * @since 12.0.0\n         */\n        minScale: 0.67\n    },\n    /**\n     * The chart's subtitle. This can be used both to display a subtitle below\n     * the main title, and to display random text anywhere in the chart. The\n     * subtitle can be updated after chart initialization through the\n     * `Chart.setTitle` method.\n     *\n     * @sample {highcharts} highcharts/title/align-auto/\n     *         Default title alignment\n     * @sample {highmaps} maps/title/subtitle/\n     *         Subtitle options demonstrated\n     */\n    subtitle: {\n        /**\n         * When the subtitle is floating, the plot area will not move to make\n         * space for it.\n         *\n         * @sample {highcharts} highcharts/subtitle/floating/\n         *         Floating title and subtitle\n         * @sample {highstock} stock/chart/subtitle-footnote\n         *         Footnote floating at bottom right of plot area\n         *\n         * @type      {boolean}\n         * @default   false\n         * @since     2.1\n         * @apioption subtitle.floating\n         */\n        /**\n         * CSS styles for the title.\n         *\n         * In styled mode, the subtitle style is given in the\n         * `.highcharts-subtitle` class.\n         *\n         * @sample {highcharts} highcharts/subtitle/style/\n         *         Custom color and weight\n         * @sample {highcharts} highcharts/css/titles/\n         *         Styled mode\n         * @sample {highstock} stock/chart/subtitle-style\n         *         Custom color and weight\n         * @sample {highstock} highcharts/css/titles/\n         *         Styled mode\n         * @sample {highmaps} highcharts/css/titles/\n         *         Styled mode\n         *\n         * @type      {Highcharts.CSSObject}\n         * @default   {\"color\": \"#666666\"}\n         * @apioption subtitle.style\n         */\n        /**\n         * Whether to\n         * [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n         * to render the text.\n         *\n         * @type      {boolean}\n         * @default   false\n         * @apioption subtitle.useHTML\n         */\n        /**\n         * The vertical alignment of the title. Can be one of `\"top\"`,\n         * `\"middle\"` and `\"bottom\"`. When middle, the subtitle behaves as\n         * floating.\n         *\n         * @sample {highcharts} highcharts/subtitle/verticalalign/\n         *         Footnote at the bottom right of plot area\n         * @sample {highstock} stock/chart/subtitle-footnote\n         *         Footnote at the bottom right of plot area\n         *\n         * @type      {Highcharts.VerticalAlignValue}\n         * @since     2.1\n         * @apioption subtitle.verticalAlign\n         */\n        /**\n         * The x position of the subtitle relative to the alignment within\n         * `chart.spacingLeft` and `chart.spacingRight`.\n         *\n         * @sample {highcharts} highcharts/subtitle/align/\n         *         Footnote at right of plot area\n         * @sample {highstock} stock/chart/subtitle-footnote\n         *         Footnote at the bottom right of plot area\n         *\n         * @type      {number}\n         * @default   0\n         * @since     2.0\n         * @apioption subtitle.x\n         */\n        /**\n         * The y position of the subtitle relative to the alignment within\n         * `chart.spacingTop` and `chart.spacingBottom`. By default the subtitle\n         * is laid out below the title unless the title is floating.\n         *\n         * @sample {highcharts} highcharts/subtitle/verticalalign/\n         *         Footnote at the bottom right of plot area\n         * @sample {highstock} stock/chart/subtitle-footnote\n         *         Footnote at the bottom right of plot area\n         *\n         * @type      {number}\n         * @since     2.0\n         * @apioption subtitle.y\n         */\n        /**\n         * CSS styles for the title.\n         *\n         * In styled mode, the subtitle style is given in the\n         * `.highcharts-subtitle` class.\n         *\n         * @sample {highcharts} highcharts/subtitle/style/\n         *         Custom color and weight\n         * @sample {highcharts} highcharts/css/titles/\n         *         Styled mode\n         * @sample {highstock} stock/chart/subtitle-style\n         *         Custom color and weight\n         * @sample {highstock} highcharts/css/titles/\n         *         Styled mode\n         * @sample {highmaps} highcharts/css/titles/\n         *         Styled mode\n         *\n         * @type      {Highcharts.CSSObject}\n         * @default   {\"color\": \"#666666\"}\n         */\n        style: {\n            color: \"#666666\" /* Palette.neutralColor60 */,\n            /**\n             * @type {number|string}\n             */\n            fontSize: '0.8em'\n        },\n        /**\n         * The subtitle of the chart.\n         *\n         * @sample {highcharts|highstock} highcharts/subtitle/text/\n         *         Custom subtitle\n         * @sample {highcharts|highstock} highcharts/subtitle/text-formatted/\n         *         Formatted and linked text.\n         */\n        text: ''\n        /**\n         * The horizontal alignment of the subtitle. Can be one of \"left\",\n         * \"center\" and \"right\". Since v12, it defaults to `undefined`, meaning\n         * the actual alignment is inherited from the alignment of the main\n         * title.\n         *\n         * @sample {highcharts} highcharts/title/align-auto/\n         *         Default title and subtitle alignment, dynamic\n         * @sample {highcharts} highcharts/subtitle/align/\n         *         Footnote at right of plot area\n         * @sample {highstock} stock/chart/subtitle-footnote\n         *         Footnote at bottom right of plot area\n         *\n         * @type  {Highcharts.AlignValue}\n         * @default undefined\n         * @since 2.0\n         * @apioption subtitle.align\n         */\n    },\n    /**\n     * The chart's caption, which will render below the chart and will be part\n     * of exported charts. The caption can be updated after chart initialization\n     * through the `Chart.update` or `Chart.caption.update` methods.\n     *\n     * @sample highcharts/caption/text/\n     *         A chart with a caption\n     * @since  7.2.0\n     */\n    caption: {\n        /**\n         * When the caption is floating, the plot area will not move to make\n         * space for it.\n         *\n         * @type      {boolean}\n         * @default   false\n         * @apioption caption.floating\n         */\n        /**\n         * The margin between the caption and the plot area.\n         */\n        margin: 15,\n        /**\n         * Whether to\n         * [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n         * to render the text.\n         *\n         * @type      {boolean}\n         * @default   false\n         * @apioption caption.useHTML\n         */\n        /**\n         * The x position of the caption relative to the alignment within\n         * `chart.spacingLeft` and `chart.spacingRight`.\n         *\n         * @type      {number}\n         * @default   0\n         * @apioption caption.x\n         */\n        /**\n         * The y position of the caption relative to the alignment within\n         * `chart.spacingTop` and `chart.spacingBottom`.\n         *\n         * @type      {number}\n         * @apioption caption.y\n         */\n        /**\n         * CSS styles for the caption.\n         *\n         * In styled mode, the caption style is given in the\n         * `.highcharts-caption` class.\n         *\n         * @sample {highcharts} highcharts/css/titles/\n         *         Styled mode\n         *\n         * @type      {Highcharts.CSSObject}\n         * @default   {\"color\": \"#666666\"}\n         */\n        style: {\n            color: \"#666666\" /* Palette.neutralColor60 */,\n            /**\n             * @type {number|string}\n             */\n            fontSize: '0.8em'\n        },\n        /**\n         * The caption text of the chart.\n         *\n         * @sample {highcharts} highcharts/caption/text/\n         *         Custom caption\n         */\n        text: '',\n        /**\n         * The horizontal alignment of the caption. Can be one of \"left\",\n         *  \"center\" and \"right\".\n         *\n         * @type  {Highcharts.AlignValue}\n         */\n        align: 'left',\n        /**\n         * The vertical alignment of the caption. Can be one of `\"top\"`,\n         * `\"middle\"` and `\"bottom\"`. When middle, the caption behaves as\n         * floating.\n         *\n         * @type      {Highcharts.VerticalAlignValue}\n         */\n        verticalAlign: 'bottom'\n    },\n    /**\n     * The plotOptions is a wrapper object for config objects for each series\n     * type. The config objects for each series can also be overridden for\n     * each series item as given in the series array.\n     *\n     * Configuration options for the series are given in three levels. Options\n     * for all series in a chart are given in the [plotOptions.series](\n     * #plotOptions.series) object. Then options for all series of a specific\n     * type are given in the plotOptions of that type, for example\n     * `plotOptions.line`. Next, options for one single series are given in\n     * [the series array](#series).\n     */\n    plotOptions: {},\n    /**\n     * The legend is a box containing a symbol and name for each series\n     * item or point item in the chart. Each series (or points in case\n     * of pie charts) is represented by a symbol and its name in the legend.\n     *\n     * It is possible to override the symbol creator function and create\n     * [custom legend symbols](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/studies/legend-custom-symbol/).\n     *\n     * @productdesc {highmaps}\n     * A Highmaps legend by default contains one legend item per series, but if\n     * a `colorAxis` is defined, the axis will be displayed in the legend.\n     * Either as a gradient, or as multiple legend items for `dataClasses`.\n     */\n    legend: {\n        /**\n         * The background color of the legend.\n         *\n         * @see In styled mode, the legend background fill can be applied with\n         *      the `.highcharts-legend-box` class.\n         *\n         * @sample {highcharts} highcharts/legend/backgroundcolor/\n         *         Yellowish background\n         * @sample {highstock} stock/legend/align/\n         *         Various legend options\n         * @sample {highmaps} maps/legend/border-background/\n         *         Border and background options\n         *\n         * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         * @apioption legend.backgroundColor\n         */\n        /**\n         * The width of the drawn border around the legend.\n         *\n         * @see In styled mode, the legend border stroke width can be applied\n         *      with the `.highcharts-legend-box` class.\n         *\n         * @sample {highcharts} highcharts/legend/borderwidth/\n         *         2px border width\n         * @sample {highstock} stock/legend/align/\n         *         Various legend options\n         * @sample {highmaps} maps/legend/border-background/\n         *         Border and background options\n         *\n         * @type      {number}\n         * @default   0\n         * @apioption legend.borderWidth\n         */\n        /**\n         * Enable or disable the legend. There is also a series-specific option,\n         * [showInLegend](#plotOptions.series.showInLegend), that can hide the\n         * series from the legend. In some series types this is `false` by\n         * default, so it must set to `true` in order to show the legend for the\n         * series.\n         *\n         * @sample {highcharts} highcharts/legend/enabled-false/ Legend disabled\n         * @sample {highstock} stock/legend/align/ Various legend options\n         * @sample {highmaps} maps/legend/enabled-false/ Legend disabled\n         *\n         * @default {highstock} false\n         * @default {highmaps} true\n         * @default {gantt} false\n         */\n        enabled: true,\n        /**\n         * The horizontal alignment of the legend box within the chart area.\n         * Valid values are `left`, `center` and `right`.\n         *\n         * In the case that the legend is aligned in a corner position, the\n         * `layout` option will determine whether to place it above/below\n         * or on the side of the plot area.\n         *\n         * @sample {highcharts} highcharts/legend/align/\n         *         Legend at the right of the chart\n         * @sample {highstock} stock/legend/align/\n         *         Various legend options\n         * @sample {highmaps} maps/legend/alignment/\n         *         Legend alignment\n         *\n         * @type  {Highcharts.AlignValue}\n         * @since 2.0\n         */\n        align: 'center',\n        /**\n         * If the [layout](legend.layout) is `horizontal` and the legend items\n         * span over two lines or more, whether to align the items into vertical\n         * columns. Setting this to `false` makes room for more items, but will\n         * look more messy.\n         *\n         * @since 6.1.0\n         */\n        alignColumns: true,\n        /**\n         * A CSS class name to apply to the legend group.\n         */\n        className: 'highcharts-no-tooltip',\n        /**\n         * General event handlers for the legend. These event hooks can\n         * also be attached to the legend at run time using the\n         * `Highcharts.addEvent` function.\n         *\n         * @declare Highcharts.LegendEventsOptionsObject\n         *\n         * @private\n         */\n        events: {},\n        /**\n         * Fires when the legend item belonging to the series is clicked. One\n         * parameter, `event`, is passed to the function. The default action\n         * is to toggle the visibility of the series, point or data class. This\n         * can be prevented by returning `false` or calling\n         * `event.preventDefault()`.\n         *\n         * @sample {highcharts} highcharts/legend/itemclick/\n         *         Confirm hiding and showing\n         * @sample {highcharts} highcharts/legend/pie-legend-itemclick/\n         *         Confirm toggle visibility of pie slices\n         *\n         * @type      {Highcharts.LegendItemClickCallbackFunction}\n         * @context   Highcharts.Legend\n         * @apioption legend.events.itemClick\n         */\n        /**\n         * When the legend is floating, the plot area ignores it and is allowed\n         * to be placed below it.\n         *\n         * @sample {highcharts} highcharts/legend/floating-false/\n         *         False by default\n         * @sample {highcharts} highcharts/legend/floating-true/\n         *         True\n         * @sample {highmaps} maps/legend/alignment/\n         *         Floating legend\n         *\n         * @type      {boolean}\n         * @default   false\n         * @since     2.1\n         * @apioption legend.floating\n         */\n        /**\n         * The layout of the legend items. Can be one of `horizontal` or\n         * `vertical` or `proximate`. When `proximate`, the legend items will be\n         * placed as close as possible to the graphs they're representing,\n         * except in inverted charts or when the legend position doesn't allow\n         * it.\n         *\n         * @sample {highcharts} highcharts/legend/layout-horizontal/\n         *         Horizontal by default\n         * @sample {highcharts} highcharts/legend/layout-vertical/\n         *         Vertical\n         * @sample highcharts/legend/layout-proximate\n         *         Labels proximate to the data\n         * @sample {highstock} stock/legend/layout-horizontal/\n         *         Horizontal by default\n         * @sample {highmaps} maps/legend/padding-itemmargin/\n         *         Vertical with data classes\n         * @sample {highmaps} maps/legend/layout-vertical/\n         *         Vertical with color axis gradient\n         *\n         * @validvalue [\"horizontal\", \"vertical\", \"proximate\"]\n         */\n        layout: 'horizontal',\n        /**\n         * In a legend with horizontal layout, the itemDistance defines the\n         * pixel distance between each item.\n         *\n         * @sample {highcharts} highcharts/legend/layout-horizontal/\n         *         50px item distance\n         * @sample {highstock} highcharts/legend/layout-horizontal/\n         *         50px item distance\n         *\n         * @type      {number}\n         * @default   {highcharts} 20\n         * @default   {highstock} 20\n         * @default   {highmaps} 8\n         * @since     3.0.3\n         * @apioption legend.itemDistance\n         */\n        /**\n         * The pixel bottom margin for each legend item.\n         *\n         * @sample {highcharts|highstock} highcharts/legend/padding-itemmargin/\n         *         Padding and item margins demonstrated\n         * @sample {highmaps} maps/legend/padding-itemmargin/\n         *         Padding and item margins demonstrated\n         *\n         * @since     2.2.0\n         */\n        itemMarginBottom: 2,\n        /**\n         * The pixel top margin for each legend item.\n         *\n         * @sample {highcharts|highstock} highcharts/legend/padding-itemmargin/\n         *         Padding and item margins demonstrated\n         * @sample {highmaps} maps/legend/padding-itemmargin/\n         *         Padding and item margins demonstrated\n         *\n         * @since     2.2.0\n         */\n        itemMarginTop: 2,\n        /**\n         * The width for each legend item. By default the items are laid out\n         * successively. In a [horizontal layout](legend.layout), if the items\n         * are laid out across two rows or more, they will be vertically aligned\n         * depending on the [legend.alignColumns](legend.alignColumns) option.\n         *\n         * @sample {highcharts} highcharts/legend/itemwidth-default/\n         *         Undefined by default\n         * @sample {highcharts} highcharts/legend/itemwidth-80/\n         *         80 for aligned legend items\n         *\n         * @type      {number}\n         * @since     2.0\n         * @apioption legend.itemWidth\n         */\n        /**\n         * A [format string](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting)\n         * for each legend label. Available variables relates to properties on\n         * the series, or the point in case of pies.\n         *\n         * @type      {string}\n         * @default   {name}\n         * @since     1.3\n         * @apioption legend.labelFormat\n         */\n        /* eslint-disable valid-jsdoc */\n        /**\n         * Callback function to format each of the series' labels. The `this`\n         * keyword refers to the series object, or the point object in case of\n         * pie charts. By default the series or point name is printed.\n         *\n         * @productdesc {highmaps}\n         * In Highmaps the context can also be a data class in case of a\n         * `colorAxis`.\n         *\n         * @sample {highcharts} highcharts/legend/labelformatter/\n         *         Add text\n         * @sample {highmaps} maps/legend/labelformatter/\n         *         Data classes with label formatter\n         *\n         * @type {Highcharts.FormatterCallbackFunction<Point|Series>}\n         */\n        labelFormatter: function () {\n            // eslint-enable valid-jsdoc\n            return this.name;\n        },\n        /**\n         * Line height for the legend items. Deprecated as of 2.1\\. Instead,\n         * the line height for each item can be set using\n         * `itemStyle.lineHeight`, and the padding between items using\n         * `itemMarginTop` and `itemMarginBottom`.\n         *\n         * @sample {highcharts} highcharts/legend/lineheight/\n         *         Setting padding\n         *\n         * @deprecated\n         *\n         * @type      {number}\n         * @default   16\n         * @since     2.0\n         * @product   highcharts gantt\n         * @apioption legend.lineHeight\n         */\n        /**\n         * If the plot area sized is calculated automatically and the legend is\n         * not floating, the legend margin is the space between the legend and\n         * the axis labels or plot area.\n         *\n         * @sample {highcharts} highcharts/legend/margin-default/\n         *         12 pixels by default\n         * @sample {highcharts} highcharts/legend/margin-30/\n         *         30 pixels\n         *\n         * @type      {number}\n         * @default   12\n         * @since     2.1\n         * @apioption legend.margin\n         */\n        /**\n         * Maximum pixel height for the legend. When the maximum height is\n         * extended, navigation will show.\n         *\n         * @type      {number}\n         * @since     2.3.0\n         * @apioption legend.maxHeight\n         */\n        /**\n         * The color of the drawn border around the legend.\n         *\n         * @see In styled mode, the legend border stroke can be applied with the\n         *      `.highcharts-legend-box` class.\n         *\n         * @sample {highcharts} highcharts/legend/bordercolor/\n         *         Brown border\n         * @sample {highstock} stock/legend/align/\n         *         Various legend options\n         * @sample {highmaps} maps/legend/border-background/\n         *         Border and background options\n         *\n         * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         */\n        borderColor: \"#999999\" /* Palette.neutralColor40 */,\n        /**\n         * The border corner radius of the legend.\n         *\n         * @sample {highcharts} highcharts/legend/borderradius-default/\n         *         Square by default\n         * @sample {highcharts} highcharts/legend/borderradius-round/\n         *         5px rounded\n         * @sample {highmaps} maps/legend/border-background/\n         *         Border and background options\n         */\n        borderRadius: 0,\n        /**\n         * Options for the paging or navigation appearing when the legend is\n         * overflown. Navigation works well on screen, but not in static\n         * exported images. One way of working around that is to\n         * [increase the chart height in\n         * export](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/legend/navigation-enabled-false/).\n         *\n         * @sample highcharts/legend/scrollable-vertical/\n         *         Legend with vertical scrollable extension\n         * @sample highcharts/legend/scrollable-horizontal/\n         *         Legend with horizontal scrollable extension\n         *\n         */\n        navigation: {\n            /**\n             * How to animate the pages when navigating up or down. A value of\n             * `true` applies the default navigation given in the\n             * `chart.animation` option. Additional options can be given as an\n             * object containing values for easing and duration.\n             *\n             * @sample {highcharts} highcharts/legend/navigation/\n             *         Legend page navigation demonstrated\n             * @sample {highstock} highcharts/legend/navigation/\n             *         Legend page navigation demonstrated\n             *\n             * @type      {boolean|Partial<Highcharts.AnimationOptionsObject>}\n             * @default   true\n             * @since     2.2.4\n             * @apioption legend.navigation.animation\n             */\n            /**\n             * The pixel size of the up and down arrows in the legend paging\n             * navigation.\n             *\n             * @sample {highcharts} highcharts/legend/navigation/\n             *         Legend page navigation demonstrated\n             * @sample {highstock} highcharts/legend/navigation/\n             *         Legend page navigation demonstrated\n             *\n             * @type      {number}\n             * @default   12\n             * @since     2.2.4\n             * @apioption legend.navigation.arrowSize\n             */\n            /**\n             * Whether to enable the legend navigation. In most cases, disabling\n             * the navigation results in an unwanted overflow.\n             *\n             * See also the\n             * [adapt chart to legend](https://github.com/highcharts/adapt-chart-to-legend)\n             * plugin for a solution to extend the chart height to make room for\n             * the legend, optionally in exported charts only.\n             *\n             * @type      {boolean}\n             * @default   true\n             * @since     4.2.4\n             * @apioption legend.navigation.enabled\n             */\n            /**\n             * Text styles for the legend page navigation.\n             *\n             * @see In styled mode, the navigation items are styled with the\n             *      `.highcharts-legend-navigation` class.\n             *\n             * @sample {highcharts} highcharts/legend/navigation/\n             *         Legend page navigation demonstrated\n             * @sample {highstock} highcharts/legend/navigation/\n             *         Legend page navigation demonstrated\n             *\n             * @type      {Highcharts.CSSObject}\n             * @since     2.2.4\n             * @apioption legend.navigation.style\n             */\n            style: {\n                /**\n                 * @type {number|string}\n                 */\n                fontSize: '0.8em'\n            },\n            /**\n             * The color for the active up or down arrow in the legend page\n             * navigation.\n             *\n             * @see In styled mode, the active arrow be styled with the\n             *      `.highcharts-legend-nav-active` class.\n             *\n             * @sample  {highcharts} highcharts/legend/navigation/\n             *          Legend page navigation demonstrated\n             * @sample  {highstock} highcharts/legend/navigation/\n             *          Legend page navigation demonstrated\n             *\n             * @type  {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n             * @since 2.2.4\n             */\n            activeColor: \"#0022ff\" /* Palette.highlightColor100 */,\n            /**\n             * The color of the inactive up or down arrow in the legend page\n             * navigation. .\n             *\n             * @see In styled mode, the inactive arrow be styled with the\n             *      `.highcharts-legend-nav-inactive` class.\n             *\n             * @sample {highcharts} highcharts/legend/navigation/\n             *         Legend page navigation demonstrated\n             * @sample {highstock} highcharts/legend/navigation/\n             *         Legend page navigation demonstrated\n             *\n             * @type  {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n             * @since 2.2.4\n             */\n            inactiveColor: \"#cccccc\" /* Palette.neutralColor20 */\n        },\n        /**\n         * The inner padding of the legend box.\n         *\n         * @sample {highcharts|highstock} highcharts/legend/padding-itemmargin/\n         *         Padding and item margins demonstrated\n         * @sample {highmaps} maps/legend/padding-itemmargin/\n         *         Padding and item margins demonstrated\n         *\n         * @type      {number}\n         * @default   8\n         * @since     2.2.0\n         * @apioption legend.padding\n         */\n        /**\n         * Whether to reverse the order of the legend items compared to the\n         * order of the series or points as defined in the configuration object.\n         *\n         * @see [yAxis.reversedStacks](#yAxis.reversedStacks),\n         *      [series.legendIndex](#series.legendIndex)\n         *\n         * @sample {highcharts} highcharts/legend/reversed/\n         *         Stacked bar with reversed legend\n         *\n         * @type      {boolean}\n         * @default   false\n         * @since     1.2.5\n         * @apioption legend.reversed\n         */\n        /**\n         * Whether to show the symbol on the right side of the text rather than\n         * the left side. This is common in Arabic and Hebrew.\n         *\n         * @sample {highcharts} highcharts/legend/rtl/\n         *         Symbol to the right\n         *\n         * @type      {boolean}\n         * @default   false\n         * @since     2.2\n         * @apioption legend.rtl\n         */\n        /**\n         * CSS styles for the legend area. In the 1.x versions the position\n         * of the legend area was determined by CSS. In 2.x, the position is\n         * determined by properties like `align`, `verticalAlign`, `x` and `y`,\n         * but the styles are still parsed for backwards compatibility.\n         *\n         * @deprecated\n         *\n         * @type      {Highcharts.CSSObject}\n         * @product   highcharts highstock\n         * @apioption legend.style\n         */\n        /**\n         * CSS styles for each legend item. Only a subset of CSS is supported,\n         * notably those options related to text. The default `textOverflow`\n         * property makes long texts truncate. Set it to `undefined` to wrap\n         * text instead. A `width` property can be added to control the text\n         * width.\n         *\n         * @see In styled mode, the legend items can be styled with the\n         *      `.highcharts-legend-item` class.\n         *\n         * @sample {highcharts} highcharts/legend/itemstyle/\n         *         Bold black text\n         * @sample {highmaps} maps/legend/itemstyle/\n         *         Item text styles\n         *\n         * @type    {Highcharts.CSSObject}\n         * @default {\"color\": \"#333333\", \"cursor\": \"pointer\", \"fontSize\": \"0.8em\", \"fontWeight\": \"bold\", \"textOverflow\": \"ellipsis\"}\n         */\n        itemStyle: {\n            /**\n             * @ignore\n             */\n            color: \"#333333\" /* Palette.neutralColor80 */,\n            /**\n             * @ignore\n             */\n            cursor: 'pointer',\n            /**\n             * @ignore\n             */\n            fontSize: '0.8em',\n            /**\n             * @ignore\n             */\n            textDecoration: 'none',\n            /**\n             * @ignore\n             */\n            textOverflow: 'ellipsis'\n        },\n        /**\n         * CSS styles for each legend item in hover mode. Only a subset of\n         * CSS is supported, notably those options related to text. Properties\n         * are inherited from `style` unless overridden here.\n         *\n         * @see In styled mode, the hovered legend items can be styled with\n         *      the `.highcharts-legend-item:hover` pseudo-class.\n         *\n         * @sample {highcharts} highcharts/legend/itemhoverstyle/\n         *         Red on hover\n         * @sample {highmaps} maps/legend/itemstyle/\n         *         Item text styles\n         *\n         * @type    {Highcharts.CSSObject}\n         * @default {\"color\": \"#000000\"}\n         */\n        itemHoverStyle: {\n            /**\n             * @ignore\n             */\n            color: \"#000000\" /* Palette.neutralColor100 */\n        },\n        /**\n         * CSS styles for each legend item when the corresponding series or\n         * point is hidden. Only a subset of CSS is supported, notably those\n         * options related to text. Properties are inherited from `style`\n         * unless overridden here.\n         *\n         * @see In styled mode, the hidden legend items can be styled with\n         *      the `.highcharts-legend-item-hidden` class.\n         *\n         * @sample {highcharts} highcharts/legend/itemhiddenstyle/\n         *         Darker gray color\n         *\n         * @type    {Highcharts.CSSObject}\n         * @default {\"color\": \"#cccccc\"}\n         */\n        itemHiddenStyle: {\n            /**\n             * @ignore\n             */\n            color: \"#666666\" /* Palette.neutralColor60 */,\n            /**\n             * @ignore\n             */\n            textDecoration: 'line-through'\n        },\n        /**\n         * Whether to apply a drop shadow to the legend. A `backgroundColor`\n         * also needs to be applied for this to take effect. The shadow can be\n         * an object configuration containing `color`, `offsetX`, `offsetY`,\n         * `opacity` and `width`.\n         *\n         * @sample {highcharts} highcharts/legend/shadow/\n         *         White background and drop shadow\n         * @sample {highstock} stock/legend/align/\n         *         Various legend options\n         * @sample {highmaps} maps/legend/border-background/\n         *         Border and background options\n         *\n         * @type {boolean|Highcharts.CSSObject}\n         */\n        shadow: false,\n        /**\n         * Default styling for the checkbox next to a legend item when\n         * `showCheckbox` is true.\n         *\n         * @type {Highcharts.CSSObject}\n         * @default {\"width\": \"13px\", \"height\": \"13px\", \"position\":\"absolute\"}\n         */\n        itemCheckboxStyle: {\n            /**\n             * @ignore\n             */\n            position: 'absolute',\n            /**\n             * @ignore\n             */\n            width: '13px', // For IE precision\n            /**\n             * @ignore\n             */\n            height: '13px'\n        },\n        /// itemWidth: undefined,\n        /**\n         * When this is true, the legend symbol width will be the same as\n         * the symbol height, which in turn defaults to the font size of the\n         * legend items.\n         *\n         * @since 5.0.0\n         */\n        squareSymbol: true,\n        /**\n         * The pixel height of the symbol for series types that use a rectangle\n         * in the legend. Defaults to the font size of legend items.\n         *\n         * Note: This option is a default source of color axis height, if the\n         * [colorAxis.height](https://api.highcharts.com/highcharts/colorAxis.height)\n         * option is not set.\n         *\n         * @productdesc {highmaps}\n         * In Highmaps, when the symbol is the gradient of a vertical color\n         * axis, the height defaults to 200.\n         *\n         * @sample {highmaps} maps/legend/layout-vertical-sized/\n         *         Sized vertical gradient\n         * @sample {highmaps} maps/legend/padding-itemmargin/\n         *         No distance between data classes\n         *\n         * @type      {number}\n         * @since     3.0.8\n         * @apioption legend.symbolHeight\n         */\n        /**\n         * The border radius of the symbol for series types that use a rectangle\n         * in the legend. Defaults to half the `symbolHeight`, effectively\n         * creating a circle.\n         *\n         * For color axis scales, it defaults to 3.\n         *\n         * @sample {highcharts} highcharts/legend/symbolradius/\n         *         Round symbols\n         * @sample {highstock} highcharts/legend/symbolradius/\n         *         Round symbols\n         * @sample {highmaps} highcharts/legend/symbolradius/\n         *         Round symbols\n         *\n         * @type      {number}\n         * @since     3.0.8\n         * @apioption legend.symbolRadius\n         */\n        /**\n         * The pixel width of the legend item symbol. When the `squareSymbol`\n         * option is set, this defaults to the `symbolHeight`, otherwise 16.\n         *\n         * Note: This option is a default source of color axis width, if the\n         * [colorAxis.width](https://api.highcharts.com/highcharts/colorAxis.width)\n         * option is not set.\n         *\n         * @productdesc {highmaps}\n         * In Highmaps, when the symbol is the gradient of a horizontal color\n         * axis, the width defaults to 200.\n         *\n         * @sample {highcharts} highcharts/legend/symbolwidth/\n         *         Greater symbol width and padding\n         * @sample {highmaps} maps/legend/padding-itemmargin/\n         *         Padding and item margins demonstrated\n         * @sample {highmaps} maps/legend/layout-vertical-sized/\n         *         Sized vertical gradient\n         *\n         * @type      {number}\n         * @apioption legend.symbolWidth\n         */\n        /**\n         * Whether to [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n         * to render the legend item texts.\n         *\n         * Prior to 4.1.7, when using HTML, [legend.navigation](\n         * #legend.navigation) was disabled.\n         *\n         * @sample highcharts/legend/scrollable-vertical/\n         *         Legend with vertical scrollable extension\n         * @sample highcharts/legend/scrollable-horizontal/\n         *         Legend with horizontal scrollable extension\n         *\n         * @type      {boolean}\n         * @default   false\n         * @apioption legend.useHTML\n         */\n        /**\n         * For a color axis with data classes, how many decimals to render in\n         * the legend. The default preserves the decimals of the range numbers.\n         *\n         * @type      {number}\n         * @default   -1\n         * @product   highcharts highmaps\n         * @apioption legend.valueDecimals\n         */\n        /**\n         * For a color axis with data classes, a suffix for the range numbers in\n         * the legend.\n         *\n         * @type      {string}\n         * @default   ''\n         * @product   highcharts highmaps\n         * @apioption legend.valueSuffix\n         */\n        /**\n         * The width of the legend box. If a number is set, it translates to\n         * pixels. Since v7.0.2 it allows setting a percent string of the full\n         * chart width, for example `40%`.\n         *\n         * Defaults to the full chart width for legends below or above the\n         * chart, half the chart width for legends to the left and right.\n         *\n         * @sample {highcharts} highcharts/legend/width/\n         *         Aligned to the plot area\n         * @sample {highcharts} highcharts/legend/width-percent/\n         *         A percent of the chart width\n         *\n         * @type      {number|string}\n         * @since     2.0\n         * @apioption legend.width\n         */\n        /**\n         * The pixel padding between the legend item symbol and the legend\n         * item text.\n         *\n         * @sample {highcharts} highcharts/legend/symbolpadding/\n         *         Greater symbol width and padding\n         */\n        symbolPadding: 5,\n        /**\n         * The vertical alignment of the legend box. Can be one of `top`,\n         * `middle` or `bottom`. Vertical position can be further determined\n         * by the `y` option.\n         *\n         * In the case that the legend is aligned in a corner position, the\n         * `layout` option will determine whether to place it above/below\n         * or on the side of the plot area.\n         *\n         * When the [layout](#legend.layout) option is `proximate`, the\n         * `verticalAlign` option doesn't apply.\n         *\n         * @sample {highcharts} highcharts/legend/verticalalign/\n         *         Legend 100px from the top of the chart\n         * @sample {highstock} stock/legend/align/\n         *         Various legend options\n         * @sample {highmaps} maps/legend/alignment/\n         *         Legend alignment\n         *\n         * @type  {Highcharts.VerticalAlignValue}\n         * @since 2.0\n         */\n        verticalAlign: 'bottom',\n        // Width: undefined,\n        /**\n         * The x offset of the legend relative to its horizontal alignment\n         * `align` within chart.spacingLeft and chart.spacingRight. Negative\n         * x moves it to the left, positive x moves it to the right.\n         *\n         * @sample {highcharts} highcharts/legend/width/\n         *         Aligned to the plot area\n         *\n         * @since 2.0\n         */\n        x: 0,\n        /**\n         * The vertical offset of the legend relative to it's vertical alignment\n         * `verticalAlign` within chart.spacingTop and chart.spacingBottom.\n         *  Negative y moves it up, positive y moves it down.\n         *\n         * @sample {highcharts} highcharts/legend/verticalalign/\n         *         Legend 100px from the top of the chart\n         * @sample {highstock} stock/legend/align/\n         *         Various legend options\n         * @sample {highmaps} maps/legend/alignment/\n         *         Legend alignment\n         *\n         * @since 2.0\n         */\n        y: 0,\n        /**\n         * A title to be added on top of the legend.\n         *\n         * @sample {highcharts} highcharts/legend/title/\n         *         Legend title\n         * @sample {highmaps} maps/legend/alignment/\n         *         Legend with title\n         *\n         * @since 3.0\n         */\n        title: {\n            /**\n             * A text or HTML string for the title.\n             *\n             * @type      {string}\n             * @since     3.0\n             * @apioption legend.title.text\n             */\n            /**\n             * Generic CSS styles for the legend title.\n             *\n             * @see In styled mode, the legend title is styled with the\n             *      `.highcharts-legend-title` class.\n             *\n             * @type    {Highcharts.CSSObject}\n             * @default {\"fontSize\": \"0.8em\", \"fontWeight\": \"bold\"}\n             * @since   3.0\n             */\n            style: {\n                /**\n                 * @ignore\n                 */\n                fontSize: '0.8em',\n                /**\n                 * @ignore\n                 */\n                fontWeight: 'bold'\n            }\n        }\n    },\n    /**\n     * The loading options control the appearance of the loading screen\n     * that covers the plot area on chart operations. This screen only\n     * appears after an explicit call to `chart.showLoading()`. It is a\n     * utility for developers to communicate to the end user that something\n     * is going on, for example while retrieving new data via an XHR connection.\n     * The \"Loading...\" text itself is not part of this configuration\n     * object, but part of the `lang` object.\n     */\n    loading: {\n        /**\n         * The duration in milliseconds of the fade out effect.\n         *\n         * @sample highcharts/loading/hideduration/\n         *         Fade in and out over a second\n         *\n         * @type      {number}\n         * @default   100\n         * @since     1.2.0\n         * @apioption loading.hideDuration\n         */\n        /**\n         * The duration in milliseconds of the fade in effect.\n         *\n         * @sample highcharts/loading/hideduration/\n         *         Fade in and out over a second\n         *\n         * @type      {number}\n         * @default   100\n         * @since     1.2.0\n         * @apioption loading.showDuration\n         */\n        /**\n         * CSS styles for the loading label `span`.\n         *\n         * @see In styled mode, the loading label is styled with the\n         *      `.highcharts-loading-inner` class.\n         *\n         * @sample {highcharts|highmaps} highcharts/loading/labelstyle/\n         *         Vertically centered\n         * @sample {highstock} stock/loading/general/\n         *         Label styles\n         *\n         * @type    {Highcharts.CSSObject}\n         * @default {\"fontWeight\": \"bold\", \"position\": \"relative\", \"top\": \"45%\"}\n         * @since   1.2.0\n         */\n        labelStyle: {\n            /**\n             * @ignore\n             */\n            fontWeight: 'bold',\n            /**\n             * @ignore\n             */\n            position: 'relative',\n            /**\n             * @ignore\n             */\n            top: '45%'\n        },\n        /**\n         * CSS styles for the loading screen that covers the plot area.\n         *\n         * In styled mode, the loading label is styled with the\n         * `.highcharts-loading` class.\n         *\n         * @sample  {highcharts|highmaps} highcharts/loading/style/\n         *          Gray plot area, white text\n         * @sample  {highstock} stock/loading/general/\n         *          Gray plot area, white text\n         *\n         * @type    {Highcharts.CSSObject}\n         * @default {\"position\": \"absolute\", \"backgroundColor\": \"#ffffff\", \"opacity\": 0.5, \"textAlign\": \"center\"}\n         * @since   1.2.0\n         */\n        style: {\n            /**\n             * @ignore\n             */\n            position: 'absolute',\n            /**\n             * @ignore\n             */\n            backgroundColor: \"#ffffff\" /* Palette.backgroundColor */,\n            /**\n             * @ignore\n             */\n            opacity: 0.5,\n            /**\n             * @ignore\n             */\n            textAlign: 'center'\n        }\n    },\n    /**\n     * Options for the tooltip that appears when the user hovers over a\n     * series or point.\n     *\n     * @declare Highcharts.TooltipOptions\n     */\n    tooltip: {\n        /**\n         * The color of the tooltip border. When `undefined`, the border takes\n         * the color of the corresponding series or point.\n         *\n         * Note that the [borderWidth](#tooltip.borderWidth) is usually 0 by\n         * default, so the border color may not be visible until a border width\n         * is set.\n         *\n         * @sample {highcharts} highcharts/tooltip/bordercolor-default/ Follow\n         *         series by default\n         * @sample {highcharts} highcharts/tooltip/bordercolor-black/ Black\n         *         border\n         * @sample {highstock} stock/tooltip/general/ Styled tooltip\n         * @sample {highmaps} maps/tooltip/background-border/ Background and\n         *         border demo\n         *\n         * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         * @apioption tooltip.borderColor\n         */\n        /**\n         * A CSS class name to apply to the tooltip's container div,\n         * allowing unique CSS styling for each chart.\n         *\n         * @type      {string}\n         * @apioption tooltip.className\n         */\n        /**\n         * Since 4.1, the crosshair definitions are moved to the Axis object\n         * in order for a better separation from the tooltip. See\n         * [xAxis.crosshair](#xAxis.crosshair).\n         *\n         * @sample {highcharts} highcharts/tooltip/crosshairs-x/\n         *         Enable a crosshair for the x value\n         *\n         * @deprecated\n         *\n         * @type      {*}\n         * @default   true\n         * @apioption tooltip.crosshairs\n         */\n        /**\n         * Distance from point to tooltip in pixels.\n         *\n         * @type      {number}\n         * @default   16\n         * @apioption tooltip.distance\n         */\n        /**\n         * Whether the tooltip should follow the mouse as it moves across\n         * columns, pie slices and other point types with an extent.\n         * By default it behaves this way for pie, polygon, map, sankey\n         * and wordcloud series by override in the `plotOptions`\n         * for those series types.\n         *\n         * Does not apply if [split](#tooltip.split) is `true`.\n         *\n         * For touch moves to behave the same way, [followTouchMove](\n         * #tooltip.followTouchMove) must be `true` also.\n         *\n         * @sample highcharts/tooltip/followpointer/\n         *         Tooltip follow pointer comparison\n         *\n         * @type      {boolean}\n         * @default   {highcharts} false\n         * @default   {highstock} false\n         * @default   {highmaps} true\n         * @since     3.0\n         * @apioption tooltip.followPointer\n         */\n        /**\n         * Whether the tooltip should update as the finger moves on a touch\n         * device. If this is `true` and [chart.panning](#chart.panning) is\n         * set,`followTouchMove` will take over one-finger touches, so the user\n         * needs to use two fingers for zooming and panning.\n         *\n         * Note the difference to [followPointer](#tooltip.followPointer) that\n         * only defines the _position_ of the tooltip. If `followPointer` is\n         * false in for example a column series, the tooltip will show above or\n         * below the column, but as `followTouchMove` is true, the tooltip will\n         * jump from column to column as the user swipes across the plot area.\n         *\n         * @type      {boolean}\n         * @default   {highcharts} true\n         * @default   {highstock} true\n         * @default   {highmaps} false\n         * @since     3.0.1\n         * @apioption tooltip.followTouchMove\n         */\n        /**\n         * A [format string](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting)\n         * for the whole shared tooltip. When format strings are a requirement,\n         * it is usually more convenient to use `headerFormat`, `pointFormat`\n         * and `footerFormat`, but the `format` option allows combining them\n         * into one setting.\n         *\n         * The context of the format string is the same as that of the\n         * `tooltip.formatter` callback.\n         *\n         * @sample {highcharts} highcharts/tooltip/format-shared/\n         *         Format for shared tooltip\n         *\n         * @type      {string}\n         * @default   undefined\n         * @since     11.1.0\n         * @apioption tooltip.format\n         */\n        /**\n         * Callback function to format the text of the tooltip from scratch. In\n         * case of single or [shared](#tooltip.shared) tooltips, a string should\n         * be returned. In case of [split](#tooltip.split) tooltips, it should\n         * return an array where the first item is the header, and subsequent\n         * items are mapped to the points. Return `false` to disable tooltip for\n         * a specific point on series.\n         *\n         * A subset of HTML is supported. Unless `useHTML` is true, the HTML of\n         * the tooltip is parsed and converted to SVG, therefore this isn't a\n         * complete HTML renderer. The following HTML tags are supported: `b`,\n         * `br`, `em`, `i`, `span`, `strong`. Spans can be styled with a `style`\n         * attribute, but only text-related CSS, that is shared with SVG, is\n         * handled.\n         *\n         * The context of the formatter (since v12) is the\n         * [Point](https://api.highcharts.com/class-reference/Highcharts.Point)\n         * instance. If the tooltip is shared or split, an array `this.points`\n         * contains all points of the hovered x-value.\n         *\n         * Common properties from the Point to use in the formatter include:\n         *\n         * - **Point.percentage**:\n         *   Stacked series and pies only. The point's percentage of the total.\n         *\n         * - **Point.points**:\n         *   In a shared or split tooltip, this is an array containing all the\n         *   hovered points.\n         *\n         * - **this.series**:\n         *   The series object. The series name is available through\n         *   `this.series.name`.\n         *\n         * - **this.total**:\n         *   The total value at this point's x value in a stacked series, or the\n         *   sum of all slices in a pie series.\n         *\n         * - **this.x**:\n         *   The x value.\n         *\n         * - **this.y**:\n         *   The y value.\n         *\n         * @sample {highcharts} highcharts/tooltip/formatter-simple/\n         *         Simple string formatting\n         * @sample {highcharts} highcharts/tooltip/formatter-shared/\n         *         Formatting with shared tooltip\n         * @sample {highcharts|highstock} highcharts/tooltip/formatter-split/\n         *         Formatting with split tooltip\n         * @sample highcharts/tooltip/formatter-conditional-default/\n         *         Extending default formatter\n         * @sample {highstock} stock/tooltip/formatter/\n         *         Formatting with shared tooltip\n         * @sample {highmaps} maps/tooltip/formatter/\n         *         String formatting\n         *\n         * @type      {Highcharts.TooltipFormatterCallbackFunction}\n         * @apioption tooltip.formatter\n         */\n        /**\n         * Callback function to format the text of the tooltip for\n         * visible null points.\n         * Works analogously to [formatter](#tooltip.formatter).\n         *\n         * @sample highcharts/plotoptions/series-nullformat\n         *         Format data label and tooltip for null point.\n         *\n         * @type      {Highcharts.TooltipFormatterCallbackFunction}\n         * @apioption tooltip.nullFormatter\n         */\n        /**\n         * Whether to allow the tooltip to render outside the chart's SVG\n         * element box. By default (`false`), the tooltip is rendered within the\n         * chart's SVG element, which results in the tooltip being aligned\n         * inside the chart area. For small charts, this may result in clipping\n         * or overlapping. When `true`, a separate SVG element is created and\n         * overlaid on the page, allowing the tooltip to be aligned inside the\n         * page itself. Beware that with this option active, CSS classes on the\n         * chart's target container, with classnames matching the pattern\n         * 'highcharts-*', will be set on the tooltip as well. This is done to\n         * support theming for tooltips with this option.\n         *\n         * Defaults to `true` if `chart.scrollablePlotArea` is activated,\n         * otherwise `false`.\n         *\n         * @sample highcharts/tooltip/outside\n         *         Small charts with tooltips outside\n         *\n         * @type      {boolean|undefined}\n         * @default   undefined\n         * @since     6.1.1\n         * @apioption tooltip.outside\n         */\n        /**\n         * A callback function for formatting the HTML output for a single point\n         * in the tooltip. Like the `pointFormat` string, but with more\n         * flexibility.\n         *\n         * @type      {Highcharts.FormatterCallbackFunction<Highcharts.Point>}\n         * @since     4.1.0\n         * @context   Highcharts.Point\n         * @apioption tooltip.pointFormatter\n         */\n        /**\n         * A callback function to place the tooltip in a custom position. The\n         * callback receives three parameters: `labelWidth`, `labelHeight` and\n         * `point`, where point contains values for `plotX` and `plotY` telling\n         * where the reference point is in the plot area. Add `chart.plotLeft`\n         * and `chart.plotTop` to get the full coordinates.\n         *\n         * To find the actual hovered `Point` instance, use\n         * `this.chart.hoverPoint`. For shared or split tooltips, all the hover\n         * points are available in `this.chart.hoverPoints`.\n         *\n         * Since v7, when [tooltip.split](#tooltip.split) option is enabled,\n         * positioner is called for each of the boxes separately, including\n         * xAxis header. xAxis header is not a point, instead `point` argument\n         * contains info: `{ plotX: Number, plotY: Number, isHeader: Boolean }`\n         *\n         * The return should be an object containing x and y values, for example\n         * `{ x: 100, y: 100 }`.\n         *\n         * @sample {highcharts} highcharts/tooltip/positioner/\n         *         A fixed tooltip position\n         * @sample {highstock} stock/tooltip/positioner/\n         *         A fixed tooltip position on top of the chart\n         * @sample {highmaps} maps/tooltip/positioner/\n         *         A fixed tooltip position\n         * @sample {highstock} stock/tooltip/split-positioner/\n         *         Split tooltip with fixed positions\n         * @sample {highstock} stock/tooltip/positioner-scrollable-plotarea/\n         *         Scrollable plot area combined with tooltip positioner\n         *\n         * @type      {Highcharts.TooltipPositionerCallbackFunction}\n         * @since     2.2.4\n         * @apioption tooltip.positioner\n         */\n        /**\n         * Shows tooltip for all points with the same X value. Splits the\n         * tooltip into one label per series, with the header close to the axis.\n         * This is recommended over [shared](#tooltip.shared)\n         * tooltips for charts with multiple line series, generally making them\n         * easier to read. This option takes precedence over `tooltip.shared`.\n         *\n         * Not supported for [polar](#chart.polar) and [inverted](#chart.inverted) charts.\n         *\n         * @productdesc {highstock} In Highcharts Stock, tooltips are split\n         * by default since v6.0.0. Stock charts typically contain\n         * multi-dimension points and multiple panes, making split tooltips\n         * the preferred layout over\n         * the previous `shared` tooltip.\n         *\n         * @sample highcharts/tooltip/split/\n         *         Split tooltip\n         * @sample {highcharts|highstock} highcharts/tooltip/formatter-split/\n         *         Split tooltip and custom formatter callback\n         *\n         * @type      {boolean}\n         * @default   {highcharts} false\n         * @default   {highstock} true\n         * @since     5.0.0\n         * @product   highcharts highstock\n         * @apioption tooltip.split\n         */\n        /**\n         * Prevents the tooltip from switching or closing, when touched or\n         * pointed.\n         *\n         * @sample highcharts/tooltip/stickoncontact/\n         *         Tooltip sticks on pointer contact\n         *\n         * @type      {boolean}\n         * @since     8.0.1\n         * @apioption tooltip.stickOnContact\n         */\n        /**\n         * Use HTML to render the contents of the tooltip instead of SVG. Using\n         * HTML allows advanced formatting like tables and images in the\n         * tooltip. It is also recommended for rtl languages as it works around\n         * rtl bugs in early Firefox.\n         *\n         * @sample {highcharts|highstock} highcharts/tooltip/footerformat/\n         *         A table for value alignment\n         * @sample {highcharts|highstock} highcharts/tooltip/fullhtml/\n         *         Full HTML tooltip\n         * @sample {highmaps} maps/tooltip/usehtml/\n         *         Pure HTML tooltip\n         *\n         * @type      {boolean}\n         * @default   false\n         * @since     2.2\n         * @apioption tooltip.useHTML\n         */\n        /**\n         * How many decimals to show in each series' y value. This is\n         * overridable in each series' tooltip options object. The default is to\n         * preserve all decimals.\n         *\n         * @sample {highcharts|highstock} highcharts/tooltip/valuedecimals/\n         *         Set decimals, prefix and suffix for the value\n         * @sample {highmaps} maps/tooltip/valuedecimals/\n         *         Set decimals, prefix and suffix for the value\n         *\n         * @type      {number|undefined}\n         * @since     2.2\n         * @apioption tooltip.valueDecimals\n         */\n        /**\n         * A string to prepend to each series' y value. Overridable in each\n         * series' tooltip options object.\n         *\n         * @sample {highcharts|highstock} highcharts/tooltip/valuedecimals/\n         *         Set decimals, prefix and suffix for the value\n         * @sample {highmaps} maps/tooltip/valuedecimals/\n         *         Set decimals, prefix and suffix for the value\n         *\n         * @type      {string}\n         * @since     2.2\n         * @apioption tooltip.valuePrefix\n         */\n        /**\n         * A string to append to each series' y value. Overridable in each\n         * series' tooltip options object.\n         *\n         * @sample {highcharts|highstock} highcharts/tooltip/valuedecimals/\n         *         Set decimals, prefix and suffix for the value\n         * @sample {highmaps} maps/tooltip/valuedecimals/\n         *         Set decimals, prefix and suffix for the value\n         *\n         * @type      {string}\n         * @since     2.2\n         * @apioption tooltip.valueSuffix\n         */\n        /**\n         * The format for the date in the tooltip header if the X axis is a\n         * datetime axis. The default is a best guess based on the smallest\n         * distance between points in the chart.\n         *\n         * @sample {highcharts} highcharts/tooltip/xdateformat/\n         *         A different format\n         *\n         * @type      {string|Highcharts.DateTimeFormatOptions}\n         * @product   highcharts highstock gantt\n         * @apioption tooltip.xDateFormat\n         */\n        /**\n         * How many decimals to show for the `point.change`\n         * or the `point.cumulativeSum` value when the `series.compare`\n         * or the `series.cumulative` option is set.\n         * This is overridable in each series' tooltip options object.\n         *\n         * @type      {number}\n         * @default   2\n         * @since     1.0.1\n         * @product   highstock\n         * @apioption tooltip.changeDecimals\n         */\n        /**\n         * Enable or disable the tooltip.\n         *\n         * @sample {highcharts} highcharts/tooltip/enabled/\n         *         Disabled\n         * @sample {highcharts} highcharts/plotoptions/series-point-events-mouseover/\n         *         Disable tooltip and show values on chart instead\n         */\n        enabled: true,\n        /**\n         * Enable or disable animation of the tooltip.\n         *\n         * @type       {boolean|Partial<Highcharts.AnimationOptionsObject>}\n         * @since      2.3.0\n         */\n        animation: {\n            duration: 300,\n            // EaseOutCirc\n            easing: function (x) { return Math.sqrt(1 - Math.pow(x - 1, 2)); }\n        },\n        /**\n         * The radius of the rounded border corners.\n         *\n         * @sample {highcharts} highcharts/tooltip/bordercolor-default/\n         *         Default border radius\n         * @sample {highcharts} highcharts/tooltip/borderradius-0/\n         *         Square borders\n         * @sample {highmaps} maps/tooltip/background-border/\n         *         Background and border demo\n         */\n        borderRadius: 3,\n        /**\n         * For series on datetime axes, the date format in the tooltip's\n         * header will by default be guessed based on the closest data points.\n         * This member gives the default string representations used for\n         * each unit. For an overview of the string or object configuration, see\n         * [dateFormat](/class-reference/Highcharts.Time#dateFormat).\n         *\n         * @see [xAxis.dateTimeLabelFormats](#xAxis.dateTimeLabelFormats)\n         *\n         * @type    {Highcharts.Dictionary<string|Highcharts.DateTimeFormatOptions>}\n         * @product highcharts highstock gantt\n         */\n        dateTimeLabelFormats: {\n            /** @internal */\n            millisecond: '%[AebHMSL]',\n            /** @internal */\n            second: '%[AebHMS]',\n            /** @internal */\n            minute: '%[AebHM]',\n            /** @internal */\n            hour: '%[AebHM]',\n            /** @internal */\n            day: '%[AebY]',\n            /** @internal */\n            week: 'Week from %[AebY]',\n            /** @internal */\n            month: '%[BY]',\n            /** @internal */\n            year: '%Y'\n        },\n        /**\n         * A string to append to the tooltip format.\n         *\n         * @sample {highcharts} highcharts/tooltip/footerformat/\n         *         A table for value alignment\n         * @sample {highmaps} maps/tooltip/format/\n         *         Format demo\n         *\n         * @since 2.2\n         */\n        footerFormat: '',\n        /**\n         * The name of a symbol to use for the border around the tooltip\n         * header. Applies only when [tooltip.split](#tooltip.split) is\n         * enabled.\n         *\n         * Custom callbacks for symbol path generation can also be added to\n         * `Highcharts.SVGRenderer.prototype.symbols` the same way as for\n         * [series.marker.symbol](plotOptions.line.marker.symbol).\n         *\n         * @see [tooltip.shape](#tooltip.shape)\n         *\n         * @sample {highstock} stock/tooltip/split-positioner/\n         *         Different shapes for header and split boxes\n         *\n         * @type       {Highcharts.TooltipShapeValue}\n         * @validvalue [\"callout\", \"rect\"]\n         * @since      7.0\n         */\n        headerShape: 'callout',\n        /**\n         * The number of milliseconds to wait until the tooltip is hidden when\n         * mouse out from a point or chart.\n         *\n         * @since 3.0\n         */\n        hideDelay: 500,\n        /**\n         * Padding inside the tooltip, in pixels.\n         *\n         * @since 5.0.0\n         */\n        padding: 8,\n        /**\n         * The name of a symbol to use for the border around the tooltip. Can\n         * be one of: `\"callout\"`, `\"circle\"` or `\"rect\"`. When\n         * [tooltip.split](#tooltip.split)\n         * option is enabled, shape is applied to all boxes except header, which\n         * is controlled by\n         * [tooltip.headerShape](#tooltip.headerShape).\n         *\n         * Custom callbacks for symbol path generation can also be added to\n         * `Highcharts.SVGRenderer.prototype.symbols` the same way as for\n         * [series.marker.symbol](plotOptions.line.marker.symbol).\n         *\n         * @type  {Highcharts.TooltipShapeValue}\n         * @since 4.0\n         */\n        shape: 'callout',\n        /**\n         * Shows information in the tooltip for all points with the same X\n         * value. When the tooltip is shared, the entire plot area will capture\n         * mouse movement or touch events. Tooltip texts for series types with\n         * ordered data (not pie, scatter, flags etc) will be shown in a single\n         * bubble. This is recommended for single series charts and for\n         * tablet/mobile optimized charts.\n         *\n         * See also [tooltip.split](#tooltip.split), that is better suited for\n         * charts with many series, especially line-type series. The\n         * `tooltip.split` option takes precedence over `tooltip.shared`.\n         *\n         * @sample {highcharts} highcharts/tooltip/shared-false/\n         *         False by default\n         * @sample {highcharts} highcharts/tooltip/shared-true/\n         *         True\n         * @sample {highcharts} highcharts/tooltip/shared-x-crosshair/\n         *         True with x axis crosshair\n         * @sample {highcharts} highcharts/tooltip/shared-true-mixed-types/\n         *         True with mixed series types\n         *\n         * @since   2.1\n         * @product highcharts highstock\n         */\n        shared: false,\n        /**\n         * Proximity snap for graphs or single points. It defaults to 10 for\n         * mouse-powered devices and 25 for touch devices.\n         *\n         * Note that in most cases the whole plot area captures the mouse\n         * movement, and in these cases `tooltip.snap` doesn't make sense. This\n         * applies when [stickyTracking](#plotOptions.series.stickyTracking)\n         * is `true` (default) and when the tooltip is [shared](#tooltip.shared)\n         * or [split](#tooltip.split).\n         *\n         * @sample {highcharts} highcharts/tooltip/bordercolor-default/\n         *         10 px by default\n         * @sample {highcharts} highcharts/tooltip/snap-50/\n         *         50 px on graph\n         *\n         * @type    {number}\n         * @default 10/25\n         * @since   1.2.0\n         * @product highcharts highstock\n         */\n        snap: isTouchDevice ? 25 : 10,\n        /**\n         * The HTML of the tooltip header line. The context is the\n         * [Point class](https://api.highcharts.com/class-reference/Highcharts.Point).\n         * Variables are enclosed in curly brackets. Examples of common\n         * variables to include are `x`, `y`, `series.name` and `series.color`\n         * and other properties on the same form. The `point.key` variable\n         * contains the category name, x value or datetime string depending on\n         * the type of axis. For datetime axes, the `point.key` date format can\n         * be set using `tooltip.xDateFormat`.\n         *\n         * @sample {highcharts} highcharts/tooltip/footerformat/\n         *         An HTML table in the tooltip\n         * @sample {highstock} highcharts/tooltip/footerformat/\n         *         An HTML table in the tooltip\n         * @sample {highmaps} maps/tooltip/format/\n         *         Format demo\n         *\n         * @type      {string}\n         * @apioption tooltip.headerFormat\n         */\n        headerFormat: '<span style=\"font-size: 0.8em\">{ucfirst point.key}</span><br/>',\n        /**\n         * The HTML of the null point's line in the tooltip. Works analogously\n         * to [pointFormat](#tooltip.pointFormat).\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-nullformat\n         *         Format data label and tooltip for null point.\n         *\n         * @type      {string}\n         * @apioption tooltip.nullFormat\n         */\n        /**\n         * The HTML of the point's line in the tooltip. The context is the\n         * [Point class](https://api.highcharts.com/class-reference/Highcharts.Point).\n         * Variables are enclosed in curly brackets. Examples of common\n         * variables to include are `x`, `y`, `series.name` and `series.color`\n         * and other properties on the same form. Furthermore, `y` can be\n         * extended by the `tooltip.valuePrefix` and `tooltip.valueSuffix`\n         * variables. This can also be overridden for each series, which makes\n         * it a good hook for displaying units.\n         *\n         * In styled mode, the dot is colored by a class name rather than the\n         * point color.\n         *\n         * @sample {highcharts} highcharts/tooltip/pointformat/\n         *         A different point format with value suffix\n         * @sample {highcharts|highstock} highcharts/tooltip/pointformat-extra-information/\n         *         Show extra information about points in the tooltip\n         * @sample {highmaps} maps/tooltip/format/\n         *         Format demo\n         *\n         * @type       {string}\n         * @since      2.2\n         * @apioption  tooltip.pointFormat\n         */\n        pointFormat: '<span style=\"color:{point.color}\">\\u25CF</span> {series.name}: <b>{point.y}</b><br/>',\n        /**\n         * The background color or gradient for the tooltip.\n         *\n         * In styled mode, the stroke width is set in the\n         * `.highcharts-tooltip-box` class.\n         *\n         * @sample {highcharts} highcharts/tooltip/backgroundcolor-solid/\n         *         Yellowish background\n         * @sample {highcharts} highcharts/tooltip/backgroundcolor-gradient/\n         *         Gradient\n         * @sample {highcharts} highcharts/css/tooltip-border-background/\n         *         Tooltip in styled mode\n         * @sample {highstock} stock/tooltip/general/\n         *         Custom tooltip\n         * @sample {highstock} highcharts/css/tooltip-border-background/\n         *         Tooltip in styled mode\n         * @sample {highmaps} maps/tooltip/background-border/\n         *         Background and border demo\n         * @sample {highmaps} highcharts/css/tooltip-border-background/\n         *         Tooltip in styled mode\n         *\n         * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         */\n        backgroundColor: \"#ffffff\" /* Palette.backgroundColor */,\n        /**\n         * The pixel width of the tooltip border. Defaults to 0 for single\n         * tooltips and 1 for split tooltips.\n         *\n         * In styled mode, the stroke width is set in the\n         * `.highcharts-tooltip-box` class.\n         *\n         * @sample {highcharts} highcharts/tooltip/bordercolor-default/\n         *         2 pixels\n         * @sample {highcharts} highcharts/tooltip/borderwidth/\n         *         No border (shadow only)\n         * @sample {highcharts} highcharts/css/tooltip-border-background/\n         *         Tooltip in styled mode\n         * @sample {highstock} stock/tooltip/general/\n         *         Custom tooltip\n         * @sample {highstock} highcharts/css/tooltip-border-background/\n         *         Tooltip in styled mode\n         * @sample {highmaps} maps/tooltip/background-border/\n         *         Background and border demo\n         * @sample {highmaps} highcharts/css/tooltip-border-background/\n         *         Tooltip in styled mode\n         *\n         * @type {number}\n         */\n        borderWidth: void 0,\n        /**\n         * Whether to apply a drop shadow to the tooltip.\n         *\n         * @sample {highcharts} highcharts/tooltip/bordercolor-default/\n         *         True by default\n         * @sample {highcharts} highcharts/tooltip/shadow/\n         *         False\n         * @sample {highmaps} maps/tooltip/positioner/\n         *         Fixed tooltip position, border and shadow disabled\n         *\n         * @type {boolean|Highcharts.ShadowOptionsObject}\n         */\n        shadow: true,\n        /**\n         * Prevents the tooltip from switching or closing when touched or\n         * pointed.\n         *\n         * @sample highcharts/tooltip/stickoncontact/\n         *         Tooltip sticks on pointer contact\n         *\n         * @since 8.0.1\n         */\n        stickOnContact: false,\n        /**\n         * CSS styles for the tooltip. The tooltip can also be styled through\n         * the CSS class `.highcharts-tooltip`.\n         *\n         * Note that the default `pointerEvents` style makes the tooltip ignore\n         * mouse events, so in order to use clickable tooltips, this value must\n         * be set to `auto`.\n         *\n         * @sample {highcharts} highcharts/tooltip/style/\n         *         Greater padding, bold text\n         *\n         * @type {Highcharts.CSSObject}\n         */\n        style: {\n            /** @internal */\n            color: \"#333333\" /* Palette.neutralColor80 */,\n            /** @internal */\n            cursor: 'default',\n            /**\n             * @type {number|string}\n             */\n            fontSize: '0.8em'\n        },\n        /**\n         * Use HTML to render the contents of the tooltip instead of SVG. Using\n         * HTML allows advanced formatting like tables and images in the\n         * tooltip. It is also recommended for rtl languages as it works around\n         * rtl bugs in early Firefox.\n         *\n         * @sample {highcharts|highstock} highcharts/tooltip/footerformat/\n         *         A table for value alignment\n         * @sample {highcharts|highstock} highcharts/tooltip/fullhtml/\n         *         Full HTML tooltip\n         * @sample {highmaps} maps/tooltip/usehtml/\n         *         Pure HTML tooltip\n         *\n         * @since 2.2\n         */\n        useHTML: false\n    },\n    /**\n     * Highchart by default puts a credits label in the lower right corner\n     * of the chart. This can be changed using these options.\n     */\n    credits: {\n        /**\n         * Credits for map source to be concatenated with conventional credit\n         * text. By default this is a format string that collects copyright\n         * information from the map if available.\n         *\n         * @see [mapTextFull](#credits.mapTextFull)\n         * @see [text](#credits.text)\n         *\n         * @type      {string}\n         * @default   \\u00a9 <a href=\"{geojson.copyrightUrl}\">{geojson.copyrightShort}</a>\n         * @since     4.2.2\n         * @product   highmaps\n         * @apioption credits.mapText\n         */\n        /**\n         * Detailed credits for map source to be displayed on hover of credits\n         * text. By default this is a format string that collects copyright\n         * information from the map if available.\n         *\n         * @see [mapText](#credits.mapText)\n         * @see [text](#credits.text)\n         *\n         * @type      {string}\n         * @default   {geojson.copyright}\n         * @since     4.2.2\n         * @product   highmaps\n         * @apioption credits.mapTextFull\n         */\n        /**\n         * Whether to show the credits text.\n         *\n         * @sample {highcharts} highcharts/credits/enabled-false/\n         *         Credits disabled\n         * @sample {highstock} stock/credits/enabled/\n         *         Credits disabled\n         * @sample {highmaps} maps/credits/enabled-false/\n         *         Credits disabled\n         */\n        enabled: true,\n        /**\n         * The URL for the credits label.\n         *\n         * @sample {highcharts} highcharts/credits/href/\n         *         Custom URL and text\n         * @sample {highmaps} maps/credits/customized/\n         *         Custom URL and text\n         */\n        href: 'https://www.highcharts.com?credits',\n        /**\n         * Position configuration for the credits label.\n         *\n         * @sample {highcharts} highcharts/credits/position-left/\n         *         Left aligned\n         * @sample {highcharts} highcharts/credits/position-left/\n         *         Left aligned\n         * @sample {highmaps} maps/credits/customized/\n         *         Left aligned\n         * @sample {highmaps} maps/credits/customized/\n         *         Left aligned\n         *\n         * @type    {Highcharts.AlignObject}\n         * @since   2.1\n         */\n        position: {\n            /** @internal */\n            align: 'right',\n            /** @internal */\n            x: -10,\n            /** @internal */\n            verticalAlign: 'bottom',\n            /** @internal */\n            y: -5\n        },\n        /**\n         * CSS styles for the credits label.\n         *\n         * @see In styled mode, credits styles can be set with the\n         *      `.highcharts-credits` class.\n         *\n         * @type {Highcharts.CSSObject}\n         */\n        style: {\n            /** @internal */\n            cursor: 'pointer',\n            /** @internal */\n            color: \"#999999\" /* Palette.neutralColor40 */,\n            /**\n             * @type {number|string}\n             */\n            fontSize: '0.6em'\n        },\n        /**\n         * The text for the credits label.\n         *\n         * @productdesc {highmaps}\n         * If a map is loaded as GeoJSON, the text defaults to\n         * `Highcharts @ {map-credits}`. Otherwise, it defaults to\n         * `Highcharts.com`.\n         *\n         * @sample {highcharts} highcharts/credits/href/\n         *         Custom URL and text\n         * @sample {highmaps} maps/credits/customized/\n         *         Custom URL and text\n         */\n        text: 'Highcharts.com'\n    }\n};\nvar defaultTime = new Core_Time(defaultOptions.time);\n/**\n * Get the updated default options. Until 3.0.7, merely exposing defaultOptions\n * for outside modules wasn't enough because the setOptions method created a new\n * object.\n *\n * @function Highcharts.getOptions\n *\n * @return {Highcharts.Options}\n * Default options.\n */\nfunction getOptions() {\n    return defaultOptions;\n}\n/**\n * Merge the default options with custom options and return the new options\n * structure. Commonly used for defining reusable templates.\n *\n * @sample highcharts/members/setoptions Applying a global theme\n *\n * @function Highcharts.setOptions\n *\n * @param {Highcharts.Options} options\n * The new custom chart options.\n *\n * @return {Highcharts.Options}\n * Updated options.\n */\nfunction setOptions(options) {\n    Defaults_fireEvent(Core_Globals, 'setOptions', { options: options });\n    // Copy in the default options\n    Defaults_merge(true, defaultOptions, options);\n    // Update the time object\n    if (options.time) {\n        defaultTime.update(defaultOptions.time);\n    }\n    if (options.lang && 'locale' in options.lang) {\n        defaultTime.update({\n            locale: options.lang.locale\n        });\n    }\n    return defaultOptions;\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar DefaultOptions = {\n    defaultOptions: defaultOptions,\n    defaultTime: defaultTime,\n    getOptions: getOptions,\n    setOptions: setOptions\n};\n/* harmony default export */ var Defaults = (DefaultOptions);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * @typedef {\"plotBox\"|\"spacingBox\"} Highcharts.ButtonRelativeToValue\n */\n/**\n * Gets fired when a series is added to the chart after load time, using the\n * `addSeries` method. Returning `false` prevents the series from being added.\n *\n * @callback Highcharts.ChartAddSeriesCallbackFunction\n *\n * @param {Highcharts.Chart} this\n *        The chart on which the event occurred.\n *\n * @param {Highcharts.ChartAddSeriesEventObject} event\n *        The event that occurred.\n */\n/**\n * Contains common event information. Through the `options` property you can\n * access the series options that were passed to the `addSeries` method.\n *\n * @interface Highcharts.ChartAddSeriesEventObject\n */ /**\n* The series options that were passed to the `addSeries` method.\n* @name Highcharts.ChartAddSeriesEventObject#options\n* @type {Highcharts.SeriesOptionsType}\n*/ /**\n* Prevents the default behaviour of the event.\n* @name Highcharts.ChartAddSeriesEventObject#preventDefault\n* @type {Function}\n*/ /**\n* The event target.\n* @name Highcharts.ChartAddSeriesEventObject#target\n* @type {Highcharts.Chart}\n*/ /**\n* The event type.\n* @name Highcharts.ChartAddSeriesEventObject#type\n* @type {\"addSeries\"}\n*/\n/**\n * Gets fired when clicking on the plot background.\n *\n * @callback Highcharts.ChartClickCallbackFunction\n *\n * @param {Highcharts.Chart} this\n *        The chart on which the event occurred.\n *\n * @param {Highcharts.PointerEventObject} event\n *        The event that occurred.\n */\n/**\n * Contains an axes of the clicked spot.\n *\n * @interface Highcharts.ChartClickEventAxisObject\n */ /**\n* Axis at the clicked spot.\n* @name Highcharts.ChartClickEventAxisObject#axis\n* @type {Highcharts.Axis}\n*/ /**\n* Axis value at the clicked spot.\n* @name Highcharts.ChartClickEventAxisObject#value\n* @type {number}\n*/\n/**\n * Contains information about the clicked spot on the chart. Remember the unit\n * of a datetime axis is milliseconds since 1970-01-01 00:00:00.\n *\n * @interface Highcharts.ChartClickEventObject\n * @extends Highcharts.PointerEventObject\n */ /**\n* Information about the x-axis on the clicked spot.\n* @name Highcharts.ChartClickEventObject#xAxis\n* @type {Array<Highcharts.ChartClickEventAxisObject>}\n*/ /**\n* Information about the y-axis on the clicked spot.\n* @name Highcharts.ChartClickEventObject#yAxis\n* @type {Array<Highcharts.ChartClickEventAxisObject>}\n*/ /**\n* Information about the z-axis on the clicked spot.\n* @name Highcharts.ChartClickEventObject#zAxis\n* @type {Array<Highcharts.ChartClickEventAxisObject>|undefined}\n*/\n/**\n * Gets fired when the chart is finished loading.\n *\n * @callback Highcharts.ChartLoadCallbackFunction\n *\n * @param {Highcharts.Chart} this\n *        The chart on which the event occurred.\n *\n * @param {global.Event} event\n *        The event that occurred.\n */\n/**\n * Fires when the chart is redrawn, either after a call to `chart.redraw()` or\n * after an axis, series or point is modified with the `redraw` option set to\n * `true`.\n *\n * @callback Highcharts.ChartRedrawCallbackFunction\n *\n * @param {Highcharts.Chart} this\n *        The chart on which the event occurred.\n *\n * @param {global.Event} event\n *        The event that occurred.\n */\n/**\n * Gets fired after initial load of the chart (directly after the `load` event),\n * and after each redraw (directly after the `redraw` event).\n *\n * @callback Highcharts.ChartRenderCallbackFunction\n *\n * @param {Highcharts.Chart} this\n *        The chart on which the event occurred.\n *\n * @param {global.Event} event\n *        The event that occurred.\n */\n/**\n * Gets fired when an area of the chart has been selected. The default action\n * for the selection event is to zoom the chart to the selected area. It can be\n * prevented by calling `event.preventDefault()` or return false.\n *\n * @callback Highcharts.ChartSelectionCallbackFunction\n *\n * @param {Highcharts.Chart} this\n *        The chart on which the event occurred.\n *\n * @param {Highcharts.SelectEventObject} event\n *        Event informations\n *\n * @return {boolean|undefined}\n *         Return false to prevent the default action, usually zoom.\n */\n(''); // Detach doclets above\n\n;// ./code/es5/es-modules/Core/Color/Color.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar Color_isNumber = Core_Utilities.isNumber, Color_merge = Core_Utilities.merge, Color_pInt = Core_Utilities.pInt, Color_defined = Core_Utilities.defined;\n/* *\n *\n *  Class\n *\n * */\n/* eslint-disable valid-jsdoc */\n/**\n * Handle color operations. Some object methods are chainable.\n *\n * @class\n * @name Highcharts.Color\n *\n * @param {Highcharts.ColorType} input\n * The input color in either rgba or hex format\n */\nvar Color = /** @class */ (function () {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    function Color(input) {\n        this.rgba = [NaN, NaN, NaN, NaN];\n        this.input = input;\n        var GlobalColor = Core_Globals.Color;\n        // Backwards compatibility, allow class overwrite\n        if (GlobalColor && GlobalColor !== Color) {\n            return new GlobalColor(input);\n        }\n        var result,\n            rgba,\n            i,\n            parser;\n        // Gradients\n        if (typeof input === 'object' &&\n            typeof input.stops !== 'undefined') {\n            this.stops = input.stops.map(function (stop) { return new Color(stop[1]); });\n            // Solid colors\n        }\n        else if (typeof input === 'string') {\n            this.input = input = (Color.names[input.toLowerCase()] || input);\n            i = Color.parsers.length;\n            while (i-- && !rgba) {\n                parser = Color.parsers[i];\n                result = parser.regex.exec(input);\n                if (result) {\n                    rgba = parser.parse(result);\n                }\n            }\n        }\n        if (rgba) {\n            this.rgba = rgba;\n        }\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * Creates a color instance out of a color string or object.\n     *\n     * @function Highcharts.Color.parse\n     *\n     * @param {Highcharts.ColorType} [input]\n     * The input color in either rgba or hex format.\n     *\n     * @return {Highcharts.Color}\n     * Color instance.\n     */\n    Color.parse = function (input) {\n        return input ? new Color(input) : Color.None;\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Return the color or gradient stops in the specified format\n     *\n     * @function Highcharts.Color#get\n     *\n     * @param {string} [format]\n     * Possible values are 'a', 'rgb', 'rgba' (default).\n     *\n     * @return {Highcharts.ColorType}\n     * This color as a string or gradient stops.\n     */\n    Color.prototype.get = function (format) {\n        var input = this.input,\n            rgba = this.rgba;\n        if (typeof input === 'object' &&\n            typeof this.stops !== 'undefined') {\n            var ret_1 = Color_merge(input);\n            ret_1.stops = [].slice.call(ret_1.stops);\n            this.stops.forEach(function (stop, i) {\n                ret_1.stops[i] = [\n                    ret_1.stops[i][0],\n                    stop.get(format)\n                ];\n            });\n            return ret_1;\n        }\n        // It's NaN if gradient colors on a column chart\n        if (rgba && Color_isNumber(rgba[0])) {\n            if (format === 'rgb' || (!format && rgba[3] === 1)) {\n                return 'rgb(' + rgba[0] + ',' + rgba[1] + ',' + rgba[2] + ')';\n            }\n            if (format === 'a') {\n                return \"\".concat(rgba[3]);\n            }\n            return 'rgba(' + rgba.join(',') + ')';\n        }\n        return input;\n    };\n    /**\n     * Brighten the color instance.\n     *\n     * @function Highcharts.Color#brighten\n     *\n     * @param {number} alpha\n     * The alpha value.\n     *\n     * @return {Highcharts.Color}\n     * This color with modifications.\n     */\n    Color.prototype.brighten = function (alpha) {\n        var rgba = this.rgba;\n        if (this.stops) {\n            this.stops.forEach(function (stop) {\n                stop.brighten(alpha);\n            });\n        }\n        else if (Color_isNumber(alpha) && alpha !== 0) {\n            for (var i = 0; i < 3; i++) {\n                rgba[i] += Color_pInt(alpha * 255);\n                if (rgba[i] < 0) {\n                    rgba[i] = 0;\n                }\n                if (rgba[i] > 255) {\n                    rgba[i] = 255;\n                }\n            }\n        }\n        return this;\n    };\n    /**\n     * Set the color's opacity to a given alpha value.\n     *\n     * @function Highcharts.Color#setOpacity\n     *\n     * @param {number} alpha\n     *        Opacity between 0 and 1.\n     *\n     * @return {Highcharts.Color}\n     *         Color with modifications.\n     */\n    Color.prototype.setOpacity = function (alpha) {\n        this.rgba[3] = alpha;\n        return this;\n    };\n    /**\n     * Return an intermediate color between two colors.\n     *\n     * @function Highcharts.Color#tweenTo\n     *\n     * @param {Highcharts.Color} to\n     * The color object to tween to.\n     *\n     * @param {number} pos\n     * The intermediate position, where 0 is the from color (current color\n     * item), and 1 is the `to` color.\n     *\n     * @return {Highcharts.ColorType}\n     * The intermediate color in rgba notation, or unsupported type.\n     */\n    Color.prototype.tweenTo = function (to, pos) {\n        var fromRgba = this.rgba,\n            toRgba = to.rgba;\n        // Unsupported color, return to-color (#3920, #7034)\n        if (!Color_isNumber(fromRgba[0]) || !Color_isNumber(toRgba[0])) {\n            return to.input || 'none';\n        }\n        // Check for has alpha, because rgba colors perform worse due to\n        // lack of support in WebKit.\n        var hasAlpha = (toRgba[3] !== 1 || fromRgba[3] !== 1),\n            channel = function (to,\n            i) {\n                return to + (fromRgba[i] - to) * (1 - pos);\n        }, rgba = toRgba.slice(0, 3).map(channel).map(Math.round);\n        if (hasAlpha) {\n            rgba.push(channel(toRgba[3], 3));\n        }\n        return (hasAlpha ? 'rgba(' : 'rgb(') + rgba.join(',') + ')';\n    };\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    /**\n     * Collection of named colors. Can be extended from the outside by adding\n     * colors to Highcharts.Color.names.\n     * @private\n     */\n    Color.names = {\n        white: '#ffffff',\n        black: '#000000'\n    };\n    /**\n     * Collection of parsers. This can be extended from the outside by pushing\n     * parsers to `Color.parsers`.\n     * @private\n     */\n    Color.parsers = [{\n            // RGBA color\n            // eslint-disable-next-line max-len\n            regex: /rgba\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d?(?:\\.\\d+)?)\\s*\\)/,\n            parse: function (result) {\n                return [\n                    Color_pInt(result[1]),\n                    Color_pInt(result[2]),\n                    Color_pInt(result[3]),\n                    parseFloat(result[4], 10)\n                ];\n            }\n        }, {\n            // RGB color\n            regex: /rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)/,\n            parse: function (result) {\n                return [Color_pInt(result[1]), Color_pInt(result[2]), Color_pInt(result[3]), 1];\n            }\n        }, {\n            // RGBA 3 & 4 digit hex color, e.g. #F0F, #F0FA\n            regex: /^#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?$/i,\n            parse: function (result) {\n                // #abcd => #aabbccdd, hence result + result.\n                return [\n                    (Color_pInt(result[1] + result[1], 16)),\n                    (Color_pInt(result[2] + result[2], 16)),\n                    (Color_pInt(result[3] + result[3], 16)),\n                    !Color_defined(result[4]) ?\n                        1 :\n                        (Color_pInt(result[4] + result[4], 16) / 255)\n                ];\n            }\n        }, {\n            // RGBA 6 & 8 digit hex color, e.g. #FFCC00, #FFCC00FF\n            regex: /^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?$/i,\n            parse: function (result) {\n                return [\n                    Color_pInt(result[1], 16),\n                    Color_pInt(result[2], 16),\n                    Color_pInt(result[3], 16),\n                    !Color_defined(result[4]) ?\n                        1 :\n                        (Color_pInt(result[4], 16) / 255)\n                ];\n            }\n        }];\n    // Must be last static member for init cycle\n    Color.None = new Color('');\n    return Color;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Color_Color = (Color);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * A valid color to be parsed and handled by Highcharts. Highcharts internally\n * supports hex colors like `#ffffff`, rgb colors like `rgb(255,255,255)` and\n * rgba colors like `rgba(255,255,255,1)`. Other colors may be supported by the\n * browsers and displayed correctly, but Highcharts is not able to process them\n * and apply concepts like opacity and brightening.\n *\n * @typedef {string} Highcharts.ColorString\n */\n/**\n * A valid color type than can be parsed and handled by Highcharts. It can be a\n * color string, a gradient object, or a pattern object.\n *\n * @typedef {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject} Highcharts.ColorType\n */\n/**\n * Gradient options instead of a solid color.\n *\n * @example\n * // Linear gradient used as a color option\n * color: {\n *     linearGradient: { x1: 0, x2: 0, y1: 0, y2: 1 },\n *     stops: [\n *         [0, '#003399'], // start\n *         [0.5, '#ffffff'], // middle\n *         [1, '#3366AA'] // end\n *     ]\n * }\n *\n * @interface Highcharts.GradientColorObject\n */ /**\n* Holds an object that defines the start position and the end position relative\n* to the shape.\n* @name Highcharts.GradientColorObject#linearGradient\n* @type {Highcharts.LinearGradientColorObject|undefined}\n*/ /**\n* Holds an object that defines the center position and the radius.\n* @name Highcharts.GradientColorObject#radialGradient\n* @type {Highcharts.RadialGradientColorObject|undefined}\n*/ /**\n* The first item in each tuple is the position in the gradient, where 0 is the\n* start of the gradient and 1 is the end of the gradient. Multiple stops can be\n* applied. The second item is the color for each stop. This color can also be\n* given in the rgba format.\n* @name Highcharts.GradientColorObject#stops\n* @type {Array<Highcharts.GradientColorStopObject>}\n*/\n/**\n * Color stop tuple.\n *\n * @see Highcharts.GradientColorObject\n *\n * @interface Highcharts.GradientColorStopObject\n */ /**\n* @name Highcharts.GradientColorStopObject#0\n* @type {number}\n*/ /**\n* @name Highcharts.GradientColorStopObject#1\n* @type {Highcharts.ColorString}\n*/ /**\n* @name Highcharts.GradientColorStopObject#color\n* @type {Highcharts.Color|undefined}\n*/\n/**\n * Defines the start position and the end position for a gradient relative\n * to the shape. Start position (x1, y1) and end position (x2, y2) are relative\n * to the shape, where 0 means top/left and 1 is bottom/right.\n *\n * @interface Highcharts.LinearGradientColorObject\n */ /**\n* Start horizontal position of the gradient. Float ranges 0-1.\n* @name Highcharts.LinearGradientColorObject#x1\n* @type {number}\n*/ /**\n* End horizontal position of the gradient. Float ranges 0-1.\n* @name Highcharts.LinearGradientColorObject#x2\n* @type {number}\n*/ /**\n* Start vertical position of the gradient. Float ranges 0-1.\n* @name Highcharts.LinearGradientColorObject#y1\n* @type {number}\n*/ /**\n* End vertical position of the gradient. Float ranges 0-1.\n* @name Highcharts.LinearGradientColorObject#y2\n* @type {number}\n*/\n/**\n * Defines the center position and the radius for a gradient.\n *\n * @interface Highcharts.RadialGradientColorObject\n */ /**\n* Center horizontal position relative to the shape. Float ranges 0-1.\n* @name Highcharts.RadialGradientColorObject#cx\n* @type {number}\n*/ /**\n* Center vertical position relative to the shape. Float ranges 0-1.\n* @name Highcharts.RadialGradientColorObject#cy\n* @type {number}\n*/ /**\n* Radius relative to the shape. Float ranges 0-1.\n* @name Highcharts.RadialGradientColorObject#r\n* @type {number}\n*/\n/**\n * Creates a color instance out of a color string.\n *\n * @function Highcharts.color\n *\n * @param {Highcharts.ColorType} input\n *        The input color in either rgba or hex format\n *\n * @return {Highcharts.Color}\n *         Color instance\n */\n(''); // Detach doclets above\n\n;// ./code/es5/es-modules/Core/Animation/Fx.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar color = Color_Color.parse;\n\nvar Fx_win = Core_Globals.win;\n\nvar Fx_isNumber = Core_Utilities.isNumber, Fx_objectEach = Core_Utilities.objectEach;\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/* *\n *\n *  Class\n *\n * */\n/**\n * An animator object used internally. One instance applies to one property\n * (attribute or style prop) on one element. Animation is always initiated\n * through {@link SVGElement#animate}.\n *\n * @example\n * let rect = renderer.rect(0, 0, 10, 10).add();\n * rect.animate({ width: 100 });\n *\n * @private\n * @class\n * @name Highcharts.Fx\n *\n * @param {Highcharts.HTMLDOMElement|Highcharts.SVGElement} elem\n * The element to animate.\n *\n * @param {Partial<Highcharts.AnimationOptionsObject>} options\n * Animation options.\n *\n * @param {string} prop\n * The single attribute or CSS property to animate.\n */\nvar Fx = /** @class */ (function () {\n    /* *\n     *\n     *  Constructors\n     *\n     * */\n    function Fx(elem, options, prop) {\n        this.pos = NaN;\n        this.options = options;\n        this.elem = elem;\n        this.prop = prop;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Set the current step of a path definition on SVGElement.\n     *\n     * @function Highcharts.Fx#dSetter\n     *\n     */\n    Fx.prototype.dSetter = function () {\n        var paths = this.paths,\n            start = paths && paths[0],\n            end = paths && paths[1],\n            now = this.now || 0;\n        var path = [];\n        // Land on the final path without adjustment points appended in the ends\n        if (now === 1 || !start || !end) {\n            path = this.toD || [];\n        }\n        else if (start.length === end.length && now < 1) {\n            for (var i = 0; i < end.length; i++) {\n                // Tween between the start segment and the end segment. Start\n                // with a copy of the end segment and tween the appropriate\n                // numerics\n                var startSeg = start[i];\n                var endSeg = end[i];\n                var tweenSeg = [];\n                for (var j = 0; j < endSeg.length; j++) {\n                    var startItem = startSeg[j];\n                    var endItem = endSeg[j];\n                    // Tween numbers\n                    if (Fx_isNumber(startItem) &&\n                        Fx_isNumber(endItem) &&\n                        // Arc boolean flags\n                        !(endSeg[0] === 'A' && (j === 4 || j === 5))) {\n                        tweenSeg[j] = startItem + now * (endItem - startItem);\n                        // Strings, take directly from the end segment\n                    }\n                    else {\n                        tweenSeg[j] = endItem;\n                    }\n                }\n                path.push(tweenSeg);\n            }\n            // If animation is finished or length not matching, land on right value\n        }\n        else {\n            path = end;\n        }\n        this.elem.attr('d', path, void 0, true);\n    };\n    /**\n     * Update the element with the current animation step.\n     *\n     * @function Highcharts.Fx#update\n     *\n     */\n    Fx.prototype.update = function () {\n        var elem = this.elem,\n            prop = this.prop, // If destroyed, it is null\n            now = this.now,\n            step = this.options.step;\n        // Animation setter defined from outside\n        if (this[prop + 'Setter']) {\n            this[prop + 'Setter']();\n            // Other animations on SVGElement\n        }\n        else if (elem.attr) {\n            if (elem.element) {\n                elem.attr(prop, now, null, true);\n            }\n            // HTML styles, raw HTML content like container size\n        }\n        else {\n            elem.style[prop] = now + this.unit;\n        }\n        if (step) {\n            step.call(elem, now, this);\n        }\n    };\n    /**\n     * Run an animation.\n     *\n     * @function Highcharts.Fx#run\n     *\n     * @param {number} from\n     *        The current value, value to start from.\n     *\n     * @param {number} to\n     *        The end value, value to land on.\n     *\n     * @param {string} unit\n     *        The property unit, for example `px`.\n     *\n     */\n    Fx.prototype.run = function (from, to, unit) {\n        var self = this,\n            options = self.options,\n            timer = function (gotoEnd) {\n                return timer.stopped ? false : self.step(gotoEnd);\n        }, requestAnimationFrame = Fx_win.requestAnimationFrame ||\n            function (step) {\n                setTimeout(step, 13);\n            }, step = function () {\n            for (var i = 0; i < Fx.timers.length; i++) {\n                if (!Fx.timers[i]()) {\n                    Fx.timers.splice(i--, 1);\n                }\n            }\n            if (Fx.timers.length) {\n                requestAnimationFrame(step);\n            }\n        };\n        if (from === to && !this.elem['forceAnimate:' + this.prop]) {\n            delete options.curAnim[this.prop];\n            if (options.complete &&\n                Object.keys(options.curAnim).length === 0) {\n                options.complete.call(this.elem);\n            }\n        }\n        else { // #7166\n            this.startTime = +new Date();\n            this.start = from;\n            this.end = to;\n            this.unit = unit;\n            this.now = this.start;\n            this.pos = 0;\n            timer.elem = this.elem;\n            timer.prop = this.prop;\n            if (timer() && Fx.timers.push(timer) === 1) {\n                requestAnimationFrame(step);\n            }\n        }\n    };\n    /**\n     * Run a single step in the animation.\n     *\n     * @function Highcharts.Fx#step\n     *\n     * @param {boolean} [gotoEnd]\n     *        Whether to go to the endpoint of the animation after abort.\n     *\n     * @return {boolean}\n     *         Returns `true` if animation continues.\n     */\n    Fx.prototype.step = function (gotoEnd) {\n        var t = +new Date(),\n            options = this.options,\n            elem = this.elem,\n            complete = options.complete,\n            duration = options.duration,\n            curAnim = options.curAnim;\n        var ret,\n            done;\n        if (!!elem.attr && !elem.element) { // #2616, element is destroyed\n            ret = false;\n        }\n        else if (gotoEnd || t >= duration + this.startTime) {\n            this.now = this.end;\n            this.pos = 1;\n            this.update();\n            curAnim[this.prop] = true;\n            done = true;\n            Fx_objectEach(curAnim, function (val) {\n                if (val !== true) {\n                    done = false;\n                }\n            });\n            if (done && complete) {\n                complete.call(elem);\n            }\n            ret = false;\n        }\n        else {\n            this.pos = options.easing((t - this.startTime) / duration);\n            this.now = this.start + ((this.end -\n                this.start) * this.pos);\n            this.update();\n            ret = true;\n        }\n        return ret;\n    };\n    /**\n     * Prepare start and end values so that the path can be animated one to one.\n     *\n     * @function Highcharts.Fx#initPath\n     *\n     * @param {Highcharts.SVGElement} elem\n     *        The SVGElement item.\n     *\n     * @param {Highcharts.SVGPathArray|undefined} fromD\n     *        Starting path definition.\n     *\n     * @param {Highcharts.SVGPathArray} toD\n     *        Ending path definition.\n     *\n     * @return {Array<Highcharts.SVGPathArray,Highcharts.SVGPathArray>}\n     *         An array containing start and end paths in array form so that\n     *         they can be animated in parallel.\n     */\n    Fx.prototype.initPath = function (elem, fromD, toD) {\n        var startX = elem.startX,\n            endX = elem.endX,\n            end = toD.slice(), // Copy\n            isArea = elem.isArea,\n            positionFactor = isArea ? 2 : 1,\n            disableAnimation = fromD &&\n                toD.length > fromD.length &&\n                toD.hasStackedCliffs; // #16925\n            var shift,\n            fullLength,\n            i,\n            reverse,\n            start = fromD && fromD.slice(); // Copy\n            if (!start || disableAnimation) {\n                return [end,\n            end];\n        }\n        /**\n         * If shifting points, prepend a dummy point to the end path.\n         * @private\n         */\n        function prepend(arr, other) {\n            while (arr.length < fullLength) {\n                // Move to, line to or curve to?\n                var moveSegment = arr[0],\n                    otherSegment = other[fullLength - arr.length];\n                if (otherSegment && moveSegment[0] === 'M') {\n                    if (otherSegment[0] === 'C') {\n                        arr[0] = [\n                            'C',\n                            moveSegment[1],\n                            moveSegment[2],\n                            moveSegment[1],\n                            moveSegment[2],\n                            moveSegment[1],\n                            moveSegment[2]\n                        ];\n                    }\n                    else {\n                        arr[0] = ['L', moveSegment[1], moveSegment[2]];\n                    }\n                }\n                // Prepend a copy of the first point\n                arr.unshift(moveSegment);\n                // For areas, the bottom path goes back again to the left, so we\n                // need to append a copy of the last point.\n                if (isArea) {\n                    var z = arr.pop();\n                    arr.push(arr[arr.length - 1], z); // Append point and the Z\n                }\n            }\n        }\n        /**\n         * Copy and append last point until the length matches the end length.\n         * @private\n         */\n        function append(arr) {\n            while (arr.length < fullLength) {\n                // Pull out the slice that is going to be appended or inserted.\n                // In a line graph, the positionFactor is 1, and the last point\n                // is sliced out. In an area graph, the positionFactor is 2,\n                // causing the middle two points to be sliced out, since an area\n                // path starts at left, follows the upper path then turns and\n                // follows the bottom back.\n                var segmentToAdd = arr[Math.floor(arr.length / positionFactor) - 1].slice();\n                // Disable the first control point of curve segments\n                if (segmentToAdd[0] === 'C') {\n                    segmentToAdd[1] = segmentToAdd[5];\n                    segmentToAdd[2] = segmentToAdd[6];\n                }\n                if (!isArea) {\n                    arr.push(segmentToAdd);\n                }\n                else {\n                    var lowerSegmentToAdd = arr[Math.floor(arr.length / positionFactor)].slice();\n                    arr.splice(arr.length / 2, 0, segmentToAdd, lowerSegmentToAdd);\n                }\n            }\n        }\n        // For sideways animation, find out how much we need to shift to get the\n        // start path Xs to match the end path Xs.\n        if (startX && endX && endX.length) {\n            for (i = 0; i < startX.length; i++) {\n                // Moving left, new points coming in on right\n                if (startX[i] === endX[0]) {\n                    shift = i;\n                    break;\n                    // Moving right\n                }\n                else if (startX[0] ===\n                    endX[endX.length - startX.length + i]) {\n                    shift = i;\n                    reverse = true;\n                    break;\n                    // Fixed from the right side, \"scaling\" left\n                }\n                else if (startX[startX.length - 1] ===\n                    endX[endX.length - startX.length + i]) {\n                    shift = startX.length - i;\n                    break;\n                }\n            }\n            if (typeof shift === 'undefined') {\n                start = [];\n            }\n        }\n        if (start.length && Fx_isNumber(shift)) {\n            // The common target length for the start and end array, where both\n            // arrays are padded in opposite ends\n            fullLength = end.length + shift * positionFactor;\n            if (!reverse) {\n                prepend(end, start);\n                append(start);\n            }\n            else {\n                prepend(start, end);\n                append(end);\n            }\n        }\n        return [start, end];\n    };\n    /**\n     * Handle animation of the color attributes directly.\n     *\n     * @function Highcharts.Fx#fillSetter\n     *\n     */\n    Fx.prototype.fillSetter = function () {\n        Fx.prototype.strokeSetter.apply(this, arguments);\n    };\n    /**\n     * Handle animation of the color attributes directly.\n     *\n     * @function Highcharts.Fx#strokeSetter\n     *\n     */\n    Fx.prototype.strokeSetter = function () {\n        this.elem.attr(this.prop, color(this.start).tweenTo(color(this.end), this.pos), void 0, true);\n    };\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    Fx.timers = [];\n    return Fx;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Animation_Fx = (Fx);\n\n;// ./code/es5/es-modules/Core/Animation/AnimationUtilities.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar AnimationUtilities_defined = Core_Utilities.defined, AnimationUtilities_getStyle = Core_Utilities.getStyle, AnimationUtilities_isArray = Core_Utilities.isArray, AnimationUtilities_isNumber = Core_Utilities.isNumber, AnimationUtilities_isObject = Core_Utilities.isObject, AnimationUtilities_merge = Core_Utilities.merge, AnimationUtilities_objectEach = Core_Utilities.objectEach, AnimationUtilities_pick = Core_Utilities.pick;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Set the global animation to either a given value, or fall back to the given\n * chart's animation option.\n *\n * @function Highcharts.setAnimation\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>|undefined} animation\n *        The animation object.\n *\n * @param {Highcharts.Chart} chart\n *        The chart instance.\n *\n * @todo\n * This function always relates to a chart, and sets a property on the renderer,\n * so it should be moved to the SVGRenderer.\n */\nfunction setAnimation(animation, chart) {\n    chart.renderer.globalAnimation = AnimationUtilities_pick(animation, chart.options.chart.animation, true);\n}\n/**\n * Get the animation in object form, where a disabled animation is always\n * returned as `{ duration: 0 }`.\n *\n * @function Highcharts.animObject\n *\n * @param {boolean|Highcharts.AnimationOptionsObject} [animation=0]\n *        An animation setting. Can be an object with duration, complete and\n *        easing properties, or a boolean to enable or disable.\n *\n * @return {Highcharts.AnimationOptionsObject}\n *         An object with at least a duration property.\n */\nfunction animObject(animation) {\n    return AnimationUtilities_isObject(animation) ?\n        AnimationUtilities_merge({ duration: 500, defer: 0 }, animation) :\n        { duration: animation ? 500 : 0, defer: 0 };\n}\n/**\n * Get the defer as a number value from series animation options.\n *\n * @function Highcharts.getDeferredAnimation\n *\n * @param {Highcharts.Chart} chart\n *        The chart instance.\n *\n * @param {boolean|Highcharts.AnimationOptionsObject} animation\n *        An animation setting. Can be an object with duration, complete and\n *        easing properties, or a boolean to enable or disable.\n *\n * @param {Highcharts.Series} [series]\n *        Series to defer animation.\n *\n * @return {number}\n *        The numeric value.\n */\nfunction getDeferredAnimation(chart, animation, series) {\n    var labelAnimation = animObject(animation),\n        s = series ? [series] : chart.series;\n    var defer = 0,\n        duration = 0;\n    s.forEach(function (series) {\n        var seriesAnim = animObject(series.options.animation);\n        defer = AnimationUtilities_isObject(animation) && AnimationUtilities_defined(animation.defer) ?\n            labelAnimation.defer :\n            Math.max(defer, seriesAnim.duration + seriesAnim.defer);\n        duration = Math.min(labelAnimation.duration, seriesAnim.duration);\n    });\n    // Disable defer for exporting\n    if (chart.renderer.forExport) {\n        defer = 0;\n    }\n    var anim = {\n            defer: Math.max(0,\n        defer - duration),\n            duration: Math.min(defer,\n        duration)\n        };\n    return anim;\n}\n/**\n * The global animate method, which uses Fx to create individual animators.\n *\n * @function Highcharts.animate\n *\n * @param {Highcharts.HTMLDOMElement|Highcharts.SVGElement} el\n *        The element to animate.\n *\n * @param {Highcharts.CSSObject|Highcharts.SVGAttributes} params\n *        An object containing key-value pairs of the properties to animate.\n *        Supports numeric as pixel-based CSS properties for HTML objects and\n *        attributes for SVGElements.\n *\n * @param {Partial<Highcharts.AnimationOptionsObject>} [opt]\n *        Animation options.\n *\n * @return {void}\n */\nfunction animate(el, params, opt) {\n    var start,\n        unit = '',\n        end,\n        fx,\n        args;\n    if (!AnimationUtilities_isObject(opt)) { // Number or undefined/null\n        args = arguments;\n        opt = {\n            duration: args[2],\n            easing: args[3],\n            complete: args[4]\n        };\n    }\n    if (!AnimationUtilities_isNumber(opt.duration)) {\n        opt.duration = 400;\n    }\n    opt.easing = typeof opt.easing === 'function' ?\n        opt.easing :\n        (Math[opt.easing] || Math.easeInOutSine);\n    opt.curAnim = AnimationUtilities_merge(params);\n    AnimationUtilities_objectEach(params, function (val, prop) {\n        // Stop current running animation of this property\n        stop(el, prop);\n        fx = new Animation_Fx(el, opt, prop);\n        end = void 0;\n        if (prop === 'd' && AnimationUtilities_isArray(params.d)) {\n            fx.paths = fx.initPath(el, el.pathArray, params.d);\n            fx.toD = params.d;\n            start = 0;\n            end = 1;\n        }\n        else if (el.attr) {\n            start = el.attr(prop);\n        }\n        else {\n            start = parseFloat(AnimationUtilities_getStyle(el, prop)) || 0;\n            if (prop !== 'opacity') {\n                unit = 'px';\n            }\n        }\n        if (!end) {\n            end = val;\n        }\n        if (typeof end === 'string' && end.match('px')) {\n            end = end.replace(/px/g, ''); // #4351\n        }\n        fx.run(start, end, unit);\n    });\n}\n/**\n * Stop running animation.\n *\n * @function Highcharts.stop\n *\n * @param {Highcharts.SVGElement} el\n *        The SVGElement to stop animation on.\n *\n * @param {string} [prop]\n *        The property to stop animating. If given, the stop method will stop a\n *        single property from animating, while others continue.\n *\n * @return {void}\n *\n * @todo\n * A possible extension to this would be to stop a single property, when\n * we want to continue animating others. Then assign the prop to the timer\n * in the Fx.run method, and check for the prop here. This would be an\n * improvement in all cases where we stop the animation from .attr. Instead of\n * stopping everything, we can just stop the actual attributes we're setting.\n */\nfunction stop(el, prop) {\n    var i = Animation_Fx.timers.length;\n    // Remove timers related to this element (#4519)\n    while (i--) {\n        if (Animation_Fx.timers[i].elem === el && (!prop || prop === Animation_Fx.timers[i].prop)) {\n            Animation_Fx.timers[i].stopped = true; // #4667\n        }\n    }\n}\nvar animationExports = {\n    animate: animate,\n    animObject: animObject,\n    getDeferredAnimation: getDeferredAnimation,\n    setAnimation: setAnimation,\n    stop: stop\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var AnimationUtilities = (animationExports);\n\n;// ./code/es5/es-modules/Core/Renderer/HTML/AST.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar SVG_NS = Core_Globals.SVG_NS, AST_win = Core_Globals.win;\n\nvar AST_attr = Core_Utilities.attr, AST_createElement = Core_Utilities.createElement, AST_css = Core_Utilities.css, AST_error = Core_Utilities.error, AST_isFunction = Core_Utilities.isFunction, AST_isString = Core_Utilities.isString, AST_objectEach = Core_Utilities.objectEach, AST_splat = Core_Utilities.splat;\nvar trustedTypes = AST_win.trustedTypes;\n/* *\n *\n *  Constants\n *\n * */\n// Create the trusted type policy. This should not be exposed.\nvar trustedTypesPolicy = (trustedTypes &&\n    AST_isFunction(trustedTypes.createPolicy) &&\n    trustedTypes.createPolicy('highcharts', {\n        createHTML: function (s) { return s; }\n    }));\nvar emptyHTML = trustedTypesPolicy ?\n    trustedTypesPolicy.createHTML('') :\n    '';\n/* *\n *\n *  Class\n *\n * */\n/**\n * The AST class represents an abstract syntax tree of HTML or SVG content. It\n * can take HTML as an argument, parse it, optionally transform it to SVG, then\n * perform sanitation before inserting it into the DOM.\n *\n * @class\n * @name Highcharts.AST\n *\n * @param {string|Array<Highcharts.ASTNode>} source\n * Either an HTML string or an ASTNode list to populate the tree.\n */\nvar AST = /** @class */ (function () {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    // Construct an AST from HTML markup, or wrap an array of existing AST nodes\n    function AST(source) {\n        this.nodes = typeof source === 'string' ?\n            this.parseMarkup(source) : source;\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * Filter an object of SVG or HTML attributes against the allow list.\n     *\n     * @static\n     *\n     * @function Highcharts.AST#filterUserAttributes\n     *\n     * @param {Highcharts.SVGAttributes} attributes The attributes to filter\n     *\n     * @return {Highcharts.SVGAttributes}\n     * The filtered attributes\n     */\n    AST.filterUserAttributes = function (attributes) {\n        AST_objectEach(attributes, function (val, key) {\n            var valid = true;\n            if (AST.allowedAttributes.indexOf(key) === -1) {\n                valid = false;\n            }\n            if (['background', 'dynsrc', 'href', 'lowsrc', 'src']\n                .indexOf(key) !== -1) {\n                valid = AST_isString(val) && AST.allowedReferences.some(function (ref) { return val.indexOf(ref) === 0; });\n            }\n            if (!valid) {\n                AST_error(33, false, void 0, {\n                    'Invalid attribute in config': \"\".concat(key)\n                });\n                delete attributes[key];\n            }\n            // #17753, < is not allowed in SVG attributes\n            if (AST_isString(val) && attributes[key]) {\n                attributes[key] = val.replace(/</g, '&lt;');\n            }\n        });\n        return attributes;\n    };\n    AST.parseStyle = function (style) {\n        return style\n            .split(';')\n            .reduce(function (styles, line) {\n            var pair = line.split(':').map(function (s) { return s.trim(); }),\n                key = pair.shift();\n            if (key && pair.length) {\n                styles[key.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); })] = pair.join(':'); // #17146\n            }\n            return styles;\n        }, {});\n    };\n    /**\n     * Utility function to set html content for an element by passing in a\n     * markup string. The markup is safely parsed by the AST class to avoid\n     * XSS vulnerabilities. This function should be used instead of setting\n     * `innerHTML` in all cases where the content is not fully trusted.\n     *\n     * @static\n     * @function Highcharts.AST#setElementHTML\n     *\n     * @param {SVGDOMElement|HTMLDOMElement} el\n     * Node to set content of.\n     *\n     * @param {string} html\n     * Markup string\n     */\n    AST.setElementHTML = function (el, html) {\n        el.innerHTML = AST.emptyHTML; // Clear previous\n        if (html) {\n            var ast = new AST(html);\n            ast.addToDOM(el);\n        }\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Add the tree defined as a hierarchical JS structure to the DOM\n     *\n     * @function Highcharts.AST#addToDOM\n     *\n     * @param {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement} parent\n     * The node where it should be added\n     *\n     * @return {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement}\n     * The inserted node.\n     */\n    AST.prototype.addToDOM = function (parent) {\n        /**\n         * @private\n         * @param {Highcharts.ASTNode} subtree\n         * HTML/SVG definition\n         * @param {Element} [subParent]\n         * parent node\n         * @return {Highcharts.SVGDOMElement|Highcharts.HTMLDOMElement}\n         * The inserted node.\n         */\n        function recurse(subtree, subParent) {\n            var ret;\n            AST_splat(subtree).forEach(function (item) {\n                var tagName = item.tagName;\n                var textNode = item.textContent ?\n                        Core_Globals.doc.createTextNode(item.textContent) :\n                        void 0;\n                // Whether to ignore the AST filtering totally, #15345\n                var bypassHTMLFiltering = AST.bypassHTMLFiltering;\n                var node;\n                if (tagName) {\n                    if (tagName === '#text') {\n                        node = textNode;\n                    }\n                    else if (AST.allowedTags.indexOf(tagName) !== -1 ||\n                        bypassHTMLFiltering) {\n                        var NS = tagName === 'svg' ?\n                                SVG_NS :\n                                (subParent.namespaceURI || SVG_NS);\n                        var element = Core_Globals.doc.createElementNS(NS,\n                            tagName);\n                        var attributes_1 = item.attributes || {};\n                        // Apply attributes from root of AST node, legacy from\n                        // from before TextBuilder\n                        AST_objectEach(item, function (val, key) {\n                            if (key !== 'tagName' &&\n                                key !== 'attributes' &&\n                                key !== 'children' &&\n                                key !== 'style' &&\n                                key !== 'textContent') {\n                                attributes_1[key] = val;\n                            }\n                        });\n                        AST_attr(element, bypassHTMLFiltering ?\n                            attributes_1 :\n                            AST.filterUserAttributes(attributes_1));\n                        if (item.style) {\n                            AST_css(element, item.style);\n                        }\n                        // Add text content\n                        if (textNode) {\n                            element.appendChild(textNode);\n                        }\n                        // Recurse\n                        recurse(item.children || [], element);\n                        node = element;\n                    }\n                    else {\n                        AST_error(33, false, void 0, {\n                            'Invalid tagName in config': tagName\n                        });\n                    }\n                }\n                // Add to the tree\n                if (node) {\n                    subParent.appendChild(node);\n                }\n                ret = node;\n            });\n            // Return last node added (on top level it's the only one)\n            return ret;\n        }\n        return recurse(this.nodes, parent);\n    };\n    /**\n     * Parse HTML/SVG markup into AST Node objects. Used internally from the\n     * constructor.\n     *\n     * @private\n     *\n     * @function Highcharts.AST#getNodesFromMarkup\n     *\n     * @param {string} markup The markup string.\n     *\n     * @return {Array<Highcharts.ASTNode>} The parsed nodes.\n     */\n    AST.prototype.parseMarkup = function (markup) {\n        var nodes = [];\n        markup = markup\n            .trim()\n            // The style attribute throws a warning when parsing when CSP is\n            // enabled (#6884), so use an alias and pick it up below\n            // Make all quotation marks parse correctly to DOM (#17627)\n            .replace(/ style=([\"'])/g, ' data-style=$1');\n        var doc;\n        try {\n            doc = new DOMParser().parseFromString(trustedTypesPolicy ?\n                trustedTypesPolicy.createHTML(markup) :\n                markup, 'text/html');\n        }\n        catch (e) {\n            // There are two cases where this fails:\n            // 1. IE9 and PhantomJS, where the DOMParser only supports parsing\n            //    XML\n            // 2. Due to a Chromium issue where chart redraws are triggered by\n            //    a `beforeprint` event (#16931),\n            //    https://issues.chromium.org/issues/40222135\n        }\n        if (!doc) {\n            var body = AST_createElement('div');\n            body.innerHTML = markup;\n            doc = { body: body };\n        }\n        var appendChildNodes = function (node,\n            addTo) {\n                var tagName = node.nodeName.toLowerCase();\n            // Add allowed tags\n            var astNode = {\n                    tagName: tagName\n                };\n            if (tagName === '#text') {\n                astNode.textContent = node.textContent || '';\n            }\n            var parsedAttributes = node.attributes;\n            // Add attributes\n            if (parsedAttributes) {\n                var attributes_2 = {};\n                [].forEach.call(parsedAttributes, function (attrib) {\n                    if (attrib.name === 'data-style') {\n                        astNode.style = AST.parseStyle(attrib.value);\n                    }\n                    else {\n                        attributes_2[attrib.name] = attrib.value;\n                    }\n                });\n                astNode.attributes = attributes_2;\n            }\n            // Handle children\n            if (node.childNodes.length) {\n                var children_1 = [];\n                [].forEach.call(node.childNodes, function (childNode) {\n                    appendChildNodes(childNode, children_1);\n                });\n                if (children_1.length) {\n                    astNode.children = children_1;\n                }\n            }\n            addTo.push(astNode);\n        };\n        [].forEach.call(doc.body.childNodes, function (childNode) { return appendChildNodes(childNode, nodes); });\n        return nodes;\n    };\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    /**\n     * The list of allowed SVG or HTML attributes, used for sanitizing\n     * potentially harmful content from the chart configuration before adding to\n     * the DOM.\n     *\n     * @see [Source code with default values](\n     * https://github.com/highcharts/highcharts/blob/master/ts/Core/Renderer/HTML/AST.ts#:~:text=public%20static%20allowedAttributes)\n     *\n     * @example\n     * // Allow a custom, trusted attribute\n     * Highcharts.AST.allowedAttributes.push('data-value');\n     *\n     * @name Highcharts.AST.allowedAttributes\n     * @type {Array<string>}\n     */\n    AST.allowedAttributes = [\n        'alt',\n        'aria-controls',\n        'aria-describedby',\n        'aria-expanded',\n        'aria-haspopup',\n        'aria-hidden',\n        'aria-label',\n        'aria-labelledby',\n        'aria-live',\n        'aria-pressed',\n        'aria-readonly',\n        'aria-roledescription',\n        'aria-selected',\n        'class',\n        'clip-path',\n        'color',\n        'colspan',\n        'cx',\n        'cy',\n        'd',\n        'dx',\n        'dy',\n        'disabled',\n        'fill',\n        'filterUnits',\n        'flood-color',\n        'flood-opacity',\n        'height',\n        'href',\n        'id',\n        'in',\n        'in2',\n        'markerHeight',\n        'markerWidth',\n        'offset',\n        'opacity',\n        'operator',\n        'orient',\n        'padding',\n        'paddingLeft',\n        'paddingRight',\n        'patternUnits',\n        'r',\n        'radius',\n        'refX',\n        'refY',\n        'role',\n        'scope',\n        'slope',\n        'src',\n        'startOffset',\n        'stdDeviation',\n        'stroke',\n        'stroke-linecap',\n        'stroke-width',\n        'style',\n        'tableValues',\n        'result',\n        'rowspan',\n        'summary',\n        'target',\n        'tabindex',\n        'text-align',\n        'text-anchor',\n        'textAnchor',\n        'textLength',\n        'title',\n        'type',\n        'valign',\n        'width',\n        'x',\n        'x1',\n        'x2',\n        'xlink:href',\n        'y',\n        'y1',\n        'y2',\n        'zIndex'\n    ];\n    /**\n     * The list of allowed references for referring attributes like `href` and\n     * `src`. Attribute values will only be allowed if they start with one of\n     * these strings.\n     *\n     * @see [Source code with default values](\n     * https://github.com/highcharts/highcharts/blob/master/ts/Core/Renderer/HTML/AST.ts#:~:text=public%20static%20allowedReferences)\n     *\n     * @example\n     * // Allow tel:\n     * Highcharts.AST.allowedReferences.push('tel:');\n     *\n     * @name    Highcharts.AST.allowedReferences\n     * @type    {Array<string>}\n     */\n    AST.allowedReferences = [\n        'https://',\n        'http://',\n        'mailto:',\n        '/',\n        '../',\n        './',\n        '#'\n    ];\n    /**\n     * The list of allowed SVG or HTML tags, used for sanitizing potentially\n     * harmful content from the chart configuration before adding to the DOM.\n     *\n     * @see [Source code with default values](\n     * https://github.com/highcharts/highcharts/blob/master/ts/Core/Renderer/HTML/AST.ts#:~:text=public%20static%20allowedTags)\n     *\n     * @example\n     * // Allow a custom, trusted tag\n     * Highcharts.AST.allowedTags.push('blink'); // ;)\n     *\n     * @name    Highcharts.AST.allowedTags\n     * @type    {Array<string>}\n     */\n    AST.allowedTags = [\n        'a',\n        'abbr',\n        'b',\n        'br',\n        'button',\n        'caption',\n        'circle',\n        'clipPath',\n        'code',\n        'dd',\n        'defs',\n        'div',\n        'dl',\n        'dt',\n        'em',\n        'feComponentTransfer',\n        'feComposite',\n        'feDropShadow',\n        'feFlood',\n        'feFuncA',\n        'feFuncB',\n        'feFuncG',\n        'feFuncR',\n        'feGaussianBlur',\n        'feMorphology',\n        'feOffset',\n        'feMerge',\n        'feMergeNode',\n        'filter',\n        'h1',\n        'h2',\n        'h3',\n        'h4',\n        'h5',\n        'h6',\n        'hr',\n        'i',\n        'img',\n        'li',\n        'linearGradient',\n        'marker',\n        'ol',\n        'p',\n        'path',\n        'pattern',\n        'pre',\n        'rect',\n        'small',\n        'span',\n        'stop',\n        'strong',\n        'style',\n        'sub',\n        'sup',\n        'svg',\n        'table',\n        'text',\n        'textPath',\n        'thead',\n        'title',\n        'tbody',\n        'tspan',\n        'td',\n        'th',\n        'tr',\n        'u',\n        'ul',\n        '#text'\n    ];\n    AST.emptyHTML = emptyHTML;\n    /**\n     * Allow all custom SVG and HTML attributes, references and tags (together\n     * with potentially harmful ones) to be added to the DOM from the chart\n     * configuration. In other words, disable the allow-listing which is the\n     * primary functionality of the AST.\n     *\n     * WARNING: Setting this property to `true` while allowing untrusted user\n     * data in the chart configuration will expose your application to XSS\n     * security risks!\n     *\n     * Note that in case you want to allow a known set of tags or attributes,\n     * you should allow-list them instead of disabling the filtering totally.\n     * See [allowedAttributes](Highcharts.AST#.allowedAttributes),\n     * [allowedReferences](Highcharts.AST#.allowedReferences) and\n     * [allowedTags](Highcharts.AST#.allowedTags). The `bypassHTMLFiltering`\n     * setting is intended only for those cases where allow-listing is not\n     * practical, and the chart configuration already comes from a secure\n     * source.\n     *\n     * @example\n     * // Allow all custom attributes, references and tags (disable DOM XSS\n     * // filtering)\n     * Highcharts.AST.bypassHTMLFiltering = true;\n     *\n     * @name Highcharts.AST.bypassHTMLFiltering\n     * @static\n     */\n    AST.bypassHTMLFiltering = false;\n    return AST;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var HTML_AST = (AST);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * Serialized form of an SVG/HTML definition, including children.\n *\n * @interface Highcharts.ASTNode\n */ /**\n* @name Highcharts.ASTNode#attributes\n* @type {Highcharts.SVGAttributes|undefined}\n*/ /**\n* @name Highcharts.ASTNode#children\n* @type {Array<Highcharts.ASTNode>|undefined}\n*/ /**\n* @name Highcharts.ASTNode#tagName\n* @type {string|undefined}\n*/ /**\n* @name Highcharts.ASTNode#textContent\n* @type {string|undefined}\n*/\n(''); // Keeps doclets above in file\n\n;// ./code/es5/es-modules/Core/Templating.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar Templating_defaultOptions = Defaults.defaultOptions, Templating_defaultTime = Defaults.defaultTime;\n\nvar Templating_pageLang = Core_Globals.pageLang;\n\nvar Templating_extend = Core_Utilities.extend, Templating_getNestedProperty = Core_Utilities.getNestedProperty, Templating_isArray = Core_Utilities.isArray, Templating_isNumber = Core_Utilities.isNumber, Templating_isObject = Core_Utilities.isObject, Templating_isString = Core_Utilities.isString, Templating_pick = Core_Utilities.pick, Templating_ucfirst = Core_Utilities.ucfirst;\nvar helpers = {\n    // Built-in helpers\n    add: function (a, b) { return a + b; },\n    divide: function (a, b) { return (b !== 0 ? a / b : ''); },\n    // eslint-disable-next-line eqeqeq\n    eq: function (a, b) { return a == b; },\n    each: function (arr) {\n        var match = arguments[arguments.length - 1];\n        return Templating_isArray(arr) ?\n            arr.map(function (item, i) { return format(match.body, Templating_extend(Templating_isObject(item) ? item : { '@this': item }, {\n                '@index': i,\n                '@first': i === 0,\n                '@last': i === arr.length - 1\n            })); }).join('') :\n            false;\n    },\n    ge: function (a, b) { return a >= b; },\n    gt: function (a, b) { return a > b; },\n    'if': function (condition) { return !!condition; },\n    le: function (a, b) { return a <= b; },\n    lt: function (a, b) { return a < b; },\n    multiply: function (a, b) { return a * b; },\n    // eslint-disable-next-line eqeqeq\n    ne: function (a, b) { return a != b; },\n    subtract: function (a, b) { return a - b; },\n    ucfirst: Templating_ucfirst,\n    unless: function (condition) { return !condition; }\n};\nvar numberFormatCache = {};\n/* *\n *\n *  Functions\n *\n * */\n// Internal convenience function\nvar isQuotedString = function (str) { return /^[\"'].+[\"']$/.test(str); };\n/**\n * Formats a JavaScript date timestamp (milliseconds since Jan 1st 1970) into a\n * human readable date string. The format is a subset of the formats for PHP's\n * [strftime](https://www.php.net/manual/en/function.strftime.php) function.\n * Additional formats can be given in the {@link Highcharts.dateFormats} hook.\n *\n * Since v6.0.5, all internal dates are formatted through the\n * {@link Highcharts.Chart#time} instance to respect chart-level time settings.\n * The `Highcharts.dateFormat` function only reflects global time settings set\n * with `setOptions`.\n *\n * Supported format keys:\n * - `%a`: Short weekday, like 'Mon'\n * - `%A`: Long weekday, like 'Monday'\n * - `%d`: Two digit day of the month, 01 to 31\n * - `%e`: Day of the month, 1 through 31\n * - `%w`: Day of the week, 0 through 6\n * - `%b`: Short month, like 'Jan'\n * - `%B`: Long month, like 'January'\n * - `%m`: Two digit month number, 01 through 12\n * - `%y`: Two digits year, like 09 for 2009\n * - `%Y`: Four digits year, like 2009\n * - `%H`: Two digits hours in 24h format, 00 through 23\n * - `%k`: Hours in 24h format, 0 through 23\n * - `%I`: Two digits hours in 12h format, 00 through 11\n * - `%l`: Hours in 12h format, 1 through 12\n * - `%M`: Two digits minutes, 00 through 59\n * - `%p`: Upper case AM or PM\n * - `%P`: Lower case AM or PM\n * - `%S`: Two digits seconds, 00 through 59\n * - `%L`: Milliseconds (naming from Ruby)\n *\n * @function Highcharts.dateFormat\n *\n * @param {string} format\n *        The desired format where various time representations are prefixed\n *        with `%`.\n *\n * @param {number} timestamp\n *        The JavaScript timestamp.\n *\n * @param {boolean} [upperCaseFirst=false]\n *        Upper case first letter in the return.\n *\n * @return {string}\n *         The formatted date.\n */\nfunction dateFormat(format, timestamp, upperCaseFirst) {\n    return Templating_defaultTime.dateFormat(format, timestamp, upperCaseFirst);\n}\n/**\n * Format a string according to a subset of the rules of Python's String.format\n * method.\n *\n * @example\n * let s = Highcharts.format(\n *     'The {color} fox was {len:.2f} feet long',\n *     { color: 'red', len: Math.PI }\n * );\n * // => The red fox was 3.14 feet long\n *\n * @function Highcharts.format\n *\n * @param {string} str\n *        The string to format.\n *\n * @param {Record<string, *>} ctx\n *        The context, a collection of key-value pairs where each key is\n *        replaced by its value.\n *\n * @param {Highcharts.Chart} [chart]\n *        A `Chart` instance used to get numberFormatter and time.\n *\n * @return {string}\n *         The formatted string.\n */\nfunction format(str, ctx, chart) {\n    if (str === void 0) { str = ''; }\n    var regex = /\\{([\\p{L}\\d:\\.,;\\-\\/<>\\[\\]%_@+\"'’= #\\(\\)]+)\\}/gu, \n        // The sub expression regex is the same as the top expression regex,\n        // but except parens and block helpers (#), and surrounded by parens\n        // instead of curly brackets.\n        subRegex = /\\(([\\p{L}\\d:\\.,;\\-\\/<>\\[\\]%_@+\"'= ]+)\\)/gu, matches = [], floatRegex = /f$/, decRegex = /\\.(\\d)/, lang = (chart === null || chart === void 0 ? void 0 : chart.options.lang) || Templating_defaultOptions.lang, time = chart && chart.time || Templating_defaultTime, numberFormatter = chart && chart.numberFormatter || numberFormat;\n    /*\n     * Get a literal or variable value inside a template expression. May be\n     * extended with other types like string or null if needed, but keep it\n     * small for now.\n     */\n    var resolveProperty = function (key) {\n            if (key === void 0) { key = ''; }\n            var n;\n        // Literals\n        if (key === 'true') {\n            return true;\n        }\n        if (key === 'false') {\n            return false;\n        }\n        if ((n = Number(key)).toString() === key) {\n            return n;\n        }\n        if (isQuotedString(key)) {\n            return key.slice(1, -1);\n        }\n        // Variables and constants\n        return Templating_getNestedProperty(key, ctx);\n    };\n    var match,\n        currentMatch,\n        depth = 0,\n        hasSub;\n    // Parse and create tree\n    while ((match = regex.exec(str)) !== null) {\n        // When a sub expression is found, it is evaluated first, and the\n        // results recursively evaluated until no subexpression exists.\n        var mainMatch = match,\n            subMatch = subRegex.exec(match[1]);\n        if (subMatch) {\n            match = subMatch;\n            hasSub = true;\n        }\n        if (!currentMatch || !currentMatch.isBlock) {\n            currentMatch = {\n                ctx: ctx,\n                expression: match[1],\n                find: match[0],\n                isBlock: match[1].charAt(0) === '#',\n                start: match.index,\n                startInner: match.index + match[0].length,\n                length: match[0].length\n            };\n        }\n        // Identify helpers\n        var fn = (currentMatch.isBlock ? mainMatch : match)[1].split(' ')[0].replace('#', '');\n        if (helpers[fn]) {\n            // Block helper, only 0 level is handled\n            if (currentMatch.isBlock && fn === currentMatch.fn) {\n                depth++;\n            }\n            if (!currentMatch.fn) {\n                currentMatch.fn = fn;\n            }\n        }\n        // Closing a block helper\n        var startingElseSection = match[1] === 'else';\n        if (currentMatch.isBlock &&\n            currentMatch.fn && (match[1] === \"/\".concat(currentMatch.fn) ||\n            startingElseSection)) {\n            if (!depth) { // === 0\n                var start = currentMatch.startInner,\n                    body = str.substr(start,\n                    match.index - start);\n                // Either closing without an else section, or when encountering\n                // an else section\n                if (currentMatch.body === void 0) {\n                    currentMatch.body = body;\n                    currentMatch.startInner = match.index + match[0].length;\n                    // The body exists already, so this is the else section\n                }\n                else {\n                    currentMatch.elseBody = body;\n                }\n                currentMatch.find += body + match[0];\n                if (!startingElseSection) {\n                    matches.push(currentMatch);\n                    currentMatch = void 0;\n                }\n            }\n            else if (!startingElseSection) {\n                depth--;\n            }\n            // Common expression\n        }\n        else if (!currentMatch.isBlock) {\n            matches.push(currentMatch);\n        }\n        // Evaluate sub-matches one by one to prevent orphaned block closers\n        if (subMatch && !(currentMatch === null || currentMatch === void 0 ? void 0 : currentMatch.isBlock)) {\n            break;\n        }\n    }\n    // Execute\n    matches.forEach(function (match) {\n        var body = match.body,\n            elseBody = match.elseBody,\n            expression = match.expression,\n            fn = match.fn;\n        var replacement,\n            i;\n        // Helper function\n        if (fn) {\n            // Pass the helpers the amount of arguments defined by the function,\n            // then the match as the last argument.\n            var args = [match],\n                parts = [],\n                len = expression.length;\n            var start = 0,\n                startChar = void 0;\n            for (i = 0; i <= len; i++) {\n                var char = expression.charAt(i);\n                // Start of string\n                if (!startChar && (char === '\"' || char === '\\'')) {\n                    startChar = char;\n                    // End of string\n                }\n                else if (startChar === char) {\n                    startChar = '';\n                }\n                if (!startChar &&\n                    (char === ' ' || i === len)) {\n                    parts.push(expression.substr(start, i - start));\n                    start = i + 1;\n                }\n            }\n            i = helpers[fn].length;\n            while (i--) {\n                args.unshift(resolveProperty(parts[i + 1]));\n            }\n            replacement = helpers[fn].apply(ctx, args);\n            // Block helpers may return true or false. They may also return a\n            // string, like the `each` helper.\n            if (match.isBlock && typeof replacement === 'boolean') {\n                replacement = format(replacement ? body : elseBody, ctx, chart);\n            }\n            // Simple variable replacement\n        }\n        else {\n            var valueAndFormat = isQuotedString(expression) ?\n                    [expression] : expression.split(':');\n            replacement = resolveProperty(valueAndFormat.shift() || '');\n            // Format the replacement\n            if (valueAndFormat.length && typeof replacement === 'number') {\n                var segment = valueAndFormat.join(':');\n                if (floatRegex.test(segment)) { // Float\n                    var decimals = parseInt((segment.match(decRegex) || ['', '-1'])[1], 10);\n                    if (replacement !== null) {\n                        replacement = numberFormatter(replacement, decimals, lang.decimalPoint, segment.indexOf(',') > -1 ? lang.thousandsSep : '');\n                    }\n                }\n                else {\n                    replacement = time.dateFormat(segment, replacement);\n                }\n            }\n            // Use string literal in order to be preserved in the outer\n            // expression\n            subRegex.lastIndex = 0;\n            if (subRegex.test(match.find) && Templating_isString(replacement)) {\n                replacement = \"\\\"\".concat(replacement, \"\\\"\");\n            }\n        }\n        str = str.replace(match.find, Templating_pick(replacement, ''));\n    });\n    return hasSub ? format(str, ctx, chart) : str;\n}\n/**\n * Format a number and return a string based on input settings.\n *\n * @sample highcharts/members/highcharts-numberformat/\n *         Custom number format\n *\n * @function Highcharts.numberFormat\n *\n * @param {number} number\n *        The input number to format.\n *\n * @param {number} decimals\n *        The amount of decimals. A value of -1 preserves the amount in the\n *        input number.\n *\n * @param {string} [decimalPoint]\n *        The decimal point, defaults to the one given in the lang options, or\n *        a dot.\n *\n * @param {string} [thousandsSep]\n *        The thousands separator, defaults to the one given in the lang\n *        options, or a space character.\n *\n * @return {string}\n *         The formatted number.\n */\nfunction numberFormat(number, decimals, decimalPoint, thousandsSep) {\n    var _a,\n        _b;\n    number = +number || 0;\n    decimals = +decimals;\n    var ret,\n        fractionDigits,\n        _c = number.toString().split('e').map(Number),\n        mantissa = _c[0],\n        exp = _c[1];\n    var lang = ((_a = this === null || this === void 0 ? void 0 : this.options) === null || _a === void 0 ? void 0 : _a.lang) || Templating_defaultOptions.lang,\n        origDec = (number.toString().split('.')[1] || '').split('e')[0].length,\n        firstDecimals = decimals,\n        options = {};\n    decimalPoint !== null && decimalPoint !== void 0 ? decimalPoint : (decimalPoint = lang.decimalPoint);\n    thousandsSep !== null && thousandsSep !== void 0 ? thousandsSep : (thousandsSep = lang.thousandsSep);\n    if (decimals === -1) {\n        // Preserve decimals. Not huge numbers (#3793).\n        decimals = Math.min(origDec, 20);\n    }\n    else if (!Templating_isNumber(decimals)) {\n        decimals = 2;\n    }\n    else if (decimals && exp < 0) {\n        // Expose decimals from exponential notation (#7042)\n        fractionDigits = decimals + exp;\n        if (fractionDigits >= 0) {\n            // Remove too small part of the number while keeping the notation\n            mantissa = +mantissa.toExponential(fractionDigits).split('e')[0];\n            decimals = fractionDigits;\n        }\n        else {\n            // `fractionDigits < 0`\n            mantissa = Math.floor(mantissa);\n            if (decimals < 20) {\n                // Use number instead of exponential notation (#7405)\n                number = +(mantissa * Math.pow(10, exp)).toFixed(decimals);\n            }\n            else {\n                // Or zero\n                number = 0;\n            }\n            exp = 0;\n        }\n    }\n    if (exp) {\n        decimals !== null && decimals !== void 0 ? decimals : (decimals = 2);\n        number = mantissa;\n    }\n    if (Templating_isNumber(decimals) && decimals >= 0) {\n        options.minimumFractionDigits = decimals;\n        options.maximumFractionDigits = decimals;\n    }\n    if (thousandsSep === '') {\n        options.useGrouping = false;\n    }\n    var hasSeparators = thousandsSep || decimalPoint,\n        locale = hasSeparators ?\n            'en' :\n            ((this === null || this === void 0 ? void 0 : this.locale) || lang.locale || Templating_pageLang),\n        cacheKey = JSON.stringify(options) + locale,\n        nf = (_b = numberFormatCache[cacheKey]) !== null && _b !== void 0 ? _b : (numberFormatCache[cacheKey] = new Intl.NumberFormat(locale,\n        options));\n    ret = nf.format(number);\n    // If thousandsSep or decimalPoint are set, fall back to using English\n    // format with string replacement for the separators.\n    if (hasSeparators) {\n        ret = ret\n            // Preliminary step to avoid re-swapping (#22402)\n            .replace(/([,\\.])/g, '_$1')\n            .replace(/_\\,/g, thousandsSep !== null && thousandsSep !== void 0 ? thousandsSep : ',')\n            .replace('_.', decimalPoint !== null && decimalPoint !== void 0 ? decimalPoint : '.');\n    }\n    if (\n    // Remove signed zero (#20564)\n    (!decimals && +ret === 0) ||\n        // Small numbers, no decimals (#14023)\n        (exp < 0 && !firstDecimals)) {\n        ret = '0';\n    }\n    if (exp && +ret !== 0) {\n        ret += 'e' + (exp < 0 ? '' : '+') + exp;\n    }\n    return ret;\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar Templating = {\n    dateFormat: dateFormat,\n    format: format,\n    helpers: helpers,\n    numberFormat: numberFormat\n};\n/* harmony default export */ var Core_Templating = (Templating);\n\n;// ./code/es5/es-modules/Core/Renderer/RendererRegistry.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 *  Namespace\n *\n * */\nvar RendererRegistry;\n(function (RendererRegistry) {\n    /* *\n     *\n     *  Constants\n     *\n     * */\n    RendererRegistry.rendererTypes = {};\n    /* *\n     *\n     *  Variables\n     *\n     * */\n    var defaultRenderer;\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Gets a registered renderer class. If no renderer type is provided or the\n     * requested renderer was not founded, the default renderer is returned.\n     *\n     * @param {string} [rendererType]\n     * Renderer type or the default renderer.\n     *\n     * @return {Highcharts.Class<Highcharts.SVGRenderer>}\n     * Returns the requested renderer class or the default renderer class.\n     */\n    function getRendererType(rendererType) {\n        if (rendererType === void 0) { rendererType = defaultRenderer; }\n        return (RendererRegistry.rendererTypes[rendererType] || RendererRegistry.rendererTypes[defaultRenderer]);\n    }\n    RendererRegistry.getRendererType = getRendererType;\n    /**\n     * Register a renderer class.\n     *\n     * @param {string} rendererType\n     * Renderer type to register.\n     *\n     * @param {Highcharts.Class<Highcharts.SVGRenderer>} rendererClass\n     * Returns the requested renderer class or the default renderer class.\n     *\n     * @param {boolean} setAsDefault\n     * Sets the renderer class as the default renderer.\n     */\n    function registerRendererType(rendererType, rendererClass, setAsDefault) {\n        RendererRegistry.rendererTypes[rendererType] = rendererClass;\n        if (!defaultRenderer || setAsDefault) {\n            defaultRenderer = rendererType;\n            Core_Globals.Renderer = rendererClass; // Compatibility\n        }\n    }\n    RendererRegistry.registerRendererType = registerRendererType;\n})(RendererRegistry || (RendererRegistry = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Renderer_RendererRegistry = (RendererRegistry);\n\n;// ./code/es5/es-modules/Core/Renderer/RendererUtilities.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 *  Imports\n *\n * */\n\nvar RendererUtilities_clamp = Core_Utilities.clamp, RendererUtilities_pick = Core_Utilities.pick, RendererUtilities_pushUnique = Core_Utilities.pushUnique, RendererUtilities_stableSort = Core_Utilities.stableSort;\n/* *\n *\n *  Namespace\n *\n * */\nvar RendererUtilities;\n(function (RendererUtilities) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * General distribution algorithm for distributing labels of differing size\n     * along a confined length in two dimensions. The algorithm takes an array\n     * of objects containing a size, a target and a rank. It will place the\n     * labels as close as possible to their targets, skipping the lowest ranked\n     * labels if necessary.\n     * @private\n     */\n    function distribute(boxes, len, maxDistance) {\n        // Original array will be altered with added .pos\n        var origBoxes = boxes,\n            reducedLen = origBoxes.reducedLen || len,\n            sortByRank = function (a,\n            b) {\n                return (b.rank || 0) - (a.rank || 0);\n        }, sortByTarget = function (a, b) {\n            return a.target - b.target;\n        }, restBoxes = [], // The outranked overshoot\n        boxesLength = boxes.length, forDeletion = [], push = restBoxes.push;\n        var i,\n            cursor,\n            step,\n            overlapping = true,\n            box,\n            target,\n            total = 0,\n            equalRank;\n        // If the total size exceeds the len, remove those boxes with the lowest\n        // rank\n        i = boxesLength;\n        while (i--) {\n            total += boxes[i].size;\n        }\n        // Sort by rank, then slice away overshoot\n        if (total > reducedLen) {\n            RendererUtilities_stableSort(boxes, sortByRank);\n            equalRank = boxes[0].rank === boxes[boxes.length - 1].rank;\n            step = equalRank ? boxesLength / 2 : -1;\n            cursor = equalRank ? step : boxesLength - 1;\n            // When the boxes have equal rank (pie data labels, flags - #10073),\n            // decimate the boxes by starting in the middle and gradually remove\n            // more items inside the array. When they are sorted by rank, just\n            // remove the ones with the lowest rank from the end.\n            while (step && total > reducedLen) {\n                i = Math.floor(cursor);\n                box = boxes[i];\n                if (RendererUtilities_pushUnique(forDeletion, i)) {\n                    total -= box.size;\n                }\n                cursor += step;\n                // Start over the decimation with smaller steps\n                if (equalRank && cursor >= boxes.length) {\n                    step /= 2;\n                    cursor = step;\n                }\n            }\n            // Clean out the boxes marked for deletion\n            forDeletion\n                .sort(function (a, b) { return b - a; })\n                .forEach(function (i) {\n                return push.apply(restBoxes, boxes.splice(i, 1));\n            });\n        }\n        // Order by target\n        RendererUtilities_stableSort(boxes, sortByTarget);\n        // So far we have been mutating the original array. Now\n        // create a copy with target arrays\n        boxes = boxes.map(function (box) { return ({\n            size: box.size,\n            targets: [box.target],\n            align: RendererUtilities_pick(box.align, 0.5)\n        }); });\n        while (overlapping) {\n            // Initial positions: target centered in box\n            i = boxes.length;\n            while (i--) {\n                box = boxes[i];\n                // Composite box, average of targets\n                target = (Math.min.apply(0, box.targets) +\n                    Math.max.apply(0, box.targets)) / 2;\n                box.pos = RendererUtilities_clamp(target - box.size * box.align, 0, len - box.size);\n            }\n            // Detect overlap and join boxes\n            i = boxes.length;\n            overlapping = false;\n            while (i--) {\n                // Overlap\n                if (i > 0 &&\n                    boxes[i - 1].pos + boxes[i - 1].size >\n                        boxes[i].pos) {\n                    // Add this size to the previous box\n                    boxes[i - 1].size += boxes[i].size;\n                    boxes[i - 1].targets = boxes[i - 1]\n                        .targets\n                        .concat(boxes[i].targets);\n                    boxes[i - 1].align = 0.5;\n                    // Overlapping right, push left\n                    if (boxes[i - 1].pos + boxes[i - 1].size > len) {\n                        boxes[i - 1].pos = len - boxes[i - 1].size;\n                    }\n                    boxes.splice(i, 1); // Remove this item\n                    overlapping = true;\n                }\n            }\n        }\n        // Add the rest (hidden boxes)\n        push.apply(origBoxes, restBoxes);\n        // Now the composite boxes are placed, we need to put the original boxes\n        // within them\n        i = 0;\n        boxes.some(function (box) {\n            var posInCompositeBox = 0;\n            // Exceeded maxDistance => abort\n            return (box.targets || []).some(function () {\n                origBoxes[i].pos = box.pos + posInCompositeBox;\n                // If the distance between the position and the target exceeds\n                // maxDistance, abort the loop and decrease the length in\n                // increments of 10% to recursively reduce the number of\n                // visible boxes by rank. Once all boxes are within the\n                // maxDistance, we're good.\n                if (typeof maxDistance !== 'undefined' &&\n                    Math.abs(origBoxes[i].pos - origBoxes[i].target) > maxDistance) {\n                    // Reset the positions that are already set\n                    origBoxes\n                        .slice(0, i + 1)\n                        .forEach(function (box) { return delete box.pos; });\n                    // Try with a smaller length\n                    origBoxes.reducedLen =\n                        (origBoxes.reducedLen || len) - (len * 0.1);\n                    // Recurse\n                    if (origBoxes.reducedLen > len * 0.1) {\n                        distribute(origBoxes, len, maxDistance);\n                    }\n                    // Exceeded maxDistance => abort\n                    return true;\n                }\n                posInCompositeBox += origBoxes[i].size;\n                i++;\n                return false;\n            });\n        });\n        // Add the rest (hidden) boxes and sort by target\n        RendererUtilities_stableSort(origBoxes, sortByTarget);\n        return origBoxes;\n    }\n    RendererUtilities.distribute = distribute;\n})(RendererUtilities || (RendererUtilities = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Renderer_RendererUtilities = (RendererUtilities);\n\n;// ./code/es5/es-modules/Core/Renderer/SVG/SVGElement.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar SVGElement_animate = AnimationUtilities.animate, SVGElement_animObject = AnimationUtilities.animObject, SVGElement_stop = AnimationUtilities.stop;\n\n\nvar deg2rad = Core_Globals.deg2rad, SVGElement_doc = Core_Globals.doc, svg = Core_Globals.svg, SVGElement_SVG_NS = Core_Globals.SVG_NS, SVGElement_win = Core_Globals.win, isFirefox = Core_Globals.isFirefox;\n\nvar SVGElement_addEvent = Core_Utilities.addEvent, SVGElement_attr = Core_Utilities.attr, SVGElement_createElement = Core_Utilities.createElement, SVGElement_crisp = Core_Utilities.crisp, SVGElement_css = Core_Utilities.css, SVGElement_defined = Core_Utilities.defined, SVGElement_erase = Core_Utilities.erase, SVGElement_extend = Core_Utilities.extend, SVGElement_fireEvent = Core_Utilities.fireEvent, SVGElement_getAlignFactor = Core_Utilities.getAlignFactor, SVGElement_isArray = Core_Utilities.isArray, SVGElement_isFunction = Core_Utilities.isFunction, SVGElement_isNumber = Core_Utilities.isNumber, SVGElement_isObject = Core_Utilities.isObject, SVGElement_isString = Core_Utilities.isString, SVGElement_merge = Core_Utilities.merge, SVGElement_objectEach = Core_Utilities.objectEach, SVGElement_pick = Core_Utilities.pick, SVGElement_pInt = Core_Utilities.pInt, SVGElement_pushUnique = Core_Utilities.pushUnique, SVGElement_replaceNested = Core_Utilities.replaceNested, SVGElement_syncTimeout = Core_Utilities.syncTimeout, SVGElement_uniqueKey = Core_Utilities.uniqueKey;\n/* *\n *\n *  Class\n *\n * */\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/**\n * The SVGElement prototype is a JavaScript wrapper for SVG elements used in the\n * rendering layer of Highcharts. Combined with the\n * {@link Highcharts.SVGRenderer}\n * object, these prototypes allow freeform annotation in the charts or even in\n * HTML pages without instanciating a chart. The SVGElement can also wrap HTML\n * labels, when `text` or `label` elements are created with the `useHTML`\n * parameter.\n *\n * The SVGElement instances are created through factory functions on the\n * {@link Highcharts.SVGRenderer}\n * object, like\n * {@link Highcharts.SVGRenderer#rect|rect},\n * {@link Highcharts.SVGRenderer#path|path},\n * {@link Highcharts.SVGRenderer#text|text},\n * {@link Highcharts.SVGRenderer#label|label},\n * {@link Highcharts.SVGRenderer#g|g}\n * and more.\n *\n * See [How to use the SVG Renderer](\n * https://www.highcharts.com/docs/advanced-chart-features/renderer) for a\n * comprehensive tutorial on how to draw SVG elements on a chart.\n *\n * @class\n * @name Highcharts.SVGElement\n */\nvar SVGElement = /** @class */ (function () {\n    /**\n     * Initialize the SVG element. This function only exists to make the\n     * initialization process overridable. It should not be called directly.\n     *\n     * @function Highcharts.SVGElement#init\n     *\n     * @param {Highcharts.SVGRenderer} renderer\n     * The SVGRenderer instance to initialize to.\n     *\n     * @param {string} nodeName\n     * The SVG node name.\n     */\n    function SVGElement(renderer, nodeName) {\n        this.onEvents = {};\n        this.opacity = 1; // Default base for animation\n        this.SVG_NS = SVGElement_SVG_NS;\n        /**\n         * The primary DOM node. Each `SVGElement` instance wraps a main DOM\n         * node, but may also represent more nodes.\n         *\n         * @name Highcharts.SVGElement#element\n         * @type {Highcharts.SVGDOMElement|Highcharts.HTMLDOMElement}\n         */\n        this.element = nodeName === 'span' || nodeName === 'body' ?\n            SVGElement_createElement(nodeName) :\n            SVGElement_doc.createElementNS(this.SVG_NS, nodeName);\n        /**\n         * The renderer that the SVGElement belongs to.\n         *\n         * @name Highcharts.SVGElement#renderer\n         * @type {Highcharts.SVGRenderer}\n         */\n        this.renderer = renderer;\n        this.styles = {};\n        SVGElement_fireEvent(this, 'afterInit');\n    }\n    // @todo public zIndex?: number;\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Get the current value of an attribute or pseudo attribute,\n     * used mainly for animation. Called internally from\n     * the {@link Highcharts.SVGRenderer#attr} function.\n     *\n     * @private\n     * @function Highcharts.SVGElement#_defaultGetter\n     *\n     * @param {string} key\n     *        Property key.\n     *\n     * @return {number|string}\n     *         Property value.\n     */\n    SVGElement.prototype._defaultGetter = function (key) {\n        var ret = SVGElement_pick(this[key + 'Value'], // Align getter\n            this[key],\n            this.element ? this.element.getAttribute(key) : null, 0);\n        if (/^-?[\\d\\.]+$/.test(ret)) { // Is numerical\n            ret = parseFloat(ret);\n        }\n        return ret;\n    };\n    /**\n     * @private\n     * @function Highcharts.SVGElement#_defaultSetter\n     *\n     * @param {string} value\n     *\n     * @param {string} key\n     *\n     * @param {Highcharts.SVGDOMElement} element\n     *\n     */\n    SVGElement.prototype._defaultSetter = function (value, key, element) {\n        element.setAttribute(key, value);\n    };\n    /**\n     * Add the element to the DOM. All elements must be added this way.\n     *\n     * @sample highcharts/members/renderer-g\n     *         Elements added to a group\n     *\n     * @function Highcharts.SVGElement#add\n     *\n     * @param {Highcharts.SVGElement} [parent]\n     *        The parent item to add it to. If undefined, the element is added\n     *        to the {@link Highcharts.SVGRenderer.box}.\n     *\n     * @return {Highcharts.SVGElement}\n     *         Returns the SVGElement for chaining.\n     */\n    SVGElement.prototype.add = function (parent) {\n        var renderer = this.renderer,\n            element = this.element;\n        var inserted;\n        if (parent) {\n            this.parentGroup = parent;\n        }\n        // Build formatted text\n        if (typeof this.textStr !== 'undefined' &&\n            this.element.nodeName === 'text' // Not for SVGLabel instances\n        ) {\n            renderer.buildText(this);\n        }\n        // Mark as added\n        this.added = true;\n        // If we're adding to renderer root, or other elements in the group\n        // have a z index, we need to handle it\n        if (!parent || parent.handleZ || this.zIndex) {\n            inserted = this.zIndexSetter();\n        }\n        // If zIndex is not handled, append at the end\n        if (!inserted) {\n            (parent ?\n                parent.element :\n                renderer.box).appendChild(element);\n        }\n        // Fire an event for internal hooks\n        if (this.onAdd) {\n            this.onAdd();\n        }\n        return this;\n    };\n    /**\n     * Add a class name to an element.\n     *\n     * @function Highcharts.SVGElement#addClass\n     *\n     * @param {string} className\n     * The new class name to add.\n     *\n     * @param {boolean} [replace=false]\n     * When true, the existing class name(s) will be overwritten with the new\n     * one. When false, the new one is added.\n     *\n     * @return {Highcharts.SVGElement}\n     * Return the SVG element for chainability.\n     */\n    SVGElement.prototype.addClass = function (className, replace) {\n        var currentClassName = replace ? '' : (this.attr('class') || '');\n        // Trim the string and remove duplicates\n        className = (className || '')\n            .split(/ /g)\n            .reduce(function (newClassName, name) {\n            if (currentClassName.indexOf(name) === -1) {\n                newClassName.push(name);\n            }\n            return newClassName;\n        }, (currentClassName ?\n            [currentClassName] :\n            []))\n            .join(' ');\n        if (className !== currentClassName) {\n            this.attr('class', className);\n        }\n        return this;\n    };\n    /**\n     * This method is executed in the end of `attr()`, after setting all\n     * attributes in the hash. In can be used to efficiently consolidate\n     * multiple attributes in one SVG property -- e.g., translate, rotate and\n     * scale are merged in one \"transform\" attribute in the SVG node.\n     *\n     * @private\n     * @function Highcharts.SVGElement#afterSetters\n     */\n    SVGElement.prototype.afterSetters = function () {\n        // Update transform. Do this outside the loop to prevent redundant\n        // updating for batch setting of attributes.\n        if (this.doTransform) {\n            this.updateTransform();\n            this.doTransform = false;\n        }\n    };\n    /**\n     * Align the element relative to the chart or another box.\n     *\n     * @function Highcharts.SVGElement#align\n     *\n     * @param {Highcharts.AlignObject} [alignOptions]\n     *        The alignment options. The function can be called without this\n     *        parameter in order to re-align an element after the box has been\n     *        updated.\n     *\n     * @param {boolean} [alignByTranslate]\n     *        Align element by translation.\n     *\n     * @param {string|Highcharts.BBoxObject} [alignTo]\n     *        The box to align to, needs a width and height. When the box is a\n     *        string, it refers to an object in the Renderer. For example, when\n     *        box is `spacingBox`, it refers to `Renderer.spacingBox` which\n     *        holds `width`, `height`, `x` and `y` properties.\n     *\n     * @param {boolean} [redraw]\n     *        Decide if SVGElement should be redrawn with new alignment or\n     *        just change its attributes.\n     *\n     * @return {Highcharts.SVGElement} Returns the SVGElement for chaining.\n     */\n    SVGElement.prototype.align = function (alignOptions, alignByTranslate, alignTo, redraw) {\n        if (redraw === void 0) { redraw = true; }\n        var renderer = this.renderer,\n            alignedObjects = renderer.alignedObjects,\n            initialAlignment = Boolean(alignOptions);\n        // First call on instanciate\n        if (alignOptions) {\n            this.alignOptions = alignOptions;\n            this.alignByTranslate = alignByTranslate;\n            this.alignTo = alignTo;\n            // When called on resize, no arguments are supplied\n        }\n        else {\n            alignOptions = this.alignOptions || {};\n            alignByTranslate = this.alignByTranslate;\n            alignTo = this.alignTo;\n        }\n        var alignToKey = !alignTo || SVGElement_isString(alignTo) ?\n                alignTo || 'renderer' :\n                void 0;\n        // When aligned to a key, automatically re-align on redraws\n        if (alignToKey) {\n            // Prevent duplicates, like legendGroup after resize\n            if (initialAlignment) {\n                SVGElement_pushUnique(alignedObjects, this);\n            }\n            alignTo = void 0; // Do not use the box\n        }\n        var alignToBox = SVGElement_pick(alignTo,\n            renderer[alignToKey],\n            renderer), \n            // Default: left align\n            x = (alignToBox.x || 0) + (alignOptions.x || 0) +\n                ((alignToBox.width || 0) - (alignOptions.width || 0)) *\n                    SVGElement_getAlignFactor(alignOptions.align), \n            // Default: top align\n            y = (alignToBox.y || 0) + (alignOptions.y || 0) +\n                ((alignToBox.height || 0) - (alignOptions.height || 0)) *\n                    SVGElement_getAlignFactor(alignOptions.verticalAlign),\n            attribs = {\n                'text-align': alignOptions === null || alignOptions === void 0 ? void 0 : alignOptions.align\n            };\n        attribs[alignByTranslate ? 'translateX' : 'x'] = Math.round(x);\n        attribs[alignByTranslate ? 'translateY' : 'y'] = Math.round(y);\n        // Animate only if already placed\n        if (redraw) {\n            this[this.placed ? 'animate' : 'attr'](attribs);\n            this.placed = true;\n        }\n        this.alignAttr = attribs;\n        return this;\n    };\n    /**\n     * @private\n     * @function Highcharts.SVGElement#alignSetter\n     * @param {\"left\"|\"center\"|\"right\"} value\n     */\n    SVGElement.prototype.alignSetter = function (value) {\n        var convert = {\n                left: 'start',\n                center: 'middle',\n                right: 'end'\n            };\n        if (convert[value]) {\n            this.alignValue = value;\n            this.element.setAttribute('text-anchor', convert[value]);\n        }\n    };\n    /**\n     * Animate to given attributes or CSS properties.\n     *\n     * @sample highcharts/members/element-on/\n     *         Setting some attributes by animation\n     *\n     * @function Highcharts.SVGElement#animate\n     *\n     * @param {Highcharts.SVGAttributes} params\n     *        SVG attributes or CSS to animate.\n     *\n     * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [options]\n     *        Animation options.\n     *\n     * @param {Function} [complete]\n     *        Function to perform at the end of animation.\n     *\n     * @return {Highcharts.SVGElement}\n     *         Returns the SVGElement for chaining.\n     */\n    SVGElement.prototype.animate = function (params, options, complete) {\n        var _this = this;\n        var animOptions = SVGElement_animObject(SVGElement_pick(options,\n            this.renderer.globalAnimation,\n            true)),\n            deferTime = animOptions.defer;\n        // When the page is hidden save resources in the background by not\n        // running animation at all (#9749).\n        if (SVGElement_doc.hidden) {\n            animOptions.duration = 0;\n        }\n        if (animOptions.duration !== 0) {\n            // Allows using a callback with the global animation without\n            // overwriting it\n            if (complete) {\n                animOptions.complete = complete;\n            }\n            // If defer option is defined delay the animation #12901\n            SVGElement_syncTimeout(function () {\n                if (_this.element) {\n                    SVGElement_animate(_this, params, animOptions);\n                }\n            }, deferTime);\n        }\n        else {\n            this.attr(params, void 0, complete || animOptions.complete);\n            // Call the end step synchronously\n            SVGElement_objectEach(params, function (val, prop) {\n                if (animOptions.step) {\n                    animOptions.step.call(this, val, { prop: prop, pos: 1, elem: this });\n                }\n            }, this);\n        }\n        return this;\n    };\n    /**\n     * Apply a text outline through a custom CSS property, by copying the text\n     * element and apply stroke to the copy. Used internally. Contrast checks at\n     * [example](https://jsfiddle.net/highcharts/43soe9m1/2/).\n     *\n     * @example\n     * // Specific color\n     * text.css({\n     *    textOutline: '1px black'\n     * });\n     * // Automatic contrast\n     * text.css({\n     *    color: '#000000', // black text\n     *    textOutline: '1px contrast' // => white outline\n     * });\n     *\n     * @private\n     * @function Highcharts.SVGElement#applyTextOutline\n     *\n     * @param {string} textOutline\n     *        A custom CSS `text-outline` setting, defined by `width color`.\n     */\n    SVGElement.prototype.applyTextOutline = function (textOutline) {\n        var elem = this.element,\n            hasContrast = textOutline.indexOf('contrast') !== -1,\n            styles = {};\n        // When the text shadow is set to contrast, use dark stroke for light\n        // text and vice versa.\n        if (hasContrast) {\n            styles.textOutline = textOutline = textOutline.replace(/contrast/g, this.renderer.getContrast(elem.style.fill));\n        }\n        // Extract the stroke width and color\n        var parts = textOutline.split(' ');\n        var color = parts[parts.length - 1];\n        var strokeWidth = parts[0];\n        if (strokeWidth && strokeWidth !== 'none' && Core_Globals.svg) {\n            this.fakeTS = true; // Fake text shadow\n            // Since the stroke is applied on center of the actual outline, we\n            // need to double it to get the correct stroke-width outside the\n            // glyphs.\n            strokeWidth = strokeWidth.replace(/(^[\\d\\.]+)(.*?)$/g, function (match, digit, unit) {\n                return (2 * Number(digit)) + unit;\n            });\n            // Remove shadows from previous runs.\n            this.removeTextOutline();\n            var outline_1 = SVGElement_doc.createElementNS(SVGElement_SVG_NS, 'tspan');\n            SVGElement_attr(outline_1, {\n                'class': 'highcharts-text-outline',\n                fill: color,\n                stroke: color,\n                'stroke-width': strokeWidth,\n                'stroke-linejoin': 'round'\n            });\n            // For each of the tspans and text nodes, create a copy in the\n            // outline.\n            var parentElem = elem.querySelector('textPath') || elem;\n            [].forEach.call(parentElem.childNodes, function (childNode) {\n                var clone = childNode.cloneNode(true);\n                if (clone.removeAttribute) {\n                    ['fill', 'stroke', 'stroke-width', 'stroke'].forEach(function (prop) { return clone\n                        .removeAttribute(prop); });\n                }\n                outline_1.appendChild(clone);\n            });\n            // Collect the sum of dy from all children, included nested ones\n            var totalHeight_1 = 0;\n            [].forEach.call(parentElem.querySelectorAll('text tspan'), function (element) {\n                totalHeight_1 += Number(element.getAttribute('dy'));\n            });\n            // Insert an absolutely positioned break before the original text\n            // to keep it in place\n            var br = SVGElement_doc.createElementNS(SVGElement_SVG_NS, 'tspan');\n            br.textContent = '\\u200B';\n            // Reset the position for the following text\n            SVGElement_attr(br, {\n                x: Number(elem.getAttribute('x')),\n                dy: -totalHeight_1\n            });\n            // Insert the outline\n            outline_1.appendChild(br);\n            parentElem.insertBefore(outline_1, parentElem.firstChild);\n        }\n    };\n    /**\n     * @function Highcharts.SVGElement#attr\n     * @param {string} key\n     * @return {number|string}\n     */ /**\n    * Apply native and custom attributes to the SVG elements.\n    *\n    * In order to set the rotation center for rotation, set x and y to 0 and\n    * use `translateX` and `translateY` attributes to position the element\n    * instead.\n    *\n    * Attributes frequently used in Highcharts are `fill`, `stroke`,\n    * `stroke-width`.\n    *\n    * @sample highcharts/members/renderer-rect/\n    *         Setting some attributes\n    *\n    * @example\n    * // Set multiple attributes\n    * element.attr({\n    *     stroke: 'red',\n    *     fill: 'blue',\n    *     x: 10,\n    *     y: 10\n    * });\n    *\n    * // Set a single attribute\n    * element.attr('stroke', 'red');\n    *\n    * // Get an attribute\n    * element.attr('stroke'); // => 'red'\n    *\n    * @function Highcharts.SVGElement#attr\n    *\n    * @param {string|Highcharts.SVGAttributes} [hash]\n    *        The native and custom SVG attributes.\n    *\n    * @param {number|string|Highcharts.SVGPathArray} [val]\n    *        If the type of the first argument is `string`, the second can be a\n    *        value, which will serve as a single attribute setter. If the first\n    *        argument is a string and the second is undefined, the function\n    *        serves as a getter and the current value of the property is\n    *        returned.\n    *\n    * @param {Function} [complete]\n    *        A callback function to execute after setting the attributes. This\n    *        makes the function compliant and interchangeable with the\n    *        {@link SVGElement#animate} function.\n    *\n    * @param {boolean} [continueAnimation=true]\n    *        Used internally when `.attr` is called as part of an animation\n    *        step. Otherwise, calling `.attr` for an attribute will stop\n    *        animation for that attribute.\n    *\n    * @return {Highcharts.SVGElement}\n    *         If used as a setter, it returns the current\n    *         {@link Highcharts.SVGElement} so the calls can be chained. If\n    *         used as a getter, the current value of the attribute is returned.\n    */\n    SVGElement.prototype.attr = function (hash, val, complete, continueAnimation) {\n        var element = this.element,\n            symbolCustomAttribs = SVGElement.symbolCustomAttribs;\n        var key,\n            hasSetSymbolSize,\n            ret = this,\n            skipAttr,\n            setter;\n        // Single key-value pair\n        if (typeof hash === 'string' && typeof val !== 'undefined') {\n            key = hash;\n            hash = {};\n            hash[key] = val;\n        }\n        // Used as a getter: first argument is a string, second is undefined\n        if (typeof hash === 'string') {\n            ret = (this[hash + 'Getter'] ||\n                this._defaultGetter).call(this, hash, element);\n            // Setter\n        }\n        else {\n            SVGElement_objectEach(hash, function eachAttribute(val, key) {\n                skipAttr = false;\n                // Unless .attr is from the animator update, stop current\n                // running animation of this property\n                if (!continueAnimation) {\n                    SVGElement_stop(this, key);\n                }\n                // Special handling of symbol attributes\n                if (this.symbolName &&\n                    symbolCustomAttribs.indexOf(key) !== -1) {\n                    if (!hasSetSymbolSize) {\n                        this.symbolAttr(hash);\n                        hasSetSymbolSize = true;\n                    }\n                    skipAttr = true;\n                }\n                if (this.rotation && (key === 'x' || key === 'y')) {\n                    this.doTransform = true;\n                }\n                if (!skipAttr) {\n                    setter = (this[key + 'Setter'] ||\n                        this._defaultSetter);\n                    setter.call(this, val, key, element);\n                }\n            }, this);\n            this.afterSetters();\n        }\n        // In accordance with animate, run a complete callback\n        if (complete) {\n            complete.call(this);\n        }\n        return ret;\n    };\n    /**\n     * Apply a clipping shape to this element.\n     *\n     * @function Highcharts.SVGElement#clip\n     *\n     * @param {SVGElement} [clipElem]\n     *        The clipping shape. If skipped, the current clip is removed.\n     *\n     * @return {Highcharts.SVGElement}\n     *         Returns the SVG element to allow chaining.\n     */\n    SVGElement.prototype.clip = function (clipElem) {\n        if (clipElem && !clipElem.clipPath) {\n            // Add a hyphen at the end to avoid confusion in testing indexes\n            // -1 and -10, -11 etc (#6550)\n            var id = SVGElement_uniqueKey() + '-', clipPath = this.renderer.createElement('clipPath')\n                    .attr({ id: id })\n                    .add(this.renderer.defs);\n            SVGElement_extend(clipElem, { clipPath: clipPath, id: id, count: 0 });\n            clipElem.add(clipPath);\n        }\n        return this.attr('clip-path', clipElem ?\n            \"url(\".concat(this.renderer.url, \"#\").concat(clipElem.id, \")\") :\n            'none');\n    };\n    /**\n     * Calculate the coordinates needed for drawing a rectangle crisply and\n     * return the calculated attributes.\n     *\n     * @function Highcharts.SVGElement#crisp\n     *\n     * @param {Highcharts.RectangleObject} rect\n     * Rectangle to crisp.\n     *\n     * @param {number} [strokeWidth]\n     * The stroke width to consider when computing crisp positioning. It can\n     * also be set directly on the rect parameter.\n     *\n     * @return {Highcharts.RectangleObject}\n     * The modified rectangle arguments.\n     */\n    SVGElement.prototype.crisp = function (rect, strokeWidth) {\n        // Math.round because strokeWidth can sometimes have roundoff errors\n        strokeWidth = Math.round(strokeWidth || rect.strokeWidth || 0);\n        var x1 = rect.x || this.x || 0,\n            y1 = rect.y || this.y || 0,\n            x2 = (rect.width || this.width || 0) + x1,\n            y2 = (rect.height || this.height || 0) + y1, \n            // Find all the rounded coordinates for corners\n            x = SVGElement_crisp(x1,\n            strokeWidth),\n            y = SVGElement_crisp(y1,\n            strokeWidth),\n            x2Crisp = SVGElement_crisp(x2,\n            strokeWidth),\n            y2Crisp = SVGElement_crisp(y2,\n            strokeWidth);\n        SVGElement_extend(rect, {\n            x: x,\n            y: y,\n            width: x2Crisp - x,\n            height: y2Crisp - y\n        });\n        if (SVGElement_defined(rect.strokeWidth)) {\n            rect.strokeWidth = strokeWidth;\n        }\n        return rect;\n    };\n    /**\n     * Build and apply an SVG gradient out of a common JavaScript configuration\n     * object. This function is called from the attribute setters. An event\n     * hook is added for supporting other complex color types.\n     *\n     * @private\n     * @function Highcharts.SVGElement#complexColor\n     *\n     * @param {Highcharts.GradientColorObject|Highcharts.PatternObject} colorOptions\n     * The gradient or pattern options structure.\n     *\n     * @param {string} prop\n     * The property to apply, can either be `fill` or `stroke`.\n     *\n     * @param {Highcharts.SVGDOMElement} elem\n     * SVG element to apply the gradient on.\n     */\n    SVGElement.prototype.complexColor = function (colorOptions, prop, elem) {\n        var renderer = this.renderer;\n        var colorObject,\n            gradName,\n            gradAttr,\n            radAttr,\n            gradients,\n            stops,\n            stopColor,\n            stopOpacity,\n            radialReference,\n            id,\n            key = [],\n            value;\n        SVGElement_fireEvent(this.renderer, 'complexColor', {\n            args: arguments\n        }, function () {\n            // Apply linear or radial gradients\n            if (colorOptions.radialGradient) {\n                gradName = 'radialGradient';\n            }\n            else if (colorOptions.linearGradient) {\n                gradName = 'linearGradient';\n            }\n            if (gradName) {\n                gradAttr = colorOptions[gradName];\n                gradients = renderer.gradients;\n                stops = colorOptions.stops;\n                radialReference = elem.radialReference;\n                // Keep < 2.2 compatibility\n                if (SVGElement_isArray(gradAttr)) {\n                    colorOptions[gradName] = gradAttr = {\n                        x1: gradAttr[0],\n                        y1: gradAttr[1],\n                        x2: gradAttr[2],\n                        y2: gradAttr[3],\n                        gradientUnits: 'userSpaceOnUse'\n                    };\n                }\n                // Correct the radial gradient for the radial reference system\n                if (gradName === 'radialGradient' &&\n                    radialReference &&\n                    !SVGElement_defined(gradAttr.gradientUnits)) {\n                    // Save the radial attributes for updating\n                    radAttr = gradAttr;\n                    gradAttr = SVGElement_merge(gradAttr, renderer.getRadialAttr(radialReference, radAttr), { gradientUnits: 'userSpaceOnUse' });\n                }\n                // Build the unique key to detect whether we need to create a\n                // new element (#1282)\n                SVGElement_objectEach(gradAttr, function (value, n) {\n                    if (n !== 'id') {\n                        key.push(n, value);\n                    }\n                });\n                SVGElement_objectEach(stops, function (val) {\n                    key.push(val);\n                });\n                key = key.join(',');\n                // Check if a gradient object with the same config object is\n                // created within this renderer\n                if (gradients[key]) {\n                    id = gradients[key].attr('id');\n                }\n                else {\n                    // Set the id and create the element\n                    gradAttr.id = id = SVGElement_uniqueKey();\n                    var gradientObject_1 = gradients[key] =\n                            renderer.createElement(gradName)\n                                .attr(gradAttr)\n                                .add(renderer.defs);\n                    gradientObject_1.radAttr = radAttr;\n                    // The gradient needs to keep a list of stops to be able to\n                    // destroy them\n                    gradientObject_1.stops = [];\n                    stops.forEach(function (stop) {\n                        if (stop[1].indexOf('rgba') === 0) {\n                            colorObject = Color_Color.parse(stop[1]);\n                            stopColor = colorObject.get('rgb');\n                            stopOpacity = colorObject.get('a');\n                        }\n                        else {\n                            stopColor = stop[1];\n                            stopOpacity = 1;\n                        }\n                        var stopObject = renderer.createElement('stop').attr({\n                                offset: stop[0],\n                                'stop-color': stopColor,\n                                'stop-opacity': stopOpacity\n                            }).add(gradientObject_1);\n                        // Add the stop element to the gradient\n                        gradientObject_1.stops.push(stopObject);\n                    });\n                }\n                // Set the reference to the gradient object\n                value = 'url(' + renderer.url + '#' + id + ')';\n                elem.setAttribute(prop, value);\n                elem.gradient = key;\n                // Allow the color to be concatenated into tooltips formatters\n                // etc. (#2995)\n                colorOptions.toString = function () {\n                    return value;\n                };\n            }\n        });\n    };\n    /**\n     * Set styles for the element. In addition to CSS styles supported by\n     * native SVG and HTML elements, there are also some custom made for\n     * Highcharts, like `width`, `ellipsis` and `textOverflow` for SVG text\n     * elements.\n     *\n     * @sample highcharts/members/renderer-text-on-chart/\n     *         Styled text\n     *\n     * @function Highcharts.SVGElement#css\n     *\n     * @param {Highcharts.CSSObject} styles\n     *        The new CSS styles.\n     *\n     * @return {Highcharts.SVGElement}\n     *         Return the SVG element for chaining.\n     */\n    SVGElement.prototype.css = function (styles) {\n        var oldStyles = this.styles,\n            newStyles = {},\n            elem = this.element;\n        var textWidth,\n            hasNew = !oldStyles;\n        // Filter out existing styles to increase performance (#2640)\n        if (oldStyles) {\n            SVGElement_objectEach(styles, function (value, n) {\n                if (oldStyles && oldStyles[n] !== value) {\n                    newStyles[n] = value;\n                    hasNew = true;\n                }\n            });\n        }\n        if (hasNew) {\n            // Merge the new styles with the old ones\n            if (oldStyles) {\n                styles = SVGElement_extend(oldStyles, newStyles);\n            }\n            // Get the text width from style\n            // Previously set, unset it (#8234)\n            if (styles.width === null || styles.width === 'auto') {\n                delete this.textWidth;\n                // Apply new\n            }\n            else if (elem.nodeName.toLowerCase() === 'text' &&\n                styles.width) {\n                textWidth = this.textWidth = SVGElement_pInt(styles.width);\n            }\n            // Store object\n            SVGElement_extend(this.styles, styles);\n            if (textWidth && (!svg && this.renderer.forExport)) {\n                delete styles.width;\n            }\n            var fontSize = isFirefox && styles.fontSize || null;\n            // Necessary in firefox to be able to set font-size, #22124\n            if (fontSize && (SVGElement_isNumber(fontSize) ||\n                /^\\d+$/.test(fontSize))) {\n                styles.fontSize += 'px';\n            }\n            var stylesToApply_1 = SVGElement_merge(styles);\n            if (elem.namespaceURI === this.SVG_NS) {\n                // These CSS properties are interpreted internally by the SVG\n                // renderer, but are not supported by SVG and should not be\n                // added to the DOM. In styled mode, no CSS should find its way\n                // to the DOM whatsoever (#6173, #6474).\n                ['textOutline', 'textOverflow', 'whiteSpace', 'width'].forEach(function (key) { return (stylesToApply_1 &&\n                    delete stylesToApply_1[key]); });\n                // SVG requires fill for text\n                if (stylesToApply_1.color) {\n                    stylesToApply_1.fill = stylesToApply_1.color;\n                }\n            }\n            SVGElement_css(elem, stylesToApply_1);\n        }\n        if (this.added) {\n            // Rebuild text after added. Cache mechanisms in the buildText will\n            // prevent building if there are no significant changes.\n            if (this.element.nodeName === 'text') {\n                this.renderer.buildText(this);\n            }\n            // Apply text outline after added\n            if (styles.textOutline) {\n                this.applyTextOutline(styles.textOutline);\n            }\n        }\n        return this;\n    };\n    /**\n     * @private\n     * @function Highcharts.SVGElement#dashstyleSetter\n     * @param {string} value\n     */\n    SVGElement.prototype.dashstyleSetter = function (value) {\n        var i,\n            strokeWidth = this['stroke-width'];\n        // If \"inherit\", like maps in IE, assume 1 (#4981). With HC5 and the new\n        // strokeWidth function, we should be able to use that instead.\n        if (strokeWidth === 'inherit') {\n            strokeWidth = 1;\n        }\n        value = value && value.toLowerCase();\n        if (value) {\n            var v = value\n                    .replace('shortdashdotdot', '3,1,1,1,1,1,')\n                    .replace('shortdashdot', '3,1,1,1')\n                    .replace('shortdot', '1,1,')\n                    .replace('shortdash', '3,1,')\n                    .replace('longdash', '8,3,')\n                    .replace(/dot/g, '1,3,')\n                    .replace('dash', '4,3,')\n                    .replace(/,$/, '')\n                    .split(','); // Ending comma\n                i = v.length;\n            while (i--) {\n                v[i] = '' + (SVGElement_pInt(v[i]) * SVGElement_pick(strokeWidth, NaN));\n            }\n            value = v.join(',').replace(/NaN/g, 'none'); // #3226\n            this.element.setAttribute('stroke-dasharray', value);\n        }\n    };\n    /**\n     * Destroy the element and element wrapper and clear up the DOM and event\n     * hooks.\n     *\n     * @function Highcharts.SVGElement#destroy\n     */\n    SVGElement.prototype.destroy = function () {\n        var _a;\n        var wrapper = this,\n            element = wrapper.element || {},\n            renderer = wrapper.renderer,\n            ownerSVGElement = element.ownerSVGElement;\n        var parentToClean = (element.nodeName === 'SPAN' &&\n                wrapper.parentGroup ||\n                void 0),\n            grandParent,\n            i;\n        // Remove events\n        element.onclick = element.onmouseout = element.onmouseover =\n            element.onmousemove = element.point = null;\n        SVGElement_stop(wrapper); // Stop running animations\n        if (wrapper.clipPath && ownerSVGElement) {\n            var clipPath_1 = wrapper.clipPath;\n            // Look for existing references to this clipPath and remove them\n            // before destroying the element (#6196).\n            // The upper case version is for Edge\n            [].forEach.call(ownerSVGElement.querySelectorAll('[clip-path],[CLIP-PATH]'), function (el) {\n                if (el.getAttribute('clip-path').indexOf(clipPath_1.element.id) > -1) {\n                    el.removeAttribute('clip-path');\n                }\n            });\n            wrapper.clipPath = clipPath_1.destroy();\n        }\n        wrapper.connector = (_a = wrapper.connector) === null || _a === void 0 ? void 0 : _a.destroy();\n        // Destroy stops in case this is a gradient object @todo old code?\n        if (wrapper.stops) {\n            for (i = 0; i < wrapper.stops.length; i++) {\n                wrapper.stops[i].destroy();\n            }\n            wrapper.stops.length = 0;\n            wrapper.stops = void 0;\n        }\n        // Remove element\n        wrapper.safeRemoveChild(element);\n        // In case of useHTML, clean up empty containers emulating SVG groups\n        // (#1960, #2393, #2697).\n        while (parentToClean &&\n            parentToClean.div &&\n            parentToClean.div.childNodes.length === 0) {\n            grandParent = parentToClean.parentGroup;\n            wrapper.safeRemoveChild(parentToClean.div);\n            delete parentToClean.div;\n            parentToClean = grandParent;\n        }\n        // Remove from alignObjects\n        if (wrapper.alignOptions) {\n            SVGElement_erase(renderer.alignedObjects, wrapper);\n        }\n        SVGElement_objectEach(wrapper, function (val, key) {\n            // Destroy child elements of a group\n            if (wrapper[key] &&\n                wrapper[key].parentGroup === wrapper &&\n                wrapper[key].destroy) {\n                wrapper[key].destroy();\n            }\n            // Delete all properties\n            delete wrapper[key];\n        });\n        return;\n    };\n    /**\n     * @private\n     * @function Highcharts.SVGElement#dSettter\n     * @param {number|string|Highcharts.SVGPathArray} value\n     * @param {string} key\n     * @param {Highcharts.SVGDOMElement} element\n     */\n    SVGElement.prototype.dSetter = function (value, key, element) {\n        if (SVGElement_isArray(value)) {\n            // Backwards compatibility, convert one-dimensional array into an\n            // array of segments\n            if (typeof value[0] === 'string') {\n                value = this.renderer.pathToSegments(value);\n            }\n            this.pathArray = value;\n            value = value.reduce(function (acc, seg, i) {\n                if (!seg || !seg.join) {\n                    return (seg || '').toString();\n                }\n                return (i ? acc + ' ' : '') + seg.join(' ');\n            }, '');\n        }\n        if (/(NaN| {2}|^$)/.test(value)) {\n            value = 'M 0 0';\n        }\n        // Check for cache before resetting. Resetting causes disturbance in the\n        // DOM, causing flickering in some cases in Edge/IE (#6747). Also\n        // possible performance gain.\n        if (this[key] !== value) {\n            element.setAttribute(key, value);\n            this[key] = value;\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.SVGElement#fillSetter\n     * @param {Highcharts.ColorType} value\n     * @param {string} key\n     * @param {Highcharts.SVGDOMElement} element\n     */\n    SVGElement.prototype.fillSetter = function (value, key, element) {\n        if (typeof value === 'string') {\n            element.setAttribute(key, value);\n        }\n        else if (value) {\n            this.complexColor(value, key, element);\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.SVGElement#hrefSetter\n     * @param {Highcharts.ColorType} value\n     * @param {string} key\n     * @param {Highcharts.SVGDOMElement} element\n     */\n    SVGElement.prototype.hrefSetter = function (value, key, element) {\n        // Namespace is needed for offline export, #19106\n        element.setAttributeNS('http://www.w3.org/1999/xlink', key, value);\n    };\n    /**\n     * Get the bounding box (width, height, x and y) for the element. Generally\n     * used to get rendered text size. Since this is called a lot in charts,\n     * the results are cached based on text properties, in order to save DOM\n     * traffic. The returned bounding box includes the rotation, so for example\n     * a single text line of rotation 90 will report a greater height, and a\n     * width corresponding to the line-height.\n     *\n     * @sample highcharts/members/renderer-on-chart/\n     *         Draw a rectangle based on a text's bounding box\n     *\n     * @function Highcharts.SVGElement#getBBox\n     *\n     * @param {boolean} [reload]\n     *        Skip the cache and get the updated DOM bounding box.\n     *\n     * @param {number} [rot]\n     *        Override the element's rotation. This is internally used on axis\n     *        labels with a value of 0 to find out what the bounding box would\n     *        be have been if it were not rotated.\n     *\n     * @return {Highcharts.BBoxObject}\n     *         The bounding box with `x`, `y`, `width` and `height` properties.\n     */\n    SVGElement.prototype.getBBox = function (reload, rot) {\n        var wrapper = this,\n            alignValue = wrapper.alignValue,\n            element = wrapper.element,\n            renderer = wrapper.renderer,\n            styles = wrapper.styles,\n            textStr = wrapper.textStr,\n            cache = renderer.cache,\n            cacheKeys = renderer.cacheKeys,\n            isSVG = element.namespaceURI === wrapper.SVG_NS,\n            rotation = SVGElement_pick(rot,\n            wrapper.rotation, 0),\n            fontSize = renderer.styledMode ? (element &&\n                SVGElement.prototype.getStyle.call(element, 'font-size')) : (styles.fontSize);\n        var bBox,\n            height,\n            toggleTextShadowShim,\n            cacheKey;\n        // Avoid undefined and null (#7316)\n        if (SVGElement_defined(textStr)) {\n            cacheKey = textStr.toString();\n            // Since numbers are monospaced, and numerical labels appear a lot\n            // in a chart, we assume that a label of n characters has the same\n            // bounding box as others of the same length. Unless there is inner\n            // HTML in the label. In that case, leave the numbers as is (#5899).\n            if (cacheKey.indexOf('<') === -1) {\n                cacheKey = cacheKey.replace(/\\d/g, '0');\n            }\n            // Properties that affect bounding box\n            cacheKey += [\n                '',\n                renderer.rootFontSize,\n                fontSize,\n                rotation,\n                wrapper.textWidth, // #7874, also useHTML\n                alignValue,\n                styles.lineClamp,\n                styles.textOverflow, // #5968\n                styles.fontWeight // #12163\n            ].join(',');\n        }\n        if (cacheKey && !reload) {\n            bBox = cache[cacheKey];\n        }\n        // No cache found\n        if (!bBox || bBox.polygon) {\n            // SVG elements\n            if (isSVG || renderer.forExport) {\n                try { // Fails in Firefox if the container has display: none.\n                    // When the text shadow shim is used, we need to hide the\n                    // fake shadows to get the correct bounding box (#3872)\n                    toggleTextShadowShim = this.fakeTS && function (display) {\n                        var outline = element.querySelector('.highcharts-text-outline');\n                        if (outline) {\n                            SVGElement_css(outline, { display: display });\n                        }\n                    };\n                    // Workaround for #3842, Firefox reporting wrong bounding\n                    // box for shadows\n                    if (SVGElement_isFunction(toggleTextShadowShim)) {\n                        toggleTextShadowShim('none');\n                    }\n                    bBox = element.getBBox ?\n                        // SVG: use extend because IE9 is not allowed to change\n                        // width and height in case of rotation (below)\n                        SVGElement_extend({}, element.getBBox()) : {\n                        // HTML elements with `exporting.allowHTML` and\n                        // legacy IE in export mode\n                        width: element.offsetWidth,\n                        height: element.offsetHeight,\n                        x: 0,\n                        y: 0\n                    };\n                    // #3842\n                    if (SVGElement_isFunction(toggleTextShadowShim)) {\n                        toggleTextShadowShim('');\n                    }\n                }\n                catch (e) {\n                    '';\n                }\n                // If the bBox is not set, the try-catch block above failed. The\n                // other condition is for Opera that returns a width of\n                // -Infinity on hidden elements.\n                if (!bBox || bBox.width < 0) {\n                    bBox = { x: 0, y: 0, width: 0, height: 0 };\n                }\n                // Use HTML within SVG\n            }\n            else {\n                bBox = wrapper.htmlGetBBox();\n            }\n            // True SVG elements as well as HTML elements in modern browsers\n            // using the .useHTML option need to compensated for rotation\n            height = bBox.height;\n            // Workaround for wrong bounding box in IE, Edge and Chrome on\n            // Windows. With Highcharts' default font, IE and Edge report\n            // a box height of 16.899 and Chrome rounds it to 17. If this\n            // stands uncorrected, it results in more padding added below\n            // the text than above when adding a label border or background.\n            // Also vertical positioning is affected.\n            // https://jsfiddle.net/highcharts/em37nvuj/\n            // (#1101, #1505, #1669, #2568, #6213).\n            if (isSVG) {\n                bBox.height = height = ({\n                    '11px,17': 14,\n                    '13px,20': 16\n                }[\"\" + (fontSize || '') + \",\".concat(Math.round(height))] ||\n                    height);\n            }\n            // Adjust for rotated text\n            if (rotation) {\n                bBox = this.getRotatedBox(bBox, rotation);\n            }\n            // Create a reference to catch changes to bBox\n            var e = { bBox: bBox };\n            SVGElement_fireEvent(this, 'afterGetBBox', e);\n            // Pick up any changes after the fired event\n            bBox = e.bBox;\n        }\n        // Cache it. When loading a chart in a hidden iframe in Firefox and\n        // IE/Edge, the bounding box height is 0, so don't cache it (#5620).\n        if (cacheKey && (textStr === '' || bBox.height > 0)) {\n            // Rotate (#4681)\n            while (cacheKeys.length > 250) {\n                delete cache[cacheKeys.shift()];\n            }\n            if (!cache[cacheKey]) {\n                cacheKeys.push(cacheKey);\n            }\n            cache[cacheKey] = bBox;\n        }\n        return bBox;\n    };\n    /**\n     * Get the rotated box.\n     * @private\n     */\n    SVGElement.prototype.getRotatedBox = function (box, rotation) {\n        var boxX = box.x,\n            boxY = box.y,\n            width = box.width,\n            height = box.height,\n            _a = this,\n            alignValue = _a.alignValue,\n            translateY = _a.translateY,\n            _b = _a.rotationOriginX,\n            rotationOriginX = _b === void 0 ? 0 : _b,\n            _c = _a.rotationOriginY,\n            rotationOriginY = _c === void 0 ? 0 : _c,\n            alignFactor = SVGElement_getAlignFactor(alignValue),\n            baseline = Number(this.element.getAttribute('y') || 0) -\n                (translateY ? 0 : boxY),\n            rad = rotation * deg2rad,\n            rad90 = (rotation - 90) * deg2rad,\n            cosRad = Math.cos(rad),\n            sinRad = Math.sin(rad),\n            wCosRad = width * cosRad,\n            wSinRad = width * sinRad,\n            cosRad90 = Math.cos(rad90),\n            sinRad90 = Math.sin(rad90),\n            _d = [\n                rotationOriginX,\n                rotationOriginY\n            ].map(function (rotOrigin) { return [\n                rotOrigin - (rotOrigin * cosRad),\n                rotOrigin * sinRad\n            ]; }),\n            _e = _d[0],\n            xOriginCosRad = _e[0],\n            xOriginSinRad = _e[1],\n            _f = _d[1],\n            yOriginCosRad = _f[0],\n            yOriginSinRad = _f[1], \n            // Find the starting point on the left side baseline of\n            // the text\n            pX = ((boxX + alignFactor * (width - wCosRad)) +\n                xOriginCosRad + yOriginSinRad),\n            pY = ((boxY + baseline - alignFactor * wSinRad) -\n                xOriginSinRad + yOriginCosRad), \n            // Find all corners\n            aX = pX + baseline * cosRad90,\n            bX = aX + wCosRad,\n            cX = bX - height * cosRad90,\n            dX = cX - wCosRad,\n            aY = pY + baseline * sinRad90,\n            bY = aY + wSinRad,\n            cY = bY - height * sinRad90,\n            dY = cY - wSinRad;\n        // Deduct the bounding box from the corners\n        var x = Math.min(aX,\n            bX,\n            cX,\n            dX),\n            y = Math.min(aY,\n            bY,\n            cY,\n            dY),\n            boxWidth = Math.max(aX,\n            bX,\n            cX,\n            dX) - x,\n            boxHeight = Math.max(aY,\n            bY,\n            cY,\n            dY) - y;\n        /* Uncomment to debug boxes\n        this.renderer.path([\n            ['M', aX, aY],\n            ['L', bX, bY],\n            ['L', cX, cY],\n            ['L', dX, dY],\n            ['Z']\n        ])\n            .attr({\n                stroke: 'red',\n                'stroke-width': 1\n            })\n            .add();\n        // */\n        return {\n            x: x,\n            y: y,\n            width: boxWidth,\n            height: boxHeight,\n            polygon: [\n                [aX, aY],\n                [bX, bY],\n                [cX, cY],\n                [dX, dY]\n            ]\n        };\n    };\n    /**\n     * Get the computed style. Only in styled mode.\n     *\n     * @example\n     * chart.series[0].points[0].graphic.getStyle('stroke-width'); // => '1px'\n     *\n     * @function Highcharts.SVGElement#getStyle\n     *\n     * @param {string} prop\n     *        The property name to check for.\n     *\n     * @return {string}\n     *         The current computed value.\n     */\n    SVGElement.prototype.getStyle = function (prop) {\n        return SVGElement_win\n            .getComputedStyle(this.element || this, '')\n            .getPropertyValue(prop);\n    };\n    /**\n     * Check if an element has the given class name.\n     *\n     * @function Highcharts.SVGElement#hasClass\n     *\n     * @param {string} className\n     * The class name to check for.\n     *\n     * @return {boolean}\n     * Whether the class name is found.\n     */\n    SVGElement.prototype.hasClass = function (className) {\n        return ('' + this.attr('class'))\n            .split(' ')\n            .indexOf(className) !== -1;\n    };\n    /**\n     * Hide the element, similar to setting the `visibility` attribute to\n     * `hidden`.\n     *\n     * @function Highcharts.SVGElement#hide\n     *\n     * @return {Highcharts.SVGElement}\n     *         Returns the SVGElement for chaining.\n     */\n    SVGElement.prototype.hide = function () {\n        return this.attr({ visibility: 'hidden' });\n    };\n    /**\n     * @private\n     */\n    SVGElement.prototype.htmlGetBBox = function () {\n        return { height: 0, width: 0, x: 0, y: 0 };\n    };\n    /**\n     * Add an event listener. This is a simple setter that replaces the\n     * previous event of the same type added by this function, as opposed to\n     * the {@link Highcharts#addEvent} function.\n     *\n     * @sample highcharts/members/element-on/\n     *         A clickable rectangle\n     *\n     * @function Highcharts.SVGElement#on\n     *\n     * @param {string} eventType\n     * The event type.\n     *\n     * @param {Function} handler\n     * The handler callback.\n     *\n     * @return {Highcharts.SVGElement}\n     * The SVGElement for chaining.\n     */\n    SVGElement.prototype.on = function (eventType, handler) {\n        var onEvents = this.onEvents;\n        if (onEvents[eventType]) {\n            // Unbind existing event\n            onEvents[eventType]();\n        }\n        onEvents[eventType] = SVGElement_addEvent(this.element, eventType, handler);\n        return this;\n    };\n    /**\n     * @private\n     * @function Highcharts.SVGElement#opacitySetter\n     * @param {string} value\n     * @param {string} key\n     * @param {Highcharts.SVGDOMElement} element\n     */\n    SVGElement.prototype.opacitySetter = function (value, key, element) {\n        // Round off to avoid float errors, like tests where opacity lands on\n        // 9.86957e-06 instead of 0\n        var opacity = Number(Number(value).toFixed(3));\n        this.opacity = opacity;\n        element.setAttribute(key, opacity);\n    };\n    /**\n     * Re-align an aligned text or label after setting the text.\n     *\n     * @private\n     * @function Highcharts.SVGElement#reAlign\n     *\n     */\n    SVGElement.prototype.reAlign = function () {\n        var _a;\n        if (((_a = this.alignOptions) === null || _a === void 0 ? void 0 : _a.width) && this.alignOptions.align !== 'left') {\n            this.alignOptions.width = this.getBBox().width;\n            this.placed = false; // Block animation\n            this.align();\n        }\n    };\n    /**\n     * Remove a class name from the element.\n     *\n     * @function Highcharts.SVGElement#removeClass\n     *\n     * @param {string|RegExp} className\n     *        The class name to remove.\n     *\n     * @return {Highcharts.SVGElement} Returns the SVG element for chainability.\n     */\n    SVGElement.prototype.removeClass = function (className) {\n        return this.attr('class', ('' + this.attr('class'))\n            .replace(SVGElement_isString(className) ?\n            new RegExp(\"(^| )\".concat(className, \"( |$)\")) : // #12064, #13590\n            className, ' ')\n            .replace(/ +/g, ' ')\n            .trim());\n    };\n    /**\n     *\n     * @private\n     */\n    SVGElement.prototype.removeTextOutline = function () {\n        var outline = this.element\n                .querySelector('tspan.highcharts-text-outline');\n        if (outline) {\n            this.safeRemoveChild(outline);\n        }\n    };\n    /**\n     * Removes an element from the DOM.\n     *\n     * @private\n     * @function Highcharts.SVGElement#safeRemoveChild\n     *\n     * @param {Highcharts.SVGDOMElement|Highcharts.HTMLDOMElement} element\n     * The DOM node to remove.\n     */\n    SVGElement.prototype.safeRemoveChild = function (element) {\n        var parentNode = element.parentNode;\n        if (parentNode) {\n            parentNode.removeChild(element);\n        }\n    };\n    /**\n     * Set the coordinates needed to draw a consistent radial gradient across\n     * a shape regardless of positioning inside the chart. Used on pie slices\n     * to make all the slices have the same radial reference point.\n     *\n     * @function Highcharts.SVGElement#setRadialReference\n     *\n     * @param {Array<number>} coordinates\n     * The center reference. The format is `[centerX, centerY, diameter]` in\n     * pixels.\n     *\n     * @return {Highcharts.SVGElement}\n     * Returns the SVGElement for chaining.\n     */\n    SVGElement.prototype.setRadialReference = function (coordinates) {\n        var existingGradient = (this.element.gradient &&\n                this.renderer.gradients[this.element.gradient]);\n        this.element.radialReference = coordinates;\n        // On redrawing objects with an existing gradient, the gradient needs\n        // to be repositioned (#3801)\n        if (existingGradient && existingGradient.radAttr) {\n            existingGradient.animate(this.renderer.getRadialAttr(coordinates, existingGradient.radAttr));\n        }\n        return this;\n    };\n    /**\n     * Add a shadow to the element. In styled mode, this method is not used,\n     * instead use `defs` and filters.\n     *\n     * @example\n     * renderer.rect(10, 100, 100, 100)\n     *     .attr({ fill: 'red' })\n     *     .shadow(true);\n     *\n     * @function Highcharts.SVGElement#shadow\n     *\n     * @param {boolean|Highcharts.ShadowOptionsObject} [shadowOptions] The\n     *        shadow options. If `true`, the default options are applied. If\n     *        `false`, the current shadow will be removed.\n     *\n     * @return {Highcharts.SVGElement} Returns the SVGElement for chaining.\n     */\n    SVGElement.prototype.shadow = function (shadowOptions) {\n        var _a;\n        var renderer = this.renderer,\n            options = SVGElement_merge(((_a = this.parentGroup) === null || _a === void 0 ? void 0 : _a.rotation) === 90 ? {\n                offsetX: -1,\n                offsetY: -1\n            } : {},\n            SVGElement_isObject(shadowOptions) ? shadowOptions : {}),\n            id = renderer.shadowDefinition(options);\n        return this.attr({\n            filter: shadowOptions ?\n                \"url(\".concat(renderer.url, \"#\").concat(id, \")\") :\n                'none'\n        });\n    };\n    /**\n     * Show the element after it has been hidden.\n     *\n     * @function Highcharts.SVGElement#show\n     *\n     * @param {boolean} [inherit=true]\n     *        Set the visibility attribute to `inherit` rather than `visible`.\n     *        The difference is that an element with `visibility=\"visible\"`\n     *        will be visible even if the parent is hidden.\n     *\n     * @return {Highcharts.SVGElement}\n     *         Returns the SVGElement for chaining.\n     */\n    SVGElement.prototype.show = function (inherit) {\n        if (inherit === void 0) { inherit = true; }\n        return this.attr({ visibility: inherit ? 'inherit' : 'visible' });\n    };\n    /**\n     * Set the stroke-width and record it on the SVGElement\n     *\n     * @private\n     * @function Highcharts.SVGElement#strokeSetter\n     * @param {number|string|ColorType} value\n     * @param {string} key\n     * @param {Highcharts.SVGDOMElement} element\n     */\n    SVGElement.prototype['stroke-widthSetter'] = function (value, key, element) {\n        // Record it for quick access in getter\n        this[key] = value;\n        element.setAttribute(key, value);\n    };\n    /**\n     * Get the computed stroke width in pixel values. This is used extensively\n     * when drawing shapes to ensure the shapes are rendered crisp and\n     * positioned correctly relative to each other. Using\n     * `shape-rendering: crispEdges` leaves us less control over positioning,\n     * for example when we want to stack columns next to each other, or position\n     * things pixel-perfectly within the plot box.\n     *\n     * The common pattern when placing a shape is:\n     * - Create the SVGElement and add it to the DOM. In styled mode, it will\n     *   now receive a stroke width from the style sheet. In classic mode we\n     *   will add the `stroke-width` attribute.\n     * - Read the computed `elem.strokeWidth()`.\n     * - Place it based on the stroke width.\n     *\n     * @function Highcharts.SVGElement#strokeWidth\n     *\n     * @return {number}\n     * The stroke width in pixels. Even if the given stroke width (in CSS or by\n     * attributes) is based on `em` or other units, the pixel size is returned.\n     */\n    SVGElement.prototype.strokeWidth = function () {\n        // In non-styled mode, read the stroke width as set by .attr\n        if (!this.renderer.styledMode) {\n            return this['stroke-width'] || 0;\n        }\n        // In styled mode, read computed stroke width\n        var val = this.getStyle('stroke-width');\n        var ret = 0,\n            tempElement;\n        // Read pixel values directly\n        if (/px$/.test(val)) {\n            ret = SVGElement_pInt(val);\n            // Other values like em, pt etc need to be measured\n        }\n        else if (val !== '') {\n            tempElement = SVGElement_doc.createElementNS(SVGElement_SVG_NS, 'rect');\n            SVGElement_attr(tempElement, {\n                width: val,\n                'stroke-width': 0\n            });\n            this.element.parentNode.appendChild(tempElement);\n            ret = tempElement.getBBox().width;\n            tempElement.parentNode.removeChild(tempElement);\n        }\n        return ret;\n    };\n    /**\n     * If one of the symbol size affecting parameters are changed,\n     * check all the others only once for each call to an element's\n     * .attr() method\n     *\n     * @private\n     * @function Highcharts.SVGElement#symbolAttr\n     *\n     * @param {Highcharts.SVGAttributes} hash\n     * The attributes to set.\n     */\n    SVGElement.prototype.symbolAttr = function (hash) {\n        var wrapper = this;\n        SVGElement.symbolCustomAttribs.forEach(function (key) {\n            wrapper[key] = SVGElement_pick(hash[key], wrapper[key]);\n        });\n        wrapper.attr({\n            d: wrapper.renderer.symbols[wrapper.symbolName](wrapper.x, wrapper.y, wrapper.width, wrapper.height, wrapper)\n        });\n    };\n    /**\n     * @private\n     * @function Highcharts.SVGElement#textSetter\n     * @param {string} value\n     */\n    SVGElement.prototype.textSetter = function (value) {\n        if (value !== this.textStr) {\n            // Delete size caches when the text changes\n            // delete this.bBox; // old code in series-label\n            delete this.textPxLength;\n            this.textStr = value;\n            if (this.added) {\n                this.renderer.buildText(this);\n            }\n            this.reAlign();\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.SVGElement#titleSetter\n     * @param {string} value\n     */\n    SVGElement.prototype.titleSetter = function (value) {\n        var el = this.element;\n        var titleNode = el.getElementsByTagName('title')[0] ||\n                SVGElement_doc.createElementNS(this.SVG_NS, 'title');\n        // Move to first child\n        if (el.insertBefore) {\n            el.insertBefore(titleNode, el.firstChild);\n        }\n        else {\n            el.appendChild(titleNode);\n        }\n        // Replace text content and escape markup\n        titleNode.textContent = SVGElement_replaceNested(// Scan #[73]\n        SVGElement_pick(value, ''), // #3276, #3895\n        [/<[^>]*>/g, '']).replace(/&lt;/g, '<').replace(/&gt;/g, '>');\n    };\n    /**\n     * Bring the element to the front. Alternatively, a new zIndex can be set.\n     *\n     * @sample highcharts/members/element-tofront/\n     *         Click an element to bring it to front\n     *\n     * @function Highcharts.SVGElement#toFront\n     *\n     * @return {Highcharts.SVGElement}\n     * Returns the SVGElement for chaining.\n     */\n    SVGElement.prototype.toFront = function () {\n        var element = this.element;\n        element.parentNode.appendChild(element);\n        return this;\n    };\n    /**\n     * Move an object and its children by x and y values.\n     *\n     * @function Highcharts.SVGElement#translate\n     *\n     * @param {number} x\n     * The x value.\n     *\n     * @param {number} y\n     * The y value.\n     *\n     * @return {Highcharts.SVGElement}\n     * Translated element.\n     */\n    SVGElement.prototype.translate = function (x, y) {\n        return this.attr({\n            translateX: x,\n            translateY: y\n        });\n    };\n    /**\n     * Update the transform attribute based on internal properties. Deals with\n     * the custom `translateX`, `translateY`, `rotation`, `scaleX` and `scaleY`\n     * attributes and updates the SVG `transform` attribute.\n     *\n     * @private\n     * @function Highcharts.SVGElement#updateTransform\n     */\n    SVGElement.prototype.updateTransform = function (attrib) {\n        var _a;\n        if (attrib === void 0) { attrib = 'transform'; }\n        var _b = this,\n            element = _b.element,\n            matrix = _b.matrix,\n            _c = _b.rotation,\n            rotation = _c === void 0 ? 0 : _c,\n            rotationOriginX = _b.rotationOriginX,\n            rotationOriginY = _b.rotationOriginY,\n            scaleX = _b.scaleX,\n            scaleY = _b.scaleY,\n            _d = _b.translateX,\n            translateX = _d === void 0 ? 0 : _d,\n            _e = _b.translateY,\n            translateY = _e === void 0 ? 0 : _e;\n        // Apply translate. Nearly all transformed elements have translation,\n        // so instead of checking for translate = 0, do it always (#1767,\n        // #1846).\n        var transform = ['translate(' + translateX + ',' + translateY + ')'];\n        // Apply matrix\n        if (SVGElement_defined(matrix)) {\n            transform.push('matrix(' + matrix.join(',') + ')');\n        }\n        // Apply rotation\n        if (rotation) {\n            transform.push('rotate(' + rotation + ' ' +\n                SVGElement_pick(rotationOriginX, element.getAttribute('x'), 0) +\n                ' ' +\n                SVGElement_pick(rotationOriginY, element.getAttribute('y') || 0) + ')');\n            // HTML labels rotation (#20685)\n            if (((_a = this.text) === null || _a === void 0 ? void 0 : _a.element.tagName) === 'SPAN') {\n                this.text.attr({\n                    rotation: rotation,\n                    rotationOriginX: (rotationOriginX || 0) - this.padding,\n                    rotationOriginY: (rotationOriginY || 0) - this.padding\n                });\n            }\n        }\n        // Apply scale\n        if (SVGElement_defined(scaleX) || SVGElement_defined(scaleY)) {\n            transform.push('scale(' + SVGElement_pick(scaleX, 1) + ' ' + SVGElement_pick(scaleY, 1) + ')');\n        }\n        if (transform.length && !(this.text || this).textPath) {\n            element.setAttribute(attrib, transform.join(' '));\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.SVGElement#visibilitySetter\n     *\n     * @param {string} value\n     *\n     * @param {string} key\n     *\n     * @param {Highcharts.SVGDOMElement} element\n     *\n     */\n    SVGElement.prototype.visibilitySetter = function (value, key, element) {\n        // IE9-11 doesn't handle visibility:inherit well, so we remove the\n        // attribute instead (#2881, #3909)\n        if (value === 'inherit') {\n            element.removeAttribute(key);\n        }\n        else if (this[key] !== value) { // #6747\n            element.setAttribute(key, value);\n        }\n        this[key] = value;\n    };\n    /**\n     * @private\n     * @function Highcharts.SVGElement#xGetter\n     */\n    SVGElement.prototype.xGetter = function (key) {\n        if (this.element.nodeName === 'circle') {\n            if (key === 'x') {\n                key = 'cx';\n            }\n            else if (key === 'y') {\n                key = 'cy';\n            }\n        }\n        return this._defaultGetter(key);\n    };\n    /**\n     * @private\n     * @function Highcharts.SVGElement#zIndexSetter\n     */\n    SVGElement.prototype.zIndexSetter = function (value, key) {\n        var renderer = this.renderer,\n            parentGroup = this.parentGroup,\n            parentWrapper = parentGroup || renderer,\n            parentNode = parentWrapper.element || renderer.box,\n            element = this.element,\n            svgParent = parentNode === renderer.box;\n        var childNodes,\n            otherElement,\n            otherZIndex,\n            inserted = false,\n            undefinedOtherZIndex,\n            run = this.added,\n            i;\n        if (SVGElement_defined(value)) {\n            // So we can read it for other elements in the group\n            element.setAttribute('data-z-index', value);\n            value = +value;\n            if (this[key] === value) {\n                // Only update when needed (#3865)\n                run = false;\n            }\n        }\n        else if (SVGElement_defined(this[key])) {\n            element.removeAttribute('data-z-index');\n        }\n        this[key] = value;\n        // Insert according to this and other elements' zIndex. Before .add() is\n        // called, nothing is done. Then on add, or by later calls to\n        // zIndexSetter, the node is placed on the right place in the DOM.\n        if (run) {\n            value = this.zIndex;\n            if (value && parentGroup) {\n                parentGroup.handleZ = true;\n            }\n            childNodes = parentNode.childNodes;\n            for (i = childNodes.length - 1; i >= 0 && !inserted; i--) {\n                otherElement = childNodes[i];\n                otherZIndex = otherElement.getAttribute('data-z-index');\n                undefinedOtherZIndex = !SVGElement_defined(otherZIndex);\n                if (otherElement !== element) {\n                    if (\n                    // Negative zIndex versus no zIndex:\n                    // On all levels except the highest. If the parent is\n                    // <svg>, then we don't want to put items before <desc>\n                    // or <defs>\n                    value < 0 &&\n                        undefinedOtherZIndex &&\n                        !svgParent &&\n                        !i) {\n                        parentNode.insertBefore(element, childNodes[i]);\n                        inserted = true;\n                    }\n                    else if (\n                    // Insert after the first element with a lower zIndex\n                    SVGElement_pInt(otherZIndex) <= value ||\n                        // If negative zIndex, add this before first undefined\n                        // zIndex element\n                        (undefinedOtherZIndex &&\n                            (!SVGElement_defined(value) || value >= 0))) {\n                        parentNode.insertBefore(element, childNodes[i + 1]);\n                        inserted = true;\n                    }\n                }\n            }\n            if (!inserted) {\n                parentNode.insertBefore(element, childNodes[svgParent ? 3 : 0]);\n                inserted = true;\n            }\n        }\n        return inserted;\n    };\n    /* *\n     *\n     *  Properties\n     *\n     * */\n    // Custom attributes used for symbols, these should be filtered out when\n    // setting SVGElement attributes (#9375).\n    SVGElement.symbolCustomAttribs = [\n        'anchorX',\n        'anchorY',\n        'clockwise',\n        'end',\n        'height',\n        'innerR',\n        'r',\n        'start',\n        'width',\n        'x',\n        'y'\n    ];\n    return SVGElement;\n}());\n// Some shared setters and getters\nSVGElement.prototype.strokeSetter = SVGElement.prototype.fillSetter;\nSVGElement.prototype.yGetter = SVGElement.prototype.xGetter;\nSVGElement.prototype.matrixSetter =\n    SVGElement.prototype.rotationOriginXSetter =\n        SVGElement.prototype.rotationOriginYSetter =\n            SVGElement.prototype.rotationSetter =\n                SVGElement.prototype.scaleXSetter =\n                    SVGElement.prototype.scaleYSetter =\n                        SVGElement.prototype.translateXSetter =\n                            SVGElement.prototype.translateYSetter =\n                                SVGElement.prototype.verticalAlignSetter = function (value, key) {\n                                    this[key] = value;\n                                    this.doTransform = true;\n                                };\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var SVG_SVGElement = (SVGElement);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * Reference to the global SVGElement class as a workaround for a name conflict\n * in the Highcharts namespace.\n *\n * @global\n * @typedef {global.SVGElement} GlobalSVGElement\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SVGElement\n */\n/**\n * The horizontal alignment of an element.\n *\n * @typedef {\"center\"|\"left\"|\"right\"} Highcharts.AlignValue\n */\n/**\n * Options to align the element relative to the chart or another box.\n *\n * @interface Highcharts.AlignObject\n */ /**\n* Horizontal alignment. Can be one of `left`, `center` and `right`.\n*\n* @name Highcharts.AlignObject#align\n* @type {Highcharts.AlignValue|undefined}\n*\n* @default left\n*/ /**\n* Vertical alignment. Can be one of `top`, `middle` and `bottom`.\n*\n* @name Highcharts.AlignObject#verticalAlign\n* @type {Highcharts.VerticalAlignValue|undefined}\n*\n* @default top\n*/ /**\n* Horizontal pixel offset from alignment.\n*\n* @name Highcharts.AlignObject#x\n* @type {number|undefined}\n*\n* @default 0\n*/ /**\n* Vertical pixel offset from alignment.\n*\n* @name Highcharts.AlignObject#y\n* @type {number|undefined}\n*\n* @default 0\n*/ /**\n* Use the `transform` attribute with translateX and translateY custom\n* attributes to align this elements rather than `x` and `y` attributes.\n*\n* @name Highcharts.AlignObject#alignByTranslate\n* @type {boolean|undefined}\n*\n* @default false\n*/\n/**\n * Bounding box of an element.\n *\n * @interface Highcharts.BBoxObject\n * @extends Highcharts.PositionObject\n */ /**\n* Height of the bounding box.\n*\n* @name Highcharts.BBoxObject#height\n* @type {number}\n*/ /**\n* Width of the bounding box.\n*\n* @name Highcharts.BBoxObject#width\n* @type {number}\n*/ /**\n* Horizontal position of the bounding box.\n*\n* @name Highcharts.BBoxObject#x\n* @type {number}\n*/ /**\n* Vertical position of the bounding box.\n*\n* @name Highcharts.BBoxObject#y\n* @type {number}\n*/\n/**\n * An object of key-value pairs for SVG attributes. Attributes in Highcharts\n * elements for the most parts correspond to SVG, but some are specific to\n * Highcharts, like `zIndex`, `rotation`, `rotationOriginX`,\n * `rotationOriginY`, `translateX`, `translateY`, `scaleX` and `scaleY`. SVG\n * attributes containing a hyphen are _not_ camel-cased, they should be\n * quoted to preserve the hyphen.\n *\n * @example\n * {\n *     'stroke': '#ff0000', // basic\n *     'stroke-width': 2, // hyphenated\n *     'rotation': 45 // custom\n *     'd': ['M', 10, 10, 'L', 30, 30, 'z'] // path definition, note format\n * }\n *\n * @interface Highcharts.SVGAttributes\n */ /**\n* @name Highcharts.SVGAttributes#[key:string]\n* @type {*}\n*/ /**\n* @name Highcharts.SVGAttributes#d\n* @type {string|Highcharts.SVGPathArray|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#dx\n* @type {number|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#dy\n* @type {number|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#fill\n* @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#inverted\n* @type {boolean|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#matrix\n* @type {Array<number>|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#rotation\n* @type {number|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#rotationOriginX\n* @type {number|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#rotationOriginY\n* @type {number|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#scaleX\n* @type {number|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#scaleY\n* @type {number|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#stroke\n* @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#style\n* @type {string|Highcharts.CSSObject|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#translateX\n* @type {number|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#translateY\n* @type {number|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#zIndex\n* @type {number|undefined}\n*/\n/**\n * An SVG DOM element. The type is a reference to the regular SVGElement in the\n * global scope.\n *\n * @typedef {globals.GlobalSVGElement} Highcharts.SVGDOMElement\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SVGElement\n */\n/**\n * The vertical alignment of an element.\n *\n * @typedef {\"bottom\"|\"middle\"|\"top\"} Highcharts.VerticalAlignValue\n */\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Renderer/SVG/SVGLabel.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 * */\nvar __extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\nvar SVGLabel_defined = Core_Utilities.defined, SVGLabel_extend = Core_Utilities.extend, SVGLabel_getAlignFactor = Core_Utilities.getAlignFactor, SVGLabel_isNumber = Core_Utilities.isNumber, SVGLabel_merge = Core_Utilities.merge, SVGLabel_pick = Core_Utilities.pick, SVGLabel_removeEvent = Core_Utilities.removeEvent;\n/* *\n *\n *  Class\n *\n * */\n/**\n * SVG label to render text.\n * @private\n * @class\n * @name Highcharts.SVGLabel\n * @augments Highcharts.SVGElement\n */\nvar SVGLabel = /** @class */ (function (_super) {\n    __extends(SVGLabel, _super);\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    function SVGLabel(renderer, str, x, y, shape, anchorX, anchorY, useHTML, baseline, className) {\n        var _this = _super.call(this,\n            renderer, 'g') || this;\n        _this.paddingLeftSetter = _this.paddingSetter;\n        _this.paddingRightSetter = _this.paddingSetter;\n        _this.doUpdate = false;\n        _this.textStr = str;\n        _this.x = x;\n        _this.y = y;\n        _this.anchorX = anchorX;\n        _this.anchorY = anchorY;\n        _this.baseline = baseline;\n        _this.className = className;\n        _this.addClass(className === 'button' ?\n            'highcharts-no-tooltip' :\n            'highcharts-label');\n        if (className) {\n            _this.addClass('highcharts-' + className);\n        }\n        // Create the text element. An undefined text content prevents redundant\n        // box calculation (#16121)\n        _this.text = renderer.text(void 0, 0, 0, useHTML).attr({ zIndex: 1 });\n        // Validate the shape argument\n        var hasBGImage;\n        if (typeof shape === 'string') {\n            hasBGImage = /^url\\((.*?)\\)$/.test(shape);\n            if (hasBGImage || _this.renderer.symbols[shape]) {\n                _this.symbolKey = shape;\n            }\n        }\n        _this.bBox = SVGLabel.emptyBBox;\n        _this.padding = 3;\n        _this.baselineOffset = 0;\n        _this.needsBox = renderer.styledMode || hasBGImage;\n        _this.deferredAttr = {};\n        _this.alignFactor = 0;\n        return _this;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    SVGLabel.prototype.alignSetter = function (value) {\n        var alignFactor = SVGLabel_getAlignFactor(value);\n        this.textAlign = value;\n        if (alignFactor !== this.alignFactor) {\n            this.alignFactor = alignFactor;\n            // Bounding box exists, means we're dynamically changing\n            if (this.bBox && SVGLabel_isNumber(this.xSetting)) {\n                this.attr({ x: this.xSetting }); // #5134\n            }\n        }\n    };\n    SVGLabel.prototype.anchorXSetter = function (value, key) {\n        this.anchorX = value;\n        this.boxAttr(key, Math.round(value) - this.getCrispAdjust() - this.xSetting);\n    };\n    SVGLabel.prototype.anchorYSetter = function (value, key) {\n        this.anchorY = value;\n        this.boxAttr(key, value - this.ySetting);\n    };\n    /*\n     * Set a box attribute, or defer it if the box is not yet created\n     */\n    SVGLabel.prototype.boxAttr = function (key, value) {\n        if (this.box) {\n            this.box.attr(key, value);\n        }\n        else {\n            this.deferredAttr[key] = value;\n        }\n    };\n    /*\n     * Pick up some properties and apply them to the text instead of the\n     * wrapper.\n     */\n    SVGLabel.prototype.css = function (styles) {\n        if (styles) {\n            var textStyles_1 = {};\n            // Create a copy to avoid altering the original object\n            // (#537)\n            styles = SVGLabel_merge(styles);\n            SVGLabel.textProps.forEach(function (prop) {\n                if (typeof styles[prop] !== 'undefined') {\n                    textStyles_1[prop] = styles[prop];\n                    delete styles[prop];\n                }\n            });\n            this.text.css(textStyles_1);\n            // Update existing text, box (#9400, #12163, #18212)\n            if ('fontSize' in textStyles_1 || 'fontWeight' in textStyles_1) {\n                this.updateTextPadding();\n            }\n            else if ('width' in textStyles_1 || 'textOverflow' in textStyles_1) {\n                this.updateBoxSize();\n            }\n        }\n        return SVG_SVGElement.prototype.css.call(this, styles);\n    };\n    /*\n     * Destroy and release memory.\n     */\n    SVGLabel.prototype.destroy = function () {\n        // Added by button implementation\n        SVGLabel_removeEvent(this.element, 'mouseenter');\n        SVGLabel_removeEvent(this.element, 'mouseleave');\n        if (this.text) {\n            this.text.destroy();\n        }\n        if (this.box) {\n            this.box = this.box.destroy();\n        }\n        // Call base implementation to destroy the rest\n        SVG_SVGElement.prototype.destroy.call(this);\n        return void 0;\n    };\n    SVGLabel.prototype.fillSetter = function (value, key) {\n        if (value) {\n            this.needsBox = true;\n        }\n        // For animation getter (#6776)\n        this.fill = value;\n        this.boxAttr(key, value);\n    };\n    /*\n     * Return the bounding box of the box, not the group.\n     */\n    SVGLabel.prototype.getBBox = function (reload, rot) {\n        // If we have a text string and the DOM bBox was 0, it typically means\n        // that the label was first rendered hidden, so we need to update the\n        // bBox (#15246)\n        if (this.textStr && this.bBox.width === 0 && this.bBox.height === 0) {\n            this.updateBoxSize();\n        }\n        var _a = this,\n            padding = _a.padding,\n            _b = _a.height,\n            height = _b === void 0 ? 0 : _b,\n            _c = _a.translateX,\n            translateX = _c === void 0 ? 0 : _c,\n            _d = _a.translateY,\n            translateY = _d === void 0 ? 0 : _d,\n            _e = _a.width,\n            width = _e === void 0 ? 0 : _e,\n            paddingLeft = SVGLabel_pick(this.paddingLeft,\n            padding),\n            rotation = rot !== null && rot !== void 0 ? rot : (this.rotation || 0);\n        var bBox = {\n                width: width,\n                height: height,\n                x: translateX + this.bBox.x - paddingLeft,\n                y: translateY + this.bBox.y - padding + this.baselineOffset\n            };\n        if (rotation) {\n            bBox = this.getRotatedBox(bBox, rotation);\n        }\n        return bBox;\n    };\n    SVGLabel.prototype.getCrispAdjust = function () {\n        return (this.renderer.styledMode && this.box ?\n            this.box.strokeWidth() :\n            (this['stroke-width'] ?\n                parseInt(this['stroke-width'], 10) :\n                0)) % 2 / 2;\n    };\n    SVGLabel.prototype.heightSetter = function (value) {\n        this.heightSetting = value;\n        this.doUpdate = true;\n    };\n    /**\n     * This method is executed in the end of `attr()`, after setting all\n     * attributes in the hash. In can be used to efficiently consolidate\n     * multiple attributes in one SVG property -- e.g., translate, rotate and\n     * scale are merged in one \"transform\" attribute in the SVG node.\n     * Also updating height or width should trigger update of the box size.\n     *\n     * @private\n     * @function Highcharts.SVGLabel#afterSetters\n     */\n    SVGLabel.prototype.afterSetters = function () {\n        _super.prototype.afterSetters.call(this);\n        if (this.doUpdate) {\n            this.updateBoxSize();\n            this.doUpdate = false;\n        }\n    };\n    /*\n     * After the text element is added, get the desired size of the border\n     * box and add it before the text in the DOM.\n     */\n    SVGLabel.prototype.onAdd = function () {\n        this.text.add(this);\n        this.attr({\n            // Alignment is available now  (#3295, 0 not rendered if given\n            // as a value)\n            text: SVGLabel_pick(this.textStr, ''),\n            x: this.x || 0,\n            y: this.y || 0\n        });\n        if (this.box && SVGLabel_defined(this.anchorX)) {\n            this.attr({\n                anchorX: this.anchorX,\n                anchorY: this.anchorY\n            });\n        }\n    };\n    SVGLabel.prototype.paddingSetter = function (value, key) {\n        if (!SVGLabel_isNumber(value)) {\n            this[key] = void 0;\n        }\n        else if (value !== this[key]) {\n            this[key] = value;\n            this.updateTextPadding();\n        }\n    };\n    SVGLabel.prototype.rSetter = function (value, key) {\n        this.boxAttr(key, value);\n    };\n    SVGLabel.prototype.strokeSetter = function (value, key) {\n        // For animation getter (#6776)\n        this.stroke = value;\n        this.boxAttr(key, value);\n    };\n    SVGLabel.prototype['stroke-widthSetter'] = function (value, key) {\n        if (value) {\n            this.needsBox = true;\n        }\n        this['stroke-width'] = value;\n        this.boxAttr(key, value);\n    };\n    SVGLabel.prototype['text-alignSetter'] = function (value) {\n        // The text-align variety is for the pre-animation getter. The code\n        // should be unified to either textAlign or text-align.\n        this.textAlign = this['text-align'] = value;\n        this.updateTextPadding();\n    };\n    SVGLabel.prototype.textSetter = function (text) {\n        if (typeof text !== 'undefined') {\n            // Must use .attr to ensure transforms are done (#10009)\n            this.text.attr({ text: text });\n        }\n        this.updateTextPadding();\n        this.reAlign();\n    };\n    /*\n     * This function runs after the label is added to the DOM (when the bounding\n     * box is available), and after the text of the label is updated to detect\n     * the new bounding box and reflect it in the border box.\n     */\n    SVGLabel.prototype.updateBoxSize = function () {\n        var text = this.text,\n            attribs = {},\n            padding = this.padding, \n            // #12165 error when width is null (auto)\n            // #12163 when fontweight: bold, recalculate bBox without cache\n            // #3295 && 3514 box failure when string equals 0\n            bBox = this.bBox = (((!SVGLabel_isNumber(this.widthSetting) ||\n                !SVGLabel_isNumber(this.heightSetting) ||\n                this.textAlign) && SVGLabel_defined(text.textStr)) ?\n                text.getBBox(void 0, 0) :\n                SVGLabel.emptyBBox);\n        var crispAdjust;\n        this.width = this.getPaddedWidth();\n        this.height = (this.heightSetting || bBox.height || 0) + 2 * padding;\n        var metrics = this.renderer.fontMetrics(text);\n        // Update the label-scoped y offset. Math.min because of inline\n        // style (#9400)\n        this.baselineOffset = padding + Math.min(\n        // When applicable, use the font size of the first line (#15707)\n        (this.text.firstLineMetrics || metrics).b, \n        // When the height is 0, there is no bBox, so go with the font\n        // metrics. Highmaps CSS demos.\n        bBox.height || Infinity);\n        // #15491: Vertical centering\n        if (this.heightSetting) {\n            this.baselineOffset += (this.heightSetting - metrics.h) / 2;\n        }\n        if (this.needsBox && !text.textPath) {\n            // Create the border box if it is not already present\n            if (!this.box) {\n                // Symbol definition exists (#5324)\n                var box = this.box = this.symbolKey ?\n                        this.renderer.symbol(this.symbolKey) :\n                        this.renderer.rect();\n                box.addClass(// Don't use label className for buttons\n                (this.className === 'button' ?\n                    '' : 'highcharts-label-box') +\n                    (this.className ?\n                        ' highcharts-' + this.className + '-box' : ''));\n                box.add(this);\n            }\n            crispAdjust = this.getCrispAdjust();\n            attribs.x = crispAdjust;\n            attribs.y = ((this.baseline ? -this.baselineOffset : 0) + crispAdjust);\n            // Apply the box attributes\n            attribs.width = Math.round(this.width);\n            attribs.height = Math.round(this.height);\n            this.box.attr(SVGLabel_extend(attribs, this.deferredAttr));\n            this.deferredAttr = {};\n        }\n    };\n    /*\n     * This function runs after setting text or padding, but only if padding\n     * is changed.\n     */\n    SVGLabel.prototype.updateTextPadding = function () {\n        var _a,\n            _b;\n        var text = this.text,\n            textAlign = text.styles.textAlign || this.textAlign;\n        if (!text.textPath) {\n            this.updateBoxSize();\n            // Determine y based on the baseline\n            var textY = this.baseline ? 0 : this.baselineOffset,\n                textX = ((_a = this.paddingLeft) !== null && _a !== void 0 ? _a : this.padding) +\n                    // Compensate for alignment\n                    SVGLabel_getAlignFactor(textAlign) * ((_b = this.widthSetting) !== null && _b !== void 0 ? _b : this.bBox.width);\n            // Update if anything changed\n            if (textX !== text.x || textY !== text.y) {\n                text.attr({\n                    align: textAlign,\n                    x: textX\n                });\n                if (typeof textY !== 'undefined') {\n                    text.attr('y', textY);\n                }\n            }\n            // Record current values\n            text.x = textX;\n            text.y = textY;\n        }\n    };\n    SVGLabel.prototype.widthSetter = function (value) {\n        // `width:auto` => null\n        this.widthSetting = SVGLabel_isNumber(value) ? value : void 0;\n        this.doUpdate = true;\n    };\n    SVGLabel.prototype.getPaddedWidth = function () {\n        var padding = this.padding;\n        var paddingLeft = SVGLabel_pick(this.paddingLeft,\n            padding);\n        var paddingRight = SVGLabel_pick(this.paddingRight,\n            padding);\n        return ((this.widthSetting || this.bBox.width || 0) +\n            paddingLeft +\n            paddingRight);\n    };\n    SVGLabel.prototype.xSetter = function (value) {\n        this.x = value; // For animation getter\n        if (this.alignFactor) {\n            value -= this.alignFactor * this.getPaddedWidth();\n            // Force animation even when setting to the same value (#7898)\n            this['forceAnimate:x'] = true;\n        }\n        this.xSetting = Math.round(value);\n        this.attr('translateX', this.xSetting);\n    };\n    SVGLabel.prototype.ySetter = function (value) {\n        this.ySetting = this.y = Math.round(value);\n        this.attr('translateY', this.ySetting);\n    };\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    SVGLabel.emptyBBox = {\n        width: 0,\n        height: 0,\n        x: 0,\n        y: 0\n    };\n    /**\n     * For labels, these CSS properties are applied to the `text` node directly.\n     *\n     * @private\n     * @name Highcharts.SVGLabel#textProps\n     * @type {Array<string>}\n     */\n    SVGLabel.textProps = [\n        'color', 'direction', 'fontFamily', 'fontSize', 'fontStyle',\n        'fontWeight', 'lineClamp', 'lineHeight', 'textAlign', 'textDecoration',\n        'textOutline', 'textOverflow', 'whiteSpace', 'width'\n    ];\n    return SVGLabel;\n}(SVG_SVGElement));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var SVG_SVGLabel = (SVGLabel);\n\n;// ./code/es5/es-modules/Core/Renderer/SVG/Symbols.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar Symbols_defined = Core_Utilities.defined, Symbols_isNumber = Core_Utilities.isNumber, Symbols_pick = Core_Utilities.pick;\n/* *\n *\n *  Functions\n *\n * */\n/* eslint-disable require-jsdoc, valid-jsdoc */\n/**\n *\n */\nfunction arc(cx, cy, w, h, options) {\n    var arc = [];\n    if (options) {\n        var start = options.start || 0,\n            rx = Symbols_pick(options.r,\n            w),\n            ry = Symbols_pick(options.r,\n            h || w), \n            // Subtract a small number to prevent cos and sin of start and end\n            // from becoming equal on 360 arcs (#1561). The size of the circle\n            // affects the constant, therefore the division by `rx`. If the\n            // proximity is too small, the arc disappears. If it is too great, a\n            // gap appears. This can be seen in the animation of the official\n            // bubble demo (#20586).\n            proximity = 0.0002 / (options.borderRadius ? 1 : Math.max(rx, 1)),\n            fullCircle = (Math.abs((options.end || 0) - start - 2 * Math.PI) <\n                proximity),\n            end = (options.end || 0) - (fullCircle ? proximity : 0),\n            innerRadius = options.innerR,\n            open_1 = Symbols_pick(options.open,\n            fullCircle),\n            cosStart = Math.cos(start),\n            sinStart = Math.sin(start),\n            cosEnd = Math.cos(end),\n            sinEnd = Math.sin(end), \n            // Proximity takes care of rounding errors around PI (#6971)\n            longArc = Symbols_pick(options.longArc,\n            end - start - Math.PI < proximity ? 0 : 1);\n        var arcSegment = [\n                'A', // ArcTo\n                rx, // X radius\n                ry, // Y radius\n                0, // Slanting\n                longArc, // Long or short arc\n                Symbols_pick(options.clockwise, 1), // Clockwise\n                cx + rx * cosEnd,\n                cy + ry * sinEnd\n            ];\n        arcSegment.params = { start: start, end: end, cx: cx, cy: cy }; // Memo for border radius\n        arc.push([\n            'M',\n            cx + rx * cosStart,\n            cy + ry * sinStart\n        ], arcSegment);\n        if (Symbols_defined(innerRadius)) {\n            arcSegment = [\n                'A', // ArcTo\n                innerRadius, // X radius\n                innerRadius, // Y radius\n                0, // Slanting\n                longArc, // Long or short arc\n                // Clockwise - opposite to the outer arc clockwise\n                Symbols_defined(options.clockwise) ? 1 - options.clockwise : 0,\n                cx + innerRadius * cosStart,\n                cy + innerRadius * sinStart\n            ];\n            // Memo for border radius\n            arcSegment.params = {\n                start: end,\n                end: start,\n                cx: cx,\n                cy: cy\n            };\n            arc.push(open_1 ?\n                [\n                    'M',\n                    cx + innerRadius * cosEnd,\n                    cy + innerRadius * sinEnd\n                ] : [\n                'L',\n                cx + innerRadius * cosEnd,\n                cy + innerRadius * sinEnd\n            ], arcSegment);\n        }\n        if (!open_1) {\n            arc.push(['Z']);\n        }\n    }\n    return arc;\n}\n/**\n * Callout shape used for default tooltips.\n */\nfunction callout(x, y, w, h, options) {\n    var arrowLength = 6,\n        halfDistance = 6,\n        r = Math.min((options && options.r) || 0,\n        w,\n        h),\n        safeDistance = r + halfDistance,\n        anchorX = options && options.anchorX,\n        anchorY = options && options.anchorY || 0;\n    var path = roundedRect(x,\n        y,\n        w,\n        h, { r: r });\n    if (!Symbols_isNumber(anchorX)) {\n        return path;\n    }\n    // Do not render a connector, if anchor starts inside the label\n    if (anchorX < w && anchorX > 0 && anchorY < h && anchorY > 0) {\n        return path;\n    }\n    // Anchor on right side\n    if (x + anchorX > w - safeDistance) {\n        // Chevron\n        if (anchorY > y + safeDistance &&\n            anchorY < y + h - safeDistance) {\n            path.splice(3, 1, ['L', x + w, anchorY - halfDistance], ['L', x + w + arrowLength, anchorY], ['L', x + w, anchorY + halfDistance], ['L', x + w, y + h - r]);\n            // Simple connector\n        }\n        else {\n            if (anchorX < w) { // Corner connector\n                var isTopCorner = anchorY < y + safeDistance,\n                    cornerY = isTopCorner ? y : y + h,\n                    sliceStart = isTopCorner ? 2 : 5;\n                path.splice(sliceStart, 0, ['L', anchorX, anchorY], ['L', x + w - r, cornerY]);\n            }\n            else { // Side connector\n                path.splice(3, 1, ['L', x + w, h / 2], ['L', anchorX, anchorY], ['L', x + w, h / 2], ['L', x + w, y + h - r]);\n            }\n        }\n        // Anchor on left side\n    }\n    else if (x + anchorX < safeDistance) {\n        // Chevron\n        if (anchorY > y + safeDistance &&\n            anchorY < y + h - safeDistance) {\n            path.splice(7, 1, ['L', x, anchorY + halfDistance], ['L', x - arrowLength, anchorY], ['L', x, anchorY - halfDistance], ['L', x, y + r]);\n            // Simple connector\n        }\n        else {\n            if (anchorX > 0) { // Corner connector\n                var isTopCorner = anchorY < y + safeDistance,\n                    cornerY = isTopCorner ? y : y + h,\n                    sliceStart = isTopCorner ? 1 : 6;\n                path.splice(sliceStart, 0, ['L', anchorX, anchorY], ['L', x + r, cornerY]);\n            }\n            else { // Side connector\n                path.splice(7, 1, ['L', x, h / 2], ['L', anchorX, anchorY], ['L', x, h / 2], ['L', x, y + r]);\n            }\n        }\n    }\n    else if ( // Replace bottom\n    anchorY > h &&\n        anchorX < w - safeDistance) {\n        path.splice(5, 1, ['L', anchorX + halfDistance, y + h], ['L', anchorX, y + h + arrowLength], ['L', anchorX - halfDistance, y + h], ['L', x + r, y + h]);\n    }\n    else if ( // Replace top\n    anchorY < 0 &&\n        anchorX > safeDistance) {\n        path.splice(1, 1, ['L', anchorX - halfDistance, y], ['L', anchorX, y - arrowLength], ['L', anchorX + halfDistance, y], ['L', w - r, y]);\n    }\n    return path;\n}\n/**\n *\n */\nfunction circle(x, y, w, h) {\n    // Return a full arc\n    return arc(x + w / 2, y + h / 2, w / 2, h / 2, {\n        start: Math.PI * 0.5,\n        end: Math.PI * 2.5,\n        open: false\n    });\n}\n/**\n *\n */\nfunction diamond(x, y, w, h) {\n    return [\n        ['M', x + w / 2, y],\n        ['L', x + w, y + h / 2],\n        ['L', x + w / 2, y + h],\n        ['L', x, y + h / 2],\n        ['Z']\n    ];\n}\n// #15291\n/**\n *\n */\nfunction rect(x, y, w, h, options) {\n    if (options && options.r) {\n        return roundedRect(x, y, w, h, options);\n    }\n    return [\n        ['M', x, y],\n        ['L', x + w, y],\n        ['L', x + w, y + h],\n        ['L', x, y + h],\n        ['Z']\n    ];\n}\n/**\n *\n */\nfunction roundedRect(x, y, w, h, options) {\n    var r = (options === null || options === void 0 ? void 0 : options.r) || 0;\n    return [\n        ['M', x + r, y],\n        ['L', x + w - r, y], // Top side\n        ['A', r, r, 0, 0, 1, x + w, y + r], // Top-right corner\n        ['L', x + w, y + h - r], // Right side\n        ['A', r, r, 0, 0, 1, x + w - r, y + h], // Bottom-right corner\n        ['L', x + r, y + h], // Bottom side\n        ['A', r, r, 0, 0, 1, x, y + h - r], // Bottom-left corner\n        ['L', x, y + r], // Left side\n        ['A', r, r, 0, 0, 1, x + r, y],\n        ['Z'] // Top-left corner\n    ];\n}\n/**\n *\n */\nfunction triangle(x, y, w, h) {\n    return [\n        ['M', x + w / 2, y],\n        ['L', x + w, y + h],\n        ['L', x, y + h],\n        ['Z']\n    ];\n}\n/**\n *\n */\nfunction triangleDown(x, y, w, h) {\n    return [\n        ['M', x, y],\n        ['L', x + w, y],\n        ['L', x + w / 2, y + h],\n        ['Z']\n    ];\n}\nvar Symbols = {\n    arc: arc,\n    callout: callout,\n    circle: circle,\n    diamond: diamond,\n    rect: rect,\n    roundedRect: roundedRect,\n    square: rect,\n    triangle: triangle,\n    'triangle-down': triangleDown\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var SVG_Symbols = (Symbols);\n\n;// ./code/es5/es-modules/Core/Renderer/SVG/TextBuilder.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar TextBuilder_doc = Core_Globals.doc, TextBuilder_SVG_NS = Core_Globals.SVG_NS, TextBuilder_win = Core_Globals.win;\n\nvar TextBuilder_attr = Core_Utilities.attr, TextBuilder_extend = Core_Utilities.extend, TextBuilder_fireEvent = Core_Utilities.fireEvent, TextBuilder_isString = Core_Utilities.isString, TextBuilder_objectEach = Core_Utilities.objectEach, TextBuilder_pick = Core_Utilities.pick;\n// Function used to test string length including an ellipsis\nvar stringWithEllipsis = function (text, currentIndex) {\n    return text.substring(0, currentIndex) + '\\u2026';\n};\n/* *\n *\n *  Class\n *\n * */\n/**\n * SVG Text Builder\n * @private\n * @class\n * @name Highcharts.TextBuilder\n */\nvar TextBuilder = /** @class */ (function () {\n    function TextBuilder(svgElement) {\n        var textStyles = svgElement.styles;\n        this.renderer = svgElement.renderer;\n        this.svgElement = svgElement;\n        this.width = svgElement.textWidth;\n        this.textLineHeight = textStyles && textStyles.lineHeight;\n        this.textOutline = textStyles && textStyles.textOutline;\n        this.ellipsis = Boolean(textStyles && textStyles.textOverflow === 'ellipsis');\n        this.lineClamp = textStyles === null || textStyles === void 0 ? void 0 : textStyles.lineClamp;\n        this.noWrap = Boolean(textStyles && textStyles.whiteSpace === 'nowrap');\n    }\n    /**\n     * Build an SVG representation of the pseudo HTML given in the object's\n     * svgElement.\n     *\n     * @private\n     *\n     * @return {void}.\n     */\n    TextBuilder.prototype.buildSVG = function () {\n        var wrapper = this.svgElement, textNode = wrapper.element, renderer = wrapper.renderer, textStr = TextBuilder_pick(wrapper.textStr, '').toString(), hasMarkup = textStr.indexOf('<') !== -1, childNodes = textNode.childNodes, tempParent = !wrapper.added && renderer.box, regexMatchBreaks = /<br.*?>/g, \n            // The buildText code is quite heavy, so if we're not changing\n            // something that affects the text, skip it (#6113).\n            textCache = [\n                textStr,\n                this.ellipsis,\n                this.noWrap,\n                this.textLineHeight,\n                this.textOutline,\n                wrapper.getStyle('font-size'),\n                wrapper.styles.lineClamp,\n                this.width\n            ].join(',');\n        if (textCache === wrapper.textCache) {\n            return;\n        }\n        wrapper.textCache = textCache;\n        delete wrapper.actualWidth;\n        // Remove old text\n        for (var i = childNodes.length; i--;) {\n            textNode.removeChild(childNodes[i]);\n        }\n        // Simple strings, add text directly and return\n        if (!hasMarkup &&\n            !this.ellipsis &&\n            !this.width &&\n            !wrapper.textPath &&\n            (textStr.indexOf(' ') === -1 ||\n                (this.noWrap && !regexMatchBreaks.test(textStr)))) {\n            textNode.appendChild(TextBuilder_doc.createTextNode(this.unescapeEntities(textStr)));\n            // Complex strings, add more logic\n        }\n        else if (textStr !== '') {\n            if (tempParent) {\n                // Attach it to the DOM to read offset width and font size\n                tempParent.appendChild(textNode);\n            }\n            // Step 1. Parse the markup safely and directly into a tree\n            // structure.\n            var ast = new HTML_AST(textStr);\n            // Step 2. Do as many as we can of the modifications to the tree\n            // structure before it is added to the DOM\n            this.modifyTree(ast.nodes);\n            ast.addToDOM(textNode);\n            // Step 3. Some modifications can't be done until the structure is\n            // in the DOM, because we need to read computed metrics.\n            this.modifyDOM();\n            // Add title if an ellipsis was added\n            if (this.ellipsis &&\n                (textNode.textContent || '').indexOf('\\u2026') !== -1) {\n                wrapper.attr('title', this.unescapeEntities(wrapper.textStr || '', ['&lt;', '&gt;']) // #7179\n                );\n            }\n            if (tempParent) {\n                tempParent.removeChild(textNode);\n            }\n        }\n        // Apply the text outline\n        if (TextBuilder_isString(this.textOutline) && wrapper.applyTextOutline) {\n            wrapper.applyTextOutline(this.textOutline);\n        }\n    };\n    /**\n     * Modify the DOM of the generated SVG structure. This function only does\n     * operations that cannot be done until the elements are attached to the\n     * DOM, like doing layout based on rendered metrics of the added elements.\n     *\n     * @private\n     *\n     */\n    TextBuilder.prototype.modifyDOM = function () {\n        var _this = this;\n        var wrapper = this.svgElement;\n        var x = TextBuilder_attr(wrapper.element, 'x');\n        wrapper.firstLineMetrics = void 0;\n        // Remove empty tspans (including breaks) from the beginning because\n        // SVG's getBBox doesn't count empty lines. The use case is tooltip\n        // where the header is empty. By doing this in the DOM rather than in\n        // the AST, we can inspect the textContent directly and don't have to\n        // recurse down to look for valid content.\n        var firstChild;\n        while ((firstChild = wrapper.element.firstChild)) {\n            if (/^[\\s\\u200B]*$/.test(firstChild.textContent || ' ')) {\n                wrapper.element.removeChild(firstChild);\n            }\n            else {\n                break;\n            }\n        }\n        // Modify hard line breaks by applying the rendered line height\n        [].forEach.call(wrapper.element.querySelectorAll('tspan.highcharts-br'), function (br, i) {\n            if (br.nextSibling && br.previousSibling) { // #5261\n                if (i === 0 && br.previousSibling.nodeType === 1) {\n                    wrapper.firstLineMetrics = wrapper.renderer\n                        .fontMetrics(br.previousSibling);\n                }\n                TextBuilder_attr(br, {\n                    // Since the break is inserted in front of the next\n                    // line, we need to use the next sibling for the line\n                    // height\n                    dy: _this.getLineHeight(br.nextSibling),\n                    x: x\n                });\n            }\n        });\n        // Constrain the line width, either by ellipsis or wrapping\n        var width = this.width || 0;\n        if (!width) {\n            return;\n        }\n        // Insert soft line breaks into each text node\n        var modifyTextNode = function (textNode,\n            parentElement) {\n                var _a;\n            var text = textNode.textContent || '';\n            var words = text\n                    .replace(/([^\\^])-/g, '$1- ') // Split on hyphens\n                    // .trim()\n                    .split(' '); // #1273\n                var hasWhiteSpace = !_this.noWrap && (words.length > 1 || wrapper.element.childNodes.length > 1);\n            var dy = _this.getLineHeight(parentElement),\n                ellipsisWidth = Math.max(0, \n                // Subtract the font face to make room for\n                // the ellipsis itself\n                width - 0.8 * dy);\n            var lineNo = 0;\n            var startAt = wrapper.actualWidth;\n            if (hasWhiteSpace) {\n                var lines = [];\n                // Remove preceding siblings in order to make the text length\n                // calculation correct in the truncate function\n                var precedingSiblings = [];\n                while (parentElement.firstChild &&\n                    parentElement.firstChild !== textNode) {\n                    precedingSiblings.push(parentElement.firstChild);\n                    parentElement.removeChild(parentElement.firstChild);\n                }\n                while (words.length) {\n                    // Apply the previous line\n                    if (words.length && !_this.noWrap && lineNo > 0) {\n                        lines.push(textNode.textContent || '');\n                        textNode.textContent = words.join(' ')\n                            .replace(/- /g, '-');\n                    }\n                    // For each line, truncate the remaining\n                    // words into the line length.\n                    _this.truncate(textNode, void 0, words, lineNo === 0 ? (startAt || 0) : 0, width, ellipsisWidth, \n                    // Build the text to test for\n                    function (t, currentIndex) {\n                        return words\n                            .slice(0, currentIndex)\n                            .join(' ')\n                            .replace(/- /g, '-');\n                    });\n                    startAt = wrapper.actualWidth;\n                    lineNo++;\n                    // Line clamp. Break out after n lines and append an\n                    // ellipsis regardless of the text length.\n                    if (_this.lineClamp && lineNo >= _this.lineClamp) {\n                        // Only if there are remaining words that should have\n                        // been rendered.\n                        if (words.length) {\n                            _this.truncate(textNode, textNode.textContent || '', void 0, 0, \n                            // Target width\n                            width, ellipsisWidth, stringWithEllipsis);\n                            textNode.textContent = ((_a = textNode.textContent) === null || _a === void 0 ? void 0 : _a.replace('\\u2026', '')) + '\\u2026';\n                        }\n                        break;\n                    }\n                }\n                // Reinsert the preceding child nodes\n                precedingSiblings.forEach(function (childNode) {\n                    parentElement.insertBefore(childNode, textNode);\n                });\n                // Insert the previous lines before the original text node\n                lines.forEach(function (line) {\n                    // Insert the line\n                    parentElement.insertBefore(TextBuilder_doc.createTextNode(line), textNode);\n                    // Insert a break\n                    var br = TextBuilder_doc.createElementNS(TextBuilder_SVG_NS, 'tspan');\n                    br.textContent = '\\u200B'; // Zero-width space\n                    TextBuilder_attr(br, { dy: dy, x: x });\n                    parentElement.insertBefore(br, textNode);\n                });\n            }\n            else if (_this.ellipsis) {\n                if (text) {\n                    _this.truncate(textNode, text, void 0, 0, \n                    // Target width\n                    width, ellipsisWidth, stringWithEllipsis);\n                }\n            }\n        };\n        // Recurse down the DOM tree and handle line breaks for each text node\n        var modifyChildren = (function (node) {\n                var childNodes = [].slice.call(node.childNodes);\n            childNodes.forEach(function (childNode) {\n                if (childNode.nodeType === TextBuilder_win.Node.TEXT_NODE) {\n                    modifyTextNode(childNode, node);\n                }\n                else {\n                    // Reset word-wrap width readings after hard breaks\n                    if (childNode.className.baseVal\n                        .indexOf('highcharts-br') !== -1) {\n                        wrapper.actualWidth = 0;\n                    }\n                    // Recurse down to child node\n                    modifyChildren(childNode);\n                }\n            });\n        });\n        modifyChildren(wrapper.element);\n    };\n    /**\n     * Get the rendered line height of a <text>, <tspan> or pure text node.\n     * @private\n     * @param {DOMElementType|Text} node The node to check for\n     * @return {number} The rendered line height\n     */\n    TextBuilder.prototype.getLineHeight = function (node) {\n        // If the node is a text node, use its parent\n        var element = (node.nodeType === TextBuilder_win.Node.TEXT_NODE) ?\n                node.parentElement :\n                node;\n        return this.textLineHeight ?\n            parseInt(this.textLineHeight.toString(), 10) :\n            this.renderer.fontMetrics(element || this.svgElement.element).h;\n    };\n    /**\n     * Transform a pseudo HTML AST node tree into an SVG structure. We do as\n     * much heavy lifting as we can here, before doing the final processing in\n     * the modifyDOM function. The original data is mutated.\n     *\n     * @private\n     *\n     * @param {ASTNode[]} nodes The AST nodes\n     *\n     */\n    TextBuilder.prototype.modifyTree = function (nodes) {\n        var _this = this;\n        var modifyChild = function (node,\n            i) {\n                var _a = node.attributes,\n            attributes = _a === void 0 ? {} : _a,\n            children = node.children,\n            _b = node.style,\n            style = _b === void 0 ? {} : _b,\n            tagName = node.tagName,\n            styledMode = _this.renderer.styledMode;\n            // Apply styling to text tags\n            if (tagName === 'b' || tagName === 'strong') {\n                if (styledMode) {\n                    // eslint-disable-next-line dot-notation\n                    attributes['class'] = 'highcharts-strong';\n                }\n                else {\n                    style.fontWeight = 'bold';\n                }\n            }\n            else if (tagName === 'i' || tagName === 'em') {\n                if (styledMode) {\n                    // eslint-disable-next-line dot-notation\n                    attributes['class'] = 'highcharts-emphasized';\n                }\n                else {\n                    style.fontStyle = 'italic';\n                }\n            }\n            // Modify styling\n            if (style && style.color) {\n                style.fill = style.color;\n            }\n            // Handle breaks\n            if (tagName === 'br') {\n                attributes['class'] = 'highcharts-br'; // eslint-disable-line dot-notation\n                node.textContent = '\\u200B'; // Zero-width space\n                // Trim whitespace off the beginning of new lines\n                var nextNode = nodes[i + 1];\n                if (nextNode && nextNode.textContent) {\n                    nextNode.textContent =\n                        nextNode.textContent.replace(/^ +/gm, '');\n                }\n                // If an anchor has direct text node children, the text is unable to\n                // wrap because there is no `getSubStringLength` function on the\n                // element. Therefore we need to wrap the child text node or nodes\n                // in a tspan. #16173.\n            }\n            else if (tagName === 'a' &&\n                children &&\n                children.some(function (child) { return child.tagName === '#text'; })) {\n                node.children = [{ children: children, tagName: 'tspan' }];\n            }\n            if (tagName !== '#text' && tagName !== 'a') {\n                node.tagName = 'tspan';\n            }\n            TextBuilder_extend(node, { attributes: attributes, style: style });\n            // Recurse\n            if (children) {\n                children\n                    .filter(function (c) { return c.tagName !== '#text'; })\n                    .forEach(modifyChild);\n            }\n        };\n        nodes.forEach(modifyChild);\n        TextBuilder_fireEvent(this.svgElement, 'afterModifyTree', { nodes: nodes });\n    };\n    /*\n     * Truncate the text node contents to a given length. Used when the css\n     * width is set. If the `textOverflow` is `ellipsis`, the text is truncated\n     * character by character to the given length. If not, the text is\n     * word-wrapped line by line.\n     */\n    TextBuilder.prototype.truncate = function (textNode, text, words, startAt, width, ellipsisWidth, getString) {\n        var svgElement = this.svgElement;\n        var rotation = svgElement.rotation;\n        // Cache the lengths to avoid checking the same twice\n        var lengths = [];\n        // Word wrap cannot be truncated to shorter than one word, ellipsis\n        // text can be completely blank.\n        var minIndex = words && !startAt ? 1 : 0;\n        var maxIndex = (text || words || '').length;\n        var currentIndex = maxIndex;\n        var str;\n        var actualWidth;\n        if (!words) {\n            width = ellipsisWidth;\n        }\n        var getSubStringLength = function (charEnd,\n            concatenatedEnd) {\n                // `charEnd` is used when finding the character-by-character\n                // break for ellipsis, concatenatedEnd is used for word-by-word\n                // break for word wrapping.\n                var end = concatenatedEnd || charEnd;\n            var parentNode = textNode.parentNode;\n            if (parentNode && typeof lengths[end] === 'undefined') {\n                // Modern browsers\n                if (parentNode.getSubStringLength) {\n                    // Fails with DOM exception on unit-tests/legend/members\n                    // of unknown reason. Desired width is 0, text content\n                    // is \"5\" and end is 1.\n                    try {\n                        lengths[end] = startAt +\n                            parentNode.getSubStringLength(0, words ? end + 1 : end);\n                    }\n                    catch (e) {\n                        '';\n                    }\n                }\n            }\n            return lengths[end];\n        };\n        svgElement.rotation = 0; // Discard rotation when computing box\n        actualWidth = getSubStringLength(textNode.textContent.length);\n        if (startAt + actualWidth > width) {\n            // Do a binary search for the index where to truncate the text\n            while (minIndex <= maxIndex) {\n                currentIndex = Math.ceil((minIndex + maxIndex) / 2);\n                // When checking words for word-wrap, we need to build the\n                // string and measure the subStringLength at the concatenated\n                // word length.\n                if (words) {\n                    str = getString(words, currentIndex);\n                }\n                actualWidth = getSubStringLength(currentIndex, str && str.length - 1);\n                if (minIndex === maxIndex) {\n                    // Complete\n                    minIndex = maxIndex + 1;\n                }\n                else if (actualWidth > width) {\n                    // Too large. Set max index to current.\n                    maxIndex = currentIndex - 1;\n                }\n                else {\n                    // Within width. Set min index to current.\n                    minIndex = currentIndex;\n                }\n            }\n            // If max index was 0 it means the shortest possible text was also\n            // too large. For ellipsis that means only the ellipsis, while for\n            // word wrap it means the whole first word.\n            if (maxIndex === 0) {\n                // Remove ellipsis\n                textNode.textContent = '';\n                // If the new text length is one less than the original, we don't\n                // need the ellipsis\n            }\n            else if (!(text && maxIndex === text.length - 1)) {\n                textNode.textContent = str || getString(text || words, currentIndex);\n            }\n            // Add ellipsis on individual lines\n            if (this.ellipsis && actualWidth > width) {\n                this.truncate(textNode, textNode.textContent || '', void 0, 0, width, ellipsisWidth, stringWithEllipsis);\n            }\n        }\n        // When doing line wrapping, prepare for the next line by removing the\n        // items from this line.\n        if (words) {\n            words.splice(0, currentIndex);\n        }\n        svgElement.actualWidth = actualWidth;\n        svgElement.rotation = rotation; // Apply rotation again.\n    };\n    /*\n     * Un-escape HTML entities based on the public `renderer.escapes` list\n     *\n     * @private\n     *\n     * @param {string} inputStr The string to unescape\n     * @param {Array<string>} [except] Exceptions\n     *\n     * @return {string} The processed string\n     */\n    TextBuilder.prototype.unescapeEntities = function (inputStr, except) {\n        TextBuilder_objectEach(this.renderer.escapes, function (value, key) {\n            if (!except || except.indexOf(value) === -1) {\n                inputStr = inputStr.toString().replace(new RegExp(value, 'g'), key);\n            }\n        });\n        return inputStr;\n    };\n    return TextBuilder;\n}());\n/* harmony default export */ var SVG_TextBuilder = (TextBuilder);\n\n;// ./code/es5/es-modules/Core/Renderer/SVG/SVGRenderer.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar SVGRenderer_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\nvar SVGRenderer_defaultOptions = Defaults.defaultOptions;\n\n\nvar SVGRenderer_charts = Core_Globals.charts, SVGRenderer_deg2rad = Core_Globals.deg2rad, SVGRenderer_doc = Core_Globals.doc, SVGRenderer_isFirefox = Core_Globals.isFirefox, isMS = Core_Globals.isMS, isWebKit = Core_Globals.isWebKit, noop = Core_Globals.noop, SVGRenderer_SVG_NS = Core_Globals.SVG_NS, symbolSizes = Core_Globals.symbolSizes, SVGRenderer_win = Core_Globals.win;\n\n\n\n\n\n\nvar SVGRenderer_addEvent = Core_Utilities.addEvent, SVGRenderer_attr = Core_Utilities.attr, SVGRenderer_createElement = Core_Utilities.createElement, SVGRenderer_crisp = Core_Utilities.crisp, SVGRenderer_css = Core_Utilities.css, SVGRenderer_defined = Core_Utilities.defined, SVGRenderer_destroyObjectProperties = Core_Utilities.destroyObjectProperties, SVGRenderer_extend = Core_Utilities.extend, SVGRenderer_isArray = Core_Utilities.isArray, SVGRenderer_isNumber = Core_Utilities.isNumber, SVGRenderer_isObject = Core_Utilities.isObject, SVGRenderer_isString = Core_Utilities.isString, SVGRenderer_merge = Core_Utilities.merge, SVGRenderer_pick = Core_Utilities.pick, SVGRenderer_pInt = Core_Utilities.pInt, SVGRenderer_replaceNested = Core_Utilities.replaceNested, SVGRenderer_uniqueKey = Core_Utilities.uniqueKey;\n/* *\n *\n *  Variables\n *\n * */\nvar hasInternalReferenceBug;\n/* *\n *\n *  Class\n *\n * */\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/**\n * Allows direct access to the Highcharts rendering layer in order to draw\n * primitive shapes like circles, rectangles, paths or text directly on a chart,\n * or independent from any chart. The SVGRenderer represents a wrapper object\n * for SVG in modern browsers.\n *\n * An existing chart's renderer can be accessed through {@link Chart.renderer}.\n * The renderer can also be used completely decoupled from a chart.\n *\n * See [How to use the SVG Renderer](\n * https://www.highcharts.com/docs/advanced-chart-features/renderer) for a\n * comprehensive tutorial.\n *\n * @sample highcharts/members/renderer-on-chart\n *         Annotating a chart programmatically.\n * @sample highcharts/members/renderer-basic\n *         Independent SVG drawing.\n *\n * @example\n * // Use directly without a chart object.\n * let renderer = new Highcharts.Renderer(parentNode, 600, 400);\n *\n * @class\n * @name Highcharts.SVGRenderer\n *\n * @param {Highcharts.HTMLDOMElement} container\n *        Where to put the SVG in the web page.\n *\n * @param {number} width\n *        The width of the SVG.\n *\n * @param {number} height\n *        The height of the SVG.\n *\n * @param {Highcharts.CSSObject} [style]\n *        The box style, if not in styleMode\n *\n * @param {boolean} [forExport=false]\n *        Whether the rendered content is intended for export.\n *\n * @param {boolean} [allowHTML=true]\n *        Whether the renderer is allowed to include HTML text, which will be\n *        projected on top of the SVG.\n *\n * @param {boolean} [styledMode=false]\n *        Whether the renderer belongs to a chart that is in styled mode.\n *        If it does, it will avoid setting presentational attributes in\n *        some cases, but not when set explicitly through `.attr` and `.css`\n *        etc.\n */\nvar SVGRenderer = /** @class */ (function () {\n    /**\n     * The root `svg` node of the renderer.\n     *\n     * @name Highcharts.SVGRenderer#box\n     * @type {Highcharts.SVGDOMElement}\n     */\n    /**\n     * The wrapper for the root `svg` node of the renderer.\n     *\n     * @name Highcharts.SVGRenderer#boxWrapper\n     * @type {Highcharts.SVGElement}\n     */\n    /**\n     * A pointer to the `defs` node of the root SVG.\n     *\n     * @name Highcharts.SVGRenderer#defs\n     * @type {Highcharts.SVGElement}\n     */\n    /**\n     * Whether the rendered content is intended for export.\n     *\n     * @name Highcharts.SVGRenderer#forExport\n     * @type {boolean | undefined}\n     */\n    /**\n     * Page url used for internal references.\n     *\n     * @private\n     * @name Highcharts.SVGRenderer#url\n     * @type {string}\n     */\n    /**\n     * Initialize the SVGRenderer. Overridable initializer function that takes\n     * the same parameters as the constructor.\n     *\n     * @function Highcharts.SVGRenderer#init\n     *\n     * @param {Highcharts.HTMLDOMElement} container\n     * Where to put the SVG in the web page.\n     *\n     * @param {number} width\n     * The width of the SVG.\n     *\n     * @param {number} height\n     * The height of the SVG.\n     *\n     * @param {Highcharts.CSSObject} [style]\n     * The box style, if not in styleMode\n     *\n     * @param {boolean} [forExport=false]\n     * Whether the rendered content is intended for export.\n     *\n     * @param {boolean} [allowHTML=true]\n     * Whether the renderer is allowed to include HTML text, which will be\n     * projected on top of the SVG.\n     *\n     * @param {boolean} [styledMode=false]\n     * Whether the renderer belongs to a chart that is in styled mode. If it\n     * does, it will avoid setting presentational attributes in some cases, but\n     * not when set explicitly through `.attr` and `.css` etc.\n     */\n    function SVGRenderer(container, width, height, style, forExport, allowHTML, styledMode) {\n        var renderer = this,\n            boxWrapper = renderer\n                .createElement('svg')\n                .attr({\n                version: '1.1',\n                'class': 'highcharts-root'\n            }),\n            element = boxWrapper.element;\n        if (!styledMode) {\n            boxWrapper.css(this.getStyle(style || {}));\n        }\n        container.appendChild(element);\n        // Always use ltr on the container, otherwise text-anchor will be\n        // flipped and text appear outside labels, buttons, tooltip etc (#3482)\n        SVGRenderer_attr(container, 'dir', 'ltr');\n        // For browsers other than IE, add the namespace attribute (#1978)\n        if (container.innerHTML.indexOf('xmlns') === -1) {\n            SVGRenderer_attr(element, 'xmlns', this.SVG_NS);\n        }\n        this.box = element;\n        this.boxWrapper = boxWrapper;\n        this.alignedObjects = [];\n        this.url = this.getReferenceURL();\n        // Add description\n        var desc = this.createElement('desc').add();\n        desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 12.1.2'));\n        this.defs = this.createElement('defs').add();\n        this.allowHTML = allowHTML;\n        this.forExport = forExport;\n        this.styledMode = styledMode;\n        this.gradients = {}; // Object where gradient SvgElements are stored\n        this.cache = {}; // Cache for numerical bounding boxes\n        this.cacheKeys = [];\n        this.imgCount = 0;\n        this.rootFontSize = boxWrapper.getStyle('font-size');\n        renderer.setSize(width, height, false);\n        // Issue 110 workaround:\n        // In Firefox, if a div is positioned by percentage, its pixel position\n        // may land between pixels. The container itself doesn't display this,\n        // but an SVG element inside this container will be drawn at subpixel\n        // precision. In order to draw sharp lines, this must be compensated\n        // for. This doesn't seem to work inside iframes though (like in\n        // jsFiddle).\n        var subPixelFix,\n            rect;\n        if (SVGRenderer_isFirefox && container.getBoundingClientRect) {\n            subPixelFix = function () {\n                SVGRenderer_css(container, { left: 0, top: 0 });\n                rect = container.getBoundingClientRect();\n                SVGRenderer_css(container, {\n                    left: (Math.ceil(rect.left) - rect.left) + 'px',\n                    top: (Math.ceil(rect.top) - rect.top) + 'px'\n                });\n            };\n            // Run the fix now\n            subPixelFix();\n            // Run it on resize\n            renderer.unSubPixelFix = SVGRenderer_addEvent(SVGRenderer_win, 'resize', subPixelFix);\n        }\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * General method for adding a definition to the SVG `defs` tag. Can be used\n     * for gradients, fills, filters etc. Styled mode only. A hook for adding\n     * general definitions to the SVG's defs tag. Definitions can be referenced\n     * from the CSS by its `id`. Read more in\n     * [gradients, shadows and patterns](https://www.highcharts.com/docs/chart-design-and-style/gradients-shadows-and-patterns).\n     * Styled mode only.\n     *\n     * @function Highcharts.SVGRenderer#definition\n     *\n     * @param {Highcharts.ASTNode} def\n     * A serialized form of an SVG definition, including children.\n     *\n     * @return {Highcharts.SVGElement}\n     * The inserted node.\n     */\n    SVGRenderer.prototype.definition = function (def) {\n        var ast = new HTML_AST([def]);\n        return ast.addToDOM(this.defs.element);\n    };\n    /**\n     * Get the prefix needed for internal URL references to work in certain\n     * cases. Some older browser versions had a bug where internal url\n     * references in SVG attributes, on the form `url(#some-id)`, would fail if\n     * a base tag was present in the page. There were also issues with\n     * `history.pushState` related to this prefix.\n     *\n     * Related issues: #24, #672, #1070, #5244.\n     *\n     * The affected browsers are:\n     * - Chrome <= 53 (May 2018)\n     * - Firefox <= 51 (January 2017)\n     * - Safari/Mac <= 12.1 (2018 or 2019)\n     * - Safari/iOS <= 13\n     *\n     * @todo Remove this hack when time has passed. All the affected browsers\n     * are evergreens, so it is increasingly unlikely that users are affected by\n     * the bug.\n     *\n     * @return {string}\n     * The prefix to use. An empty string for modern browsers.\n     */\n    SVGRenderer.prototype.getReferenceURL = function () {\n        if ((SVGRenderer_isFirefox || isWebKit) &&\n            SVGRenderer_doc.getElementsByTagName('base').length) {\n            // Detect if a clip path is taking effect by performing a hit test\n            // outside the clipped area. If the hit element is the rectangle\n            // that was supposed to be clipped, the bug is present. This only\n            // has to be performed once per page load, so we store the result\n            // locally in the module.\n            if (!SVGRenderer_defined(hasInternalReferenceBug)) {\n                var id = SVGRenderer_uniqueKey();\n                var ast = new HTML_AST([{\n                            tagName: 'svg',\n                            attributes: {\n                                width: 8,\n                                height: 8\n                            },\n                            children: [{\n                                    tagName: 'defs',\n                                    children: [{\n                                            tagName: 'clipPath',\n                                            attributes: {\n                                                id: id\n                                            },\n                                            children: [{\n                                                    tagName: 'rect',\n                                                    attributes: {\n                                                        width: 4,\n                                                        height: 4\n                                                    }\n                                                }]\n                                        }]\n                                }, {\n                                    tagName: 'rect',\n                                    attributes: {\n                                        id: 'hitme',\n                                        width: 8,\n                                        height: 8,\n                                        'clip-path': \"url(#\".concat(id, \")\"),\n                                        fill: 'rgba(0,0,0,0.001)'\n                                    }\n                                }]\n                        }]);\n                var svg = ast.addToDOM(SVGRenderer_doc.body);\n                SVGRenderer_css(svg, {\n                    position: 'fixed',\n                    top: 0,\n                    left: 0,\n                    zIndex: 9e5\n                });\n                var hitElement = SVGRenderer_doc.elementFromPoint(6, 6);\n                hasInternalReferenceBug = (hitElement && hitElement.id) === 'hitme';\n                SVGRenderer_doc.body.removeChild(svg);\n            }\n            if (hasInternalReferenceBug) {\n                // Scan alert #[72]: Loop for nested patterns\n                return SVGRenderer_replaceNested(SVGRenderer_win.location.href.split('#')[0], // Remove hash\n                [/<[^>]*>/g, ''], // Wing cut HTML\n                [/([\\('\\)])/g, '\\\\$1'], // Escape parantheses and quotes\n                [/ /g, '%20'] // Replace spaces (needed for Safari only)\n                );\n            }\n        }\n        return '';\n    };\n    /**\n     * Get the global style setting for the renderer.\n     *\n     * @private\n     * @function Highcharts.SVGRenderer#getStyle\n     *\n     * @param {Highcharts.CSSObject} style\n     * Style settings.\n     *\n     * @return {Highcharts.CSSObject}\n     * The style settings mixed with defaults.\n     */\n    SVGRenderer.prototype.getStyle = function (style) {\n        this.style = SVGRenderer_extend({\n            fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", ' +\n                'Roboto, Helvetica, Arial, \"Apple Color Emoji\", ' +\n                '\"Segoe UI Emoji\", \"Segoe UI Symbol\", sans-serif',\n            fontSize: '1rem'\n        }, style);\n        return this.style;\n    };\n    /**\n     * Apply the global style on the renderer, mixed with the default styles.\n     *\n     * @function Highcharts.SVGRenderer#setStyle\n     *\n     * @param {Highcharts.CSSObject} style\n     * CSS to apply.\n     */\n    SVGRenderer.prototype.setStyle = function (style) {\n        this.boxWrapper.css(this.getStyle(style));\n    };\n    /**\n     * Detect whether the renderer is hidden. This happens when one of the\n     * parent elements has `display: none`. Used internally to detect when we\n     * need to render preliminarily in another div to get the text bounding\n     * boxes right.\n     *\n     * @function Highcharts.SVGRenderer#isHidden\n     *\n     * @return {boolean}\n     * True if it is hidden.\n     */\n    SVGRenderer.prototype.isHidden = function () {\n        return !this.boxWrapper.getBBox().width;\n    };\n    /**\n     * Destroys the renderer and its allocated members.\n     *\n     * @function Highcharts.SVGRenderer#destroy\n     *\n     * @return {null}\n     * Pass through value.\n     */\n    SVGRenderer.prototype.destroy = function () {\n        var renderer = this,\n            rendererDefs = renderer.defs;\n        renderer.box = null;\n        renderer.boxWrapper = renderer.boxWrapper.destroy();\n        // Call destroy on all gradient elements\n        SVGRenderer_destroyObjectProperties(renderer.gradients || {});\n        renderer.gradients = null;\n        renderer.defs = rendererDefs.destroy();\n        // Remove sub pixel fix handler (#982)\n        if (renderer.unSubPixelFix) {\n            renderer.unSubPixelFix();\n        }\n        renderer.alignedObjects = null;\n        return null;\n    };\n    /**\n     * Create a wrapper for an SVG element. Serves as a factory for\n     * {@link SVGElement}, but this function is itself mostly called from\n     * primitive factories like {@link SVGRenderer#path}, {@link\n     * SVGRenderer#rect} or {@link SVGRenderer#text}.\n     *\n     * @function Highcharts.SVGRenderer#createElement\n     *\n     * @param {string} nodeName\n     * The node name, for example `rect`, `g` etc.\n     *\n     * @return {Highcharts.SVGElement}\n     * The generated SVGElement.\n     */\n    SVGRenderer.prototype.createElement = function (nodeName) {\n        return new this.Element(this, nodeName);\n    };\n    /**\n     * Get converted radial gradient attributes according to the radial\n     * reference. Used internally from the {@link SVGElement#colorGradient}\n     * function.\n     *\n     * @private\n     * @function Highcharts.SVGRenderer#getRadialAttr\n     */\n    SVGRenderer.prototype.getRadialAttr = function (radialReference, gradAttr) {\n        return {\n            cx: (radialReference[0] - radialReference[2] / 2) +\n                (gradAttr.cx || 0) * radialReference[2],\n            cy: (radialReference[1] - radialReference[2] / 2) +\n                (gradAttr.cy || 0) * radialReference[2],\n            r: (gradAttr.r || 0) * radialReference[2]\n        };\n    };\n    /**\n     * Create a drop shadow definition and return its id\n     *\n     * @private\n     * @function Highcharts.SVGRenderer#shadowDefinition\n     *\n     * @param {boolean|Highcharts.ShadowOptionsObject} [shadowOptions] The\n     *        shadow options. If `true`, the default options are applied\n     */\n    SVGRenderer.prototype.shadowDefinition = function (shadowOptions) {\n        var id = SVGRenderer_spreadArray([\n                \"highcharts-drop-shadow-\".concat(this.chartIndex)\n            ],\n            Object.keys(shadowOptions)\n                .map(function (key) {\n                return \"\" + key + \"-\".concat(shadowOptions[key]);\n        }), true).join('-').toLowerCase().replace(/[^a-z\\d\\-]/g, ''), options = SVGRenderer_merge({\n            color: '#000000',\n            offsetX: 1,\n            offsetY: 1,\n            opacity: 0.15,\n            width: 5\n        }, shadowOptions);\n        if (!this.defs.element.querySelector(\"#\".concat(id))) {\n            this.definition({\n                tagName: 'filter',\n                attributes: {\n                    id: id,\n                    filterUnits: options.filterUnits\n                },\n                children: this.getShadowFilterContent(options)\n            });\n        }\n        return id;\n    };\n    /**\n     * Get shadow filter content.\n     * NOTE! Overridden in es5 module for IE11 compatibility.\n     *\n     * @private\n     * @function Highcharts.SVGRenderer#getShadowFilterContent\n     *\n     * @param {ShadowOptionsObject} options\n     * The shadow options.\n     * @return {Array<AST.Node>}\n     * The shadow filter content.\n     */\n    SVGRenderer.prototype.getShadowFilterContent = function (options) {\n        return [{\n                tagName: 'feDropShadow',\n                attributes: {\n                    dx: options.offsetX,\n                    dy: options.offsetY,\n                    'flood-color': options.color,\n                    // Tuned and modified to keep a preserve compatibility\n                    // with the old settings\n                    'flood-opacity': Math.min(options.opacity * 5, 1),\n                    stdDeviation: options.width / 2\n                }\n            }];\n    };\n    /**\n     * Parse a simple HTML string into SVG tspans. Called internally when text\n     * is set on an SVGElement. The function supports a subset of HTML tags, CSS\n     * text features like `width`, `text-overflow`, `white-space`, and also\n     * attributes like `href` and `style`.\n     *\n     * @private\n     * @function Highcharts.SVGRenderer#buildText\n     *\n     * @param {Highcharts.SVGElement} wrapper\n     * The parent SVGElement.\n     */\n    SVGRenderer.prototype.buildText = function (wrapper) {\n        new SVG_TextBuilder(wrapper).buildSVG();\n    };\n    /**\n     * Returns white for dark colors and black for bright colors, based on W3C's\n     * definition of [Relative luminance](\n     * https://www.w3.org/WAI/GL/wiki/Relative_luminance).\n     *\n     * @function Highcharts.SVGRenderer#getContrast\n     *\n     * @param {Highcharts.ColorString} color\n     * The color to get the contrast for.\n     *\n     * @return {Highcharts.ColorString}\n     * The contrast color, either `#000000` or `#FFFFFF`.\n     */\n    SVGRenderer.prototype.getContrast = function (color) {\n        // #6216, #17273\n        var rgba = Color_Color.parse(color).rgba\n                .map(function (b8) {\n                var c = b8 / 255;\n            return c <= 0.03928 ?\n                c / 12.92 :\n                Math.pow((c + 0.055) / 1.055, 2.4);\n        });\n        // Relative luminance\n        var l = 0.2126 * rgba[0] + 0.7152 * rgba[1] + 0.0722 * rgba[2];\n        // Use white or black based on which provides more contrast\n        return 1.05 / (l + 0.05) > (l + 0.05) / 0.05 ? '#FFFFFF' : '#000000';\n    };\n    /**\n     * Create a button with preset states. Styles for the button can either be\n     * set as arguments, or a general theme for all buttons can be set by the\n     * `global.buttonTheme` option.\n     *\n     * @function Highcharts.SVGRenderer#button\n     *\n     * @param {string} text\n     * The text or HTML to draw.\n     *\n     * @param {number} x\n     * The x position of the button's left side.\n     *\n     * @param {number} y\n     * The y position of the button's top side.\n     *\n     * @param {Highcharts.EventCallbackFunction<Highcharts.SVGElement>} callback\n     * The function to execute on button click or touch.\n     *\n     * @param {Highcharts.SVGAttributes} [theme]\n     * SVG attributes for the normal state.\n     *\n     * @param {Highcharts.SVGAttributes} [hoverState]\n     * SVG attributes for the hover state.\n     *\n     * @param {Highcharts.SVGAttributes} [selectState]\n     * SVG attributes for the pressed state.\n     *\n     * @param {Highcharts.SVGAttributes} [disabledState]\n     * SVG attributes for the disabled state.\n     *\n     * @param {Highcharts.SymbolKeyValue} [shape=rect]\n     * The shape type.\n     *\n     * @param {boolean} [useHTML=false]\n     * Whether to use HTML to render the label.\n     *\n     * @return {Highcharts.SVGElement}\n     * The button element.\n     */\n    SVGRenderer.prototype.button = function (text, x, y, callback, theme, hoverState, selectState, disabledState, shape, useHTML) {\n        if (theme === void 0) { theme = {}; }\n        var label = this.label(text,\n            x,\n            y,\n            shape,\n            void 0,\n            void 0,\n            useHTML,\n            void 0, 'button'),\n            styledMode = this.styledMode,\n            args = arguments;\n        var curState = 0;\n        theme = SVGRenderer_merge(SVGRenderer_defaultOptions.global.buttonTheme, theme);\n        // @todo Consider moving this to a lower level, like .attr\n        if (styledMode) {\n            delete theme.fill;\n            delete theme.stroke;\n            delete theme['stroke-width'];\n        }\n        var states = theme.states || {},\n            normalStyle = theme.style || {};\n        delete theme.states;\n        delete theme.style;\n        // Presentational\n        var stateAttribs = [\n                HTML_AST.filterUserAttributes(theme)\n            ], \n            // The string type is a mistake, it is just for compliance with\n            // SVGAttribute and is not used in button theme.\n            stateStyles = [normalStyle];\n        if (!styledMode) {\n            ['hover', 'select', 'disabled'].forEach(function (stateName, i) {\n                stateAttribs.push(SVGRenderer_merge(stateAttribs[0], HTML_AST.filterUserAttributes(args[i + 5] || states[stateName] || {})));\n                stateStyles.push(stateAttribs[i + 1].style);\n                delete stateAttribs[i + 1].style;\n            });\n        }\n        // Add the events. IE9 and IE10 need mouseover and mouseout to function\n        // (#667).\n        SVGRenderer_addEvent(label.element, isMS ? 'mouseover' : 'mouseenter', function () {\n            if (curState !== 3) {\n                label.setState(1);\n            }\n        });\n        SVGRenderer_addEvent(label.element, isMS ? 'mouseout' : 'mouseleave', function () {\n            if (curState !== 3) {\n                label.setState(curState);\n            }\n        });\n        label.setState = function (state) {\n            if (state === void 0) { state = 0; }\n            // Hover state is temporary, don't record it\n            if (state !== 1) {\n                label.state = curState = state;\n            }\n            // Update visuals\n            label\n                .removeClass(/highcharts-button-(normal|hover|pressed|disabled)/)\n                .addClass('highcharts-button-' +\n                ['normal', 'hover', 'pressed', 'disabled'][state]);\n            if (!styledMode) {\n                label.attr(stateAttribs[state]);\n                var css_1 = stateStyles[state];\n                if (SVGRenderer_isObject(css_1)) {\n                    label.css(css_1);\n                }\n            }\n        };\n        label.attr(stateAttribs[0]);\n        // Presentational attributes\n        if (!styledMode) {\n            label.css(SVGRenderer_extend({ cursor: 'default' }, normalStyle));\n            // HTML labels don't need to handle pointer events because click and\n            // mouseenter/mouseleave is bound to the underlying <g> element.\n            // Should this be reconsidered, we need more complex logic to share\n            // events between the <g> and its <div> counterpart, and avoid\n            // triggering mouseenter/mouseleave when hovering from one to the\n            // other (#17440).\n            if (useHTML) {\n                label.text.css({ pointerEvents: 'none' });\n            }\n        }\n        return label\n            .on('touchstart', function (e) { return e.stopPropagation(); })\n            .on('click', function (e) {\n            if (curState !== 3) {\n                callback.call(label, e);\n            }\n        });\n    };\n    /**\n     * Make a straight line crisper by not spilling out to neighbour pixels.\n     *\n     * @function Highcharts.SVGRenderer#crispLine\n     *\n     * @param {Highcharts.SVGPathArray} points\n     *        The original points on the format `[['M', 0, 0], ['L', 100, 0]]`.\n     *\n     * @param {number} width\n     *        The width of the line.\n     *\n     * @return {Highcharts.SVGPathArray}\n     *         The original points array, but modified to render crisply.\n     */\n    SVGRenderer.prototype.crispLine = function (points, width) {\n        var start = points[0],\n            end = points[1];\n        // Normalize to a crisp line\n        if (SVGRenderer_defined(start[1]) && start[1] === end[1]) {\n            start[1] = end[1] = SVGRenderer_crisp(start[1], width);\n        }\n        if (SVGRenderer_defined(start[2]) && start[2] === end[2]) {\n            start[2] = end[2] = SVGRenderer_crisp(start[2], width);\n        }\n        return points;\n    };\n    /**\n     * Draw a path, wraps the SVG `path` element.\n     *\n     * @sample highcharts/members/renderer-path-on-chart/\n     *         Draw a path in a chart\n     * @sample highcharts/members/renderer-path/\n     *         Draw a path independent from a chart\n     *\n     * @example\n     * let path = renderer.path(['M', 10, 10, 'L', 30, 30, 'z'])\n     *     .attr({ stroke: '#ff00ff' })\n     *     .add();\n     *\n     * @function Highcharts.SVGRenderer#path\n     *\n     * @param {Highcharts.SVGPathArray} [path]\n     * An SVG path definition in array form.\n     *\n     * @return {Highcharts.SVGElement}\n     * The generated wrapper element.\n     *\n     */ /**\n    * Draw a path, wraps the SVG `path` element.\n    *\n    * @function Highcharts.SVGRenderer#path\n    *\n    * @param {Highcharts.SVGAttributes} [attribs]\n    * The initial attributes.\n    *\n    * @return {Highcharts.SVGElement}\n    * The generated wrapper element.\n    */\n    SVGRenderer.prototype.path = function (path) {\n        var attribs = (this.styledMode ? {} : {\n                fill: 'none'\n            });\n        if (SVGRenderer_isArray(path)) {\n            attribs.d = path;\n        }\n        else if (SVGRenderer_isObject(path)) { // Attributes\n            SVGRenderer_extend(attribs, path);\n        }\n        return this.createElement('path').attr(attribs);\n    };\n    /**\n     * Draw a circle, wraps the SVG `circle` element.\n     *\n     * @sample highcharts/members/renderer-circle/\n     *         Drawing a circle\n     *\n     * @function Highcharts.SVGRenderer#circle\n     *\n     * @param {number} [x]\n     * The center x position.\n     *\n     * @param {number} [y]\n     * The center y position.\n     *\n     * @param {number} [r]\n     * The radius.\n     *\n     * @return {Highcharts.SVGElement}\n     * The generated wrapper element.\n     */ /**\n    * Draw a circle, wraps the SVG `circle` element.\n    *\n    * @function Highcharts.SVGRenderer#circle\n    *\n    * @param {Highcharts.SVGAttributes} [attribs]\n    * The initial attributes.\n    *\n    * @return {Highcharts.SVGElement}\n    * The generated wrapper element.\n    */\n    SVGRenderer.prototype.circle = function (x, y, r) {\n        var attribs = (SVGRenderer_isObject(x) ?\n                x :\n                typeof x === 'undefined' ? {} : { x: x, y: y, r: r }), wrapper = this.createElement('circle');\n        // Setting x or y translates to cx and cy\n        wrapper.xSetter = wrapper.ySetter = function (value, key, element) {\n            element.setAttribute('c' + key, value);\n        };\n        return wrapper.attr(attribs);\n    };\n    /**\n     * Draw and return an arc.\n     *\n     * @sample highcharts/members/renderer-arc/\n     *         Drawing an arc\n     *\n     * @function Highcharts.SVGRenderer#arc\n     *\n     * @param {number} [x=0]\n     * Center X position.\n     *\n     * @param {number} [y=0]\n     * Center Y position.\n     *\n     * @param {number} [r=0]\n     * The outer radius' of the arc.\n     *\n     * @param {number} [innerR=0]\n     * Inner radius like used in donut charts.\n     *\n     * @param {number} [start=0]\n     * The starting angle of the arc in radians, where 0 is to the right and\n     * `-Math.PI/2` is up.\n     *\n     * @param {number} [end=0]\n     * The ending angle of the arc in radians, where 0 is to the right and\n     * `-Math.PI/2` is up.\n     *\n     * @return {Highcharts.SVGElement}\n     * The generated wrapper element.\n     */ /**\n    * Draw and return an arc. Overloaded function that takes arguments object.\n    *\n    * @function Highcharts.SVGRenderer#arc\n    *\n    * @param {Highcharts.SVGAttributes} attribs\n    * Initial SVG attributes.\n    *\n    * @return {Highcharts.SVGElement}\n    * The generated wrapper element.\n    */\n    SVGRenderer.prototype.arc = function (x, y, r, innerR, start, end) {\n        var options;\n        if (SVGRenderer_isObject(x)) {\n            options = x;\n            y = options.y;\n            r = options.r;\n            innerR = options.innerR;\n            start = options.start;\n            end = options.end;\n            x = options.x;\n        }\n        else {\n            options = { innerR: innerR, start: start, end: end };\n        }\n        // Arcs are defined as symbols for the ability to set\n        // attributes in attr and animate\n        var arc = this.symbol('arc',\n            x,\n            y,\n            r,\n            r,\n            options);\n        arc.r = r; // #959\n        return arc;\n    };\n    /**\n     * Draw and return a rectangle.\n     *\n     * @function Highcharts.SVGRenderer#rect\n     *\n     * @param {number} [x]\n     * Left position.\n     *\n     * @param {number} [y]\n     * Top position.\n     *\n     * @param {number} [width]\n     * Width of the rectangle.\n     *\n     * @param {number} [height]\n     * Height of the rectangle.\n     *\n     * @param {number} [r]\n     * Border corner radius.\n     *\n     * @param {number} [strokeWidth]\n     * A stroke width can be supplied to allow crisp drawing.\n     *\n     * @return {Highcharts.SVGElement}\n     * The generated wrapper element.\n     */ /**\n    * Draw and return a rectangle.\n    *\n    * @sample highcharts/members/renderer-rect-on-chart/\n    *         Draw a rectangle in a chart\n    * @sample highcharts/members/renderer-rect/\n    *         Draw a rectangle independent from a chart\n    *\n    * @function Highcharts.SVGRenderer#rect\n    *\n    * @param {Highcharts.SVGAttributes} [attributes]\n    * General SVG attributes for the rectangle.\n    *\n    * @return {Highcharts.SVGElement}\n    * The generated wrapper element.\n    */\n    SVGRenderer.prototype.rect = function (x, y, width, height, r, strokeWidth) {\n        var attribs = (SVGRenderer_isObject(x) ?\n                x :\n                typeof x === 'undefined' ?\n                    {} :\n                    {\n                        x: x,\n                        y: y,\n                        r: r,\n                        width: Math.max(width || 0, 0),\n                        height: Math.max(height || 0, 0)\n                    }),\n            wrapper = this.createElement('rect');\n        if (!this.styledMode) {\n            if (typeof strokeWidth !== 'undefined') {\n                attribs['stroke-width'] = strokeWidth;\n                SVGRenderer_extend(attribs, wrapper.crisp(attribs));\n            }\n            attribs.fill = 'none';\n        }\n        wrapper.rSetter = function (value, _key, element) {\n            wrapper.r = value;\n            SVGRenderer_attr(element, {\n                rx: value,\n                ry: value\n            });\n        };\n        wrapper.rGetter = function () {\n            return wrapper.r || 0;\n        };\n        return wrapper.attr(attribs);\n    };\n    /**\n     * Draw and return a rectangle with advanced corner rounding options.\n     *\n     * @function Highcharts.SVGRenderer#roundedRect\n     *\n     * @param {Highcharts.SVGAttributes} attribs\n     *      Attributes\n     * @return {Highcharts.SVGElement}\n     * The generated wrapper element.\n     */\n    SVGRenderer.prototype.roundedRect = function (attribs) {\n        return this.symbol('roundedRect').attr(attribs);\n    };\n    /**\n     * Resize the {@link SVGRenderer#box} and re-align all aligned child\n     * elements.\n     *\n     * @sample highcharts/members/renderer-g/\n     *         Show and hide grouped objects\n     *\n     * @function Highcharts.SVGRenderer#setSize\n     *\n     * @param {number} width\n     * The new pixel width.\n     *\n     * @param {number} height\n     * The new pixel height.\n     *\n     * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animate=true]\n     * Whether and how to animate.\n     */\n    SVGRenderer.prototype.setSize = function (width, height, animate) {\n        var renderer = this;\n        renderer.width = width;\n        renderer.height = height;\n        renderer.boxWrapper.animate({\n            width: width,\n            height: height\n        }, {\n            step: function () {\n                this.attr({\n                    viewBox: '0 0 ' + this.attr('width') + ' ' +\n                        this.attr('height')\n                });\n            },\n            duration: SVGRenderer_pick(animate, true) ? void 0 : 0\n        });\n        renderer.alignElements();\n    };\n    /**\n     * Create and return an svg group element. Child\n     * {@link Highcharts.SVGElement} objects are added to the group by using the\n     * group as the first parameter in {@link Highcharts.SVGElement#add|add()}.\n     *\n     * @function Highcharts.SVGRenderer#g\n     *\n     * @param {string} [name]\n     *        The group will be given a class name of `highcharts-{name}`. This\n     *        can be used for styling and scripting.\n     *\n     * @return {Highcharts.SVGElement}\n     *         The generated wrapper element.\n     */\n    SVGRenderer.prototype.g = function (name) {\n        var elem = this.createElement('g');\n        return name ?\n            elem.attr({ 'class': 'highcharts-' + name }) :\n            elem;\n    };\n    /**\n     * Display an image.\n     *\n     * @sample highcharts/members/renderer-image-on-chart/\n     *         Add an image in a chart\n     * @sample highcharts/members/renderer-image/\n     *         Add an image independent of a chart\n     *\n     * @function Highcharts.SVGRenderer#image\n     *\n     * @param {string} href\n     *        The image source.\n     *\n     * @param {number} [x]\n     *        The X position.\n     *\n     * @param {number} [y]\n     *        The Y position.\n     *\n     * @param {number} [width]\n     *        The image width. If omitted, it defaults to the image file width.\n     *\n     * @param {number} [height]\n     *        The image height. If omitted it defaults to the image file\n     *        height.\n     *\n     * @param {Function} [onload]\n     *        Event handler for image load.\n     *\n     * @return {Highcharts.SVGElement}\n     *         The generated wrapper element.\n     */\n    SVGRenderer.prototype.image = function (href, x, y, width, height, onload) {\n        var attribs = { preserveAspectRatio: 'none' };\n        // Optional properties (#11756)\n        if (SVGRenderer_isNumber(x)) {\n            attribs.x = x;\n        }\n        if (SVGRenderer_isNumber(y)) {\n            attribs.y = y;\n        }\n        if (SVGRenderer_isNumber(width)) {\n            attribs.width = width;\n        }\n        if (SVGRenderer_isNumber(height)) {\n            attribs.height = height;\n        }\n        var elemWrapper = this.createElement('image').attr(attribs),\n            onDummyLoad = function (e) {\n                elemWrapper.attr({ href: href });\n            onload.call(elemWrapper, e);\n        };\n        // Add load event if supplied\n        if (onload) {\n            // We have to use a dummy HTML image since IE support for SVG image\n            // load events is very buggy. First set a transparent src, wait for\n            // dummy to load, and then add the real src to the SVG image.\n            elemWrapper.attr({\n                /* eslint-disable-next-line max-len */\n                href: 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='\n            });\n            var dummy = new SVGRenderer_win.Image();\n            SVGRenderer_addEvent(dummy, 'load', onDummyLoad);\n            dummy.src = href;\n            if (dummy.complete) {\n                onDummyLoad({});\n            }\n        }\n        else {\n            elemWrapper.attr({ href: href });\n        }\n        return elemWrapper;\n    };\n    /**\n     * Draw a symbol out of pre-defined shape paths from\n     * {@link SVGRenderer#symbols}.\n     * It is used in Highcharts for point makers, which cake a `symbol` option,\n     * and label and button backgrounds like in the tooltip and stock flags.\n     *\n     * @function Highcharts.SVGRenderer#symbol\n     *\n     * @param {string} symbol\n     * The symbol name.\n     *\n     * @param {number} [x]\n     * The X coordinate for the top left position.\n     *\n     * @param {number} [y]\n     * The Y coordinate for the top left position.\n     *\n     * @param {number} [width]\n     * The pixel width.\n     *\n     * @param {number} [height]\n     * The pixel height.\n     *\n     * @param {Highcharts.SymbolOptionsObject} [options]\n     * Additional options, depending on the actual symbol drawn.\n     *\n     * @return {Highcharts.SVGElement}\n     * SVG symbol.\n     */\n    SVGRenderer.prototype.symbol = function (symbol, x, y, width, height, options) {\n        var ren = this, imageRegex = /^url\\((.*?)\\)$/, isImage = imageRegex.test(symbol), sym = (!isImage && (this.symbols[symbol] ? symbol : 'circle')), \n            // Get the symbol definition function\n            symbolFn = (sym && this.symbols[sym]);\n        var obj,\n            path,\n            imageSrc,\n            centerImage;\n        if (symbolFn) {\n            // Check if there's a path defined for this symbol\n            if (typeof x === 'number') {\n                path = symbolFn.call(this.symbols, x || 0, y || 0, width || 0, height || 0, options);\n            }\n            obj = this.path(path);\n            if (!ren.styledMode) {\n                obj.attr('fill', 'none');\n            }\n            // Expando properties for use in animate and attr\n            SVGRenderer_extend(obj, {\n                symbolName: (sym || void 0),\n                x: x,\n                y: y,\n                width: width,\n                height: height\n            });\n            if (options) {\n                SVGRenderer_extend(obj, options);\n            }\n            // Image symbols\n        }\n        else if (isImage) {\n            imageSrc = symbol.match(imageRegex)[1];\n            // Create the image synchronously, add attribs async\n            var img_1 = obj = this.image(imageSrc);\n            // The image width is not always the same as the symbol width. The\n            // image may be centered within the symbol, as is the case when\n            // image shapes are used as label backgrounds, for example in flags.\n            img_1.imgwidth = SVGRenderer_pick(options && options.width, symbolSizes[imageSrc] && symbolSizes[imageSrc].width);\n            img_1.imgheight = SVGRenderer_pick(options && options.height, symbolSizes[imageSrc] && symbolSizes[imageSrc].height);\n            /**\n             * Set the size and position\n             */\n            centerImage = function (obj) { return obj.attr({\n                width: obj.width,\n                height: obj.height\n            }); };\n            /**\n             * Width and height setters that take both the image's physical size\n             * and the label size into consideration, and translates the image\n             * to center within the label.\n             */\n            ['width', 'height'].forEach(function (key) {\n                img_1[\"\" + key + \"Setter\"] = function (value, key) {\n                    this[key] = value;\n                    var _a = this,\n                        alignByTranslate = _a.alignByTranslate,\n                        element = _a.element,\n                        width = _a.width,\n                        height = _a.height,\n                        imgwidth = _a.imgwidth,\n                        imgheight = _a.imgheight,\n                        imgSize = key === 'width' ? imgwidth : imgheight;\n                    var scale = 1;\n                    // Scale and center the image within its container. The name\n                    // `backgroundSize` is taken from the CSS spec, but the\n                    // value `within` is made up. Other possible values in the\n                    // spec, `cover` and `contain`, can be implemented if\n                    // needed.\n                    if (options &&\n                        options.backgroundSize === 'within' &&\n                        width &&\n                        height &&\n                        imgwidth &&\n                        imgheight) {\n                        scale = Math.min(width / imgwidth, height / imgheight);\n                        // Update both width and height to keep the ratio\n                        // correct (#17315)\n                        SVGRenderer_attr(element, {\n                            width: Math.round(imgwidth * scale),\n                            height: Math.round(imgheight * scale)\n                        });\n                    }\n                    else if (element && imgSize) {\n                        element.setAttribute(key, imgSize);\n                    }\n                    if (!alignByTranslate && imgwidth && imgheight) {\n                        this.translate(((width || 0) - (imgwidth * scale)) / 2, ((height || 0) - (imgheight * scale)) / 2);\n                    }\n                };\n            });\n            if (SVGRenderer_defined(x)) {\n                img_1.attr({\n                    x: x,\n                    y: y\n                });\n            }\n            img_1.isImg = true;\n            img_1.symbolUrl = symbol;\n            if (SVGRenderer_defined(img_1.imgwidth) && SVGRenderer_defined(img_1.imgheight)) {\n                centerImage(img_1);\n            }\n            else {\n                // Initialize image to be 0 size so export will still function\n                // if there's no cached sizes.\n                img_1.attr({ width: 0, height: 0 });\n                // Create a dummy JavaScript image to get the width and height.\n                SVGRenderer_createElement('img', {\n                    onload: function () {\n                        var chart = SVGRenderer_charts[ren.chartIndex];\n                        // Special case for SVGs on IE11, the width is not\n                        // accessible until the image is part of the DOM\n                        // (#2854).\n                        if (this.width === 0) {\n                            SVGRenderer_css(this, {\n                                position: 'absolute',\n                                top: '-999em'\n                            });\n                            SVGRenderer_doc.body.appendChild(this);\n                        }\n                        // Center the image\n                        symbolSizes[imageSrc] = {\n                            width: this.width,\n                            height: this.height\n                        };\n                        img_1.imgwidth = this.width;\n                        img_1.imgheight = this.height;\n                        if (img_1.element) {\n                            centerImage(img_1);\n                        }\n                        // Clean up after #2854 workaround.\n                        if (this.parentNode) {\n                            this.parentNode.removeChild(this);\n                        }\n                        // Fire the load event when all external images are\n                        // loaded\n                        ren.imgCount--;\n                        if (!ren.imgCount && chart && !chart.hasLoaded) {\n                            chart.onload();\n                        }\n                    },\n                    src: imageSrc\n                });\n                this.imgCount++;\n            }\n        }\n        return obj;\n    };\n    /**\n     * Define a clipping rectangle. The clipping rectangle is later applied\n     * to {@link SVGElement} objects through the {@link SVGElement#clip}\n     * function.\n     *\n     * This function is deprecated as of v11.2. Instead, use a regular shape\n     * (`rect`, `path` etc), and the `SVGElement.clipTo` function.\n     *\n     * @example\n     * let circle = renderer.circle(100, 100, 100)\n     *     .attr({ fill: 'red' })\n     *     .add();\n     * let clipRect = renderer.clipRect(100, 100, 100, 100);\n     *\n     * // Leave only the lower right quarter visible\n     * circle.clip(clipRect);\n     *\n     * @deprecated\n     *\n     * @function Highcharts.SVGRenderer#clipRect\n     *\n     * @param {number} [x]\n     *\n     * @param {number} [y]\n     *\n     * @param {number} [width]\n     *\n     * @param {number} [height]\n     *\n     * @return {Highcharts.ClipRectElement}\n     *         A clipping rectangle.\n     */\n    SVGRenderer.prototype.clipRect = function (x, y, width, height) {\n        return this.rect(x, y, width, height, 0);\n    };\n    /**\n     * Draw text. The text can contain a subset of HTML, like spans and anchors\n     * and some basic text styling of these. For more advanced features like\n     * border and background, use {@link Highcharts.SVGRenderer#label} instead.\n     * To update the text after render, run `text.attr({ text: 'New text' })`.\n     *\n     * @sample highcharts/members/renderer-text-on-chart/\n     *         Annotate the chart freely\n     * @sample highcharts/members/renderer-on-chart/\n     *         Annotate with a border and in response to the data\n     * @sample highcharts/members/renderer-text/\n     *         Formatted text\n     *\n     * @function Highcharts.SVGRenderer#text\n     *\n     * @param {string} [str]\n     * The text of (subset) HTML to draw.\n     *\n     * @param {number} [x]\n     * The x position of the text's lower left corner.\n     *\n     * @param {number} [y]\n     * The y position of the text's lower left corner.\n     *\n     * @param {boolean} [useHTML=false]\n     * Use HTML to render the text.\n     *\n     * @return {Highcharts.SVGElement}\n     * The text object.\n     */\n    SVGRenderer.prototype.text = function (str, x, y, useHTML) {\n        var renderer = this,\n            attribs = {};\n        if (useHTML && (renderer.allowHTML || !renderer.forExport)) {\n            return renderer.html(str, x, y);\n        }\n        attribs.x = Math.round(x || 0); // X always needed for line-wrap logic\n        if (y) {\n            attribs.y = Math.round(y);\n        }\n        if (SVGRenderer_defined(str)) {\n            attribs.text = str;\n        }\n        var wrapper = renderer.createElement('text').attr(attribs);\n        if (!useHTML || (renderer.forExport && !renderer.allowHTML)) {\n            wrapper.xSetter = function (value, key, element) {\n                var tspans = element.getElementsByTagName('tspan'),\n                    parentVal = element.getAttribute(key);\n                for (var i = 0, tspan = void 0; i < tspans.length; i++) {\n                    tspan = tspans[i];\n                    // If the x values are equal, the tspan represents a line\n                    // break\n                    if (tspan.getAttribute(key) === parentVal) {\n                        tspan.setAttribute(key, value);\n                    }\n                }\n                element.setAttribute(key, value);\n            };\n        }\n        return wrapper;\n    };\n    /**\n     * Utility to return the baseline offset and total line height from the font\n     * size.\n     *\n     * @function Highcharts.SVGRenderer#fontMetrics\n     *\n     * @param {Highcharts.SVGElement|Highcharts.SVGDOMElement|number} [element]\n     *        The element to inspect for a current font size. If a number is\n     *        given, it's used as a fall back for direct font size in pixels.\n     *\n     * @return {Highcharts.FontMetricsObject}\n     *         The font metrics.\n     */\n    SVGRenderer.prototype.fontMetrics = function (element) {\n        var f = SVGRenderer_pInt(SVG_SVGElement.prototype.getStyle.call(element, 'font-size') || 0);\n        // Empirical values found by comparing font size and bounding box\n        // height. Applies to the default font family.\n        // https://jsfiddle.net/highcharts/7xvn7/\n        var h = f < 24 ? f + 3 : Math.round(f * 1.2),\n            b = Math.round(h * 0.8);\n        return {\n            // Line height\n            h: h,\n            // Baseline\n            b: b,\n            // Font size\n            f: f\n        };\n    };\n    /**\n     * Correct X and Y positioning of a label for rotation (#1764).\n     *\n     * @private\n     * @function Highcharts.SVGRenderer#rotCorr\n     */\n    SVGRenderer.prototype.rotCorr = function (baseline, rotation, alterY) {\n        var y = baseline;\n        if (rotation && alterY) {\n            y = Math.max(y * Math.cos(rotation * SVGRenderer_deg2rad), 4);\n        }\n        return {\n            x: (-baseline / 3) * Math.sin(rotation * SVGRenderer_deg2rad),\n            y: y\n        };\n    };\n    /**\n     * Compatibility function to convert the legacy one-dimensional path array\n     * into an array of segments.\n     *\n     * It is used in maps to parse the `path` option, and in SVGRenderer.dSetter\n     * to support legacy paths from demos.\n     *\n     * @private\n     * @function Highcharts.SVGRenderer#pathToSegments\n     */\n    SVGRenderer.prototype.pathToSegments = function (path) {\n        var ret = [];\n        var segment = [];\n        var commandLength = {\n                A: 8,\n                C: 7,\n                H: 2,\n                L: 3,\n                M: 3,\n                Q: 5,\n                S: 5,\n                T: 3,\n                V: 2\n            };\n        // Short, non-typesafe parsing of the one-dimensional array. It splits\n        // the path on any string. This is not type checked against the tuple\n        // types, but is shorter, and doesn't require specific checks for any\n        // command type in SVG.\n        for (var i = 0; i < path.length; i++) {\n            // Command skipped, repeat previous or insert L/l for M/m\n            if (SVGRenderer_isString(segment[0]) &&\n                SVGRenderer_isNumber(path[i]) &&\n                segment.length === commandLength[(segment[0].toUpperCase())]) {\n                path.splice(i, 0, segment[0].replace('M', 'L').replace('m', 'l'));\n            }\n            // Split on string\n            if (typeof path[i] === 'string') {\n                if (segment.length) {\n                    ret.push(segment.slice(0));\n                }\n                segment.length = 0;\n            }\n            segment.push(path[i]);\n        }\n        ret.push(segment.slice(0));\n        return ret;\n        /*\n        // Fully type-safe version where each tuple type is checked. The\n        // downside is filesize and a lack of flexibility for unsupported\n        // commands\n        const ret: SVGPath = [],\n            commands = {\n                A: 7,\n                C: 6,\n                H: 1,\n                L: 2,\n                M: 2,\n                Q: 4,\n                S: 4,\n                T: 2,\n                V: 1,\n                Z: 0\n            };\n\n        let i = 0,\n            lastI = 0,\n            lastCommand;\n\n        while (i < path.length) {\n            const item = path[i];\n\n            let command;\n\n            if (typeof item === 'string') {\n                command = item;\n                i += 1;\n            } else {\n                command = lastCommand || 'M';\n            }\n\n            // Upper case\n            const commandUC = command.toUpperCase();\n\n            if (commandUC in commands) {\n\n                // No numeric parameters\n                if (command === 'Z' || command === 'z') {\n                    ret.push([command]);\n\n                // One numeric parameter\n                } else {\n                    const val0 = path[i];\n                    if (typeof val0 === 'number') {\n\n                        // Horizontal line to\n                        if (command === 'H' || command === 'h') {\n                            ret.push([command, val0]);\n                            i += 1;\n\n                        // Vertical line to\n                        } else if (command === 'V' || command === 'v') {\n                            ret.push([command, val0]);\n                            i += 1;\n\n                        // Two numeric parameters\n                        } else {\n                            const val1 = path[i + 1];\n                            if (typeof val1 === 'number') {\n                                // lineTo\n                                if (command === 'L' || command === 'l') {\n                                    ret.push([command, val0, val1]);\n                                    i += 2;\n\n                                // moveTo\n                                } else if (command === 'M' || command === 'm') {\n                                    ret.push([command, val0, val1]);\n                                    i += 2;\n\n                                // Smooth quadratic bezier\n                                } else if (command === 'T' || command === 't') {\n                                    ret.push([command, val0, val1]);\n                                    i += 2;\n\n                                // Four numeric parameters\n                                } else {\n                                    const val2 = path[i + 2],\n                                        val3 = path[i + 3];\n                                    if (\n                                        typeof val2 === 'number' &&\n                                        typeof val3 === 'number'\n                                    ) {\n                                        // Quadratic bezier to\n                                        if (\n                                            command === 'Q' ||\n                                            command === 'q'\n                                        ) {\n                                            ret.push([\n                                                command,\n                                                val0,\n                                                val1,\n                                                val2,\n                                                val3\n                                            ]);\n                                            i += 4;\n\n                                        // Smooth cubic bezier to\n                                        } else if (\n                                            command === 'S' ||\n                                            command === 's'\n                                        ) {\n                                            ret.push([\n                                                command,\n                                                val0,\n                                                val1,\n                                                val2,\n                                                val3\n                                            ]);\n                                            i += 4;\n\n                                        // Six numeric parameters\n                                        } else {\n                                            const val4 = path[i + 4],\n                                                val5 = path[i + 5];\n\n                                            if (\n                                                typeof val4 === 'number' &&\n                                                typeof val5 === 'number'\n                                            ) {\n                                                // Curve to\n                                                if (\n                                                    command === 'C' ||\n                                                    command === 'c'\n                                                ) {\n                                                    ret.push([\n                                                        command,\n                                                        val0,\n                                                        val1,\n                                                        val2,\n                                                        val3,\n                                                        val4,\n                                                        val5\n                                                    ]);\n                                                    i += 6;\n\n                                                // Seven numeric parameters\n                                                } else {\n                                                    const val6 = path[i + 6];\n\n                                                    // Arc to\n                                                    if (\n                                                        typeof val6 ===\n                                                        'number' &&\n                                                        (\n                                                            command === 'A' ||\n                                                            command === 'a'\n                                                        )\n                                                    ) {\n                                                        ret.push([\n                                                            command,\n                                                            val0,\n                                                            val1,\n                                                            val2,\n                                                            val3,\n                                                            val4,\n                                                            val5,\n                                                            val6\n                                                        ]);\n                                                        i += 7;\n\n                                                    }\n\n                                                }\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n\n                        }\n                    }\n                }\n            }\n\n            // An unmarked command following a moveTo is a lineTo\n            lastCommand = command === 'M' ? 'L' : command;\n\n            if (i === lastI) {\n                break;\n            }\n            lastI = i;\n        }\n        return ret;\n        */\n    };\n    /**\n     * Draw a label, which is an extended text element with support for border\n     * and background. Highcharts creates a `g` element with a text and a `path`\n     * or `rect` inside, to make it behave somewhat like a HTML div. Border and\n     * background are set through `stroke`, `stroke-width` and `fill` attributes\n     * using the {@link Highcharts.SVGElement#attr|attr} method. To update the\n     * text after render, run `label.attr({ text: 'New text' })`.\n     *\n     * @sample highcharts/members/renderer-label-on-chart/\n     *         A label on the chart\n     *\n     * @function Highcharts.SVGRenderer#label\n     *\n     * @param {string} str\n     *        The initial text string or (subset) HTML to render.\n     *\n     * @param {number} x\n     *        The x position of the label's left side.\n     *\n     * @param {number} [y]\n     *        The y position of the label's top side or baseline, depending on\n     *        the `baseline` parameter.\n     *\n     * @param {string} [shape='rect']\n     *        The shape of the label's border/background, if any. Defaults to\n     *        `rect`. Other possible values are `callout` or other shapes\n     *        defined in {@link Highcharts.SVGRenderer#symbols}.\n     *\n     * @param {number} [anchorX]\n     *        In case the `shape` has a pointer, like a flag, this is the\n     *        coordinates it should be pinned to.\n     *\n     * @param {number} [anchorY]\n     *        In case the `shape` has a pointer, like a flag, this is the\n     *        coordinates it should be pinned to.\n     *\n     * @param {boolean} [useHTML=false]\n     *        Whether to use HTML to render the label.\n     *\n     * @param {boolean} [baseline=false]\n     *        Whether to position the label relative to the text baseline,\n     *        like {@link Highcharts.SVGRenderer#text|renderer.text}, or to the\n     *        upper border of the rectangle.\n     *\n     * @param {string} [className]\n     *        Class name for the group.\n     *\n     * @return {Highcharts.SVGElement}\n     *         The generated label.\n     */\n    SVGRenderer.prototype.label = function (str, x, y, shape, anchorX, anchorY, useHTML, baseline, className) {\n        return new SVG_SVGLabel(this, str, x, y, shape, anchorX, anchorY, useHTML, baseline, className);\n    };\n    /**\n     * Re-align all aligned elements.\n     *\n     * @private\n     * @function Highcharts.SVGRenderer#alignElements\n     */\n    SVGRenderer.prototype.alignElements = function () {\n        this.alignedObjects.forEach(function (el) { return el.align(); });\n    };\n    return SVGRenderer;\n}());\nSVGRenderer_extend(SVGRenderer.prototype, {\n    /**\n     * A pointer to the renderer's associated Element class.\n     *\n     * @name Highcharts.SVGRenderer#Element\n     * @type {Highcharts.SVGElement}\n     */\n    Element: SVG_SVGElement,\n    SVG_NS: SVGRenderer_SVG_NS,\n    /**\n     * A collection of characters mapped to HTML entities. When `useHTML` on an\n     * element is true, these entities will be rendered correctly by HTML. In\n     * the SVG pseudo-HTML, they need to be unescaped back to simple characters,\n     * so for example `&lt;` will render as `<`.\n     *\n     * @example\n     * // Add support for unescaping quotes\n     * Highcharts.SVGRenderer.prototype.escapes['\"'] = '&quot;';\n     *\n     * @name Highcharts.SVGRenderer#escapes\n     * @type {Highcharts.Dictionary<string>}\n     */\n    escapes: {\n        '&': '&amp;',\n        '<': '&lt;',\n        '>': '&gt;',\n        \"'\": '&#39;', // eslint-disable-line quotes\n        '\"': '&quot;'\n    },\n    /**\n     * An extendable collection of functions for defining symbol paths.\n     *\n     * @name Highcharts.SVGRenderer#symbols\n     * @type {Highcharts.SymbolDictionary}\n     */\n    symbols: SVG_Symbols,\n    /**\n     * Dummy function for plugins, called every time the renderer is updated.\n     * Prior to Highcharts 5, this was used for the canvg renderer.\n     *\n     * @deprecated\n     * @function Highcharts.SVGRenderer#draw\n     */\n    draw: noop\n});\n/* *\n *\n *  Registry\n *\n * */\nRenderer_RendererRegistry.registerRendererType('svg', SVGRenderer, true);\n/* *\n *\n *  Export Default\n *\n * */\n/* harmony default export */ var SVG_SVGRenderer = (SVGRenderer);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * A clipping rectangle that can be applied to one or more {@link SVGElement}\n * instances. It is instantiated with the {@link SVGRenderer#clipRect} function\n * and applied with the {@link SVGElement#clip} function.\n *\n * @example\n * let circle = renderer.circle(100, 100, 100)\n *     .attr({ fill: 'red' })\n *     .add();\n * let clipRect = renderer.clipRect(100, 100, 100, 100);\n *\n * // Leave only the lower right quarter visible\n * circle.clip(clipRect);\n *\n * @typedef {Highcharts.SVGElement} Highcharts.ClipRectElement\n */\n/**\n * The font metrics.\n *\n * @interface Highcharts.FontMetricsObject\n */ /**\n* The baseline relative to the top of the box.\n*\n* @name Highcharts.FontMetricsObject#b\n* @type {number}\n*/ /**\n* The font size.\n*\n* @name Highcharts.FontMetricsObject#f\n* @type {number}\n*/ /**\n* The line height.\n*\n* @name Highcharts.FontMetricsObject#h\n* @type {number}\n*/\n/**\n * An object containing `x` and `y` properties for the position of an element.\n *\n * @interface Highcharts.PositionObject\n */ /**\n* X position of the element.\n* @name Highcharts.PositionObject#x\n* @type {number}\n*/ /**\n* Y position of the element.\n* @name Highcharts.PositionObject#y\n* @type {number}\n*/\n/**\n * A rectangle.\n *\n * @interface Highcharts.RectangleObject\n */ /**\n* Height of the rectangle.\n* @name Highcharts.RectangleObject#height\n* @type {number}\n*/ /**\n* Width of the rectangle.\n* @name Highcharts.RectangleObject#width\n* @type {number}\n*/ /**\n* Horizontal position of the rectangle.\n* @name Highcharts.RectangleObject#x\n* @type {number}\n*/ /**\n* Vertical position of the rectangle.\n* @name Highcharts.RectangleObject#y\n* @type {number}\n*/\n/**\n * The shadow options.\n *\n * @interface Highcharts.ShadowOptionsObject\n */ /**\n* The shadow color.\n* @name    Highcharts.ShadowOptionsObject#color\n* @type    {Highcharts.ColorString|undefined}\n* @default ${palette.neutralColor100}\n*/ /**\n* The horizontal offset from the element.\n*\n* @name    Highcharts.ShadowOptionsObject#offsetX\n* @type    {number|undefined}\n* @default 1\n*/ /**\n* The vertical offset from the element.\n* @name    Highcharts.ShadowOptionsObject#offsetY\n* @type    {number|undefined}\n* @default 1\n*/ /**\n* The shadow opacity.\n*\n* @name    Highcharts.ShadowOptionsObject#opacity\n* @type    {number|undefined}\n* @default 0.15\n*/ /**\n* The shadow width or distance from the element.\n* @name    Highcharts.ShadowOptionsObject#width\n* @type    {number|undefined}\n* @default 3\n*/\n/**\n * @interface Highcharts.SizeObject\n */ /**\n* @name Highcharts.SizeObject#height\n* @type {number}\n*/ /**\n* @name Highcharts.SizeObject#width\n* @type {number}\n*/\n/**\n * Array of path commands, that will go into the `d` attribute of an SVG\n * element.\n *\n * @typedef {Array<(Array<Highcharts.SVGPathCommand>|Array<Highcharts.SVGPathCommand,number>|Array<Highcharts.SVGPathCommand,number,number>|Array<Highcharts.SVGPathCommand,number,number,number,number>|Array<Highcharts.SVGPathCommand,number,number,number,number,number,number>|Array<Highcharts.SVGPathCommand,number,number,number,number,number,number,number>)>} Highcharts.SVGPathArray\n */\n/**\n * Possible path commands in an SVG path array. Valid values are `A`, `C`, `H`,\n * `L`, `M`, `Q`, `S`, `T`, `V`, `Z`.\n *\n * @typedef {string} Highcharts.SVGPathCommand\n * @validvalue [\"a\",\"c\",\"h\",\"l\",\"m\",\"q\",\"s\",\"t\",\"v\",\"z\",\"A\",\"C\",\"H\",\"L\",\"M\",\"Q\",\"S\",\"T\",\"V\",\"Z\"]\n */\n/**\n * An extendable collection of functions for defining symbol paths. Symbols are\n * used internally for point markers, button and label borders and backgrounds,\n * or custom shapes. Extendable by adding to {@link SVGRenderer#symbols}.\n *\n * @interface Highcharts.SymbolDictionary\n */ /**\n* @name Highcharts.SymbolDictionary#[key:string]\n* @type {Function|undefined}\n*/ /**\n* @name Highcharts.SymbolDictionary#arc\n* @type {Function|undefined}\n*/ /**\n* @name Highcharts.SymbolDictionary#callout\n* @type {Function|undefined}\n*/ /**\n* @name Highcharts.SymbolDictionary#circle\n* @type {Function|undefined}\n*/ /**\n* @name Highcharts.SymbolDictionary#diamond\n* @type {Function|undefined}\n*/ /**\n* @name Highcharts.SymbolDictionary#square\n* @type {Function|undefined}\n*/ /**\n* @name Highcharts.SymbolDictionary#triangle\n* @type {Function|undefined}\n*/\n/**\n * Can be one of `arc`, `callout`, `circle`, `diamond`, `square`, `triangle`,\n * and `triangle-down`. Symbols are used internally for point markers, button\n * and label borders and backgrounds, or custom shapes. Extendable by adding to\n * {@link SVGRenderer#symbols}.\n *\n * @typedef {\"arc\"|\"callout\"|\"circle\"|\"diamond\"|\"square\"|\"triangle\"|\"triangle-down\"} Highcharts.SymbolKeyValue\n */\n/**\n * Additional options, depending on the actual symbol drawn.\n *\n * @interface Highcharts.SymbolOptionsObject\n */ /**\n* The anchor X position for the `callout` symbol. This is where the chevron\n* points to.\n*\n* @name Highcharts.SymbolOptionsObject#anchorX\n* @type {number|undefined}\n*/ /**\n* The anchor Y position for the `callout` symbol. This is where the chevron\n* points to.\n*\n* @name Highcharts.SymbolOptionsObject#anchorY\n* @type {number|undefined}\n*/ /**\n* The end angle of an `arc` symbol.\n*\n* @name Highcharts.SymbolOptionsObject#end\n* @type {number|undefined}\n*/ /**\n* Whether to draw `arc` symbol open or closed.\n*\n* @name Highcharts.SymbolOptionsObject#open\n* @type {boolean|undefined}\n*/ /**\n* The radius of an `arc` symbol, or the border radius for the `callout` symbol.\n*\n* @name Highcharts.SymbolOptionsObject#r\n* @type {number|undefined}\n*/ /**\n* The start angle of an `arc` symbol.\n*\n* @name Highcharts.SymbolOptionsObject#start\n* @type {number|undefined}\n*/\n(''); // Keeps doclets above in transpiled file\n\n;// ./code/es5/es-modules/Core/Renderer/HTML/HTMLElement.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar HTMLElement_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n        p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign = (undefined && undefined.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\n\n\nvar composed = Core_Globals.composed;\n\n\nvar HTMLElement_attr = Core_Utilities.attr, HTMLElement_css = Core_Utilities.css, HTMLElement_createElement = Core_Utilities.createElement, HTMLElement_defined = Core_Utilities.defined, HTMLElement_extend = Core_Utilities.extend, HTMLElement_getAlignFactor = Core_Utilities.getAlignFactor, HTMLElement_isNumber = Core_Utilities.isNumber, HTMLElement_pInt = Core_Utilities.pInt, HTMLElement_pushUnique = Core_Utilities.pushUnique;\n/**\n * The opacity and visibility properties are set as attributes on the main\n * element and SVG groups, and as identical CSS properties on the HTML element\n * and the ancestry divs. (#3542)\n *\n * @private\n */\nfunction commonSetter(value, key, elem) {\n    var _a;\n    var style = ((_a = this.div) === null || _a === void 0 ? void 0 : _a.style) || elem.style;\n    SVG_SVGElement.prototype[\"\" + key + \"Setter\"].call(this, value, key, elem);\n    if (style) {\n        style[key] = value;\n    }\n}\n/**\n * Decorate each SVG group in the ancestry line. Each SVG `g` element that\n * contains children with useHTML, will receive a `div` element counterpart to\n * contain the HTML span. These div elements are translated and styled like\n * original `g` counterparts.\n *\n * @private\n */\nvar decorateSVGGroup = function (g, container) {\n    var _a;\n    if (!g.div) {\n        var className = HTMLElement_attr(g.element, 'class'),\n            cssProto_1 = g.css;\n        // Create the parallel HTML group\n        var div_1 = HTMLElement_createElement('div', className ? { className: className } : void 0, __assign(__assign({ \n                // Add HTML specific styles\n                position: 'absolute', left: \"\" + (g.translateX || 0) + \"px\", top: \"\" + (g.translateY || 0) + \"px\" }, g.styles), { \n                // Add g attributes that correspond to CSS\n                display: g.display, opacity: g.opacity, visibility: g.visibility }), \n            // The top group is appended to container\n            ((_a = g.parentGroup) === null || _a === void 0 ? void 0 : _a.div) || container);\n        g.classSetter = function (value, key, element) {\n            element.setAttribute('class', value);\n            div_1.className = value;\n        };\n        /**\n         * Common translate setter for X and Y on the HTML group.\n         *\n         * Reverted the fix for #6957 due to positioning problems and offline\n         * export (#7254, #7280, #7529)\n         * @private\n         */\n        g.translateXSetter = g.translateYSetter = function (value, key) {\n            g[key] = value;\n            div_1.style[key === 'translateX' ? 'left' : 'top'] = \"\" + value + \"px\";\n            g.doTransform = true;\n        };\n        g.opacitySetter = g.visibilitySetter = commonSetter;\n        // Extend the parent group's css function by updating the parallel div\n        // counterpart with the same style.\n        g.css = function (styles) {\n            // Call the base css method. The `parentGroup` can be either an\n            // SVGElement or an SVGLabel, in which the css method is extended\n            // (#19200).\n            cssProto_1.call(g, styles);\n            // #6794\n            if (styles.cursor) {\n                div_1.style.cursor = styles.cursor;\n            }\n            // #18821\n            if (styles.pointerEvents) {\n                div_1.style.pointerEvents = styles.pointerEvents;\n            }\n            return g;\n        };\n        // Event handling\n        g.on = function () {\n            SVG_SVGElement.prototype.on.apply({\n                element: div_1,\n                onEvents: g.onEvents\n            }, arguments);\n            return g;\n        };\n        g.div = div_1;\n    }\n    return g.div;\n};\n/* *\n *\n *  Class\n *\n * */\nvar HTMLElement = /** @class */ (function (_super) {\n    HTMLElement_extends(HTMLElement, _super);\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    function HTMLElement(renderer, nodeName) {\n        var _this = _super.call(this,\n            renderer,\n            nodeName) || this;\n        _this.css(__assign({ position: 'absolute' }, (renderer.styledMode ? {} : {\n            fontFamily: renderer.style.fontFamily,\n            fontSize: renderer.style.fontSize\n        })));\n        return _this;\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * Compose\n     * @private\n     */\n    HTMLElement.compose = function (SVGRendererClass) {\n        if (HTMLElement_pushUnique(composed, this.compose)) {\n            /**\n             * Create a HTML text node. This is used by the SVG renderer `text`\n             * and `label` functions through the `useHTML` parameter.\n             *\n             * @private\n             */\n            SVGRendererClass.prototype.html = function (str, x, y) {\n                return new HTMLElement(this, 'span')\n                    // Set the default attributes\n                    .attr({\n                    text: str,\n                    x: Math.round(x),\n                    y: Math.round(y)\n                });\n            };\n        }\n    };\n    /**\n     * Get the correction in X and Y positioning as the element is rotated.\n     * @private\n     */\n    HTMLElement.prototype.getSpanCorrection = function (width, baseline, alignCorrection) {\n        this.xCorr = -width * alignCorrection;\n        this.yCorr = -baseline;\n    };\n    /**\n     * Apply CSS to HTML elements. This is used in text within SVG rendering.\n     * @private\n     */\n    HTMLElement.prototype.css = function (styles) {\n        var element = this.element, \n            // When setting or unsetting the width style, we need to update\n            // transform (#8809)\n            isSettingWidth = (element.tagName === 'SPAN' &&\n                styles &&\n                'width' in styles),\n            textWidth = isSettingWidth && styles.width;\n        var doTransform;\n        if (isSettingWidth) {\n            delete styles.width;\n            this.textWidth = HTMLElement_pInt(textWidth) || void 0;\n            doTransform = true;\n        }\n        // Some properties require other properties to be set\n        if ((styles === null || styles === void 0 ? void 0 : styles.textOverflow) === 'ellipsis') {\n            styles.overflow = 'hidden';\n        }\n        if (styles === null || styles === void 0 ? void 0 : styles.lineClamp) {\n            styles.display = '-webkit-box';\n            styles.WebkitLineClamp = styles.lineClamp;\n            styles.WebkitBoxOrient = 'vertical';\n            styles.overflow = 'hidden';\n        }\n        // SVG natively supports setting font size as numbers. With HTML, the\n        // font size should behave in the same way (#21624).\n        if (HTMLElement_isNumber(Number(styles === null || styles === void 0 ? void 0 : styles.fontSize))) {\n            styles.fontSize = styles.fontSize + 'px';\n        }\n        HTMLElement_extend(this.styles, styles);\n        HTMLElement_css(element, styles);\n        // Now that all styles are applied, to the transform\n        if (doTransform) {\n            this.updateTransform();\n        }\n        return this;\n    };\n    /**\n     * The useHTML method for calculating the bounding box based on offsets.\n     * Called internally from the `SVGElement.getBBox` function and subsequently\n     * rotated.\n     *\n     * @private\n     */\n    HTMLElement.prototype.htmlGetBBox = function () {\n        var element = this.element;\n        return {\n            x: element.offsetLeft,\n            y: element.offsetTop,\n            width: element.offsetWidth,\n            height: element.offsetHeight\n        };\n    };\n    /**\n     * Batch update styles and attributes related to transform\n     *\n     * @private\n     */\n    HTMLElement.prototype.updateTransform = function () {\n        var _this = this;\n        var _a;\n        // Aligning non added elements is expensive\n        if (!this.added) {\n            this.alignOnAdd = true;\n            return;\n        }\n        var _b = this, element = _b.element, renderer = _b.renderer, rotation = _b.rotation, rotationOriginX = _b.rotationOriginX, rotationOriginY = _b.rotationOriginY, scaleX = _b.scaleX, scaleY = _b.scaleY, styles = _b.styles, _c = _b.textAlign, textAlign = _c === void 0 ? 'left' : _c, textWidth = _b.textWidth, _d = _b.translateX, translateX = _d === void 0 ? 0 : _d, _e = _b.translateY, translateY = _e === void 0 ? 0 : _e, _f = _b.x, x = _f === void 0 ? 0 : _f, _g = _b.y, y = _g === void 0 ? 0 : _g, _h = styles.display, display = _h === void 0 ? 'block' : _h, whiteSpace = styles.whiteSpace;\n        // Get the pixel length of the text\n        var getTextPxLength = function () {\n                if (_this.textPxLength) {\n                    return _this.textPxLength;\n            }\n            // Reset multiline/ellipsis in order to read width (#4928,\n            // #5417)\n            HTMLElement_css(element, {\n                width: '',\n                whiteSpace: whiteSpace || 'nowrap'\n            });\n            return element.offsetWidth;\n        };\n        // Apply translate\n        HTMLElement_css(element, {\n            marginLeft: \"\" + translateX + \"px\",\n            marginTop: \"\" + translateY + \"px\"\n        });\n        if (element.tagName === 'SPAN') {\n            var currentTextTransform = [\n                    rotation,\n                    textAlign,\n                    element.innerHTML,\n                    textWidth,\n                    this.textAlign\n                ].join(','), parentPadding = (((_a = this.parentGroup) === null || _a === void 0 ? void 0 : _a.padding) * -1) || 0;\n            var baseline = void 0;\n            // Update textWidth. Use the memoized textPxLength if possible, to\n            // avoid the getTextPxLength function using elem.offsetWidth.\n            // Calling offsetWidth affects rendering time as it forces layout\n            // (#7656).\n            if (textWidth !== this.oldTextWidth) { // #983, #1254\n                var textPxLength = getTextPxLength(),\n                    textWidthNum = textWidth || 0;\n                if (((textWidthNum > this.oldTextWidth) ||\n                    textPxLength > textWidthNum) && (\n                // Only set the width if the text is able to word-wrap,\n                // or text-overflow is ellipsis (#9537)\n                /[ \\-]/.test(element.textContent || element.innerText) ||\n                    element.style.textOverflow === 'ellipsis')) {\n                    HTMLElement_css(element, {\n                        width: ((textPxLength > textWidthNum) ||\n                            rotation ||\n                            scaleX) ?\n                            textWidth + 'px' :\n                            'auto', // #16261\n                        display: display,\n                        whiteSpace: whiteSpace || 'normal' // #3331\n                    });\n                    this.oldTextWidth = textWidth;\n                }\n            }\n            // Do the calculations and DOM access only if properties changed\n            if (currentTextTransform !== this.cTT) {\n                baseline = renderer.fontMetrics(element).b;\n                // Renderer specific handling of span rotation, but only if we\n                // have something to update.\n                if (HTMLElement_defined(rotation) &&\n                    ((rotation !== (this.oldRotation || 0)) ||\n                        (textAlign !== this.oldAlign))) {\n                    this.setSpanRotation(rotation, parentPadding, parentPadding);\n                }\n                this.getSpanCorrection(\n                // Avoid elem.offsetWidth if we can, it affects rendering\n                // time heavily (#7656)\n                ((!HTMLElement_defined(rotation) &&\n                    !this.textWidth &&\n                    this.textPxLength) || // #7920\n                    element.offsetWidth), baseline, HTMLElement_getAlignFactor(textAlign));\n            }\n            // Apply position with correction and rotation origin\n            var _j = this,\n                _k = _j.xCorr,\n                xCorr = _k === void 0 ? 0 : _k,\n                _l = _j.yCorr,\n                yCorr = _l === void 0 ? 0 : _l,\n                rotOriginX = (rotationOriginX !== null && rotationOriginX !== void 0 ? rotationOriginX : x) - xCorr - x - parentPadding,\n                rotOriginY = (rotationOriginY !== null && rotationOriginY !== void 0 ? rotationOriginY : y) - yCorr - y - parentPadding,\n                styles_1 = {\n                    left: \"\" + (x + xCorr) + \"px\",\n                    top: \"\" + (y + yCorr) + \"px\",\n                    textAlign: textAlign,\n                    transformOrigin: \"\" + rotOriginX + \"px \" + rotOriginY + \"px\"\n                };\n            if (scaleX || scaleY) {\n                styles_1.transform = \"scale(\".concat(scaleX !== null && scaleX !== void 0 ? scaleX : 1, \",\").concat(scaleY !== null && scaleY !== void 0 ? scaleY : 1, \")\");\n            }\n            HTMLElement_css(element, styles_1);\n            // Record current text transform\n            this.cTT = currentTextTransform;\n            this.oldRotation = rotation;\n            this.oldAlign = textAlign;\n        }\n    };\n    /**\n     * Set the rotation of an individual HTML span.\n     * @private\n     */\n    HTMLElement.prototype.setSpanRotation = function (rotation, originX, originY) {\n        // CSS transform and transform-origin both supported without prefix\n        // since Firefox 16 (2012), IE 10 (2012), Chrome 36 (2014), Safari 9\n        // (2015).;\n        HTMLElement_css(this.element, {\n            transform: \"rotate(\".concat(rotation, \"deg)\"),\n            transformOrigin: \"\" + originX + \"% \" + originY + \"px\"\n        });\n    };\n    /**\n     * Add the element to a group wrapper. For HTML elements, a parallel div\n     * will be created for each ancenstor SVG `g` element.\n     *\n     * @private\n     */\n    HTMLElement.prototype.add = function (parentGroup) {\n        var container = this.renderer.box\n                .parentNode,\n            parents = [];\n        var div;\n        this.parentGroup = parentGroup;\n        // Create a parallel divs to hold the HTML elements\n        if (parentGroup) {\n            div = parentGroup.div;\n            if (!div) {\n                // Read the parent chain into an array and read from top\n                // down\n                var svgGroup = parentGroup;\n                while (svgGroup) {\n                    parents.push(svgGroup);\n                    // Move up to the next parent group\n                    svgGroup = svgGroup.parentGroup;\n                }\n                // Decorate each of the ancestor group elements with a parallel\n                // div that reflects translation and styling\n                for (var _i = 0, _a = parents.reverse(); _i < _a.length; _i++) {\n                    var parentGroup_1 = _a[_i];\n                    div = decorateSVGGroup(parentGroup_1, container);\n                }\n            }\n        }\n        (div || container).appendChild(this.element);\n        this.added = true;\n        if (this.alignOnAdd) {\n            this.updateTransform();\n        }\n        return this;\n    };\n    /**\n     * Text setter\n     * @private\n     */\n    HTMLElement.prototype.textSetter = function (value) {\n        if (value !== this.textStr) {\n            delete this.bBox;\n            delete this.oldTextWidth;\n            HTML_AST.setElementHTML(this.element, value !== null && value !== void 0 ? value : '');\n            this.textStr = value;\n            this.doTransform = true;\n        }\n    };\n    /**\n     * Align setter\n     *\n     * @private\n     */\n    HTMLElement.prototype.alignSetter = function (value) {\n        this.alignValue = this.textAlign = value;\n        this.doTransform = true;\n    };\n    /**\n     * Various setters which rely on update transform\n     * @private\n     */\n    HTMLElement.prototype.xSetter = function (value, key) {\n        this[key] = value;\n        this.doTransform = true;\n    };\n    return HTMLElement;\n}(SVG_SVGElement));\n// Some shared setters\nvar proto = HTMLElement.prototype;\nproto.visibilitySetter = proto.opacitySetter = commonSetter;\nproto.ySetter =\n    proto.rotationSetter =\n        proto.rotationOriginXSetter =\n            proto.rotationOriginYSetter = proto.xSetter;\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var HTML_HTMLElement = (HTMLElement);\n\n;// ./code/es5/es-modules/Core/Axis/AxisDefaults.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 *  Namespace\n *\n * */\nvar AxisDefaults;\n(function (AxisDefaults) {\n    /* *\n     *\n     *  Constants\n     *\n     * */\n    /**\n     * The X axis or category axis. Normally this is the horizontal axis,\n     * though if the chart is inverted this is the vertical axis. In case of\n     * multiple axes, the xAxis node is an array of configuration objects.\n     *\n     * See the [Axis class](/class-reference/Highcharts.Axis) for programmatic\n     * access to the axis.\n     *\n     * @productdesc {highmaps}\n     * In Highmaps, the axis is hidden, but it is used behind the scenes to\n     * control features like zooming and panning. Zooming is in effect the same\n     * as setting the extremes of one of the exes.\n     *\n     * @type         {*|Array<*>}\n     * @optionparent xAxis\n     */\n    AxisDefaults.xAxis = {\n        /**\n         * When using multiple axis, the ticks of two or more opposite axes\n         * will automatically be aligned by adding ticks to the axis or axes\n         * with the least ticks, as if `tickAmount` were specified.\n         *\n         * This can be prevented by setting `alignTicks` to false. If the grid\n         * lines look messy, it's a good idea to hide them for the secondary\n         * axis by setting `gridLineWidth` to 0.\n         *\n         * If `startOnTick` or `endOnTick` in an Axis options are set to false,\n         * then the `alignTicks ` will be disabled for the Axis.\n         *\n         * Disabled for logarithmic axes.\n         *\n         * @product   highcharts highstock gantt\n         */\n        alignTicks: true,\n        /**\n         * Whether to allow decimals in this axis' ticks. When counting\n         * integers, like persons or hits on a web page, decimals should\n         * be avoided in the labels. By default, decimals are allowed on small\n         * scale axes.\n         *\n         * @see [minTickInterval](#xAxis.minTickInterval)\n         *\n         * @sample {highcharts|highstock} highcharts/yaxis/allowdecimals-true/\n         *         True by default\n         * @sample {highcharts|highstock} highcharts/yaxis/allowdecimals-false/\n         *         False\n         *\n         * @type      {boolean|undefined}\n         * @default   undefined\n         * @since     2.0\n         */\n        allowDecimals: void 0,\n        /**\n         * When using an alternate grid color, a band is painted across the\n         * plot area between every other grid line.\n         *\n         * @sample {highcharts} highcharts/yaxis/alternategridcolor/\n         *         Alternate grid color on the Y axis\n         * @sample {highstock} stock/xaxis/alternategridcolor/\n         *         Alternate grid color on the Y axis\n         *\n         * @type      {Highcharts.ColorType}\n         * @apioption xAxis.alternateGridColor\n         */\n        /**\n         * An array defining breaks in the axis, the sections defined will be\n         * left out and all the points shifted closer to each other.\n         *\n         * @productdesc {highcharts}\n         * Requires that the broken-axis.js module is loaded.\n         *\n         * @sample {highcharts} highcharts/axisbreak/break-simple/\n         *         Simple break\n         * @sample {highcharts|highstock} highcharts/axisbreak/break-visualized/\n         *         Advanced with callback\n         * @sample {highstock} stock/demo/intraday-breaks/\n         *         Break on nights and weekends\n         *\n         * @type      {Array<*>}\n         * @since     4.1.0\n         * @product   highcharts highstock gantt\n         * @apioption xAxis.breaks\n         */\n        /**\n         * A number indicating how much space should be left between the start\n         * and the end of the break. The break size is given in axis units,\n         * so for instance on a `datetime` axis, a break size of 3600000 would\n         * indicate the equivalent of an hour.\n         *\n         * @type      {number}\n         * @default   0\n         * @since     4.1.0\n         * @product   highcharts highstock gantt\n         * @apioption xAxis.breaks.breakSize\n         */\n        /**\n         * The axis value where the break starts. On datetime axes, this may be\n         * a date string.\n         *\n         * @type      {number|string}\n         * @since     4.1.0\n         * @product   highcharts highstock gantt\n         * @apioption xAxis.breaks.from\n         */\n        /**\n         * Defines an interval after which the break appears again. By default\n         * the breaks do not repeat.\n         *\n         * @type      {number}\n         * @default   0\n         * @since     4.1.0\n         * @product   highcharts highstock gantt\n         * @apioption xAxis.breaks.repeat\n         */\n        /**\n         * The axis value where the break ends. On datetime axes, this may be\n         * a date string.\n         *\n         * @type      {number|string}\n         * @since     4.1.0\n         * @product   highcharts highstock gantt\n         * @apioption xAxis.breaks.to\n         */\n        /**\n         * If categories are present for the xAxis, names are used instead of\n         * numbers for that axis.\n         *\n         * Since Highcharts 3.0, categories can also\n         * be extracted by giving each point a [name](#series.data) and setting\n         * axis [type](#xAxis.type) to `category`. However, if you have multiple\n         * series, best practice remains defining the `categories` array.\n         *\n         * Example: `categories: ['Apples', 'Bananas', 'Oranges']`\n         *\n         * @sample {highcharts} highcharts/demo/line-labels/\n         *         With\n         * @sample {highcharts} highcharts/xaxis/categories/\n         *         Without\n         *\n         * @type      {Array<string>}\n         * @product   highcharts gantt\n         * @apioption xAxis.categories\n         */\n        /**\n         * The highest allowed value for automatically computed axis extremes.\n         *\n         * @see [floor](#xAxis.floor)\n         *\n         * @sample {highcharts|highstock} highcharts/yaxis/floor-ceiling/\n         *         Floor and ceiling\n         *\n         * @type       {number}\n         * @since      4.0\n         * @product    highcharts highstock gantt\n         * @apioption  xAxis.ceiling\n         */\n        /**\n         * A class name that opens for styling the axis by CSS, especially in\n         * Highcharts styled mode. The class name is applied to group elements\n         * for the grid, axis elements and labels.\n         *\n         * @sample {highcharts|highstock|highmaps} highcharts/css/axis/\n         *         Multiple axes with separate styling\n         *\n         * @type      {string}\n         * @since     5.0.0\n         * @apioption xAxis.className\n         */\n        /**\n         * Configure a crosshair that follows either the mouse pointer or the\n         * hovered point.\n         *\n         * In styled mode, the crosshairs are styled in the\n         * `.highcharts-crosshair`, `.highcharts-crosshair-thin` or\n         * `.highcharts-xaxis-category` classes.\n         *\n         * @productdesc {highstock}\n         * In Highcharts stock, by default, the crosshair is enabled on the\n         * X axis and disabled on the Y axis.\n         *\n         * @sample {highcharts} highcharts/xaxis/crosshair-both/\n         *         Crosshair on both axes\n         * @sample {highstock} stock/xaxis/crosshairs-xy/\n         *         Crosshair on both axes, with y axis label\n         * @sample {highmaps} highcharts/xaxis/crosshair-both/\n         *         Crosshair on both axes\n         *\n         * @declare   Highcharts.AxisCrosshairOptions\n         * @type      {boolean|*}\n         * @default   false\n         * @since     4.1\n         * @apioption xAxis.crosshair\n         */\n        /**\n         * The value on a perpendicular axis where this axis should cross. This\n         * is typically used on mathematical plots where the axes cross at 0.\n         * When `crossing` is set, space will not be reserved at the sides of\n         * the chart for axis labels and title, so those may be clipped. In this\n         * case it is better to place the axes without the `crossing` option.\n         *\n         * @type      {number}\n         * @sample    highcharts/xaxis/crossing\n         *            Function plot with axes crossing at 0\n         * @since 11.0.1\n         * @apioption xAxis.crossing\n         */\n        /**\n         * A class name for the crosshair, especially as a hook for styling.\n         *\n         * @type      {string}\n         * @since     5.0.0\n         * @apioption xAxis.crosshair.className\n         */\n        /**\n         * The color of the crosshair. Defaults to `#cccccc` for numeric and\n         * datetime axes, and `rgba(204,214,235,0.25)` for category axes, where\n         * the crosshair by default highlights the whole category.\n         *\n         * @sample {highcharts|highstock|highmaps} highcharts/xaxis/crosshair-customized/\n         *         Customized crosshairs\n         *\n         * @type      {Highcharts.ColorType}\n         * @default   #cccccc\n         * @since     4.1\n         * @apioption xAxis.crosshair.color\n         */\n        /**\n         * The dash style for the crosshair. See\n         * [plotOptions.series.dashStyle](#plotOptions.series.dashStyle)\n         * for possible values.\n         *\n         * @sample {highcharts|highmaps} highcharts/xaxis/crosshair-dotted/\n         *         Dotted crosshair\n         * @sample {highstock} stock/xaxis/crosshair-dashed/\n         *         Dashed X axis crosshair\n         *\n         * @type      {Highcharts.DashStyleValue}\n         * @default   Solid\n         * @since     4.1\n         * @apioption xAxis.crosshair.dashStyle\n         */\n        /**\n         * A label on the axis next to the crosshair.\n         *\n         * In styled mode, the label is styled with the\n         * `.highcharts-crosshair-label` class.\n         *\n         * @sample {highstock} stock/xaxis/crosshair-label/\n         *         Crosshair labels\n         * @sample {highstock} highcharts/css/crosshair-label/\n         *         Style mode\n         *\n         * @declare   Highcharts.AxisCrosshairLabelOptions\n         * @since     2.1\n         * @product   highstock\n         * @apioption xAxis.crosshair.label\n         */\n        /**\n         * Alignment of the label compared to the axis. Defaults to `\"left\"` for\n         * right-side axes, `\"right\"` for left-side axes and `\"center\"` for\n         * horizontal axes.\n         *\n         * @type      {Highcharts.AlignValue}\n         * @since     2.1\n         * @product   highstock\n         * @apioption xAxis.crosshair.label.align\n         */\n        /**\n         * The background color for the label. Defaults to the related series\n         * color, or `#666666` if that is not available.\n         *\n         * @type      {Highcharts.ColorType}\n         * @since     2.1\n         * @product   highstock\n         * @apioption xAxis.crosshair.label.backgroundColor\n         */\n        /**\n         * The border color for the crosshair label\n         *\n         * @type      {Highcharts.ColorType}\n         * @since     2.1\n         * @product   highstock\n         * @apioption xAxis.crosshair.label.borderColor\n         */\n        /**\n         * The border corner radius of the crosshair label.\n         *\n         * @type      {number}\n         * @default   3\n         * @since     2.1.10\n         * @product   highstock\n         * @apioption xAxis.crosshair.label.borderRadius\n         */\n        /**\n         * The border width for the crosshair label.\n         *\n         * @type      {number}\n         * @default   0\n         * @since     2.1\n         * @product   highstock\n         * @apioption xAxis.crosshair.label.borderWidth\n         */\n        /**\n         * Flag to enable crosshair's label.\n         *\n         * @sample {highstock} stock/xaxis/crosshairs-xy/\n         *         Enabled label for yAxis' crosshair\n         *\n         * @type      {boolean}\n         * @default   false\n         * @since     2.1\n         * @product   highstock\n         * @apioption xAxis.crosshair.label.enabled\n         */\n        /**\n         * A format string for the crosshair label. Defaults to `{value}` for\n         * numeric axes and `{value:%b %d, %Y}` for datetime axes.\n         *\n         * @type      {string}\n         * @since     2.1\n         * @product   highstock\n         * @apioption xAxis.crosshair.label.format\n         */\n        /**\n         * Formatter function for the label text.\n         *\n         * @type      {Highcharts.XAxisCrosshairLabelFormatterCallbackFunction}\n         * @since     2.1\n         * @product   highstock\n         * @apioption xAxis.crosshair.label.formatter\n         */\n        /**\n         * Padding inside the crosshair label.\n         *\n         * @type      {number}\n         * @default   8\n         * @since     2.1\n         * @product   highstock\n         * @apioption xAxis.crosshair.label.padding\n         */\n        /**\n         * The shape to use for the label box.\n         *\n         * @type      {string}\n         * @default   callout\n         * @since     2.1\n         * @product   highstock\n         * @apioption xAxis.crosshair.label.shape\n         */\n        /**\n         * Text styles for the crosshair label.\n         *\n         * @type      {Highcharts.CSSObject}\n         * @default   {\"color\": \"white\", \"fontWeight\": \"normal\", \"fontSize\": \"11px\", \"textAlign\": \"center\"}\n         * @since     2.1\n         * @product   highstock\n         * @apioption xAxis.crosshair.label.style\n         */\n        /**\n         * Whether the crosshair should snap to the point or follow the pointer\n         * independent of points.\n         *\n         * @sample {highcharts|highstock} highcharts/xaxis/crosshair-snap-false/\n         *         True by default\n         * @sample {highmaps} maps/demo/latlon-advanced/\n         *         Snap is false\n         *\n         * @type      {boolean}\n         * @default   true\n         * @since     4.1\n         * @apioption xAxis.crosshair.snap\n         */\n        /**\n         * The pixel width of the crosshair. Defaults to 1 for numeric or\n         * datetime axes, and for one category width for category axes.\n         *\n         * @sample {highcharts} highcharts/xaxis/crosshair-customized/\n         *         Customized crosshairs\n         * @sample {highstock} highcharts/xaxis/crosshair-customized/\n         *         Customized crosshairs\n         * @sample {highmaps} highcharts/xaxis/crosshair-customized/\n         *         Customized crosshairs\n         *\n         * @type      {number}\n         * @default   1\n         * @since     4.1\n         * @apioption xAxis.crosshair.width\n         */\n        /**\n         * The Z index of the crosshair. Higher Z indices allow drawing the\n         * crosshair on top of the series or behind the grid lines.\n         *\n         * @type      {number}\n         * @default   2\n         * @since     4.1\n         * @apioption xAxis.crosshair.zIndex\n         */\n        /**\n         * Whether to pan axis. If `chart.panning` is enabled, the option\n         * allows to disable panning on an individual axis.\n         */\n        panningEnabled: true,\n        /**\n         * The Z index for the axis group.\n         *\n         * @see [axis.gridZIndex](#xAxis.gridZIndex)\n         * @see [axis.labels.zIndex](#xAxis.labels.zIndex)\n         */\n        zIndex: 2,\n        /**\n         * Whether to zoom axis. If `chart.zoomType` is set, the option allows\n         * to disable zooming on an individual axis.\n         *\n         * @sample {highcharts} highcharts/xaxis/zoomenabled/\n         *         Zoom enabled is false\n         */\n        zoomEnabled: true,\n        /**\n         * For a datetime axis, the scale will automatically adjust to the\n         * appropriate unit. This member gives the default string\n         * representations used for each unit. For intermediate values,\n         * different units may be used, for example the `day` unit can be used\n         * on midnight and `hour` unit be used for intermediate values on the\n         * same axis.\n         *\n         * For an overview of the string or object configuration, see\n         * [dateFormat](/class-reference/Highcharts.Time#dateFormat).\n         *\n         * Defaults to:\n         * ```js\n         * {\n         *     millisecond: '%[HMSL]',\n         *     second: '%[HMS]',\n         *     minute: '%[HM]',\n         *     hour: '%[HM]',\n         *     day: '%[eb]',\n         *     week: '%[eb]',\n         *     month: '%[bY]',\n         *     year: '%Y'\n         * }\n         * ```\n         *\n         * @sample {highcharts} highcharts/xaxis/datetimelabelformats-object/\n         *         Object day format on X axis\n         * @sample {highcharts} highcharts/xaxis/datetimelabelformats/\n         *         String day format on X axis\n         * @sample {highstock} stock/xaxis/datetimelabelformats/\n         *         More information in x axis labels\n         *\n         * @declare Highcharts.AxisDateTimeLabelFormatsOptions\n         * @product highcharts highstock gantt\n         */\n        dateTimeLabelFormats: {\n            /**\n             * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject\n             * @type {string|*}\n             */\n            millisecond: {\n                /**\n                 * @type {Array<string|Highcharts.DateTimeFormatOptions>}\n                 * @default undefined\n                 * @apioption xAxis.dateTimeLabelFormats.millisecond.list\n                 */\n                /**\n                 * @type {string|Highcharts.DateTimeFormatOptions}\n                 * @apioption xAxis.dateTimeLabelFormats.millisecond.main\n                 */\n                main: '%[HMSL]',\n                range: false\n            },\n            /**\n             * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject\n             * @type {string|*}\n             */\n            second: {\n                /**\n                 * @type {Array<string|Highcharts.DateTimeFormatOptions>}\n                 * @default undefined\n                 * @apioption xAxis.dateTimeLabelFormats.second.list\n                 */\n                /**\n                 * @type {string|Highcharts.DateTimeFormatOptions}\n                 * @apioption xAxis.dateTimeLabelFormats.second.main\n                 */\n                main: '%[HMS]',\n                range: false\n            },\n            /**\n             * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject\n             * @type {string|*}\n             */\n            minute: {\n                /**\n                 * @type {Array<string|Highcharts.DateTimeFormatOptions>}\n                 * @default undefined\n                 * @apioption xAxis.dateTimeLabelFormats.minute.list\n                 */\n                /**\n                 * @type {string|Highcharts.DateTimeFormatOptions}\n                 * @apioption xAxis.dateTimeLabelFormats.minute.main\n                 */\n                main: '%[HM]',\n                range: false\n            },\n            /**\n             * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject\n             * @type {string|*}\n             */\n            hour: {\n                /**\n                 * @type {Array<string|Highcharts.DateTimeFormatOptions>}\n                 * @default undefined\n                 * @apioption xAxis.dateTimeLabelFormats.hour.list\n                 */\n                /**\n                 * @type {string|Highcharts.DateTimeFormatOptions}\n                 * @apioption xAxis.dateTimeLabelFormats.hour.main\n                 */\n                main: '%[HM]',\n                range: false\n            },\n            /**\n             * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject\n             * @type {string|*}\n             */\n            day: {\n                /**\n                 * @type {Array<string|Highcharts.DateTimeFormatOptions>}\n                 * @default undefined\n                 * @apioption xAxis.dateTimeLabelFormats.day.list\n                 */\n                /**\n                 * @type {string|Highcharts.DateTimeFormatOptions}\n                 * @apioption xAxis.dateTimeLabelFormats.day.main\n                 */\n                main: '%[eb]'\n            },\n            /**\n             * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject\n             * @type {string|*}\n             */\n            week: {\n                /**\n                 * @type {Array<string|Highcharts.DateTimeFormatOptions>}\n                 * @default undefined\n                 * @apioption xAxis.dateTimeLabelFormats.week.list\n                 */\n                /**\n                 * @type {string|Highcharts.DateTimeFormatOptions}\n                 * @apioption xAxis.dateTimeLabelFormats.week.main\n                 */\n                main: '%[eb]'\n            },\n            /**\n             * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject\n             * @type {string|*}\n             */\n            month: {\n                /**\n                 * @type {Array<string|Highcharts.DateTimeFormatOptions>}\n                 * @default undefined\n                 * @apioption xAxis.dateTimeLabelFormats.month.list\n                 */\n                /**\n                 * @type {string|Highcharts.DateTimeFormatOptions}\n                 * @apioption xAxis.dateTimeLabelFormats.month.main\n                 */\n                main: '%[bY]'\n            },\n            /**\n             * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject\n             * @type {string|*}\n             */\n            year: {\n                /**\n                 * @type {Array<string|Highcharts.DateTimeFormatOptions>}\n                 * @default undefined\n                 * @apioption xAxis.dateTimeLabelFormats.year.list\n                 */\n                /**\n                 * @type {string|Highcharts.DateTimeFormatOptions}\n                 * @apioption xAxis.dateTimeLabelFormats.year.main\n                 */\n                main: '%Y'\n            }\n        },\n        /**\n         * Whether to force the axis to end on a tick. Use this option with\n         * the `maxPadding` option to control the axis end.\n         *\n         * @productdesc {highstock}\n         * In Highcharts Stock, `endOnTick` is always `false` when the navigator\n         * is enabled, to prevent jumpy scrolling. With disabled navigator\n         * enabling `endOnTick` may lead to extending the xAxis to show the last\n         * tick, therefore range selector buttons may not have an active state\n         * if the axis gets extended.\n         *\n         * @sample {highcharts} highcharts/yaxis/endontick/\n         *         True by default\n         * @sample {highcharts} highcharts/yaxis/endontick-false/\n         *         False\n         * @sample {highstock} stock/demo/basic-line/\n         *         True by default\n         * @sample {highstock} stock/xaxis/endontick/\n         *         False\n         *\n         * @since 1.2.0\n         */\n        endOnTick: false,\n        /**\n         * Event handlers for the axis.\n         *\n         * @type      {*}\n         * @apioption xAxis.events\n         */\n        /**\n         * An event fired after the breaks have rendered.\n         *\n         * @see [breaks](#xAxis.breaks)\n         *\n         * @sample {highcharts} highcharts/axisbreak/break-event/\n         *         AfterBreak Event\n         *\n         * @type      {Highcharts.AxisEventCallbackFunction}\n         * @since     4.1.0\n         * @product   highcharts gantt\n         * @apioption xAxis.events.afterBreaks\n         */\n        /**\n         * As opposed to the `setExtremes` event, this event fires after the\n         * final min and max values are computed and corrected for `minRange`.\n         *\n         * Fires when the minimum and maximum is set for the axis, either by\n         * calling the `.setExtremes()` method or by selecting an area in the\n         * chart. One parameter, `event`, is passed to the function, containing\n         * common event information.\n         *\n         * The new user set minimum and maximum values can be found by\n         * `event.min` and `event.max`. These reflect the axis minimum and\n         * maximum in axis values. The actual data extremes are found in\n         * `event.dataMin` and `event.dataMax`.\n         *\n         * @type      {Highcharts.AxisSetExtremesEventCallbackFunction}\n         * @since     2.3\n         * @context   Highcharts.Axis\n         * @apioption xAxis.events.afterSetExtremes\n         */\n        /**\n         * An event fired when a break from this axis occurs on a point.\n         *\n         * @see [breaks](#xAxis.breaks)\n         *\n         * @sample {highcharts} highcharts/axisbreak/break-visualized/\n         *         Visualization of a Break\n         *\n         * @type      {Highcharts.AxisPointBreakEventCallbackFunction}\n         * @since     4.1.0\n         * @product   highcharts gantt\n         * @context   Highcharts.Axis\n         * @apioption xAxis.events.pointBreak\n         */\n        /**\n         * An event fired when a point falls inside a break from this axis.\n         *\n         * @type      {Highcharts.AxisPointBreakEventCallbackFunction}\n         * @product   highcharts highstock gantt\n         * @context   Highcharts.Axis\n         * @apioption xAxis.events.pointInBreak\n         */\n        /**\n         * An event fired when a point is outside a break after zoom.\n         *\n         * @type      {Highcharts.AxisPointBreakEventCallbackFunction}\n         * @product   highcharts highstock gantt\n         * @context   Highcharts.Axis\n         * @apioption xAxis.events.pointBreakOut\n         */\n        /**\n         * Fires when the minimum and maximum is set for the axis, either by\n         * calling the `.setExtremes()` method or by selecting an area in the\n         * chart. One parameter, `event`, is passed to the function,\n         * containing common event information.\n         *\n         * The new user set minimum and maximum values can be found by\n         * `event.min` and `event.max`. These reflect the axis minimum and\n         * maximum in data values. When an axis is zoomed all the way out from\n         * the \"Reset zoom\" button, `event.min` and `event.max` are null, and\n         * the new extremes are set based on `this.dataMin` and `this.dataMax`.\n         *\n         * @sample {highstock} stock/xaxis/events-setextremes/\n         *         Log new extremes on x axis\n         *\n         * @type      {Highcharts.AxisSetExtremesEventCallbackFunction}\n         * @since     1.2.0\n         * @context   Highcharts.Axis\n         * @apioption xAxis.events.setExtremes\n         */\n        /**\n         * The lowest allowed value for automatically computed axis extremes.\n         *\n         * @see [ceiling](#yAxis.ceiling)\n         *\n         * @sample {highcharts} highcharts/yaxis/floor-ceiling/\n         *         Floor and ceiling\n         * @sample {highstock} stock/demo/lazy-loading/\n         *         Prevent negative stock price on Y axis\n         *\n         * @type      {number}\n         * @since     4.0\n         * @product   highcharts highstock gantt\n         * @apioption xAxis.floor\n         */\n        /**\n         * The dash or dot style of the grid lines. For possible values, see\n         * [this demonstration](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/plotoptions/series-dashstyle-all/).\n         *\n         * @sample {highcharts} highcharts/yaxis/gridlinedashstyle/\n         *         Long dashes\n         * @sample {highstock} stock/xaxis/gridlinedashstyle/\n         *         Long dashes\n         *\n         * @type      {Highcharts.DashStyleValue}\n         * @since     1.2\n         */\n        gridLineDashStyle: 'Solid',\n        /**\n         * The Z index of the grid lines.\n         *\n         * @sample {highcharts|highstock} highcharts/xaxis/gridzindex/\n         *         A Z index of 4 renders the grid above the graph\n         *\n         * @product   highcharts highstock gantt\n         *\n         * @see [axis.zIndex](#xAxis.zIndex)\n         * @see [axis.labels.zIndex](#xAxis.labels.zIndex)\n         */\n        gridZIndex: 1,\n        /**\n         * An id for the axis. This can be used after render time to get\n         * a pointer to the axis object through `chart.get()`.\n         *\n         * @sample {highcharts} highcharts/xaxis/id/\n         *         Get the object\n         * @sample {highstock} stock/xaxis/id/\n         *         Get the object\n         *\n         * @type      {string}\n         * @since     1.2.0\n         * @apioption xAxis.id\n         */\n        /**\n         * The axis labels show the number or category for each tick.\n         *\n         * Since v8.0.0: Labels are animated in categorized x-axis with\n         * updating data if `tickInterval` and `step` is set to 1.\n         *\n         * @productdesc {highmaps}\n         * X and Y axis labels are by default disabled in Highmaps, but the\n         * functionality is inherited from Highcharts and used on `colorAxis`,\n         * and can be enabled on X and Y axes too.\n         */\n        labels: {\n            /**\n             * What part of the string the given position is anchored to.\n             * If `left`, the left side of the string is at the axis position.\n             * Can be one of `\"left\"`, `\"center\"` or `\"right\"`. Defaults to\n             * an intelligent guess based on which side of the chart the axis\n             * is on and the rotation of the label.\n             *\n             * @see [reserveSpace](#xAxis.labels.reserveSpace)\n             *\n             * @sample {highcharts} highcharts/xaxis/labels-align-left/\n             *         Left\n             * @sample {highcharts} highcharts/xaxis/labels-align-right/\n             *         Right\n             * @sample {highcharts} highcharts/xaxis/labels-reservespace-true/\n             *         Left-aligned labels on a vertical category axis\n             *\n             * @type      {Highcharts.AlignValue}\n             * @apioption xAxis.labels.align\n             */\n            /**\n             * Whether to allow the axis labels to overlap. When false,\n             * overlapping labels are hidden.\n             *\n             * @sample {highcharts} highcharts/xaxis/labels-allowoverlap-true/\n             *         X axis labels overlap enabled\n             *\n             * @type      {boolean}\n             * @default   false\n             * @apioption xAxis.labels.allowOverlap\n             */\n            /**\n             * For horizontal axes, the allowed degrees of label rotation\n             * to prevent overlapping labels. If there is enough space,\n             * labels are not rotated. As the chart gets narrower, it\n             * will start rotating the labels -45 degrees, then remove\n             * every second label and try again with rotations 0 and -45 etc.\n             * Set it to `undefined` to disable rotation, which will\n             * cause the labels to word-wrap if possible. Defaults to `[-45]``\n             * on bottom and top axes, `undefined` on left and right axes.\n             *\n             * @sample {highcharts|highstock} highcharts/xaxis/labels-autorotation-default/\n             *         Default auto rotation of 0 or -45\n             * @sample {highcharts|highstock} highcharts/xaxis/labels-autorotation-0-90/\n             *         Custom graded auto rotation\n             *\n             * @type      {Array<number>}\n             * @default   undefined\n             * @since     4.1.0\n             * @product   highcharts highstock gantt\n             * @apioption xAxis.labels.autoRotation\n             */\n            /**\n             * When each category width is more than this many pixels, we don't\n             * apply auto rotation. Instead, we lay out the axis label with word\n             * wrap. A lower limit makes sense when the label contains multiple\n             * short words that don't extend the available horizontal space for\n             * each label.\n             *\n             * @sample {highcharts} highcharts/xaxis/labels-autorotationlimit/\n             *         Lower limit\n             *\n             * @since     4.1.5\n             * @product   highcharts gantt\n             */\n            autoRotationLimit: 80,\n            /**\n             * The label's pixel distance from the perimeter of the plot area.\n             * On cartesian charts, this is overridden if the `labels.y` setting\n             * is set.\n             *\n             * @sample {highcharts} highcharts/yaxis/labels-distance/\n             *         Polar chart, labels centered under the arc\n             *\n             * @type      {number}\n             * @product   highcharts gantt\n             */\n            distance: 15,\n            /**\n             * Enable or disable the axis labels.\n             *\n             * @sample {highcharts} highcharts/xaxis/labels-enabled/\n             *         X axis labels disabled\n             * @sample {highstock} stock/xaxis/labels-enabled/\n             *         X axis labels disabled\n             *\n             */\n            enabled: true,\n            /**\n             * A format string for the axis label. The context is available as\n             * format string variables. For example, you can use `{text}` to\n             * insert the default formatted text. The recommended way of adding\n             * units for the label is using `text`, for example `{text} km`.\n             *\n             * To add custom numeric or datetime formatting, use `{value}` with\n             * formatting, for example `{value:.1f}` or `{value:%Y-%m-%d}`.\n             *\n             * See\n             * [format string](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting)\n             * for more examples of formatting.\n             *\n             * The default value is not specified due to the dynamic\n             * nature of the default implementation.\n             *\n             * @sample {highcharts|highstock} highcharts/yaxis/labels-format/\n             *         Add units to Y axis label\n             * @sample {highcharts} highcharts/xaxis/labels-format-linked/\n             *         Linked category names\n             * @sample {highcharts} highcharts/xaxis/labels-format-custom/\n             *         Custom number format\n             *\n             * @type      {string}\n             * @since     3.0\n             * @apioption xAxis.labels.format\n             */\n            /**\n             * Callback JavaScript function to format the label. The value\n             * is given by `this.value`. Additional properties for `this` are\n             * `axis`, `chart`, `isFirst`, `isLast` and `text` which holds the\n             * value of the default formatter.\n             *\n             * Defaults to a built in function returning a formatted string\n             * depending on whether the axis is `category`, `datetime`,\n             * `numeric` or other.\n             *\n             * @sample {highcharts} highcharts/xaxis/labels-formatter-linked/\n             *         Linked category names\n             * @sample {highcharts} highcharts/xaxis/labels-formatter-extended/\n             *         Modified numeric labels\n             * @sample {highstock} stock/xaxis/labels-formatter/\n             *         Added units on Y axis\n             *\n             * @type      {Highcharts.AxisLabelsFormatterCallbackFunction}\n             * @apioption xAxis.labels.formatter\n             */\n            /**\n             * The number of pixels to indent the labels per level in a treegrid\n             * axis.\n             *\n             * @sample gantt/treegrid-axis/demo\n             *         Indentation 10px by default.\n             * @sample gantt/treegrid-axis/indentation-0px\n             *         Indentation set to 0px.\n             *\n             * @product gantt\n             */\n            indentation: 10,\n            /**\n             * Horizontal axis only. When `staggerLines` is not set,\n             * `maxStaggerLines` defines how many lines the axis is allowed to\n             * add to automatically avoid overlapping X labels. Set to `1` to\n             * disable overlap detection.\n             *\n             * @deprecated\n             * @type      {number}\n             * @default   5\n             * @since     1.3.3\n             * @apioption xAxis.labels.maxStaggerLines\n             */\n            /**\n             * How to handle overflowing labels on horizontal axis. If set to\n             * `\"allow\"`, it will not be aligned at all. By default it\n             * `\"justify\"` labels inside the chart area. If there is room to\n             * move it, it will be aligned to the edge, else it will be removed.\n             *\n             * @since      2.2.5\n             * @validvalue [\"allow\", \"justify\"]\n             */\n            overflow: 'justify',\n            /**\n             * The pixel padding for axis labels, to ensure white space between\n             * them. Defaults to 4 for horizontal axes, 1 for vertical.\n             *\n             * @type      {number}\n             * @default   undefined\n             * @product   highcharts gantt\n             * @apioption xAxis.labels.padding\n             */\n            /**\n             * Whether to reserve space for the labels. By default, space is\n             * reserved for the labels in these cases:\n             *\n             * * On all horizontal axes.\n             * * On vertical axes if `label.align` is `right` on a left-side\n             * axis or `left` on a right-side axis.\n             * * On vertical axes if `label.align` is `center`.\n             *\n             * This can be turned off when for example the labels are rendered\n             * inside the plot area instead of outside.\n             *\n             * @see [labels.align](#xAxis.labels.align)\n             *\n             * @sample {highcharts} highcharts/xaxis/labels-reservespace/\n             *         No reserved space, labels inside plot\n             * @sample {highcharts} highcharts/xaxis/labels-reservespace-true/\n             *         Left-aligned labels on a vertical category axis\n             *\n             * @type      {boolean}\n             * @since     4.1.10\n             * @product   highcharts highstock gantt\n             * @apioption xAxis.labels.reserveSpace\n             */\n            reserveSpace: void 0,\n            /**\n             * Rotation of the labels in degrees. When `undefined`, the\n             * `autoRotation` option takes precedence.\n             *\n             * @sample {highcharts} highcharts/xaxis/labels-rotation/\n             *         X axis labels rotated 90°\n             *\n             * @type      {number}\n             * @default   0\n             * @apioption xAxis.labels.rotation\n             */\n            rotation: void 0,\n            /**\n             * Horizontal axes only. The number of lines to spread the labels\n             * over to make room or tighter labels. 0 disables staggering.\n             *\n             * @sample {highcharts} highcharts/xaxis/labels-staggerlines/\n             *         Show labels over two lines\n             * @sample {highstock} stock/xaxis/labels-staggerlines/\n             *         Show labels over two lines\n             *\n             * @since     2.1\n             */\n            staggerLines: 0,\n            /**\n             * To show only every _n_'th label on the axis, set the step to _n_.\n             * Setting the step to 2 shows every other label.\n             *\n             * By default, when 0, the step is calculated automatically to avoid\n             * overlap. To prevent this, set it to 1\\. This usually only\n             * happens on a category axis, and is often a sign that you have\n             * chosen the wrong axis type.\n             *\n             * Read more at\n             * [Axis docs](https://www.highcharts.com/docs/chart-concepts/axes)\n             * => What axis should I use?\n             *\n             * @sample {highcharts} highcharts/xaxis/labels-step/\n             *         Showing only every other axis label on a categorized\n             *         x-axis\n             * @sample {highcharts} highcharts/xaxis/labels-step-auto/\n             *         Auto steps on a category axis\n             *\n             * @since     2.1\n             */\n            step: 0,\n            /**\n             * Whether to [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n             * to render the labels.\n             */\n            useHTML: false,\n            /**\n             * The x position offset of all labels relative to the tick\n             * positions on the axis. Overrides the `labels.distance` option.\n             *\n             * @type      {number}\n             * @apioption xAxis.labels.x\n             */\n            /**\n             * The y position offset of all labels relative to the tick\n             * positions on the axis. Overrides the `labels.distance` option.\n             *\n             * @sample {highcharts} highcharts/xaxis/labels-x/\n             *         X axis labels placed on grid lines\n             *\n             * @type      {number}\n             * @apioption xAxis.labels.y\n             */\n            /**\n             * The Z index for the axis labels.\n             *\n             * @see [axis.zIndex](#xAxis.zIndex)\n             * @see [axis.gridZIndex](#xAxis.gridZIndex)\n             */\n            zIndex: 7,\n            /**\n             * CSS styles for the label. Use `lineClamp` to control wrapping of\n             * category labels. Use `textOverflow: 'none'` to prevent ellipsis\n             * (dots).\n             *\n             * In styled mode, the labels are styled with the\n             * `.highcharts-axis-labels` class.\n             *\n             * @sample {highcharts} highcharts/xaxis/labels-style/\n             *         Red X axis labels\n             *\n             * @type      {Highcharts.CSSObject}\n             */\n            style: {\n                /** @internal */\n                color: \"#333333\" /* Palette.neutralColor80 */,\n                /** @internal */\n                cursor: 'default',\n                /**\n                 * @type {number|string}\n                 */\n                fontSize: '0.8em',\n                /** @internal */\n                textOverflow: 'ellipsis'\n            }\n        },\n        /**\n         * The left position as the horizontal axis. If it's a number, it is\n         * interpreted as pixel position relative to the chart.\n         *\n         * Since Highcharts v5.0.13: If it's a percentage string, it is\n         * interpreted as percentages of the plot width, offset from plot area\n         * left.\n         *\n         * @sample {highcharts} highcharts/xaxis/axis-position-properties\n         *         Different axis position properties\n         *\n         * @type      {number|string}\n         * @product   highcharts highstock\n         * @apioption xAxis.left\n         */\n        /**\n         * The top position as the vertical axis. If it's a number, it is\n         * interpreted as pixel position relative to the chart.\n         *\n         * Since Highcharts 2: If it's a percentage string, it is interpreted\n         * as percentages of the plot height, offset from plot area top.\n         *\n         * @sample {highcharts} highcharts/xaxis/axis-position-properties\n         *         Different axis position properties\n         *\n         * @type      {number|string}\n         * @product   highcharts highstock\n         * @apioption xAxis.top\n         */\n        /**\n         * Index of another axis that this axis is linked to. When an axis is\n         * linked to a master axis, it will take the same extremes as\n         * the master, but as assigned by min or max or by setExtremes.\n         * It can be used to show additional info, or to ease reading the\n         * chart by duplicating the scales.\n         *\n         * @sample {highcharts} highcharts/xaxis/linkedto/\n         *         Different string formats of the same date\n         * @sample {highcharts} highcharts/yaxis/linkedto/\n         *         Y values on both sides\n         *\n         * @type      {number}\n         * @since     2.0.2\n         * @product   highcharts highstock gantt\n         * @apioption xAxis.linkedTo\n         */\n        /**\n         * The maximum value of the axis. If `undefined`, the max value is\n         * automatically calculated.\n         *\n         * If a datetime string is passed, it is parsed into epoch time\n         * according to the time zone given in [time.timezone](#time.timezone).\n         *\n         * If the [endOnTick](#yAxis.endOnTick) option is true, the `max` value\n         * might be rounded up.\n         *\n         * If a [tickAmount](#yAxis.tickAmount) is set, the axis may be extended\n         * beyond the set max in order to reach the given number of ticks. The\n         * same may happen in a chart with multiple axes, determined by [chart.\n         * alignTicks](#chart), where a `tickAmount` is applied internally.\n         *\n         * @sample {highcharts} highcharts/yaxis/max-200/\n         *         Y axis max of 200\n         * @sample {highcharts} highcharts/yaxis/max-logarithmic/\n         *         Y axis max on logarithmic axis\n         * @sample {highstock} stock/xaxis/min-max/\n         *         Fixed min and max on X axis\n         *\n         * @type      {number|string|null}\n         * @apioption xAxis.max\n         */\n        /**\n         * Padding of the max value relative to the length of the axis. A\n         * padding of 0.05 will make a 100px axis 5px longer. This is useful\n         * when you don't want the highest data value to appear on the edge\n         * of the plot area. When the axis' `max` option is set or a max extreme\n         * is set using `axis.setExtremes()`, the maxPadding will be ignored.\n         *\n         * @productdesc {highstock}\n         * For an [ordinal](#xAxis.ordinal) axis, `minPadding` and `maxPadding`\n         * are ignored. Use [overscroll](#xAxis.overscroll) instead.\n         *\n         * @sample {highcharts} highcharts/yaxis/maxpadding/\n         *         Max padding of 0.25 on y axis\n         * @sample {highstock} stock/xaxis/minpadding-maxpadding/\n         *         Greater min- and maxPadding\n         * @sample {highmaps} maps/chart/plotbackgroundcolor-gradient/\n         *         Add some padding\n         *\n         * @default   {highcharts} 0.01\n         * @default   {highstock|highmaps} 0\n         * @since     1.2.0\n         */\n        maxPadding: 0.01,\n        /**\n         * Deprecated. Use `minRange` instead.\n         *\n         * @deprecated\n         * @type      {number}\n         * @product   highcharts highstock\n         * @apioption xAxis.maxZoom\n         */\n        /**\n         * The minimum value of the axis. If `undefined`, the min value is\n         * automatically calculated.\n         *\n         * If a datetime string is passed, it is parsed into epoch time\n         * according to the time zone given in [time.timezone](#time.timezone).\n         *\n         * If the [startOnTick](#yAxis.startOnTick) option is true (default),\n         * the `min` value might be rounded down.\n         *\n         * The automatically calculated minimum value is also affected by\n         * [floor](#yAxis.floor), [softMin](#yAxis.softMin),\n         * [minPadding](#yAxis.minPadding), [minRange](#yAxis.minRange)\n         * as well as [series.threshold](#plotOptions.series.threshold)\n         * and [series.softThreshold](#plotOptions.series.softThreshold).\n         *\n         * @sample {highcharts} highcharts/yaxis/min-startontick-false/\n         *         -50 with startOnTick to false\n         * @sample {highcharts} highcharts/yaxis/min-startontick-true/\n         *         -50 with startOnTick true by default\n         * @sample {highstock} stock/xaxis/min-max/\n         *         Set min and max on X axis\n         *\n         * @type      {number|string|null}\n         * @apioption xAxis.min\n         */\n        /**\n         * The dash or dot style of the minor grid lines. For possible values,\n         * see [this demonstration](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/plotoptions/series-dashstyle-all/).\n         *\n         * @sample {highcharts} highcharts/yaxis/minorgridlinedashstyle/\n         *         Long dashes on minor grid lines\n         * @sample {highstock} stock/xaxis/minorgridlinedashstyle/\n         *         Long dashes on minor grid lines\n         *\n         * @type      {Highcharts.DashStyleValue}\n         * @since     1.2\n         */\n        minorGridLineDashStyle: 'Solid',\n        /**\n         * Specific tick interval in axis units for the minor ticks. On a linear\n         * axis, if `\"auto\"`, the minor tick interval is calculated as a fifth\n         * of the tickInterval. If `undefined`, minor ticks are not shown.\n         *\n         * On logarithmic axes, the unit is the power of the value. For example,\n         * setting the minorTickInterval to 1 puts one tick on each of 0.1, 1,\n         * 10, 100 etc. Setting the minorTickInterval to 0.1 produces 9 ticks\n         * between 1 and 10, 10 and 100 etc.\n         *\n         * If user settings dictate minor ticks to become too dense, they don't\n         * make sense, and will be ignored to prevent performance problems.\n         *\n         * @sample {highcharts} highcharts/yaxis/minortickinterval-null/\n         *         Undefined by default\n         * @sample {highcharts} highcharts/yaxis/minortickinterval-5/ 5 units\n         * @sample {highcharts} highcharts/yaxis/minortickinterval-log-auto/\n         *         \"auto\"\n         * @sample {highcharts} highcharts/yaxis/minortickinterval-log/ 0.1\n         * @sample {highstock} stock/demo/basic-line/ Null by default\n         * @sample {highstock} stock/xaxis/minortickinterval-auto/ \"auto\"\n         *\n         * @type      {number|'auto'}\n         * @apioption xAxis.minorTickInterval\n         */\n        /**\n         * The pixel length of the minor tick marks.\n         *\n         * @sample {highcharts} highcharts/yaxis/minorticklength/\n         *         10px on Y axis\n         * @sample {highstock} stock/xaxis/minorticks/\n         *         10px on Y axis\n         */\n        minorTickLength: 2,\n        /**\n         * The position of the minor tick marks relative to the axis line.\n         *  Can be one of `inside` and `outside`.\n         *\n         * @sample {highcharts} highcharts/yaxis/minortickposition-outside/\n         *         Outside by default\n         * @sample {highcharts} highcharts/yaxis/minortickposition-inside/\n         *         Inside\n         * @sample {highstock} stock/xaxis/minorticks/\n         *         Inside\n         *\n         * @validvalue [\"inside\", \"outside\"]\n         */\n        minorTickPosition: 'outside',\n        /**\n         * Enable or disable minor ticks. The interval between the minor ticks\n         * can be controlled either by the\n         * [minorTicksPerMajor](#xAxis.minorTicksPerMajor) setting, or as an\n         * absolute [minorTickInterval](#xAxis.minorTickInterval) value.\n         *\n         * On a logarithmic axis, minor ticks are laid out based on a best\n         * guess, attempting to enter an approximate number of minor ticks\n         * between each major tick based on\n         * [minorTicksPerMajor](#xAxis.minorTicksPerMajor).\n         *\n         * Prior to v6.0.0, ticks were enabled in auto layout by setting\n         * `minorTickInterval` to `\"auto\"`.\n         *\n         * @productdesc {highcharts} On axes using\n         * [categories](#xAxis.categories), minor ticks are not supported.\n         *\n         * @sample {highcharts} highcharts/yaxis/minorticks-true/ Enabled on\n         *         linear Y axis\n         *\n         * @type      {boolean}\n         * @default   false\n         * @since     6.0.0\n         * @apioption xAxis.minorTicks\n         */\n        /**\n         * The number of minor ticks per major tick. Works for `linear`,\n         * `logarithmic` and `datetime` axes.\n         *\n         * @sample {highcharts} highcharts/yaxis/minortickspermajor/\n         *         2 minor ticks per major tick on Y axis\n         *\n         * @since  11.0.0\n         *\n         * @type {number}\n         */\n        minorTicksPerMajor: 5,\n        /**\n         * The pixel width of the minor tick mark.\n         *\n         * @sample {highcharts} highcharts/yaxis/minortickwidth/\n         *         3px width\n         * @sample {highstock} stock/xaxis/minorticks/\n         *         1px width\n         *\n         * @type      {number}\n         * @default   0\n         * @apioption xAxis.minorTickWidth\n         */\n        /**\n         * Padding of the min value relative to the length of the axis. A\n         * padding of 0.05 will make a 100px axis 5px longer. This is useful\n         * when you don't want the lowest data value to appear on the edge\n         * of the plot area. When the axis' `min` option is set or a min extreme\n         * is set using `axis.setExtremes()`, the minPadding will be ignored.\n         *\n         * @productdesc {highstock}\n         * For an [ordinal](#xAxis.ordinal) axis, `minPadding` and `maxPadding`\n         * are ignored. Use [overscroll](#xAxis.overscroll) instead.\n         *\n         * @sample {highcharts} highcharts/yaxis/minpadding/\n         *         Min padding of 0.2\n         * @sample {highstock} stock/xaxis/minpadding-maxpadding/\n         *         Greater min- and maxPadding\n         * @sample {highmaps} maps/chart/plotbackgroundcolor-gradient/\n         *         Add some padding\n         *\n         * @default    {highcharts} 0.01\n         * @default    {highstock|highmaps} 0\n         * @since      1.2.0\n         * @product    highcharts highstock gantt\n         */\n        minPadding: 0.01,\n        /**\n         * The minimum range to display on this axis. The entire axis will not\n         * be allowed to span over a smaller interval than this. For example,\n         * for a datetime axis the main unit is milliseconds. If minRange is\n         * set to 3600000, you can't zoom in more than to one hour.\n         *\n         * The default minRange for the x axis is five times the smallest\n         * interval between any of the data points.\n         *\n         * On a logarithmic axis, the unit for the minimum range is the power.\n         * So a minRange of 1 means that the axis can be zoomed to 10-100,\n         * 100-1000, 1000-10000 etc.\n         *\n         * **Note**: The `minPadding`, `maxPadding`, `startOnTick` and\n         * `endOnTick` settings also affect how the extremes of the axis\n         * are computed.\n         *\n         * @sample {highcharts} highcharts/xaxis/minrange/\n         *         Minimum range of 5\n         * @sample {highstock} stock/xaxis/minrange/\n         *         Max zoom of 6 months overrides user selections\n         *\n         * @type      {number}\n         * @apioption xAxis.minRange\n         */\n        /**\n         * The minimum tick interval allowed in axis values. For example on\n         * zooming in on an axis with daily data, this can be used to prevent\n         * the axis from showing hours. Defaults to the closest distance between\n         * two points on the axis.\n         *\n         * @type      {number}\n         * @since     2.3.0\n         * @apioption xAxis.minTickInterval\n         */\n        /**\n         * The distance in pixels from the plot area to the axis line.\n         * A positive offset moves the axis with it's line, labels and ticks\n         * away from the plot area. This is typically used when two or more\n         * axes are displayed on the same side of the plot. With multiple\n         * axes the offset is dynamically adjusted to avoid collision, this\n         * can be overridden by setting offset explicitly.\n         *\n         * @sample {highcharts} highcharts/yaxis/offset/\n         *         Y axis offset of 70\n         * @sample {highcharts} highcharts/yaxis/offset-centered/\n         *         Axes positioned in the center of the plot\n         * @sample {highstock} stock/xaxis/offset/\n         *         Y axis offset by 70 px\n         *\n         * @type {number}\n         */\n        offset: void 0,\n        /**\n         * Whether to display the axis on the opposite side of the normal. The\n         * normal is on the left side for vertical axes and bottom for\n         * horizontal, so the opposite sides will be right and top respectively.\n         * This is typically used with dual or multiple axes.\n         *\n         * @sample {highcharts} highcharts/yaxis/opposite/\n         *         Secondary Y axis opposite\n         * @sample {highstock} stock/xaxis/opposite/\n         *         Y axis on left side\n         *\n         * @default   {highcharts|highstock|highmaps} false\n         * @default   {gantt} true\n         * @type      Boolean\n         * @apioption xAxis.opposite\n         */\n        /**\n         * In an ordinal axis, the points are equally spaced in the chart\n         * regardless of the actual time or x distance between them. This means\n         * that missing data periods (e.g. nights or weekends for a stock chart)\n         * will not take up space in the chart.\n         * Having `ordinal: false` will show any gaps created by the `gapSize`\n         * setting proportionate to their duration.\n         *\n         * In stock charts the X axis is ordinal by default, unless\n         * the boost module is used and at least one of the series' data length\n         * exceeds the [boostThreshold](#series.line.boostThreshold).\n         *\n         * For an ordinal axis, `minPadding` and `maxPadding` are ignored. Use\n         * [overscroll](#xAxis.overscroll) instead.\n         *\n         * @sample {highstock} stock/xaxis/ordinal-true/\n         *         True by default\n         * @sample {highstock} stock/xaxis/ordinal-false/\n         *         False\n         *\n         * @see [overscroll](#xAxis.overscroll)\n         *\n         * @type      {boolean}\n         * @default   true\n         * @since     1.1\n         * @product   highstock\n         * @apioption xAxis.ordinal\n         */\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 axis\n         * 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         * @sample {highstock} stock/xaxis/overscroll/ One minute overscroll\n         *         with live data\n         * @sample {highstock} stock/xaxis/overscroll-percent/ Overscroll set in\n         *         percentage\n         * @sample {highstock} stock/xaxis/overscroll-pixel/ Overscroll set in\n         *         pixels\n         *\n         * @type      {number | string}\n         * @default   0\n         * @since     6.0.0\n         * @product   highstock\n         * @apioption xAxis.overscroll\n         */\n        /**\n         * Refers to the index in the [panes](#panes) array. Used for circular\n         * gauges and polar charts. When the option is not set then first pane\n         * will be used.\n         *\n         * @sample highcharts/demo/gauge-vu-meter\n         *         Two gauges with different center\n         *\n         * @type      {number}\n         * @product   highcharts\n         * @apioption xAxis.pane\n         */\n        /**\n         * The zoomed range to display when only defining one or none of `min`\n         * or `max`. For example, to show the latest month, a range of one month\n         * can be set.\n         *\n         * @sample {highstock} stock/xaxis/range/\n         *         Setting a zoomed range when the rangeSelector is disabled\n         *\n         * @type      {number}\n         * @product   highstock\n         * @apioption xAxis.range\n         */\n        /**\n         * Whether to reverse the axis so that the highest number is closest\n         * to the origin. If the chart is inverted, the x axis is reversed by\n         * default.\n         *\n         * @sample {highcharts} highcharts/yaxis/reversed/\n         *         Reversed Y axis\n         * @sample {highstock} stock/xaxis/reversed/\n         *         Reversed Y axis\n         *\n         * @type      {boolean}\n         * @default   undefined\n         * @apioption xAxis.reversed\n         */\n        reversed: void 0,\n        /**\n         * This option determines how stacks should be ordered within a group.\n         * For example reversed xAxis also reverses stacks, so first series\n         * comes last in a group. To keep order like for non-reversed xAxis\n         * enable this option.\n         *\n         * @sample {highcharts} highcharts/xaxis/reversedstacks/\n         *         Reversed stacks comparison\n         * @sample {highstock} highcharts/xaxis/reversedstacks/\n         *         Reversed stacks comparison\n         *\n         * @since     6.1.1\n         * @product   highcharts highstock\n         */\n        reversedStacks: false,\n        /**\n         * An optional scrollbar to display on the X axis in response to\n         * limiting the minimum and maximum of the axis values.\n         *\n         * In styled mode, all the presentational options for the scrollbar are\n         * 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 {highstock} stock/yaxis/heatmap-scrollbars/\n         *         Heatmap with both scrollbars\n         *\n         * @extends   scrollbar\n         * @since     4.2.6\n         * @product   highstock\n         * @apioption xAxis.scrollbar\n         */\n        /**\n         * Whether to show the axis line and title when the axis has no data.\n         *\n         * @sample {highcharts} highcharts/yaxis/showempty/\n         *         When clicking the legend to hide series, one axis preserves\n         *         line and title, the other doesn't\n         * @sample {highstock} highcharts/yaxis/showempty/\n         *         When clicking the legend to hide series, one axis preserves\n         *         line and title, the other doesn't\n         *\n         * @since     1.1\n         */\n        showEmpty: true,\n        /**\n         * Whether to show the first tick label.\n         *\n         * @sample {highcharts} highcharts/xaxis/showfirstlabel-false/\n         *         Set to false on X axis\n         * @sample {highstock} stock/xaxis/showfirstlabel/\n         *         Labels below plot lines on Y axis\n         */\n        showFirstLabel: true,\n        /**\n         * Whether to show the last tick label. Defaults to `true` on cartesian\n         * charts, and `false` on polar charts.\n         *\n         * @sample {highcharts} highcharts/xaxis/showlastlabel-true/\n         *         Set to true on X axis\n         * @sample {highstock} stock/xaxis/showfirstlabel/\n         *         Labels below plot lines on Y axis\n         *\n         * @type    {boolean}\n         * @default undefined\n         * @product highcharts highstock gantt\n         */\n        showLastLabel: true,\n        /**\n         * A soft maximum for the axis. If the series data maximum is less than\n         * this, the axis will stay at this maximum, but if the series data\n         * maximum is higher, the axis will flex to show all data.\n         *\n         * @sample highcharts/yaxis/softmin-softmax/\n         *         Soft min and max\n         *\n         * @type      {number}\n         * @since     5.0.1\n         * @product   highcharts highstock gantt\n         * @apioption xAxis.softMax\n         */\n        /**\n         * A soft minimum for the axis. If the series data minimum is greater\n         * than this, the axis will stay at this minimum, but if the series\n         * data minimum is lower, the axis will flex to show all data.\n         *\n         * @sample highcharts/yaxis/softmin-softmax/\n         *         Soft min and max\n         *\n         * @type      {number}\n         * @since     5.0.1\n         * @product   highcharts highstock gantt\n         * @apioption xAxis.softMin\n         */\n        /**\n         * For datetime axes, this decides where to put the tick between weeks.\n         *  0 = Sunday, 1 = Monday.\n         *\n         * @sample {highcharts} highcharts/xaxis/startofweek-monday/\n         *         Monday by default\n         * @sample {highcharts} highcharts/xaxis/startofweek-sunday/\n         *         Sunday\n         * @sample {highstock} stock/xaxis/startofweek-1\n         *         Monday by default\n         * @sample {highstock} stock/xaxis/startofweek-0\n         *         Sunday\n         *\n         * @product highcharts highstock gantt\n         */\n        startOfWeek: 1,\n        /**\n         * Whether to force the axis to start on a tick. Use this option with\n         * the `minPadding` option to control the axis start.\n         *\n         * @productdesc {highstock}\n         * In Highcharts Stock, `startOnTick` is always `false` when\n         * the navigator is enabled, to prevent jumpy scrolling.\n         *\n         * @sample {highcharts} highcharts/xaxis/startontick-false/\n         *         False by default\n         * @sample {highcharts} highcharts/xaxis/startontick-true/\n         *         True\n         *\n         * @since 1.2.0\n         */\n        startOnTick: false,\n        /**\n         * The amount of ticks to draw on the axis. This opens up for aligning\n         * the ticks of multiple charts or panes within a chart. This option\n         * overrides the `tickPixelInterval` option.\n         *\n         * This option only has an effect on linear axes. Datetime, logarithmic\n         * or category axes are not affected.\n         *\n         * @sample {highcharts} highcharts/yaxis/tickamount/\n         *         8 ticks on Y axis\n         * @sample {highstock} highcharts/yaxis/tickamount/\n         *         8 ticks on Y axis\n         *\n         * @type      {number}\n         * @since     4.1.0\n         * @product   highcharts highstock gantt\n         * @apioption xAxis.tickAmount\n         */\n        /**\n         * The interval of the tick marks in axis units. When `undefined`, the\n         * tick interval is computed to approximately follow the\n         * [tickPixelInterval](#xAxis.tickPixelInterval) on linear and datetime\n         * axes. On categorized axes, a `undefined` tickInterval will default to\n         * 1, one category. Note that datetime axes are based on milliseconds,\n         * so for example an interval of one day is expressed as\n         * `24 * 3600 * 1000`.\n         *\n         * On logarithmic axes, the tickInterval is based on powers, so a\n         * tickInterval of 1 means one tick on each of 0.1, 1, 10, 100 etc. A\n         * tickInterval of 2 means a tick of 0.1, 10, 1000 etc. A tickInterval\n         * of 0.2 puts a tick on 0.1, 0.2, 0.4, 0.6, 0.8, 1, 2, 4, 6, 8, 10, 20,\n         * 40 etc.\n         *\n         *\n         * If the tickInterval is too dense for labels to be drawn, Highcharts\n         * may remove ticks.\n         *\n         * If the chart has multiple axes, the [alignTicks](#chart.alignTicks)\n         * option may interfere with the `tickInterval` setting.\n         *\n         * @see [tickPixelInterval](#xAxis.tickPixelInterval)\n         * @see [tickPositions](#xAxis.tickPositions)\n         * @see [tickPositioner](#xAxis.tickPositioner)\n         *\n         * @sample {highcharts} highcharts/xaxis/tickinterval-5/\n         *         Tick interval of 5 on a linear axis\n         * @sample {highstock} stock/xaxis/tickinterval/\n         *         Tick interval of 0.01 on Y axis\n         *\n         * @type      {number}\n         * @apioption xAxis.tickInterval\n         */\n        /**\n         * The pixel length of the main tick marks.\n         *\n         * @sample {highcharts} highcharts/xaxis/ticklength/\n         *         20 px tick length on the X axis\n         * @sample {highstock} stock/xaxis/ticks/\n         *         Formatted ticks on X axis\n         */\n        tickLength: 10,\n        /**\n         * If tickInterval is `null` this option sets the approximate pixel\n         * interval of the tick marks. Not applicable to categorized axis.\n         *\n         * The tick interval is also influenced by the [minTickInterval](\n         * #xAxis.minTickInterval) option, that, by default prevents ticks from\n         * being denser than the data points.\n         *\n         * @see [tickInterval](#xAxis.tickInterval)\n         * @see [tickPositioner](#xAxis.tickPositioner)\n         * @see [tickPositions](#xAxis.tickPositions)\n         *\n         * @sample {highcharts} highcharts/xaxis/tickpixelinterval-50/\n         *         50 px on X axis\n         * @sample {highstock} stock/xaxis/tickpixelinterval/\n         *         200 px on X axis\n         */\n        tickPixelInterval: 100,\n        /**\n         * For categorized axes only. If `on` the tick mark is placed in the\n         * center of the category, if `between` the tick mark is placed between\n         * categories. The default is `between` if the `tickInterval` is 1, else\n         * `on`. In order to render tick marks on a category axis it is necessary\n         * to provide a [tickWidth](#xAxis.tickWidth).\n         *\n         * @sample {highcharts} highcharts/xaxis/tickmarkplacement-between/\n         *         \"between\" by default\n         * @sample {highcharts} highcharts/xaxis/tickmarkplacement-on/\n         *         \"on\"\n         *\n         * @product    highcharts gantt\n         * @validvalue [\"on\", \"between\"]\n         */\n        tickmarkPlacement: 'between',\n        /**\n         * The position of the major tick marks relative to the axis line.\n         * Can be one of `inside` and `outside`.\n         *\n         * @sample {highcharts} highcharts/xaxis/tickposition-outside/\n         *         \"outside\" by default\n         * @sample {highcharts} highcharts/xaxis/tickposition-inside/\n         *         \"inside\"\n         * @sample {highstock} stock/xaxis/ticks/\n         *         Formatted ticks on X axis\n         *\n         * @validvalue [\"inside\", \"outside\"]\n         */\n        tickPosition: 'outside',\n        /**\n         * A callback function returning array defining where the ticks are\n         * laid out on the axis. This overrides the default behaviour of\n         * [tickPixelInterval](#xAxis.tickPixelInterval) and [tickInterval](\n         * #xAxis.tickInterval). The automatic tick positions are accessible\n         * through `this.tickPositions` and can be modified by the callback.\n         *\n         * @see [tickPositions](#xAxis.tickPositions)\n         *\n         * @sample {highcharts} highcharts/xaxis/tickpositions-tickpositioner/\n         *         Demo of tickPositions and tickPositioner\n         * @sample {highstock} highcharts/xaxis/tickpositions-tickpositioner/\n         *         Demo of tickPositions and tickPositioner\n         *\n         * @type      {Highcharts.AxisTickPositionerCallbackFunction}\n         * @apioption xAxis.tickPositioner\n         */\n        /**\n         * An array defining where the ticks are laid out on the axis. This\n         * overrides the default behaviour of [tickPixelInterval](\n         * #xAxis.tickPixelInterval) and [tickInterval](#xAxis.tickInterval).\n         *\n         * @see [tickPositioner](#xAxis.tickPositioner)\n         *\n         * @sample {highcharts} highcharts/xaxis/tickpositions-tickpositioner/\n         *         Demo of tickPositions and tickPositioner\n         * @sample {highstock} highcharts/xaxis/tickpositions-tickpositioner/\n         *         Demo of tickPositions and tickPositioner\n         *\n         * @type      {Array<number>}\n         * @apioption xAxis.tickPositions\n         */\n        /**\n         * The pixel width of the major tick marks. Defaults to 0 on category\n         * axes, otherwise 1.\n         *\n         * In styled mode, the stroke width is given in the `.highcharts-tick`\n         * class, but in order for the element to be generated on category axes,\n         * the option must be explicitly set to 1.\n         *\n         * @sample {highcharts} highcharts/xaxis/tickwidth/\n         *         10 px width\n         * @sample {highcharts} highcharts/css/axis-grid/\n         *         Styled mode\n         * @sample {highstock} stock/xaxis/ticks/\n         *         Formatted ticks on X axis\n         * @sample {highstock} highcharts/css/axis-grid/\n         *         Styled mode\n         *\n         * @type      {undefined|number}\n         * @default   {highstock} 1\n         * @default   {highmaps} 0\n         * @apioption xAxis.tickWidth\n         */\n        /**\n         * The axis title, showing next to the axis line.\n         *\n         * @productdesc {highmaps}\n         * In Highmaps, the axis is hidden by default, but adding an axis title\n         * is still possible. X axis and Y axis titles will appear at the bottom\n         * and left by default.\n         */\n        title: {\n            /**\n             * Alignment of the title relative to the axis values. Possible\n             * values are \"low\", \"middle\" or \"high\".\n             *\n             * @sample {highcharts} highcharts/xaxis/title-align-low/\n             *         \"low\"\n             * @sample {highcharts} highcharts/xaxis/title-align-center/\n             *         \"middle\" by default\n             * @sample {highcharts} highcharts/xaxis/title-align-high/\n             *         \"high\"\n             * @sample {highcharts} highcharts/yaxis/title-offset/\n             *         Place the Y axis title on top of the axis\n             * @sample {highstock} stock/xaxis/title-align/\n             *         Aligned to \"high\" value\n             *\n             * @type {Highcharts.AxisTitleAlignValue}\n             */\n            align: 'middle',\n            /**\n             * Deprecated. Set the `text` to `undefined` to disable the title.\n             *\n             * @deprecated\n             * @type      {boolean}\n             * @product   highcharts\n             * @apioption xAxis.title.enabled\n             */\n            /**\n             * The pixel distance between the axis labels or line and the title.\n             * Defaults to 0 for horizontal axes, 10 for vertical\n             *\n             * @sample {highcharts} highcharts/xaxis/title-margin/\n             *         Y axis title margin of 60\n             *\n             * @type      {number}\n             * @apioption xAxis.title.margin\n             */\n            /**\n             * The distance of the axis title from the axis line. By default,\n             * this distance is computed from the offset width of the labels,\n             * the labels' distance from the axis and the title's margin.\n             * However when the offset option is set, it overrides all this.\n             *\n             * @sample {highcharts} highcharts/yaxis/title-offset/\n             *         Place the axis title on top of the axis\n             * @sample {highstock} highcharts/yaxis/title-offset/\n             *         Place the axis title on top of the Y axis\n             *\n             * @type      {number}\n             * @since     2.2.0\n             * @apioption xAxis.title.offset\n             */\n            /**\n             * Whether to reserve space for the title when laying out the axis.\n             *\n             * @type      {boolean}\n             * @default   true\n             * @since     5.0.11\n             * @product   highcharts highstock gantt\n             * @apioption xAxis.title.reserveSpace\n             */\n            /**\n             * The rotation of the text in degrees. 0 is horizontal, 270 is\n             * vertical reading from bottom to top. Defaults to 0 for horizontal\n             * axes, 270 for left-side axes and 90 for right-side axes.\n             *\n             * @sample    {highcharts} highcharts/yaxis/title-offset/\n             *            Horizontal\n             *\n             * @type      {number}\n             * @default   undefined\n             * @apioption xAxis.title.rotation\n             */\n            /**\n             * The actual text of the axis title. It can contain basic HTML tags\n             * like `b`, `i` and `span` with style.\n             *\n             * @sample {highcharts} highcharts/xaxis/title-text/\n             *         Custom HTML\n             * @sample {highstock} stock/xaxis/title-text/\n             *         Titles for both axes\n             *\n             * @type      {string|null}\n             * @apioption xAxis.title.text\n             */\n            /**\n             * Alignment of the text, can be `\"left\"`, `\"right\"` or `\"center\"`.\n             * Default alignment depends on the\n             * [title.align](xAxis.title.align):\n             *\n             * Horizontal axes:\n             * - for `align` = `\"low\"`, `textAlign` is set to `left`\n             * - for `align` = `\"middle\"`, `textAlign` is set to `center`\n             * - for `align` = `\"high\"`, `textAlign` is set to `right`\n             *\n             * Vertical axes:\n             * - for `align` = `\"low\"` and `opposite` = `true`, `textAlign` is\n             *   set to `right`\n             * - for `align` = `\"low\"` and `opposite` = `false`, `textAlign` is\n             *   set to `left`\n             * - for `align` = `\"middle\"`, `textAlign` is set to `center`\n             * - for `align` = `\"high\"` and `opposite` = `true` `textAlign` is\n             *   set to `left`\n             * - for `align` = `\"high\"` and `opposite` = `false` `textAlign` is\n             *   set to `right`\n             *\n             * @type      {Highcharts.AlignValue}\n             * @apioption xAxis.title.textAlign\n             */\n            /**\n             * Whether to [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n             * to render the axis title.\n             *\n             * @product   highcharts highstock gantt\n             */\n            useHTML: false,\n            /**\n             * Horizontal pixel offset of the title position.\n             *\n             * @since     4.1.6\n             * @product   highcharts highstock gantt\n             */\n            x: 0,\n            /**\n             * Vertical pixel offset of the title position.\n             *\n             * @product   highcharts highstock gantt\n             */\n            y: 0,\n            /**\n             * CSS styles for the title. If the title text is longer than the\n             * axis length, it will wrap to multiple lines by default. This can\n             * be customized by setting the `lineClamp` property, by setting a\n             * specific `width` or by setting `whiteSpace: 'nowrap'`.\n             *\n             * In styled mode, the stroke width is given in the\n             * `.highcharts-axis-title` class.\n             *\n             * @sample {highcharts} highcharts/xaxis/title-style/\n             *         Red\n             * @sample {highcharts} highcharts/css/axis/\n             *         Styled mode\n             *\n             * @type    {Highcharts.CSSObject}\n             */\n            style: {\n                /** @internal */\n                color: \"#666666\" /* Palette.neutralColor60 */,\n                /**\n                 * @type {number|string}\n                 */\n                fontSize: '0.8em'\n            }\n        },\n        /**\n         * The type of axis. Can be one of `linear`, `logarithmic`, `datetime`\n         * or `category`. In a datetime axis, the numbers are given in\n         * milliseconds, and tick marks are placed on appropriate values like\n         * full hours or days. In a category axis, the\n         * [point names](#series.line.data.name) of the chart's series are used\n         * for categories, if not a [categories](#xAxis.categories) array is\n         * defined.\n         *\n         * @sample {highcharts} highcharts/xaxis/type-linear/\n         *         Linear\n         * @sample {highcharts} highcharts/yaxis/type-log/\n         *         Logarithmic\n         * @sample {highcharts} highcharts/yaxis/type-log-minorgrid/\n         *         Logarithmic with minor grid lines\n         * @sample {highcharts} highcharts/xaxis/type-log-both/\n         *         Logarithmic on two axes\n         * @sample {highcharts} highcharts/yaxis/type-log-negative/\n         *         Logarithmic with extension to emulate negative values\n         *\n         * @type    {Highcharts.AxisTypeValue}\n         * @default linear\n         * @product highcharts gantt\n         * @apioption xAxis.type\n         */\n        /**\n         * If there are multiple axes on the same side of the chart, the pixel\n         * margin between the axes. Defaults to 0 on vertical axes, 15 on\n         * horizontal axes.\n         *\n         * @type      {number}\n         * @since     7.0.3\n         * @apioption xAxis.margin\n         */\n        /**\n         * Applies only when the axis `type` is `category`. When `uniqueNames`\n         * is true, points are placed on the X axis according to their names.\n         * If the same point name is repeated in the same or another series,\n         * the point is placed on the same X position as other points of the\n         * same name. When `uniqueNames` is false, the points are laid out in\n         * increasing X positions regardless of their names, and the X axis\n         * category will take the name of the last point in each position.\n         *\n         * @sample {highcharts} highcharts/xaxis/uniquenames-true/\n         *         True by default\n         * @sample {highcharts} highcharts/xaxis/uniquenames-false/\n         *         False\n         *\n         * @since     4.2.7\n         * @product   highcharts gantt\n         * @type      {boolean}\n         * @default   true\n         * @apioption xAxis.uniqueNames\n         */\n        /**\n         * Datetime axis only. An array determining what time intervals the\n         * ticks are allowed to fall on. Each array item is an array where the\n         * first value is the time unit and the second value another array of\n         * allowed multiples.\n         *\n         * Defaults to:\n         * ```js\n         * units: [[\n         *     'millisecond', // unit name\n         *     [1, 2, 5, 10, 20, 25, 50, 100, 200, 500] // allowed multiples\n         * ], [\n         *     'second',\n         *     [1, 2, 5, 10, 15, 30]\n         * ], [\n         *     'minute',\n         *     [1, 2, 5, 10, 15, 30]\n         * ], [\n         *     'hour',\n         *     [1, 2, 3, 4, 6, 8, 12]\n         * ], [\n         *     'day',\n         *     [1, 2]\n         * ], [\n         *     'week',\n         *     [1, 2]\n         * ], [\n         *     'month',\n         *     [1, 2, 3, 4, 6]\n         * ], [\n         *     'year',\n         *     null\n         * ]]\n         * ```\n         *\n         * @sample {highcharts} highcharts/xaxis/units/\n         *         Axis units demonstrated\n         *\n         * @type      {Array<Array<string,(Array<number>|null)>>}\n         * @product   highcharts highstock gantt\n         * @apioption xAxis.units\n         */\n        /**\n         * Whether axis, including axis title, line, ticks and labels, should\n         * be visible.\n         *\n         * @since     4.1.9\n         * @product   highcharts highstock gantt\n         */\n        visible: true,\n        /**\n         * Color of the minor, secondary grid lines.\n         *\n         * In styled mode, the stroke width is given in the\n         * `.highcharts-minor-grid-line` class.\n         *\n         * @sample {highcharts} highcharts/yaxis/minorgridlinecolor/\n         *         Bright grey lines from Y axis\n         * @sample {highcharts|highstock} highcharts/css/axis-grid/\n         *         Styled mode\n         * @sample {highstock} stock/xaxis/minorgridlinecolor/\n         *         Bright grey lines from Y axis\n         *\n         * @type    {Highcharts.ColorType}\n         * @default #f2f2f2\n         */\n        minorGridLineColor: \"#f2f2f2\" /* Palette.neutralColor5 */,\n        /**\n         * Width of the minor, secondary grid lines.\n         *\n         * In styled mode, the stroke width is given in the\n         * `.highcharts-grid-line` class.\n         *\n         * @sample {highcharts} highcharts/yaxis/minorgridlinewidth/\n         *         2px lines from Y axis\n         * @sample {highcharts|highstock} highcharts/css/axis-grid/\n         *         Styled mode\n         * @sample {highstock} stock/xaxis/minorgridlinewidth/\n         *         2px lines from Y axis\n         */\n        minorGridLineWidth: 1,\n        /**\n         * Color for the minor tick marks.\n         *\n         * @sample {highcharts} highcharts/yaxis/minortickcolor/\n         *         Black tick marks on Y axis\n         * @sample {highstock} stock/xaxis/minorticks/\n         *         Black tick marks on Y axis\n         *\n         * @type    {Highcharts.ColorType}\n         * @default #999999\n         */\n        minorTickColor: \"#999999\" /* Palette.neutralColor40 */,\n        /**\n         * The color of the line marking the axis itself.\n         *\n         * In styled mode, the line stroke is given in the\n         * `.highcharts-axis-line` or `.highcharts-xaxis-line` class.\n         *\n         * @sample {highcharts} highcharts/yaxis/linecolor/\n         *         A red line on Y axis\n         * @sample {highcharts|highstock} highcharts/css/axis/\n         *         Axes in styled mode\n         * @sample {highstock} stock/xaxis/linecolor/\n         *         A red line on X axis\n         *\n         * @type    {Highcharts.ColorType}\n         */\n        lineColor: \"#333333\" /* Palette.neutralColor80 */,\n        /**\n         * The width of the line marking the axis itself.\n         *\n         * In styled mode, the stroke width is given in the\n         * `.highcharts-axis-line` or `.highcharts-xaxis-line` class.\n         *\n         * @sample {highcharts} highcharts/yaxis/linecolor/\n         *         A 1px line on Y axis\n         * @sample {highcharts|highstock} highcharts/css/axis/\n         *         Axes in styled mode\n         * @sample {highstock} stock/xaxis/linewidth/\n         *         A 2px line on X axis\n         *\n         * @default {highcharts|highstock} 1\n         * @default {highmaps} 0\n         */\n        lineWidth: 1,\n        /**\n         * Color of the grid lines extending the ticks across the plot area.\n         *\n         * In styled mode, the stroke is given in the `.highcharts-grid-line`\n         * class.\n         *\n         * @productdesc {highmaps}\n         * In Highmaps, the grid lines are hidden by default.\n         *\n         * @sample {highcharts} highcharts/yaxis/gridlinecolor/\n         *         Green lines\n         * @sample {highcharts|highstock} highcharts/css/axis-grid/\n         *         Styled mode\n         * @sample {highstock} stock/xaxis/gridlinecolor/\n         *         Green lines\n         *\n         * @type    {Highcharts.ColorType}\n         * @default #e6e6e6\n         */\n        gridLineColor: \"#e6e6e6\" /* Palette.neutralColor10 */,\n        /**\n         * The width of the grid lines extending the ticks across the plot area.\n         * Defaults to 1 on the Y axis and 0 on the X axis, except for 3d\n         * charts.\n         *\n         * In styled mode, the stroke width is given in the\n         * `.highcharts-grid-line` class.\n         *\n         * @sample {highcharts} highcharts/yaxis/gridlinewidth/\n         *         2px lines\n         * @sample {highcharts|highstock} highcharts/css/axis-grid/\n         *         Styled mode\n         * @sample {highstock} stock/xaxis/gridlinewidth/\n         *         2px lines\n         *\n         * @type      {number}\n         * @apioption xAxis.gridLineWidth\n         */\n        gridLineWidth: void 0,\n        /**\n         * The height as the vertical axis. If it's a number, it is\n         * interpreted as pixels.\n         *\n         * Since Highcharts 2: If it's a percentage string, it is interpreted\n         * as percentages of the total plot height.\n         *\n         * @sample {highcharts} highcharts/xaxis/axis-position-properties\n         *         Different axis position properties\n         *\n         * @type      {number|string}\n         * @product   highcharts highstock\n         * @apioption xAxis.height\n         */\n        /**\n         * The width as the horizontal axis. If it's a number, it is interpreted\n         * as pixels.\n         *\n         * Since Highcharts v5.0.13: If it's a percentage string, it is\n         * interpreted as percentages of the total plot width.\n         *\n         * @sample {highcharts} highcharts/xaxis/axis-position-properties\n         *         Different axis position properties\n         *\n         * @type      {number|string}\n         * @product   highcharts highstock\n         * @apioption xAxis.width\n         */\n        /**\n         * Color for the main tick marks.\n         *\n         * In styled mode, the stroke is given in the `.highcharts-tick`\n         * class.\n         *\n         * @sample {highcharts} highcharts/xaxis/tickcolor/\n         *         Red ticks on X axis\n         * @sample {highcharts|highstock} highcharts/css/axis-grid/\n         *         Styled mode\n         * @sample {highstock} stock/xaxis/ticks/\n         *         Formatted ticks on X axis\n         *\n         * @type    {Highcharts.ColorType}\n         */\n        tickColor: \"#333333\" /* Palette.neutralColor80 */\n        // `tickWidth: 1`\n    };\n    /**\n     * The Z axis or depth axis for 3D plots.\n     *\n     * See the [Axis class](/class-reference/Highcharts.Axis) for programmatic\n     * access to the axis.\n     *\n     * @sample {highcharts} highcharts/3d/scatter-zaxis-categories/\n     *         Z-Axis with Categories\n     * @sample {highcharts} highcharts/3d/scatter-zaxis-grid/\n     *         Z-Axis with styling\n     *\n     * @type      {*|Array<*>}\n     * @extends   xAxis\n     * @since     5.0.0\n     * @product   highcharts\n     * @excluding breaks, crosshair, height, left, lineColor, lineWidth,\n     *            nameToX, showEmpty, top, width\n     * @apioption zAxis\n     */\n    /**\n     * The Y axis or value axis. Normally this is the vertical axis,\n     * though if the chart is inverted this is the horizontal axis.\n     * In case of multiple axes, the yAxis node is an array of\n     * configuration objects.\n     *\n     * See [the Axis object](/class-reference/Highcharts.Axis) for programmatic\n     * access to the axis.\n     *\n     * @type         {*|Array<*>}\n     * @extends      xAxis\n     * @excluding    currentDateIndicator,ordinal,overscroll\n     * @optionparent yAxis\n     */\n    AxisDefaults.yAxis = {\n        /**\n         * The type of axis. Can be one of `linear`, `logarithmic`, `datetime`,\n         * `category` or `treegrid`. Defaults to `treegrid` for Gantt charts,\n         * `linear` for other chart types.\n         *\n         * In a datetime axis, the numbers are given in milliseconds, and tick\n         * marks are placed on appropriate values, like full hours or days. In a\n         * category or treegrid axis, the [point names](#series.line.data.name)\n         * of the chart's series are used for categories, if a\n         * [categories](#xAxis.categories) array is not defined.\n         *\n         * @sample {highcharts} highcharts/yaxis/type-log-minorgrid/\n         *         Logarithmic with minor grid lines\n         * @sample {highcharts} highcharts/yaxis/type-log-negative/\n         *         Logarithmic with extension to emulate negative values\n         * @sample {gantt} gantt/treegrid-axis/demo\n         *         Treegrid axis\n         *\n         * @type      {Highcharts.AxisTypeValue}\n         * @default   {highcharts} linear\n         * @default   {gantt} treegrid\n         * @product   highcharts gantt\n         * @apioption yAxis.type\n         */\n        /**\n         * The height of the Y axis. If it's a number, it is interpreted as\n         * pixels.\n         *\n         * Since Highcharts 2: If it's a percentage string, it is interpreted as\n         * percentages of the total plot height.\n         *\n         * @see [yAxis.top](#yAxis.top)\n         *\n         * @sample {highstock} stock/demo/candlestick-and-volume/\n         *         Percentage height panes\n         *\n         * @type      {number|string}\n         * @product   highcharts highstock\n         * @apioption yAxis.height\n         */\n        /**\n         * Solid gauge only. Unless [stops](#yAxis.stops) are set, the color\n         * to represent the maximum value of the Y axis.\n         *\n         * @sample {highcharts} highcharts/yaxis/mincolor-maxcolor/\n         *         Min and max colors\n         *\n         * @type      {Highcharts.ColorType}\n         * @default   #003399\n         * @since     4.0\n         * @product   highcharts\n         * @apioption yAxis.maxColor\n         */\n        /**\n         * Solid gauge only. Unless [stops](#yAxis.stops) are set, the color\n         * to represent the minimum value of the Y axis.\n         *\n         * @sample {highcharts} highcharts/yaxis/mincolor-maxcolor/\n         *         Min and max color\n         *\n         * @type      {Highcharts.ColorType}\n         * @default   #e6ebf5\n         * @since     4.0\n         * @product   highcharts\n         * @apioption yAxis.minColor\n         */\n        /**\n         * Whether to reverse the axis so that the highest number is closest\n         * to the origin.\n         *\n         * @sample {highcharts} highcharts/yaxis/reversed/\n         *         Reversed Y axis\n         * @sample {highstock} stock/xaxis/reversed/\n         *         Reversed Y axis\n         *\n         * @type      {boolean}\n         * @default   {highcharts} false\n         * @default   {highstock} false\n         * @default   {highmaps} true\n         * @default   {gantt} true\n         * @apioption yAxis.reversed\n         */\n        /**\n         * If `true`, the first series in a stack will be drawn on top in a\n         * positive, non-reversed Y axis. If `false`, the first series is in\n         * the base of the stack.\n         *\n         * @sample {highcharts} highcharts/yaxis/reversedstacks-false/\n         *         Non-reversed stacks\n         * @sample {highstock} highcharts/yaxis/reversedstacks-false/\n         *         Non-reversed stacks\n         *\n         * @type      {boolean}\n         * @default   true\n         * @since     3.0.10\n         * @product   highcharts highstock\n         * @apioption yAxis.reversedStacks\n         */\n        reversedStacks: true,\n        /**\n         * Solid gauge series only. Color stops for the solid gauge. Use this\n         * in cases where a linear gradient between a `minColor` and `maxColor`\n         * is not sufficient. The stops is an array of tuples, where the first\n         * item is a float between 0 and 1 assigning the relative position in\n         * the gradient, and the second item is the color.\n         *\n         * For solid gauges, the Y axis also inherits the concept of\n         * [data classes](https://api.highcharts.com/highmaps#colorAxis.dataClasses)\n         * from the Highmaps color axis.\n         *\n         * @sample {highcharts} highcharts/demo/gauge-solid/\n         *         Gauge with stops\n         *\n         * @see [minColor](#yAxis.minColor)\n         * @see [maxColor](#yAxis.maxColor)\n         *\n         * @type      {Array<Array<number,Highcharts.ColorType>>}\n         * @since     4.0\n         * @product   highcharts\n         * @apioption yAxis.stops\n         */\n        /**\n         * The pixel width of the major tick marks.\n         *\n         * @sample {highcharts} highcharts/xaxis/tickwidth/ 10 px width\n         * @sample {highstock} stock/xaxis/ticks/ Formatted ticks on X axis\n         *\n         * @type      {number}\n         * @default   0\n         * @product   highcharts highstock gantt\n         * @apioption yAxis.tickWidth\n         */\n        /**\n         * Whether to force the axis to end on a tick. Use this option with\n         * the `maxPadding` option to control the axis end.\n         *\n         * This option is always disabled, when panning type is\n         * either `y` or `xy`.\n         *\n         * @see [type](#chart.panning.type)\n         *\n         *\n         * @sample {highcharts} highcharts/yaxis/endontick/\n         *         True by default\n         * @sample {highcharts} highcharts/yaxis/endontick-false/\n         *         False\n         * @sample {highstock} stock/demo/basic-line/\n         *         True by default\n         * @sample {highstock} stock/xaxis/endontick/\n         *         False for Y axis\n         *\n         * @since 1.2.0\n         */\n        endOnTick: true,\n        /**\n         * Padding of the max value relative to the length of the axis. A\n         * padding of 0.05 will make a 100px axis 5px longer. This is useful\n         * when you don't want the highest data value to appear on the edge\n         * of the plot area. When the axis' `max` option is set or a max extreme\n         * is set using `axis.setExtremes()`, the maxPadding will be ignored.\n         *\n         * Also the `softThreshold` option takes precedence over `maxPadding`,\n         * so if the data is tangent to the threshold, `maxPadding` may not\n         * apply unless `softThreshold` is set to false.\n         *\n         * @sample {highcharts} highcharts/yaxis/maxpadding-02/\n         *         Max padding of 0.2\n         * @sample {highstock} stock/xaxis/minpadding-maxpadding/\n         *         Greater min- and maxPadding\n         *\n         * @since   1.2.0\n         * @product highcharts highstock gantt\n         */\n        maxPadding: 0.05,\n        /**\n         * Padding of the min value relative to the length of the axis. A\n         * padding of 0.05 will make a 100px axis 5px longer. This is useful\n         * when you don't want the lowest data value to appear on the edge\n         * of the plot area. When the axis' `min` option is set or a max extreme\n         * is set using `axis.setExtremes()`, the maxPadding will be ignored.\n         *\n         * Also the `softThreshold` option takes precedence over `minPadding`,\n         * so if the data is tangent to the threshold, `minPadding` may not\n         * apply unless `softThreshold` is set to false.\n         *\n         * @sample {highcharts} highcharts/yaxis/minpadding/\n         *         Min padding of 0.2\n         * @sample {highstock} stock/xaxis/minpadding-maxpadding/\n         *         Greater min- and maxPadding\n         *\n         * @since   1.2.0\n         * @product highcharts highstock gantt\n         */\n        minPadding: 0.05,\n        /**\n         * @productdesc {highstock}\n         * In Highcharts Stock 1.x, the Y axis was placed\n         * on the left side by default.\n         *\n         * @sample {highcharts} highcharts/yaxis/opposite/\n         *         Secondary Y axis opposite\n         * @sample {highstock} stock/xaxis/opposite/\n         *         Y axis on left side\n         *\n         * @type      {boolean}\n         * @default   {highstock} true\n         * @default   {highcharts} false\n         * @product   highstock highcharts gantt\n         * @apioption yAxis.opposite\n         */\n        /**\n         * @see [tickInterval](#xAxis.tickInterval)\n         * @see [tickPositioner](#xAxis.tickPositioner)\n         * @see [tickPositions](#xAxis.tickPositions)\n         */\n        tickPixelInterval: 72,\n        /**\n         * Whether to show the last tick label.\n         *\n         * @productdesc {highcharts|gantt}\n         * Defaults to `true` on cartesian charts, and `false` on polar charts.\n         *\n         * @productdesc {highstock}\n         * Defaults to `true` for categorized yAxis and `false` for other types\n         * of yAxis.\n         *\n         * @default undefined\n         */\n        showLastLabel: true,\n        /**\n         * @extends xAxis.labels\n         */\n        labels: {\n            /**\n             * The label's pixel distance from the perimeter of the plot area.\n             * On cartesian charts, this is overridden if the `labels.y` setting\n             * is set.\n             *\n             * On polar charts, if it's a percentage string, it is interpreted\n             * the same as [series.radius](#plotOptions.gauge.radius), so the\n             * label can be aligned under the gauge's shape.\n             *\n             * @sample {highcharts} highcharts/yaxis/labels-distance/\n             *         Polar chart, labels centered under the arc\n             *\n             * @type      {number|string}\n             * @product   highcharts\n             * @apioption yAxis.labels.distance\n             */\n            /**\n             * The y position offset of all labels relative to the tick\n             * positions on the axis. For polar and radial axis consider the use\n             * of the [distance](#yAxis.labels.distance) option.\n             *\n             * @sample {highcharts} highcharts/xaxis/labels-x/\n             *         Y axis labels placed on grid lines\n             *\n             * @type      {number}\n             * @default   {highcharts} 3\n             * @default   {highstock} -2\n             * @default   {highmaps} 3\n             * @apioption yAxis.labels.y\n             */\n            /**\n             * What part of the string the given position is anchored to. Can\n             * be one of `\"left\"`, `\"center\"` or `\"right\"`. The exact position\n             * also depends on the `labels.x` setting.\n             *\n             * Angular gauges and solid gauges defaults to `\"center\"`.\n             * Solid gauges with two labels have additional option `\"auto\"`\n             * for automatic horizontal and vertical alignment.\n             *\n             * @sample {highcharts} highcharts/yaxis/labels-align-left/\n             *         Left\n             * @sample {highcharts} highcharts/series-solidgauge/labels-auto-aligned/\n             *         Solid gauge labels auto aligned\n             *\n             * @type       {Highcharts.AlignValue}\n             * @default    {highstock} right\n             * @apioption  yAxis.labels.align\n             */\n            /**\n             * The x position offset of all labels relative to the tick\n             * positions on the axis. Defaults to -15 for left axis, 15 for\n             * right axis.\n             *\n             * @sample {highcharts} highcharts/xaxis/labels-x/\n             *         Y axis labels placed on grid lines\n             *\n             * @type {number}\n             */\n            x: void 0\n        },\n        /**\n         * @sample {highcharts} highcharts/yaxis/max-200/\n         *         Y axis max of 200\n         * @sample {highcharts} highcharts/yaxis/max-logarithmic/\n         *         Y axis max on logarithmic axis\n         * @sample {highstock} stock/yaxis/min-max/\n         *         Fixed min and max on Y axis\n         *\n         * @apioption yAxis.max\n         */\n        /**\n         * @sample {highcharts} highcharts/yaxis/min-startontick-false/\n         *         -50 with startOnTick to false\n         * @sample {highcharts} highcharts/yaxis/min-startontick-true/\n         *         -50 with startOnTick true by default\n         * @sample {highstock} stock/yaxis/min-max/\n         *         Fixed min and max on Y axis\n         *\n         * @apioption yAxis.min\n         */\n        /**\n         * An optional scrollbar to display on the Y axis in response to\n         * limiting the minimum an maximum of the axis values.\n         *\n         * In styled mode, all the presentational options for the scrollbar\n         * 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 {highstock} stock/yaxis/scrollbar/\n         *         Scrollbar on the Y axis\n         *\n         * @extends   scrollbar\n         * @since     4.2.6\n         * @product   highstock\n         * @excluding height\n         * @apioption yAxis.scrollbar\n         */\n        /**\n         * Enable the scrollbar on the Y axis.\n         *\n         * @sample {highstock} stock/yaxis/scrollbar/\n         *         Enabled on Y axis\n         *\n         * @type      {boolean}\n         * @default   false\n         * @since     4.2.6\n         * @product   highstock\n         * @apioption yAxis.scrollbar.enabled\n         */\n        /**\n         * Pixel margin between the scrollbar and the axis elements.\n         *\n         * @type      {number}\n         * @default   10\n         * @since     4.2.6\n         * @product   highstock\n         * @apioption yAxis.scrollbar.margin\n         */\n        /* eslint-disable highcharts/doclet-apioption-last */\n        /**\n         * Defines the position of the scrollbar. By default, it is positioned\n         * on the opposite of the main axis (right side of the chart).\n         * However, in the case of RTL languages could be set to `false`\n         * which positions the scrollbar on the left.\n         *\n         * Works only for vertical axes.\n         * This means yAxis in a non-inverted chart and xAxis in the inverted.\n         *\n         * @sample stock/yaxis/scrollbar-opposite/\n         *         A scrollbar not on the opposite side\n         *\n         * @type      {boolean}\n         * @default   true\n         * @since 9.3.0\n         *\n         * @apioption yAxis.scrollbar.opposite\n         * @apioption xAxis.scrollbar.opposite\n         *\n         */\n        /* eslint-enable highcharts/doclet-apioption-last */\n        /**\n         * Whether to show the scrollbar when it is fully zoomed out at max\n         * range. Setting it to `false` on the Y axis makes the scrollbar stay\n         * hidden until the user zooms in, like common in browsers.\n         *\n         * @type      {boolean}\n         * @default   true\n         * @since     4.2.6\n         * @product   highstock\n         * @apioption yAxis.scrollbar.showFull\n         */\n        /**\n         * The width of a vertical scrollbar or height of a horizontal\n         * scrollbar. Defaults to 20 on touch devices.\n         *\n         * @type      {number}\n         * @default   14\n         * @since     4.2.6\n         * @product   highstock\n         * @apioption yAxis.scrollbar.size\n         */\n        /**\n         * Z index of the scrollbar elements.\n         *\n         * @type      {number}\n         * @default   3\n         * @since     4.2.6\n         * @product   highstock\n         * @apioption yAxis.scrollbar.zIndex\n         */\n        /**\n         * A soft maximum for the axis. If the series data maximum is less\n         * than this, the axis will stay at this maximum, but if the series\n         * data maximum is higher, the axis will flex to show all data.\n         *\n         * **Note**: The [series.softThreshold](\n         * #plotOptions.series.softThreshold) option takes precedence over this\n         * option.\n         *\n         * @sample highcharts/yaxis/softmin-softmax/\n         *         Soft min and max\n         *\n         * @type      {number}\n         * @since     5.0.1\n         * @product   highcharts highstock gantt\n         * @apioption yAxis.softMax\n         */\n        /**\n         * A soft minimum for the axis. If the series data minimum is greater\n         * than this, the axis will stay at this minimum, but if the series\n         * data minimum is lower, the axis will flex to show all data.\n         *\n         * **Note**: The [series.softThreshold](\n         * #plotOptions.series.softThreshold) option takes precedence over this\n         * option.\n         *\n         * @sample highcharts/yaxis/softmin-softmax/\n         *         Soft min and max\n         *\n         * @type      {number}\n         * @since     5.0.1\n         * @product   highcharts highstock gantt\n         * @apioption yAxis.softMin\n         */\n        /**\n         * Defines the horizontal alignment of the stack total label. Can be one\n         * of `\"left\"`, `\"center\"` or `\"right\"`. The default value is calculated\n         * at runtime and depends on orientation and whether the stack is\n         * positive or negative.\n         *\n         * @sample {highcharts} highcharts/yaxis/stacklabels-align-left/\n         *         Aligned to the left\n         * @sample {highcharts} highcharts/yaxis/stacklabels-align-center/\n         *         Aligned in center\n         * @sample {highcharts} highcharts/yaxis/stacklabels-align-right/\n         *         Aligned to the right\n         *\n         * @type      {Highcharts.AlignValue}\n         * @since     2.1.5\n         * @product   highcharts\n         * @apioption yAxis.stackLabels.align\n         */\n        /**\n         * A format string for the data label. Available variables are the same\n         * as for `formatter`.\n         *\n         * @type      {string}\n         * @default   {total}\n         * @since     3.0.2\n         * @product   highcharts highstock\n         * @apioption yAxis.stackLabels.format\n         */\n        /**\n         * Rotation of the labels in degrees.\n         *\n         * @sample {highcharts} highcharts/yaxis/stacklabels-rotation/\n         *         Labels rotated 45°\n         *\n         * @type      {number}\n         * @default   0\n         * @since     2.1.5\n         * @product   highcharts\n         * @apioption yAxis.stackLabels.rotation\n         */\n        /**\n         * The text alignment for the label. While `align` determines where the\n         * texts anchor point is placed with regards to the stack, `textAlign`\n         * determines how the text is aligned against its anchor point. Possible\n         * values are `\"left\"`, `\"center\"` and `\"right\"`. The default value is\n         * calculated at runtime and depends on orientation and whether the\n         * stack is positive or negative.\n         *\n         * @sample {highcharts} highcharts/yaxis/stacklabels-textalign-left/\n         *         Label in center position but text-aligned left\n         *\n         * @type      {Highcharts.AlignValue}\n         * @since     2.1.5\n         * @product   highcharts\n         * @apioption yAxis.stackLabels.textAlign\n         */\n        /**\n         * Whether to [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n         * to render the labels.\n         *\n         * @type      {boolean}\n         * @default   false\n         * @since     3.0\n         * @product   highcharts highstock\n         * @apioption yAxis.stackLabels.useHTML\n         */\n        /**\n         * Defines the vertical alignment of the stack total label. Can be one\n         * of `\"top\"`, `\"middle\"` or `\"bottom\"`. The default value is calculated\n         * at runtime and depends on orientation and whether the stack is\n         * positive or negative.\n         *\n         * @sample {highcharts} highcharts/yaxis/stacklabels-verticalalign-top/\n         *         Vertically aligned top\n         * @sample {highcharts} highcharts/yaxis/stacklabels-verticalalign-middle/\n         *         Vertically aligned middle\n         * @sample {highcharts} highcharts/yaxis/stacklabels-verticalalign-bottom/\n         *         Vertically aligned bottom\n         *\n         * @type      {Highcharts.VerticalAlignValue}\n         * @since     2.1.5\n         * @product   highcharts\n         * @apioption yAxis.stackLabels.verticalAlign\n         */\n        /**\n         * The x position offset of the label relative to the left of the\n         * stacked bar. The default value is calculated at runtime and depends\n         * on orientation and whether the stack is positive or negative.\n         *\n         * @sample {highcharts} highcharts/yaxis/stacklabels-x/\n         *         Stack total labels with x offset\n         *\n         * @type      {number}\n         * @since     2.1.5\n         * @product   highcharts\n         * @apioption yAxis.stackLabels.x\n         */\n        /**\n         * The y position offset of the label relative to the tick position\n         * on the axis. The default value is calculated at runtime and depends\n         * on orientation and whether the stack is positive or negative.\n         *\n         * @sample {highcharts} highcharts/yaxis/stacklabels-y/\n         *         Stack total labels with y offset\n         *\n         * @type      {number}\n         * @since     2.1.5\n         * @product   highcharts\n         * @apioption yAxis.stackLabels.y\n         */\n        /**\n         * Whether to force the axis to start on a tick. Use this option with\n         * the `maxPadding` option to control the axis start.\n         *\n         * This option is always disabled, when panning type is\n         * either `y` or `xy`.\n         *\n         * @see [type](#chart.panning.type)\n         *\n         * @sample {highcharts} highcharts/xaxis/startontick-false/\n         *         False by default\n         * @sample {highcharts} highcharts/xaxis/startontick-true/\n         *         True\n         * @sample {highstock} stock/xaxis/endontick/\n         *         False for Y axis\n         *\n         * @since   1.2.0\n         * @product highcharts highstock gantt\n         */\n        startOnTick: true,\n        title: {\n            /**\n             * The pixel distance between the axis labels and the title.\n             * Positive values are outside the axis line, negative are inside.\n             *\n             * @sample {highcharts} highcharts/xaxis/title-margin/\n             *         Y axis title margin of 60\n             *\n             * @type      {number}\n             * @default   40\n             * @apioption yAxis.title.margin\n             */\n            /**\n             * The actual text of the axis title. Horizontal texts can contain\n             * HTML, but rotated texts are painted using vector techniques and\n             * must be clean text. The Y axis title is disabled by setting the\n             * `text` option to `undefined`.\n             *\n             * @sample {highcharts} highcharts/xaxis/title-text/\n             *         Custom HTML\n             *\n             * @type    {string|null}\n             * @default {highcharts} Values\n             * @default {highstock} undefined\n             * @product highcharts highstock gantt\n             */\n            text: 'Values'\n        },\n        /**\n         * The top position of the Y axis. If it's a number, it is interpreted\n         * as pixel position relative to the chart.\n         *\n         * Since Highcharts 2: If it's a percentage string, it is interpreted as\n         * percentages of the plot height, offset from plot area top.\n         *\n         * @see [yAxis.height](#yAxis.height)\n         *\n         * @sample {highstock} stock/demo/candlestick-and-volume/\n         *         Percentage height panes\n         *\n         * @type      {number|string}\n         * @product   highcharts highstock\n         * @apioption yAxis.top\n         */\n        /**\n         * The stack labels show the total value for each bar in a stacked\n         * column or bar chart. The label will be placed on top of positive\n         * columns and below negative columns. In case of an inverted column\n         * chart or a bar chart the label is placed to the right of positive\n         * bars and to the left of negative bars.\n         *\n         * @product highcharts\n         */\n        stackLabels: {\n            /**\n             * Enable or disable the initial animation when a series is\n             * displayed for the `stackLabels`. The animation can also be set as\n             * a configuration object. Please note that this option only\n             * applies to the initial animation.\n             * For other animations, see [chart.animation](#chart.animation)\n             * and the animation parameter under the API methods.\n             * The following properties are supported:\n             *\n             * - `defer`: The animation delay time in milliseconds.\n             *\n             * @sample {highcharts} highcharts/plotoptions/animation-defer/\n             *          Animation defer settings\n             * @type {boolean|Partial<Highcharts.AnimationOptionsObject>}\n             * @since 8.2.0\n             * @apioption yAxis.stackLabels.animation\n             */\n            animation: {},\n            /**\n             * The animation delay time in milliseconds.\n             * Set to `0` renders stackLabel immediately.\n             * As `undefined` inherits defer time from the [series.animation.defer](#plotOptions.series.animation.defer).\n             *\n             * @type      {number}\n             * @since 8.2.0\n             * @apioption yAxis.stackLabels.animation.defer\n             */\n            /**\n             * Allow the stack labels to overlap.\n             *\n             * @sample {highcharts} highcharts/yaxis/stacklabels-allowoverlap-false/\n             *         Default false\n             *\n             * @since   5.0.13\n             * @product highcharts\n             */\n            allowOverlap: false,\n            /**\n             * The background color or gradient for the stack label.\n             *\n             * @sample {highcharts} highcharts/yaxis/stacklabels-box/\n             *          Stack labels box options\n             * @type      {Highcharts.ColorType}\n             * @since 8.1.0\n             * @apioption yAxis.stackLabels.backgroundColor\n             */\n            /**\n             * The border color for the stack label. Defaults to `undefined`.\n             *\n             * @sample {highcharts} highcharts/yaxis/stacklabels-box/\n             *          Stack labels box options\n             * @type      {Highcharts.ColorType}\n             * @since 8.1.0\n             * @apioption yAxis.stackLabels.borderColor\n             */\n            /**\n             * The border radius in pixels for the stack label.\n             *\n             * @sample {highcharts} highcharts/yaxis/stacklabels-box/\n             *          Stack labels box options\n             * @type      {number}\n             * @default   0\n             * @since 8.1.0\n             * @apioption yAxis.stackLabels.borderRadius\n             */\n            /**\n             * The border width in pixels for the stack label.\n             *\n             * @sample {highcharts} highcharts/yaxis/stacklabels-box/\n             *          Stack labels box options\n             * @type      {number}\n             * @default   0\n             * @since 8.1.0\n             * @apioption yAxis.stackLabels.borderWidth\n             */\n            /**\n             * Enable or disable the stack total labels.\n             *\n             * @sample {highcharts} highcharts/yaxis/stacklabels-enabled/\n             *         Enabled stack total labels\n             * @sample {highcharts} highcharts/yaxis/stacklabels-enabled-waterfall/\n             *         Enabled stack labels in waterfall chart\n             *\n             * @since   2.1.5\n             * @product highcharts\n             */\n            enabled: false,\n            /**\n             * Whether to hide stack labels that are outside the plot area.\n             * By default, the stack label is moved\n             * inside the plot area according to the\n             * [overflow](/highcharts/#yAxis/stackLabels/overflow)\n             * option.\n             *\n             * @type  {boolean}\n             * @since 7.1.3\n             */\n            crop: true,\n            /**\n             * How to handle stack total labels that flow outside the plot area.\n             * The default is set to `\"justify\"`,\n             * which aligns them inside the plot area.\n             * For columns and bars, this means it will be moved inside the bar.\n             * To display stack labels outside the plot area,\n             * set `crop` to `false` and `overflow` to `\"allow\"`.\n             *\n             * @sample highcharts/yaxis/stacklabels-overflow/\n             *         Stack labels flows outside the plot area.\n             *\n             * @type  {Highcharts.DataLabelsOverflowValue}\n             * @since 7.1.3\n             */\n            overflow: 'justify',\n            /* eslint-disable valid-jsdoc */\n            /**\n             * Callback JavaScript function to format the label. The value is\n             * given by `this.total`.\n             *\n             * @sample {highcharts} highcharts/yaxis/stacklabels-formatter/\n             *         Added units to stack total value\n             *\n             * @type    {Highcharts.FormatterCallbackFunction<Highcharts.StackItemObject>}\n             * @since   2.1.5\n             * @product highcharts\n             */\n            formatter: function () {\n                var numberFormatter = this.axis.chart.numberFormatter;\n                /* eslint-enable valid-jsdoc */\n                return numberFormatter(this.total || 0, -1);\n            },\n            /**\n             * CSS styles for the label.\n             *\n             * In styled mode, the styles are set in the\n             * `.highcharts-stack-label` class.\n             *\n             * @sample {highcharts} highcharts/yaxis/stacklabels-style/\n             *         Red stack total labels\n             *\n             * @type    {Highcharts.CSSObject}\n             * @since   2.1.5\n             * @product highcharts\n             */\n            style: {\n                /** @internal */\n                color: \"#000000\" /* Palette.neutralColor100 */,\n                /**\n                 * @type {number|string}\n                 */\n                fontSize: '0.7em',\n                /** @internal */\n                fontWeight: 'bold',\n                /** @internal */\n                textOutline: '1px contrast'\n            }\n        },\n        gridLineWidth: 1,\n        lineWidth: 0\n    };\n})(AxisDefaults || (AxisDefaults = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Axis_AxisDefaults = (AxisDefaults);\n\n;// ./code/es5/es-modules/Core/Foundation.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar Foundation_addEvent = Core_Utilities.addEvent, Foundation_isFunction = Core_Utilities.isFunction, Foundation_objectEach = Core_Utilities.objectEach, Foundation_removeEvent = Core_Utilities.removeEvent;\n/* *\n *\n *  Class Namespace\n *\n * */\nvar Foundation;\n(function (Foundation) {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * Register event options. If an event handler is set on the options, it\n     * should be subject to Chart.update, Axis.update and Series.update. This is\n     * contrary to general handlers that are set directly using addEvent either\n     * on the class or on the instance. #6538, #6943, #10861.\n     * @private\n     */\n    function registerEventOptions(component, options) {\n        // A lookup over those events that are added by _options_ (not\n        // programmatically). These are updated through .update()\n        component.eventOptions = component.eventOptions || {};\n        // Register event listeners\n        Foundation_objectEach(options.events, function (event, eventType) {\n            // If event does not exist, or is changed by the .update()\n            // function\n            if (component.eventOptions[eventType] !== event) {\n                // Remove existing if set by option\n                if (component.eventOptions[eventType]) {\n                    Foundation_removeEvent(component, eventType, component.eventOptions[eventType]);\n                    delete component.eventOptions[eventType];\n                }\n                if (Foundation_isFunction(event)) {\n                    component.eventOptions[eventType] = event;\n                    Foundation_addEvent(component, eventType, event, {\n                        order: 0 // #14080 fire those events as firsts\n                    });\n                }\n            }\n        });\n    }\n    Foundation.registerEventOptions = registerEventOptions;\n})(Foundation || (Foundation = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Core_Foundation = (Foundation);\n\n;// ./code/es5/es-modules/Core/Axis/Tick.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar Tick_deg2rad = Core_Globals.deg2rad;\n\nvar Tick_clamp = Core_Utilities.clamp, Tick_correctFloat = Core_Utilities.correctFloat, Tick_defined = Core_Utilities.defined, Tick_destroyObjectProperties = Core_Utilities.destroyObjectProperties, Tick_extend = Core_Utilities.extend, Tick_fireEvent = Core_Utilities.fireEvent, Tick_getAlignFactor = Core_Utilities.getAlignFactor, Tick_isNumber = Core_Utilities.isNumber, Tick_merge = Core_Utilities.merge, Tick_objectEach = Core_Utilities.objectEach, Tick_pick = Core_Utilities.pick;\n/* *\n *\n *  Class\n *\n * */\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/**\n * The Tick class.\n *\n * @class\n * @name Highcharts.Tick\n *\n * @param {Highcharts.Axis} axis\n * The axis of the tick.\n *\n * @param {number} pos\n * The position of the tick on the axis in terms of axis values.\n *\n * @param {string} [type]\n * The type of tick, either 'minor' or an empty string\n *\n * @param {boolean} [noLabel=false]\n * Whether to disable the label or not. Defaults to false.\n *\n * @param {Object} [parameters]\n * Optional parameters for the tick.\n */\nvar Tick = /** @class */ (function () {\n    /* *\n     *\n     *  Constructors\n     *\n     * */\n    function Tick(axis, pos, type, noLabel, parameters) {\n        this.isNew = true;\n        this.isNewLabel = true;\n        /**\n         * The related axis of the tick.\n         * @name Highcharts.Tick#axis\n         * @type {Highcharts.Axis}\n         */\n        this.axis = axis;\n        /**\n         * The logical position of the tick on the axis in terms of axis values.\n         * @name Highcharts.Tick#pos\n         * @type {number}\n         */\n        this.pos = pos;\n        /**\n         * The tick type, which can be `\"minor\"`, or an empty string.\n         * @name Highcharts.Tick#type\n         * @type {string}\n         */\n        this.type = type || '';\n        this.parameters = parameters || {};\n        /**\n         * The mark offset of the tick on the axis. Usually `undefined`, numeric\n         * for grid axes.\n         * @name Highcharts.Tick#tickmarkOffset\n         * @type {number|undefined}\n         */\n        this.tickmarkOffset = this.parameters.tickmarkOffset;\n        this.options = this.parameters.options;\n        Tick_fireEvent(this, 'init');\n        if (!type && !noLabel) {\n            this.addLabel();\n        }\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Write the tick label.\n     *\n     * @private\n     * @function Highcharts.Tick#addLabel\n     */\n    Tick.prototype.addLabel = function () {\n        var tick = this,\n            axis = tick.axis,\n            options = axis.options,\n            chart = axis.chart,\n            categories = axis.categories,\n            log = axis.logarithmic,\n            names = axis.names,\n            pos = tick.pos,\n            labelOptions = Tick_pick(tick.options && tick.options.labels,\n            options.labels),\n            tickPositions = axis.tickPositions,\n            isFirst = pos === tickPositions[0],\n            isLast = pos === tickPositions[tickPositions.length - 1],\n            animateLabels = (!labelOptions.step || labelOptions.step === 1) &&\n                axis.tickInterval === 1,\n            tickPositionInfo = tickPositions.info;\n        var label = tick.label,\n            dateTimeLabelFormat,\n            dateTimeLabelFormats,\n            i;\n        // The context value\n        var value = this.parameters.category || (categories ?\n                Tick_pick(categories[pos],\n            names[pos],\n            pos) :\n                pos);\n        if (log && Tick_isNumber(value)) {\n            value = Tick_correctFloat(log.lin2log(value));\n        }\n        // Set the datetime label format. If a higher rank is set for this\n        // position, use that. If not, use the general format.\n        if (axis.dateTime) {\n            if (tickPositionInfo) {\n                dateTimeLabelFormats = chart.time.resolveDTLFormat(options.dateTimeLabelFormats[(!options.grid &&\n                    tickPositionInfo.higherRanks[pos]) ||\n                    tickPositionInfo.unitName]);\n                dateTimeLabelFormat = dateTimeLabelFormats.main;\n            }\n            else if (Tick_isNumber(value)) { // #1441\n                dateTimeLabelFormat = axis.dateTime.getXDateFormat(value, options.dateTimeLabelFormats ||\n                    {});\n            }\n        }\n        // Set properties for access in render method\n        /**\n         * True if the tick is the first one on the axis.\n         * @name Highcharts.Tick#isFirst\n         * @readonly\n         * @type {boolean|undefined}\n         */\n        tick.isFirst = isFirst;\n        /**\n         * True if the tick is the last one on the axis.\n         * @name Highcharts.Tick#isLast\n         * @readonly\n         * @type {boolean|undefined}\n         */\n        tick.isLast = isLast;\n        // Get the string\n        var ctx = {\n                axis: axis,\n                chart: chart,\n                dateTimeLabelFormat: dateTimeLabelFormat,\n                isFirst: isFirst,\n                isLast: isLast,\n                pos: pos,\n                tick: tick,\n                tickPositionInfo: tickPositionInfo,\n                value: value\n            };\n        // Fire an event that allows modifying the context for use in\n        // `labels.format` and `labels.formatter`.\n        Tick_fireEvent(this, 'labelFormat', ctx);\n        // Label formatting. When `labels.format` is given, we first run the\n        // defaultFormatter and append the result to the context as `text`.\n        // Handy for adding prefix or suffix while keeping default number\n        // formatting.\n        var labelFormatter = function (ctx) {\n                if (labelOptions.formatter) {\n                    return labelOptions.formatter.call(ctx,\n            ctx);\n            }\n            if (labelOptions.format) {\n                ctx.text = axis.defaultLabelFormatter.call(ctx);\n                return Core_Templating.format(labelOptions.format, ctx, chart);\n            }\n            return axis.defaultLabelFormatter.call(ctx);\n        };\n        var str = labelFormatter.call(ctx,\n            ctx);\n        // Set up conditional formatting based on the format list if existing.\n        var list = dateTimeLabelFormats && dateTimeLabelFormats.list;\n        if (list) {\n            tick.shortenLabel = function () {\n                for (i = 0; i < list.length; i++) {\n                    Tick_extend(ctx, { dateTimeLabelFormat: list[i] });\n                    label.attr({\n                        text: labelFormatter.call(ctx, ctx)\n                    });\n                    if (label.getBBox().width <\n                        axis.getSlotWidth(tick) - 2 *\n                            (labelOptions.padding || 0)) {\n                        return;\n                    }\n                }\n                label.attr({\n                    text: ''\n                });\n            };\n        }\n        else {\n            // #15692\n            tick.shortenLabel = void 0;\n        }\n        // Call only after first render\n        if (animateLabels && axis._addedPlotLB) {\n            tick.moveLabel(str, labelOptions);\n        }\n        // First call\n        if (!Tick_defined(label) && !tick.movedLabel) {\n            /**\n             * The rendered text label of the tick.\n             * @name Highcharts.Tick#label\n             * @type {Highcharts.SVGElement|undefined}\n             */\n            tick.label = label = tick.createLabel(str, labelOptions);\n            // Base value to detect change for new calls to getBBox\n            tick.rotation = 0;\n            // Update\n        }\n        else if (label && label.textStr !== str && !animateLabels) {\n            // When resetting text, also reset the width if dynamically set\n            // (#8809)\n            if (label.textWidth &&\n                !labelOptions.style.width &&\n                !label.styles.width) {\n                label.css({ width: null });\n            }\n            label.attr({ text: str });\n            label.textPxLength = label.getBBox().width;\n        }\n    };\n    /**\n     * Render and return the label of the tick.\n     *\n     * @private\n     * @function Highcharts.Tick#createLabel\n     */\n    Tick.prototype.createLabel = function (str, labelOptions, xy) {\n        var axis = this.axis,\n            _a = axis.chart,\n            renderer = _a.renderer,\n            styledMode = _a.styledMode,\n            label = Tick_defined(str) && labelOptions.enabled ?\n                renderer\n                    .text(str,\n            xy === null || xy === void 0 ? void 0 : xy.x,\n            xy === null || xy === void 0 ? void 0 : xy.y,\n            labelOptions.useHTML)\n                    .add(axis.labelGroup) :\n                void 0;\n        // Un-rotated length\n        if (label) {\n            var whiteSpace = labelOptions.style.whiteSpace || 'normal';\n            // Without position absolute, IE export sometimes is wrong\n            if (!styledMode) {\n                label.css(Tick_merge(labelOptions.style, { whiteSpace: 'nowrap' }));\n            }\n            label.textPxLength = label.getBBox().width;\n            if (!styledMode) {\n                label.css({ whiteSpace: whiteSpace });\n            }\n        }\n        return label;\n    };\n    /**\n     * Destructor for the tick prototype\n     *\n     * @private\n     * @function Highcharts.Tick#destroy\n     */\n    Tick.prototype.destroy = function () {\n        Tick_destroyObjectProperties(this, this.axis);\n    };\n    /**\n     * Gets the x and y positions for ticks in terms of pixels.\n     *\n     * @private\n     * @function Highcharts.Tick#getPosition\n     *\n     * @param {boolean} horiz\n     * Whether the tick is on an horizontal axis or not.\n     *\n     * @param {number} tickPos\n     * Position of the tick.\n     *\n     * @param {number} tickmarkOffset\n     * Tickmark offset for all ticks.\n     *\n     * @param {boolean} [old]\n     * Whether the axis has changed or not.\n     *\n     * @return {Highcharts.PositionObject}\n     * The tick position.\n     *\n     * @emits Highcharts.Tick#event:afterGetPosition\n     */\n    Tick.prototype.getPosition = function (horiz, tickPos, tickmarkOffset, old) {\n        var axis = this.axis,\n            chart = axis.chart,\n            cHeight = (old && chart.oldChartHeight) || chart.chartHeight,\n            pos = {\n                x: horiz ?\n                    Tick_correctFloat(axis.translate(tickPos + tickmarkOffset,\n            void 0,\n            void 0,\n            old) +\n                        axis.transB) :\n                    (axis.left +\n                        axis.offset +\n                        (axis.opposite ?\n                            (((old && chart.oldChartWidth) ||\n                                chart.chartWidth) -\n                                axis.right -\n                                axis.left) :\n                            0)),\n                y: horiz ?\n                    (cHeight -\n                        axis.bottom +\n                        axis.offset -\n                        (axis.opposite ? axis.height : 0)) :\n                    Tick_correctFloat(cHeight -\n                        axis.translate(tickPos + tickmarkOffset,\n            void 0,\n            void 0,\n            old) -\n                        axis.transB)\n            };\n        // Chrome workaround for #10516\n        pos.y = Tick_clamp(pos.y, -1e9, 1e9);\n        Tick_fireEvent(this, 'afterGetPosition', { pos: pos });\n        return pos;\n    };\n    /**\n     * Get the x, y position of the tick label\n     * @private\n     */\n    Tick.prototype.getLabelPosition = function (x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {\n        var axis = this.axis,\n            transA = axis.transA,\n            reversed = ( // #7911\n            axis.isLinked && axis.linkedParent ?\n                axis.linkedParent.reversed :\n                axis.reversed),\n            staggerLines = axis.staggerLines,\n            rotCorr = axis.tickRotCorr || { x: 0,\n            y: 0 }, \n            // Adjust for label alignment if we use reserveSpace: true (#5286)\n            labelOffsetCorrection = (!horiz && !axis.reserveSpaceDefault ?\n                -axis.labelOffset * (axis.labelAlign === 'center' ? 0.5 : 1) :\n                0),\n            distance = labelOptions.distance,\n            pos = {};\n        var yOffset,\n            line;\n        if (axis.side === 0) {\n            yOffset = label.rotation ? -distance : -label.getBBox().height;\n        }\n        else if (axis.side === 2) {\n            yOffset = rotCorr.y + distance;\n        }\n        else {\n            // #3140, #3140\n            yOffset = Math.cos(label.rotation * Tick_deg2rad) *\n                (rotCorr.y - label.getBBox(false, 0).height / 2);\n        }\n        if (Tick_defined(labelOptions.y)) {\n            yOffset = axis.side === 0 && axis.horiz ?\n                labelOptions.y + yOffset :\n                labelOptions.y;\n        }\n        x = x +\n            Tick_pick(labelOptions.x, [0, 1, 0, -1][axis.side] * distance) +\n            labelOffsetCorrection +\n            rotCorr.x -\n            (tickmarkOffset && horiz ?\n                tickmarkOffset * transA * (reversed ? -1 : 1) :\n                0);\n        y = y + yOffset - (tickmarkOffset && !horiz ?\n            tickmarkOffset * transA * (reversed ? 1 : -1) : 0);\n        // Correct for staggered labels\n        if (staggerLines) {\n            line = (index / (step || 1) % staggerLines);\n            if (axis.opposite) {\n                line = staggerLines - line - 1;\n            }\n            y += line * (axis.labelOffset / staggerLines);\n        }\n        pos.x = x;\n        pos.y = Math.round(y);\n        Tick_fireEvent(this, 'afterGetLabelPosition', { pos: pos, tickmarkOffset: tickmarkOffset, index: index });\n        return pos;\n    };\n    /**\n     * Get the offset height or width of the label\n     *\n     * @private\n     * @function Highcharts.Tick#getLabelSize\n     */\n    Tick.prototype.getLabelSize = function () {\n        return this.label ?\n            this.label.getBBox()[this.axis.horiz ? 'height' : 'width'] :\n            0;\n    };\n    /**\n     * Extendible method to return the path of the marker\n     * @private\n     */\n    Tick.prototype.getMarkPath = function (x, y, tickLength, tickWidth, horiz, renderer) {\n        if (horiz === void 0) { horiz = false; }\n        return renderer.crispLine([[\n                'M',\n                x,\n                y\n            ], [\n                'L',\n                x + (horiz ? 0 : -tickLength),\n                y + (horiz ? tickLength : 0)\n            ]], tickWidth);\n    };\n    /**\n     * Handle the label overflow by adjusting the labels to the left and right\n     * edge, or hide them if they collide into the neighbour label.\n     *\n     * @private\n     * @function Highcharts.Tick#handleOverflow\n     */\n    Tick.prototype.handleOverflow = function (xy) {\n        var tick = this,\n            axis = this.axis,\n            labelOptions = axis.options.labels,\n            pxPos = xy.x,\n            chartWidth = axis.chart.chartWidth,\n            spacing = axis.chart.spacing,\n            leftBound = Tick_pick(axis.labelLeft,\n            Math.min(axis.pos,\n            spacing[3])),\n            rightBound = Tick_pick(axis.labelRight,\n            Math.max(!axis.isRadial ? axis.pos + axis.len : 0,\n            chartWidth - spacing[1])),\n            label = this.label,\n            rotation = this.rotation,\n            factor = Tick_getAlignFactor(axis.labelAlign || label.attr('align')),\n            labelWidth = label.getBBox().width,\n            slotWidth = axis.getSlotWidth(tick),\n            xCorrection = factor,\n            css = {};\n        var modifiedSlotWidth = slotWidth,\n            goRight = 1,\n            leftPos,\n            rightPos,\n            textWidth;\n        // Check if the label overshoots the chart spacing box. If it does, move\n        // it. If it now overshoots the slotWidth, add ellipsis.\n        if (!rotation && labelOptions.overflow === 'justify') {\n            leftPos = pxPos - factor * labelWidth;\n            rightPos = pxPos + (1 - factor) * labelWidth;\n            if (leftPos < leftBound) {\n                modifiedSlotWidth =\n                    xy.x + modifiedSlotWidth * (1 - factor) - leftBound;\n            }\n            else if (rightPos > rightBound) {\n                modifiedSlotWidth =\n                    rightBound - xy.x + modifiedSlotWidth * factor;\n                goRight = -1;\n            }\n            modifiedSlotWidth = Math.min(slotWidth, modifiedSlotWidth); // #4177\n            if (modifiedSlotWidth < slotWidth && axis.labelAlign === 'center') {\n                xy.x += (goRight *\n                    (slotWidth -\n                        modifiedSlotWidth -\n                        xCorrection * (slotWidth - Math.min(labelWidth, modifiedSlotWidth))));\n            }\n            // If the label width exceeds the available space, set a text width\n            // to be picked up below. Also, if a width has been set before, we\n            // need to set a new one because the reported labelWidth will be\n            // limited by the box (#3938).\n            if (labelWidth > modifiedSlotWidth ||\n                (axis.autoRotation && (label.styles || {}).width)) {\n                textWidth = modifiedSlotWidth;\n            }\n            // Add ellipsis to prevent rotated labels to be clipped against the edge\n            // of the chart\n        }\n        else if (rotation < 0 &&\n            pxPos - factor * labelWidth < leftBound) {\n            textWidth = Math.round(pxPos / Math.cos(rotation * Tick_deg2rad) - leftBound);\n        }\n        else if (rotation > 0 &&\n            pxPos + factor * labelWidth > rightBound) {\n            textWidth = Math.round((chartWidth - pxPos) /\n                Math.cos(rotation * Tick_deg2rad));\n        }\n        if (textWidth && label) {\n            if (tick.shortenLabel) {\n                tick.shortenLabel();\n            }\n            else {\n                label.css(Tick_extend(css, {\n                    width: Math.floor(textWidth) + 'px',\n                    lineClamp: axis.isRadial ? 0 : 1\n                }));\n            }\n        }\n    };\n    /**\n     * Try to replace the label if the same one already exists.\n     *\n     * @private\n     * @function Highcharts.Tick#moveLabel\n     */\n    Tick.prototype.moveLabel = function (str, labelOptions) {\n        var tick = this,\n            label = tick.label,\n            axis = tick.axis;\n        var moved = false,\n            labelPos;\n        if (label && label.textStr === str) {\n            tick.movedLabel = label;\n            moved = true;\n            delete tick.label;\n        }\n        else { // Find a label with the same string\n            Tick_objectEach(axis.ticks, function (currentTick) {\n                if (!moved &&\n                    !currentTick.isNew &&\n                    currentTick !== tick &&\n                    currentTick.label &&\n                    currentTick.label.textStr === str) {\n                    tick.movedLabel = currentTick.label;\n                    moved = true;\n                    currentTick.labelPos = tick.movedLabel.xy;\n                    delete currentTick.label;\n                }\n            });\n        }\n        // Create new label if the actual one is moved\n        if (!moved && (tick.labelPos || label)) {\n            labelPos = tick.labelPos || label.xy;\n            tick.movedLabel = tick.createLabel(str, labelOptions, labelPos);\n            if (tick.movedLabel) {\n                tick.movedLabel.attr({ opacity: 0 });\n            }\n        }\n    };\n    /**\n     * Put everything in place\n     *\n     * @private\n     * @param {number} index\n     *\n     * @param {boolean} [old]\n     * Use old coordinates to prepare an animation into new position\n     *\n     * @param {number} [opacity]\n     */\n    Tick.prototype.render = function (index, old, opacity) {\n        var tick = this,\n            axis = tick.axis,\n            horiz = axis.horiz,\n            pos = tick.pos,\n            tickmarkOffset = Tick_pick(tick.tickmarkOffset,\n            axis.tickmarkOffset),\n            xy = tick.getPosition(horiz,\n            pos,\n            tickmarkOffset,\n            old),\n            x = xy.x,\n            y = xy.y,\n            axisStart = axis.pos,\n            axisEnd = axisStart + axis.len,\n            pxPos = horiz ? x : y;\n        // Anything that is not between `axis.pos` and `axis.pos + axis.length`\n        // should not be visible (#20166). The `correctFloat` is for reversed\n        // axes in Safari.\n        if (!axis.chart.polar &&\n            tick.isNew &&\n            (Tick_correctFloat(pxPos) < axisStart || pxPos > axisEnd)) {\n            opacity = 0;\n        }\n        var labelOpacity = Tick_pick(opacity,\n            tick.label && tick.label.newOpacity, // #15528\n            1);\n        opacity = Tick_pick(opacity, 1);\n        this.isActive = true;\n        // Create the grid line\n        this.renderGridLine(old, opacity);\n        // Create the tick mark\n        this.renderMark(xy, opacity);\n        // The label is created on init - now move it into place\n        this.renderLabel(xy, old, labelOpacity, index);\n        tick.isNew = false;\n        Tick_fireEvent(this, 'afterRender');\n    };\n    /**\n     * Renders the gridLine.\n     *\n     * @private\n     * @function Highcharts.Tick#renderGridLine\n     * @param {boolean} old  Whether or not the tick is old\n     * @param {number} opacity  The opacity of the grid line\n     */\n    Tick.prototype.renderGridLine = function (old, opacity) {\n        var tick = this,\n            axis = tick.axis,\n            options = axis.options,\n            attribs = {},\n            pos = tick.pos,\n            type = tick.type,\n            tickmarkOffset = Tick_pick(tick.tickmarkOffset,\n            axis.tickmarkOffset),\n            renderer = axis.chart.renderer;\n        var gridLine = tick.gridLine,\n            gridLinePath,\n            gridLineWidth = options.gridLineWidth,\n            gridLineColor = options.gridLineColor,\n            dashStyle = options.gridLineDashStyle;\n        if (tick.type === 'minor') {\n            gridLineWidth = options.minorGridLineWidth;\n            gridLineColor = options.minorGridLineColor;\n            dashStyle = options.minorGridLineDashStyle;\n        }\n        if (!gridLine) {\n            if (!axis.chart.styledMode) {\n                attribs.stroke = gridLineColor;\n                attribs['stroke-width'] = gridLineWidth || 0;\n                attribs.dashstyle = dashStyle;\n            }\n            if (!type) {\n                attribs.zIndex = 1;\n            }\n            if (old) {\n                opacity = 0;\n            }\n            /**\n             * The rendered grid line of the tick.\n             * @name Highcharts.Tick#gridLine\n             * @type {Highcharts.SVGElement|undefined}\n             */\n            tick.gridLine = gridLine = renderer.path()\n                .attr(attribs)\n                .addClass('highcharts-' + (type ? type + '-' : '') + 'grid-line')\n                .add(axis.gridGroup);\n        }\n        if (gridLine) {\n            gridLinePath = axis.getPlotLinePath({\n                value: pos + tickmarkOffset,\n                lineWidth: gridLine.strokeWidth(),\n                force: 'pass',\n                old: old,\n                acrossPanes: false // #18025\n            });\n            // If the parameter 'old' is set, the current call will be followed\n            // by another call, therefore do not do any animations this time\n            if (gridLinePath) {\n                gridLine[old || tick.isNew ? 'attr' : 'animate']({\n                    d: gridLinePath,\n                    opacity: opacity\n                });\n            }\n        }\n    };\n    /**\n     * Renders the tick mark.\n     *\n     * @private\n     * @function Highcharts.Tick#renderMark\n     * @param {Highcharts.PositionObject} xy  The position vector of the mark\n     * @param {number} opacity  The opacity of the mark\n     */\n    Tick.prototype.renderMark = function (xy, opacity) {\n        var tick = this, axis = tick.axis, options = axis.options, renderer = axis.chart.renderer, type = tick.type, tickSize = axis.tickSize(type ? type + 'Tick' : 'tick'), x = xy.x, y = xy.y, tickWidth = Tick_pick(options[type !== 'minor' ? 'tickWidth' : 'minorTickWidth'], !type && axis.isXAxis ? 1 : 0), // X axis defaults to 1\n            tickColor = options[type !== 'minor' ? 'tickColor' : 'minorTickColor'];\n        var mark = tick.mark;\n        var isNewMark = !mark;\n        if (tickSize) {\n            // Negate the length\n            if (axis.opposite) {\n                tickSize[0] = -tickSize[0];\n            }\n            // First time, create it\n            if (!mark) {\n                /**\n                 * The rendered mark of the tick.\n                 * @name Highcharts.Tick#mark\n                 * @type {Highcharts.SVGElement|undefined}\n                 */\n                tick.mark = mark = renderer.path()\n                    .addClass('highcharts-' + (type ? type + '-' : '') + 'tick')\n                    .add(axis.axisGroup);\n                if (!axis.chart.styledMode) {\n                    mark.attr({\n                        stroke: tickColor,\n                        'stroke-width': tickWidth\n                    });\n                }\n            }\n            mark[isNewMark ? 'attr' : 'animate']({\n                d: tick.getMarkPath(x, y, tickSize[0], mark.strokeWidth(), axis.horiz, renderer),\n                opacity: opacity\n            });\n        }\n    };\n    /**\n     * Renders the tick label.\n     * Note: The label should already be created in init(), so it should only\n     * have to be moved into place.\n     *\n     * @private\n     * @function Highcharts.Tick#renderLabel\n     * @param {Highcharts.PositionObject} xy  The position vector of the label\n     * @param {boolean} old  Whether or not the tick is old\n     * @param {number} opacity  The opacity of the label\n     * @param {number} index  The index of the tick\n     */\n    Tick.prototype.renderLabel = function (xy, old, opacity, index) {\n        var tick = this,\n            axis = tick.axis,\n            horiz = axis.horiz,\n            options = axis.options,\n            label = tick.label,\n            labelOptions = options.labels,\n            step = labelOptions.step,\n            tickmarkOffset = Tick_pick(tick.tickmarkOffset,\n            axis.tickmarkOffset),\n            x = xy.x,\n            y = xy.y;\n        var show = true;\n        if (label && Tick_isNumber(x)) {\n            label.xy = xy = tick.getLabelPosition(x, y, label, horiz, labelOptions, tickmarkOffset, index, step);\n            // Apply show first and show last. If the tick is both first and\n            // last, it is a single centered tick, in which case we show the\n            // label anyway (#2100).\n            if ((tick.isFirst &&\n                !tick.isLast &&\n                !options.showFirstLabel) ||\n                (tick.isLast &&\n                    !tick.isFirst &&\n                    !options.showLastLabel)) {\n                show = false;\n                // Handle label overflow and show or hide accordingly\n            }\n            else if (horiz &&\n                !labelOptions.step &&\n                !labelOptions.rotation &&\n                !old &&\n                opacity !== 0) {\n                tick.handleOverflow(xy);\n            }\n            // Apply step\n            if (step && index % step) {\n                // Show those indices dividable by step\n                show = false;\n            }\n            // Set the new position, and show or hide\n            if (show && Tick_isNumber(xy.y)) {\n                xy.opacity = opacity;\n                label[tick.isNewLabel ? 'attr' : 'animate'](xy).show(true);\n                tick.isNewLabel = false;\n            }\n            else {\n                label.hide(); // #1338, #15863\n                tick.isNewLabel = true;\n            }\n        }\n    };\n    /**\n     * Replace labels with the moved ones to perform animation. Additionally\n     * destroy unused labels.\n     *\n     * @private\n     * @function Highcharts.Tick#replaceMovedLabel\n     */\n    Tick.prototype.replaceMovedLabel = function () {\n        var tick = this,\n            label = tick.label,\n            axis = tick.axis;\n        // Animate and destroy\n        if (label && !tick.isNew) {\n            label.animate({ opacity: 0 }, void 0, label.destroy);\n            delete tick.label;\n        }\n        axis.isDirty = true;\n        tick.label = tick.movedLabel;\n        delete tick.movedLabel;\n    };\n    return Tick;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Axis_Tick = (Tick);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * Optional parameters for the tick.\n * @private\n * @interface Highcharts.TickParametersObject\n */ /**\n* Set category for the tick.\n* @name Highcharts.TickParametersObject#category\n* @type {string|undefined}\n*/ /**\n* @name Highcharts.TickParametersObject#options\n* @type {Highcharts.Dictionary<any>|undefined}\n*/ /**\n* Set tickmarkOffset for the tick.\n* @name Highcharts.TickParametersObject#tickmarkOffset\n* @type {number|undefined}\n*/\n/**\n * Additional time tick information.\n *\n * @interface Highcharts.TimeTicksInfoObject\n * @extends Highcharts.TimeNormalizedObject\n */ /**\n* @name Highcharts.TimeTicksInfoObject#higherRanks\n* @type {Array<string>}\n*/ /**\n* @name Highcharts.TimeTicksInfoObject#totalRange\n* @type {number}\n*/\n(''); // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Axis/Axis.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar Axis_animObject = AnimationUtilities.animObject;\n\nvar xAxis = Axis_AxisDefaults.xAxis, yAxis = Axis_AxisDefaults.yAxis;\n\n\nvar Axis_defaultOptions = Defaults.defaultOptions;\n\nvar registerEventOptions = Core_Foundation.registerEventOptions;\n\nvar Axis_deg2rad = Core_Globals.deg2rad;\n\n\nvar Axis_arrayMax = Core_Utilities.arrayMax, Axis_arrayMin = Core_Utilities.arrayMin, Axis_clamp = Core_Utilities.clamp, Axis_correctFloat = Core_Utilities.correctFloat, Axis_defined = Core_Utilities.defined, Axis_destroyObjectProperties = Core_Utilities.destroyObjectProperties, Axis_erase = Core_Utilities.erase, Axis_error = Core_Utilities.error, Axis_extend = Core_Utilities.extend, Axis_fireEvent = Core_Utilities.fireEvent, Axis_getClosestDistance = Core_Utilities.getClosestDistance, Axis_insertItem = Core_Utilities.insertItem, Axis_isArray = Core_Utilities.isArray, Axis_isNumber = Core_Utilities.isNumber, Axis_isString = Core_Utilities.isString, Axis_merge = Core_Utilities.merge, Axis_normalizeTickInterval = Core_Utilities.normalizeTickInterval, Axis_objectEach = Core_Utilities.objectEach, Axis_pick = Core_Utilities.pick, Axis_relativeLength = Core_Utilities.relativeLength, Axis_removeEvent = Core_Utilities.removeEvent, Axis_splat = Core_Utilities.splat, Axis_syncTimeout = Core_Utilities.syncTimeout;\nvar getNormalizedTickInterval = function (axis, tickInterval) { return Axis_normalizeTickInterval(tickInterval, void 0, void 0, Axis_pick(axis.options.allowDecimals, \n// If the tick interval is greater than 0.5, avoid decimals, as\n// linear axes are often used to render discrete values (#3363). If\n// a tick amount is set, allow decimals by default, as it increases\n// the chances for a good fit.\ntickInterval < 0.5 || axis.tickAmount !== void 0), !!axis.tickAmount); };\nAxis_extend(Axis_defaultOptions, { xAxis: xAxis, yAxis: Axis_merge(xAxis, yAxis) });\n/* *\n *\n *  Class\n *\n * */\n/**\n * Create a new axis object. Called internally when instantiating a new chart or\n * adding axes by {@link Highcharts.Chart#addAxis}.\n *\n * A chart can have from 0 axes (pie chart) to multiples. In a normal, single\n * series cartesian chart, there is one X axis and one Y axis.\n *\n * The X axis or axes are referenced by {@link Highcharts.Chart.xAxis}, which is\n * an array of Axis objects. If there is only one axis, it can be referenced\n * through `chart.xAxis[0]`, and multiple axes have increasing indices. The same\n * pattern goes for Y axes.\n *\n * If you need to get the axes from a series object, use the `series.xAxis` and\n * `series.yAxis` properties. These are not arrays, as one series can only be\n * associated to one X and one Y axis.\n *\n * A third way to reference the axis programmatically is by `id`. Add an `id` in\n * the axis configuration options, and get the axis by\n * {@link Highcharts.Chart#get}.\n *\n * Configuration options for the axes are given in options.xAxis and\n * options.yAxis.\n *\n * @class\n * @name Highcharts.Axis\n *\n * @param {Highcharts.Chart} chart\n * The Chart instance to apply the axis on.\n *\n * @param {Highcharts.AxisOptions} userOptions\n * Axis options\n */\nvar Axis = /** @class */ (function () {\n    /* *\n     *\n     *  Constructors\n     *\n     * */\n    function Axis(chart, userOptions, coll) {\n        this.init(chart, userOptions, coll);\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Overrideable function to initialize the axis.\n     *\n     * @see {@link Axis}\n     *\n     * @function Highcharts.Axis#init\n     *\n     * @param {Highcharts.Chart} chart\n     * The Chart instance to apply the axis on.\n     *\n     * @param {AxisOptions} userOptions\n     * Axis options.\n     *\n     * @emits Highcharts.Axis#event:afterInit\n     * @emits Highcharts.Axis#event:init\n     */\n    Axis.prototype.init = function (chart, userOptions, coll) {\n        var _a,\n            _b,\n            _c,\n            _d;\n        if (coll === void 0) { coll = this.coll; }\n        var isXAxis = coll === 'xAxis',\n            axis = this,\n            horiz = axis.isZAxis || (chart.inverted ? !isXAxis : isXAxis);\n        /**\n         * The Chart that the axis belongs to.\n         *\n         * @name Highcharts.Axis#chart\n         * @type {Highcharts.Chart}\n         */\n        axis.chart = chart;\n        /**\n         * Whether the axis is horizontal.\n         *\n         * @name Highcharts.Axis#horiz\n         * @type {boolean|undefined}\n         */\n        axis.horiz = horiz;\n        /**\n         * Whether the axis is the x-axis.\n         *\n         * @name Highcharts.Axis#isXAxis\n         * @type {boolean|undefined}\n         */\n        axis.isXAxis = isXAxis;\n        /**\n         * The collection where the axis belongs, for example `xAxis`, `yAxis`\n         * or `colorAxis`. Corresponds to properties on Chart, for example\n         * {@link Chart.xAxis}.\n         *\n         * @name Highcharts.Axis#coll\n         * @type {string}\n         */\n        axis.coll = coll;\n        Axis_fireEvent(this, 'init', { userOptions: userOptions });\n        // Needed in setOptions\n        axis.opposite = Axis_pick(userOptions.opposite, axis.opposite);\n        /**\n         * The side on which the axis is rendered. 0 is top, 1 is right, 2\n         * is bottom and 3 is left.\n         *\n         * @name Highcharts.Axis#side\n         * @type {number}\n         */\n        axis.side = Axis_pick(userOptions.side, axis.side, (horiz ?\n            (axis.opposite ? 0 : 2) : // Top : bottom\n            (axis.opposite ? 1 : 3)) // Right : left\n        );\n        /**\n         * Current options for the axis after merge of defaults and user's\n         * options.\n         *\n         * @name Highcharts.Axis#options\n         * @type {Highcharts.AxisOptions}\n         */\n        axis.setOptions(userOptions);\n        var options = axis.options,\n            labelsOptions = options.labels;\n        // Set the type and fire an event\n        (_a = axis.type) !== null && _a !== void 0 ? _a : (axis.type = options.type || 'linear');\n        (_b = axis.uniqueNames) !== null && _b !== void 0 ? _b : (axis.uniqueNames = (_c = options.uniqueNames) !== null && _c !== void 0 ? _c : true);\n        Axis_fireEvent(axis, 'afterSetType');\n        /**\n         * User's options for this axis without defaults.\n         *\n         * @name Highcharts.Axis#userOptions\n         * @type {Highcharts.AxisOptions}\n         */\n        axis.userOptions = userOptions;\n        axis.minPixelPadding = 0;\n        /**\n         * Whether the axis is reversed. Based on the `axis.reversed`,\n         * option, but inverted charts have reversed xAxis by default.\n         *\n         * @name Highcharts.Axis#reversed\n         * @type {boolean}\n         */\n        axis.reversed = Axis_pick(options.reversed, axis.reversed);\n        axis.visible = options.visible;\n        axis.zoomEnabled = options.zoomEnabled;\n        // Initial categories\n        axis.hasNames = this.type === 'category' || options.categories === true;\n        /**\n         * If categories are present for the axis, names are used instead of\n         * numbers for that axis.\n         *\n         * Since Highcharts 3.0, categories can also be extracted by giving each\n         * point a name and setting axis type to `category`. However, if you\n         * have multiple series, best practice remains defining the `categories`\n         * array.\n         *\n         * @see [xAxis.categories](/highcharts/xAxis.categories)\n         *\n         * @name Highcharts.Axis#categories\n         * @type {Array<string>}\n         * @readonly\n         */\n        axis.categories = (Axis_isArray(options.categories) && options.categories) ||\n            (axis.hasNames ? [] : void 0);\n        if (!axis.names) { // Preserve on update (#3830)\n            axis.names = [];\n            axis.names.keys = {};\n        }\n        // Placeholder for plotlines and plotbands groups\n        axis.plotLinesAndBandsGroups = {};\n        // Shorthand types\n        axis.positiveValuesOnly = !!axis.logarithmic;\n        // Flag, if axis is linked to another axis\n        axis.isLinked = Axis_defined(options.linkedTo);\n        /**\n         * List of major ticks mapped by position on axis.\n         *\n         * @see {@link Highcharts.Tick}\n         *\n         * @name Highcharts.Axis#ticks\n         * @type {Highcharts.Dictionary<Highcharts.Tick>}\n         */\n        axis.ticks = {};\n        axis.labelEdge = [];\n        /**\n         * List of minor ticks mapped by position on the axis.\n         *\n         * @see {@link Highcharts.Tick}\n         *\n         * @name Highcharts.Axis#minorTicks\n         * @type {Highcharts.Dictionary<Highcharts.Tick>}\n         */\n        axis.minorTicks = {};\n        // List of plotLines/Bands\n        axis.plotLinesAndBands = [];\n        // Alternate bands\n        axis.alternateBands = {};\n        /**\n         * The length of the axis in terms of pixels.\n         *\n         * @name Highcharts.Axis#len\n         * @type {number}\n         */\n        (_d = axis.len) !== null && _d !== void 0 ? _d : (axis.len = 0);\n        axis.minRange = axis.userMinRange = options.minRange || options.maxZoom;\n        axis.range = options.range;\n        axis.offset = options.offset || 0;\n        /**\n         * The maximum value of the axis. In a logarithmic axis, this is the\n         * logarithm of the real value, and the real value can be obtained from\n         * {@link Axis#getExtremes}.\n         *\n         * @name Highcharts.Axis#max\n         * @type {number|undefined}\n         */\n        axis.max = void 0;\n        /**\n         * The minimum value of the axis. In a logarithmic axis, this is the\n         * logarithm of the real value, and the real value can be obtained from\n         * {@link Axis#getExtremes}.\n         *\n         * @name Highcharts.Axis#min\n         * @type {number|undefined}\n         */\n        axis.min = void 0;\n        /**\n         * The processed crosshair options.\n         *\n         * @name Highcharts.Axis#crosshair\n         * @type {boolean|Highcharts.AxisCrosshairOptions}\n         */\n        var crosshair = Axis_pick(options.crosshair,\n            Axis_splat(chart.options.tooltip.crosshairs)[isXAxis ? 0 : 1]);\n        axis.crosshair = crosshair === true ? {} : crosshair;\n        // Register. Don't add it again on Axis.update().\n        if (chart.axes.indexOf(axis) === -1) { //\n            if (isXAxis) { // #2713\n                chart.axes.splice(chart.xAxis.length, 0, axis);\n            }\n            else {\n                chart.axes.push(axis);\n            }\n            Axis_insertItem(this, chart[this.coll]);\n        }\n        chart.orderItems(axis.coll);\n        /**\n         * All series associated to the axis.\n         *\n         * @name Highcharts.Axis#series\n         * @type {Array<Highcharts.Series>}\n         */\n        axis.series = axis.series || []; // Populated by Series\n        // Reversed axis\n        if (chart.inverted &&\n            !axis.isZAxis &&\n            isXAxis &&\n            !Axis_defined(axis.reversed)) {\n            axis.reversed = true;\n        }\n        axis.labelRotation = Axis_isNumber(labelsOptions.rotation) ?\n            labelsOptions.rotation :\n            void 0;\n        // Register event listeners\n        registerEventOptions(axis, options);\n        Axis_fireEvent(this, 'afterInit');\n    };\n    /**\n     * Merge and set options.\n     *\n     * @private\n     * @function Highcharts.Axis#setOptions\n     *\n     * @param {Highcharts.AxisOptions} userOptions\n     * Axis options.\n     *\n     * @emits Highcharts.Axis#event:afterSetOptions\n     */\n    Axis.prototype.setOptions = function (userOptions) {\n        var sideSpecific = this.horiz ?\n                // Top and bottom axis defaults\n                {\n                    labels: {\n                        autoRotation: [-45],\n                        padding: 3\n                    },\n                    margin: 15\n                } :\n                // Left and right axis, title rotated 90 or 270 degrees\n                // respectively\n                {\n                    labels: {\n                        padding: 1\n                    },\n                    title: {\n                        rotation: 90 * this.side\n                    }\n                };\n        this.options = Axis_merge(sideSpecific, Axis_defaultOptions[this.coll], userOptions);\n        Axis_fireEvent(this, 'afterSetOptions', { userOptions: userOptions });\n    };\n    /**\n     * The default label formatter. The context is a special config object for\n     * the label. In apps, use the\n     * [labels.formatter](https://api.highcharts.com/highcharts/xAxis.labels.formatter)\n     * instead, except when a modification is needed.\n     *\n     * @function Highcharts.Axis#defaultLabelFormatter\n     *\n     * @param {Highcharts.AxisLabelsFormatterContextObject} this\n     * Formatter context of axis label.\n     *\n     * @param {Highcharts.AxisLabelsFormatterContextObject} [ctx]\n     * Formatter context of axis label.\n     *\n     * @return {string}\n     * The formatted label content.\n     */\n    Axis.prototype.defaultLabelFormatter = function () {\n        var axis = this.axis,\n            chart = this.chart,\n            numberFormatter = chart.numberFormatter,\n            value = Axis_isNumber(this.value) ? this.value : NaN,\n            time = axis.chart.time,\n            categories = axis.categories,\n            dateTimeLabelFormat = this.dateTimeLabelFormat,\n            lang = Axis_defaultOptions.lang,\n            numericSymbols = lang.numericSymbols,\n            numSymMagnitude = lang.numericSymbolMagnitude || 1000, \n            // Make sure the same symbol is added for all labels on a linear\n            // axis\n            numericSymbolDetector = axis.logarithmic ?\n                Math.abs(value) :\n                axis.tickInterval;\n        var i = numericSymbols && numericSymbols.length,\n            multi,\n            ret;\n        if (categories) {\n            ret = \"\".concat(this.value);\n        }\n        else if (dateTimeLabelFormat) { // Datetime axis\n            ret = time.dateFormat(dateTimeLabelFormat, value, true);\n        }\n        else if (i &&\n            numericSymbols &&\n            numericSymbolDetector >= 1000) {\n            // Decide whether we should add a numeric symbol like k (thousands)\n            // or M (millions). If we are to enable this in tooltip or other\n            // places as well, we can move this logic to the numberFormatter and\n            // enable it by a parameter.\n            while (i-- && typeof ret === 'undefined') {\n                multi = Math.pow(numSymMagnitude, i + 1);\n                if (\n                // Only accept a numeric symbol when the distance is more\n                // than a full unit. So for example if the symbol is k, we\n                // don't accept numbers like 0.5k.\n                numericSymbolDetector >= multi &&\n                    // Accept one decimal before the symbol. Accepts 0.5k but\n                    // not 0.25k. How does this work with the previous?\n                    (value * 10) % multi === 0 &&\n                    numericSymbols[i] !== null &&\n                    value !== 0) { // #5480\n                    ret = numberFormatter(value / multi, -1) + numericSymbols[i];\n                }\n            }\n        }\n        if (typeof ret === 'undefined') {\n            if (Math.abs(value) >= 10000) { // Add thousands separators\n                ret = numberFormatter(value, -1);\n            }\n            else { // Small numbers\n                ret = numberFormatter(value, -1, void 0, ''); // #2466\n            }\n        }\n        return ret;\n    };\n    /**\n     * Get the minimum and maximum for the series of each axis. The function\n     * analyzes the axis series and updates `this.dataMin` and `this.dataMax`.\n     *\n     * @private\n     * @function Highcharts.Axis#getSeriesExtremes\n     *\n     * @emits Highcharts.Axis#event:afterGetSeriesExtremes\n     * @emits Highcharts.Axis#event:getSeriesExtremes\n     */\n    Axis.prototype.getSeriesExtremes = function () {\n        var axis = this;\n        var xExtremes;\n        Axis_fireEvent(this, 'getSeriesExtremes', null, function () {\n            axis.hasVisibleSeries = false;\n            // Reset properties in case we're redrawing (#3353)\n            axis.dataMin = axis.dataMax = axis.threshold = void 0;\n            axis.softThreshold = !axis.isXAxis;\n            // Loop through this axis' series\n            axis.series.forEach(function (series) {\n                if (series.reserveSpace()) {\n                    var seriesOptions = series.options;\n                    var xData = void 0,\n                        threshold = seriesOptions.threshold,\n                        seriesDataMin = void 0,\n                        seriesDataMax = void 0;\n                    axis.hasVisibleSeries = true;\n                    // Validate threshold in logarithmic axes\n                    if (axis.positiveValuesOnly && (threshold || 0) <= 0) {\n                        threshold = void 0;\n                    }\n                    // Get dataMin and dataMax for X axes\n                    if (axis.isXAxis) {\n                        xData = series.getColumn('x');\n                        if (xData.length) {\n                            xData = axis.logarithmic ?\n                                xData.filter(function (x) { return x > 0; }) :\n                                xData;\n                            xExtremes = series.getXExtremes(xData);\n                            // If xData contains values which is not numbers,\n                            // then filter them out. To prevent performance hit,\n                            // we only do this after we have already found\n                            // seriesDataMin because in most cases all data is\n                            // valid. #5234.\n                            seriesDataMin = xExtremes.min;\n                            seriesDataMax = xExtremes.max;\n                            if (!Axis_isNumber(seriesDataMin) &&\n                                // #5010:\n                                !(seriesDataMin instanceof Date)) {\n                                xData = xData.filter(Axis_isNumber);\n                                xExtremes = series.getXExtremes(xData);\n                                // Do it again with valid data\n                                seriesDataMin = xExtremes.min;\n                                seriesDataMax = xExtremes.max;\n                            }\n                            if (xData.length) {\n                                axis.dataMin = Math.min(Axis_pick(axis.dataMin, seriesDataMin), seriesDataMin);\n                                axis.dataMax = Math.max(Axis_pick(axis.dataMax, seriesDataMax), seriesDataMax);\n                            }\n                        }\n                        // Get dataMin and dataMax for Y axes, as well as handle\n                        // stacking and processed data\n                    }\n                    else {\n                        // Get this particular series extremes\n                        var dataExtremes = series.applyExtremes();\n                        // Get the dataMin and dataMax so far. If percentage is\n                        // used, the min and max are always 0 and 100. If\n                        // seriesDataMin and seriesDataMax is null, then series\n                        // doesn't have active y data, we continue with nulls\n                        if (Axis_isNumber(dataExtremes.dataMin)) {\n                            seriesDataMin = dataExtremes.dataMin;\n                            axis.dataMin = Math.min(Axis_pick(axis.dataMin, seriesDataMin), seriesDataMin);\n                        }\n                        if (Axis_isNumber(dataExtremes.dataMax)) {\n                            seriesDataMax = dataExtremes.dataMax;\n                            axis.dataMax = Math.max(Axis_pick(axis.dataMax, seriesDataMax), seriesDataMax);\n                        }\n                        // Adjust to threshold\n                        if (Axis_defined(threshold)) {\n                            axis.threshold = threshold;\n                        }\n                        // If any series has a hard threshold, it takes\n                        // precedence\n                        if (!seriesOptions.softThreshold ||\n                            axis.positiveValuesOnly) {\n                            axis.softThreshold = false;\n                        }\n                    }\n                }\n            });\n        });\n        Axis_fireEvent(this, 'afterGetSeriesExtremes');\n    };\n    /**\n     * Translate from axis value to pixel position on the chart, or back. Use\n     * the `toPixels` and `toValue` functions in applications.\n     *\n     * @private\n     * @function Highcharts.Axis#translate\n     */\n    Axis.prototype.translate = function (val, backwards, cvsCoord, old, handleLog, pointPlacement) {\n        var _a;\n        var axis = (this.linkedParent || this), // #1417\n            localMin = (old && axis.old ? axis.old.min : axis.min);\n        if (!Axis_isNumber(localMin)) {\n            return NaN;\n        }\n        var minPixelPadding = axis.minPixelPadding,\n            doPostTranslate = (axis.isOrdinal ||\n                ((_a = axis.brokenAxis) === null || _a === void 0 ? void 0 : _a.hasBreaks) ||\n                (axis.logarithmic && handleLog)) && axis.lin2val;\n        var sign = 1,\n            cvsOffset = 0,\n            localA = old && axis.old ? axis.old.transA : axis.transA,\n            returnValue = 0;\n        if (!localA) {\n            localA = axis.transA;\n        }\n        // In vertical axes, the canvas coordinates start from 0 at the top like\n        // in SVG.\n        if (cvsCoord) {\n            sign *= -1; // Canvas coordinates inverts the value\n            cvsOffset = axis.len;\n        }\n        // Handle reversed axis\n        if (axis.reversed) {\n            sign *= -1;\n            cvsOffset -= sign * (axis.sector || axis.len);\n        }\n        // From pixels to value\n        if (backwards) { // Reverse translation\n            val = val * sign + cvsOffset;\n            val -= minPixelPadding;\n            // From chart pixel to value:\n            returnValue = val / localA + localMin;\n            if (doPostTranslate) { // Log, ordinal and broken axis\n                returnValue = axis.lin2val(returnValue);\n            }\n            // From value to pixels\n        }\n        else {\n            if (doPostTranslate) { // Log, ordinal and broken axis\n                val = axis.val2lin(val);\n            }\n            var value = sign * (val - localMin) * localA;\n            returnValue = value +\n                cvsOffset +\n                (sign * minPixelPadding) +\n                (Axis_isNumber(pointPlacement) ? localA * pointPlacement : 0);\n            if (!axis.isRadial) {\n                returnValue = Axis_correctFloat(returnValue);\n            }\n        }\n        return returnValue;\n    };\n    /**\n     * Translate a value in terms of axis units into pixels within the chart.\n     *\n     * @function Highcharts.Axis#toPixels\n     *\n     * @param {number|string} value\n     * A value in terms of axis units. For datetime axes, a timestamp or\n     * date/time string is accepted.\n     *\n     * @param {boolean} [paneCoordinates=false]\n     * Whether to return the pixel coordinate relative to the chart or just the\n     * axis/pane itself.\n     *\n     * @return {number}\n     * Pixel position of the value on the chart or axis.\n     */\n    Axis.prototype.toPixels = function (value, paneCoordinates) {\n        var _a,\n            _b;\n        return this.translate((_b = (_a = this.chart) === null || _a === void 0 ? void 0 : _a.time.parse(value)) !== null && _b !== void 0 ? _b : NaN, false, !this.horiz, void 0, true) + (paneCoordinates ? 0 : this.pos);\n    };\n    /**\n     * Translate a pixel position along the axis to a value in terms of axis\n     * units.\n     *\n     * @function Highcharts.Axis#toValue\n     *\n     * @param {number} pixel\n     * The pixel value coordinate.\n     *\n     * @param {boolean} [paneCoordinates=false]\n     * Whether the input pixel is relative to the chart or just the axis/pane\n     * itself.\n     *\n     * @return {number}\n     * The axis value.\n     */\n    Axis.prototype.toValue = function (pixel, paneCoordinates) {\n        return this.translate(pixel - (paneCoordinates ? 0 : this.pos), true, !this.horiz, void 0, true);\n    };\n    /**\n     * Create the path for a plot line that goes from the given value on\n     * this axis, across the plot to the opposite side. Also used internally for\n     * grid lines and crosshairs.\n     *\n     * @function Highcharts.Axis#getPlotLinePath\n     *\n     * @param {Highcharts.AxisPlotLinePathOptionsObject} options\n     * Options for the path.\n     *\n     * @return {Highcharts.SVGPathArray|null}\n     * The SVG path definition for the plot line.\n     */\n    Axis.prototype.getPlotLinePath = function (options) {\n        var axis = this,\n            chart = axis.chart,\n            axisLeft = axis.left,\n            axisTop = axis.top,\n            old = options.old,\n            value = options.value,\n            lineWidth = options.lineWidth,\n            cHeight = (old && chart.oldChartHeight) || chart.chartHeight,\n            cWidth = (old && chart.oldChartWidth) || chart.chartWidth,\n            transB = axis.transB;\n        var translatedValue = options.translatedValue,\n            force = options.force,\n            x1,\n            y1,\n            x2,\n            y2,\n            skip;\n        // eslint-disable-next-line valid-jsdoc\n        /**\n         * Check if x is between a and b. If not, either move to a/b\n         * or skip, depending on the force parameter.\n         * @private\n         */\n        function between(x, a, b) {\n            if (force !== 'pass' && (x < a || x > b)) {\n                if (force) {\n                    x = Axis_clamp(x, a, b);\n                }\n                else {\n                    skip = true;\n                }\n            }\n            return x;\n        }\n        var evt = {\n                value: value,\n                lineWidth: lineWidth,\n                old: old,\n                force: force,\n                acrossPanes: options.acrossPanes,\n                translatedValue: translatedValue\n            };\n        Axis_fireEvent(this, 'getPlotLinePath', evt, function (e) {\n            translatedValue = Axis_pick(translatedValue, axis.translate(value, void 0, void 0, old));\n            // Keep the translated value within sane bounds, and avoid Infinity\n            // to fail the isNumber test (#7709).\n            translatedValue = Axis_clamp(translatedValue, -1e9, 1e9);\n            x1 = x2 = translatedValue + transB;\n            y1 = y2 = cHeight - translatedValue - transB;\n            if (!Axis_isNumber(translatedValue)) { // No min or max\n                skip = true;\n                force = false; // #7175, don't force it when path is invalid\n            }\n            else if (axis.horiz) {\n                y1 = axisTop;\n                y2 = cHeight - axis.bottom + (axis.options.isInternal ?\n                    0 :\n                    (chart.scrollablePixelsY || 0)); // #20354, scrollablePixelsY shouldn't be used for navigator\n                x1 = x2 = between(x1, axisLeft, axisLeft + axis.width);\n            }\n            else {\n                x1 = axisLeft;\n                x2 = cWidth - axis.right + (chart.scrollablePixelsX || 0);\n                y1 = y2 = between(y1, axisTop, axisTop + axis.height);\n            }\n            e.path = skip && !force ?\n                void 0 :\n                chart.renderer.crispLine([['M', x1, y1], ['L', x2, y2]], lineWidth || 1);\n        });\n        return evt.path;\n    };\n    /**\n     * Internal function to get the tick positions of a linear axis to round\n     * values like whole tens or every five.\n     *\n     * @function Highcharts.Axis#getLinearTickPositions\n     *\n     * @param {number} tickInterval\n     * The normalized tick interval.\n     *\n     * @param {number} min\n     * Axis minimum.\n     *\n     * @param {number} max\n     * Axis maximum.\n     *\n     * @return {Array<number>}\n     * An array of axis values where ticks should be placed.\n     */\n    Axis.prototype.getLinearTickPositions = function (tickInterval, min, max) {\n        var roundedMin = Axis_correctFloat(Math.floor(min / tickInterval) * tickInterval), roundedMax = Axis_correctFloat(Math.ceil(max / tickInterval) * tickInterval), tickPositions = [];\n        var pos,\n            lastPos,\n            precision;\n        // When the precision is higher than what we filter out in\n        // correctFloat, skip it (#6183).\n        if (Axis_correctFloat(roundedMin + tickInterval) === roundedMin) {\n            precision = 20;\n        }\n        // For single points, add a tick regardless of the relative position\n        // (#2662, #6274)\n        if (this.single) {\n            return [min];\n        }\n        // Populate the intermediate values\n        pos = roundedMin;\n        while (pos <= roundedMax) {\n            // Place the tick on the rounded value\n            tickPositions.push(pos);\n            // Always add the raw tickInterval, not the corrected one.\n            pos = Axis_correctFloat(pos + tickInterval, precision);\n            // If the interval is not big enough in the current min - max range\n            // to actually increase the loop variable, we need to break out to\n            // prevent endless loop. Issue #619\n            if (pos === lastPos) {\n                break;\n            }\n            // Record the last value\n            lastPos = pos;\n        }\n        return tickPositions;\n    };\n    /**\n     * Resolve the new minorTicks/minorTickInterval options into the legacy\n     * loosely typed minorTickInterval option.\n     *\n     * @function Highcharts.Axis#getMinorTickInterval\n     *\n     * @return {number|\"auto\"|null}\n     * Legacy option\n     */\n    Axis.prototype.getMinorTickInterval = function () {\n        var _a = this.options,\n            minorTicks = _a.minorTicks,\n            minorTickInterval = _a.minorTickInterval;\n        if (minorTicks === true) {\n            return Axis_pick(minorTickInterval, 'auto');\n        }\n        if (minorTicks === false) {\n            return;\n        }\n        return minorTickInterval;\n    };\n    /**\n     * Internal function to return the minor tick positions. For logarithmic\n     * axes, the same logic as for major ticks is reused.\n     *\n     * @function Highcharts.Axis#getMinorTickPositions\n     *\n     * @return {Array<number>}\n     * An array of axis values where ticks should be placed.\n     */\n    Axis.prototype.getMinorTickPositions = function () {\n        var _a;\n        var axis = this,\n            options = axis.options,\n            tickPositions = axis.tickPositions,\n            minorTickInterval = axis.minorTickInterval,\n            pointRangePadding = axis.pointRangePadding || 0,\n            min = (axis.min || 0) - pointRangePadding, // #1498\n            max = (axis.max || 0) + pointRangePadding, // #1498\n            range = ((_a = axis.brokenAxis) === null || _a === void 0 ? void 0 : _a.hasBreaks) ?\n                axis.brokenAxis.unitLength : max - min;\n        var minorTickPositions = [],\n            pos;\n        // If minor ticks get too dense, they are hard to read, and may cause\n        // long running script. So we don't draw them.\n        if (range && range / minorTickInterval < axis.len / 3) { // #3875\n            var logarithmic_1 = axis.logarithmic;\n            if (logarithmic_1) {\n                // For each interval in the major ticks, compute the minor ticks\n                // separately.\n                this.paddedTicks.forEach(function (_pos, i, paddedTicks) {\n                    if (i) {\n                        minorTickPositions.push.apply(minorTickPositions, logarithmic_1.getLogTickPositions(minorTickInterval, paddedTicks[i - 1], paddedTicks[i], true));\n                    }\n                });\n            }\n            else if (axis.dateTime &&\n                this.getMinorTickInterval() === 'auto') { // #1314\n                minorTickPositions = minorTickPositions.concat(axis.getTimeTicks(axis.dateTime.normalizeTimeTickInterval(minorTickInterval), min, max, options.startOfWeek));\n            }\n            else {\n                for (pos = min + (tickPositions[0] - min) % minorTickInterval; pos <= max; pos += minorTickInterval) {\n                    // Very, very, tight grid lines (#5771)\n                    if (pos === minorTickPositions[0]) {\n                        break;\n                    }\n                    minorTickPositions.push(pos);\n                }\n            }\n        }\n        if (minorTickPositions.length !== 0) {\n            axis.trimTicks(minorTickPositions); // #3652 #3743 #1498 #6330\n        }\n        return minorTickPositions;\n    };\n    /**\n     * Adjust the min and max for the minimum range. Keep in mind that the\n     * series data is not yet processed, so we don't have information on data\n     * cropping and grouping, or updated `axis.pointRange` or\n     * `series.pointRange`. The data can't be processed until we have finally\n     * established min and max.\n     *\n     * @private\n     * @function Highcharts.Axis#adjustForMinRange\n     */\n    Axis.prototype.adjustForMinRange = function () {\n        var _a,\n            _b,\n            _c;\n        var axis = this,\n            options = axis.options,\n            logarithmic = axis.logarithmic,\n            time = axis.chart.time;\n        var max = axis.max,\n            min = axis.min,\n            minRange = axis.minRange,\n            zoomOffset,\n            spaceAvailable,\n            closestDataRange,\n            minArgs,\n            maxArgs;\n        // Set the automatic minimum range based on the closest point distance\n        if (axis.isXAxis &&\n            typeof minRange === 'undefined' &&\n            !logarithmic) {\n            if (Axis_defined(options.min) ||\n                Axis_defined(options.max) ||\n                Axis_defined(options.floor) ||\n                Axis_defined(options.ceiling)) {\n                // Setting it to null, as opposed to undefined, signals we don't\n                // run this block again as per the condition above.\n                minRange = null;\n            }\n            else {\n                // Find the closest distance between raw data points, as opposed\n                // to closestPointRange that applies to processed points\n                // (cropped and grouped)\n                closestDataRange = Axis_getClosestDistance(axis.series.map(function (s) {\n                    var xData = s.getColumn('x');\n                    // If xIncrement, we only need to measure the two first\n                    // points to get the distance. Saves processing time.\n                    return s.xIncrement ? xData.slice(0, 2) : xData;\n                })) || 0;\n                minRange = Math.min(closestDataRange * 5, axis.dataMax - axis.dataMin);\n            }\n        }\n        // If minRange is exceeded, adjust\n        if (Axis_isNumber(max) &&\n            Axis_isNumber(min) &&\n            Axis_isNumber(minRange) &&\n            max - min < minRange) {\n            spaceAvailable =\n                axis.dataMax - axis.dataMin >=\n                    minRange;\n            zoomOffset = (minRange - max + min) / 2;\n            // If min and max options have been set, don't go beyond it\n            minArgs = [\n                min - zoomOffset,\n                (_a = time.parse(options.min)) !== null && _a !== void 0 ? _a : (min - zoomOffset)\n            ];\n            // If space is available, stay within the data range\n            if (spaceAvailable) {\n                minArgs[2] = logarithmic ?\n                    logarithmic.log2lin(axis.dataMin) :\n                    axis.dataMin;\n            }\n            min = Axis_arrayMax(minArgs);\n            maxArgs = [\n                min + minRange,\n                (_b = time.parse(options.max)) !== null && _b !== void 0 ? _b : (min + minRange)\n            ];\n            // If space is available, stay within the data range\n            if (spaceAvailable) {\n                maxArgs[2] = logarithmic ?\n                    logarithmic.log2lin(axis.dataMax) :\n                    axis.dataMax;\n            }\n            max = Axis_arrayMin(maxArgs);\n            // Now if the max is adjusted, adjust the min back\n            if (max - min < minRange) {\n                minArgs[0] = max - minRange;\n                minArgs[1] = (_c = time.parse(options.min)) !== null && _c !== void 0 ? _c : (max - minRange);\n                min = Axis_arrayMax(minArgs);\n            }\n        }\n        // Record modified extremes\n        axis.minRange = minRange;\n        axis.min = min;\n        axis.max = max;\n    };\n    /**\n     * Find the closestPointRange across all series, including the single data\n     * series.\n     *\n     * @private\n     * @function Highcharts.Axis#getClosest\n     */\n    Axis.prototype.getClosest = function () {\n        var closestSingleDistance,\n            closestDistance;\n        if (this.categories) {\n            closestDistance = 1;\n        }\n        else {\n            var singleXs_1 = [];\n            this.series.forEach(function (series) {\n                var seriesClosest = series.closestPointRange,\n                    xData = series.getColumn('x');\n                if (xData.length === 1) {\n                    singleXs_1.push(xData[0]);\n                }\n                else if (series.sorted &&\n                    Axis_defined(seriesClosest) &&\n                    series.reserveSpace()) {\n                    closestDistance = Axis_defined(closestDistance) ?\n                        Math.min(closestDistance, seriesClosest) :\n                        seriesClosest;\n                }\n            });\n            if (singleXs_1.length) {\n                singleXs_1.sort(function (a, b) { return a - b; });\n                closestSingleDistance = Axis_getClosestDistance([singleXs_1]);\n            }\n        }\n        if (closestSingleDistance && closestDistance) {\n            return Math.min(closestSingleDistance, closestDistance);\n        }\n        return closestSingleDistance || closestDistance;\n    };\n    /**\n     * When a point name is given and no x, search for the name in the existing\n     * categories, or if categories aren't provided, search names or create a\n     * new category (#2522).\n     *\n     * @private\n     * @function Highcharts.Axis#nameToX\n     *\n     * @param {Highcharts.Point} point\n     * The point to inspect.\n     *\n     * @return {number}\n     * The X value that the point is given.\n     */\n    Axis.prototype.nameToX = function (point) {\n        var explicitCategories = Axis_isArray(this.options.categories),\n            names = explicitCategories ? this.categories : this.names;\n        var nameX = point.options.x,\n            x;\n        point.series.requireSorting = false;\n        if (!Axis_defined(nameX)) {\n            nameX = this.uniqueNames && names ?\n                (explicitCategories ?\n                    names.indexOf(point.name) :\n                    Axis_pick(names.keys[point.name], -1)) :\n                point.series.autoIncrement();\n        }\n        if (nameX === -1) { // Not found in current categories\n            if (!explicitCategories && names) {\n                x = names.length;\n            }\n        }\n        else if (Axis_isNumber(nameX)) {\n            x = nameX;\n        }\n        // Write the last point's name to the names array\n        if (typeof x !== 'undefined') {\n            this.names[x] = point.name;\n            // Backwards mapping is much faster than array searching (#7725)\n            this.names.keys[point.name] = x;\n        }\n        else if (point.x) {\n            x = point.x; // #17438\n        }\n        return x;\n    };\n    /**\n     * When changes have been done to series data, update the axis.names.\n     *\n     * @private\n     * @function Highcharts.Axis#updateNames\n     */\n    Axis.prototype.updateNames = function () {\n        var axis = this,\n            names = this.names,\n            i = names.length;\n        if (i > 0) {\n            Object.keys(names.keys).forEach(function (key) {\n                delete (names.keys)[key];\n            });\n            names.length = 0;\n            this.minRange = this.userMinRange; // Reset\n            (this.series || []).forEach(function (series) {\n                // Reset incrementer (#5928)\n                series.xIncrement = null;\n                // When adding a series, points are not yet generated\n                if (!series.points || series.isDirtyData) {\n                    // When we're updating the series with data that is longer\n                    // than it was, and cropThreshold is passed, we need to make\n                    // sure that the axis.max is increased _before_ running the\n                    // premature processData. Otherwise this early iteration of\n                    // processData will crop the points to axis.max, and the\n                    // names array will be too short (#5857).\n                    axis.max = Math.max(axis.max || 0, series.dataTable.rowCount - 1);\n                    series.processData();\n                    series.generatePoints();\n                }\n                var xData = series.getColumn('x').slice();\n                series.data.forEach(function (point, i) {\n                    var x = xData[i];\n                    if ((point === null || point === void 0 ? void 0 : point.options) &&\n                        typeof point.name !== 'undefined' // #9562\n                    ) {\n                        x = axis.nameToX(point);\n                        if (typeof x !== 'undefined' && x !== point.x) {\n                            xData[i] = point.x = x;\n                        }\n                    }\n                });\n                series.dataTable.setColumn('x', xData);\n            });\n        }\n    };\n    /**\n     * Update translation information.\n     *\n     * @private\n     * @function Highcharts.Axis#setAxisTranslation\n     *\n     * @emits Highcharts.Axis#event:afterSetAxisTranslation\n     */\n    Axis.prototype.setAxisTranslation = function () {\n        var axis = this,\n            range = axis.max - axis.min,\n            linkedParent = axis.linkedParent,\n            hasCategories = !!axis.categories,\n            isXAxis = axis.isXAxis;\n        var pointRange = axis.axisPointRange || 0,\n            closestPointRange,\n            minPointOffset = 0,\n            pointRangePadding = 0,\n            ordinalCorrection,\n            transA = axis.transA;\n        // Adjust translation for padding. Y axis with categories need to go\n        // through the same (#1784).\n        if (isXAxis || hasCategories || pointRange) {\n            // Get the closest points\n            closestPointRange = axis.getClosest();\n            if (linkedParent) {\n                minPointOffset = linkedParent.minPointOffset;\n                pointRangePadding = linkedParent.pointRangePadding;\n            }\n            else {\n                axis.series.forEach(function (series) {\n                    var seriesPointRange = hasCategories ?\n                            1 :\n                            (isXAxis ?\n                                Axis_pick(series.options.pointRange,\n                        closestPointRange, 0) :\n                                (axis.axisPointRange || 0)), // #2806\n                        pointPlacement = series.options.pointPlacement;\n                    pointRange = Math.max(pointRange, seriesPointRange);\n                    if (!axis.single || hasCategories) {\n                        // TODO: series should internally set x- and y-\n                        // pointPlacement to simplify this logic.\n                        var isPointPlacementAxis = series.is('xrange') ?\n                                !isXAxis :\n                                isXAxis;\n                        // The `minPointOffset` is the value padding to the left\n                        // of the axis in order to make room for points with a\n                        // pointRange, typically columns, or line/scatter points\n                        // on a category axis. When the `pointPlacement` option\n                        // is 'between' or 'on', this padding does not apply.\n                        minPointOffset = Math.max(minPointOffset, isPointPlacementAxis && Axis_isString(pointPlacement) ?\n                            0 :\n                            seriesPointRange / 2);\n                        // Determine the total padding needed to the length of\n                        // the axis to make room for the pointRange. If the\n                        // series' pointPlacement is 'on', no padding is added.\n                        pointRangePadding = Math.max(pointRangePadding, isPointPlacementAxis && pointPlacement === 'on' ?\n                            0 :\n                            seriesPointRange);\n                    }\n                });\n            }\n            // Record minPointOffset and pointRangePadding\n            ordinalCorrection = (axis.ordinal && axis.ordinal.slope && closestPointRange) ?\n                axis.ordinal.slope / closestPointRange :\n                1; // #988, #1853\n            axis.minPointOffset = minPointOffset =\n                minPointOffset * ordinalCorrection;\n            axis.pointRangePadding =\n                pointRangePadding = pointRangePadding * ordinalCorrection;\n            // The `pointRange` is the width reserved for each point, like in a\n            // column chart\n            axis.pointRange = Math.min(pointRange, axis.single && hasCategories ? 1 : range);\n            // The `closestPointRange` is the closest distance between points.\n            // In columns it is mostly equal to pointRange, but in lines\n            // pointRange is 0 while closestPointRange is some other value\n            if (isXAxis && closestPointRange) {\n                axis.closestPointRange = closestPointRange;\n            }\n        }\n        // Secondary values\n        axis.translationSlope = axis.transA = transA =\n            axis.staticScale ||\n                axis.len / ((range + pointRangePadding) || 1);\n        // Translation addend\n        axis.transB = axis.horiz ? axis.left : axis.bottom;\n        axis.minPixelPadding = transA * minPointOffset;\n        Axis_fireEvent(this, 'afterSetAxisTranslation');\n    };\n    /**\n     * @private\n     * @function Highcharts.Axis#minFromRange\n     */\n    Axis.prototype.minFromRange = function () {\n        var _a = this,\n            max = _a.max,\n            min = _a.min;\n        return Axis_isNumber(max) && Axis_isNumber(min) && max - min || void 0;\n    };\n    /**\n     * Set the tick positions to round values and optionally extend the extremes\n     * to the nearest tick.\n     *\n     * @private\n     * @function Highcharts.Axis#setTickInterval\n     *\n     * @param {boolean} secondPass\n     * TO-DO: parameter description\n     *\n     * @emits Highcharts.Axis#event:foundExtremes\n     */\n    Axis.prototype.setTickInterval = function (secondPass) {\n        var _a,\n            _b,\n            _c,\n            _d;\n        var axis = this,\n            categories = axis.categories,\n            chart = axis.chart,\n            dataMax = axis.dataMax,\n            dataMin = axis.dataMin,\n            dateTime = axis.dateTime,\n            isXAxis = axis.isXAxis,\n            logarithmic = axis.logarithmic,\n            options = axis.options,\n            softThreshold = axis.softThreshold,\n            time = chart.time,\n            threshold = Axis_isNumber(axis.threshold) ? axis.threshold : void 0,\n            minRange = axis.minRange || 0,\n            ceiling = options.ceiling,\n            floor = options.floor,\n            linkedTo = options.linkedTo,\n            softMax = options.softMax,\n            softMin = options.softMin,\n            linkedParent = Axis_isNumber(linkedTo) && ((_a = chart[axis.coll]) === null || _a === void 0 ? void 0 : _a[linkedTo]),\n            tickPixelIntervalOption = options.tickPixelInterval;\n        var maxPadding = options.maxPadding,\n            minPadding = options.minPadding,\n            range = 0,\n            linkedParentExtremes, \n            // Only non-negative tickInterval is valid, #12961\n            tickIntervalOption = Axis_isNumber(options.tickInterval) && options.tickInterval >= 0 ?\n                options.tickInterval : void 0,\n            thresholdMin,\n            thresholdMax,\n            hardMin,\n            hardMax;\n        if (!dateTime && !categories && !linkedParent) {\n            this.getTickAmount();\n        }\n        // Min or max set either by zooming/setExtremes or initial options\n        hardMin = Axis_pick(axis.userMin, time.parse(options.min));\n        hardMax = Axis_pick(axis.userMax, time.parse(options.max));\n        // Linked axis gets the extremes from the parent axis\n        if (linkedParent) {\n            axis.linkedParent = linkedParent;\n            linkedParentExtremes = linkedParent.getExtremes();\n            axis.min = Axis_pick(linkedParentExtremes.min, linkedParentExtremes.dataMin);\n            axis.max = Axis_pick(linkedParentExtremes.max, linkedParentExtremes.dataMax);\n            if (this.type !== linkedParent.type) {\n                // Can't link axes of different type\n                Axis_error(11, true, chart);\n            }\n            // Initial min and max from the extreme data values\n        }\n        else {\n            // Adjust to hard threshold\n            if (softThreshold &&\n                Axis_defined(threshold) &&\n                Axis_isNumber(dataMax) &&\n                Axis_isNumber(dataMin)) {\n                if (dataMin >= threshold) {\n                    thresholdMin = threshold;\n                    minPadding = 0;\n                }\n                else if (dataMax <= threshold) {\n                    thresholdMax = threshold;\n                    maxPadding = 0;\n                }\n            }\n            axis.min = Axis_pick(hardMin, thresholdMin, dataMin);\n            axis.max = Axis_pick(hardMax, thresholdMax, dataMax);\n        }\n        if (Axis_isNumber(axis.max) && Axis_isNumber(axis.min)) {\n            if (logarithmic) {\n                if (axis.positiveValuesOnly &&\n                    !secondPass &&\n                    Math.min(axis.min, Axis_pick(dataMin, axis.min)) <= 0) { // #978\n                    // Can't plot negative values on log axis\n                    Axis_error(10, true, chart);\n                }\n                // The correctFloat cures #934, float errors on full tens. But\n                // it was too aggressive for #4360 because of conversion back to\n                // lin, therefore use precision 15.\n                axis.min = Axis_correctFloat(logarithmic.log2lin(axis.min), 16);\n                axis.max = Axis_correctFloat(logarithmic.log2lin(axis.max), 16);\n            }\n            // Handle zoomed range\n            if (axis.range && Axis_isNumber(dataMin)) {\n                // #618, #6773:\n                axis.userMin = axis.min = hardMin = Math.max(dataMin, axis.minFromRange() || 0);\n                axis.userMax = hardMax = axis.max;\n                axis.range = void 0; // Don't use it when running setExtremes\n            }\n        }\n        // Hook for Highcharts Stock Scroller and bubble axis padding\n        Axis_fireEvent(axis, 'foundExtremes');\n        // Adjust min and max for the minimum range\n        axis.adjustForMinRange();\n        if (Axis_isNumber(axis.min) && Axis_isNumber(axis.max)) {\n            // Handle options for floor, ceiling, softMin and softMax (#6359)\n            if (!Axis_isNumber(axis.userMin) &&\n                Axis_isNumber(softMin) &&\n                softMin < axis.min) {\n                axis.min = hardMin = softMin; // #6894\n            }\n            if (!Axis_isNumber(axis.userMax) &&\n                Axis_isNumber(softMax) &&\n                softMax > axis.max) {\n                axis.max = hardMax = softMax; // #6894\n            }\n            // Pad the values to get clear of the chart's edges. To avoid\n            // tickInterval taking the padding into account, we do this after\n            // computing tick interval (#1337).\n            if (!categories &&\n                !axis.axisPointRange &&\n                !((_b = axis.stacking) === null || _b === void 0 ? void 0 : _b.usePercentage) &&\n                !linkedParent) {\n                range = axis.max - axis.min;\n                if (range) {\n                    if (!Axis_defined(hardMin) && minPadding) {\n                        axis.min -= range * minPadding;\n                    }\n                    if (!Axis_defined(hardMax) && maxPadding) {\n                        axis.max += range * maxPadding;\n                    }\n                }\n            }\n            if (!Axis_isNumber(axis.userMin) && Axis_isNumber(floor)) {\n                axis.min = Math.max(axis.min, floor);\n            }\n            if (!Axis_isNumber(axis.userMax) && Axis_isNumber(ceiling)) {\n                axis.max = Math.min(axis.max, ceiling);\n            }\n            // When the threshold is soft, adjust the extreme value only if the\n            // data extreme and the padded extreme land on either side of the\n            // threshold. For example, a series of [0, 1, 2, 3] would make the\n            // yAxis add a tick for -1 because of the default `minPadding` and\n            // `startOnTick` options. This is prevented by the `softThreshold`\n            // option.\n            if (softThreshold &&\n                Axis_isNumber(dataMin) &&\n                Axis_isNumber(dataMax)) {\n                var numThreshold = threshold || 0;\n                if (!Axis_defined(hardMin) &&\n                    axis.min < numThreshold &&\n                    dataMin >= numThreshold) {\n                    axis.min = options.minRange ?\n                        Math.min(numThreshold, axis.max - minRange) :\n                        numThreshold;\n                }\n                else if (!Axis_defined(hardMax) &&\n                    axis.max > numThreshold &&\n                    dataMax <= numThreshold) {\n                    axis.max = options.minRange ?\n                        Math.max(numThreshold, axis.min + minRange) :\n                        numThreshold;\n                }\n            }\n            // If min is bigger than highest, or if max less than lowest value,\n            // the chart should not render points. (#14417)\n            if (!chart.polar && axis.min > axis.max) {\n                if (Axis_defined(options.min)) {\n                    axis.max = axis.min;\n                }\n                else if (Axis_defined(options.max)) {\n                    axis.min = axis.max;\n                }\n            }\n            range = axis.max - axis.min;\n        }\n        // Get tickInterval\n        if (axis.min === axis.max ||\n            !Axis_isNumber(axis.min) ||\n            !Axis_isNumber(axis.max)) {\n            axis.tickInterval = 1;\n        }\n        else if (linkedParent &&\n            !tickIntervalOption &&\n            tickPixelIntervalOption === linkedParent.options.tickPixelInterval) {\n            axis.tickInterval = tickIntervalOption = linkedParent.tickInterval;\n        }\n        else {\n            axis.tickInterval = Axis_pick(tickIntervalOption, this.tickAmount ?\n                range / Math.max(this.tickAmount - 1, 1) :\n                void 0, \n            // For categorized axis, 1 is default, for linear axis use\n            // tickPix\n            categories ?\n                1 :\n                // Don't let it be more than the data range\n                range * tickPixelIntervalOption /\n                    Math.max(axis.len, tickPixelIntervalOption));\n        }\n        // Now we're finished detecting min and max, crop and group series data.\n        // This is in turn needed in order to find tick positions in ordinal\n        // axes.\n        if (isXAxis && !secondPass) {\n            var hasExtremesChanged_1 = axis.min !== ((_c = axis.old) === null || _c === void 0 ? void 0 : _c.min) ||\n                    axis.max !== ((_d = axis.old) === null || _d === void 0 ? void 0 : _d.max);\n            // First process all series assigned to that axis.\n            axis.series.forEach(function (series) {\n                var _a;\n                // Allows filtering out points outside the plot area.\n                series.forceCrop = (_a = series.forceCropping) === null || _a === void 0 ? void 0 : _a.call(series);\n                series.processData(hasExtremesChanged_1);\n            });\n            // Then apply grouping if needed. The hasExtremesChanged helps to\n            // decide if the data grouping should be skipped in the further\n            // calculations #16319.\n            Axis_fireEvent(this, 'postProcessData', { hasExtremesChanged: hasExtremesChanged_1 });\n        }\n        // Set the translation factor used in translate function\n        axis.setAxisTranslation();\n        // Hook for ordinal axes and radial axes\n        Axis_fireEvent(this, 'initialAxisTranslation');\n        // In column-like charts, don't cramp in more ticks than there are\n        // points (#1943, #4184)\n        if (axis.pointRange && !tickIntervalOption) {\n            axis.tickInterval = Math.max(axis.pointRange, axis.tickInterval);\n        }\n        // Before normalizing the tick interval, handle minimum tick interval.\n        // This applies only if tickInterval is not defined.\n        var minTickInterval = Axis_pick(options.minTickInterval, \n            // In datetime axes, don't go below the data interval, except when\n            // there are scatter-like series involved (#13369).\n            dateTime &&\n                !axis.series.some(function (s) { return !s.sorted; }) ?\n                axis.closestPointRange : 0);\n        if (!tickIntervalOption && axis.tickInterval < minTickInterval) {\n            axis.tickInterval = minTickInterval;\n        }\n        // For linear axes, normalize the interval\n        if (!dateTime && !logarithmic && !tickIntervalOption) {\n            axis.tickInterval = getNormalizedTickInterval(axis, axis.tickInterval);\n        }\n        // Prevent ticks from getting so close that we can't draw the labels\n        if (!this.tickAmount) {\n            axis.tickInterval = axis.unsquish();\n        }\n        this.setTickPositions();\n    };\n    /**\n     * Now we have computed the normalized tickInterval, get the tick positions.\n     *\n     * @private\n     * @function Highcharts.Axis#setTickPositions\n     *\n     * @emits Highcharts.Axis#event:afterSetTickPositions\n     */\n    Axis.prototype.setTickPositions = function () {\n        var _a,\n            _b;\n        var axis = this,\n            options = this.options,\n            tickPositionsOption = options.tickPositions,\n            tickPositioner = options.tickPositioner,\n            minorTickIntervalOption = this.getMinorTickInterval(),\n            allowEndOnTick = !this.isPanning,\n            startOnTick = allowEndOnTick && options.startOnTick,\n            endOnTick = allowEndOnTick && options.endOnTick;\n        var tickPositions = [],\n            tickPositionerResult;\n        // Set the tickmarkOffset\n        this.tickmarkOffset = (this.categories &&\n            options.tickmarkPlacement === 'between' &&\n            this.tickInterval === 1) ? 0.5 : 0; // #3202\n        // When there is only one point, or all points have the same value on\n        // this axis, then min and max are equal and tickPositions.length is 0\n        // or 1. In this case, add some padding in order to center the point,\n        // but leave it with one tick. #1337.\n        this.single =\n            this.min === this.max &&\n                Axis_defined(this.min) &&\n                !this.tickAmount &&\n                (\n                // Data is on integer (#6563)\n                this.min % 1 === 0 ||\n                    // Between integers and decimals are not allowed (#6274)\n                    options.allowDecimals !== false);\n        /**\n         * Contains the current positions that are laid out on the axis. The\n         * positions are numbers in terms of axis values. In a category axis\n         * they are integers, in a datetime axis they are also integers, but\n         * designating milliseconds.\n         *\n         * This property is read only - for modifying the tick positions, use\n         * the `tickPositioner` callback or [axis.tickPositions(\n         * https://api.highcharts.com/highcharts/xAxis.tickPositions) option\n         * instead.\n         *\n         * @name Highcharts.Axis#tickPositions\n         * @type {Highcharts.AxisTickPositionsArray|undefined}\n         */\n        if (tickPositionsOption) {\n            // Find the tick positions. Work on a copy (#1565)\n            tickPositions = tickPositionsOption.slice();\n        }\n        else if (Axis_isNumber(this.min) && Axis_isNumber(this.max)) {\n            // Too many ticks (#6405). Create a friendly warning and provide two\n            // ticks so at least we can show the data series.\n            if (!((_a = axis.ordinal) === null || _a === void 0 ? void 0 : _a.positions) &&\n                ((this.max - this.min) /\n                    this.tickInterval >\n                    Math.max(2 * this.len, 200))) {\n                tickPositions = [this.min, this.max];\n                Axis_error(19, false, this.chart);\n            }\n            else if (axis.dateTime) {\n                tickPositions = axis.getTimeTicks(axis.dateTime.normalizeTimeTickInterval(this.tickInterval, options.units), this.min, this.max, options.startOfWeek, (_b = axis.ordinal) === null || _b === void 0 ? void 0 : _b.positions, this.closestPointRange, true);\n            }\n            else if (axis.logarithmic) {\n                tickPositions = axis.logarithmic.getLogTickPositions(this.tickInterval, this.min, this.max);\n            }\n            else {\n                var startingTickInterval = this.tickInterval;\n                var adjustedTickInterval = startingTickInterval;\n                while (adjustedTickInterval <= startingTickInterval * 2) {\n                    tickPositions = this.getLinearTickPositions(this.tickInterval, this.min, this.max);\n                    // If there are more tick positions than the set tickAmount,\n                    // increase the tickInterval and continue until it fits.\n                    // (#17100)\n                    if (this.tickAmount &&\n                        tickPositions.length > this.tickAmount) {\n                        this.tickInterval = getNormalizedTickInterval(this, adjustedTickInterval *= 1.1);\n                    }\n                    else {\n                        break;\n                    }\n                }\n            }\n            // Too dense ticks, keep only the first and last (#4477)\n            if (tickPositions.length > this.len) {\n                tickPositions = [\n                    tickPositions[0],\n                    tickPositions[tickPositions.length - 1]\n                ];\n                // Reduce doubled value (#7339)\n                if (tickPositions[0] === tickPositions[1]) {\n                    tickPositions.length = 1;\n                }\n            }\n            // Run the tick positioner callback, that allows modifying auto tick\n            // positions.\n            if (tickPositioner) {\n                // Make it available to the positioner\n                this.tickPositions = tickPositions;\n                tickPositionerResult = tickPositioner.apply(axis, [this.min, this.max]);\n                if (tickPositionerResult) {\n                    tickPositions = tickPositionerResult;\n                }\n            }\n        }\n        this.tickPositions = tickPositions;\n        // Get minorTickInterval\n        this.minorTickInterval =\n            minorTickIntervalOption === 'auto' && this.tickInterval ?\n                this.tickInterval / options.minorTicksPerMajor :\n                minorTickIntervalOption;\n        // Reset min/max or remove extremes based on start/end on tick\n        this.paddedTicks = tickPositions.slice(0); // Used for logarithmic minor\n        this.trimTicks(tickPositions, startOnTick, endOnTick);\n        if (!this.isLinked && Axis_isNumber(this.min) && Axis_isNumber(this.max)) {\n            // Substract half a unit (#2619, #2846, #2515, #3390), but not in\n            // case of multiple ticks (#6897)\n            if (this.single &&\n                tickPositions.length < 2 &&\n                !this.categories &&\n                !this.series.some(function (s) {\n                    return (s.is('heatmap') && s.options.pointPlacement === 'between');\n                })) {\n                this.min -= 0.5;\n                this.max += 0.5;\n            }\n            if (!tickPositionsOption && !tickPositionerResult) {\n                this.adjustTickAmount();\n            }\n        }\n        Axis_fireEvent(this, 'afterSetTickPositions');\n    };\n    /**\n     * Handle startOnTick and endOnTick by either adapting to padding min/max or\n     * rounded min/max. Also handle single data points.\n     *\n     * @private\n     * @function Highcharts.Axis#trimTicks\n     *\n     * @param {Array<number>} tickPositions\n     * TO-DO: parameter description\n     *\n     * @param {boolean} [startOnTick]\n     * TO-DO: parameter description\n     *\n     * @param {boolean} [endOnTick]\n     * TO-DO: parameter description\n     */\n    Axis.prototype.trimTicks = function (tickPositions, startOnTick, endOnTick) {\n        var roundedMin = tickPositions[0],\n            roundedMax = tickPositions[tickPositions.length - 1],\n            minPointOffset = (!this.isOrdinal && this.minPointOffset) || 0; // (#12716)\n            Axis_fireEvent(this, 'trimTicks');\n        if (!this.isLinked) {\n            if (startOnTick && roundedMin !== -Infinity) { // #6502\n                this.min = roundedMin;\n            }\n            else {\n                while (this.min - minPointOffset > tickPositions[0]) {\n                    tickPositions.shift();\n                }\n            }\n            if (endOnTick) {\n                this.max = roundedMax;\n            }\n            else {\n                while (this.max + minPointOffset <\n                    tickPositions[tickPositions.length - 1]) {\n                    tickPositions.pop();\n                }\n            }\n            // If no tick are left, set one tick in the middle (#3195)\n            if (tickPositions.length === 0 &&\n                Axis_defined(roundedMin) &&\n                !this.options.tickPositions) {\n                tickPositions.push((roundedMax + roundedMin) / 2);\n            }\n        }\n    };\n    /**\n     * Check if there are multiple axes in the same pane.\n     *\n     * @private\n     * @function Highcharts.Axis#alignToOthers\n     *\n     * @return {boolean|undefined}\n     * True if there are other axes.\n     */\n    Axis.prototype.alignToOthers = function () {\n        var axis = this,\n            chart = axis.chart,\n            alignedAxes = [this],\n            options = axis.options,\n            chartOptions = chart.options.chart,\n            alignThresholds = (this.coll === 'yAxis' &&\n                chartOptions.alignThresholds),\n            thresholdAlignments = [];\n        var hasOther;\n        axis.thresholdAlignment = void 0;\n        if ((\n        // Only if alignTicks or alignThresholds is true\n        (chartOptions.alignTicks !== false && options.alignTicks) ||\n            alignThresholds) &&\n            // Disabled when startOnTick or endOnTick are false (#7604)\n            options.startOnTick !== false &&\n            options.endOnTick !== false &&\n            // Don't try to align ticks on a log axis, they are not evenly\n            // spaced (#6021)\n            !axis.logarithmic) {\n            // Get a key identifying which pane the axis belongs to\n            var getKey_1 = function (axis) {\n                    var horiz = axis.horiz,\n                options = axis.options;\n                return [\n                    horiz ? options.left : options.top,\n                    options.width,\n                    options.height,\n                    options.pane\n                ].join(',');\n            };\n            var thisKey_1 = getKey_1(this);\n            chart[this.coll].forEach(function (otherAxis) {\n                var series = otherAxis.series;\n                if (\n                // #4442\n                series.length &&\n                    series.some(function (s) { return s.visible; }) &&\n                    otherAxis !== axis &&\n                    getKey_1(otherAxis) === thisKey_1) {\n                    hasOther = true; // #4201\n                    alignedAxes.push(otherAxis);\n                }\n            });\n        }\n        if (hasOther && alignThresholds) {\n            // Handle alignThresholds. The `thresholdAlignments` array keeps\n            // records of where each axis in the group wants its threshold, from\n            // 0 which is on `axis.min`, to 1 which is on `axis.max`.\n            alignedAxes.forEach(function (otherAxis) {\n                var threshAlign = otherAxis.getThresholdAlignment(axis);\n                if (Axis_isNumber(threshAlign)) {\n                    thresholdAlignments.push(threshAlign);\n                }\n            });\n            // For each of the axes in the group, record the average\n            // `thresholdAlignment`.\n            var thresholdAlignment_1 = thresholdAlignments.length > 1 ?\n                    thresholdAlignments.reduce(function (sum,\n                n) { return (sum += n); }, 0) / thresholdAlignments.length :\n                    void 0;\n            alignedAxes.forEach(function (axis) {\n                axis.thresholdAlignment = thresholdAlignment_1;\n            });\n        }\n        return hasOther;\n    };\n    /**\n     * Where the axis wants its threshold, from 0 which is on `axis.min`, to 1 which\n     * is on `axis.max`.\n     *\n     * @private\n     * @function Highcharts.Axis#getThresholdAlignment\n     */\n    Axis.prototype.getThresholdAlignment = function (callerAxis) {\n        if (!Axis_isNumber(this.dataMin) ||\n            (this !== callerAxis &&\n                this.series.some(function (s) { return (s.isDirty || s.isDirtyData); }))) {\n            this.getSeriesExtremes();\n        }\n        if (Axis_isNumber(this.threshold)) {\n            var thresholdAlignment = Axis_clamp(((this.threshold - (this.dataMin || 0)) /\n                    ((this.dataMax || 0) - (this.dataMin || 0))), 0, 1);\n            if (this.options.reversed) {\n                thresholdAlignment = 1 - thresholdAlignment;\n            }\n            return thresholdAlignment;\n        }\n    };\n    /**\n     * Find the max ticks of either the x and y axis collection, and record it\n     * in `this.tickAmount`.\n     *\n     * @private\n     * @function Highcharts.Axis#getTickAmount\n     */\n    Axis.prototype.getTickAmount = function () {\n        var axis = this,\n            options = this.options,\n            tickPixelInterval = options.tickPixelInterval;\n        var tickAmount = options.tickAmount;\n        if (!Axis_defined(options.tickInterval) &&\n            !tickAmount &&\n            this.len < tickPixelInterval &&\n            !this.isRadial &&\n            !axis.logarithmic &&\n            options.startOnTick &&\n            options.endOnTick) {\n            tickAmount = 2;\n        }\n        if (!tickAmount && this.alignToOthers()) {\n            // Add 1 because 4 tick intervals require 5 ticks (including first\n            // and last)\n            tickAmount = Math.ceil(this.len / tickPixelInterval) + 1;\n        }\n        // For tick amounts of 2 and 3, compute five ticks and remove the\n        // intermediate ones. This prevents the axis from adding ticks that are\n        // too far away from the data extremes.\n        if (tickAmount < 4) {\n            this.finalTickAmt = tickAmount;\n            tickAmount = 5;\n        }\n        this.tickAmount = tickAmount;\n    };\n    /**\n     * When using multiple axes, adjust the number of ticks to match the highest\n     * number of ticks in that group.\n     *\n     * @private\n     * @function Highcharts.Axis#adjustTickAmount\n     */\n    Axis.prototype.adjustTickAmount = function () {\n        var axis = this,\n            finalTickAmt = axis.finalTickAmt,\n            max = axis.max,\n            min = axis.min,\n            options = axis.options,\n            tickPositions = axis.tickPositions,\n            tickAmount = axis.tickAmount,\n            thresholdAlignment = axis.thresholdAlignment,\n            currentTickAmount = tickPositions === null || tickPositions === void 0 ? void 0 : tickPositions.length,\n            threshold = Axis_pick(axis.threshold,\n            axis.softThreshold ? 0 : null);\n        var len,\n            i,\n            tickInterval = axis.tickInterval,\n            thresholdTickIndex;\n        var \n            // Extend the tickPositions by appending a position\n            append = function () { return tickPositions.push(Axis_correctFloat(tickPositions[tickPositions.length - 1] +\n                tickInterval)); }, \n            // Extend the tickPositions by prepending a position\n            prepend = function () { return tickPositions.unshift(Axis_correctFloat(tickPositions[0] - tickInterval)); };\n        // If `thresholdAlignment` is a number, it means the `alignThresholds`\n        // option is true. The `thresholdAlignment` is a scalar value between 0\n        // and 1 for where the threshold should be relative to `axis.min` and\n        // `axis.max`. Now that we know the tick amount, convert this to the\n        // tick index. Unless `thresholdAlignment` is exactly 0 or 1, avoid the\n        // first or last tick because that would lead to series being clipped.\n        if (Axis_isNumber(thresholdAlignment)) {\n            thresholdTickIndex = thresholdAlignment < 0.5 ?\n                Math.ceil(thresholdAlignment * (tickAmount - 1)) :\n                Math.floor(thresholdAlignment * (tickAmount - 1));\n            if (options.reversed) {\n                thresholdTickIndex = tickAmount - 1 - thresholdTickIndex;\n            }\n        }\n        if (axis.hasData() && Axis_isNumber(min) && Axis_isNumber(max)) { // #14769\n            // Adjust extremes and translation to the modified tick positions\n            var adjustExtremes = function () {\n                    axis.transA *= (currentTickAmount - 1) / (tickAmount - 1);\n                // Do not crop when ticks are not extremes (#9841)\n                axis.min = options.startOnTick ?\n                    tickPositions[0] :\n                    Math.min(min, tickPositions[0]);\n                axis.max = options.endOnTick ?\n                    tickPositions[tickPositions.length - 1] :\n                    Math.max(max, tickPositions[tickPositions.length - 1]);\n            };\n            // When the axis is subject to the alignThresholds option. Use\n            // axis.threshold because the local threshold includes the\n            // `softThreshold`.\n            if (Axis_isNumber(thresholdTickIndex) && Axis_isNumber(axis.threshold)) {\n                // Throw away the previously computed tickPositions and start\n                // from scratch with only the threshold itself, then add ticks\n                // below the threshold first, then fill up above the threshold.\n                // If we are not able to fill up to axis.max, double the\n                // tickInterval and run again.\n                while (tickPositions[thresholdTickIndex] !== threshold ||\n                    tickPositions.length !== tickAmount ||\n                    tickPositions[0] > min ||\n                    tickPositions[tickPositions.length - 1] < max) {\n                    tickPositions.length = 0;\n                    tickPositions.push(axis.threshold);\n                    while (tickPositions.length < tickAmount) {\n                        if (\n                        // Start by prepending positions until the threshold\n                        // is at the required index...\n                        tickPositions[thresholdTickIndex] === void 0 ||\n                            tickPositions[thresholdTickIndex] > axis.threshold) {\n                            prepend();\n                        }\n                        else {\n                            // ... then append positions until we have the\n                            // required length\n                            append();\n                        }\n                    }\n                    // Safety vent\n                    if (tickInterval > axis.tickInterval * 8) {\n                        break;\n                    }\n                    tickInterval *= 2;\n                }\n                adjustExtremes();\n            }\n            else if (currentTickAmount < tickAmount) {\n                while (tickPositions.length < tickAmount) {\n                    // Extend evenly for both sides unless we're on the\n                    // threshold (#3965)\n                    if (tickPositions.length % 2 || min === threshold) {\n                        append();\n                    }\n                    else {\n                        prepend();\n                    }\n                }\n                adjustExtremes();\n            }\n            // The finalTickAmt property is set in getTickAmount\n            if (Axis_defined(finalTickAmt)) {\n                i = len = tickPositions.length;\n                while (i--) {\n                    if (\n                    // Remove every other tick\n                    (finalTickAmt === 3 && i % 2 === 1) ||\n                        // Remove all but first and last\n                        (finalTickAmt <= 2 && i > 0 && i < len - 1)) {\n                        tickPositions.splice(i, 1);\n                    }\n                }\n                axis.finalTickAmt = void 0;\n            }\n        }\n    };\n    /**\n     * Set the scale based on data min and max, user set min and max or options.\n     *\n     * @private\n     * @function Highcharts.Axis#setScale\n     *\n     * @emits Highcharts.Axis#event:afterSetScale\n     */\n    Axis.prototype.setScale = function () {\n        var _a,\n            _b;\n        var axis = this,\n            coll = axis.coll,\n            stacking = axis.stacking;\n        var isDirtyData = false,\n            isXAxisDirty = false;\n        axis.series.forEach(function (series) {\n            isDirtyData = isDirtyData || series.isDirtyData || series.isDirty;\n            // When x axis is dirty, we need new data extremes for y as\n            // well:\n            isXAxisDirty = (isXAxisDirty ||\n                (series.xAxis && series.xAxis.isDirty) ||\n                false);\n        });\n        // Set the new axisLength\n        axis.setAxisSize();\n        var isDirtyAxisLength = axis.len !== (axis.old && axis.old.len);\n        // Do we really need to go through all this?\n        if (isDirtyAxisLength ||\n            isDirtyData ||\n            isXAxisDirty ||\n            axis.isLinked ||\n            axis.forceRedraw ||\n            axis.userMin !== (axis.old && axis.old.userMin) ||\n            axis.userMax !== (axis.old && axis.old.userMax) ||\n            axis.alignToOthers()) {\n            if (stacking && coll === 'yAxis') {\n                stacking.buildStacks();\n            }\n            axis.forceRedraw = false;\n            // #18066 delete minRange property to ensure that it will be\n            // calculated again after dirty data in series\n            if (!axis.userMinRange) {\n                axis.minRange = void 0;\n            }\n            // Get data extremes if needed\n            axis.getSeriesExtremes();\n            // Get fixed positions based on tickInterval\n            axis.setTickInterval();\n            if (stacking && coll === 'xAxis') {\n                stacking.buildStacks();\n            }\n            // Mark as dirty if it is not already set to dirty and extremes have\n            // changed. #595.\n            if (!axis.isDirty) {\n                axis.isDirty =\n                    isDirtyAxisLength ||\n                        axis.min !== ((_a = axis.old) === null || _a === void 0 ? void 0 : _a.min) ||\n                        axis.max !== ((_b = axis.old) === null || _b === void 0 ? void 0 : _b.max);\n            }\n        }\n        else if (stacking) {\n            stacking.cleanStacks();\n        }\n        // Recalculate all extremes object when the data has changed. It is\n        // required when vertical panning is enabled.\n        if (isDirtyData) {\n            delete axis.allExtremes;\n        }\n        Axis_fireEvent(this, 'afterSetScale');\n    };\n    /**\n     * Set the minimum and maximum of the axes after render time. If the\n     * `startOnTick` and `endOnTick` options are true, the minimum and maximum\n     * values are rounded off to the nearest tick. To prevent this, these\n     * options can be set to false before calling setExtremes. Also, setExtremes\n     * will not allow a range lower than the `minRange` option, which by default\n     * is the range of five points.\n     *\n     * @sample highcharts/members/axis-setextremes/\n     *         Set extremes from a button\n     * @sample highcharts/members/axis-setextremes-datetime/\n     *         Set extremes on a datetime axis\n     * @sample highcharts/members/axis-setextremes-off-ticks/\n     *         Set extremes off ticks\n     * @sample stock/members/axis-setextremes/\n     *         Set extremes in Highcharts Stock\n     *\n     * @function Highcharts.Axis#setExtremes\n     *\n     * @param {number|string} [newMin]\n     * The new minimum value. For datetime axes, date strings are accepted.\n     *\n     * @param {number|string} [newMax]\n     * The new maximum value. For datetime axes, date strings are accepted.\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     * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation=true]\n     * Enable or modify animations.\n     *\n     * @param {*} [eventArguments]\n     * Arguments to be accessed in event handler.\n     *\n     * @emits Highcharts.Axis#event:setExtremes\n     */\n    Axis.prototype.setExtremes = function (min, max, redraw, animation, eventArguments) {\n        var _this = this;\n        if (redraw === void 0) { redraw = true; }\n        var chart = this.chart;\n        this.series.forEach(function (serie) {\n            delete serie.kdTree;\n        });\n        min = chart.time.parse(min);\n        max = chart.time.parse(max);\n        // Extend the arguments with min and max\n        eventArguments = Axis_extend(eventArguments, { min: min, max: max });\n        // Fire the event\n        Axis_fireEvent(this, 'setExtremes', eventArguments, function (e) {\n            _this.userMin = e.min;\n            _this.userMax = e.max;\n            _this.eventArgs = e;\n            if (redraw) {\n                chart.redraw(animation);\n            }\n        });\n    };\n    /**\n     * Update the axis metrics.\n     *\n     * @private\n     * @function Highcharts.Axis#setAxisSize\n     */\n    Axis.prototype.setAxisSize = function () {\n        var chart = this.chart,\n            options = this.options, \n            // [top, right, bottom, left]\n            offsets = options.offsets || [0, 0, 0, 0],\n            horiz = this.horiz, \n            // Check for percentage based input values. Rounding fixes problems\n            // with column overflow and plot line filtering (#4898, #4899)\n            width = this.width = Math.round(Axis_relativeLength(Axis_pick(options.width,\n            chart.plotWidth - offsets[3] + offsets[1]),\n            chart.plotWidth)),\n            height = this.height = Math.round(Axis_relativeLength(Axis_pick(options.height,\n            chart.plotHeight - offsets[0] + offsets[2]),\n            chart.plotHeight)),\n            top = this.top = Math.round(Axis_relativeLength(Axis_pick(options.top,\n            chart.plotTop + offsets[0]),\n            chart.plotHeight,\n            chart.plotTop)),\n            left = this.left = Math.round(Axis_relativeLength(Axis_pick(options.left,\n            chart.plotLeft + offsets[3]),\n            chart.plotWidth,\n            chart.plotLeft));\n        // Expose basic values to use in Series object and navigator\n        this.bottom = chart.chartHeight - height - top;\n        this.right = chart.chartWidth - width - left;\n        // Direction agnostic properties\n        this.len = Math.max(horiz ? width : height, 0); // Math.max fixes #905\n        /**\n         * The position of the axis in terms of pixels, compared to the chart\n         * edge. In a horizontal axis it is the same as `chart.plotLeft` unless\n         * the axis is explicitly positioned, and in a default vertical axis it\n         * is the same as `chart.plotTop`.\n         *\n         * @name Highcharts.Axis#pos\n         * @type {number}\n         */\n        this.pos = horiz ? left : top; // Distance from SVG origin\n    };\n    /**\n     * Get the current extremes for the axis.\n     *\n     * @sample highcharts/members/axis-getextremes/\n     *         Report extremes by click on a button\n     *\n     * @function Highcharts.Axis#getExtremes\n     *\n     * @return {Highcharts.ExtremesObject}\n     * An object containing extremes information.\n     */\n    Axis.prototype.getExtremes = function () {\n        var axis = this,\n            log = axis.logarithmic;\n        return {\n            min: log ?\n                Axis_correctFloat(log.lin2log(axis.min)) :\n                axis.min,\n            max: log ?\n                Axis_correctFloat(log.lin2log(axis.max)) :\n                axis.max,\n            dataMin: axis.dataMin,\n            dataMax: axis.dataMax,\n            userMin: axis.userMin,\n            userMax: axis.userMax\n        };\n    };\n    /**\n     * Get the zero plane either based on zero or on the min or max value.\n     * Used in bar and area plots.\n     *\n     * @function Highcharts.Axis#getThreshold\n     *\n     * @param {number} threshold\n     * The threshold in axis values.\n     *\n     * @return {number}\n     * The translated threshold position in terms of pixels, and corrected to\n     * stay within the axis bounds.\n     */\n    Axis.prototype.getThreshold = function (threshold) {\n        var axis = this,\n            log = axis.logarithmic,\n            realMin = log ? log.lin2log(axis.min) : axis.min,\n            realMax = log ? log.lin2log(axis.max) : axis.max;\n        if (threshold === null || threshold === -Infinity) {\n            threshold = realMin;\n        }\n        else if (threshold === Infinity) {\n            threshold = realMax;\n        }\n        else if (realMin > threshold) {\n            threshold = realMin;\n        }\n        else if (realMax < threshold) {\n            threshold = realMax;\n        }\n        return axis.translate(threshold, 0, 1, 0, 1);\n    };\n    /**\n     * Compute auto alignment for the axis label based on which side the axis is\n     * on and the given rotation for the label.\n     *\n     * @private\n     * @function Highcharts.Axis#autoLabelAlign\n     *\n     * @param {number} rotation\n     * The rotation in degrees as set by either the `rotation` or `autoRotation`\n     * options.\n     *\n     * @return {Highcharts.AlignValue}\n     * Can be `\"center\"`, `\"left\"` or `\"right\"`.\n     */\n    Axis.prototype.autoLabelAlign = function (rotation) {\n        var angle = (Axis_pick(rotation, 0) - (this.side * 90) + 720) % 360,\n            evt = { align: 'center' };\n        Axis_fireEvent(this, 'autoLabelAlign', evt, function (e) {\n            if (angle > 15 && angle < 165) {\n                e.align = 'right';\n            }\n            else if (angle > 195 && angle < 345) {\n                e.align = 'left';\n            }\n        });\n        return evt.align;\n    };\n    /**\n     * Get the tick length and width for the axis based on axis options.\n     *\n     * @private\n     * @function Highcharts.Axis#tickSize\n     *\n     * @param {string} [prefix]\n     * 'tick' or 'minorTick'\n     *\n     * @return {Array<number,number>|undefined}\n     * An array of tickLength and tickWidth\n     */\n    Axis.prototype.tickSize = function (prefix) {\n        var options = this.options,\n            tickWidth = Axis_pick(options[prefix === 'tick' ? 'tickWidth' : 'minorTickWidth'], \n            // Default to 1 on linear and datetime X axes\n            prefix === 'tick' && this.isXAxis && !this.categories ? 1 : 0);\n        var tickLength = options[prefix === 'tick' ? 'tickLength' : 'minorTickLength'],\n            tickSize;\n        if (tickWidth && tickLength) {\n            // Negate the length\n            if (options[prefix + 'Position'] === 'inside') {\n                tickLength = -tickLength;\n            }\n            tickSize = [tickLength, tickWidth];\n        }\n        var e = { tickSize: tickSize };\n        Axis_fireEvent(this, 'afterTickSize', e);\n        return e.tickSize;\n    };\n    /**\n     * Return the size of the labels.\n     *\n     * @private\n     * @function Highcharts.Axis#labelMetrics\n     */\n    Axis.prototype.labelMetrics = function () {\n        var renderer = this.chart.renderer,\n            ticks = this.ticks,\n            tick = ticks[Object.keys(ticks)[0]] || {};\n        return this.chart.renderer.fontMetrics(tick.label ||\n            tick.movedLabel ||\n            renderer.box);\n    };\n    /**\n     * Prevent the ticks from getting so close we can't draw the labels. On a\n     * horizontal axis, this is handled by rotating the labels, removing ticks\n     * and adding ellipsis. On a vertical axis remove ticks and add ellipsis.\n     *\n     * @private\n     * @function Highcharts.Axis#unsquish\n     */\n    Axis.prototype.unsquish = function () {\n        var labelOptions = this.options.labels,\n            padding = labelOptions.padding || 0,\n            horiz = this.horiz,\n            tickInterval = this.tickInterval,\n            slotSize = this.len / (((this.categories ? 1 : 0) +\n                this.max -\n                this.min) /\n                tickInterval),\n            rotationOption = labelOptions.rotation, \n            // We don't know the actual rendered line height at this point, but\n            // it defaults to 0.8em\n            lineHeight = Axis_correctFloat(this.labelMetrics().h * 0.8),\n            range = Math.max(this.max - this.min, 0), \n            // Return the multiple of tickInterval that is needed to avoid\n            // collision\n            getStep = function (spaceNeeded) {\n                var step = (spaceNeeded + 2 * padding) / (slotSize || 1);\n            step = step > 1 ? Math.ceil(step) : 1;\n            // Guard for very small or negative angles (#9835)\n            if (step * tickInterval > range &&\n                spaceNeeded !== Infinity &&\n                slotSize !== Infinity &&\n                range) {\n                step = Math.ceil(range / tickInterval);\n            }\n            return Axis_correctFloat(step * tickInterval);\n        };\n        var newTickInterval = tickInterval,\n            rotation,\n            bestScore = Number.MAX_VALUE,\n            autoRotation;\n        if (horiz) {\n            if (!labelOptions.staggerLines) {\n                if (Axis_isNumber(rotationOption)) {\n                    autoRotation = [rotationOption];\n                }\n                else if (slotSize < labelOptions.autoRotationLimit) {\n                    autoRotation = labelOptions.autoRotation;\n                }\n            }\n            if (autoRotation) {\n                var step = void 0,\n                    score = void 0;\n                // Loop over the given autoRotation options, and determine which\n                // gives the best score. The best score is that with the lowest\n                // number of steps and a rotation closest to horizontal.\n                for (var _i = 0, autoRotation_1 = autoRotation; _i < autoRotation_1.length; _i++) {\n                    var rot = autoRotation_1[_i];\n                    if (rot === rotationOption ||\n                        (rot && rot >= -90 && rot <= 90)) { // #3891\n                        step = getStep(Math.abs(lineHeight / Math.sin(Axis_deg2rad * rot)));\n                        score = step + Math.abs(rot / 360);\n                        if (score < bestScore) {\n                            bestScore = score;\n                            rotation = rot;\n                            newTickInterval = step;\n                        }\n                    }\n                }\n            }\n        }\n        else { // #4411\n            newTickInterval = getStep(lineHeight * 0.75);\n        }\n        this.autoRotation = autoRotation;\n        this.labelRotation = Axis_pick(rotation, Axis_isNumber(rotationOption) ? rotationOption : 0);\n        return labelOptions.step ? tickInterval : newTickInterval;\n    };\n    /**\n     * Get the general slot width for labels/categories on this axis. This may\n     * change between the pre-render (from Axis.getOffset) and the final tick\n     * rendering and placement.\n     *\n     * @private\n     * @function Highcharts.Axis#getSlotWidth\n     *\n     * @param {Highcharts.Tick} [tick] Optionally, calculate the slot width\n     * basing on tick label. It is used in highcharts-3d module, where the slots\n     * has different widths depending on perspective angles.\n     *\n     * @return {number}\n     * The pixel width allocated to each axis label.\n     */\n    Axis.prototype.getSlotWidth = function (tick) {\n        // #5086, #1580, #1931\n        var chart = this.chart,\n            horiz = this.horiz,\n            labelOptions = this.options.labels,\n            slotCount = Math.max(this.tickPositions.length - (this.categories ? 0 : 1), 1),\n            marginLeft = chart.margin[3];\n        // Used by grid axis\n        if (tick && Axis_isNumber(tick.slotWidth)) { // #13221, can be 0\n            return tick.slotWidth;\n        }\n        if (horiz && labelOptions.step < 2 && !this.isRadial) {\n            if (labelOptions.rotation) { // #4415\n                return 0;\n            }\n            return ((this.staggerLines || 1) * this.len) / slotCount;\n        }\n        if (!horiz) {\n            // #7028\n            var cssWidth = labelOptions.style.width;\n            if (cssWidth !== void 0) {\n                return parseInt(String(cssWidth), 10);\n            }\n            if (marginLeft) {\n                return marginLeft - chart.spacing[3];\n            }\n        }\n        // Last resort, a fraction of the available size\n        return chart.chartWidth * 0.33;\n    };\n    /**\n     * Render the axis labels and determine whether ellipsis or rotation need to\n     * be applied.\n     *\n     * @private\n     * @function Highcharts.Axis#renderUnsquish\n     */\n    Axis.prototype.renderUnsquish = function () {\n        var chart = this.chart,\n            renderer = chart.renderer,\n            tickPositions = this.tickPositions,\n            ticks = this.ticks,\n            labelOptions = this.options.labels,\n            labelStyleOptions = labelOptions.style,\n            horiz = this.horiz,\n            slotWidth = this.getSlotWidth(),\n            innerWidth = Math.max(1,\n            Math.round(slotWidth - (horiz ?\n                2 * (labelOptions.padding || 0) :\n                labelOptions.distance || 0 // #21172\n            ))),\n            attr = {},\n            labelMetrics = this.labelMetrics(),\n            lineClampOption = labelStyleOptions.lineClamp;\n        var commonWidth,\n            lineClamp = lineClampOption !== null && lineClampOption !== void 0 ? lineClampOption : (Math.floor(this.len / (tickPositions.length * labelMetrics.h)) || 1),\n            maxLabelLength = 0;\n        // Set rotation option unless it is \"auto\", like in gauges\n        if (!Axis_isString(labelOptions.rotation)) {\n            // #4443\n            attr.rotation = labelOptions.rotation || 0;\n        }\n        // Get the longest label length\n        tickPositions.forEach(function (tickPosition) {\n            var _a;\n            var tick = ticks[tickPosition];\n            // Replace label - sorting animation\n            if (tick.movedLabel) {\n                tick.replaceMovedLabel();\n            }\n            var textPxLength = ((_a = tick.label) === null || _a === void 0 ? void 0 : _a.textPxLength) || 0;\n            if (textPxLength > maxLabelLength) {\n                maxLabelLength = textPxLength;\n            }\n        });\n        this.maxLabelLength = maxLabelLength;\n        // Handle auto rotation on horizontal axis\n        if (this.autoRotation) {\n            // Apply rotation only if the label is too wide for the slot, and\n            // the label is wider than its height.\n            if (maxLabelLength > innerWidth &&\n                maxLabelLength > labelMetrics.h) {\n                attr.rotation = this.labelRotation;\n            }\n            else {\n                this.labelRotation = 0;\n            }\n            // Handle word-wrap or ellipsis on vertical axis\n        }\n        else if (slotWidth) {\n            // For word-wrap or ellipsis\n            commonWidth = innerWidth;\n        }\n        // Add ellipsis if the label length is significantly longer than ideal\n        if (attr.rotation) {\n            commonWidth = (maxLabelLength > chart.chartHeight * 0.5 ?\n                chart.chartHeight * 0.33 :\n                maxLabelLength);\n            if (!lineClampOption) {\n                lineClamp = 1;\n            }\n        }\n        // Set the explicit or automatic label alignment\n        this.labelAlign = labelOptions.align ||\n            this.autoLabelAlign(this.labelRotation);\n        if (this.labelAlign) {\n            attr.align = this.labelAlign;\n        }\n        // Apply general and specific CSS\n        tickPositions.forEach(function (pos) {\n            var tick = ticks[pos],\n                label = tick && tick.label,\n                widthOption = labelStyleOptions.width,\n                css = {};\n            if (label) {\n                // This needs to go before the CSS in old IE (#4502)\n                label.attr(attr);\n                if (tick.shortenLabel) {\n                    tick.shortenLabel();\n                }\n                else if (commonWidth &&\n                    !widthOption &&\n                    // Setting width in this case messes with the bounding box\n                    // (#7975)\n                    labelStyleOptions.whiteSpace !== 'nowrap' &&\n                    (\n                    // Speed optimizing, #7656\n                    commonWidth < (label.textPxLength || 0) ||\n                        // Resetting CSS, #4928\n                        label.element.tagName === 'SPAN')) {\n                    label.css(Axis_extend(css, {\n                        width: \"\" + commonWidth + \"px\",\n                        lineClamp: lineClamp\n                    }));\n                    // Reset previously shortened label (#8210)\n                }\n                else if (label.styles.width && !css.width && !widthOption) {\n                    label.css({ width: 'auto' });\n                }\n                tick.rotation = attr.rotation;\n            }\n        }, this);\n        // Note: Why is this not part of getLabelPosition?\n        this.tickRotCorr = renderer.rotCorr(labelMetrics.b, this.labelRotation || 0, this.side !== 0);\n    };\n    /**\n     * Return true if the axis has associated data.\n     *\n     * @function Highcharts.Axis#hasData\n     *\n     * @return {boolean}\n     * True if the axis has associated visible series and those series have\n     * either valid data points or explicit `min` and `max` settings.\n     */\n    Axis.prototype.hasData = function () {\n        return this.series.some(function (s) {\n            return s.hasData();\n        }) ||\n            (this.options.showEmpty &&\n                Axis_defined(this.min) &&\n                Axis_defined(this.max));\n    };\n    /**\n     * Adds the title defined in axis.options.title.\n     *\n     * @function Highcharts.Axis#addTitle\n     *\n     * @param {boolean} [display]\n     * Whether or not to display the title.\n     */\n    Axis.prototype.addTitle = function (display) {\n        var axis = this,\n            renderer = axis.chart.renderer,\n            horiz = axis.horiz,\n            opposite = axis.opposite,\n            options = axis.options,\n            axisTitleOptions = options.title,\n            styledMode = axis.chart.styledMode;\n        var textAlign;\n        if (!axis.axisTitle) {\n            textAlign = axisTitleOptions.textAlign;\n            if (!textAlign) {\n                textAlign = (horiz ? {\n                    low: 'left',\n                    middle: 'center',\n                    high: 'right'\n                } : {\n                    low: opposite ? 'right' : 'left',\n                    middle: 'center',\n                    high: opposite ? 'left' : 'right'\n                })[axisTitleOptions.align];\n            }\n            axis.axisTitle = renderer\n                .text(axisTitleOptions.text || '', 0, 0, axisTitleOptions.useHTML)\n                .attr({\n                zIndex: 7,\n                rotation: axisTitleOptions.rotation || 0,\n                align: textAlign\n            })\n                .addClass('highcharts-axis-title');\n            // #7814, don't mutate style option\n            if (!styledMode) {\n                axis.axisTitle.css(Axis_merge(axisTitleOptions.style));\n            }\n            axis.axisTitle.add(axis.axisGroup);\n            axis.axisTitle.isNew = true;\n        }\n        // Max width defaults to the length of the axis\n        if (!styledMode &&\n            !axisTitleOptions.style.width &&\n            !axis.isRadial) {\n            axis.axisTitle.css({\n                width: axis.len + 'px'\n            });\n        }\n        // Hide or show the title depending on whether showEmpty is set\n        axis.axisTitle[display ? 'show' : 'hide'](display);\n    };\n    /**\n     * Generates a tick for initial positioning.\n     *\n     * @private\n     * @function Highcharts.Axis#generateTick\n     *\n     * @param {number} pos\n     * The tick position in axis values.\n     *\n     * @param {number} [i]\n     * The index of the tick in {@link Axis.tickPositions}.\n     */\n    Axis.prototype.generateTick = function (pos) {\n        var axis = this,\n            ticks = axis.ticks;\n        if (!ticks[pos]) {\n            ticks[pos] = new Axis_Tick(axis, pos);\n        }\n        else {\n            ticks[pos].addLabel(); // Update labels depending on tick interval\n        }\n    };\n    /**\n     * Create the axisGroup and gridGroup elements on first iteration.\n     *\n     * @private\n     * @function Highcharts.Axis#getOffset\n     *\n     * @emits Highcharts.Axis#event:afterGetOffset\n     */\n    Axis.prototype.createGroups = function () {\n        var _this = this;\n        var _a = this,\n            axisParent = _a.axisParent, // Used in color axis\n            chart = _a.chart,\n            coll = _a.coll,\n            options = _a.options,\n            renderer = chart.renderer;\n        var createGroup = function (name, suffix, zIndex) { return renderer.g(name)\n                .attr({ zIndex: zIndex })\n                .addClass(\"highcharts-\".concat(coll.toLowerCase()).concat(suffix, \" \") +\n                (_this.isRadial ? \"highcharts-radial-axis\".concat(suffix, \" \") : '') +\n                (options.className || ''))\n                .add(axisParent); };\n        if (!this.axisGroup) {\n            this.gridGroup = createGroup('grid', '-grid', options.gridZIndex);\n            this.axisGroup = createGroup('axis', '', options.zIndex);\n            this.labelGroup = createGroup('axis-labels', '-labels', options.labels.zIndex);\n        }\n    };\n    /**\n     * Render the tick labels to a preliminary position to get their sizes\n     *\n     * @private\n     * @function Highcharts.Axis#getOffset\n     *\n     * @emits Highcharts.Axis#event:afterGetOffset\n     */\n    Axis.prototype.getOffset = function () {\n        var axis = this,\n            chart = axis.chart,\n            horiz = axis.horiz,\n            options = axis.options,\n            side = axis.side,\n            ticks = axis.ticks,\n            tickPositions = axis.tickPositions,\n            coll = axis.coll,\n            invertedSide = (chart.inverted && !axis.isZAxis ?\n                [1, 0, 3, 2][side] :\n                side),\n            hasData = axis.hasData(),\n            axisTitleOptions = options.title,\n            labelOptions = options.labels,\n            hasCrossing = Axis_isNumber(options.crossing),\n            axisOffset = chart.axisOffset,\n            clipOffset = chart.clipOffset,\n            directionFactor = [-1, 1, 1, -1][side];\n        var showAxis,\n            titleOffset = 0,\n            titleOffsetOption,\n            titleMargin = 0,\n            labelOffset = 0, // Reset\n            labelOffsetPadded,\n            lineHeightCorrection;\n        // For reuse in Axis.render\n        axis.showAxis = showAxis = hasData || options.showEmpty;\n        // Set/reset staggerLines\n        axis.staggerLines = (axis.horiz && labelOptions.staggerLines) || void 0;\n        axis.createGroups();\n        if (hasData || axis.isLinked) {\n            // Generate ticks\n            tickPositions.forEach(function (pos) {\n                axis.generateTick(pos);\n            });\n            axis.renderUnsquish();\n            // Left side must be align: right and right side must\n            // have align: left for labels\n            axis.reserveSpaceDefault = (side === 0 ||\n                side === 2 ||\n                { 1: 'left', 3: 'right' }[side] === axis.labelAlign);\n            if (Axis_pick(labelOptions.reserveSpace, hasCrossing ? false : null, axis.labelAlign === 'center' ? true : null, axis.reserveSpaceDefault)) {\n                tickPositions.forEach(function (pos) {\n                    // Get the highest offset\n                    labelOffset = Math.max(ticks[pos].getLabelSize(), labelOffset);\n                });\n            }\n            if (axis.staggerLines) {\n                labelOffset *= axis.staggerLines;\n            }\n            axis.labelOffset = labelOffset * (axis.opposite ? -1 : 1);\n        }\n        else { // Doesn't have data\n            Axis_objectEach(ticks, function (tick, n) {\n                tick.destroy();\n                delete ticks[n];\n            });\n        }\n        if ((axisTitleOptions === null || axisTitleOptions === void 0 ? void 0 : axisTitleOptions.text) &&\n            axisTitleOptions.enabled !== false) {\n            axis.addTitle(showAxis);\n            if (showAxis &&\n                !hasCrossing &&\n                axisTitleOptions.reserveSpace !== false) {\n                axis.titleOffset = titleOffset =\n                    axis.axisTitle.getBBox()[horiz ? 'height' : 'width'];\n                titleOffsetOption = axisTitleOptions.offset;\n                titleMargin = Axis_defined(titleOffsetOption) ?\n                    0 :\n                    Axis_pick(axisTitleOptions.margin, horiz ? 5 : 10);\n            }\n        }\n        // Render the axis line\n        axis.renderLine();\n        // Handle automatic or user set offset\n        axis.offset = directionFactor * Axis_pick(options.offset, axisOffset[side] ? axisOffset[side] + (options.margin || 0) : 0);\n        axis.tickRotCorr = axis.tickRotCorr || { x: 0, y: 0 }; // Polar\n        if (side === 0) {\n            lineHeightCorrection = -axis.labelMetrics().h;\n        }\n        else if (side === 2) {\n            lineHeightCorrection = axis.tickRotCorr.y;\n        }\n        else {\n            lineHeightCorrection = 0;\n        }\n        // Find the padded label offset\n        labelOffsetPadded = Math.abs(labelOffset) + titleMargin;\n        if (labelOffset) {\n            labelOffsetPadded -= lineHeightCorrection;\n            labelOffsetPadded += directionFactor * (horiz ?\n                Axis_pick(labelOptions.y, axis.tickRotCorr.y +\n                    directionFactor * labelOptions.distance) :\n                Axis_pick(labelOptions.x, directionFactor * labelOptions.distance));\n        }\n        axis.axisTitleMargin = Axis_pick(titleOffsetOption, labelOffsetPadded);\n        if (axis.getMaxLabelDimensions) {\n            axis.maxLabelDimensions = axis.getMaxLabelDimensions(ticks, tickPositions);\n        }\n        // Due to GridAxis.tickSize, tickSize should be calculated after ticks\n        // has rendered.\n        if (coll !== 'colorAxis' && clipOffset) {\n            var tickSize = this.tickSize('tick');\n            axisOffset[side] = Math.max(axisOffset[side], (axis.axisTitleMargin || 0) + titleOffset +\n                directionFactor * axis.offset, labelOffsetPadded, // #3027\n            tickPositions && tickPositions.length && tickSize ?\n                tickSize[0] + directionFactor * axis.offset :\n                0 // #4866\n            );\n            // Decide the clipping needed to keep the graph inside\n            // the plot area and axis lines\n            var clip = !axis.axisLine || options.offset ?\n                    0 :\n                    // #4308, #4371\n                    axis.axisLine.strokeWidth() / 2;\n            clipOffset[invertedSide] = Math.max(clipOffset[invertedSide], clip);\n        }\n        Axis_fireEvent(this, 'afterGetOffset');\n    };\n    /**\n     * Internal function to get the path for the axis line. Extended for polar\n     * charts.\n     *\n     * @function Highcharts.Axis#getLinePath\n     *\n     * @param {number} lineWidth\n     * The line width in pixels.\n     *\n     * @return {Highcharts.SVGPathArray}\n     * The SVG path definition in array form.\n     */\n    Axis.prototype.getLinePath = function (lineWidth) {\n        var chart = this.chart,\n            opposite = this.opposite,\n            offset = this.offset,\n            horiz = this.horiz,\n            lineLeft = this.left + (opposite ? this.width : 0) + offset,\n            lineTop = chart.chartHeight - this.bottom -\n                (opposite ? this.height : 0) + offset;\n        if (opposite) {\n            lineWidth *= -1; // Crispify the other way - #1480, #1687\n        }\n        return chart.renderer\n            .crispLine([\n            [\n                'M',\n                horiz ?\n                    this.left :\n                    lineLeft,\n                horiz ?\n                    lineTop :\n                    this.top\n            ],\n            [\n                'L',\n                horiz ?\n                    chart.chartWidth - this.right :\n                    lineLeft,\n                horiz ?\n                    lineTop :\n                    chart.chartHeight - this.bottom\n            ]\n        ], lineWidth);\n    };\n    /**\n     * Render the axis line. Called internally when rendering and redrawing the\n     * axis.\n     *\n     * @function Highcharts.Axis#renderLine\n     */\n    Axis.prototype.renderLine = function () {\n        if (!this.axisLine) {\n            this.axisLine = this.chart.renderer.path()\n                .addClass('highcharts-axis-line')\n                .add(this.axisGroup);\n            if (!this.chart.styledMode) {\n                this.axisLine.attr({\n                    stroke: this.options.lineColor,\n                    'stroke-width': this.options.lineWidth,\n                    zIndex: 7\n                });\n            }\n        }\n    };\n    /**\n     * Position the axis title.\n     *\n     * @private\n     * @function Highcharts.Axis#getTitlePosition\n     *\n     * @return {Highcharts.PositionObject}\n     * X and Y positions for the title.\n     */\n    Axis.prototype.getTitlePosition = function (axisTitle) {\n        // Compute anchor points for each of the title align options\n        var horiz = this.horiz,\n            axisLeft = this.left,\n            axisTop = this.top,\n            axisLength = this.len,\n            axisTitleOptions = this.options.title,\n            margin = horiz ? axisLeft : axisTop,\n            opposite = this.opposite,\n            offset = this.offset,\n            xOption = axisTitleOptions.x,\n            yOption = axisTitleOptions.y,\n            fontMetrics = this.chart.renderer.fontMetrics(axisTitle), \n            // The part of a multiline text that is below the baseline of the\n            // first line. Subtract 1 to preserve pixel-perfectness from the\n            // old behaviour (v5.0.12), where only one line was allowed.\n            textHeightOvershoot = axisTitle ? Math.max(axisTitle.getBBox(false, 0).height - fontMetrics.h - 1, 0) : 0, \n            // The position in the length direction of the axis\n            alongAxis = ({\n                low: margin + (horiz ? 0 : axisLength),\n                middle: margin + axisLength / 2,\n                high: margin + (horiz ? axisLength : 0)\n            })[axisTitleOptions.align], \n            // The position in the perpendicular direction of the axis\n            offAxis = (horiz ? axisTop + this.height : axisLeft) +\n                (horiz ? 1 : -1) * // Horizontal axis reverses the margin\n                    (opposite ? -1 : 1) * // So does opposite axes\n                    (this.axisTitleMargin || 0) +\n                [\n                    -textHeightOvershoot, // Top\n                    textHeightOvershoot, // Right\n                    fontMetrics.f, // Bottom\n                    -textHeightOvershoot // Left\n                ][this.side],\n            titlePosition = {\n                x: horiz ?\n                    alongAxis + xOption :\n                    offAxis + (opposite ? this.width : 0) + offset + xOption,\n                y: horiz ?\n                    offAxis + yOption - (opposite ? this.height : 0) + offset :\n                    alongAxis + yOption\n            };\n        Axis_fireEvent(this, 'afterGetTitlePosition', { titlePosition: titlePosition });\n        return titlePosition;\n    };\n    /**\n     * Render a minor tick into the given position. If a minor tick already\n     * exists in this position, move it.\n     *\n     * @function Highcharts.Axis#renderMinorTick\n     *\n     * @param {number} pos\n     * The position in axis values.\n     *\n     * @param {boolean} slideIn\n     * Whether the tick should animate in from last computed position\n     */\n    Axis.prototype.renderMinorTick = function (pos, slideIn) {\n        var axis = this;\n        var minorTicks = axis.minorTicks;\n        if (!minorTicks[pos]) {\n            minorTicks[pos] = new Axis_Tick(axis, pos, 'minor');\n        }\n        // Render new ticks in old position\n        if (slideIn && minorTicks[pos].isNew) {\n            minorTicks[pos].render(null, true);\n        }\n        minorTicks[pos].render(null, false, 1);\n    };\n    /**\n     * Render a major tick into the given position. If a tick already exists\n     * in this position, move it.\n     *\n     * @function Highcharts.Axis#renderTick\n     *\n     * @param {number} pos\n     * The position in axis values.\n     *\n     * @param {number} i\n     * The tick index.\n     *\n     * @param {boolean} slideIn\n     * Whether the tick should animate in from last computed position\n     */\n    Axis.prototype.renderTick = function (pos, i, slideIn) {\n        var axis = this,\n            isLinked = axis.isLinked,\n            ticks = axis.ticks;\n        // Linked axes need an extra check to find out if\n        if (!isLinked ||\n            (pos >= axis.min && pos <= axis.max) ||\n            (axis.grid && axis.grid.isColumn)) {\n            if (!ticks[pos]) {\n                ticks[pos] = new Axis_Tick(axis, pos);\n            }\n            // NOTE this seems like overkill. Could be handled in tick.render by\n            // setting old position in attr, then set new position in animate.\n            // render new ticks in old position\n            if (slideIn && ticks[pos].isNew) {\n                // Start with negative opacity so that it is visible from\n                // halfway into the animation\n                ticks[pos].render(i, true, -1);\n            }\n            ticks[pos].render(i);\n        }\n    };\n    /**\n     * Render the axis.\n     *\n     * @private\n     * @function Highcharts.Axis#render\n     *\n     * @emits Highcharts.Axis#event:afterRender\n     */\n    Axis.prototype.render = function () {\n        var axis = this,\n            chart = axis.chart,\n            log = axis.logarithmic,\n            renderer = chart.renderer,\n            options = axis.options,\n            isLinked = axis.isLinked,\n            tickPositions = axis.tickPositions,\n            axisTitle = axis.axisTitle,\n            ticks = axis.ticks,\n            minorTicks = axis.minorTicks,\n            alternateBands = axis.alternateBands,\n            stackLabelOptions = options.stackLabels,\n            alternateGridColor = options.alternateGridColor,\n            crossing = options.crossing,\n            tickmarkOffset = axis.tickmarkOffset,\n            axisLine = axis.axisLine,\n            showAxis = axis.showAxis,\n            animation = Axis_animObject(renderer.globalAnimation);\n        var from,\n            to;\n        // Reset\n        axis.labelEdge.length = 0;\n        axis.overlap = false;\n        // Mark all elements inActive before we go over and mark the active ones\n        [ticks, minorTicks, alternateBands].forEach(function (coll) {\n            Axis_objectEach(coll, function (tick) {\n                tick.isActive = false;\n            });\n        });\n        // Crossing\n        if (Axis_isNumber(crossing)) {\n            var otherAxis = this.isXAxis ? chart.yAxis[0] : chart.xAxis[0],\n                directionFactor = [1, -1, -1, 1][this.side];\n            if (otherAxis) {\n                var px = otherAxis.toPixels(crossing,\n                    true);\n                if (axis.horiz) {\n                    px = otherAxis.len - px;\n                }\n                axis.offset = directionFactor * px;\n            }\n        }\n        // If the series has data draw the ticks. Else only the line and title\n        if (axis.hasData() || isLinked) {\n            var slideInTicks_1 = axis.chart.hasRendered &&\n                    axis.old && Axis_isNumber(axis.old.min);\n            // Minor ticks\n            if (axis.minorTickInterval && !axis.categories) {\n                axis.getMinorTickPositions().forEach(function (pos) {\n                    axis.renderMinorTick(pos, slideInTicks_1);\n                });\n            }\n            // Major ticks. Pull out the first item and render it last so that\n            // we can get the position of the neighbour label. #808.\n            if (tickPositions.length) { // #1300\n                tickPositions.forEach(function (pos, i) {\n                    axis.renderTick(pos, i, slideInTicks_1);\n                });\n                // In a categorized axis, the tick marks are displayed\n                // between labels. So we need to add a tick mark and\n                // grid line at the left edge of the X axis.\n                if (tickmarkOffset && (axis.min === 0 || axis.single)) {\n                    if (!ticks[-1]) {\n                        ticks[-1] = new Axis_Tick(axis, -1, null, true);\n                    }\n                    ticks[-1].render(-1);\n                }\n            }\n            // Alternate grid color\n            if (alternateGridColor) {\n                tickPositions.forEach(function (pos, i) {\n                    to = typeof tickPositions[i + 1] !== 'undefined' ?\n                        tickPositions[i + 1] + tickmarkOffset :\n                        axis.max - tickmarkOffset;\n                    if (i % 2 === 0 &&\n                        pos < axis.max &&\n                        to <= axis.max + (chart.polar ?\n                            -tickmarkOffset :\n                            tickmarkOffset)) { // #2248, #4660\n                        if (!alternateBands[pos]) {\n                            // Should be imported from PlotLineOrBand.js, but\n                            // the dependency cycle with axis is a problem\n                            alternateBands[pos] = new Core_Globals.PlotLineOrBand(axis, {});\n                        }\n                        from = pos + tickmarkOffset; // #949\n                        alternateBands[pos].options = {\n                            from: log ? log.lin2log(from) : from,\n                            to: log ? log.lin2log(to) : to,\n                            color: alternateGridColor,\n                            className: 'highcharts-alternate-grid'\n                        };\n                        alternateBands[pos].render();\n                        alternateBands[pos].isActive = true;\n                    }\n                });\n            }\n            // Custom plot lines and bands\n            if (!axis._addedPlotLB) { // Only first time\n                axis._addedPlotLB = true;\n                (options.plotLines || [])\n                    .concat(options.plotBands || [])\n                    .forEach(function (plotLineOptions) {\n                    axis\n                        .addPlotBandOrLine(plotLineOptions);\n                });\n            }\n        } // End if hasData\n        // Remove inactive ticks\n        [ticks, minorTicks, alternateBands].forEach(function (coll) {\n            var forDestruction = [],\n                delay = animation.duration,\n                destroyInactiveItems = function () {\n                    var i = forDestruction.length;\n                while (i--) {\n                    // When resizing rapidly, the same items\n                    // may be destroyed in different timeouts,\n                    // or the may be reactivated\n                    if (coll[forDestruction[i]] &&\n                        !coll[forDestruction[i]].isActive) {\n                        coll[forDestruction[i]].destroy();\n                        delete coll[forDestruction[i]];\n                    }\n                }\n            };\n            Axis_objectEach(coll, function (tick, pos) {\n                if (!tick.isActive) {\n                    // Render to zero opacity\n                    tick.render(pos, false, 0);\n                    tick.isActive = false;\n                    forDestruction.push(pos);\n                }\n            });\n            // When the objects are finished fading out, destroy them\n            Axis_syncTimeout(destroyInactiveItems, coll === alternateBands ||\n                !chart.hasRendered ||\n                !delay ?\n                0 :\n                delay);\n        });\n        // Set the axis line path\n        if (axisLine) {\n            axisLine[axisLine.isPlaced ? 'animate' : 'attr']({\n                d: this.getLinePath(axisLine.strokeWidth())\n            });\n            axisLine.isPlaced = true;\n            // Show or hide the line depending on options.showEmpty\n            axisLine[showAxis ? 'show' : 'hide'](showAxis);\n        }\n        if (axisTitle && showAxis) {\n            axisTitle[axisTitle.isNew ? 'attr' : 'animate'](axis.getTitlePosition(axisTitle));\n            axisTitle.isNew = false;\n        }\n        // Stacked totals:\n        if (stackLabelOptions && stackLabelOptions.enabled && axis.stacking) {\n            axis.stacking.renderStackTotals();\n        }\n        // End stacked totals\n        // Record old scaling for updating/animation. Pinch base must be\n        // preserved until the pinch ends.\n        axis.old = {\n            len: axis.len,\n            max: axis.max,\n            min: axis.min,\n            transA: axis.transA,\n            userMax: axis.userMax,\n            userMin: axis.userMin\n        };\n        axis.isDirty = false;\n        Axis_fireEvent(this, 'afterRender');\n    };\n    /**\n     * Redraw the axis to reflect changes in the data or axis extremes. Called\n     * internally from Highcharts.Chart#redraw.\n     *\n     * @private\n     * @function Highcharts.Axis#redraw\n     */\n    Axis.prototype.redraw = function () {\n        if (this.visible) {\n            // Render the axis\n            this.render();\n            // Move plot lines and bands\n            this.plotLinesAndBands.forEach(function (plotLine) {\n                plotLine.render();\n            });\n        }\n        // Mark associated series as dirty and ready for redraw\n        this.series.forEach(function (series) {\n            series.isDirty = true;\n        });\n    };\n    /**\n     * Returns an array of axis properties, that should be untouched during\n     * reinitialization.\n     *\n     * @private\n     * @function Highcharts.Axis#getKeepProps\n     */\n    Axis.prototype.getKeepProps = function () {\n        return (this.keepProps || Axis.keepProps);\n    };\n    /**\n     * Destroys an Axis instance. See {@link Axis#remove} for the API endpoint\n     * to fully remove the axis.\n     *\n     * @private\n     * @function Highcharts.Axis#destroy\n     *\n     * @param {boolean} [keepEvents]\n     * Whether to preserve events, used internally in Axis.update.\n     */\n    Axis.prototype.destroy = function (keepEvents) {\n        var axis = this,\n            plotLinesAndBands = axis.plotLinesAndBands,\n            eventOptions = this.eventOptions;\n        Axis_fireEvent(this, 'destroy', { keepEvents: keepEvents });\n        // Remove the events\n        if (!keepEvents) {\n            Axis_removeEvent(axis);\n        }\n        // Destroy collections\n        [axis.ticks, axis.minorTicks, axis.alternateBands].forEach(function (coll) {\n            Axis_destroyObjectProperties(coll);\n        });\n        if (plotLinesAndBands) {\n            var i = plotLinesAndBands.length;\n            while (i--) { // #1975\n                plotLinesAndBands[i].destroy();\n            }\n        }\n        // Destroy elements\n        [\n            'axisLine', 'axisTitle', 'axisGroup',\n            'gridGroup', 'labelGroup', 'cross', 'scrollbar'\n        ].forEach(function (prop) {\n            if (axis[prop]) {\n                axis[prop] = axis[prop].destroy();\n            }\n        });\n        // Destroy each generated group for plotlines and plotbands\n        for (var plotGroup in axis.plotLinesAndBandsGroups) { // eslint-disable-line guard-for-in\n            axis.plotLinesAndBandsGroups[plotGroup] =\n                axis.plotLinesAndBandsGroups[plotGroup].destroy();\n        }\n        // Delete all properties and fall back to the prototype.\n        Axis_objectEach(axis, function (val, key) {\n            if (axis.getKeepProps().indexOf(key) === -1) {\n                delete axis[key];\n            }\n        });\n        this.eventOptions = eventOptions;\n    };\n    /**\n     * Internal function to draw a crosshair.\n     *\n     * @function Highcharts.Axis#drawCrosshair\n     *\n     * @param {Highcharts.PointerEventObject} [e]\n     * The event arguments from the modified pointer event, extended with\n     * `chartX` and `chartY`\n     *\n     * @param {Highcharts.Point} [point]\n     * The Point object if the crosshair snaps to points.\n     *\n     * @emits Highcharts.Axis#event:afterDrawCrosshair\n     * @emits Highcharts.Axis#event:drawCrosshair\n     */\n    Axis.prototype.drawCrosshair = function (e, point) {\n        var options = this.crosshair,\n            snap = Axis_pick(options && options.snap,\n            true),\n            chart = this.chart;\n        var path,\n            pos,\n            categorized,\n            graphic = this.cross,\n            crossOptions;\n        Axis_fireEvent(this, 'drawCrosshair', { e: e, point: point });\n        // Use last available event when updating non-snapped crosshairs without\n        // mouse interaction (#5287)\n        if (!e) {\n            e = this.cross && this.cross.e;\n        }\n        if (\n        // Disabled in options\n        !options ||\n            // Snap\n            ((Axis_defined(point) || !snap) === false)) {\n            this.hideCrosshair();\n        }\n        else {\n            // Get the path\n            if (!snap) {\n                pos = e &&\n                    (this.horiz ?\n                        e.chartX - this.pos :\n                        this.len - e.chartY + this.pos);\n            }\n            else if (Axis_defined(point)) {\n                // #3834\n                pos = Axis_pick(this.coll !== 'colorAxis' ?\n                    point.crosshairPos : // 3D axis extension\n                    null, this.isXAxis ?\n                    point.plotX :\n                    this.len - point.plotY);\n            }\n            if (Axis_defined(pos)) {\n                crossOptions = {\n                    // Value, only used on radial\n                    value: point && (this.isXAxis ?\n                        point.x :\n                        Axis_pick(point.stackY, point.y)),\n                    translatedValue: pos\n                };\n                if (chart.polar) {\n                    // Additional information required for crosshairs in\n                    // polar chart\n                    Axis_extend(crossOptions, {\n                        isCrosshair: true,\n                        chartX: e && e.chartX,\n                        chartY: e && e.chartY,\n                        point: point\n                    });\n                }\n                path = this.getPlotLinePath(crossOptions) ||\n                    null; // #3189\n            }\n            if (!Axis_defined(path)) {\n                this.hideCrosshair();\n                return;\n            }\n            categorized = this.categories && !this.isRadial;\n            // Draw the cross\n            if (!graphic) {\n                this.cross = graphic = chart.renderer\n                    .path()\n                    .addClass('highcharts-crosshair highcharts-crosshair-' +\n                    (categorized ? 'category ' : 'thin ') +\n                    (options.className || ''))\n                    .attr({\n                    zIndex: Axis_pick(options.zIndex, 2)\n                })\n                    .add();\n                // Presentational attributes\n                if (!chart.styledMode) {\n                    graphic.attr({\n                        stroke: options.color ||\n                            (categorized ?\n                                Color_Color\n                                    .parse(\"#ccd3ff\" /* Palette.highlightColor20 */)\n                                    .setOpacity(0.25)\n                                    .get() :\n                                \"#cccccc\" /* Palette.neutralColor20 */),\n                        'stroke-width': Axis_pick(options.width, 1)\n                    }).css({\n                        'pointer-events': 'none'\n                    });\n                    if (options.dashStyle) {\n                        graphic.attr({\n                            dashstyle: options.dashStyle\n                        });\n                    }\n                }\n            }\n            graphic.show().attr({\n                d: path\n            });\n            if (categorized && !options.width) {\n                graphic.attr({\n                    'stroke-width': this.transA\n                });\n            }\n            this.cross.e = e;\n        }\n        Axis_fireEvent(this, 'afterDrawCrosshair', { e: e, point: point });\n    };\n    /**\n     * Hide the crosshair if visible.\n     *\n     * @function Highcharts.Axis#hideCrosshair\n     */\n    Axis.prototype.hideCrosshair = function () {\n        if (this.cross) {\n            this.cross.hide();\n        }\n        Axis_fireEvent(this, 'afterHideCrosshair');\n    };\n    /**\n     * Update an axis object with a new set of options. The options are merged\n     * with the existing options, so only new or altered options need to be\n     * specified.\n     *\n     * @sample highcharts/members/axis-update/\n     *         Axis update demo\n     *\n     * @function Highcharts.Axis#update\n     *\n     * @param {Highcharts.AxisOptions} options\n     * The new options that will be merged in with existing options on the axis.\n     *\n     * @param {boolean} [redraw=true]\n     * Whether to redraw the chart after the axis is altered. If doing more\n     * operations on the chart, it is a good idea to set redraw to false and\n     * call {@link Chart#redraw} after.\n     */\n    Axis.prototype.update = function (options, redraw) {\n        var chart = this.chart;\n        options = Axis_merge(this.userOptions, options);\n        this.destroy(true);\n        this.init(chart, options);\n        chart.isDirtyBox = true;\n        if (Axis_pick(redraw, true)) {\n            chart.redraw();\n        }\n    };\n    /**\n     * Remove the axis from the chart.\n     *\n     * @sample highcharts/members/chart-addaxis/\n     *         Add and remove axes\n     *\n     * @function Highcharts.Axis#remove\n     *\n     * @param {boolean} [redraw=true]\n     * Whether to redraw the chart following the remove.\n     */\n    Axis.prototype.remove = function (redraw) {\n        var chart = this.chart,\n            coll = this.coll,\n            axisSeries = this.series;\n        var i = axisSeries.length;\n        // Remove associated series (#2687)\n        while (i--) {\n            if (axisSeries[i]) {\n                axisSeries[i].remove(false);\n            }\n        }\n        // Remove the axis\n        Axis_erase(chart.axes, this);\n        Axis_erase(chart[coll] || [], this);\n        chart.orderItems(coll);\n        this.destroy();\n        chart.isDirtyBox = true;\n        if (Axis_pick(redraw, true)) {\n            chart.redraw();\n        }\n    };\n    /**\n     * Update the axis title by options after render time.\n     *\n     * @sample highcharts/members/axis-settitle/\n     *         Set a new Y axis title\n     *\n     * @function Highcharts.Axis#setTitle\n     *\n     * @param {Highcharts.AxisTitleOptions} titleOptions\n     * The additional title options.\n     *\n     * @param {boolean} [redraw=true]\n     * Whether to redraw the chart after setting the title.\n     */\n    Axis.prototype.setTitle = function (titleOptions, redraw) {\n        this.update({ title: titleOptions }, redraw);\n    };\n    /**\n     * Set new axis categories and optionally redraw.\n     *\n     * @sample highcharts/members/axis-setcategories/\n     *         Set categories by click on a button\n     *\n     * @function Highcharts.Axis#setCategories\n     *\n     * @param {Array<string>} categories\n     * The new categories.\n     *\n     * @param {boolean} [redraw=true]\n     * Whether to redraw the chart.\n     */\n    Axis.prototype.setCategories = function (categories, redraw) {\n        this.update({ categories: categories }, redraw);\n    };\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    // Properties to survive after destroy, needed for Axis.update (#4317,\n    // #5773, #5881).\n    Axis.keepProps = [\n        'coll',\n        'extKey',\n        'hcEvents',\n        'len',\n        'names',\n        'series',\n        'userMax',\n        'userMin'\n    ];\n    return Axis;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Axis_Axis = (Axis);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * Options for the path on the Axis to be calculated.\n * @interface Highcharts.AxisPlotLinePathOptionsObject\n */ /**\n* Axis value.\n* @name Highcharts.AxisPlotLinePathOptionsObject#value\n* @type {number|undefined}\n*/ /**\n* Line width used for calculation crisp line coordinates. Defaults to 1.\n* @name Highcharts.AxisPlotLinePathOptionsObject#lineWidth\n* @type {number|undefined}\n*/ /**\n* If `false`, the function will return null when it falls outside the axis\n* bounds. If `true`, the function will return a path aligned to the plot area\n* sides if it falls outside. If `pass`, it will return a path outside.\n* @name Highcharts.AxisPlotLinePathOptionsObject#force\n* @type {string|boolean|undefined}\n*/ /**\n* Used in Highcharts Stock. When `true`, plot paths\n* (crosshair, plotLines, gridLines)\n* will be rendered on all axes when defined on the first axis.\n* @name Highcharts.AxisPlotLinePathOptionsObject#acrossPanes\n* @type {boolean|undefined}\n*/ /**\n* Use old coordinates (for resizing and rescaling).\n* If not set, defaults to `false`.\n* @name Highcharts.AxisPlotLinePathOptionsObject#old\n* @type {boolean|undefined}\n*/ /**\n* If given, return the plot line path of a pixel position on the axis.\n* @name Highcharts.AxisPlotLinePathOptionsObject#translatedValue\n* @type {number|undefined}\n*/ /**\n* Used in Polar axes. Reverse the positions for concatenation of polygonal\n* plot bands\n* @name Highcharts.AxisPlotLinePathOptionsObject#reverse\n* @type {boolean|undefined}\n*/\n/**\n * Options for crosshairs on axes.\n *\n * @product highstock\n *\n * @typedef {Highcharts.XAxisCrosshairOptions|Highcharts.YAxisCrosshairOptions} Highcharts.AxisCrosshairOptions\n */\n/**\n * @typedef {\"navigator\"|\"pan\"|\"rangeSelectorButton\"|\"rangeSelectorInput\"|\"scrollbar\"|\"traverseUpButton\"|\"zoom\"} Highcharts.AxisExtremesTriggerValue\n */\n/**\n * @callback Highcharts.AxisEventCallbackFunction\n *\n * @param {Highcharts.Axis} this\n */\n/**\n * @callback Highcharts.AxisLabelsFormatterCallbackFunction\n *\n * @param {Highcharts.AxisLabelsFormatterContextObject} this\n *\n * @param {Highcharts.AxisLabelsFormatterContextObject} ctx\n *\n * @return {string}\n */\n/**\n * @interface Highcharts.AxisLabelsFormatterContextObject\n */ /**\n* The axis item of the label\n* @name Highcharts.AxisLabelsFormatterContextObject#axis\n* @type {Highcharts.Axis}\n*/ /**\n* The chart instance.\n* @name Highcharts.AxisLabelsFormatterContextObject#chart\n* @type {Highcharts.Chart}\n*/ /**\n* Default formatting of date/time labels.\n* @name Highcharts.AxisLabelsFormatterContextObject#dateTimeLabelFormat\n* @type {string|undefined}\n*/ /**\n* Whether the label belongs to the first tick on the axis.\n* @name Highcharts.AxisLabelsFormatterContextObject#isFirst\n* @type {boolean}\n*/ /**\n* Whether the label belongs to the last tick on the axis.\n* @name Highcharts.AxisLabelsFormatterContextObject#isLast\n* @type {boolean}\n*/ /**\n* The position on the axis in terms of axis values. For category axes, a\n* zero-based index. For datetime axes, the JavaScript time in milliseconds\n* since 1970.\n* @name Highcharts.AxisLabelsFormatterContextObject#pos\n* @type {number}\n*/ /**\n* The preformatted text as the result of the default formatting. For example\n* dates will be formatted as strings, and numbers with language-specific comma\n* separators, thousands separators and numeric symbols like `k` or `M`.\n* @name Highcharts.AxisLabelsFormatterContextObject#text\n* @type {string|undefined}\n*/ /**\n* The Tick instance.\n* @name Highcharts.AxisLabelsFormatterContextObject#tick\n* @type {Highcharts.Tick}\n*/ /**\n* This can be either a numeric value or a category string.\n* @name Highcharts.AxisLabelsFormatterContextObject#value\n* @type {number|string}\n*/\n/**\n * Options for axes.\n *\n * @typedef {Highcharts.XAxisOptions|Highcharts.YAxisOptions|Highcharts.ZAxisOptions} Highcharts.AxisOptions\n */\n/**\n * @callback Highcharts.AxisPointBreakEventCallbackFunction\n *\n * @param {Highcharts.Axis} this\n *\n * @param {Highcharts.AxisPointBreakEventObject} evt\n */\n/**\n * @interface Highcharts.AxisPointBreakEventObject\n */ /**\n* @name Highcharts.AxisPointBreakEventObject#brk\n* @type {Highcharts.Dictionary<number>}\n*/ /**\n* @name Highcharts.AxisPointBreakEventObject#point\n* @type {Highcharts.Point}\n*/ /**\n* @name Highcharts.AxisPointBreakEventObject#preventDefault\n* @type {Function}\n*/ /**\n* @name Highcharts.AxisPointBreakEventObject#target\n* @type {Highcharts.SVGElement}\n*/ /**\n* @name Highcharts.AxisPointBreakEventObject#type\n* @type {\"pointBreak\"|\"pointInBreak\"}\n*/\n/**\n * @callback Highcharts.AxisSetExtremesEventCallbackFunction\n *\n * @param {Highcharts.Axis} this\n *\n * @param {Highcharts.AxisSetExtremesEventObject} evt\n */\n/**\n * @interface Highcharts.AxisSetExtremesEventObject\n * @extends Highcharts.ExtremesObject\n */ /**\n* @name Highcharts.AxisSetExtremesEventObject#preventDefault\n* @type {Function}\n*/ /**\n* @name Highcharts.AxisSetExtremesEventObject#target\n* @type {Highcharts.SVGElement}\n*/ /**\n* @name Highcharts.AxisSetExtremesEventObject#trigger\n* @type {Highcharts.AxisExtremesTriggerValue|string}\n*/ /**\n* @name Highcharts.AxisSetExtremesEventObject#type\n* @type {\"setExtremes\"}\n*/\n/**\n * @callback Highcharts.AxisTickPositionerCallbackFunction\n *\n * @param {Highcharts.Axis} this\n *\n * @return {Highcharts.AxisTickPositionsArray}\n */\n/**\n * @interface Highcharts.AxisTickPositionsArray\n * @augments Array<number>\n */\n/**\n * @typedef {\"high\"|\"low\"|\"middle\"} Highcharts.AxisTitleAlignValue\n */\n/**\n * @typedef {Highcharts.XAxisTitleOptions|Highcharts.YAxisTitleOptions|Highcharts.ZAxisTitleOptions} Highcharts.AxisTitleOptions\n */\n/**\n * @typedef {\"linear\"|\"logarithmic\"|\"datetime\"|\"category\"|\"treegrid\"} Highcharts.AxisTypeValue\n */\n/**\n * The returned object literal from the {@link Highcharts.Axis#getExtremes}\n * function.\n *\n * @interface Highcharts.ExtremesObject\n */ /**\n* The maximum value of the axis' associated series.\n* @name Highcharts.ExtremesObject#dataMax\n* @type {number}\n*/ /**\n* The minimum value of the axis' associated series.\n* @name Highcharts.ExtremesObject#dataMin\n* @type {number}\n*/ /**\n* The maximum axis value, either automatic or set manually. If the `max` option\n* is not set, `maxPadding` is 0 and `endOnTick` is false, this value will be\n* the same as `dataMax`.\n* @name Highcharts.ExtremesObject#max\n* @type {number}\n*/ /**\n* The minimum axis value, either automatic or set manually. If the `min` option\n* is not set, `minPadding` is 0 and `startOnTick` is false, this value will be\n* the same as `dataMin`.\n* @name Highcharts.ExtremesObject#min\n* @type {number}\n*/ /**\n* The user defined maximum, either from the `max` option or from a zoom or\n* `setExtremes` action.\n* @name Highcharts.ExtremesObject#userMax\n* @type {number|undefined}\n*/ /**\n* The user defined minimum, either from the `min` option or from a zoom or\n* `setExtremes` action.\n* @name Highcharts.ExtremesObject#userMin\n* @type {number|undefined}\n*/\n/**\n * Formatter function for the text of a crosshair label.\n *\n * @callback Highcharts.XAxisCrosshairLabelFormatterCallbackFunction\n *\n * @param {Highcharts.Axis} this\n * Axis context\n *\n * @param {number} value\n * Y value of the data point\n *\n * @return {string}\n */\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Axis/DateTimeAxis.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar DateTimeAxis_addEvent = Core_Utilities.addEvent, DateTimeAxis_getMagnitude = Core_Utilities.getMagnitude, DateTimeAxis_normalizeTickInterval = Core_Utilities.normalizeTickInterval, DateTimeAxis_timeUnits = Core_Utilities.timeUnits;\n/* *\n *\n *  Composition\n *\n * */\n/* eslint-disable valid-jsdoc */\nvar DateTimeAxis;\n(function (DateTimeAxis) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Extends axis class with date and time support.\n     * @private\n     */\n    function compose(AxisClass) {\n        if (!AxisClass.keepProps.includes('dateTime')) {\n            AxisClass.keepProps.push('dateTime');\n            var axisProto = AxisClass.prototype;\n            axisProto.getTimeTicks = getTimeTicks;\n            DateTimeAxis_addEvent(AxisClass, 'afterSetType', onAfterSetType);\n        }\n        return AxisClass;\n    }\n    DateTimeAxis.compose = compose;\n    /**\n     * Set the tick positions to a time unit that makes sense, for example\n     * on the first of each month or on every Monday. Return an array with\n     * the time positions. Used in datetime axes as well as for grouping\n     * data on a datetime axis.\n     *\n     * @private\n     * @function Highcharts.Axis#getTimeTicks\n     * @param {Highcharts.TimeNormalizeObject} normalizedInterval\n     * The interval in axis values (ms) and the count.\n     * @param {number} min\n     * The minimum in axis values.\n     * @param {number} max\n     * The maximum in axis values.\n     */\n    function getTimeTicks() {\n        return this.chart.time.getTimeTicks.apply(this.chart.time, arguments);\n    }\n    /**\n     * @private\n     */\n    function onAfterSetType() {\n        if (this.type !== 'datetime') {\n            this.dateTime = void 0;\n            return;\n        }\n        if (!this.dateTime) {\n            this.dateTime = new Additions(this);\n        }\n    }\n    /* *\n     *\n     *  Classes\n     *\n     * */\n    var Additions = /** @class */ (function () {\n            /* *\n             *\n             *  Constructors\n             *\n             * */\n            function Additions(axis) {\n                this.axis = axis;\n        }\n        /* *\n         *\n         *  Functions\n         *\n         * */\n        /**\n         * Get a normalized tick interval for dates. Returns a configuration\n         * object with unit range (interval), count and name. Used to prepare\n         * data for `getTimeTicks`. Previously this logic was part of\n         * getTimeTicks, but as `getTimeTicks` now runs of segments in stock\n         * charts, the normalizing logic was extracted in order to prevent it\n         * for running over again for each segment having the same interval.\n         * #662, #697.\n         * @private\n         */\n        Additions.prototype.normalizeTimeTickInterval = function (tickInterval, unitsOption) {\n            var units = (unitsOption || [[\n                        // Unit name\n                        'millisecond',\n                        // Allowed multiples\n                        [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]\n                    ],\n                [\n                        'second',\n                        [1, 2, 5, 10, 15, 30]\n                    ],\n                [\n                        'minute',\n                        [1, 2, 5, 10, 15, 30]\n                    ],\n                [\n                        'hour',\n                        [1, 2, 3, 4, 6, 8, 12]\n                    ],\n                [\n                        'day',\n                        [1, 2]\n                    ],\n                [\n                        'week',\n                        [1, 2]\n                    ],\n                [\n                        'month',\n                        [1, 2, 3, 4, 6]\n                    ],\n                [\n                        'year',\n                        null\n                    ]]);\n            var unit = units[units.length - 1], // Default unit is years\n                interval = DateTimeAxis_timeUnits[unit[0]],\n                multiples = unit[1],\n                i;\n            // Loop through the units to find the one that best fits the\n            // tickInterval\n            for (i = 0; i < units.length; i++) {\n                unit = units[i];\n                interval = DateTimeAxis_timeUnits[unit[0]];\n                multiples = unit[1];\n                if (units[i + 1]) {\n                    // `lessThan` is in the middle between the highest multiple\n                    // and the next unit.\n                    var lessThan = (interval *\n                            multiples[multiples.length - 1] +\n                            DateTimeAxis_timeUnits[units[i + 1][0]]) / 2;\n                    // Break and keep the current unit\n                    if (tickInterval <= lessThan) {\n                        break;\n                    }\n                }\n            }\n            // Prevent 2.5 years intervals, though 25, 250 etc. are allowed\n            if (interval === DateTimeAxis_timeUnits.year && tickInterval < 5 * interval) {\n                multiples = [1, 2, 5];\n            }\n            // Get the count\n            var count = DateTimeAxis_normalizeTickInterval(tickInterval / interval, multiples, unit[0] === 'year' ? // #1913, #2360\n                    Math.max(DateTimeAxis_getMagnitude(tickInterval / interval), 1) :\n                    1);\n            return {\n                unitRange: interval,\n                count: count,\n                unitName: unit[0]\n            };\n        };\n        /**\n         * Get the best date format for a specific X value based on the closest\n         * point range on the axis.\n         *\n         * @private\n         */\n        Additions.prototype.getXDateFormat = function (x, dateTimeLabelFormats) {\n            var axis = this.axis,\n                time = axis.chart.time;\n            return axis.closestPointRange ?\n                time.getDateFormat(axis.closestPointRange, x, axis.options.startOfWeek, dateTimeLabelFormats) ||\n                    // #2546, 2581\n                    time.resolveDTLFormat(dateTimeLabelFormats.year).main :\n                time.resolveDTLFormat(dateTimeLabelFormats.day).main;\n        };\n        return Additions;\n    }());\n    DateTimeAxis.Additions = Additions;\n})(DateTimeAxis || (DateTimeAxis = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Axis_DateTimeAxis = (DateTimeAxis);\n\n;// ./code/es5/es-modules/Core/Axis/LogarithmicAxis.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar LogarithmicAxis_addEvent = Core_Utilities.addEvent, LogarithmicAxis_normalizeTickInterval = Core_Utilities.normalizeTickInterval, LogarithmicAxis_pick = Core_Utilities.pick;\n/* *\n *\n *  Class\n *\n * */\n/**\n * @private\n */\nvar LogarithmicAxis;\n(function (LogarithmicAxis) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Provides logarithmic support for axes.\n     * @private\n     */\n    function compose(AxisClass) {\n        if (!AxisClass.keepProps.includes('logarithmic')) {\n            AxisClass.keepProps.push('logarithmic');\n            LogarithmicAxis_addEvent(AxisClass, 'afterSetType', onAfterSetType);\n            LogarithmicAxis_addEvent(AxisClass, 'afterInit', onAfterInit);\n        }\n        return AxisClass;\n    }\n    LogarithmicAxis.compose = compose;\n    /**\n     * @private\n     */\n    function onAfterSetType() {\n        var _a;\n        if (this.type !== 'logarithmic') {\n            this.logarithmic = void 0;\n        }\n        else {\n            (_a = this.logarithmic) !== null && _a !== void 0 ? _a : (this.logarithmic = new Additions(this));\n        }\n    }\n    /**\n     * @private\n     */\n    function onAfterInit() {\n        var axis = this;\n        var log = axis.logarithmic;\n        // Extend logarithmic axis\n        if (log) {\n            axis.lin2val = function (num) {\n                return log.lin2log(num);\n            };\n            axis.val2lin = function (num) {\n                return log.log2lin(num);\n            };\n        }\n    }\n    /* *\n     *\n     *  Class\n     *\n     * */\n    /**\n     * Provides logarithmic support for axes.\n     * @private\n     * @class\n     */\n    var Additions = /** @class */ (function () {\n            /* *\n            *\n            *  Constructors\n            *\n            * */\n            function Additions(axis) {\n                this.axis = axis;\n        }\n        /* *\n        *\n        *  Functions\n        *\n        * */\n        /**\n         * Set the tick positions of a logarithmic axis.\n         */\n        Additions.prototype.getLogTickPositions = function (interval, min, max, minor) {\n            var log = this;\n            var axis = log.axis;\n            var axisLength = axis.len;\n            var options = axis.options;\n            // Since we use this method for both major and minor ticks,\n            // use a local variable and return the result\n            var positions = [];\n            // Reset\n            if (!minor) {\n                log.minorAutoInterval = void 0;\n            }\n            // First case: All ticks fall on whole logarithms: 1, 10, 100 etc.\n            if (interval >= 0.5) {\n                interval = Math.round(interval);\n                positions = axis.getLinearTickPositions(interval, min, max);\n                // Second case: We need intermediary ticks. For example\n                // 1, 2, 4, 6, 8, 10, 20, 40 etc.\n            }\n            else if (interval >= 0.08) {\n                var roundedMin = Math.floor(min);\n                var intermediate = void 0,\n                    i = void 0,\n                    j = void 0,\n                    len = void 0,\n                    pos = void 0,\n                    lastPos = void 0,\n                    break2 = void 0;\n                if (interval > 0.3) {\n                    intermediate = [1, 2, 4];\n                    // 0.2 equals five minor ticks per 1, 10, 100 etc\n                }\n                else if (interval > 0.15) {\n                    intermediate = [1, 2, 4, 6, 8];\n                }\n                else { // 0.1 equals ten minor ticks per 1, 10, 100 etc\n                    intermediate = [1, 2, 3, 4, 5, 6, 7, 8, 9];\n                }\n                for (i = roundedMin; i < max + 1 && !break2; i++) {\n                    len = intermediate.length;\n                    for (j = 0; j < len && !break2; j++) {\n                        pos = log.log2lin(log.lin2log(i) * intermediate[j]);\n                        // #1670, lastPos is #3113\n                        if (pos > min &&\n                            (!minor || lastPos <= max) &&\n                            typeof lastPos !== 'undefined') {\n                            positions.push(lastPos);\n                        }\n                        if (lastPos > max) {\n                            break2 = true;\n                        }\n                        lastPos = pos;\n                    }\n                }\n                // Third case: We are so deep in between whole logarithmic values,\n                // that we might as well handle the tick positions like a linear\n                // axis. For example 1.01, 1.02, 1.03, 1.04.\n            }\n            else {\n                var realMin = log.lin2log(min),\n                    realMax = log.lin2log(max),\n                    tickIntervalOption = minor ?\n                        axis.getMinorTickInterval() :\n                        options.tickInterval,\n                    filteredTickIntervalOption = tickIntervalOption === 'auto' ?\n                        null :\n                        tickIntervalOption,\n                    tickPixelIntervalOption = options.tickPixelInterval / (minor ? 5 : 1),\n                    totalPixelLength = minor ?\n                        axisLength / axis.tickPositions.length :\n                        axisLength;\n                interval = LogarithmicAxis_pick(filteredTickIntervalOption, log.minorAutoInterval, (realMax - realMin) *\n                    tickPixelIntervalOption / (totalPixelLength || 1));\n                interval = LogarithmicAxis_normalizeTickInterval(interval);\n                positions = axis.getLinearTickPositions(interval, realMin, realMax).map(log.log2lin);\n                if (!minor) {\n                    log.minorAutoInterval = interval / 5;\n                }\n            }\n            // Set the axis-level tickInterval variable\n            if (!minor) {\n                axis.tickInterval = interval;\n            }\n            return positions;\n        };\n        Additions.prototype.lin2log = function (num) {\n            return Math.pow(10, num);\n        };\n        Additions.prototype.log2lin = function (num) {\n            return Math.log(num) / Math.LN10;\n        };\n        return Additions;\n    }());\n    LogarithmicAxis.Additions = Additions;\n})(LogarithmicAxis || (LogarithmicAxis = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Axis_LogarithmicAxis = (LogarithmicAxis);\n\n;// ./code/es5/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar PlotLineOrBandAxis_erase = Core_Utilities.erase, PlotLineOrBandAxis_extend = Core_Utilities.extend, PlotLineOrBandAxis_isNumber = Core_Utilities.isNumber;\n/* *\n *\n *  Composition\n *\n * */\nvar PlotLineOrBandAxis;\n(function (PlotLineOrBandAxis) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Variables\n     *\n     * */\n    var PlotLineOrBandClass;\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Add a plot band after render time.\n     *\n     * @sample highcharts/members/axis-addplotband/\n     *         Toggle the plot band from a button\n     *\n     * @function Highcharts.Axis#addPlotBand\n     *\n     * @param {Highcharts.AxisPlotBandsOptions} options\n     * A configuration object for the plot band, as defined in\n     * [xAxis.plotBands](https://api.highcharts.com/highcharts/xAxis.plotBands).\n     *\n     * @return {Highcharts.PlotLineOrBand|undefined}\n     * The added plot band, or `undefined` if the options are not valid.\n     */\n    function addPlotBand(options) {\n        return this.addPlotBandOrLine(options, 'plotBands');\n    }\n    /**\n     * Add a plot band or plot line after render time. Called from\n     * addPlotBand and addPlotLine internally.\n     *\n     * @private\n     * @function Highcharts.Axis#addPlotBandOrLine\n     * @param {Highcharts.AxisPlotBandsOptions|Highcharts.AxisPlotLinesOptions} options\n     * The plotBand or plotLine configuration object.\n     */\n    function addPlotBandOrLine(options, coll) {\n        var _this = this;\n        var userOptions = this.userOptions;\n        var obj = new PlotLineOrBandClass(this,\n            options);\n        if (this.visible) {\n            obj = obj.render();\n        }\n        if (obj) { // #2189\n            if (!this._addedPlotLB) {\n                this._addedPlotLB = true;\n                (userOptions.plotLines || [])\n                    .concat(userOptions.plotBands || [])\n                    .forEach(function (plotLineOptions) {\n                    _this.addPlotBandOrLine(plotLineOptions);\n                });\n            }\n            // Add it to the user options for exporting and Axis.update\n            if (coll) {\n                // Workaround Microsoft/TypeScript issue #32693\n                var updatedOptions = (userOptions[coll] || []);\n                updatedOptions.push(options);\n                userOptions[coll] = updatedOptions;\n            }\n            this.plotLinesAndBands.push(obj);\n        }\n        return obj;\n    }\n    /**\n     * Add a plot line after render time.\n     *\n     * @sample highcharts/members/axis-addplotline/\n     *         Toggle the plot line from a button\n     *\n     * @function Highcharts.Axis#addPlotLine\n     *\n     * @param {Highcharts.AxisPlotLinesOptions} options\n     * A configuration object for the plot line, as defined in\n     * [xAxis.plotLines](https://api.highcharts.com/highcharts/xAxis.plotLines).\n     *\n     * @return {Highcharts.PlotLineOrBand|undefined}\n     * The added plot line, or `undefined` if the options are not valid.\n     */\n    function addPlotLine(options) {\n        return this.addPlotBandOrLine(options, 'plotLines');\n    }\n    /**\n     * @private\n     */\n    function compose(PlotLineOrBandType, AxisClass) {\n        var axisProto = AxisClass.prototype;\n        if (!axisProto.addPlotBand) {\n            PlotLineOrBandClass = PlotLineOrBandType;\n            PlotLineOrBandAxis_extend(axisProto, {\n                addPlotBand: addPlotBand,\n                addPlotLine: addPlotLine,\n                addPlotBandOrLine: addPlotBandOrLine,\n                getPlotBandPath: getPlotBandPath,\n                removePlotBand: removePlotBand,\n                removePlotLine: removePlotLine,\n                removePlotBandOrLine: removePlotBandOrLine\n            });\n        }\n        return AxisClass;\n    }\n    PlotLineOrBandAxis.compose = compose;\n    /**\n     * Internal function to create the SVG path definition for a plot band.\n     *\n     * @function Highcharts.Axis#getPlotBandPath\n     *\n     * @param {number} from\n     * The axis value to start from.\n     *\n     * @param {number} to\n     * The axis value to end on.\n     *\n     * @param {Highcharts.AxisPlotBandsOptions|Highcharts.AxisPlotLinesOptions} options\n     * The plotBand or plotLine configuration object.\n     *\n     * @return {Highcharts.SVGPathArray}\n     * The SVG path definition in array form.\n     */\n    function getPlotBandPath(from, to, options) {\n        options = options || this.options;\n        var toPath = this.getPlotLinePath({\n                value: to,\n                force: true,\n                acrossPanes: options.acrossPanes\n            }),\n            result = [],\n            horiz = this.horiz,\n            outside = !PlotLineOrBandAxis_isNumber(this.min) ||\n                !PlotLineOrBandAxis_isNumber(this.max) ||\n                (from < this.min && to < this.min) ||\n                (from > this.max && to > this.max),\n            path = this.getPlotLinePath({\n                value: from,\n                force: true,\n                acrossPanes: options.acrossPanes\n            });\n        var i, \n            // #4964 check if chart is inverted or plotband is on yAxis\n            plus = 1,\n            isFlat;\n        if (path && toPath) {\n            // Flat paths don't need labels (#3836)\n            if (outside) {\n                isFlat = path.toString() === toPath.toString();\n                plus = 0;\n            }\n            // Go over each subpath - for panes in Highcharts Stock\n            for (i = 0; i < path.length; i += 2) {\n                var pathStart = path[i],\n                    pathEnd = path[i + 1],\n                    toPathStart = toPath[i],\n                    toPathEnd = toPath[i + 1];\n                // Type checking all affected path segments. Consider\n                // something smarter.\n                if ((pathStart[0] === 'M' || pathStart[0] === 'L') &&\n                    (pathEnd[0] === 'M' || pathEnd[0] === 'L') &&\n                    (toPathStart[0] === 'M' || toPathStart[0] === 'L') &&\n                    (toPathEnd[0] === 'M' || toPathEnd[0] === 'L')) {\n                    // Add 1 pixel when coordinates are the same\n                    if (horiz && toPathStart[1] === pathStart[1]) {\n                        toPathStart[1] += plus;\n                        toPathEnd[1] += plus;\n                    }\n                    else if (!horiz && toPathStart[2] === pathStart[2]) {\n                        toPathStart[2] += plus;\n                        toPathEnd[2] += plus;\n                    }\n                    result.push(['M', pathStart[1], pathStart[2]], ['L', pathEnd[1], pathEnd[2]], ['L', toPathEnd[1], toPathEnd[2]], ['L', toPathStart[1], toPathStart[2]], ['Z']);\n                }\n                result.isFlat = isFlat;\n            }\n        }\n        return result;\n    }\n    /**\n     * Remove a plot band by its id.\n     *\n     * @sample highcharts/members/axis-removeplotband/\n     *         Remove plot band by id\n     * @sample highcharts/members/axis-addplotband/\n     *         Toggle the plot band from a button\n     *\n     * @function Highcharts.Axis#removePlotBand\n     *\n     * @param {string} id\n     *        The plot band's `id` as given in the original configuration\n     *        object or in the `addPlotBand` option.\n     */\n    function removePlotBand(id) {\n        this.removePlotBandOrLine(id);\n    }\n    /**\n     * Remove a plot band or plot line from the chart by id. Called\n     * internally from `removePlotBand` and `removePlotLine`.\n     * @private\n     * @function Highcharts.Axis#removePlotBandOrLine\n     */\n    function removePlotBandOrLine(id) {\n        var plotLinesAndBands = this.plotLinesAndBands,\n            options = this.options,\n            userOptions = this.userOptions;\n        if (plotLinesAndBands) { // #15639\n            var i_1 = plotLinesAndBands.length;\n            while (i_1--) {\n                if (plotLinesAndBands[i_1].id === id) {\n                    plotLinesAndBands[i_1].destroy();\n                }\n            }\n            ([\n                options.plotLines || [],\n                userOptions.plotLines || [],\n                options.plotBands || [],\n                userOptions.plotBands || []\n            ]).forEach(function (arr) {\n                i_1 = arr.length;\n                while (i_1--) {\n                    if ((arr[i_1] || {}).id === id) {\n                        PlotLineOrBandAxis_erase(arr, arr[i_1]);\n                    }\n                }\n            });\n        }\n    }\n    /**\n     * Remove a plot line by its id.\n     *\n     * @sample highcharts/xaxis/plotlines-id/\n     *         Remove plot line by id\n     * @sample highcharts/members/axis-addplotline/\n     *         Toggle the plot line from a button\n     *\n     * @function Highcharts.Axis#removePlotLine\n     *\n     * @param {string} id\n     *        The plot line's `id` as given in the original configuration\n     *        object or in the `addPlotLine` option.\n     */\n    function removePlotLine(id) {\n        this.removePlotBandOrLine(id);\n    }\n})(PlotLineOrBandAxis || (PlotLineOrBandAxis = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var PlotLineOrBand_PlotLineOrBandAxis = (PlotLineOrBandAxis);\n\n;// ./code/es5/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBand.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar PlotLineOrBand_assign = (undefined && undefined.__assign) || function () {\n    PlotLineOrBand_assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return PlotLineOrBand_assign.apply(this, arguments);\n};\n\n\nvar PlotLineOrBand_addEvent = Core_Utilities.addEvent, PlotLineOrBand_arrayMax = Core_Utilities.arrayMax, PlotLineOrBand_arrayMin = Core_Utilities.arrayMin, PlotLineOrBand_defined = Core_Utilities.defined, PlotLineOrBand_destroyObjectProperties = Core_Utilities.destroyObjectProperties, PlotLineOrBand_erase = Core_Utilities.erase, PlotLineOrBand_fireEvent = Core_Utilities.fireEvent, PlotLineOrBand_merge = Core_Utilities.merge, PlotLineOrBand_objectEach = Core_Utilities.objectEach, PlotLineOrBand_pick = Core_Utilities.pick;\n/* *\n *\n *  Class\n *\n * */\n/**\n * The object wrapper for plot lines and plot bands\n *\n * @class\n * @name Highcharts.PlotLineOrBand\n *\n * @param {Highcharts.Axis} axis\n * Related axis.\n *\n * @param {Highcharts.AxisPlotLinesOptions|Highcharts.AxisPlotBandsOptions} [options]\n * Options to use.\n */\nvar PlotLineOrBand = /** @class */ (function () {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    function PlotLineOrBand(axis, options) {\n        /**\n         * Related axis.\n         *\n         * @name Highcharts.PlotLineOrBand#axis\n         * @type {Highcharts.Axis}\n         */\n        this.axis = axis;\n        /**\n         * Options of the plot line or band.\n         *\n         * @name Highcharts.PlotLineOrBand#options\n         * @type {AxisPlotBandsOptions|AxisPlotLinesOptions}\n         */\n        this.options = options;\n        this.id = options.id;\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    PlotLineOrBand.compose = function (ChartClass, AxisClass) {\n        PlotLineOrBand_addEvent(ChartClass, 'afterInit', function () {\n            var _this = this;\n            this.labelCollectors.push(function () {\n                var _a;\n                var labels = [];\n                for (var _i = 0, _b = _this.axes; _i < _b.length; _i++) {\n                    var axis = _b[_i];\n                    for (var _c = 0, _d = axis.plotLinesAndBands; _c < _d.length; _c++) {\n                        var _e = _d[_c],\n                            label = _e.label,\n                            options = _e.options;\n                        if (label && !((_a = options === null || options === void 0 ? void 0 : options.label) === null || _a === void 0 ? void 0 : _a.allowOverlap)) {\n                            labels.push(label);\n                        }\n                    }\n                }\n                return labels;\n            });\n        });\n        return PlotLineOrBand_PlotLineOrBandAxis.compose(PlotLineOrBand, AxisClass);\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable no-invalid-this, valid-jsdoc */\n    /**\n     * Render the plot line or plot band. If it is already existing,\n     * move it.\n     * @private\n     * @function Highcharts.PlotLineOrBand#render\n     */\n    PlotLineOrBand.prototype.render = function () {\n        var _this = this;\n        var _a,\n            _b,\n            _c;\n        PlotLineOrBand_fireEvent(this, 'render');\n        var _d = this,\n            axis = _d.axis,\n            options = _d.options,\n            horiz = axis.horiz,\n            logarithmic = axis.logarithmic,\n            color = options.color,\n            events = options.events,\n            _e = options.zIndex,\n            zIndex = _e === void 0 ? 0 : _e,\n            _f = axis.chart,\n            renderer = _f.renderer,\n            time = _f.time,\n            groupAttribs = {}, \n            // These properties only exist on either band or line\n            to = time.parse(options.to),\n            from = time.parse(options.from),\n            value = time.parse(options.value),\n            borderWidth = options.borderWidth;\n        var optionsLabel = options.label,\n            _g = this,\n            label = _g.label,\n            svgElem = _g.svgElem,\n            path = [],\n            group;\n        var isBand = PlotLineOrBand_defined(from) && PlotLineOrBand_defined(to),\n            isLine = PlotLineOrBand_defined(value),\n            isNew = !svgElem,\n            attribs = {\n                'class': 'highcharts-plot-' + (isBand ? 'band ' : 'line ') +\n                    (options.className || '')\n            };\n        var groupName = isBand ? 'bands' : 'lines';\n        // Set the presentational attributes\n        if (!axis.chart.styledMode) {\n            if (isLine) {\n                attribs.stroke = color || \"#999999\" /* Palette.neutralColor40 */;\n                attribs['stroke-width'] = PlotLineOrBand_pick(options.width, 1);\n                if (options.dashStyle) {\n                    attribs.dashstyle = options.dashStyle;\n                }\n            }\n            else if (isBand) { // Plot band\n                attribs.fill = color || \"#e6e9ff\" /* Palette.highlightColor10 */;\n                if (borderWidth) {\n                    attribs.stroke = options.borderColor;\n                    attribs['stroke-width'] = borderWidth;\n                }\n            }\n        }\n        // Grouping and zIndex\n        groupAttribs.zIndex = zIndex;\n        groupName += '-' + zIndex;\n        group = axis.plotLinesAndBandsGroups[groupName];\n        if (!group) {\n            axis.plotLinesAndBandsGroups[groupName] = group =\n                renderer.g('plot-' + groupName)\n                    .attr(groupAttribs).add();\n        }\n        // Create the path\n        if (!svgElem) {\n            /**\n             * SVG element of the plot line or band.\n             *\n             * @name Highcharts.PlotLineOrBand#svgElem\n             * @type {Highcharts.SVGElement}\n             */\n            this.svgElem = svgElem = renderer\n                .path()\n                .attr(attribs)\n                .add(group);\n        }\n        // Set the path or return\n        if (PlotLineOrBand_defined(value)) { // Plot line\n            path = axis.getPlotLinePath({\n                value: (_a = logarithmic === null || logarithmic === void 0 ? void 0 : logarithmic.log2lin(value)) !== null && _a !== void 0 ? _a : value,\n                lineWidth: svgElem.strokeWidth(),\n                acrossPanes: options.acrossPanes\n            });\n        }\n        else if (PlotLineOrBand_defined(from) && PlotLineOrBand_defined(to)) { // Plot band\n            path = axis.getPlotBandPath((_b = logarithmic === null || logarithmic === void 0 ? void 0 : logarithmic.log2lin(from)) !== null && _b !== void 0 ? _b : from, (_c = logarithmic === null || logarithmic === void 0 ? void 0 : logarithmic.log2lin(to)) !== null && _c !== void 0 ? _c : to, options);\n        }\n        else {\n            return;\n        }\n        // Common for lines and bands. Add events only if they were not added\n        // before.\n        if (!this.eventsAdded && events) {\n            PlotLineOrBand_objectEach(events, function (event, eventType) {\n                svgElem === null || svgElem === void 0 ? void 0 : svgElem.on(eventType, function (e) {\n                    events[eventType].apply(_this, [e]);\n                });\n            });\n            this.eventsAdded = true;\n        }\n        if ((isNew || !svgElem.d) && (path === null || path === void 0 ? void 0 : path.length)) {\n            svgElem.attr({ d: path });\n        }\n        else if (svgElem) {\n            if (path) {\n                svgElem.show();\n                svgElem.animate({ d: path });\n            }\n            else if (svgElem.d) {\n                svgElem.hide();\n                if (label) {\n                    this.label = label = label.destroy();\n                }\n            }\n        }\n        // The plot band/line label\n        if (optionsLabel &&\n            (PlotLineOrBand_defined(optionsLabel.text) || PlotLineOrBand_defined(optionsLabel.formatter)) &&\n            (path === null || path === void 0 ? void 0 : path.length) &&\n            axis.width > 0 &&\n            axis.height > 0 &&\n            !path.isFlat) {\n            // Apply defaults\n            optionsLabel = PlotLineOrBand_merge(PlotLineOrBand_assign({ align: horiz && isBand ? 'center' : void 0, x: horiz ? !isBand && 4 : 10, verticalAlign: !horiz && isBand ? 'middle' : void 0, y: horiz ? isBand ? 16 : 10 : isBand ? 6 : -4, rotation: horiz && !isBand ? 90 : 0 }, (isBand ? { inside: true } : {})), optionsLabel);\n            this.renderLabel(optionsLabel, path, isBand, zIndex);\n            // Move out of sight\n        }\n        else if (label) {\n            label.hide();\n        }\n        // Chainable\n        return this;\n    };\n    /**\n     * Render and align label for plot line or band.\n     * @private\n     * @function Highcharts.PlotLineOrBand#renderLabel\n     */\n    PlotLineOrBand.prototype.renderLabel = function (optionsLabel, path, isBand, zIndex) {\n        var _a;\n        var plotLine = this,\n            axis = plotLine.axis,\n            renderer = axis.chart.renderer,\n            inside = optionsLabel.inside;\n        var label = plotLine.label;\n        // Add the SVG element\n        if (!label) {\n            /**\n             * SVG element of the label.\n             *\n             * @name Highcharts.PlotLineOrBand#label\n             * @type {Highcharts.SVGElement}\n             */\n            plotLine.label = label = renderer\n                .text(this.getLabelText(optionsLabel), 0, 0, optionsLabel.useHTML)\n                .attr({\n                align: optionsLabel.textAlign || optionsLabel.align,\n                rotation: optionsLabel.rotation,\n                'class': 'highcharts-plot-' + (isBand ? 'band' : 'line') +\n                    '-label ' + (optionsLabel.className || ''),\n                zIndex: zIndex\n            });\n            if (!axis.chart.styledMode) {\n                label.css(PlotLineOrBand_merge({\n                    fontSize: '0.8em',\n                    textOverflow: (isBand && !inside) ? '' : 'ellipsis'\n                }, optionsLabel.style));\n            }\n            label.add();\n        }\n        // Get the bounding box and align the label\n        // #3000 changed to better handle choice between plotband or plotline\n        var xBounds = path.xBounds ||\n                [path[0][1],\n            path[1][1], (isBand ? path[2][1] : path[0][1])],\n            yBounds = path.yBounds ||\n                [path[0][2],\n            path[1][2], (isBand ? path[2][2] : path[0][2])],\n            x = PlotLineOrBand_arrayMin(xBounds),\n            y = PlotLineOrBand_arrayMin(yBounds),\n            bBoxWidth = PlotLineOrBand_arrayMax(xBounds) - x;\n        label.align(optionsLabel, false, {\n            x: x,\n            y: y,\n            width: bBoxWidth,\n            height: PlotLineOrBand_arrayMax(yBounds) - y\n        });\n        if (!label.alignValue ||\n            label.alignValue === 'left' ||\n            PlotLineOrBand_defined(inside)) {\n            label.css({\n                width: (((_a = optionsLabel.style) === null || _a === void 0 ? void 0 : _a.width) || ((!isBand ||\n                    !inside) ? (label.rotation === 90 ?\n                    axis.height - (label.alignAttr.y -\n                        axis.top) : (optionsLabel.clip ?\n                    axis.width :\n                    axis.chart.chartWidth) - (label.alignAttr.x - axis.left)) :\n                    bBoxWidth)) + 'px'\n            });\n        }\n        label.show(true);\n    };\n    /**\n     * Get label's text content.\n     * @private\n     * @function Highcharts.PlotLineOrBand#getLabelText\n     */\n    PlotLineOrBand.prototype.getLabelText = function (optionsLabel) {\n        return PlotLineOrBand_defined(optionsLabel.formatter) ?\n            optionsLabel.formatter\n                .call(this) :\n            optionsLabel.text;\n    };\n    /**\n     * Remove the plot line or band.\n     *\n     * @function Highcharts.PlotLineOrBand#destroy\n     */\n    PlotLineOrBand.prototype.destroy = function () {\n        // Remove it from the lookup\n        PlotLineOrBand_erase(this.axis.plotLinesAndBands, this);\n        delete this.axis;\n        PlotLineOrBand_destroyObjectProperties(this);\n    };\n    return PlotLineOrBand;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var PlotLineOrBand_PlotLineOrBand = (PlotLineOrBand);\n/* *\n *\n *  API Options\n *\n * */\n/**\n * Options for plot bands on axes.\n *\n * @typedef {Highcharts.XAxisPlotBandsOptions|Highcharts.YAxisPlotBandsOptions|Highcharts.ZAxisPlotBandsOptions} Highcharts.AxisPlotBandsOptions\n */\n/**\n * Options for plot band labels on axes.\n *\n * @typedef {Highcharts.XAxisPlotBandsLabelOptions|Highcharts.YAxisPlotBandsLabelOptions|Highcharts.ZAxisPlotBandsLabelOptions} Highcharts.AxisPlotBandsLabelOptions\n */\n/**\n * Options for plot lines on axes.\n *\n * @typedef {Highcharts.XAxisPlotLinesOptions|Highcharts.YAxisPlotLinesOptions|Highcharts.ZAxisPlotLinesOptions} Highcharts.AxisPlotLinesOptions\n */\n/**\n * Options for plot line labels on axes.\n *\n * @typedef {Highcharts.XAxisPlotLinesLabelOptions|Highcharts.YAxisPlotLinesLabelOptions|Highcharts.ZAxisPlotLinesLabelOptions} Highcharts.AxisPlotLinesLabelOptions\n */\n('');\n/* *\n *\n *  API Options\n *\n * */\n/**\n * An array of colored bands stretching across the plot area marking an\n * interval on the axis.\n *\n * In styled mode, the plot bands are styled by the `.highcharts-plot-band`\n * class in addition to the `className` option.\n *\n * @productdesc {highcharts}\n * In a gauge, a plot band on the Y axis (value axis) will stretch along the\n * perimeter of the gauge.\n *\n * @type      {Array<*>}\n * @product   highcharts highstock gantt\n * @apioption xAxis.plotBands\n */\n/**\n * Flag to decide if plotBand should be rendered across all panes.\n *\n * @since     7.1.2\n * @product   highstock\n * @type      {boolean}\n * @default   true\n * @apioption xAxis.plotBands.acrossPanes\n */\n/**\n * Border color for the plot band. Also requires `borderWidth` to be set.\n *\n * @type      {Highcharts.ColorString}\n * @apioption xAxis.plotBands.borderColor\n */\n/**\n * Border radius for the plot band. Applies only to gauges. Can be a pixel\n * value or a percentage, for example `50%`.\n *\n * @type      {number|string}\n * @since 11.4.2\n * @sample    {highcharts} highcharts/xaxis/plotbands-gauge-borderradius\n *            Angular gauge with rounded plot bands\n * @apioption xAxis.plotBands.borderRadius\n */\n/**\n * Border width for the plot band. Also requires `borderColor` to be set.\n *\n * @type      {number}\n * @default   0\n * @apioption xAxis.plotBands.borderWidth\n */\n/**\n * A custom class name, in addition to the default `highcharts-plot-band`,\n * to apply to each individual band.\n *\n * @type      {string}\n * @since     5.0.0\n * @apioption xAxis.plotBands.className\n */\n/**\n * The color of the plot band.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-color/\n *         Color band\n * @sample {highstock} stock/xaxis/plotbands/\n *         Plot band on Y axis\n *\n * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @default   ${palette.highlightColor10}\n * @apioption xAxis.plotBands.color\n */\n/**\n * An object defining mouse events for the plot band. Supported properties\n * are `click`, `mouseover`, `mouseout`, `mousemove`.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-events/\n *         Mouse events demonstrated\n *\n * @since     1.2\n * @apioption xAxis.plotBands.events\n */\n/**\n * Click event on a plot band.\n *\n * @type      {Highcharts.EventCallbackFunction<Highcharts.PlotLineOrBand>}\n * @apioption xAxis.plotBands.events.click\n */\n/**\n * Mouse move event on a plot band.\n *\n * @type      {Highcharts.EventCallbackFunction<Highcharts.PlotLineOrBand>}\n * @apioption xAxis.plotBands.events.mousemove\n */\n/**\n * Mouse out event on the corner of a plot band.\n *\n * @type      {Highcharts.EventCallbackFunction<Highcharts.PlotLineOrBand>}\n * @apioption xAxis.plotBands.events.mouseout\n */\n/**\n * Mouse over event on a plot band.\n *\n * @type      {Highcharts.EventCallbackFunction<Highcharts.PlotLineOrBand>}\n * @apioption xAxis.plotBands.events.mouseover\n */\n/**\n * The start position of the plot band in axis units.\n *\n * On datetime axes, the value can be given as a timestamp or a date string.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-color/\n *         Datetime axis\n * @sample {highcharts} highcharts/xaxis/plotbands-from/\n *         Categorized axis\n * @sample {highstock} stock/xaxis/plotbands/\n *         Plot band on Y axis\n *\n * @type      {number|string}\n * @apioption xAxis.plotBands.from\n */\n/**\n * An id used for identifying the plot band in Axis.removePlotBand.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-id/\n *         Remove plot band by id\n * @sample {highstock} highcharts/xaxis/plotbands-id/\n *         Remove plot band by id\n *\n * @type      {string}\n * @apioption xAxis.plotBands.id\n */\n/**\n * The end position of the plot band in axis units.\n *\n * On datetime axes, the value can be given as a timestamp or a date string.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-color/\n *         Datetime axis\n * @sample {highcharts} highcharts/xaxis/plotbands-from/\n *         Categorized axis\n * @sample {highstock} stock/xaxis/plotbands/\n *         Plot band on Y axis\n *\n * @type      {number|string}\n * @apioption xAxis.plotBands.to\n */\n/**\n * The z index of the plot band within the chart, relative to other\n * elements. Using the same z index as another element may give\n * unpredictable results, as the last rendered element will be on top.\n * Values from 0 to 20 make sense.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-color/\n *         Behind plot lines by default\n * @sample {highcharts} highcharts/xaxis/plotbands-zindex/\n *         Above plot lines\n * @sample {highcharts} highcharts/xaxis/plotbands-zindex-above-series/\n *         Above plot lines and series\n *\n * @type      {number}\n * @since     1.2\n * @apioption xAxis.plotBands.zIndex\n */\n/**\n * Text labels for the plot bands\n *\n * @product   highcharts highstock gantt\n * @apioption xAxis.plotBands.label\n */\n/**\n * Horizontal alignment of the label. Can be one of \"left\", \"center\" or\n * \"right\".\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-align/\n *         Aligned to the right\n * @sample {highstock} stock/xaxis/plotbands-label/\n *         Plot band with labels\n *\n * @type      {Highcharts.AlignValue}\n * @default   center\n * @since     2.1\n * @apioption xAxis.plotBands.label.align\n */\n/**\n * Whether or not the label can be hidden if it overlaps with another label.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-allowoverlap/\n *         A Plotband label overlapping another\n *\n * @type      {boolean}\n * @default   undefined\n * @since     11.4.8\n * @apioption xAxis.plotBands.label.allowOverlap\n */\n/**\n * Wether or not the text of the label can exceed the width of the label.\n *\n * @type      {boolean}\n * @product   highcharts highstock gantt\n * @sample {highcharts} highcharts/xaxis/plotbands-label-textwidth/\n *         Displaying text with text-wrapping/ellipsis, or the full text.\n *\n * @default   true\n * @since     11.4.6\n * @apioption xAxis.plotBands.label.inside\n */\n/**\n * Rotation of the text label in degrees .\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-rotation/\n *         Vertical text\n *\n * @type      {number}\n * @default   0\n * @since     2.1\n * @apioption xAxis.plotBands.label.rotation\n */\n/**\n * CSS styles for the text label.\n *\n * In styled mode, the labels are styled by the\n * `.highcharts-plot-band-label` class.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-style/\n *         Blue and bold label\n *\n * @type      {Highcharts.CSSObject}\n * @since     2.1\n * @apioption xAxis.plotBands.label.style\n */\n/**\n * The string text itself. A subset of HTML is supported.\n *\n * @type      {string}\n * @since     2.1\n * @apioption xAxis.plotBands.label.text\n */\n/**\n * The text alignment for the label. While `align` determines where the\n * texts anchor point is placed within the plot band, `textAlign` determines\n * how the text is aligned against its anchor point. Possible values are\n * \"left\", \"center\" and \"right\". Defaults to the same as the `align` option.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-rotation/\n *         Vertical text in center position but text-aligned left\n *\n * @type       {Highcharts.AlignValue}\n * @since      2.1\n * @apioption  xAxis.plotBands.label.textAlign\n */\n/**\n * Whether to [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n * to render the labels.\n *\n * @type      {boolean}\n * @default   false\n * @since     3.0.3\n * @apioption xAxis.plotBands.label.useHTML\n */\n/**\n * Vertical alignment of the label relative to the plot band. Can be one of\n * \"top\", \"middle\" or \"bottom\".\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-verticalalign/\n *         Vertically centered label\n * @sample {highstock} stock/xaxis/plotbands-label/\n *         Plot band with labels\n *\n * @type       {Highcharts.VerticalAlignValue}\n * @default    top\n * @since      2.1\n * @apioption  xAxis.plotBands.label.verticalAlign\n */\n/**\n * Horizontal position relative the alignment. Default varies by\n * orientation.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-align/\n *         Aligned 10px from the right edge\n * @sample {highstock} stock/xaxis/plotbands-label/\n *         Plot band with labels\n *\n * @type      {number}\n * @since     2.1\n * @apioption xAxis.plotBands.label.x\n */\n/**\n * Vertical position of the text baseline relative to the alignment. Default\n * varies by orientation.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-y/\n *         Label on x axis\n * @sample {highstock} stock/xaxis/plotbands-label/\n *         Plot band with labels\n *\n * @type      {number}\n * @since     2.1\n * @apioption xAxis.plotBands.label.y\n */\n/**\n * An array of lines stretching across the plot area, marking a specific\n * value on one of the axes.\n *\n * In styled mode, the plot lines are styled by the\n * `.highcharts-plot-line` class in addition to the `className` option.\n *\n * @type      {Array<*>}\n * @product   highcharts highstock gantt\n * @sample {highcharts} highcharts/xaxis/plotlines-color/\n *         Basic plot line\n * @sample {highcharts} highcharts/series-solidgauge/labels-auto-aligned/\n *         Solid gauge plot line\n * @apioption xAxis.plotLines\n */\n/**\n * Flag to decide if plotLine should be rendered across all panes.\n *\n * @sample {highstock} stock/xaxis/plotlines-acrosspanes/\n *         Plot lines on different panes\n *\n * @since     7.1.2\n * @product   highstock\n * @type      {boolean}\n * @default   true\n * @apioption xAxis.plotLines.acrossPanes\n */\n/**\n * A custom class name, in addition to the default `highcharts-plot-line`,\n * to apply to each individual line.\n *\n * @type      {string}\n * @since     5.0.0\n * @apioption xAxis.plotLines.className\n */\n/**\n * The color of the line.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-color/\n *         A red line from X axis\n * @sample {highstock} stock/xaxis/plotlines/\n *         Plot line on Y axis\n *\n * @type      {Highcharts.ColorString}\n * @default   ${palette.neutralColor40}\n * @apioption xAxis.plotLines.color\n */\n/**\n * The dashing or dot style for the plot line. For possible values see\n * [this overview](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/plotoptions/series-dashstyle-all/).\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-dashstyle/\n *         Dash and dot pattern\n * @sample {highstock} stock/xaxis/plotlines/\n *         Plot line on Y axis\n *\n * @type      {Highcharts.DashStyleValue}\n * @default   Solid\n * @since     1.2\n * @apioption xAxis.plotLines.dashStyle\n */\n/**\n * An object defining mouse events for the plot line. Supported\n * properties are `click`, `mouseover`, `mouseout`, `mousemove`.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-events/\n *         Mouse events demonstrated\n *\n * @since     1.2\n * @apioption xAxis.plotLines.events\n */\n/**\n * Click event on a plot band.\n *\n * @type      {Highcharts.EventCallbackFunction<Highcharts.PlotLineOrBand>}\n * @apioption xAxis.plotLines.events.click\n */\n/**\n * Mouse move event on a plot band.\n *\n * @type      {Highcharts.EventCallbackFunction<Highcharts.PlotLineOrBand>}\n * @apioption xAxis.plotLines.events.mousemove\n */\n/**\n * Mouse out event on the corner of a plot band.\n *\n * @type      {Highcharts.EventCallbackFunction<Highcharts.PlotLineOrBand>}\n * @apioption xAxis.plotLines.events.mouseout\n */\n/**\n * Mouse over event on a plot band.\n *\n * @type      {Highcharts.EventCallbackFunction<Highcharts.PlotLineOrBand>}\n * @apioption xAxis.plotLines.events.mouseover\n */\n/**\n * An id used for identifying the plot line in Axis.removePlotLine.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-id/\n *         Remove plot line by id\n *\n * @type      {string}\n * @apioption xAxis.plotLines.id\n */\n/**\n * The position of the line in axis units.\n *\n * On datetime axes, the value can be given as a timestamp or a date string.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-color/\n *         Between two categories on X axis\n * @sample {highstock} stock/xaxis/plotlines/\n *         Plot line on Y axis\n *\n * @type      {number|string}\n * @apioption xAxis.plotLines.value\n */\n/**\n * The width or thickness of the plot line.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-color/\n *         2px wide line from X axis\n * @sample {highstock} stock/xaxis/plotlines/\n *         Plot line on Y axis\n *\n * @type      {number}\n * @default   2\n * @apioption xAxis.plotLines.width\n */\n/**\n * The z index of the plot line within the chart.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-zindex-behind/\n *         Behind plot lines by default\n * @sample {highcharts} highcharts/xaxis/plotlines-zindex-above/\n *         Above plot lines\n * @sample {highcharts} highcharts/xaxis/plotlines-zindex-above-all/\n *         Above plot lines and series\n *\n * @type      {number}\n * @since     1.2\n * @apioption xAxis.plotLines.zIndex\n */\n/**\n * Text labels for the plot bands\n *\n * @apioption xAxis.plotLines.label\n */\n/**\n * Horizontal alignment of the label. Can be one of \"left\", \"center\" or\n * \"right\".\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-label-align-right/\n *         Aligned to the right\n * @sample {highstock} stock/xaxis/plotlines/\n *         Plot line on Y axis\n *\n * @type       {Highcharts.AlignValue}\n * @default    left\n * @since      2.1\n * @apioption  xAxis.plotLines.label.align\n */\n/**\n * Whether to hide labels that are outside the plot area.\n *\n * @type      {boolean}\n * @default   false\n * @since 10.3.3\n * @apioption xAxis.plotLines.labels.clip\n */\n/**\n * Callback JavaScript function to format the label. Useful properties like\n * the value of plot line or the range of plot band (`from` & `to`\n * properties) can be found in `this.options` object.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-plotbands-label-formatter\n *         Label formatters for plot line and plot band.\n * @type      {Highcharts.FormatterCallbackFunction<Highcharts.PlotLineOrBand>}\n * @apioption xAxis.plotLines.label.formatter\n */\n/**\n * Rotation of the text label in degrees. Defaults to 0 for horizontal plot\n * lines and 90 for vertical lines.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-label-verticalalign-middle/\n *         Slanted text\n *\n * @type      {number}\n * @since     2.1\n * @apioption xAxis.plotLines.label.rotation\n */\n/**\n * CSS styles for the text label.\n *\n * In styled mode, the labels are styled by the\n * `.highcharts-plot-line-label` class.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-label-style/\n *         Blue and bold label\n *\n * @type      {Highcharts.CSSObject}\n * @since     2.1\n * @apioption xAxis.plotLines.label.style\n */\n/**\n * The text itself. A subset of HTML is supported.\n *\n * @type      {string}\n * @since     2.1\n * @apioption xAxis.plotLines.label.text\n */\n/**\n * The text alignment for the label. While `align` determines where the\n * texts anchor point is placed within the plot band, `textAlign` determines\n * how the text is aligned against its anchor point. Possible values are\n * \"left\", \"center\" and \"right\". Defaults to the same as the `align` option.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-label-textalign/\n *         Text label in bottom position\n *\n * @type      {Highcharts.AlignValue}\n * @since     2.1\n * @apioption xAxis.plotLines.label.textAlign\n */\n/**\n * Whether to [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n * to render the labels.\n *\n * @type      {boolean}\n * @default   false\n * @since     3.0.3\n * @apioption xAxis.plotLines.label.useHTML\n */\n/**\n * Vertical alignment of the label relative to the plot line. Can be\n * one of \"top\", \"middle\" or \"bottom\".\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-label-verticalalign-middle/\n *         Vertically centered label\n *\n * @type       {Highcharts.VerticalAlignValue}\n * @default    {highcharts} top\n * @default    {highstock} top\n * @since      2.1\n * @apioption  xAxis.plotLines.label.verticalAlign\n */\n/**\n * Horizontal position relative the alignment. Default varies by\n * orientation.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-label-align-right/\n *         Aligned 10px from the right edge\n * @sample {highstock} stock/xaxis/plotlines/\n *         Plot line on Y axis\n *\n * @type      {number}\n * @since     2.1\n * @apioption xAxis.plotLines.label.x\n */\n/**\n * Vertical position of the text baseline relative to the alignment. Default\n * varies by orientation.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-label-y/\n *         Label below the plot line\n * @sample {highstock} stock/xaxis/plotlines/\n *         Plot line on Y axis\n *\n * @type      {number}\n * @since     2.1\n * @apioption xAxis.plotLines.label.y\n */\n/**\n * @type      {Array<*>}\n * @extends   xAxis.plotBands\n * @apioption yAxis.plotBands\n */\n/**\n * In a gauge chart, this option determines the inner radius of the\n * plot band that stretches along the perimeter. It can be given as\n * a percentage string, like `\"100%\"`, or as a pixel number, like `100`.\n * By default, the inner radius is controlled by the [thickness](\n * #yAxis.plotBands.thickness) option.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-gauge\n *         Gauge plot band\n *\n * @type      {number|string}\n * @since     2.3\n * @product   highcharts\n * @apioption yAxis.plotBands.innerRadius\n */\n/**\n * In a gauge chart, this option determines the outer radius of the\n * plot band that stretches along the perimeter. It can be given as\n * a percentage string, like `\"100%\"`, or as a pixel number, like `100`.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-gauge\n *         Gauge plot band\n *\n * @type      {number|string}\n * @default   100%\n * @since     2.3\n * @product   highcharts\n * @apioption yAxis.plotBands.outerRadius\n */\n/**\n * In a gauge chart, this option sets the width of the plot band\n * stretching along the perimeter. It can be given as a percentage\n * string, like `\"10%\"`, or as a pixel number, like `10`. The default\n * value 10 is the same as the default [tickLength](#yAxis.tickLength),\n * thus making the plot band act as a background for the tick markers.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-gauge\n *         Gauge plot band\n *\n * @type      {number|string}\n * @default   10\n * @since     2.3\n * @product   highcharts\n * @apioption yAxis.plotBands.thickness\n */\n/**\n * @type      {Array<*>}\n * @extends   xAxis.plotLines\n * @apioption yAxis.plotLines\n */\n(''); // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Tooltip.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar Tooltip_animObject = AnimationUtilities.animObject;\n\nvar Tooltip_format = Core_Templating.format;\n\nvar Tooltip_composed = Core_Globals.composed, dateFormats = Core_Globals.dateFormats, Tooltip_doc = Core_Globals.doc, isSafari = Core_Globals.isSafari;\n\nvar distribute = Renderer_RendererUtilities.distribute;\n\n\nvar Tooltip_addEvent = Core_Utilities.addEvent, Tooltip_clamp = Core_Utilities.clamp, Tooltip_css = Core_Utilities.css, Tooltip_discardElement = Core_Utilities.discardElement, Tooltip_extend = Core_Utilities.extend, Tooltip_fireEvent = Core_Utilities.fireEvent, Tooltip_isArray = Core_Utilities.isArray, Tooltip_isNumber = Core_Utilities.isNumber, Tooltip_isObject = Core_Utilities.isObject, Tooltip_isString = Core_Utilities.isString, Tooltip_merge = Core_Utilities.merge, Tooltip_pick = Core_Utilities.pick, Tooltip_pushUnique = Core_Utilities.pushUnique, Tooltip_splat = Core_Utilities.splat, Tooltip_syncTimeout = Core_Utilities.syncTimeout;\n/* *\n *\n *  Class\n *\n * */\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/**\n * Tooltip of a chart.\n *\n * @class\n * @name Highcharts.Tooltip\n *\n * @param {Highcharts.Chart} chart\n * The chart instance.\n *\n * @param {Highcharts.TooltipOptions} options\n * Tooltip options.\n *\n * @param {Highcharts.Pointer} pointer\n * The pointer instance.\n */\nvar Tooltip = /** @class */ (function () {\n    /* *\n     *\n     *  Constructors\n     *\n     * */\n    function Tooltip(chart, options, pointer) {\n        /* *\n         *\n         *  Properties\n         *\n         * */\n        this.allowShared = true;\n        this.crosshairs = [];\n        this.distance = 0;\n        this.isHidden = true;\n        this.isSticky = false;\n        this.options = {};\n        this.outside = false;\n        this.chart = chart;\n        this.init(chart, options);\n        this.pointer = pointer;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Build the body (lines) of the tooltip by iterating over the items and\n     * returning one entry for each item, abstracting this functionality allows\n     * to easily overwrite and extend it.\n     *\n     * @private\n     * @function Highcharts.Tooltip#bodyFormatter\n     */\n    Tooltip.prototype.bodyFormatter = function (points) {\n        return points.map(function (point) {\n            var tooltipOptions = point.series.tooltipOptions,\n                formatPrefix = point.formatPrefix || 'point';\n            return (tooltipOptions[formatPrefix + 'Formatter'] ||\n                point.tooltipFormatter).call(point, tooltipOptions[formatPrefix + 'Format'] || '');\n        });\n    };\n    /**\n     * Destroy the single tooltips in a split tooltip.\n     * If the tooltip is active then it is not destroyed, unless forced to.\n     *\n     * @private\n     * @function Highcharts.Tooltip#cleanSplit\n     *\n     * @param {boolean} [force]\n     * Force destroy all tooltips.\n     */\n    Tooltip.prototype.cleanSplit = function (force) {\n        this.chart.series.forEach(function (series) {\n            var tt = series && series.tt;\n            if (tt) {\n                if (!tt.isActive || force) {\n                    series.tt = tt.destroy();\n                }\n                else {\n                    tt.isActive = false;\n                }\n            }\n        });\n    };\n    /**\n     * In case no user defined formatter is given, this will be used. Note that\n     * the context here is an object holding point, series, x, y etc.\n     *\n     * @function Highcharts.Tooltip#defaultFormatter\n     *\n     * @param {Highcharts.Tooltip} tooltip\n     *\n     * @return {string|Array<string>}\n     * Returns a string (single tooltip and shared)\n     * or an array of strings (split tooltip)\n     */\n    Tooltip.prototype.defaultFormatter = function (tooltip) {\n        var hoverPoints = this.points || Tooltip_splat(this);\n        var s;\n        // Build the header\n        s = [tooltip.headerFooterFormatter(hoverPoints[0])];\n        // Build the values\n        s = s.concat(tooltip.bodyFormatter(hoverPoints));\n        // Footer\n        s.push(tooltip.headerFooterFormatter(hoverPoints[0], true));\n        return s;\n    };\n    /**\n     * Removes and destroys the tooltip and its elements.\n     *\n     * @function Highcharts.Tooltip#destroy\n     */\n    Tooltip.prototype.destroy = function () {\n        // Destroy and clear local variables\n        if (this.label) {\n            this.label = this.label.destroy();\n        }\n        if (this.split) {\n            this.cleanSplit(true);\n            if (this.tt) {\n                this.tt = this.tt.destroy();\n            }\n        }\n        if (this.renderer) {\n            this.renderer = this.renderer.destroy();\n            Tooltip_discardElement(this.container);\n        }\n        Core_Utilities.clearTimeout(this.hideTimer);\n    };\n    /**\n     * Extendable method to get the anchor position of the tooltip\n     * from a point or set of points\n     *\n     * @private\n     * @function Highcharts.Tooltip#getAnchor\n     */\n    Tooltip.prototype.getAnchor = function (points, mouseEvent) {\n        var _a = this,\n            chart = _a.chart,\n            pointer = _a.pointer,\n            inverted = chart.inverted,\n            plotTop = chart.plotTop,\n            plotLeft = chart.plotLeft;\n        var ret;\n        points = Tooltip_splat(points);\n        // If reversedStacks are false the tooltip position should be taken from\n        // the last point (#17948)\n        if (points[0].series &&\n            points[0].series.yAxis &&\n            !points[0].series.yAxis.options.reversedStacks) {\n            points = points.slice().reverse();\n        }\n        // When tooltip follows mouse, relate the position to the mouse\n        if (this.followPointer && mouseEvent) {\n            if (typeof mouseEvent.chartX === 'undefined') {\n                mouseEvent = pointer.normalize(mouseEvent);\n            }\n            ret = [\n                mouseEvent.chartX - plotLeft,\n                mouseEvent.chartY - plotTop\n            ];\n            // Some series types use a specificly calculated tooltip position for\n            // each point\n        }\n        else if (points[0].tooltipPos) {\n            ret = points[0].tooltipPos;\n            // Calculate the average position and adjust for axis positions\n        }\n        else {\n            var chartX_1 = 0,\n                chartY_1 = 0;\n            points.forEach(function (point) {\n                var pos = point.pos(true);\n                if (pos) {\n                    chartX_1 += pos[0];\n                    chartY_1 += pos[1];\n                }\n            });\n            chartX_1 /= points.length;\n            chartY_1 /= points.length;\n            // When shared, place the tooltip next to the mouse (#424)\n            if (this.shared && points.length > 1 && mouseEvent) {\n                if (inverted) {\n                    chartX_1 = mouseEvent.chartX;\n                }\n                else {\n                    chartY_1 = mouseEvent.chartY;\n                }\n            }\n            // Use the average position for multiple points\n            ret = [chartX_1 - plotLeft, chartY_1 - plotTop];\n        }\n        return ret.map(Math.round);\n    };\n    /**\n     * Get the CSS class names for the tooltip's label. Styles the label\n     * by `colorIndex` or user-defined CSS.\n     *\n     * @function Highcharts.Tooltip#getClassName\n     *\n     * @return {string}\n     *         The class names.\n     */\n    Tooltip.prototype.getClassName = function (point, isSplit, isHeader) {\n        var options = this.options,\n            series = point.series,\n            seriesOptions = series.options;\n        return [\n            options.className,\n            'highcharts-label',\n            isHeader && 'highcharts-tooltip-header',\n            isSplit ? 'highcharts-tooltip-box' : 'highcharts-tooltip',\n            !isHeader && 'highcharts-color-' + Tooltip_pick(point.colorIndex, series.colorIndex),\n            (seriesOptions && seriesOptions.className)\n        ].filter(Tooltip_isString).join(' ');\n    };\n    /**\n     * Creates the Tooltip label element if it does not exist, then returns it.\n     *\n     * @function Highcharts.Tooltip#getLabel\n     *\n     * @return {Highcharts.SVGElement}\n     * Tooltip label\n     */\n    Tooltip.prototype.getLabel = function (_a) {\n        var _b = _a === void 0 ? { anchorX: 0,\n            anchorY: 0 } : _a,\n            anchorX = _b.anchorX,\n            anchorY = _b.anchorY;\n        var tooltip = this,\n            styledMode = this.chart.styledMode,\n            options = this.options,\n            doSplit = this.split && this.allowShared;\n        var container = this.container,\n            renderer = this.chart.renderer;\n        // If changing from a split tooltip to a non-split tooltip, we must\n        // destroy it in order to get the SVG right. #13868.\n        if (this.label) {\n            var wasSplit = !this.label.hasClass('highcharts-label');\n            if ((!doSplit && wasSplit) || (doSplit && !wasSplit)) {\n                this.destroy();\n            }\n        }\n        if (!this.label) {\n            if (this.outside) {\n                var chart = this.chart,\n                    chartStyle = chart.options.chart.style,\n                    Renderer = Renderer_RendererRegistry.getRendererType();\n                /**\n                 * Reference to the tooltip's container, when\n                 * [Highcharts.Tooltip#outside] is set to true, otherwise\n                 * it's undefined.\n                 *\n                 * @name Highcharts.Tooltip#container\n                 * @type {Highcharts.HTMLDOMElement|undefined}\n                 */\n                this.container = container = Core_Globals.doc.createElement('div');\n                container.className = ('highcharts-tooltip-container ' +\n                    (chart.renderTo.className.match(/(highcharts[a-zA-Z0-9-]+)\\s?/gm) || [].join(' ')));\n                // We need to set pointerEvents = 'none' as otherwise it makes\n                // the area under the tooltip non-hoverable even after the\n                // tooltip disappears, #19035.\n                Tooltip_css(container, {\n                    position: 'absolute',\n                    top: '1px',\n                    pointerEvents: 'none',\n                    zIndex: Math.max(this.options.style.zIndex || 0, (chartStyle && chartStyle.zIndex || 0) + 3)\n                });\n                /**\n                 * Reference to the tooltip's renderer, when\n                 * [Highcharts.Tooltip#outside] is set to true, otherwise\n                 * it's undefined.\n                 *\n                 * @name Highcharts.Tooltip#renderer\n                 * @type {Highcharts.SVGRenderer|undefined}\n                 */\n                this.renderer = renderer = new Renderer(container, 0, 0, chartStyle, void 0, void 0, renderer.styledMode);\n            }\n            // Create the label\n            if (doSplit) {\n                this.label = renderer.g('tooltip');\n            }\n            else {\n                this.label = renderer\n                    .label('', anchorX, anchorY, options.shape, void 0, void 0, options.useHTML, void 0, 'tooltip')\n                    .attr({\n                    padding: options.padding,\n                    r: options.borderRadius\n                });\n                if (!styledMode) {\n                    this.label\n                        .attr({\n                        fill: options.backgroundColor,\n                        'stroke-width': options.borderWidth || 0\n                    })\n                        // #2301, #2657\n                        .css(options.style)\n                        .css({\n                        pointerEvents: (options.style.pointerEvents ||\n                            (this.shouldStickOnContact() ? 'auto' : 'none'))\n                    });\n                }\n            }\n            // Split tooltip use updateTooltipContainer to position the tooltip\n            // container.\n            if (tooltip.outside) {\n                var label_1 = this.label;\n                [label_1.xSetter, label_1.ySetter].forEach(function (setter, i) {\n                    label_1[i ? 'ySetter' : 'xSetter'] = function (value) {\n                        setter.call(label_1, tooltip.distance);\n                        label_1[i ? 'y' : 'x'] = value;\n                        if (container) {\n                            container.style[i ? 'top' : 'left'] = \"\" + value + \"px\";\n                        }\n                    };\n                });\n            }\n            this.label\n                .attr({ zIndex: 8 })\n                .shadow(options.shadow)\n                .add();\n        }\n        if (container && !container.parentElement) {\n            Core_Globals.doc.body.appendChild(container);\n        }\n        return this.label;\n    };\n    /**\n     * Get the total area available area to place the tooltip\n     *\n     * @private\n     */\n    Tooltip.prototype.getPlayingField = function () {\n        var body = Tooltip_doc.body,\n            documentElement = Tooltip_doc.documentElement,\n            _a = this,\n            chart = _a.chart,\n            distance = _a.distance,\n            outside = _a.outside;\n        return {\n            width: outside ?\n                // Subtract distance to prevent scrollbars\n                Math.max(body.scrollWidth, documentElement.scrollWidth, body.offsetWidth, documentElement.offsetWidth, documentElement.clientWidth) - (2 * distance) - 2 :\n                chart.chartWidth,\n            height: outside ?\n                Math.max(body.scrollHeight, documentElement.scrollHeight, body.offsetHeight, documentElement.offsetHeight, documentElement.clientHeight) :\n                chart.chartHeight\n        };\n    };\n    /**\n     * Place the tooltip in a chart without spilling over and not covering the\n     * point itself.\n     *\n     * @function Highcharts.Tooltip#getPosition\n     *\n     * @param {number} boxWidth\n     *        Width of the tooltip box.\n     *\n     * @param {number} boxHeight\n     *        Height of the tooltip box.\n     *\n     * @param {Highcharts.Point} point\n     *        Tooltip related point.\n     *\n     * @return {Highcharts.PositionObject}\n     *         Recommended position of the tooltip.\n     */\n    Tooltip.prototype.getPosition = function (boxWidth, boxHeight, point) {\n        var _a,\n            _b;\n        var _c = this, distance = _c.distance, chart = _c.chart, outside = _c.outside, pointer = _c.pointer, inverted = chart.inverted, plotLeft = chart.plotLeft, plotTop = chart.plotTop, polar = chart.polar, _d = point.plotX, plotX = _d === void 0 ? 0 : _d, _e = point.plotY, plotY = _e === void 0 ? 0 : _e, ret = {}, \n            // Don't use h if chart isn't inverted (#7242) ???\n            h = (inverted && point.h) || 0, // #4117 ???\n            _f = this.getPlayingField(), outerHeight = _f.height, outerWidth = _f.width, chartPosition = pointer.getChartPosition(), scaleX = function (val) { return (val * chartPosition.scaleX); }, scaleY = function (val) { return (val * chartPosition.scaleY); }, \n            // Build parameter arrays for firstDimension()/secondDimension()\n            buildDimensionArray = function (dim) {\n                var isX = dim === 'x';\n            return [\n                dim, // Dimension - x or y\n                isX ? outerWidth : outerHeight,\n                isX ? boxWidth : boxHeight\n            ].concat(outside ? [\n                // If we are using tooltip.outside, we need to scale the\n                // position to match scaling of the container in case there\n                // is a transform/zoom on the container. #11329\n                isX ? scaleX(boxWidth) : scaleY(boxHeight),\n                isX ? chartPosition.left - distance +\n                    scaleX(plotX + plotLeft) :\n                    chartPosition.top - distance +\n                        scaleY(plotY + plotTop),\n                0,\n                isX ? outerWidth : outerHeight\n            ] : [\n                // Not outside, no scaling is needed\n                isX ? boxWidth : boxHeight,\n                isX ? plotX + plotLeft : plotY + plotTop,\n                isX ? plotLeft : plotTop,\n                isX ? plotLeft + chart.plotWidth :\n                    plotTop + chart.plotHeight\n            ]);\n        };\n        var first = buildDimensionArray('y'), second = buildDimensionArray('x'), swapped;\n        // Handle negative points or reversed axis (#13780)\n        var flipped = !!point.negative;\n        if (!polar &&\n            ((_b = (_a = chart.hoverSeries) === null || _a === void 0 ? void 0 : _a.yAxis) === null || _b === void 0 ? void 0 : _b.reversed)) {\n            flipped = !flipped;\n        }\n        // The far side is right or bottom\n        var preferFarSide = !this.followPointer &&\n                Tooltip_pick(point.ttBelow,\n            polar ? false : !inverted === flipped), // #4984\n            /*\n             * Handle the preferred dimension. When the preferred dimension is\n             * tooltip on top or bottom of the point,\n            it will look for space\n             * there.\n             *\n             * @private\n             */\n            firstDimension = function (dim,\n            outerSize,\n            innerSize,\n            scaledInnerSize, // #11329\n            point,\n            min,\n            max) {\n                var scaledDist = outside ?\n                    (dim === 'y' ? scaleY(distance) : scaleX(distance)) :\n                    distance,\n            scaleDiff = (innerSize - scaledInnerSize) / 2,\n            roomLeft = scaledInnerSize < point - distance,\n            roomRight = point + distance + scaledInnerSize < outerSize,\n            alignedLeft = point - scaledDist - innerSize + scaleDiff,\n            alignedRight = point + scaledDist - scaleDiff;\n            if (preferFarSide && roomRight) {\n                ret[dim] = alignedRight;\n            }\n            else if (!preferFarSide && roomLeft) {\n                ret[dim] = alignedLeft;\n            }\n            else if (roomLeft) {\n                ret[dim] = Math.min(max - scaledInnerSize, alignedLeft - h < 0 ? alignedLeft : alignedLeft - h);\n            }\n            else if (roomRight) {\n                ret[dim] = Math.max(min, alignedRight + h + innerSize > outerSize ?\n                    alignedRight :\n                    alignedRight + h);\n            }\n            else {\n                return false;\n            }\n        }, \n        /*\n         * Handle the secondary dimension. If the preferred dimension is\n         * tooltip on top or bottom of the point, the second dimension is to\n         * align the tooltip above the point, trying to align center but\n         * allowing left or right align within the chart box.\n         *\n         * @private\n         */\n        secondDimension = function (dim, outerSize, innerSize, scaledInnerSize, // #11329\n        point) {\n            // Too close to the edge, return false and swap dimensions\n            if (point < distance || point > outerSize - distance) {\n                return false;\n            }\n            // Align left/top\n            if (point < innerSize / 2) {\n                ret[dim] = 1;\n                // Align right/bottom\n            }\n            else if (point > outerSize - scaledInnerSize / 2) {\n                ret[dim] = outerSize - scaledInnerSize - 2;\n                // Align center\n            }\n            else {\n                ret[dim] = point - innerSize / 2;\n            }\n        }, \n        /*\n         * Swap the dimensions\n         */\n        swap = function (count) {\n            var _a;\n            _a = [second, first], first = _a[0], second = _a[1];\n            swapped = count;\n        }, run = function () {\n            if (firstDimension.apply(0, first) !== false) {\n                if (secondDimension.apply(0, second) === false &&\n                    !swapped) {\n                    swap(true);\n                    run();\n                }\n            }\n            else if (!swapped) {\n                swap(true);\n                run();\n            }\n            else {\n                ret.x = ret.y = 0;\n            }\n        };\n        // Under these conditions, prefer the tooltip on the side of the point\n        if ((inverted && !polar) || this.len > 1) {\n            swap();\n        }\n        run();\n        return ret;\n    };\n    /**\n     * Hides the tooltip with a fade out animation.\n     *\n     * @function Highcharts.Tooltip#hide\n     *\n     * @param {number} [delay]\n     *        The fade out in milliseconds. If no value is provided the value\n     *        of the tooltip.hideDelay option is used. A value of 0 disables\n     *        the fade out animation.\n     */\n    Tooltip.prototype.hide = function (delay) {\n        var tooltip = this;\n        // Disallow duplicate timers (#1728, #1766)\n        Core_Utilities.clearTimeout(this.hideTimer);\n        delay = Tooltip_pick(delay, this.options.hideDelay);\n        if (!this.isHidden) {\n            this.hideTimer = Tooltip_syncTimeout(function () {\n                var label = tooltip.getLabel();\n                // If there is a delay, fade out with the default duration. If\n                // the hideDelay is 0, we assume no animation is wanted, so we\n                // pass 0 duration. #12994.\n                tooltip.getLabel().animate({\n                    opacity: 0\n                }, {\n                    duration: delay ? 150 : delay,\n                    complete: function () {\n                        // #3088, assuming we're only using this for tooltips\n                        label.hide();\n                        // Clear the container for outside tooltip (#18490)\n                        if (tooltip.container) {\n                            tooltip.container.remove();\n                        }\n                    }\n                });\n                tooltip.isHidden = true;\n            }, delay);\n        }\n    };\n    /**\n     * Initialize tooltip.\n     *\n     * @private\n     * @function Highcharts.Tooltip#init\n     *\n     * @param {Highcharts.Chart} chart\n     *        The chart instance.\n     *\n     * @param {Highcharts.TooltipOptions} options\n     *        Tooltip options.\n     */\n    Tooltip.prototype.init = function (chart, options) {\n        /**\n         * Chart of the tooltip.\n         *\n         * @readonly\n         * @name Highcharts.Tooltip#chart\n         * @type {Highcharts.Chart}\n         */\n        this.chart = chart;\n        /**\n         * Used tooltip options.\n         *\n         * @readonly\n         * @name Highcharts.Tooltip#options\n         * @type {Highcharts.TooltipOptions}\n         */\n        this.options = options;\n        /**\n         * List of crosshairs.\n         *\n         * @private\n         * @readonly\n         * @name Highcharts.Tooltip#crosshairs\n         * @type {Array<null>}\n         */\n        this.crosshairs = [];\n        /**\n         * Tooltips are initially hidden.\n         *\n         * @private\n         * @readonly\n         * @name Highcharts.Tooltip#isHidden\n         * @type {boolean}\n         */\n        this.isHidden = true;\n        /**\n         * True, if the tooltip is split into one label per series, with the\n         * header close to the axis.\n         *\n         * @readonly\n         * @name Highcharts.Tooltip#split\n         * @type {boolean|undefined}\n         */\n        this.split = options.split && !chart.inverted && !chart.polar;\n        /**\n         * When the tooltip is shared, the entire plot area will capture mouse\n         * movement or touch events.\n         *\n         * @readonly\n         * @name Highcharts.Tooltip#shared\n         * @type {boolean|undefined}\n         */\n        this.shared = options.shared || this.split;\n        /**\n         * Whether to allow the tooltip to render outside the chart's SVG\n         * element box. By default (false), the tooltip is rendered within the\n         * chart's SVG element, which results in the tooltip being aligned\n         * inside the chart area.\n         *\n         * @readonly\n         * @name Highcharts.Tooltip#outside\n         * @type {boolean}\n         *\n         * @todo\n         * Split tooltip does not support outside in the first iteration. Should\n         * not be too complicated to implement.\n         */\n        this.outside = Tooltip_pick(options.outside, Boolean(chart.scrollablePixelsX || chart.scrollablePixelsY));\n    };\n    Tooltip.prototype.shouldStickOnContact = function (pointerEvent) {\n        return !!(!this.followPointer &&\n            this.options.stickOnContact &&\n            (!pointerEvent || this.pointer.inClass(pointerEvent.target, 'highcharts-tooltip')));\n    };\n    /**\n     * Moves the tooltip with a soft animation to a new position.\n     *\n     * @private\n     * @function Highcharts.Tooltip#move\n     *\n     * @param {number} x\n     *\n     * @param {number} y\n     *\n     * @param {number} anchorX\n     *\n     * @param {number} anchorY\n     */\n    Tooltip.prototype.move = function (x, y, anchorX, anchorY) {\n        var tooltip = this,\n            animation = Tooltip_animObject(!tooltip.isHidden && tooltip.options.animation),\n            skipAnchor = tooltip.followPointer || (tooltip.len || 0) > 1,\n            attr = { x: x,\n            y: y };\n        if (!skipAnchor) {\n            attr.anchorX = anchorX;\n            attr.anchorY = anchorY;\n        }\n        animation.step = function () { return tooltip.drawTracker(); };\n        tooltip.getLabel().animate(attr, animation);\n    };\n    /**\n     * Refresh the tooltip's text and position.\n     *\n     * @function Highcharts.Tooltip#refresh\n     *\n     * @param {Highcharts.Point|Array<Highcharts.Point>} pointOrPoints\n     *        Either a point or an array of points.\n     *\n     * @param {Highcharts.PointerEventObject} [mouseEvent]\n     *        Mouse event, that is responsible for the refresh and should be\n     *        used for the tooltip update.\n     */\n    Tooltip.prototype.refresh = function (pointOrPoints, mouseEvent) {\n        var tooltip = this,\n            _a = this,\n            chart = _a.chart,\n            options = _a.options,\n            pointer = _a.pointer,\n            shared = _a.shared,\n            points = Tooltip_splat(pointOrPoints),\n            point = points[0],\n            formatString = options.format,\n            formatter = options.formatter || tooltip.defaultFormatter,\n            styledMode = chart.styledMode;\n        var wasShared = tooltip.allowShared;\n        if (!options.enabled || !point.series) { // #16820\n            return;\n        }\n        Core_Utilities.clearTimeout(this.hideTimer);\n        // A switch saying if this specific tooltip configuration allows shared\n        // or split modes\n        tooltip.allowShared = !(!Tooltip_isArray(pointOrPoints) &&\n            pointOrPoints.series &&\n            pointOrPoints.series.noSharedTooltip);\n        wasShared = wasShared && !tooltip.allowShared;\n        // Get the reference point coordinates (pie charts use tooltipPos)\n        tooltip.followPointer = (!tooltip.split && point.series.tooltipOptions.followPointer);\n        var anchor = tooltip.getAnchor(pointOrPoints,\n            mouseEvent),\n            x = anchor[0],\n            y = anchor[1];\n        // Shared tooltip, array is sent over\n        if (shared && tooltip.allowShared) {\n            pointer.applyInactiveState(points);\n            // Now set hover state for the chosen ones:\n            points.forEach(function (item) { return item.setState('hover'); });\n            point.points = points;\n        }\n        this.len = points.length; // #6128\n        var text = Tooltip_isString(formatString) ?\n                Tooltip_format(formatString,\n            point,\n            chart) :\n                formatter.call(point,\n            tooltip);\n        // Reset the preliminary circular references\n        point.points = void 0;\n        // Register the current series\n        var currentSeries = point.series;\n        this.distance = Tooltip_pick(currentSeries.tooltipOptions.distance, 16);\n        // Update the inner HTML\n        if (text === false) {\n            this.hide();\n        }\n        else {\n            // Update text\n            if (tooltip.split && tooltip.allowShared) { // #13868\n                this.renderSplit(text, points);\n            }\n            else {\n                var checkX_1 = x;\n                var checkY_1 = y;\n                if (mouseEvent && pointer.isDirectTouch) {\n                    checkX_1 = mouseEvent.chartX - chart.plotLeft;\n                    checkY_1 = mouseEvent.chartY - chart.plotTop;\n                }\n                // #11493, #13095\n                if (chart.polar ||\n                    currentSeries.options.clip === false ||\n                    points.some(function (p) {\n                        return pointer.isDirectTouch || // ##17929\n                            p.series.shouldShowTooltip(checkX_1, checkY_1);\n                    })) {\n                    var label = tooltip.getLabel(wasShared && tooltip.tt || {});\n                    // Prevent the tooltip from flowing over the chart box\n                    // (#6659)\n                    if (!options.style.width || styledMode) {\n                        label.css({\n                            width: (this.outside ?\n                                this.getPlayingField() :\n                                chart.spacingBox).width + 'px'\n                        });\n                    }\n                    label.attr({\n                        // Add class before the label BBox calculation (#21035)\n                        'class': tooltip.getClassName(point),\n                        text: text && text.join ?\n                            text.join('') :\n                            text\n                    });\n                    // When the length of the label has increased, immediately\n                    // update the x position to prevent tooltip from flowing\n                    // outside the viewport during animation (#21371)\n                    if (this.outside) {\n                        label.attr({\n                            x: Tooltip_clamp(label.x || 0, 0, this.getPlayingField().width -\n                                (label.width || 0) -\n                                1)\n                        });\n                    }\n                    if (!styledMode) {\n                        label.attr({\n                            stroke: (options.borderColor ||\n                                point.color ||\n                                currentSeries.color ||\n                                \"#666666\" /* Palette.neutralColor60 */)\n                        });\n                    }\n                    tooltip.updatePosition({\n                        plotX: x,\n                        plotY: y,\n                        negative: point.negative,\n                        ttBelow: point.ttBelow,\n                        h: anchor[2] || 0\n                    });\n                }\n                else {\n                    tooltip.hide();\n                    return;\n                }\n            }\n            // Show it\n            if (tooltip.isHidden && tooltip.label) {\n                tooltip.label.attr({\n                    opacity: 1\n                }).show();\n            }\n            tooltip.isHidden = false;\n        }\n        Tooltip_fireEvent(this, 'refresh');\n    };\n    /**\n     * Render the split tooltip. Loops over each point's text and adds\n     * a label next to the point, then uses the distribute function to\n     * find best non-overlapping positions.\n     *\n     * @private\n     * @function Highcharts.Tooltip#renderSplit\n     *\n     * @param {string|Array<(boolean|string)>} labels\n     *\n     * @param {Array<Highcharts.Point>} points\n     */\n    Tooltip.prototype.renderSplit = function (labels, points) {\n        var _a;\n        var tooltip = this;\n        var chart = tooltip.chart,\n            _b = tooltip.chart,\n            chartWidth = _b.chartWidth,\n            chartHeight = _b.chartHeight,\n            plotHeight = _b.plotHeight,\n            plotLeft = _b.plotLeft,\n            plotTop = _b.plotTop,\n            _c = _b.scrollablePixelsY,\n            scrollablePixelsY = _c === void 0 ? 0 : _c,\n            scrollablePixelsX = _b.scrollablePixelsX,\n            styledMode = _b.styledMode,\n            distance = tooltip.distance,\n            options = tooltip.options,\n            positioner = tooltip.options.positioner,\n            pointer = tooltip.pointer;\n        var _d = ((_a = chart.scrollablePlotArea) === null || _a === void 0 ? void 0 : _a.scrollingContainer) || {},\n            _e = _d.scrollLeft,\n            scrollLeft = _e === void 0 ? 0 : _e,\n            _f = _d.scrollTop,\n            scrollTop = _f === void 0 ? 0 : _f;\n        // The area which the tooltip should be limited to. Limit to scrollable\n        // plot area if enabled, otherwise limit to the chart container. If\n        // outside is true it should be the whole viewport\n        var bounds = (tooltip.outside &&\n                typeof scrollablePixelsX !== 'number') ?\n                Tooltip_doc.documentElement.getBoundingClientRect() : {\n                left: scrollLeft,\n                right: scrollLeft + chartWidth,\n                top: scrollTop,\n                bottom: scrollTop + chartHeight\n            };\n        var tooltipLabel = tooltip.getLabel();\n        var ren = this.renderer || chart.renderer;\n        var headerTop = Boolean(chart.xAxis[0] && chart.xAxis[0].opposite);\n        var _g = pointer.getChartPosition(),\n            chartLeft = _g.left,\n            chartTop = _g.top;\n        var distributionBoxTop = plotTop + scrollTop;\n        var headerHeight = 0;\n        var adjustedPlotHeight = plotHeight - scrollablePixelsY;\n        /**\n         * Calculates the anchor position for the partial tooltip\n         *\n         * @private\n         * @param {Highcharts.Point} point The point related to the tooltip\n         * @return {Object} Returns an object with anchorX and anchorY\n         */\n        function getAnchor(point) {\n            var isHeader = point.isHeader,\n                _a = point.plotX,\n                plotX = _a === void 0 ? 0 : _a,\n                _b = point.plotY,\n                plotY = _b === void 0 ? 0 : _b,\n                series = point.series;\n            var anchorX;\n            var anchorY;\n            if (isHeader) {\n                // Set anchorX to plotX\n                anchorX = Math.max(plotLeft + plotX, plotLeft);\n                // Set anchorY to center of visible plot area.\n                anchorY = plotTop + plotHeight / 2;\n            }\n            else {\n                var xAxis = series.xAxis,\n                    yAxis = series.yAxis;\n                // Set anchorX to plotX. Limit to within xAxis.\n                anchorX = xAxis.pos + Tooltip_clamp(plotX, -distance, xAxis.len + distance);\n                // Set anchorY, limit to the scrollable plot area\n                if (series.shouldShowTooltip(0, yAxis.pos - plotTop + plotY, {\n                    ignoreX: true\n                })) {\n                    anchorY = yAxis.pos + plotY;\n                }\n            }\n            // Limit values to plot area\n            anchorX = Tooltip_clamp(anchorX, bounds.left - distance, bounds.right + distance);\n            return { anchorX: anchorX, anchorY: anchorY };\n        }\n        /**\n         * Calculates the position of the partial tooltip\n         *\n         * @private\n         * @param {number} anchorX\n         * The partial tooltip anchor x position\n         *\n         * @param {number} anchorY\n         * The partial tooltip anchor y position\n         *\n         * @param {boolean|undefined} isHeader\n         * Whether the partial tooltip is a header\n         *\n         * @param {number} boxWidth\n         * Width of the partial tooltip\n         *\n         * @return {Highcharts.PositionObject}\n         * Returns the partial tooltip x and y position\n         */\n        function defaultPositioner(anchorX, anchorY, isHeader, boxWidth, alignedLeft) {\n            if (alignedLeft === void 0) { alignedLeft = true; }\n            var y;\n            var x;\n            if (isHeader) {\n                y = headerTop ? 0 : adjustedPlotHeight;\n                x = Tooltip_clamp(anchorX - (boxWidth / 2), bounds.left, bounds.right - boxWidth - (tooltip.outside ? chartLeft : 0));\n            }\n            else {\n                y = anchorY - distributionBoxTop;\n                x = alignedLeft ?\n                    anchorX - boxWidth - distance :\n                    anchorX + distance;\n                x = Tooltip_clamp(x, alignedLeft ? x : bounds.left, bounds.right);\n            }\n            // NOTE: y is relative to distributionBoxTop\n            return { x: x, y: y };\n        }\n        /**\n         * Updates the attributes and styling of the partial tooltip. Creates a\n         * new partial tooltip if it does not exists.\n         *\n         * @private\n         * @param {Highcharts.SVGElement|undefined} partialTooltip\n         *  The partial tooltip to update\n         * @param {Highcharts.Point} point\n         *  The point related to the partial tooltip\n         * @param {boolean|string} str The text for the partial tooltip\n         * @return {Highcharts.SVGElement} Returns the updated partial tooltip\n         */\n        function updatePartialTooltip(partialTooltip, point, str) {\n            var _a;\n            var tt = partialTooltip;\n            var isHeader = point.isHeader,\n                series = point.series;\n            if (!tt) {\n                var attribs = {\n                        padding: options.padding,\n                        r: options.borderRadius\n                    };\n                if (!styledMode) {\n                    attribs.fill = options.backgroundColor;\n                    attribs['stroke-width'] = (_a = options.borderWidth) !== null && _a !== void 0 ? _a : 1;\n                }\n                tt = ren\n                    .label('', 0, 0, (options[isHeader ? 'headerShape' : 'shape']), void 0, void 0, options.useHTML)\n                    .addClass(tooltip.getClassName(point, true, isHeader))\n                    .attr(attribs)\n                    .add(tooltipLabel);\n            }\n            tt.isActive = true;\n            tt.attr({\n                text: str\n            });\n            if (!styledMode) {\n                tt.css(options.style)\n                    .attr({\n                    stroke: (options.borderColor ||\n                        point.color ||\n                        series.color ||\n                        \"#333333\" /* Palette.neutralColor80 */)\n                });\n            }\n            return tt;\n        }\n        // Graceful degradation for legacy formatters\n        if (Tooltip_isString(labels)) {\n            labels = [false, labels];\n        }\n        // Create the individual labels for header and points, ignore footer\n        var boxes = labels.slice(0,\n            points.length + 1).reduce(function (boxes,\n            str,\n            i) {\n                if (str !== false && str !== '') {\n                    var point = (points[i - 1] ||\n                        {\n                            // Item 0 is the header. Instead of this, we could also\n                            // use the crosshair label\n                            isHeader: true,\n                            plotX: points[0].plotX,\n                            plotY: plotHeight,\n                            series: {}\n                        });\n                var isHeader = point.isHeader;\n                // Store the tooltip label reference on the series\n                var owner = isHeader ? tooltip : point.series;\n                var tt = owner.tt = updatePartialTooltip(owner.tt,\n                    point,\n                    str.toString());\n                // Get X position now, so we can move all to the other side in\n                // case of overflow\n                var bBox = tt.getBBox();\n                var boxWidth = bBox.width + tt.strokeWidth();\n                if (isHeader) {\n                    headerHeight = bBox.height;\n                    adjustedPlotHeight += headerHeight;\n                    if (headerTop) {\n                        distributionBoxTop -= headerHeight;\n                    }\n                }\n                var _a = getAnchor(point),\n                    anchorX = _a.anchorX,\n                    anchorY = _a.anchorY;\n                if (typeof anchorY === 'number') {\n                    var size = bBox.height + 1;\n                    var boxPosition = (positioner ?\n                            positioner.call(tooltip,\n                        boxWidth,\n                        size,\n                        point) :\n                            defaultPositioner(anchorX,\n                        anchorY,\n                        isHeader,\n                        boxWidth));\n                    boxes.push({\n                        // 0-align to the top, 1-align to the bottom\n                        align: positioner ? 0 : void 0,\n                        anchorX: anchorX,\n                        anchorY: anchorY,\n                        boxWidth: boxWidth,\n                        point: point,\n                        rank: Tooltip_pick(boxPosition.rank, isHeader ? 1 : 0),\n                        size: size,\n                        target: boxPosition.y,\n                        tt: tt,\n                        x: boxPosition.x\n                    });\n                }\n                else {\n                    // Hide tooltips which anchorY is outside the visible plot\n                    // area\n                    tt.isActive = false;\n                }\n            }\n            return boxes;\n        }, []);\n        // Realign the tooltips towards the right if there is not enough space\n        // to the left and there is space to the right\n        if (!positioner && boxes.some(function (box) {\n            // Always realign if the beginning of a label is outside bounds\n            var outside = tooltip.outside;\n            var boxStart = (outside ? chartLeft : 0) + box.anchorX;\n            if (boxStart < bounds.left &&\n                boxStart + box.boxWidth < bounds.right) {\n                return true;\n            }\n            // Otherwise, check if there is more space available to the right\n            return boxStart < (chartLeft - bounds.left) + box.boxWidth &&\n                bounds.right - boxStart > boxStart;\n        })) {\n            boxes = boxes.map(function (box) {\n                var _a = defaultPositioner(box.anchorX,\n                    box.anchorY,\n                    box.point.isHeader,\n                    box.boxWidth,\n                    false),\n                    x = _a.x,\n                    y = _a.y;\n                return Tooltip_extend(box, {\n                    target: y,\n                    x: x\n                });\n            });\n        }\n        // Clean previous run (for missing points)\n        tooltip.cleanSplit();\n        // Distribute and put in place\n        distribute(boxes, adjustedPlotHeight);\n        var boxExtremes = {\n                left: chartLeft,\n                right: chartLeft\n            };\n        // Get the extremes from series tooltips\n        boxes.forEach(function (box) {\n            var x = box.x,\n                boxWidth = box.boxWidth,\n                isHeader = box.isHeader;\n            if (!isHeader) {\n                if (tooltip.outside && chartLeft + x < boxExtremes.left) {\n                    boxExtremes.left = chartLeft + x;\n                }\n                if (!isHeader &&\n                    tooltip.outside &&\n                    boxExtremes.left + boxWidth > boxExtremes.right) {\n                    boxExtremes.right = chartLeft + x;\n                }\n            }\n        });\n        boxes.forEach(function (box) {\n            var x = box.x,\n                anchorX = box.anchorX,\n                anchorY = box.anchorY,\n                pos = box.pos,\n                isHeader = box.point.isHeader;\n            var attributes = {\n                    visibility: typeof pos === 'undefined' ? 'hidden' : 'inherit',\n                    x: x,\n                    /* NOTE: y should equal pos to be consistent with !split\n                     * tooltip,\n                but is currently relative to plotTop. Is left as is\n                     * to avoid breaking change. Remove distributionBoxTop to make\n                     * it consistent.\n                     */\n                    y: (pos || 0) + distributionBoxTop,\n                    anchorX: anchorX,\n                    anchorY: anchorY\n                };\n            // Handle left-aligned tooltips overflowing the chart area\n            if (tooltip.outside && x < anchorX) {\n                var offset = chartLeft - boxExtremes.left;\n                // Skip this if there is no overflow\n                if (offset > 0) {\n                    if (!isHeader) {\n                        attributes.x = x + offset;\n                        attributes.anchorX = anchorX + offset;\n                    }\n                    if (isHeader) {\n                        attributes.x = (boxExtremes.right - boxExtremes.left) / 2;\n                        attributes.anchorX = anchorX + offset;\n                    }\n                }\n            }\n            // Put the label in place\n            box.tt.attr(attributes);\n        });\n        /* If we have a separate tooltip container, then update the necessary\n         * container properties.\n         * Test that tooltip has its own container and renderer before executing\n         * the operation.\n         */\n        var container = tooltip.container,\n            outside = tooltip.outside,\n            renderer = tooltip.renderer;\n        if (outside && container && renderer) {\n            // Set container size to fit the bounds\n            var _h = tooltipLabel.getBBox(),\n                width = _h.width,\n                height = _h.height,\n                x = _h.x,\n                y = _h.y;\n            renderer.setSize(width + x, height + y, false);\n            // Position the tooltip container to the chart container\n            container.style.left = boxExtremes.left + 'px';\n            container.style.top = chartTop + 'px';\n        }\n        // Workaround for #18927, artefacts left by the shadows of split\n        // tooltips in Safari v16 (2023). Check again with later versions if we\n        // can remove this.\n        if (isSafari) {\n            tooltipLabel.attr({\n                // Force a redraw of the whole group by chaining the opacity\n                // slightly\n                opacity: tooltipLabel.opacity === 1 ? 0.999 : 1\n            });\n        }\n    };\n    /**\n     * If the `stickOnContact` option is active, this will add a tracker shape.\n     *\n     * @private\n     * @function Highcharts.Tooltip#drawTracker\n     */\n    Tooltip.prototype.drawTracker = function () {\n        var tooltip = this;\n        if (!this.shouldStickOnContact()) {\n            if (tooltip.tracker) {\n                tooltip.tracker = tooltip.tracker.destroy();\n            }\n            return;\n        }\n        var chart = tooltip.chart;\n        var label = tooltip.label;\n        var points = tooltip.shared ? chart.hoverPoints : chart.hoverPoint;\n        if (!label || !points) {\n            return;\n        }\n        var box = {\n                x: 0,\n                y: 0,\n                width: 0,\n                height: 0\n            };\n        // Combine anchor and tooltip\n        var anchorPos = this.getAnchor(points);\n        var labelBBox = label.getBBox();\n        anchorPos[0] += chart.plotLeft - (label.translateX || 0);\n        anchorPos[1] += chart.plotTop - (label.translateY || 0);\n        // When the mouse pointer is between the anchor point and the label,\n        // the label should stick.\n        box.x = Math.min(0, anchorPos[0]);\n        box.y = Math.min(0, anchorPos[1]);\n        box.width = (anchorPos[0] < 0 ?\n            Math.max(Math.abs(anchorPos[0]), labelBBox.width - anchorPos[0]) :\n            Math.max(Math.abs(anchorPos[0]), labelBBox.width));\n        box.height = (anchorPos[1] < 0 ?\n            Math.max(Math.abs(anchorPos[1]), labelBBox.height - Math.abs(anchorPos[1])) :\n            Math.max(Math.abs(anchorPos[1]), labelBBox.height));\n        if (tooltip.tracker) {\n            tooltip.tracker.attr(box);\n        }\n        else {\n            tooltip.tracker = label.renderer\n                .rect(box)\n                .addClass('highcharts-tracker')\n                .add(label);\n            if (!chart.styledMode) {\n                tooltip.tracker.attr({\n                    fill: 'rgba(0,0,0,0)'\n                });\n            }\n        }\n    };\n    /**\n     * @private\n     */\n    Tooltip.prototype.styledModeFormat = function (formatString) {\n        return formatString\n            .replace('style=\"font-size: 0.8em\"', 'class=\"highcharts-header\"')\n            .replace(/style=\"color:{(point|series)\\.color}\"/g, 'class=\"highcharts-color-{$1.colorIndex} ' +\n            '{series.options.className} ' +\n            '{point.options.className}\"');\n    };\n    /**\n     * Format the footer/header of the tooltip\n     * #3397: abstraction to enable formatting of footer and header\n     *\n     * @private\n     * @function Highcharts.Tooltip#headerFooterFormatter\n     */\n    Tooltip.prototype.headerFooterFormatter = function (point, isFooter) {\n        var series = point.series,\n            tooltipOptions = series.tooltipOptions,\n            xAxis = series.xAxis,\n            dateTime = xAxis && xAxis.dateTime,\n            e = {\n                isFooter: isFooter,\n                point: point\n            };\n        var xDateFormat = tooltipOptions.xDateFormat || '', formatString = tooltipOptions[isFooter ? 'footerFormat' : 'headerFormat'];\n        Tooltip_fireEvent(this, 'headerFormatter', e, function (e) {\n            // Guess the best date format based on the closest point distance\n            // (#568, #3418)\n            if (dateTime && !xDateFormat && Tooltip_isNumber(point.key)) {\n                xDateFormat = dateTime.getXDateFormat(point.key, tooltipOptions.dateTimeLabelFormats);\n            }\n            // Insert the footer date format if any\n            if (dateTime && xDateFormat) {\n                if (Tooltip_isObject(xDateFormat)) {\n                    var format_1 = xDateFormat;\n                    dateFormats[0] = function (timestamp) {\n                        return series.chart.time.dateFormat(format_1, timestamp);\n                    };\n                    xDateFormat = '%0';\n                }\n                (point.tooltipDateKeys || ['key']).forEach(function (key) {\n                    formatString = formatString.replace(new RegExp('point\\\\.' + key + '([ \\\\)}])', ''), \"(point.\".concat(key, \":\").concat(xDateFormat, \")$1\"));\n                });\n            }\n            // Replace default header style with class name\n            if (series.chart.styledMode) {\n                formatString = this.styledModeFormat(formatString);\n            }\n            e.text = Tooltip_format(formatString, point, this.chart);\n        });\n        return e.text || '';\n    };\n    /**\n     * Updates the tooltip with the provided tooltip options.\n     *\n     * @function Highcharts.Tooltip#update\n     *\n     * @param {Highcharts.TooltipOptions} options\n     *        The tooltip options to update.\n     */\n    Tooltip.prototype.update = function (options) {\n        this.destroy();\n        this.init(this.chart, Tooltip_merge(true, this.options, options));\n    };\n    /**\n     * Find the new position and perform the move\n     *\n     * @private\n     * @function Highcharts.Tooltip#updatePosition\n     *\n     * @param {Highcharts.Point} point\n     */\n    Tooltip.prototype.updatePosition = function (point) {\n        var _a = this,\n            chart = _a.chart,\n            container = _a.container,\n            distance = _a.distance,\n            options = _a.options,\n            pointer = _a.pointer,\n            renderer = _a.renderer,\n            _b = this.getLabel(),\n            _c = _b.height,\n            height = _c === void 0 ? 0 : _c,\n            _d = _b.width,\n            width = _d === void 0 ? 0 : _d, \n            // Needed for outside: true (#11688)\n            _e = pointer.getChartPosition(),\n            left = _e.left,\n            top = _e.top,\n            scaleX = _e.scaleX,\n            scaleY = _e.scaleY,\n            pos = (options.positioner || this.getPosition).call(this,\n            width,\n            height,\n            point),\n            doc = Core_Globals.doc;\n        var anchorX = (point.plotX || 0) + chart.plotLeft,\n            anchorY = (point.plotY || 0) + chart.plotTop,\n            pad;\n        // Set the renderer size dynamically to prevent document size to change.\n        // Renderer only exists when tooltip is outside.\n        if (renderer && container) {\n            // Corrects positions, occurs with tooltip positioner (#16944)\n            if (options.positioner) {\n                pos.x += left - distance;\n                pos.y += top - distance;\n            }\n            // Pad it by the border width and distance. Add 2 to make room for\n            // the default shadow (#19314).\n            pad = (options.borderWidth || 0) + 2 * distance + 2;\n            renderer.setSize(\n            // Clamp width to keep tooltip in viewport (#21698)\n            // and subtract one since tooltip container has 'left: 1px;'\n            Tooltip_clamp(width + pad, 0, doc.documentElement.clientWidth) - 1, height + pad, false);\n            // Anchor and tooltip container need scaling if chart container has\n            // scale transform/css zoom. #11329.\n            if (scaleX !== 1 || scaleY !== 1) {\n                Tooltip_css(container, {\n                    transform: \"scale(\".concat(scaleX, \", \").concat(scaleY, \")\")\n                });\n                anchorX *= scaleX;\n                anchorY *= scaleY;\n            }\n            anchorX += left - pos.x;\n            anchorY += top - pos.y;\n        }\n        // Do the move\n        this.move(Math.round(pos.x), Math.round(pos.y || 0), // Can be undefined (#3977)\n        anchorX, anchorY);\n    };\n    return Tooltip;\n}());\n/* *\n *\n *  Class namespace\n *\n * */\n(function (Tooltip) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    function compose(PointerClass) {\n        if (Tooltip_pushUnique(Tooltip_composed, 'Core.Tooltip')) {\n            Tooltip_addEvent(PointerClass, 'afterInit', function () {\n                var chart = this.chart;\n                if (chart.options.tooltip) {\n                    /**\n                     * Tooltip object for points of series.\n                     *\n                     * @name Highcharts.Chart#tooltip\n                     * @type {Highcharts.Tooltip}\n                     */\n                    chart.tooltip = new Tooltip(chart, chart.options.tooltip, this);\n                }\n            });\n        }\n    }\n    Tooltip.compose = compose;\n})(Tooltip || (Tooltip = {}));\n/* *\n *\n *  Default export\n *\n * */\n/* harmony default export */ var Core_Tooltip = (Tooltip);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * Callback function to format the text of the tooltip from scratch.\n *\n * In case of single or shared tooltips, a string should be returned. In case\n * of split tooltips, it should return an array where the first item is the\n * header, and subsequent items are mapped to the points. Return `false` to\n * disable tooltip for a specific point on series.\n *\n * @callback Highcharts.TooltipFormatterCallbackFunction\n *\n * @param {Highcharts.Point} this\n * The formatter's context is the hovered `Point` instance. In case of shared or\n * split tooltips, all points are available in `this.points`.\n *\n * @param {Highcharts.Tooltip} tooltip\n * The tooltip instance\n *\n * @return {false|string|Array<(string|null|undefined)>|null|undefined}\n * Formatted text or false\n */\n/**\n * A callback function to place the tooltip in a specific position.\n *\n * @callback Highcharts.TooltipPositionerCallbackFunction\n *\n * @param {Highcharts.Tooltip} this\n * Tooltip context of the callback.\n *\n * @param {number} labelWidth\n * Width of the tooltip.\n *\n * @param {number} labelHeight\n * Height of the tooltip.\n *\n * @param {Highcharts.TooltipPositionerPointObject} point\n * Point information for positioning a tooltip.\n *\n * @return {Highcharts.PositionObject}\n * New position for the tooltip.\n */\n/**\n * Point information for positioning a tooltip.\n *\n * @interface Highcharts.TooltipPositionerPointObject\n * @extends Highcharts.Point\n */ /**\n* If `tooltip.split` option is enabled and positioner is called for each of the\n* boxes separately, this property indicates the call on the xAxis header, which\n* is not a point itself.\n* @name Highcharts.TooltipPositionerPointObject#isHeader\n* @type {boolean}\n*/ /**\n* The reference point relative to the plot area. Add chart.plotLeft to get the\n* full coordinates.\n* @name Highcharts.TooltipPositionerPointObject#plotX\n* @type {number}\n*/ /**\n* The reference point relative to the plot area. Add chart.plotTop to get the\n* full coordinates.\n* @name Highcharts.TooltipPositionerPointObject#plotY\n* @type {number}\n*/\n/**\n * @typedef {\"callout\"|\"circle\"|\"rect\"} Highcharts.TooltipShapeValue\n */\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Series/Point.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar Point_animObject = AnimationUtilities.animObject;\n\nvar Point_defaultOptions = Defaults.defaultOptions;\n\nvar Point_format = Core_Templating.format;\n\nvar Point_addEvent = Core_Utilities.addEvent, Point_crisp = Core_Utilities.crisp, Point_erase = Core_Utilities.erase, Point_extend = Core_Utilities.extend, Point_fireEvent = Core_Utilities.fireEvent, Point_getNestedProperty = Core_Utilities.getNestedProperty, Point_isArray = Core_Utilities.isArray, Point_isFunction = Core_Utilities.isFunction, Point_isNumber = Core_Utilities.isNumber, Point_isObject = Core_Utilities.isObject, Point_merge = Core_Utilities.merge, Point_pick = Core_Utilities.pick, Point_syncTimeout = Core_Utilities.syncTimeout, Point_removeEvent = Core_Utilities.removeEvent, Point_uniqueKey = Core_Utilities.uniqueKey;\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/* *\n *\n *  Class\n *\n * */\n/**\n * The Point object. The point objects are generated from the `series.data`\n * configuration objects or raw numbers. They can be accessed from the\n * `Series.points` array. Other ways to instantiate points are through {@link\n * Highcharts.Series#addPoint} or {@link Highcharts.Series#setData}.\n *\n * @class\n * @name Highcharts.Point\n */\nvar Point = /** @class */ (function () {\n    /**\n     * Initialize the point. Called internally based on the `series.data`\n     * option.\n     *\n     * @function Highcharts.Point#init\n     *\n     * @param {Highcharts.Series} series\n     *        The series object containing this point.\n     *\n     * @param {Highcharts.PointOptionsType} options\n     *        The data in either number, array or object format.\n     *\n     * @param {number} [x]\n     *        Optionally, the X value of the point.\n     *\n     * @return {Highcharts.Point}\n     *         The Point instance.\n     *\n     * @emits Highcharts.Point#event:afterInit\n     */\n    function Point(series, options, x) {\n        var _a;\n        this.formatPrefix = 'point';\n        this.visible = true;\n        // For tooltip and data label formatting\n        this.point = this;\n        this.series = series;\n        this.applyOptions(options, x);\n        // Add a unique ID to the point if none is assigned\n        (_a = this.id) !== null && _a !== void 0 ? _a : (this.id = Point_uniqueKey());\n        this.resolveColor();\n        series.chart.pointCount++;\n        Point_fireEvent(this, 'afterInit');\n    }\n    /**\n     * For categorized axes this property holds the category name for the\n     * point. For other axes it holds the X value.\n     *\n     * @name Highcharts.Point#category\n     * @type {number|string}\n     */\n    /**\n     * The name of the point. The name can be given as the first position of the\n     * point configuration array, or as a `name` property in the configuration:\n     *\n     * @example\n     * // Array config\n     * data: [\n     *     ['John', 1],\n     *     ['Jane', 2]\n     * ]\n     *\n     * // Object config\n     * data: [{\n     *        name: 'John',\n     *        y: 1\n     * }, {\n     *     name: 'Jane',\n     *     y: 2\n     * }]\n     *\n     * @name Highcharts.Point#name\n     * @type {string}\n     */\n    /**\n     * The point's name if it is defined, or its category in case of a category,\n     * otherwise the x value. Convenient for tooltip and data label formatting.\n     *\n     * @name Highcharts.Point#key\n     * @type {number|string}\n     */\n    /**\n     * The point's options as applied in the initial configuration, or\n     * extended through `Point.update`.\n     *\n     * In TypeScript you have to extend `PointOptionsObject` via an\n     * additional interface to allow custom data options:\n     *\n     * ```\n     * declare interface PointOptionsObject {\n     *     customProperty: string;\n     * }\n     * ```\n     *\n     * @name Highcharts.Point#options\n     * @type {Highcharts.PointOptionsObject}\n     */\n    /**\n     * The percentage for points in a stacked series, pies or gauges.\n     *\n     * @name Highcharts.Point#percentage\n     * @type {number|undefined}\n     */\n    /**\n     * The series object associated with the point.\n     *\n     * @name Highcharts.Point#series\n     * @type {Highcharts.Series}\n     */\n    /**\n     * The attributes of the rendered SVG shape like in `column` or `pie`\n     * series.\n     *\n     * @readonly\n     * @name Highcharts.Point#shapeArgs\n     * @type {Readonly<Highcharts.SVGAttributes>|undefined}\n     */\n    /**\n     * The total of values in either a stack for stacked series, or a pie in a\n     * pie series.\n     *\n     * @name Highcharts.Point#total\n     * @type {number|undefined}\n     */\n    /**\n     * For certain series types, like pie charts, where individual points can\n     * be shown or hidden.\n     *\n     * @name Highcharts.Point#visible\n     * @type {boolean}\n     * @default true\n     */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Animate SVG elements associated with the point.\n     *\n     * @private\n     * @function Highcharts.Point#animateBeforeDestroy\n     */\n    Point.prototype.animateBeforeDestroy = function () {\n        var point = this,\n            animateParams = { x: point.startXPos,\n            opacity: 0 },\n            graphicalProps = point.getGraphicalProps();\n        graphicalProps.singular.forEach(function (prop) {\n            var isDataLabel = prop === 'dataLabel';\n            point[prop] = point[prop].animate(isDataLabel ? {\n                x: point[prop].startXPos,\n                y: point[prop].startYPos,\n                opacity: 0\n            } : animateParams);\n        });\n        graphicalProps.plural.forEach(function (plural) {\n            point[plural].forEach(function (item) {\n                if (item.element) {\n                    item.animate(Point_extend({ x: point.startXPos }, (item.startYPos ? {\n                        x: item.startXPos,\n                        y: item.startYPos\n                    } : {})));\n                }\n            });\n        });\n    };\n    /**\n     * Apply the options containing the x and y data and possible some extra\n     * properties. Called on point init or from point.update.\n     *\n     * @private\n     * @function Highcharts.Point#applyOptions\n     *\n     * @param {Highcharts.PointOptionsType} options\n     *        The point options as defined in series.data.\n     *\n     * @param {number} [x]\n     *        Optionally, the x value.\n     *\n     * @return {Highcharts.Point}\n     *         The Point instance.\n     */\n    Point.prototype.applyOptions = function (options, x) {\n        var point = this,\n            series = point.series,\n            pointValKey = series.options.pointValKey || series.pointValKey;\n        options = Point.prototype.optionsToObject.call(this, options);\n        // Copy options directly to point\n        Point_extend(point, options);\n        point.options = point.options ?\n            Point_extend(point.options, options) :\n            options;\n        // Since options are copied into the Point instance, some accidental\n        // options must be shielded (#5681)\n        if (options.group) {\n            delete point.group;\n        }\n        if (options.dataLabels) {\n            delete point.dataLabels;\n        }\n        /**\n         * The y value of the point.\n         * @name Highcharts.Point#y\n         * @type {number|undefined}\n         */\n        // For higher dimension series types. For instance, for ranges, point.y\n        // is mapped to point.low.\n        if (pointValKey) {\n            point.y = Point.prototype.getNestedProperty.call(point, pointValKey);\n        }\n        // The point is initially selected by options (#5777)\n        if (point.selected) {\n            point.state = 'select';\n        }\n        /**\n         * The x value of the point.\n         * @name Highcharts.Point#x\n         * @type {number}\n         */\n        // If no x is set by now, get auto incremented value. All points must\n        // have an x value, however the y value can be null to create a gap in\n        // the series\n        if ('name' in point &&\n            typeof x === 'undefined' &&\n            series.xAxis &&\n            series.xAxis.hasNames) {\n            point.x = series.xAxis.nameToX(point);\n        }\n        if (typeof point.x === 'undefined' && series) {\n            point.x = x !== null && x !== void 0 ? x : series.autoIncrement();\n        }\n        else if (Point_isNumber(options.x) && series.options.relativeXValue) {\n            point.x = series.autoIncrement(options.x);\n            // If x is a string, try to parse it to a datetime\n        }\n        else if (typeof point.x === 'string') {\n            x !== null && x !== void 0 ? x : (x = series.chart.time.parse(point.x));\n            if (Point_isNumber(x)) {\n                point.x = x;\n            }\n        }\n        point.isNull = this.isValid && !this.isValid();\n        point.formatPrefix = point.isNull ? 'null' : 'point'; // #9233, #10874\n        return point;\n    };\n    /**\n     * Destroy a point to clear memory. Its reference still stays in\n     * `series.data`.\n     *\n     * @private\n     * @function Highcharts.Point#destroy\n     */\n    Point.prototype.destroy = function () {\n        if (!this.destroyed) {\n            var point_1 = this,\n                series = point_1.series,\n                chart = series.chart,\n                dataSorting = series.options.dataSorting,\n                hoverPoints = chart.hoverPoints,\n                globalAnimation = point_1.series.chart.renderer.globalAnimation,\n                animation = Point_animObject(globalAnimation);\n            /**\n             * Allow to call after animation.\n             * @private\n             */\n            var destroyPoint = function () {\n                    // Remove all events and elements\n                    if (point_1.graphic ||\n                        point_1.graphics ||\n                        point_1.dataLabel ||\n                        point_1.dataLabels) {\n                        Point_removeEvent(point_1);\n                    point_1.destroyElements();\n                }\n                for (var prop in point_1) { // eslint-disable-line guard-for-in\n                    delete point_1[prop];\n                }\n            };\n            if (point_1.legendItem) {\n                // Pies have legend items\n                chart.legend.destroyItem(point_1);\n            }\n            if (hoverPoints) {\n                point_1.setState();\n                Point_erase(hoverPoints, point_1);\n                if (!hoverPoints.length) {\n                    chart.hoverPoints = null;\n                }\n            }\n            if (point_1 === chart.hoverPoint) {\n                point_1.onMouseOut();\n            }\n            // Remove properties after animation\n            if (!dataSorting || !dataSorting.enabled) {\n                destroyPoint();\n            }\n            else {\n                this.animateBeforeDestroy();\n                Point_syncTimeout(destroyPoint, animation.duration);\n            }\n            chart.pointCount--;\n        }\n        this.destroyed = true;\n    };\n    /**\n     * Destroy SVG elements associated with the point.\n     *\n     * @private\n     * @function Highcharts.Point#destroyElements\n     * @param {Highcharts.Dictionary<number>} [kinds]\n     */\n    Point.prototype.destroyElements = function (kinds) {\n        var point = this,\n            props = point.getGraphicalProps(kinds);\n        props.singular.forEach(function (prop) {\n            point[prop] = point[prop].destroy();\n        });\n        props.plural.forEach(function (plural) {\n            point[plural].forEach(function (item) {\n                if (item && item.element) {\n                    item.destroy();\n                }\n            });\n            delete point[plural];\n        });\n    };\n    /**\n     * Fire an event on the Point object.\n     *\n     * @private\n     * @function Highcharts.Point#firePointEvent\n     *\n     * @param {string} eventType\n     *        Type of the event.\n     *\n     * @param {Highcharts.Dictionary<any>|Event} [eventArgs]\n     *        Additional event arguments.\n     *\n     * @param {Highcharts.EventCallbackFunction<Highcharts.Point>|Function} [defaultFunction]\n     *        Default event handler.\n     *\n     * @emits Highcharts.Point#event:*\n     */\n    Point.prototype.firePointEvent = function (eventType, eventArgs, defaultFunction) {\n        var point = this,\n            series = this.series,\n            seriesOptions = series.options;\n        // Load event handlers on demand to save time on mouseover/out\n        point.manageEvent(eventType);\n        // Add default handler if in selection mode\n        if (eventType === 'click' && seriesOptions.allowPointSelect) {\n            defaultFunction = function (event) {\n                // Control key is for Windows, meta (= Cmd key) for Mac, Shift\n                // for Opera.\n                if (!point.destroyed && point.select) { // #2911, #19075\n                    point.select(null, event.ctrlKey || event.metaKey || event.shiftKey);\n                }\n            };\n        }\n        Point_fireEvent(point, eventType, eventArgs, defaultFunction);\n    };\n    /**\n     * Get the CSS class names for individual points. Used internally where the\n     * returned value is set on every point.\n     *\n     * @function Highcharts.Point#getClassName\n     *\n     * @return {string}\n     *         The class names.\n     */\n    Point.prototype.getClassName = function () {\n        var point = this;\n        return 'highcharts-point' +\n            (point.selected ? ' highcharts-point-select' : '') +\n            (point.negative ? ' highcharts-negative' : '') +\n            (point.isNull ? ' highcharts-null-point' : '') +\n            (typeof point.colorIndex !== 'undefined' ?\n                ' highcharts-color-' + point.colorIndex : '') +\n            (point.options.className ? ' ' + point.options.className : '') +\n            (point.zone && point.zone.className ? ' ' +\n                point.zone.className.replace('highcharts-negative', '') : '');\n    };\n    /**\n     * Get props of all existing graphical point elements.\n     *\n     * @private\n     * @function Highcharts.Point#getGraphicalProps\n     */\n    Point.prototype.getGraphicalProps = function (kinds) {\n        var point = this,\n            props = [],\n            graphicalProps = { singular: [],\n            plural: [] };\n        var prop,\n            i;\n        kinds = kinds || { graphic: 1, dataLabel: 1 };\n        if (kinds.graphic) {\n            props.push('graphic', 'connector' // Used by dumbbell\n            );\n        }\n        if (kinds.dataLabel) {\n            props.push('dataLabel', 'dataLabelPath', 'dataLabelUpper');\n        }\n        i = props.length;\n        while (i--) {\n            prop = props[i];\n            if (point[prop]) {\n                graphicalProps.singular.push(prop);\n            }\n        }\n        [\n            'graphic',\n            'dataLabel'\n        ].forEach(function (prop) {\n            var plural = prop + 's';\n            if (kinds[prop] && point[plural]) {\n                graphicalProps.plural.push(plural);\n            }\n        });\n        return graphicalProps;\n    };\n    /**\n     * Returns the value of the point property for a given value.\n     * @private\n     */\n    Point.prototype.getNestedProperty = function (key) {\n        if (!key) {\n            return;\n        }\n        if (key.indexOf('custom.') === 0) {\n            return Point_getNestedProperty(key, this.options);\n        }\n        return this[key];\n    };\n    /**\n     * In a series with `zones`, return the zone that the point belongs to.\n     *\n     * @function Highcharts.Point#getZone\n     *\n     * @return {Highcharts.SeriesZonesOptionsObject}\n     *         The zone item.\n     */\n    Point.prototype.getZone = function () {\n        var series = this.series,\n            zones = series.zones,\n            zoneAxis = series.zoneAxis || 'y';\n        var zone,\n            i = 0;\n        zone = zones[i];\n        while (this[zoneAxis] >= zone.value) {\n            zone = zones[++i];\n        }\n        // For resetting or reusing the point (#8100)\n        if (!this.nonZonedColor) {\n            this.nonZonedColor = this.color;\n        }\n        if (zone && zone.color && !this.options.color) {\n            this.color = zone.color;\n        }\n        else {\n            this.color = this.nonZonedColor;\n        }\n        return zone;\n    };\n    /**\n     * Utility to check if point has new shape type. Used in column series and\n     * all others that are based on column series.\n     * @private\n     */\n    Point.prototype.hasNewShapeType = function () {\n        var point = this;\n        var oldShapeType = point.graphic &&\n                (point.graphic.symbolName || point.graphic.element.nodeName);\n        return oldShapeType !== this.shapeType;\n    };\n    /**\n     * Determine if point is valid.\n     * @private\n     * @function Highcharts.Point#isValid\n     */\n    Point.prototype.isValid = function () {\n        return ((Point_isNumber(this.x) ||\n            this.x instanceof Date) &&\n            Point_isNumber(this.y));\n    };\n    /**\n     * Transform number or array configs into objects. Also called for object\n     * configs. Used internally to unify the different configuration formats for\n     * points. For example, a simple number `10` in a line series will be\n     * transformed to `{ y: 10 }`, and an array config like `[1, 10]` in a\n     * scatter series will be transformed to `{ x: 1, y: 10 }`.\n     *\n     * @function Highcharts.Point#optionsToObject\n     *\n     * @param {Highcharts.PointOptionsType} options\n     * Series data options.\n     *\n     * @return {Highcharts.Dictionary<*>}\n     * Transformed point options.\n     */\n    Point.prototype.optionsToObject = function (options) {\n        var _a;\n        var series = this.series,\n            keys = series.options.keys,\n            pointArrayMap = keys || series.pointArrayMap || ['y'],\n            valueCount = pointArrayMap.length;\n        var ret = {},\n            firstItemType,\n            i = 0,\n            j = 0;\n        if (Point_isNumber(options) || options === null) {\n            ret[pointArrayMap[0]] = options;\n        }\n        else if (Point_isArray(options)) {\n            // With leading x value\n            if (!keys && options.length > valueCount) {\n                firstItemType = typeof options[0];\n                if (firstItemType === 'string') {\n                    if ((_a = series.xAxis) === null || _a === void 0 ? void 0 : _a.dateTime) {\n                        ret.x = series.chart.time.parse(options[0]);\n                    }\n                    else {\n                        ret.name = options[0];\n                    }\n                }\n                else if (firstItemType === 'number') {\n                    ret.x = options[0];\n                }\n                i++;\n            }\n            while (j < valueCount) {\n                // Skip undefined positions for keys\n                if (!keys || typeof options[i] !== 'undefined') {\n                    if (pointArrayMap[j].indexOf('.') > 0) {\n                        // Handle nested keys, e.g. ['color.pattern.image']\n                        // Avoid function call unless necessary.\n                        Point.prototype.setNestedProperty(ret, options[i], pointArrayMap[j]);\n                    }\n                    else {\n                        ret[pointArrayMap[j]] = options[i];\n                    }\n                }\n                i++;\n                j++;\n            }\n        }\n        else if (typeof options === 'object') {\n            ret = options;\n            // This is the fastest way to detect if there are individual point\n            // dataLabels that need to be considered in drawDataLabels. These\n            // can only occur in object configs.\n            if (options.dataLabels) {\n                // Override the prototype function to always return true,\n                // regardless of whether data labels are enabled series-wide\n                series.hasDataLabels = function () { return true; };\n            }\n            // Same approach as above for markers\n            if (options.marker) {\n                series._hasPointMarkers = true;\n            }\n        }\n        return ret;\n    };\n    /**\n     * Get the pixel position of the point relative to the plot area.\n     * @function Highcharts.Point#pos\n     *\n     * @sample highcharts/point/position\n     *         Get point's position in pixels.\n     *\n     * @param {boolean} chartCoordinates\n     * If true, the returned position is relative to the full chart area.\n     * If false, it is relative to the plot area determined by the axes.\n     *\n     * @param {number|undefined} plotY\n     * A custom plot y position to be computed. Used internally for some\n     * series types that have multiple `y` positions, like area range (low\n     * and high values).\n     *\n     * @return {Array<number>|undefined}\n     * Coordinates of the point if the point exists.\n     */\n    Point.prototype.pos = function (chartCoordinates, plotY) {\n        if (plotY === void 0) { plotY = this.plotY; }\n        if (!this.destroyed) {\n            var _a = this,\n                plotX = _a.plotX,\n                series = _a.series,\n                chart = series.chart,\n                xAxis = series.xAxis,\n                yAxis = series.yAxis;\n            var posX = 0,\n                posY = 0;\n            if (Point_isNumber(plotX) && Point_isNumber(plotY)) {\n                if (chartCoordinates) {\n                    posX = xAxis ? xAxis.pos : chart.plotLeft;\n                    posY = yAxis ? yAxis.pos : chart.plotTop;\n                }\n                return chart.inverted && xAxis && yAxis ?\n                    [yAxis.len - plotY + posY, xAxis.len - plotX + posX] :\n                    [plotX + posX, plotY + posY];\n            }\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.Point#resolveColor\n     */\n    Point.prototype.resolveColor = function () {\n        var series = this.series,\n            optionsChart = series.chart.options.chart,\n            styledMode = series.chart.styledMode;\n        var color,\n            colors,\n            colorCount = optionsChart.colorCount,\n            colorIndex;\n        // Remove points nonZonedColor for later recalculation\n        delete this.nonZonedColor;\n        if (series.options.colorByPoint) {\n            if (!styledMode) {\n                colors = series.options.colors || series.chart.options.colors;\n                color = colors[series.colorCounter];\n                colorCount = colors.length;\n            }\n            colorIndex = series.colorCounter;\n            series.colorCounter++;\n            // Loop back to zero\n            if (series.colorCounter === colorCount) {\n                series.colorCounter = 0;\n            }\n        }\n        else {\n            if (!styledMode) {\n                color = series.color;\n            }\n            colorIndex = series.colorIndex;\n        }\n        /**\n         * The point's current color index, used in styled mode instead of\n         * `color`. The color index is inserted in class names used for styling.\n         *\n         * @name Highcharts.Point#colorIndex\n         * @type {number|undefined}\n         */\n        this.colorIndex = Point_pick(this.options.colorIndex, colorIndex);\n        /**\n         * The point's current color.\n         *\n         * @name Highcharts.Point#color\n         * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject|undefined}\n         */\n        this.color = Point_pick(this.options.color, color);\n    };\n    /**\n     * Set a value in an object, on the property defined by key. The key\n     * supports nested properties using dot notation. The function modifies the\n     * input object and does not make a copy.\n     *\n     * @function Highcharts.Point#setNestedProperty<T>\n     *\n     * @param {T} object\n     *        The object to set the value on.\n     *\n     * @param {*} value\n     *        The value to set.\n     *\n     * @param {string} key\n     *        Key to the property to set.\n     *\n     * @return {T}\n     *         The modified object.\n     */\n    Point.prototype.setNestedProperty = function (object, value, key) {\n        var nestedKeys = key.split('.');\n        nestedKeys.reduce(function (result, key, i, arr) {\n            var isLastKey = arr.length - 1 === i;\n            result[key] = (isLastKey ?\n                value :\n                Point_isObject(result[key], true) ?\n                    result[key] :\n                    {});\n            return result[key];\n        }, object);\n        return object;\n    };\n    Point.prototype.shouldDraw = function () {\n        return !this.isNull;\n    };\n    /**\n     * Extendable method for formatting each point's tooltip line.\n     *\n     * @function Highcharts.Point#tooltipFormatter\n     *\n     * @param {string} pointFormat\n     *        The point format.\n     *\n     * @return {string}\n     *         A string to be concatenated in to the common tooltip text.\n     */\n    Point.prototype.tooltipFormatter = function (pointFormat) {\n        var _a;\n        // Insert options for valueDecimals, valuePrefix, and valueSuffix\n        var _b = this.series, chart = _b.chart, _c = _b.pointArrayMap, pointArrayMap = _c === void 0 ? ['y'] : _c, tooltipOptions = _b.tooltipOptions, _d = tooltipOptions.valueDecimals, valueDecimals = _d === void 0 ? '' : _d, _e = tooltipOptions.valuePrefix, valuePrefix = _e === void 0 ? '' : _e, _f = tooltipOptions.valueSuffix, valueSuffix = _f === void 0 ? '' : _f;\n        // Replace default point style with class name\n        if (chart.styledMode) {\n            pointFormat = ((_a = chart.tooltip) === null || _a === void 0 ? void 0 : _a.styledModeFormat(pointFormat)) ||\n                pointFormat;\n        }\n        // Loop over the point array map and replace unformatted values with\n        // sprintf formatting markup\n        pointArrayMap.forEach(function (key) {\n            key = '{point.' + key; // Without the closing bracket\n            if (valuePrefix || valueSuffix) {\n                pointFormat = pointFormat.replace(RegExp(key + '}', 'g'), valuePrefix + key + '}' + valueSuffix);\n            }\n            pointFormat = pointFormat.replace(RegExp(key + '}', 'g'), key + ':,.' + valueDecimals + 'f}');\n        });\n        return Point_format(pointFormat, this, chart);\n    };\n    /**\n     * Update point with new options (typically x/y data) and optionally redraw\n     * the series.\n     *\n     * @sample highcharts/members/point-update-column/\n     *         Update column value\n     * @sample highcharts/members/point-update-pie/\n     *         Update pie slice\n     * @sample maps/members/point-update/\n     *         Update map area value in Highmaps\n     *\n     * @function Highcharts.Point#update\n     *\n     * @param {Highcharts.PointOptionsType} options\n     *        The point options. Point options are handled as described under\n     *        the `series.type.data` item for each series type. For example\n     *        for a line series, if options is a single number, the point will\n     *        be given that number as the marin y value. If it is an array, it\n     *        will be interpreted as x and y values respectively. If it is an\n     *        object, advanced options are applied.\n     *\n     * @param {boolean} [redraw=true]\n     *        Whether to redraw the chart after the point is updated. If doing\n     *        more operations on the chart, it is best practice to set\n     *        `redraw` to false and call `chart.redraw()` after.\n     *\n     * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation=true]\n     *        Whether to apply animation, and optionally animation\n     *        configuration.\n     *\n     * @emits Highcharts.Point#event:update\n     */\n    Point.prototype.update = function (options, redraw, animation, runEvent) {\n        var point = this,\n            series = point.series,\n            graphic = point.graphic,\n            chart = series.chart,\n            seriesOptions = series.options;\n        var i;\n        redraw = Point_pick(redraw, true);\n        /**\n         * @private\n         */\n        function update() {\n            point.applyOptions(options);\n            // Update visuals, #4146\n            // Handle mock graphic elements for a11y, #12718\n            var hasMockGraphic = graphic && point.hasMockGraphic;\n            var shouldDestroyGraphic = point.y === null ?\n                    !hasMockGraphic :\n                    hasMockGraphic;\n            if (graphic && shouldDestroyGraphic) {\n                point.graphic = graphic.destroy();\n                delete point.hasMockGraphic;\n            }\n            if (Point_isObject(options, true)) {\n                // Destroy so we can get new elements\n                if (graphic && graphic.element) {\n                    // \"null\" is also a valid symbol\n                    if (options &&\n                        options.marker &&\n                        typeof options.marker.symbol !== 'undefined') {\n                        point.graphic = graphic.destroy();\n                    }\n                }\n                if ((options === null || options === void 0 ? void 0 : options.dataLabels) && point.dataLabel) {\n                    point.dataLabel = point.dataLabel.destroy(); // #2468\n                }\n            }\n            // Record changes in the data table\n            i = point.index;\n            var row = {};\n            for (var _i = 0, _a = series.dataColumnKeys(); _i < _a.length; _i++) {\n                var key = _a[_i];\n                row[key] = point[key];\n            }\n            series.dataTable.setRow(row, i);\n            // Record the options to options.data. If the old or the new config\n            // is an object, use point options, otherwise use raw options\n            // (#4701, #4916).\n            seriesOptions.data[i] = (Point_isObject(seriesOptions.data[i], true) ||\n                Point_isObject(options, true)) ?\n                point.options :\n                Point_pick(options, seriesOptions.data[i]);\n            // Redraw\n            series.isDirty = series.isDirtyData = true;\n            if (!series.fixedBox && series.hasCartesianSeries) { // #1906, #2320\n                chart.isDirtyBox = true;\n            }\n            if (seriesOptions.legendType === 'point') { // #1831, #1885\n                chart.isDirtyLegend = true;\n            }\n            if (redraw) {\n                chart.redraw(animation);\n            }\n        }\n        // Fire the event with a default handler of doing the update\n        if (runEvent === false) { // When called from setData\n            update();\n        }\n        else {\n            point.firePointEvent('update', { options: options }, update);\n        }\n    };\n    /**\n     * Remove a point and optionally redraw the series and if necessary the axes\n     *\n     * @sample highcharts/plotoptions/series-point-events-remove/\n     *         Remove point and confirm\n     * @sample highcharts/members/point-remove/\n     *         Remove pie slice\n     * @sample maps/members/point-remove/\n     *         Remove selected points in Highmaps\n     *\n     * @function Highcharts.Point#remove\n     *\n     * @param {boolean} [redraw=true]\n     *        Whether to redraw the chart or wait for an explicit call. When\n     *        doing more operations on the chart, for example running\n     *        `point.remove()` in a loop, it is best practice to set `redraw`\n     *        to false and call `chart.redraw()` after.\n     *\n     * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation=false]\n     *        Whether to apply animation, and optionally animation\n     *        configuration.\n     */\n    Point.prototype.remove = function (redraw, animation) {\n        this.series.removePoint(this.series.data.indexOf(this), redraw, animation);\n    };\n    /**\n     * Toggle the selection status of a point.\n     *\n     * @see Highcharts.Chart#getSelectedPoints\n     *\n     * @sample highcharts/members/point-select/\n     *         Select a point from a button\n     * @sample highcharts/members/point-select-lasso/\n     *         Lasso selection\n     * @sample highcharts/chart/events-selection-points/\n     *         Rectangle selection\n     * @sample maps/series/data-id/\n     *         Select a point in Highmaps\n     *\n     * @function Highcharts.Point#select\n     *\n     * @param {boolean} [selected]\n     * When `true`, the point is selected. When `false`, the point is\n     * unselected. When `null` or `undefined`, the selection state is toggled.\n     *\n     * @param {boolean} [accumulate=false]\n     * When `true`, the selection is added to other selected points.\n     * When `false`, other selected points are deselected. Internally in\n     * Highcharts, when\n     * [allowPointSelect](https://api.highcharts.com/highcharts/plotOptions.series.allowPointSelect)\n     * is `true`, selected points are accumulated on Control, Shift or Cmd\n     * clicking the point.\n     *\n     * @emits Highcharts.Point#event:select\n     * @emits Highcharts.Point#event:unselect\n     */\n    Point.prototype.select = function (selected, accumulate) {\n        var point = this,\n            series = point.series,\n            chart = series.chart;\n        selected = Point_pick(selected, !point.selected);\n        this.selectedStaging = selected;\n        // Fire the event with the default handler\n        point.firePointEvent(selected ? 'select' : 'unselect', { accumulate: accumulate }, function () {\n            /**\n             * Whether the point is selected or not.\n             *\n             * @see Point#select\n             * @see Chart#getSelectedPoints\n             *\n             * @name Highcharts.Point#selected\n             * @type {boolean}\n             */\n            point.selected = point.options.selected = selected;\n            series.options.data[series.data.indexOf(point)] =\n                point.options;\n            point.setState(selected && 'select');\n            // Unselect all other points unless Ctrl or Cmd + click\n            if (!accumulate) {\n                chart.getSelectedPoints().forEach(function (loopPoint) {\n                    var loopSeries = loopPoint.series;\n                    if (loopPoint.selected && loopPoint !== point) {\n                        loopPoint.selected = loopPoint.options.selected =\n                            false;\n                        loopSeries.options.data[loopSeries.data.indexOf(loopPoint)] = loopPoint.options;\n                        // Programmatically selecting a point should restore\n                        // normal state, but when click happened on other\n                        // point, set inactive state to match other points\n                        loopPoint.setState(chart.hoverPoints &&\n                            loopSeries.options.inactiveOtherPoints ?\n                            'inactive' : '');\n                        loopPoint.firePointEvent('unselect');\n                    }\n                });\n            }\n        });\n        delete this.selectedStaging;\n    };\n    /**\n     * Runs on mouse over the point. Called internally from mouse and touch\n     * events.\n     *\n     * @function Highcharts.Point#onMouseOver\n     *\n     * @param {Highcharts.PointerEventObject} [e]\n     *        The event arguments.\n     */\n    Point.prototype.onMouseOver = function (e) {\n        var point = this,\n            series = point.series,\n            _a = series.chart,\n            inverted = _a.inverted,\n            pointer = _a.pointer;\n        if (pointer) {\n            e = e ?\n                pointer.normalize(e) :\n                // In cases where onMouseOver is called directly without an\n                // event\n                pointer.getChartCoordinatesFromPoint(point, inverted);\n            pointer.runPointActions(e, point);\n        }\n    };\n    /**\n     * Runs on mouse out from the point. Called internally from mouse and touch\n     * events.\n     *\n     * @function Highcharts.Point#onMouseOut\n     * @emits Highcharts.Point#event:mouseOut\n     */\n    Point.prototype.onMouseOut = function () {\n        var point = this,\n            chart = point.series.chart;\n        point.firePointEvent('mouseOut');\n        if (!point.series.options.inactiveOtherPoints) {\n            (chart.hoverPoints || []).forEach(function (p) {\n                p.setState();\n            });\n        }\n        chart.hoverPoints = chart.hoverPoint = null;\n    };\n    /**\n     * Manage specific event from the series' and point's options. Only do it on\n     * demand, to save processing time on hovering.\n     *\n     * @private\n     * @function Highcharts.Point#importEvents\n     */\n    Point.prototype.manageEvent = function (eventType) {\n        var _a,\n            _b,\n            _c,\n            _d,\n            _e,\n            _f,\n            _g;\n        var point = this,\n            options = Point_merge(point.series.options.point,\n            point.options),\n            userEvent = (_a = options.events) === null || _a === void 0 ? void 0 : _a[eventType];\n        if (Point_isFunction(userEvent) &&\n            (!((_b = point.hcEvents) === null || _b === void 0 ? void 0 : _b[eventType]) ||\n                // Some HC modules, like marker-clusters, draggable-poins etc.\n                // use events in their logic, so we need to be sure, that\n                // callback function is different\n                ((_d = (_c = point.hcEvents) === null || _c === void 0 ? void 0 : _c[eventType]) === null || _d === void 0 ? void 0 : _d.map(function (el) { return el.fn; }).indexOf(userEvent)) === -1)) {\n            // While updating the existing callback event the old one should be\n            // removed\n            (_e = point.importedUserEvent) === null || _e === void 0 ? void 0 : _e.call(point);\n            point.importedUserEvent = Point_addEvent(point, eventType, userEvent);\n            if (point.hcEvents) {\n                point.hcEvents[eventType].userEvent = true;\n            }\n        }\n        else if (point.importedUserEvent &&\n            !userEvent &&\n            ((_f = point.hcEvents) === null || _f === void 0 ? void 0 : _f[eventType]) &&\n            ((_g = point.hcEvents) === null || _g === void 0 ? void 0 : _g[eventType].userEvent)) {\n            Point_removeEvent(point, eventType);\n            delete point.hcEvents[eventType];\n            if (!Object.keys(point.hcEvents)) {\n                delete point.importedUserEvent;\n            }\n        }\n    };\n    /**\n     * Set the point's state.\n     *\n     * @function Highcharts.Point#setState\n     *\n     * @param {Highcharts.PointStateValue|\"\"} [state]\n     *        The new state, can be one of `'hover'`, `'select'`, `'inactive'`,\n     *        or `''` (an empty string), `'normal'` or `undefined` to set to\n     *        normal state.\n     * @param {boolean} [move]\n     *        State for animation.\n     *\n     * @emits Highcharts.Point#event:afterSetState\n     */\n    Point.prototype.setState = function (state, move) {\n        var _a;\n        var point = this,\n            series = point.series,\n            previousState = point.state,\n            stateOptions = (series.options.states[state || 'normal'] ||\n                {}),\n            markerOptions = (Point_defaultOptions.plotOptions[series.type].marker &&\n                series.options.marker),\n            normalDisabled = (markerOptions && markerOptions.enabled === false),\n            markerStateOptions = ((markerOptions &&\n                markerOptions.states &&\n                markerOptions.states[state || 'normal']) || {}),\n            stateDisabled = markerStateOptions.enabled === false,\n            pointMarker = point.marker || {},\n            chart = series.chart,\n            hasMarkers = (markerOptions && series.markerAttribs);\n        var halo = series.halo,\n            markerAttribs,\n            pointAttribs,\n            pointAttribsAnimation,\n            stateMarkerGraphic = series.stateMarkerGraphic,\n            newSymbol;\n        state = state || ''; // Empty string\n        if (\n        // Already has this state\n        (state === point.state && !move) ||\n            // Selected points don't respond to hover\n            (point.selected && state !== 'select') ||\n            // Series' state options is disabled\n            (stateOptions.enabled === false) ||\n            // General point marker's state options is disabled\n            (state && (stateDisabled ||\n                (normalDisabled &&\n                    markerStateOptions.enabled === false))) ||\n            // Individual point marker's state options is disabled\n            (state &&\n                pointMarker.states &&\n                pointMarker.states[state] &&\n                pointMarker.states[state].enabled === false) // #1610\n        ) {\n            return;\n        }\n        point.state = state;\n        if (hasMarkers) {\n            markerAttribs = series.markerAttribs(point, state);\n        }\n        // Apply hover styles to the existing point\n        // Prevent from mocked null points (#14966)\n        if (point.graphic && !point.hasMockGraphic) {\n            if (previousState) {\n                point.graphic.removeClass('highcharts-point-' + previousState);\n            }\n            if (state) {\n                point.graphic.addClass('highcharts-point-' + state);\n            }\n            if (!chart.styledMode) {\n                pointAttribs = series.pointAttribs(point, state);\n                pointAttribsAnimation = Point_pick(chart.options.chart.animation, stateOptions.animation);\n                var opacity_1 = pointAttribs.opacity;\n                // Some inactive points (e.g. slices in pie) should apply\n                // opacity also for their labels\n                if (series.options.inactiveOtherPoints && Point_isNumber(opacity_1)) {\n                    (point.dataLabels || []).forEach(function (label) {\n                        if (label &&\n                            !label.hasClass('highcharts-data-label-hidden')) {\n                            label.animate({ opacity: opacity_1 }, pointAttribsAnimation);\n                            if (label.connector) {\n                                label.connector.animate({ opacity: opacity_1 }, pointAttribsAnimation);\n                            }\n                        }\n                    });\n                }\n                point.graphic.animate(pointAttribs, pointAttribsAnimation);\n            }\n            if (markerAttribs) {\n                point.graphic.animate(markerAttribs, Point_pick(\n                // Turn off globally:\n                chart.options.chart.animation, markerStateOptions.animation, markerOptions.animation));\n            }\n            // Zooming in from a range with no markers to a range with markers\n            if (stateMarkerGraphic) {\n                stateMarkerGraphic.hide();\n            }\n        }\n        else {\n            // If a graphic is not applied to each point in the normal state,\n            // create a shared graphic for the hover state\n            if (state && markerStateOptions) {\n                newSymbol = pointMarker.symbol || series.symbol;\n                // If the point has another symbol than the previous one, throw\n                // away the state marker graphic and force a new one (#1459)\n                if (stateMarkerGraphic &&\n                    stateMarkerGraphic.currentSymbol !== newSymbol) {\n                    stateMarkerGraphic = stateMarkerGraphic.destroy();\n                }\n                // Add a new state marker graphic\n                if (markerAttribs) {\n                    if (!stateMarkerGraphic) {\n                        if (newSymbol) {\n                            series.stateMarkerGraphic = stateMarkerGraphic =\n                                chart.renderer\n                                    .symbol(newSymbol, markerAttribs.x, markerAttribs.y, markerAttribs.width, markerAttribs.height, Point_merge(markerOptions, markerStateOptions))\n                                    .add(series.markerGroup);\n                            stateMarkerGraphic.currentSymbol = newSymbol;\n                        }\n                        // Move the existing graphic\n                    }\n                    else {\n                        stateMarkerGraphic[move ? 'animate' : 'attr']({\n                            x: markerAttribs.x,\n                            y: markerAttribs.y\n                        });\n                    }\n                }\n                if (!chart.styledMode && stateMarkerGraphic &&\n                    point.state !== 'inactive') {\n                    stateMarkerGraphic.attr(series.pointAttribs(point, state));\n                }\n            }\n            if (stateMarkerGraphic) {\n                stateMarkerGraphic[state && point.isInside ? 'show' : 'hide'](); // #2450\n                stateMarkerGraphic.element.point = point; // #4310\n                stateMarkerGraphic.addClass(point.getClassName(), true);\n            }\n        }\n        // Show me your halo\n        var haloOptions = stateOptions.halo;\n        var markerGraphic = (point.graphic || stateMarkerGraphic);\n        var markerVisibility = (markerGraphic && markerGraphic.visibility || 'inherit');\n        if (haloOptions &&\n            haloOptions.size &&\n            markerGraphic &&\n            markerVisibility !== 'hidden' &&\n            !point.isCluster) {\n            if (!halo) {\n                series.halo = halo = chart.renderer.path()\n                    // #5818, #5903, #6705\n                    .add(markerGraphic.parentGroup);\n            }\n            halo.show()[move ? 'animate' : 'attr']({\n                d: point.haloPath(haloOptions.size)\n            });\n            halo.attr({\n                'class': 'highcharts-halo highcharts-color-' +\n                    Point_pick(point.colorIndex, series.colorIndex) +\n                    (point.className ? ' ' + point.className : ''),\n                'visibility': markerVisibility,\n                'zIndex': -1 // #4929, #8276\n            });\n            halo.point = point; // #6055\n            if (!chart.styledMode) {\n                halo.attr(Point_extend({\n                    'fill': point.color || series.color,\n                    'fill-opacity': haloOptions.opacity\n                }, HTML_AST.filterUserAttributes(haloOptions.attributes || {})));\n            }\n        }\n        else if (((_a = halo === null || halo === void 0 ? void 0 : halo.point) === null || _a === void 0 ? void 0 : _a.haloPath) &&\n            !halo.point.destroyed) {\n            // Animate back to 0 on the current halo point (#6055)\n            halo.animate({ d: halo.point.haloPath(0) }, null, \n            // Hide after unhovering. The `complete` callback runs in the\n            // halo's context (#7681).\n            halo.hide);\n        }\n        Point_fireEvent(point, 'afterSetState', { state: state });\n    };\n    /**\n     * Get the path definition for the halo, which is usually a shadow-like\n     * circle around the currently hovered point.\n     *\n     * @function Highcharts.Point#haloPath\n     *\n     * @param {number} size\n     *        The radius of the circular halo.\n     *\n     * @return {Highcharts.SVGPathArray}\n     *         The path definition.\n     */\n    Point.prototype.haloPath = function (size) {\n        var pos = this.pos();\n        return pos ? this.series.chart.renderer.symbols.circle(Point_crisp(pos[0], 1) - size, pos[1] - size, size * 2, size * 2) : [];\n    };\n    return Point;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Series_Point = (Point);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * Function callback when a series point is clicked. Return false to cancel the\n * action.\n *\n * @callback Highcharts.PointClickCallbackFunction\n *\n * @param {Highcharts.Point} this\n *        The point where the event occurred.\n *\n * @param {Highcharts.PointClickEventObject} event\n *        Event arguments.\n */\n/**\n * Common information for a click event on a series point.\n *\n * @interface Highcharts.PointClickEventObject\n * @extends Highcharts.PointerEventObject\n */ /**\n* Clicked point.\n* @name Highcharts.PointClickEventObject#point\n* @type {Highcharts.Point}\n*/\n/**\n * Gets fired when the mouse leaves the area close to the point.\n *\n * @callback Highcharts.PointMouseOutCallbackFunction\n *\n * @param {Highcharts.Point} this\n *        Point where the event occurred.\n *\n * @param {global.PointerEvent} event\n *        Event that occurred.\n */\n/**\n * Gets fired when the mouse enters the area close to the point.\n *\n * @callback Highcharts.PointMouseOverCallbackFunction\n *\n * @param {Highcharts.Point} this\n *        Point where the event occurred.\n *\n * @param {global.Event} event\n *        Event that occurred.\n */\n/**\n * The generic point options for all series.\n *\n * In TypeScript you have to extend `PointOptionsObject` with an additional\n * declaration to allow custom data options:\n *\n * ```\n * declare interface PointOptionsObject {\n *     customProperty: string;\n * }\n * ```\n *\n * @interface Highcharts.PointOptionsObject\n */\n/**\n * Possible option types for a data point. Use `null` to indicate a gap.\n *\n * @typedef {number|string|Highcharts.PointOptionsObject|Array<(number|string|null)>|null} Highcharts.PointOptionsType\n */\n/**\n * Gets fired when the point is removed using the `.remove()` method.\n *\n * @callback Highcharts.PointRemoveCallbackFunction\n *\n * @param {Highcharts.Point} this\n *        Point where the event occurred.\n *\n * @param {global.Event} event\n *        Event that occurred.\n */\n/**\n * Possible key values for the point state options.\n *\n * @typedef {\"hover\"|\"inactive\"|\"normal\"|\"select\"} Highcharts.PointStateValue\n */\n/**\n * Gets fired when the point is updated programmatically through the `.update()`\n * method.\n *\n * @callback Highcharts.PointUpdateCallbackFunction\n *\n * @param {Highcharts.Point} this\n *        Point where the event occurred.\n *\n * @param {Highcharts.PointUpdateEventObject} event\n *        Event that occurred.\n */\n/**\n * Information about the update event.\n *\n * @interface Highcharts.PointUpdateEventObject\n * @extends global.Event\n */ /**\n* Options data of the update event.\n* @name Highcharts.PointUpdateEventObject#options\n* @type {Highcharts.PointOptionsType}\n*/\n/**\n * @interface Highcharts.PointEventsOptionsObject\n */ /**\n* Fires when the point is selected either programmatically or following a click\n* on the point. One parameter, `event`, is passed to the function. Returning\n* `false` cancels the operation.\n* @name Highcharts.PointEventsOptionsObject#select\n* @type {Highcharts.PointSelectCallbackFunction|undefined}\n*/ /**\n* Fires when the point is unselected either programmatically or following a\n* click on the point. One parameter, `event`, is passed to the function.\n* Returning `false` cancels the operation.\n* @name Highcharts.PointEventsOptionsObject#unselect\n* @type {Highcharts.PointUnselectCallbackFunction|undefined}\n*/\n/**\n * Information about the select/unselect event.\n *\n * @interface Highcharts.PointInteractionEventObject\n * @extends global.Event\n */ /**\n* @name Highcharts.PointInteractionEventObject#accumulate\n* @type {boolean}\n*/\n/**\n * Gets fired when the point is selected either programmatically or following a\n * click on the point.\n *\n * @callback Highcharts.PointSelectCallbackFunction\n *\n * @param {Highcharts.Point} this\n *        Point where the event occurred.\n *\n * @param {Highcharts.PointInteractionEventObject} event\n *        Event that occurred.\n */\n/**\n * Fires when the point is unselected either programmatically or following a\n * click on the point.\n *\n * @callback Highcharts.PointUnselectCallbackFunction\n *\n * @param {Highcharts.Point} this\n *        Point where the event occurred.\n *\n * @param {Highcharts.PointInteractionEventObject} event\n *        Event that occurred.\n */\n''; // Keeps doclets above in JS file.\n\n;// ./code/es5/es-modules/Core/Pointer.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar Pointer_assign = (undefined && undefined.__assign) || function () {\n    Pointer_assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return Pointer_assign.apply(this, arguments);\n};\n\nvar Pointer_color = Color_Color.parse;\n\nvar Pointer_charts = Core_Globals.charts, Pointer_composed = Core_Globals.composed, Pointer_isTouchDevice = Core_Globals.isTouchDevice;\n\nvar Pointer_addEvent = Core_Utilities.addEvent, Pointer_attr = Core_Utilities.attr, Pointer_css = Core_Utilities.css, Pointer_extend = Core_Utilities.extend, Pointer_find = Core_Utilities.find, Pointer_fireEvent = Core_Utilities.fireEvent, Pointer_isNumber = Core_Utilities.isNumber, Pointer_isObject = Core_Utilities.isObject, Pointer_objectEach = Core_Utilities.objectEach, Pointer_offset = Core_Utilities.offset, Pointer_pick = Core_Utilities.pick, Pointer_pushUnique = Core_Utilities.pushUnique, Pointer_splat = Core_Utilities.splat;\n/* *\n *\n *  Class\n *\n * */\n/**\n * The mouse and touch tracker object. Each {@link Chart} item has one\n * associated Pointer item that can be accessed from the  {@link Chart.pointer}\n * property.\n *\n * @class\n * @name Highcharts.Pointer\n *\n * @param {Highcharts.Chart} chart\n * The chart instance.\n *\n * @param {Highcharts.Options} options\n * The root options object. The pointer uses options from the chart and tooltip\n * structures.\n */\nvar Pointer = /** @class */ (function () {\n    /**\n     * Initialize the Pointer.\n     *\n     * @private\n     * @function Highcharts.Pointer#init\n     *\n     * @param {Highcharts.Chart} chart\n     * The Chart instance.\n     *\n     * @param {Highcharts.Options} options\n     * The root options object. The pointer uses options from the chart and\n     * tooltip structures.\n     */\n    function Pointer(chart, options) {\n        var _a;\n        this.hasDragged = 0;\n        this.pointerCaptureEventsToUnbind = [];\n        this.eventsToUnbind = [];\n        // Store references\n        this.options = options;\n        this.chart = chart;\n        // Do we need to handle click on a touch device?\n        this.runChartClick = Boolean((_a = options.chart.events) === null || _a === void 0 ? void 0 : _a.click);\n        this.pinchDown = [];\n        this.setDOMEvents();\n        Pointer_fireEvent(this, 'afterInit');\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Set inactive state to all series that are not currently hovered,\n     * or, if `inactiveOtherPoints` is set to true, set inactive state to\n     * all points within that series.\n     *\n     * @private\n     * @function Highcharts.Pointer#applyInactiveState\n     *\n     * @param {Array<Highcharts.Point>} points\n     * Currently hovered points\n     */\n    Pointer.prototype.applyInactiveState = function (points) {\n        var activeSeries = [],\n            series;\n        // Get all active series from the hovered points\n        (points || []).forEach(function (item) {\n            series = item.series;\n            // Include itself\n            activeSeries.push(series);\n            // Include parent series\n            if (series.linkedParent) {\n                activeSeries.push(series.linkedParent);\n            }\n            // Include all child series\n            if (series.linkedSeries) {\n                activeSeries = activeSeries.concat(series.linkedSeries);\n            }\n            // Include navigator series\n            if (series.navigatorSeries) {\n                activeSeries.push(series.navigatorSeries);\n            }\n        });\n        // Now loop over all series, filtering out active series\n        this.chart.series.forEach(function (inactiveSeries) {\n            if (activeSeries.indexOf(inactiveSeries) === -1) {\n                // Inactive series\n                inactiveSeries.setState('inactive', true);\n            }\n            else if (inactiveSeries.options.inactiveOtherPoints) {\n                // Active series, but other points should be inactivated\n                inactiveSeries.setAllPointsToState('inactive');\n            }\n        });\n    };\n    /**\n     * Destroys the Pointer object and disconnects DOM events.\n     *\n     * @function Highcharts.Pointer#destroy\n     */\n    Pointer.prototype.destroy = function () {\n        var pointer = this;\n        this.eventsToUnbind.forEach(function (unbind) { return unbind(); });\n        this.eventsToUnbind = [];\n        if (!Core_Globals.chartCount) {\n            Pointer.unbindDocumentMouseUp.forEach(function (el) { return el.unbind(); });\n            Pointer.unbindDocumentMouseUp.length = 0;\n            if (Pointer.unbindDocumentTouchEnd) {\n                Pointer.unbindDocumentTouchEnd = (Pointer.unbindDocumentTouchEnd());\n            }\n        }\n        // Memory and CPU leak\n        clearInterval(pointer.tooltipTimeout);\n        Pointer_objectEach(pointer, function (_val, prop) {\n            pointer[prop] = void 0;\n        });\n    };\n    /**\n     * Calculate attrs for selection marker.\n     * @private\n     * @function Highcharts.Pointer#getSelectionMarkerAttrs\n     * @emits getSelectionMarkerAttrs\n     */\n    Pointer.prototype.getSelectionMarkerAttrs = function (chartX, chartY) {\n        var _this = this;\n        var e = {\n                args: { chartX: chartX,\n            chartY: chartY },\n                attrs: {},\n                shapeType: 'rect'\n            };\n        Pointer_fireEvent(this, 'getSelectionMarkerAttrs', e, function (e) {\n            var _a = _this,\n                chart = _a.chart,\n                zoomHor = _a.zoomHor,\n                zoomVert = _a.zoomVert,\n                _b = chart.mouseDownX,\n                mouseDownX = _b === void 0 ? 0 : _b,\n                _c = chart.mouseDownY,\n                mouseDownY = _c === void 0 ? 0 : _c,\n                attrs = e.attrs;\n            var size;\n            attrs.x = chart.plotLeft;\n            attrs.y = chart.plotTop;\n            attrs.width = zoomHor ? 1 : chart.plotWidth;\n            attrs.height = zoomVert ? 1 : chart.plotHeight;\n            // Adjust the width of the selection marker. Firefox needs at\n            // least one pixel width or height in order to return a bounding\n            // box.\n            if (zoomHor) {\n                size = chartX - mouseDownX;\n                attrs.width = Math.max(1, Math.abs(size));\n                attrs.x = (size > 0 ? 0 : size) + mouseDownX;\n            }\n            // Adjust the height of the selection marker\n            if (zoomVert) {\n                size = chartY - mouseDownY;\n                attrs.height = Math.max(1, Math.abs(size));\n                attrs.y = (size > 0 ? 0 : size) + mouseDownY;\n            }\n        });\n        return e;\n    };\n    /**\n     * Perform a drag operation in response to a mousemove event while the mouse\n     * is down.\n     * @private\n     * @function Highcharts.Pointer#drag\n     */\n    Pointer.prototype.drag = function (e) {\n        var chart = this.chart,\n            _a = chart.mouseDownX,\n            mouseDownX = _a === void 0 ? 0 : _a,\n            _b = chart.mouseDownY,\n            mouseDownY = _b === void 0 ? 0 : _b,\n            _c = chart.options.chart,\n            panning = _c.panning,\n            panKey = _c.panKey,\n            selectionMarkerFill = _c.selectionMarkerFill,\n            plotLeft = chart.plotLeft,\n            plotTop = chart.plotTop,\n            plotWidth = chart.plotWidth,\n            plotHeight = chart.plotHeight,\n            panningEnabled = Pointer_isObject(panning) ?\n                panning.enabled :\n                panning,\n            panKeyPressed = panKey && e[\"\" + panKey + \"Key\"];\n        var chartX = e.chartX,\n            chartY = e.chartY,\n            clickedInside,\n            selectionMarker = this.selectionMarker;\n        // If the device supports both touch and mouse (like IE11), and we are\n        // touch-dragging inside the plot area, don't handle the mouse event.\n        // #4339.\n        if (selectionMarker && selectionMarker.touch) {\n            return;\n        }\n        // If the mouse is outside the plot area, adjust to coordinates\n        // inside to prevent the selection marker from going outside\n        if (chartX < plotLeft) {\n            chartX = plotLeft;\n        }\n        else if (chartX > plotLeft + plotWidth) {\n            chartX = plotLeft + plotWidth;\n        }\n        if (chartY < plotTop) {\n            chartY = plotTop;\n        }\n        else if (chartY > plotTop + plotHeight) {\n            chartY = plotTop + plotHeight;\n        }\n        // Determine if the mouse has moved more than 10px\n        this.hasDragged = Math.sqrt(Math.pow(mouseDownX - chartX, 2) +\n            Math.pow(mouseDownY - chartY, 2));\n        if (this.hasDragged > 10) {\n            clickedInside = chart.isInsidePlot(mouseDownX - plotLeft, mouseDownY - plotTop, {\n                visiblePlotOnly: true\n            });\n            var _d = this.getSelectionMarkerAttrs(chartX,\n                chartY),\n                shapeType = _d.shapeType,\n                attrs = _d.attrs;\n            // Make a selection\n            if ((chart.hasCartesianSeries || chart.mapView) &&\n                this.hasZoom &&\n                clickedInside &&\n                !panKeyPressed) {\n                if (!selectionMarker) {\n                    this.selectionMarker = selectionMarker =\n                        chart.renderer[shapeType]();\n                    selectionMarker\n                        .attr({\n                        'class': 'highcharts-selection-marker',\n                        zIndex: 7\n                    })\n                        .add();\n                    if (!chart.styledMode) {\n                        selectionMarker.attr({\n                            fill: selectionMarkerFill ||\n                                Pointer_color(\"#334eff\" /* Palette.highlightColor80 */)\n                                    .setOpacity(0.25).get()\n                        });\n                    }\n                }\n            }\n            if (selectionMarker) {\n                selectionMarker.attr(attrs);\n            }\n            // Panning\n            if (clickedInside && !selectionMarker && panningEnabled) {\n                chart.pan(e, panning);\n            }\n        }\n    };\n    /**\n     * Start a drag operation.\n     * @private\n     * @function Highcharts.Pointer#dragStart\n     */\n    Pointer.prototype.dragStart = function (e) {\n        var chart = this.chart;\n        // Record the start position\n        chart.mouseIsDown = e.type;\n        chart.cancelClick = false;\n        chart.mouseDownX = e.chartX;\n        chart.mouseDownY = e.chartY;\n    };\n    /**\n     * Get selection box to calculate extremes\n     * @private\n     * @function Highcharts.Pointer#getSelectionBox\n     * @emits getSelectionBox\n     */\n    Pointer.prototype.getSelectionBox = function (marker) {\n        var e = {\n                args: { marker: marker },\n                result: marker.getBBox()\n            };\n        Pointer_fireEvent(this, 'getSelectionBox', e);\n        return e.result;\n    };\n    /**\n     * On mouse up or touch end across the entire document, drop the selection.\n     * @private\n     * @function Highcharts.Pointer#drop\n     */\n    Pointer.prototype.drop = function (e) {\n        var _this = this;\n        var _a = this,\n            chart = _a.chart,\n            selectionMarker = _a.selectionMarker;\n        // During a mouse, touch or mousewheel pan, the `startOnTick` and\n        // `endOnTick` options are ignored. Otherwise the zooming or panning\n        // would be jumpy, or even not performed because the end ticks would\n        // block it. After the touch has ended, we undo this and render again.\n        var redraw;\n        for (var _i = 0, _b = chart.axes; _i < _b.length; _i++) {\n            var axis = _b[_i];\n            if (axis.isPanning) {\n                axis.isPanning = false;\n                if (axis.options.startOnTick ||\n                    axis.options.endOnTick ||\n                    axis.series.some(function (s) { return s.boosted; })) {\n                    axis.forceRedraw = true;\n                    axis.setExtremes(axis.userMin, axis.userMax, false);\n                    redraw = true;\n                }\n            }\n        }\n        if (redraw) {\n            chart.redraw();\n        }\n        if (selectionMarker && e) {\n            // A selection has been made\n            if (this.hasDragged) {\n                var from = this.getSelectionBox(selectionMarker);\n                chart.transform({\n                    axes: chart.axes.filter(function (a) {\n                        return a.zoomEnabled &&\n                            ((a.coll === 'xAxis' && _this.zoomX) ||\n                                (a.coll === 'yAxis' && _this.zoomY));\n                    }),\n                    selection: Pointer_assign({ originalEvent: e, xAxis: [], yAxis: [] }, from),\n                    from: from\n                });\n            }\n            if (Pointer_isNumber(chart.index)) {\n                this.selectionMarker = selectionMarker.destroy();\n            }\n        }\n        // Reset all. Check isNumber because it may be destroyed on mouse up\n        // (#877)\n        if (chart && Pointer_isNumber(chart.index)) {\n            Pointer_css(chart.container, { cursor: chart._cursor });\n            chart.cancelClick = this.hasDragged > 10; // #370\n            chart.mouseIsDown = false;\n            this.hasDragged = 0;\n            this.pinchDown = [];\n        }\n    };\n    /**\n     * Finds the closest point to a set of coordinates, using the k-d-tree\n     * algorithm.\n     *\n     * @function Highcharts.Pointer#findNearestKDPoint\n     *\n     * @param {Array<Highcharts.Series>} series\n     * All the series to search in.\n     *\n     * @param {boolean|undefined} shared\n     * Whether it is a shared tooltip or not.\n     *\n     * @param {Highcharts.PointerEventObject} e\n     * The pointer event object, containing chart coordinates of the pointer.\n     *\n     * @return {Highcharts.Point|undefined}\n     * The point closest to given coordinates.\n     */\n    Pointer.prototype.findNearestKDPoint = function (series, shared, e) {\n        var closest;\n        /** @private */\n        function sort(p1, p2) {\n            var _a,\n                _b;\n            var isCloserX = p1.distX - p2.distX,\n                isCloser = p1.dist - p2.dist,\n                isAbove = (((_a = p2.series.group) === null || _a === void 0 ? void 0 : _a.zIndex) -\n                    ((_b = p1.series.group) === null || _b === void 0 ? void 0 : _b.zIndex));\n            var result;\n            // We have two points which are not in the same place on xAxis\n            // and shared tooltip:\n            if (isCloserX !== 0 && shared) { // #5721\n                result = isCloserX;\n                // Points are not exactly in the same place on x/yAxis:\n            }\n            else if (isCloser !== 0) {\n                result = isCloser;\n                // The same xAxis and yAxis position, sort by z-index:\n            }\n            else if (isAbove !== 0) {\n                result = isAbove;\n                // The same zIndex, sort by array index:\n            }\n            else {\n                result =\n                    p1.series.index > p2.series.index ?\n                        -1 :\n                        1;\n            }\n            return result;\n        }\n        series.forEach(function (s) {\n            var noSharedTooltip = s.noSharedTooltip && shared,\n                compareX = (!noSharedTooltip &&\n                    s.options.findNearestPointBy.indexOf('y') < 0),\n                point = s.searchPoint(e,\n                compareX);\n            if ( // Check that we actually found a point on the series.\n            Pointer_isObject(point, true) && point.series &&\n                // Use the new point if it is closer.\n                (!Pointer_isObject(closest, true) ||\n                    (sort(closest, point) > 0))) {\n                closest = point;\n            }\n        });\n        return closest;\n    };\n    /**\n     * @private\n     * @function Highcharts.Pointer#getChartCoordinatesFromPoint\n     */\n    Pointer.prototype.getChartCoordinatesFromPoint = function (point, inverted) {\n        var _a,\n            _b;\n        var _c = point.series,\n            xAxis = _c.xAxis,\n            yAxis = _c.yAxis,\n            shapeArgs = point.shapeArgs;\n        if (xAxis && yAxis) {\n            var x = (_b = (_a = point.clientX) !== null && _a !== void 0 ? _a : point.plotX) !== null && _b !== void 0 ? _b : 0,\n                y = point.plotY || 0;\n            if (point.isNode &&\n                shapeArgs &&\n                Pointer_isNumber(shapeArgs.x) &&\n                Pointer_isNumber(shapeArgs.y)) {\n                x = shapeArgs.x;\n                y = shapeArgs.y;\n            }\n            return inverted ? {\n                chartX: yAxis.len + yAxis.pos - y,\n                chartY: xAxis.len + xAxis.pos - x\n            } : {\n                chartX: x + xAxis.pos,\n                chartY: y + yAxis.pos\n            };\n        }\n        if (shapeArgs && shapeArgs.x && shapeArgs.y) {\n            // E.g. pies do not have axes\n            return {\n                chartX: shapeArgs.x,\n                chartY: shapeArgs.y\n            };\n        }\n    };\n    /**\n     * Return the cached chartPosition if it is available on the Pointer,\n     * otherwise find it. Running offset is quite expensive, so it should be\n     * avoided when we know the chart hasn't moved.\n     *\n     * @function Highcharts.Pointer#getChartPosition\n     *\n     * @return {Highcharts.ChartPositionObject}\n     * The offset of the chart container within the page\n     */\n    Pointer.prototype.getChartPosition = function () {\n        if (this.chartPosition) {\n            return this.chartPosition;\n        }\n        var container = this.chart.container;\n        var pos = Pointer_offset(container);\n        this.chartPosition = {\n            left: pos.left,\n            top: pos.top,\n            scaleX: 1,\n            scaleY: 1\n        };\n        var offsetHeight = container.offsetHeight,\n            offsetWidth = container.offsetWidth;\n        // #13342 - tooltip was not visible in Chrome, when chart\n        // updates height.\n        if (offsetWidth > 2 && // #13342\n            offsetHeight > 2 // #13342\n        ) {\n            this.chartPosition.scaleX = pos.width / offsetWidth;\n            this.chartPosition.scaleY = pos.height / offsetHeight;\n        }\n        return this.chartPosition;\n    };\n    /**\n     * Get the click position in terms of axis values.\n     *\n     * @function Highcharts.Pointer#getCoordinates\n     *\n     * @param {Highcharts.PointerEventObject} e\n     * Pointer event, extended with `chartX` and `chartY` properties.\n     *\n     * @return {Highcharts.PointerAxisCoordinatesObject}\n     * Axis coordinates.\n     */\n    Pointer.prototype.getCoordinates = function (e) {\n        var coordinates = {\n                xAxis: [],\n                yAxis: []\n            };\n        for (var _i = 0, _a = this.chart.axes; _i < _a.length; _i++) {\n            var axis = _a[_i];\n            coordinates[axis.isXAxis ? 'xAxis' : 'yAxis'].push({\n                axis: axis,\n                value: axis.toValue(e[axis.horiz ? 'chartX' : 'chartY'])\n            });\n        }\n        return coordinates;\n    };\n    /**\n     * Calculates what is the current hovered point/points and series.\n     *\n     * @private\n     * @function Highcharts.Pointer#getHoverData\n     *\n     * @param {Highcharts.Point|undefined} existingHoverPoint\n     * The point currently being hovered.\n     *\n     * @param {Highcharts.Series|undefined} existingHoverSeries\n     * The series currently being hovered.\n     *\n     * @param {Array<Highcharts.Series>} series\n     * All the series in the chart.\n     *\n     * @param {boolean} isDirectTouch\n     * Is the pointer directly hovering the point.\n     *\n     * @param {boolean|undefined} shared\n     * Whether it is a shared tooltip or not.\n     *\n     * @param {Highcharts.PointerEventObject} [e]\n     * The triggering event, containing chart coordinates of the pointer.\n     *\n     * @return {Object}\n     * Object containing resulting hover data: hoverPoint, hoverSeries, and\n     * hoverPoints.\n     */\n    Pointer.prototype.getHoverData = function (existingHoverPoint, existingHoverSeries, series, isDirectTouch, shared, e) {\n        var hoverPoints = [],\n            useExisting = !!(isDirectTouch && existingHoverPoint),\n            filter = function (s) {\n                return (s.visible &&\n                    !(!shared && s.directTouch) && // #3821\n                    Pointer_pick(s.options.enableMouseTracking,\n            true));\n        };\n        var hoverSeries = existingHoverSeries, \n            // Which series to look in for the hover point\n            searchSeries, \n            // Parameters needed for beforeGetHoverData event.\n            eventArgs = {\n                chartX: e ? e.chartX : void 0,\n                chartY: e ? e.chartY : void 0,\n                shared: shared\n            };\n        // Find chart.hoverPane and update filter method in polar.\n        Pointer_fireEvent(this, 'beforeGetHoverData', eventArgs);\n        var notSticky = hoverSeries && !hoverSeries.stickyTracking;\n        searchSeries = notSticky ?\n            // Only search on hovered series if it has stickyTracking false\n            [hoverSeries] :\n            // Filter what series to look in.\n            series.filter(function (s) { return s.stickyTracking &&\n                (eventArgs.filter || filter)(s); });\n        // Use existing hovered point or find the one closest to coordinates.\n        var hoverPoint = useExisting || !e ?\n                existingHoverPoint :\n                this.findNearestKDPoint(searchSeries,\n            shared,\n            e);\n        // Assign hover series\n        hoverSeries = hoverPoint && hoverPoint.series;\n        // If we have a hoverPoint, assign hoverPoints.\n        if (hoverPoint) {\n            // When tooltip is shared, it displays more than one point\n            if (shared && !hoverSeries.noSharedTooltip) {\n                searchSeries = series.filter(function (s) {\n                    return eventArgs.filter ?\n                        eventArgs.filter(s) : filter(s) && !s.noSharedTooltip;\n                });\n                // Get all points with the same x value as the hoverPoint\n                searchSeries.forEach(function (s) {\n                    var point = Pointer_find(s.points,\n                        function (p) {\n                            return p.x === hoverPoint.x && !p.isNull;\n                    });\n                    if (Pointer_isObject(point)) {\n                        /*\n                        * Boost returns a minimal point. Convert it to a usable\n                        * point for tooltip and states.\n                        */\n                        if (s.boosted && s.boost) {\n                            point = s.boost.getPoint(point);\n                        }\n                        hoverPoints.push(point);\n                    }\n                });\n            }\n            else {\n                hoverPoints.push(hoverPoint);\n            }\n        }\n        // Check whether the hoverPoint is inside pane we are hovering over.\n        eventArgs = { hoverPoint: hoverPoint };\n        Pointer_fireEvent(this, 'afterGetHoverData', eventArgs);\n        return {\n            hoverPoint: eventArgs.hoverPoint,\n            hoverSeries: hoverSeries,\n            hoverPoints: hoverPoints\n        };\n    };\n    /**\n     * @private\n     * @function Highcharts.Pointer#getPointFromEvent\n     */\n    Pointer.prototype.getPointFromEvent = function (e) {\n        var target = e.target,\n            point;\n        while (target && !point) {\n            point = target.point;\n            target = target.parentNode;\n        }\n        return point;\n    };\n    /**\n     * @private\n     * @function Highcharts.Pointer#onTrackerMouseOut\n     */\n    Pointer.prototype.onTrackerMouseOut = function (e) {\n        var chart = this.chart;\n        var relatedTarget = e.relatedTarget;\n        var series = chart.hoverSeries;\n        this.isDirectTouch = false;\n        if (series &&\n            relatedTarget &&\n            !series.stickyTracking &&\n            !this.inClass(relatedTarget, 'highcharts-tooltip') &&\n            (!this.inClass(relatedTarget, 'highcharts-series-' + series.index) || // #2499, #4465, #5553\n                !this.inClass(relatedTarget, 'highcharts-tracker'))) {\n            series.onMouseOut();\n        }\n    };\n    /**\n     * Utility to detect whether an element has, or has a parent with, a\n     * specific class name. Used on detection of tracker objects and on deciding\n     * whether hovering the tooltip should cause the active series to mouse out.\n     *\n     * @function Highcharts.Pointer#inClass\n     *\n     * @param {Highcharts.SVGDOMElement|Highcharts.HTMLDOMElement} element\n     * The element to investigate.\n     *\n     * @param {string} className\n     * The class name to look for.\n     *\n     * @return {boolean|undefined}\n     * True if either the element or one of its parents has the given class\n     * name.\n     */\n    Pointer.prototype.inClass = function (element, className) {\n        var elem = element,\n            elemClassName;\n        while (elem) {\n            elemClassName = Pointer_attr(elem, 'class');\n            if (elemClassName) {\n                if (elemClassName.indexOf(className) !== -1) {\n                    return true;\n                }\n                if (elemClassName.indexOf('highcharts-container') !== -1) {\n                    return false;\n                }\n            }\n            elem = elem.parentElement;\n        }\n    };\n    /**\n     * Takes a browser event object and extends it with custom Highcharts\n     * properties `chartX` and `chartY` in order to work on the internal\n     * coordinate system.\n     *\n     * On map charts, the properties `lon` and `lat` are added to the event\n     * object given that the chart has projection information.\n     *\n     * @function Highcharts.Pointer#normalize\n     *\n     * @param {global.MouseEvent|global.PointerEvent|global.TouchEvent} e\n     * Event object in standard browsers.\n     *\n     * @param {Highcharts.OffsetObject} [chartPosition]\n     * Additional chart offset.\n     *\n     * @return {Highcharts.PointerEventObject}\n     * A browser event with extended properties `chartX` and `chartY`.\n     */\n    Pointer.prototype.normalize = function (e, chartPosition) {\n        var touches = e.touches;\n        // Position for iOS (#2757)\n        var ePos = (touches ?\n                touches.length ?\n                    touches.item(0) :\n                    (Pointer_pick(// #13534\n                    touches.changedTouches,\n            e.changedTouches))[0] :\n                e);\n        // Get mouse position\n        if (!chartPosition) {\n            chartPosition = this.getChartPosition();\n        }\n        var chartX = ePos.pageX - chartPosition.left,\n            chartY = ePos.pageY - chartPosition.top;\n        // #11329 - when there is scaling on a parent element, we need to take\n        // this into account\n        chartX /= chartPosition.scaleX;\n        chartY /= chartPosition.scaleY;\n        return Pointer_extend(e, {\n            chartX: Math.round(chartX),\n            chartY: Math.round(chartY)\n        });\n    };\n    /**\n     * @private\n     * @function Highcharts.Pointer#onContainerClick\n     */\n    Pointer.prototype.onContainerClick = function (e) {\n        var chart = this.chart;\n        var hoverPoint = chart.hoverPoint;\n        var pEvt = this.normalize(e);\n        var plotLeft = chart.plotLeft;\n        var plotTop = chart.plotTop;\n        if (!chart.cancelClick) {\n            // On tracker click, fire the series and point events. #783, #1583\n            if (hoverPoint &&\n                this.inClass(pEvt.target, 'highcharts-tracker')) {\n                // The series click event\n                Pointer_fireEvent(hoverPoint.series, 'click', Pointer_extend(pEvt, {\n                    point: hoverPoint\n                }));\n                // The point click event\n                if (chart.hoverPoint) { // It may be destroyed (#1844)\n                    hoverPoint.firePointEvent('click', pEvt);\n                }\n                // When clicking outside a tracker, fire a chart event\n            }\n            else {\n                Pointer_extend(pEvt, this.getCoordinates(pEvt));\n                // Fire a click event in the chart\n                if (chart.isInsidePlot(pEvt.chartX - plotLeft, pEvt.chartY - plotTop, {\n                    visiblePlotOnly: true\n                })) {\n                    Pointer_fireEvent(chart, 'click', pEvt);\n                }\n            }\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.Pointer#onContainerMouseDown\n     */\n    Pointer.prototype.onContainerMouseDown = function (e) {\n        var _a;\n        var isPrimaryButton = ((e.buttons || e.button) & 1) === 1;\n        e = this.normalize(e);\n        // #11635, Firefox does not reliably fire move event after click scroll\n        if (Core_Globals.isFirefox &&\n            e.button !== 0) {\n            this.onContainerMouseMove(e);\n        }\n        // #11635, limiting to primary button\n        if (typeof e.button === 'undefined' ||\n            isPrimaryButton) {\n            this.zoomOption(e);\n            // #295, #13737 solve conflict between container drag and chart zoom\n            if (isPrimaryButton) {\n                (_a = e.preventDefault) === null || _a === void 0 ? void 0 : _a.call(e);\n            }\n            this.dragStart(e);\n        }\n    };\n    /**\n     * When mouse leaves the container, hide the tooltip.\n     * @private\n     * @function Highcharts.Pointer#onContainerMouseLeave\n     */\n    Pointer.prototype.onContainerMouseLeave = function (e) {\n        var pointer = (Pointer_charts[Pointer_pick(Pointer.hoverChartIndex, -1)] || {}).pointer;\n        e = this.normalize(e);\n        this.onContainerMouseMove(e);\n        // #4886, MS Touch end fires mouseleave but with no related target\n        if (pointer &&\n            !this.inClass(e.relatedTarget, 'highcharts-tooltip')) {\n            pointer.reset();\n            // Also reset the chart position, used in #149 fix\n            pointer.chartPosition = void 0;\n        }\n    };\n    /**\n     * When mouse enters the container, delete pointer's chartPosition.\n     * @private\n     * @function Highcharts.Pointer#onContainerMouseEnter\n     */\n    Pointer.prototype.onContainerMouseEnter = function () {\n        delete this.chartPosition;\n    };\n    /**\n     * The mousemove, touchmove and touchstart event handler\n     * @private\n     * @function Highcharts.Pointer#onContainerMouseMove\n     */\n    Pointer.prototype.onContainerMouseMove = function (e) {\n        var chart = this.chart,\n            tooltip = chart.tooltip,\n            pEvt = this.normalize(e);\n        this.setHoverChartIndex(e);\n        if (chart.mouseIsDown === 'mousedown' || this.touchSelect(pEvt)) {\n            this.drag(pEvt);\n        }\n        // Show the tooltip and run mouse over events (#977)\n        if (!chart.openMenu &&\n            (this.inClass(pEvt.target, 'highcharts-tracker') ||\n                chart.isInsidePlot(pEvt.chartX - chart.plotLeft, pEvt.chartY - chart.plotTop, {\n                    visiblePlotOnly: true\n                })) &&\n            // If the tooltip has stickOnContact enabled, do nothing. This\n            // applies regardless of any combinations of the `split` and\n            // `useHTML` options.\n            !(tooltip &&\n                tooltip.shouldStickOnContact(pEvt))) {\n            if (this.inClass(pEvt.target, 'highcharts-no-tooltip')) {\n                this.reset(false, 0);\n            }\n            else {\n                this.runPointActions(pEvt);\n            }\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.Pointer#onDocumentTouchEnd\n     */\n    Pointer.prototype.onDocumentTouchEnd = function (e) {\n        this.onDocumentMouseUp(e);\n    };\n    /**\n     * @private\n     * @function Highcharts.Pointer#onContainerTouchMove\n     */\n    Pointer.prototype.onContainerTouchMove = function (e) {\n        if (this.touchSelect(e)) {\n            this.onContainerMouseMove(e);\n        }\n        else {\n            this.touch(e);\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.Pointer#onContainerTouchStart\n     */\n    Pointer.prototype.onContainerTouchStart = function (e) {\n        if (this.touchSelect(e)) {\n            this.onContainerMouseDown(e);\n        }\n        else {\n            this.zoomOption(e);\n            this.touch(e, true);\n        }\n    };\n    /**\n     * Special handler for mouse move that will hide the tooltip when the mouse\n     * leaves the plotarea. Issue #149 workaround. The mouseleave event does not\n     * always fire.\n     * @private\n     * @function Highcharts.Pointer#onDocumentMouseMove\n     */\n    Pointer.prototype.onDocumentMouseMove = function (e) {\n        var chart = this.chart;\n        var tooltip = chart.tooltip;\n        var chartPosition = this.chartPosition;\n        var pEvt = this.normalize(e,\n            chartPosition);\n        // If we're outside, hide the tooltip\n        if (chartPosition &&\n            !chart.isInsidePlot(pEvt.chartX - chart.plotLeft, pEvt.chartY - chart.plotTop, {\n                visiblePlotOnly: true\n            }) &&\n            !(tooltip &&\n                tooltip.shouldStickOnContact(pEvt)) && (pEvt.target === chart.container.ownerDocument ||\n            !this.inClass(pEvt.target, 'highcharts-tracker'))) {\n            this.reset();\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.Pointer#onDocumentMouseUp\n     */\n    Pointer.prototype.onDocumentMouseUp = function (e) {\n        var _a,\n            _b;\n        (_b = (_a = Pointer_charts[Pointer_pick(Pointer.hoverChartIndex, -1)]) === null || _a === void 0 ? void 0 : _a.pointer) === null || _b === void 0 ? void 0 : _b.drop(e);\n    };\n    /**\n     * Handle touch events with two touches\n     * @private\n     * @function Highcharts.Pointer#pinch\n     */\n    Pointer.prototype.pinch = function (e) {\n        var _this = this;\n        var pointer = this,\n            chart = pointer.chart,\n            hasZoom = pointer.hasZoom,\n            lastTouches = pointer.lastTouches,\n            touches = [].map.call(e.touches || [], \n            // Normalize each touch\n            function (touch) { return pointer.normalize(touch); }),\n            touchesLength = touches.length,\n            fireClickEvent = touchesLength === 1 && ((pointer.inClass(e.target, 'highcharts-tracker') &&\n                chart.runTrackerClick) ||\n                pointer.runChartClick),\n            tooltip = chart.tooltip,\n            followTouchMove = touchesLength === 1 &&\n                Pointer_pick(tooltip === null || tooltip === void 0 ? void 0 : tooltip.options.followTouchMove,\n            true);\n        // Don't initiate panning until the user has pinched. This prevents us\n        // from blocking page scrolling as users scroll down a long page\n        // (#4210).\n        if (touchesLength > 1) {\n            pointer.initiated = true;\n        }\n        else if (followTouchMove) {\n            // #16119: Prevent blocking scroll when single-finger panning is\n            // not enabled\n            pointer.initiated = false;\n        }\n        // On touch devices, only proceed to trigger click if a handler is\n        // defined\n        if (hasZoom &&\n            pointer.initiated &&\n            !fireClickEvent &&\n            e.cancelable !== false) {\n            e.preventDefault();\n        }\n        // Register the touch start position\n        if (e.type === 'touchstart') {\n            pointer.pinchDown = touches;\n            pointer.res = true; // Reset on next move\n            chart.mouseDownX = e.chartX;\n            // Optionally move the tooltip on touchmove\n        }\n        else if (followTouchMove) {\n            this.runPointActions(pointer.normalize(e));\n            // Event type is touchmove, handle panning and pinching. The length can\n            // be 0 when releasing, if touchend fires first\n        }\n        else if (lastTouches) {\n            Pointer_fireEvent(chart, 'touchpan', {\n                originalEvent: e,\n                touches: touches\n            }, function () {\n                var boxFromTouches = function (touches) {\n                        var finger0 = touches[0],\n                    finger1 = touches[1] || finger0;\n                    return {\n                        x: finger0.chartX,\n                        y: finger0.chartY,\n                        width: finger1.chartX - finger0.chartX,\n                        height: finger1.chartY - finger0.chartY\n                    };\n                };\n                chart.transform({\n                    axes: chart.axes\n                        .filter(function (axis) {\n                        return axis.zoomEnabled &&\n                            ((_this.zoomHor && axis.horiz) ||\n                                (_this.zoomVert && !axis.horiz));\n                    }),\n                    to: boxFromTouches(touches),\n                    from: boxFromTouches(lastTouches),\n                    trigger: e.type\n                });\n            });\n            if (pointer.res) {\n                pointer.res = false;\n                this.reset(false, 0);\n            }\n        }\n        pointer.lastTouches = touches;\n    };\n    /**\n     * Run translation operations\n     * @private\n     * @function Highcharts.Pointer#pinchTranslate\n     * /\n    public pinchTranslate(\n        pinchDown: Array<any>,\n        touches: Array<PointerEvent>,\n        transform: any,\n        selectionMarker: any,\n        clip: any,\n        lastValidTouch: any\n    ): void {\n        if (this.zoomHor) {\n            this.pinchTranslateDirection(\n                true,\n                pinchDown,\n                touches,\n                transform,\n                selectionMarker,\n                clip,\n                lastValidTouch\n            );\n        }\n        if (this.zoomVert) {\n            this.pinchTranslateDirection(\n                false,\n                pinchDown,\n                touches,\n                transform,\n                selectionMarker,\n                clip,\n                lastValidTouch\n            );\n        }\n    }\n    */\n    /**\n     * Run translation operations for each direction (horizontal and vertical)\n     * independently.\n     * @private\n     * @function Highcharts.Pointer#pinchTranslateDirection\n     * /\n    public pinchTranslateDirection(\n        horiz: boolean,\n        pinchDown: Array<any>,\n        touches: Array<PointerEvent>,\n        transform: any,\n        selectionMarker: any,\n        clip: any,\n        lastValidTouch: any,\n        forcedScale?: number\n    ): void {\n        const chart = this.chart,\n            xy: ('x'|'y') = horiz ? 'x' : 'y',\n            XY: ('X'|'Y') = horiz ? 'X' : 'Y',\n            sChartXY: ('chartX'|'chartY') = ('chart' + XY) as any,\n            wh = horiz ? 'width' : 'height',\n            plotLeftTop = (chart as any)['plot' + (horiz ? 'Left' : 'Top')],\n            inverted = chart.inverted,\n            bounds = chart.bounds[horiz ? 'h' : 'v'],\n            singleTouch = pinchDown.length === 1,\n            touch0Start = pinchDown[0][sChartXY],\n            touch1Start = !singleTouch && pinchDown[1][sChartXY],\n            setScale = function (): void {\n                // Don't zoom if fingers are too close on this axis\n                if (\n                    typeof touch1Now === 'number' &&\n                    Math.abs(touch0Start - touch1Start) > 20\n                ) {\n                    scale = forcedScale ||\n                        Math.abs(touch0Now - touch1Now) /\n                        Math.abs(touch0Start - touch1Start);\n                }\n\n                clipXY = ((plotLeftTop - touch0Now) / scale) + touch0Start;\n                selectionWH = (chart as any)[\n                    'plot' + (horiz ? 'Width' : 'Height')\n                ] / scale;\n            };\n\n        let selectionWH: any,\n            selectionXY,\n            clipXY: any,\n            scale = forcedScale || 1,\n            touch0Now = touches[0][sChartXY],\n            touch1Now = !singleTouch && touches[1][sChartXY],\n            outOfBounds;\n\n        // Set the scale, first pass\n        setScale();\n\n        // The clip position (x or y) is altered if out of bounds, the selection\n        // position is not\n        selectionXY = clipXY;\n\n        // Out of bounds\n        if (selectionXY < bounds.min) {\n            selectionXY = bounds.min;\n            outOfBounds = true;\n        } else if (selectionXY + selectionWH > bounds.max) {\n            selectionXY = bounds.max - selectionWH;\n            outOfBounds = true;\n        }\n\n        // Is the chart dragged off its bounds, determined by dataMin and\n        // dataMax?\n        if (outOfBounds) {\n\n            // Modify the touchNow position in order to create an elastic drag\n            // movement. This indicates to the user that the chart is responsive\n            // but can't be dragged further.\n            touch0Now -= 0.8 * (touch0Now - lastValidTouch[xy][0]);\n            if (typeof touch1Now === 'number') {\n                touch1Now -= 0.8 * (touch1Now - lastValidTouch[xy][1]);\n            }\n\n            // Set the scale, second pass to adapt to the modified touchNow\n            // positions\n            setScale();\n\n        } else {\n            lastValidTouch[xy] = [touch0Now, touch1Now];\n        }\n\n        // Set geometry for clipping, selection and transformation\n        if (!inverted) {\n            clip[xy] = clipXY - plotLeftTop;\n            clip[wh] = selectionWH;\n        }\n        const scaleKey = inverted ?\n            (horiz ? 'scaleY' : 'scaleX') : 'scale' + XY;\n        const transformScale = inverted ? 1 / scale : scale;\n\n        selectionMarker[wh] = selectionWH;\n        selectionMarker[xy] = selectionXY;\n        // Invert scale if needed (#19217)\n        transform[scaleKey] = scale * (inverted && !horiz ? -1 : 1);\n        transform['translate' + XY] = (transformScale * plotLeftTop) +\n            (touch0Now - (transformScale * touch0Start));\n    }\n    */\n    /**\n     * Reset the tracking by hiding the tooltip, the hover series state and the\n     * hover point\n     *\n     * @function Highcharts.Pointer#reset\n     *\n     * @param {boolean} [allowMove]\n     * Instead of destroying the tooltip altogether, allow moving it if\n     * possible.\n     *\n     * @param {number} [delay]\n     */\n    Pointer.prototype.reset = function (allowMove, delay) {\n        var pointer = this,\n            chart = pointer.chart,\n            hoverSeries = chart.hoverSeries,\n            hoverPoint = chart.hoverPoint,\n            hoverPoints = chart.hoverPoints,\n            tooltip = chart.tooltip,\n            tooltipPoints = tooltip && tooltip.shared ?\n                hoverPoints :\n                hoverPoint;\n        // Check if the points have moved outside the plot area (#1003, #4736,\n        // #5101)\n        if (allowMove && tooltipPoints) {\n            Pointer_splat(tooltipPoints).forEach(function (point) {\n                if (point.series.isCartesian &&\n                    typeof point.plotX === 'undefined') {\n                    allowMove = false;\n                }\n            });\n        }\n        // Just move the tooltip, #349\n        if (allowMove) {\n            if (tooltip && tooltipPoints && Pointer_splat(tooltipPoints).length) {\n                tooltip.refresh(tooltipPoints);\n                if (tooltip.shared && hoverPoints) { // #8284\n                    hoverPoints.forEach(function (point) {\n                        point.setState(point.state, true);\n                        if (point.series.isCartesian) {\n                            if (point.series.xAxis.crosshair) {\n                                point.series.xAxis\n                                    .drawCrosshair(null, point);\n                            }\n                            if (point.series.yAxis.crosshair) {\n                                point.series.yAxis\n                                    .drawCrosshair(null, point);\n                            }\n                        }\n                    });\n                }\n                else if (hoverPoint) { // #2500\n                    hoverPoint.setState(hoverPoint.state, true);\n                    chart.axes.forEach(function (axis) {\n                        if (axis.crosshair &&\n                            hoverPoint.series[axis.coll] === axis) {\n                            axis.drawCrosshair(null, hoverPoint);\n                        }\n                    });\n                }\n            }\n            // Full reset\n        }\n        else {\n            if (hoverPoint) {\n                hoverPoint.onMouseOut();\n            }\n            if (hoverPoints) {\n                hoverPoints.forEach(function (point) {\n                    point.setState();\n                });\n            }\n            if (hoverSeries) {\n                hoverSeries.onMouseOut();\n            }\n            if (tooltip) {\n                tooltip.hide(delay);\n            }\n            if (pointer.unDocMouseMove) {\n                pointer.unDocMouseMove = pointer.unDocMouseMove();\n            }\n            // Remove crosshairs\n            chart.axes.forEach(function (axis) {\n                axis.hideCrosshair();\n            });\n            chart.hoverPoints = chart.hoverPoint = void 0;\n        }\n    };\n    /**\n     * With line type charts with a single tracker, get the point closest to the\n     * mouse. Run Point.onMouseOver and display tooltip for the point or points.\n     *\n     * @private\n     * @function Highcharts.Pointer#runPointActions\n     *\n     * @emits Highcharts.Point#event:mouseOut\n     * @emits Highcharts.Point#event:mouseOver\n     */\n    Pointer.prototype.runPointActions = function (e, p, force) {\n        var pointer = this,\n            chart = pointer.chart,\n            series = chart.series,\n            tooltip = (chart.tooltip && chart.tooltip.options.enabled ?\n                chart.tooltip :\n                void 0),\n            shared = (tooltip ?\n                tooltip.shared :\n                false);\n        var hoverPoint = p || chart.hoverPoint,\n            hoverSeries = hoverPoint && hoverPoint.series || chart.hoverSeries;\n        var // `onMouseOver` or already hovering a series with directTouch\n            isDirectTouch = (!e || e.type !== 'touchmove') && (!!p || ((hoverSeries && hoverSeries.directTouch) &&\n                pointer.isDirectTouch)),\n            hoverData = this.getHoverData(hoverPoint,\n            hoverSeries,\n            series,\n            isDirectTouch,\n            shared,\n            e);\n        // Update variables from hoverData.\n        hoverPoint = hoverData.hoverPoint;\n        hoverSeries = hoverData.hoverSeries;\n        var points = hoverData.hoverPoints,\n            followPointer = hoverSeries &&\n                hoverSeries.tooltipOptions.followPointer &&\n                !hoverSeries.tooltipOptions.split,\n            useSharedTooltip = (shared &&\n                hoverSeries &&\n                !hoverSeries.noSharedTooltip);\n        // Refresh tooltip for kdpoint if new hover point or tooltip was hidden\n        // #3926, #4200\n        if (hoverPoint &&\n            (force ||\n                hoverPoint !== chart.hoverPoint ||\n                (tooltip && tooltip.isHidden))) {\n            (chart.hoverPoints || []).forEach(function (p) {\n                if (points.indexOf(p) === -1) {\n                    p.setState();\n                }\n            });\n            // Set normal state to previous series\n            if (chart.hoverSeries !== hoverSeries) {\n                hoverSeries.onMouseOver();\n            }\n            pointer.applyInactiveState(points);\n            // Do mouseover on all points (#3919, #3985, #4410, #5622)\n            (points || []).forEach(function (p) {\n                p.setState('hover');\n            });\n            // If tracking is on series in stead of on each point,\n            // fire mouseOver on hover point. // #4448\n            if (chart.hoverPoint) {\n                chart.hoverPoint.firePointEvent('mouseOut');\n            }\n            // Hover point may have been destroyed in the event handlers (#7127)\n            if (!hoverPoint.series) {\n                return;\n            }\n            /**\n             * Contains all hovered points.\n             *\n             * @name Highcharts.Chart#hoverPoints\n             * @type {Array<Highcharts.Point>|null}\n             */\n            chart.hoverPoints = points;\n            /**\n             * Contains the original hovered point.\n             *\n             * @name Highcharts.Chart#hoverPoint\n             * @type {Highcharts.Point|null}\n             */\n            chart.hoverPoint = hoverPoint;\n            /**\n             * Hover state should not be lost when axis is updated (#12569)\n             * Axis.update runs pointer.reset which uses chart.hoverPoint.state\n             * to apply state which does not exist in hoverPoint yet.\n             * The mouseOver event should be triggered when hoverPoint\n             * is correct.\n             */\n            hoverPoint.firePointEvent('mouseOver', void 0, function () {\n                // Draw tooltip if necessary\n                if (tooltip && hoverPoint) {\n                    tooltip.refresh(useSharedTooltip ? points : hoverPoint, e);\n                }\n            });\n            // Update positions (regardless of kdpoint or hoverPoint)\n        }\n        else if (followPointer && tooltip && !tooltip.isHidden) {\n            var anchor = tooltip.getAnchor([{}],\n                e);\n            if (chart.isInsidePlot(anchor[0], anchor[1], {\n                visiblePlotOnly: true\n            })) {\n                tooltip.updatePosition({ plotX: anchor[0], plotY: anchor[1] });\n            }\n        }\n        // Start the event listener to pick up the tooltip and crosshairs\n        if (!pointer.unDocMouseMove) {\n            pointer.unDocMouseMove = Pointer_addEvent(chart.container.ownerDocument, 'mousemove', function (e) {\n                var _a,\n                    _b,\n                    _c;\n                return (_c = (_b = Pointer_charts[(_a = Pointer.hoverChartIndex) !== null && _a !== void 0 ? _a : -1]) === null || _b === void 0 ? void 0 : _b.pointer) === null || _c === void 0 ? void 0 : _c.onDocumentMouseMove(e);\n            });\n            pointer.eventsToUnbind.push(pointer.unDocMouseMove);\n        }\n        // Issues related to crosshair #4927, #5269 #5066, #5658\n        chart.axes.forEach(function drawAxisCrosshair(axis) {\n            var snap = Pointer_pick((axis.crosshair || {}).snap,\n                true);\n            var point;\n            if (snap) {\n                point = chart.hoverPoint; // #13002\n                if (!point || point.series[axis.coll] !== axis) {\n                    point = Pointer_find(points, function (p) {\n                        return p.series && p.series[axis.coll] === axis;\n                    });\n                }\n            }\n            // Axis has snapping crosshairs, and one of the hover points belongs\n            // to axis. Always call drawCrosshair when it is not snap.\n            if (point || !snap) {\n                axis.drawCrosshair(e, point);\n                // Axis has snapping crosshairs, but no hover point belongs to axis\n            }\n            else {\n                axis.hideCrosshair();\n            }\n        });\n    };\n    /**\n     * Set the JS DOM events on the container and document. This method should\n     * contain a one-to-one assignment between methods and their handlers. Any\n     * advanced logic should be moved to the handler reflecting the event's\n     * name.\n     * @private\n     * @function Highcharts.Pointer#setDOMEvents\n     */\n    Pointer.prototype.setDOMEvents = function () {\n        var _this = this;\n        var container = this.chart.container,\n            ownerDoc = container.ownerDocument;\n        container.onmousedown = this.onContainerMouseDown.bind(this);\n        container.onmousemove = this.onContainerMouseMove.bind(this);\n        container.onclick = this.onContainerClick.bind(this);\n        this.eventsToUnbind.push(Pointer_addEvent(container, 'mouseenter', this.onContainerMouseEnter.bind(this)), Pointer_addEvent(container, 'mouseleave', this.onContainerMouseLeave.bind(this)));\n        if (!Pointer.unbindDocumentMouseUp.some(function (el) { return el.doc === ownerDoc; })) {\n            Pointer.unbindDocumentMouseUp.push({\n                doc: ownerDoc,\n                unbind: Pointer_addEvent(ownerDoc, 'mouseup', this.onDocumentMouseUp.bind(this))\n            });\n        }\n        // In case we are dealing with overflow, reset the chart position when\n        // scrolling parent elements\n        var parent = this.chart.renderTo.parentElement;\n        while (parent && parent.tagName !== 'BODY') {\n            this.eventsToUnbind.push(Pointer_addEvent(parent, 'scroll', function () {\n                delete _this.chartPosition;\n            }));\n            parent = parent.parentElement;\n        }\n        this.eventsToUnbind.push(Pointer_addEvent(container, 'touchstart', this.onContainerTouchStart.bind(this), { passive: false }), Pointer_addEvent(container, 'touchmove', this.onContainerTouchMove.bind(this), { passive: false }));\n        if (!Pointer.unbindDocumentTouchEnd) {\n            Pointer.unbindDocumentTouchEnd = Pointer_addEvent(ownerDoc, 'touchend', this.onDocumentTouchEnd.bind(this), { passive: false });\n        }\n        this.setPointerCapture();\n        Pointer_addEvent(this.chart, 'redraw', this.setPointerCapture.bind(this));\n    };\n    /**\n     * Sets, or removes on update, pointer events using pointer capture for\n     * tooltip.followTouchMove if any series has findNearestPointBy that\n     * includes the y dimension.\n     * @private\n     * @function Highcharts.Pointer#setPointerCapture\n    */\n    Pointer.prototype.setPointerCapture = function () {\n        var _a,\n            _b;\n        // Only for touch\n        if (!Pointer_isTouchDevice) {\n            return;\n        }\n        var pointer = this,\n            events = pointer.pointerCaptureEventsToUnbind,\n            chart = pointer.chart,\n            container = chart.container,\n            followTouchMove = Pointer_pick((_a = chart.options.tooltip) === null || _a === void 0 ? void 0 : _a.followTouchMove,\n            true),\n            shouldHave = followTouchMove && chart.series.some(function (series) { return series.options.findNearestPointBy\n                .indexOf('y') > -1; });\n        if (!pointer.hasPointerCapture && shouldHave) {\n            // Add\n            // Bind\n            events.push(Pointer_addEvent(container, 'pointerdown', function (e) {\n                var _a,\n                    _b;\n                if ((_a = e.target) === null || _a === void 0 ? void 0 : _a.hasPointerCapture(e.pointerId)) {\n                    (_b = e.target) === null || _b === void 0 ? void 0 : _b.releasePointerCapture(e.pointerId);\n                }\n            }), Pointer_addEvent(container, 'pointermove', function (e) {\n                var _a,\n                    _b;\n                (_b = (_a = chart.pointer) === null || _a === void 0 ? void 0 : _a.getPointFromEvent(e)) === null || _b === void 0 ? void 0 : _b.onMouseOver(e);\n            }));\n            if (!chart.styledMode) {\n                Pointer_css(container, { 'touch-action': 'none' });\n            }\n            // Mostly for styled mode\n            container.className += ' highcharts-no-touch-action';\n            pointer.hasPointerCapture = true;\n        }\n        else if (pointer.hasPointerCapture && !shouldHave) {\n            // Remove\n            // Unbind\n            events.forEach(function (e) { return e(); });\n            events.length = 0;\n            if (!chart.styledMode) {\n                Pointer_css(container, {\n                    'touch-action': Pointer_pick((_b = chart.options.chart.style) === null || _b === void 0 ? void 0 : _b['touch-action'], 'manipulation')\n                });\n            }\n            // Mostly for styled mode\n            container.className = container.className.replace(' highcharts-no-touch-action', '');\n            pointer.hasPointerCapture = false;\n        }\n    };\n    /**\n     * Sets the index of the hovered chart and leaves the previous hovered\n     * chart, to reset states like tooltip.\n     * @private\n     * @function Highcharts.Pointer#setHoverChartIndex\n     */\n    Pointer.prototype.setHoverChartIndex = function (e) {\n        var _a;\n        var chart = this.chart;\n        var hoverChart = Core_Globals.charts[Pointer_pick(Pointer.hoverChartIndex, -1)];\n        if (hoverChart &&\n            hoverChart !== chart) {\n            var relatedTargetObj = { relatedTarget: chart.container };\n            if (e && !(e === null || e === void 0 ? void 0 : e.relatedTarget)) {\n                // #17192, Non-enumerable properties of \"e\" are dropped with\n                // spreading (...e). Using Object.assign ensures integrity.\n                Object.assign({}, e, relatedTargetObj);\n            }\n            (_a = hoverChart.pointer) === null || _a === void 0 ? void 0 : _a.onContainerMouseLeave(e || relatedTargetObj);\n        }\n        if (!hoverChart ||\n            !hoverChart.mouseIsDown) {\n            Pointer.hoverChartIndex = chart.index;\n        }\n    };\n    /**\n     * General touch handler shared by touchstart and touchmove.\n     * @private\n     * @function Highcharts.Pointer#touch\n     */\n    Pointer.prototype.touch = function (e, start) {\n        var _a = this,\n            chart = _a.chart,\n            _b = _a.pinchDown,\n            pinchDown = _b === void 0 ? [] : _b;\n        var hasMoved,\n            isInside;\n        this.setHoverChartIndex();\n        e = this.normalize(e);\n        if (e.touches.length === 1) {\n            isInside = chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop, {\n                visiblePlotOnly: true\n            });\n            if (isInside && !chart.openMenu) {\n                // Run mouse events and display tooltip etc\n                if (start) {\n                    this.runPointActions(e);\n                }\n                // Android fires touchmove events after the touchstart even if\n                // the finger hasn't moved, or moved only a pixel or two. In iOS\n                // however, the touchmove doesn't fire unless the finger moves\n                // more than ~4px. So we emulate this behaviour in Android by\n                // checking how much it moved, and cancelling on small\n                // distances. #3450. Tested and still relevant as of 2024.\n                if (e.type === 'touchmove') {\n                    hasMoved = pinchDown[0] ? // #5266\n                        (Math.pow(pinchDown[0].chartX - e.chartX, 2) +\n                            Math.pow(pinchDown[0].chartY - e.chartY, 2)) >= 16 :\n                        false;\n                }\n                if (Pointer_pick(hasMoved, true)) {\n                    this.pinch(e);\n                }\n            }\n            else if (start) {\n                // Hide the tooltip on touching outside the plot area (#1203)\n                this.reset();\n            }\n        }\n        else if (e.touches.length === 2) {\n            this.pinch(e);\n        }\n    };\n    /**\n     * Returns true if the chart is set up for zooming by single touch and the\n     * event is capable\n     * @private\n     * @function Highcharts.Pointer#touchSelect\n     */\n    Pointer.prototype.touchSelect = function (e) {\n        return Boolean(this.chart.zooming.singleTouch &&\n            e.touches &&\n            e.touches.length === 1);\n    };\n    /**\n     * Resolve the zoomType option, this is reset on all touch start and mouse\n     * down events.\n     * @private\n     * @function Highcharts.Pointer#zoomOption\n     */\n    Pointer.prototype.zoomOption = function (e) {\n        var chart = this.chart,\n            inverted = chart.inverted;\n        var zoomType = chart.zooming.type || '',\n            zoomX,\n            zoomY;\n        // Look for the pinchType option\n        if (/touch/.test(e.type)) {\n            zoomType = Pointer_pick(chart.zooming.pinchType, zoomType);\n        }\n        this.zoomX = zoomX = /x/.test(zoomType);\n        this.zoomY = zoomY = /y/.test(zoomType);\n        this.zoomHor = (zoomX && !inverted) || (zoomY && inverted);\n        this.zoomVert = (zoomY && !inverted) || (zoomX && inverted);\n        this.hasZoom = zoomX || zoomY;\n    };\n    Pointer.unbindDocumentMouseUp = [];\n    return Pointer;\n}());\n/* *\n *\n *  Class Namespace\n *\n * */\n(function (Pointer) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    function compose(ChartClass) {\n        if (Pointer_pushUnique(Pointer_composed, 'Core.Pointer')) {\n            Pointer_addEvent(ChartClass, 'beforeRender', function () {\n                /**\n                 * The Pointer that keeps track of mouse and touch\n                 * interaction.\n                 *\n                 * @memberof Highcharts.Chart\n                 * @name pointer\n                 * @type {Highcharts.Pointer}\n                 * @instance\n                 */\n                this.pointer = new Pointer(this, this.options);\n            });\n        }\n    }\n    Pointer.compose = compose;\n})(Pointer || (Pointer = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Core_Pointer = (Pointer);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * Chart position and scale.\n *\n * @interface Highcharts.ChartPositionObject\n */ /**\n* @name Highcharts.ChartPositionObject#left\n* @type {number}\n*/ /**\n* @name Highcharts.ChartPositionObject#scaleX\n* @type {number}\n*/ /**\n* @name Highcharts.ChartPositionObject#scaleY\n* @type {number}\n*/ /**\n* @name Highcharts.ChartPositionObject#top\n* @type {number}\n*/\n/**\n * One position in relation to an axis.\n *\n * @interface Highcharts.PointerAxisCoordinateObject\n */ /**\n* Related axis.\n*\n* @name Highcharts.PointerAxisCoordinateObject#axis\n* @type {Highcharts.Axis}\n*/ /**\n* Axis value.\n*\n* @name Highcharts.PointerAxisCoordinateObject#value\n* @type {number}\n*/\n/**\n * Positions in terms of axis values.\n *\n * @interface Highcharts.PointerAxisCoordinatesObject\n */ /**\n* Positions on the x-axis.\n* @name Highcharts.PointerAxisCoordinatesObject#xAxis\n* @type {Array<Highcharts.PointerAxisCoordinateObject>}\n*/ /**\n* Positions on the y-axis.\n* @name Highcharts.PointerAxisCoordinatesObject#yAxis\n* @type {Array<Highcharts.PointerAxisCoordinateObject>}\n*/\n/**\n * Pointer coordinates.\n *\n * @interface Highcharts.PointerCoordinatesObject\n */ /**\n* @name Highcharts.PointerCoordinatesObject#chartX\n* @type {number}\n*/ /**\n* @name Highcharts.PointerCoordinatesObject#chartY\n* @type {number}\n*/\n/**\n * A native browser mouse or touch event, extended with position information\n * relative to the {@link Chart.container}.\n *\n * @interface Highcharts.PointerEventObject\n * @extends global.PointerEvent\n */ /**\n* The X coordinate of the pointer interaction relative to the chart.\n*\n* @name Highcharts.PointerEventObject#chartX\n* @type {number}\n*/ /**\n* The Y coordinate of the pointer interaction relative to the chart.\n*\n* @name Highcharts.PointerEventObject#chartY\n* @type {number}\n*/\n/**\n * Axis-specific data of a selection.\n *\n * @interface Highcharts.SelectDataObject\n */ /**\n* The selected Axis.\n* @name Highcharts.SelectDataObject#axis\n* @type {Highcharts.Axis}\n*/ /**\n* The maximum axis value, either automatic or set manually.\n* @name Highcharts.SelectDataObject#max\n* @type {number}\n*/ /**\n* The minimum axis value, either automatic or set manually.\n* @name Highcharts.SelectDataObject#min\n* @type {number}\n*/\n/**\n * Object for select events.\n * The primary axes are `xAxis[0]` and `yAxis[0]`. Remember the unit of a\n * datetime axis is milliseconds since 1970-01-01 00:00:00.\n *\n * @interface Highcharts.SelectEventObject\n */ /**\n* The related browser event.\n* @name Highcharts.SelectEventObject#originalEvent\n* @type {global.Event}\n*/ /**\n* Prevents the default action for the event, if called.\n* @name Highcharts.SelectEventObject#preventDefault\n* @type {Function}\n*/ /**\n* Indicates a reset event to restore default state.\n* @name Highcharts.SelectEventObject#resetSelection\n* @type {boolean|undefined}\n*/ /**\n* Arrays containing the axes of each dimension and each axis' min and max\n* values.\n* @name Highcharts.SelectEventObject#xAxis\n* @type {Array<Highcharts.SelectDataObject>}\n*/ /**\n* Arrays containing the axes of each dimension and each axis' min and max\n* values.\n* @name Highcharts.SelectEventObject#yAxis\n* @type {Array<Highcharts.SelectDataObject>}\n*/\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Data/DataTableCore.js\n/* *\n *\n *  (c) 2009-2024 Highsoft AS\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n *  Authors:\n *  - Sophie Bremer\n *  - Gøran Slettemark\n *  - Torstein Hønsi\n *\n * */\n\n\nvar DataTableCore_fireEvent = Core_Utilities.fireEvent, DataTableCore_isArray = Core_Utilities.isArray, DataTableCore_objectEach = Core_Utilities.objectEach, DataTableCore_uniqueKey = Core_Utilities.uniqueKey;\n/* *\n *\n *  Class\n *\n * */\n/**\n * Class to manage columns and rows in a table structure. It provides methods\n * to add, remove, and manipulate columns and rows, as well as to retrieve data\n * from specific cells.\n *\n * @class\n * @name Highcharts.DataTable\n *\n * @param {Highcharts.DataTableOptions} [options]\n * Options to initialize the new DataTable instance.\n */\nvar DataTableCore = /** @class */ (function () {\n    /**\n     * Constructs an instance of the DataTable class.\n     *\n     * @example\n     * const dataTable = new Highcharts.DataTableCore({\n     *   columns: {\n     *     year: [2020, 2021, 2022, 2023],\n     *     cost: [11, 13, 12, 14],\n     *     revenue: [12, 15, 14, 18]\n     *   }\n     * });\n\n     *\n     * @param {Highcharts.DataTableOptions} [options]\n     * Options to initialize the new DataTable instance.\n     */\n    function DataTableCore(options) {\n        if (options === void 0) { options = {}; }\n        var _this = this;\n        /**\n         * Whether the ID was automatic generated or given in the constructor.\n         *\n         * @name Highcharts.DataTable#autoId\n         * @type {boolean}\n         */\n        this.autoId = !options.id;\n        this.columns = {};\n        /**\n         * ID of the table for indentification purposes.\n         *\n         * @name Highcharts.DataTable#id\n         * @type {string}\n         */\n        this.id = (options.id || DataTableCore_uniqueKey());\n        this.modified = this;\n        this.rowCount = 0;\n        this.versionTag = DataTableCore_uniqueKey();\n        var rowCount = 0;\n        DataTableCore_objectEach(options.columns || {}, function (column, columnName) {\n            _this.columns[columnName] = column.slice();\n            rowCount = Math.max(rowCount, column.length);\n        });\n        this.applyRowCount(rowCount);\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Applies a row count to the table by setting the `rowCount` property and\n     * adjusting the length of all columns.\n     *\n     * @private\n     * @param {number} rowCount The new row count.\n     */\n    DataTableCore.prototype.applyRowCount = function (rowCount) {\n        this.rowCount = rowCount;\n        DataTableCore_objectEach(this.columns, function (column) {\n            if (DataTableCore_isArray(column)) { // Not on typed array\n                column.length = rowCount;\n            }\n        });\n    };\n    /**\n     * Fetches the given column by the canonical column name. Simplified version\n     * of the full `DataTable.getRow` method, always returning by reference.\n     *\n     * @param {string} columnName\n     * Name of the column to get.\n     *\n     * @return {Highcharts.DataTableColumn|undefined}\n     * A copy of the column, or `undefined` if not found.\n     */\n    DataTableCore.prototype.getColumn = function (columnName, \n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    asReference) {\n        return this.columns[columnName];\n    };\n    /**\n     * Retrieves all or the given columns. Simplified version of the full\n     * `DataTable.getColumns` method, always returning by reference.\n     *\n     * @param {Array<string>} [columnNames]\n     * Column names to retrieve.\n     *\n     * @return {Highcharts.DataTableColumnCollection}\n     * Collection of columns. If a requested column was not found, it is\n     * `undefined`.\n     */\n    DataTableCore.prototype.getColumns = function (columnNames, \n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    asReference) {\n        var _this = this;\n        return (columnNames || Object.keys(this.columns)).reduce(function (columns, columnName) {\n            columns[columnName] = _this.columns[columnName];\n            return columns;\n        }, {});\n    };\n    /**\n     * Retrieves the row at a given index.\n     *\n     * @param {number} rowIndex\n     * Row index to retrieve. First row has index 0.\n     *\n     * @param {Array<string>} [columnNames]\n     * Column names to retrieve.\n     *\n     * @return {Record<string, number|string|undefined>|undefined}\n     * Returns the row values, or `undefined` if not found.\n     */\n    DataTableCore.prototype.getRow = function (rowIndex, columnNames) {\n        var _this = this;\n        return (columnNames || Object.keys(this.columns)).map(function (key) { var _a; return (_a = _this.columns[key]) === null || _a === void 0 ? void 0 : _a[rowIndex]; });\n    };\n    /**\n     * Sets cell values for a column. Will insert a new column, if not found.\n     *\n     * @param {string} columnName\n     * Column name to set.\n     *\n     * @param {Highcharts.DataTableColumn} [column]\n     * Values to set in the column.\n     *\n     * @param {number} [rowIndex=0]\n     * Index of the first row to change. (Default: 0)\n     *\n     * @param {Record<string, (boolean|number|string|null|undefined)>} [eventDetail]\n     * Custom information for pending events.\n     *\n     * @emits #setColumns\n     * @emits #afterSetColumns\n     */\n    DataTableCore.prototype.setColumn = function (columnName, column, rowIndex, eventDetail) {\n        var _a;\n        if (column === void 0) { column = []; }\n        if (rowIndex === void 0) { rowIndex = 0; }\n        this.setColumns((_a = {}, _a[columnName] = column, _a), rowIndex, eventDetail);\n    };\n    /**\n     * * Sets cell values for multiple columns. Will insert new columns, if not\n     * found. Simplified version of the full `DataTable.setColumns`, limited to\n     * full replacement of the columns (undefined `rowIndex`).\n     *\n     * @param {Highcharts.DataTableColumnCollection} columns\n     * Columns as a collection, where the keys are the column names.\n     *\n     * @param {number} [rowIndex]\n     * Index of the first row to change. Keep undefined to reset.\n     *\n     * @param {Record<string, (boolean|number|string|null|undefined)>} [eventDetail]\n     * Custom information for pending events.\n     *\n     * @emits #setColumns\n     * @emits #afterSetColumns\n     */\n    DataTableCore.prototype.setColumns = function (columns, rowIndex, eventDetail) {\n        var _this = this;\n        var rowCount = this.rowCount;\n        DataTableCore_objectEach(columns, function (column, columnName) {\n            _this.columns[columnName] = column.slice();\n            rowCount = column.length;\n        });\n        this.applyRowCount(rowCount);\n        if (!(eventDetail === null || eventDetail === void 0 ? void 0 : eventDetail.silent)) {\n            DataTableCore_fireEvent(this, 'afterSetColumns');\n            this.versionTag = DataTableCore_uniqueKey();\n        }\n    };\n    /**\n     * Sets cell values of a row. Will insert a new row if no index was\n     * provided, or if the index is higher than the total number of table rows.\n     * A simplified version of the full `DateTable.setRow`, limited to objects.\n     *\n     * @param {Record<string, number|string|undefined>} row\n     * Cell values to set.\n     *\n     * @param {number} [rowIndex]\n     * Index of the row to set. Leave `undefind` to add as a new row.\n     *\n     * @param {boolean} [insert]\n     * Whether to insert the row at the given index, or to overwrite the row.\n     *\n     * @param {Record<string, (boolean|number|string|null|undefined)>} [eventDetail]\n     * Custom information for pending events.\n     *\n     * @emits #afterSetRows\n     */\n    DataTableCore.prototype.setRow = function (row, rowIndex, insert, eventDetail) {\n        if (rowIndex === void 0) { rowIndex = this.rowCount; }\n        var columns = this.columns,\n            indexRowCount = insert ? this.rowCount + 1 : rowIndex + 1;\n        DataTableCore_objectEach(row, function (cellValue, columnName) {\n            var column = columns[columnName] ||\n                    (eventDetail === null || eventDetail === void 0 ? void 0 : eventDetail.addColumns) !== false && new Array(indexRowCount);\n            if (column) {\n                if (insert) {\n                    column.splice(rowIndex, 0, cellValue);\n                }\n                else {\n                    column[rowIndex] = cellValue;\n                }\n                columns[columnName] = column;\n            }\n        });\n        if (indexRowCount > this.rowCount) {\n            this.applyRowCount(indexRowCount);\n        }\n        if (!(eventDetail === null || eventDetail === void 0 ? void 0 : eventDetail.silent)) {\n            DataTableCore_fireEvent(this, 'afterSetRows');\n            this.versionTag = DataTableCore_uniqueKey();\n        }\n    };\n    return DataTableCore;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Data_DataTableCore = (DataTableCore);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * A column of values in a data table.\n * @typedef {Array<boolean|null|number|string|undefined>} Highcharts.DataTableColumn\n */ /**\n* A collection of data table columns defined by a object where the key is the\n* column name and the value is an array of the column values.\n* @typedef {Record<string, Highcharts.DataTableColumn>} Highcharts.DataTableColumnCollection\n*/\n/**\n * Options for the `DataTable` or `DataTableCore` classes.\n * @interface Highcharts.DataTableOptions\n */ /**\n* The column options for the data table. The columns are defined by an object\n* where the key is the column ID and the value is an array of the column\n* values.\n*\n* @name Highcharts.DataTableOptions.columns\n* @type {Highcharts.DataTableColumnCollection|undefined}\n*/ /**\n* Custom ID to identify the new DataTable instance.\n*\n* @name Highcharts.DataTableOptions.id\n* @type {string|undefined}\n*/\n(''); // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Legend/LegendSymbol.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar LegendSymbol_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\n\nvar LegendSymbol_extend = Core_Utilities.extend, LegendSymbol_merge = Core_Utilities.merge, LegendSymbol_pick = Core_Utilities.pick;\n/* *\n *\n *  Namespace\n *\n * */\nvar LegendSymbol;\n(function (LegendSymbol) {\n    /* *\n    *\n    *  Functions\n    *\n    * */\n    /**\n     * Draw a line, a point marker and an area in the legend.\n     *\n     * @private\n     * @function Highcharts.LegendSymbolMixin.areaMarker\n     *\n     * @param {Highcharts.Legend} legend\n     * The legend object.\n     */\n    function areaMarker(legend, item) {\n        lineMarker.call(this, legend, item, true);\n    }\n    LegendSymbol.areaMarker = areaMarker;\n    /**\n     * Draw a line and a point marker in the legend.\n     *\n     * @private\n     * @function Highcharts.LegendSymbolMixin.lineMarker\n     *\n     * @param {Highcharts.Legend} legend\n     * The legend object.\n     */\n    function lineMarker(legend, item, hasArea) {\n        var _a,\n            _b;\n        var legendItem = this.legendItem = this.legendItem || {},\n            _c = this,\n            chart = _c.chart,\n            options = _c.options,\n            _d = legend.baseline,\n            baseline = _d === void 0 ? 0 : _d,\n            symbolWidth = legend.symbolWidth,\n            symbolHeight = legend.symbolHeight,\n            symbol = this.symbol || 'circle',\n            generalRadius = symbolHeight / 2,\n            renderer = chart.renderer,\n            legendItemGroup = legendItem.group,\n            verticalCenter = baseline - Math.round((((_a = legend.fontMetrics) === null || _a === void 0 ? void 0 : _a.b) || symbolHeight) *\n                // Render line and marker slightly higher to make room for the\n                // area\n                (hasArea ? 0.4 : 0.3)),\n            attr = {};\n        var legendSymbol,\n            markerOptions = options.marker,\n            lineSizer = 0;\n        // Draw the line\n        if (!chart.styledMode) {\n            attr['stroke-width'] = Math.min(options.lineWidth || 0, 24);\n            if (options.dashStyle) {\n                attr.dashstyle = options.dashStyle;\n            }\n            else if (options.linecap !== 'square') {\n                attr['stroke-linecap'] = 'round';\n            }\n        }\n        legendItem.line = renderer\n            .path()\n            .addClass('highcharts-graph')\n            .attr(attr)\n            .add(legendItemGroup);\n        if (hasArea) {\n            legendItem.area = renderer\n                .path()\n                .addClass('highcharts-area')\n                .add(legendItemGroup);\n        }\n        if (attr['stroke-linecap']) {\n            lineSizer = Math.min(legendItem.line.strokeWidth(), symbolWidth) / 2;\n        }\n        if (symbolWidth) {\n            var d = [\n                    ['M',\n                lineSizer,\n                verticalCenter],\n                    ['L',\n                symbolWidth - lineSizer,\n                verticalCenter]\n                ];\n            legendItem.line.attr({ d: d });\n            (_b = legendItem.area) === null || _b === void 0 ? void 0 : _b.attr({\n                d: LegendSymbol_spreadArray(LegendSymbol_spreadArray([], d, true), [\n                    ['L', symbolWidth - lineSizer, baseline],\n                    ['L', lineSizer, baseline]\n                ], false)\n            });\n        }\n        // Draw the marker\n        if (markerOptions && markerOptions.enabled !== false && symbolWidth) {\n            // Do not allow the marker to be larger than the symbolHeight\n            var radius = Math.min(LegendSymbol_pick(markerOptions.radius,\n                generalRadius),\n                generalRadius);\n            // Restrict symbol markers size\n            if (symbol.indexOf('url') === 0) {\n                markerOptions = LegendSymbol_merge(markerOptions, {\n                    width: symbolHeight,\n                    height: symbolHeight\n                });\n                radius = 0;\n            }\n            legendItem.symbol = legendSymbol = renderer\n                .symbol(symbol, (symbolWidth / 2) - radius, verticalCenter - radius, 2 * radius, 2 * radius, LegendSymbol_extend({ context: 'legend' }, markerOptions))\n                .addClass('highcharts-point')\n                .add(legendItemGroup);\n            legendSymbol.isMarker = true;\n        }\n    }\n    LegendSymbol.lineMarker = lineMarker;\n    /**\n     * Get the series' symbol in the legend.\n     *\n     * This method should be overridable to create custom symbols through\n     * Highcharts.seriesTypes[type].prototype.drawLegendSymbol.\n     *\n     * @private\n     * @function Highcharts.LegendSymbolMixin.rectangle\n     *\n     * @param {Highcharts.Legend} legend\n     * The legend object\n     *\n     * @param {Highcharts.Point|Highcharts.Series} item\n     * The series (this) or point\n     */\n    function rectangle(legend, item) {\n        var legendItem = item.legendItem || {},\n            options = legend.options,\n            symbolHeight = legend.symbolHeight,\n            square = options.squareSymbol,\n            symbolWidth = square ? symbolHeight : legend.symbolWidth;\n        legendItem.symbol = this.chart.renderer\n            .rect(square ? (legend.symbolWidth - symbolHeight) / 2 : 0, legend.baseline - symbolHeight + 1, // #3988\n        symbolWidth, symbolHeight, LegendSymbol_pick(legend.options.symbolRadius, symbolHeight / 2))\n            .addClass('highcharts-point')\n            .attr({\n            zIndex: 3\n        })\n            .add(legendItem.group);\n    }\n    LegendSymbol.rectangle = rectangle;\n})(LegendSymbol || (LegendSymbol = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Legend_LegendSymbol = (LegendSymbol);\n\n;// ./code/es5/es-modules/Core/Series/SeriesDefaults.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 *  API Options\n *\n * */\n/**\n * General options for all series types.\n *\n * @optionparent plotOptions.series\n */\nvar seriesDefaults = {\n    // Base series options\n    /**\n     * The SVG value used for the `stroke-linecap` and `stroke-linejoin`\n     * of a line graph. Round means that lines are rounded in the ends and\n     * bends.\n     *\n     * @type       {Highcharts.SeriesLinecapValue}\n     * @default    round\n     * @since      3.0.7\n     * @apioption  plotOptions.line.linecap\n     */\n    /**\n     * Pixel width of the graph line.\n     *\n     * @see In styled mode, the line stroke-width can be set with the\n     *      `.highcharts-graph` class name.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-linewidth-general/\n     *         On all series\n     * @sample {highcharts} highcharts/plotoptions/series-linewidth-specific/\n     *         On one single series\n     *\n     * @product highcharts highstock\n     */\n    lineWidth: 2,\n    /**\n     * For some series, there is a limit that shuts down animation\n     * by default when the total number of points in the chart is too high.\n     * For example, for a column chart and its derivatives, animation does\n     * not run if there is more than 250 points totally. To disable this\n     * cap, set `animationLimit` to `Infinity`. This option works if animation\n     * is fired on individual points, not on a group of points like e.g. during\n     * the initial animation.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-animationlimit/\n     *         Animation limit on updating individual points\n     *\n     * @type      {number}\n     * @apioption plotOptions.series.animationLimit\n     */\n    /**\n     * Allow this series' points to be selected by clicking on the graphic\n     * (columns, point markers, pie slices, map areas etc).\n     *\n     * The selected points can be handled by point select and unselect\n     * events, or collectively by the [getSelectedPoints\n     * ](/class-reference/Highcharts.Chart#getSelectedPoints) function.\n     *\n     * And alternative way of selecting points is through dragging.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-allowpointselect-line/\n     *         Line\n     * @sample {highcharts} highcharts/plotoptions/series-allowpointselect-column/\n     *         Column\n     * @sample {highcharts} highcharts/plotoptions/series-allowpointselect-pie/\n     *         Pie\n     * @sample {highcharts} highcharts/chart/events-selection-points/\n     *         Select a range of points through a drag selection\n     * @sample {highmaps} maps/plotoptions/series-allowpointselect/\n     *         Map area\n     * @sample {highmaps} maps/plotoptions/mapbubble-allowpointselect/\n     *         Map bubble\n     *\n     * @since 1.2.0\n     *\n     * @private\n     */\n    allowPointSelect: false,\n    /**\n     * When true, each point or column edge is rounded to its nearest pixel\n     * in order to render sharp on screen. In some cases, when there are a\n     * lot of densely packed columns, this leads to visible difference\n     * in column widths or distance between columns. In these cases,\n     * setting `crisp` to `false` may look better, even though each column\n     * is rendered blurry.\n     *\n     * @sample {highcharts} highcharts/plotoptions/column-crisp-false/\n     *         Crisp is false\n     *\n     * @since   5.0.10\n     * @product highcharts highstock gantt\n     *\n     * @private\n     */\n    crisp: true,\n    /**\n     * If true, a checkbox is displayed next to the legend item to allow\n     * selecting the series. The state of the checkbox is determined by\n     * the `selected` option.\n     *\n     * @productdesc {highmaps}\n     * Note that if a `colorAxis` is defined, the color axis is represented\n     * in the legend, not the series.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-showcheckbox-true/\n     *         Show select box\n     *\n     * @since 1.2.0\n     *\n     * @private\n     */\n    showCheckbox: false,\n    /**\n     * Enable or disable the initial animation when a series is displayed.\n     * The animation can also be set as a configuration object. Please\n     * note that this option only applies to the initial animation of the\n     * series itself. For other animations, see [chart.animation](\n     * #chart.animation) and the animation parameter under the API methods.\n     * The following properties are supported:\n     *\n     * - `defer`: The animation delay time in milliseconds.\n     *\n     * - `duration`: The duration of the animation in milliseconds. (Defaults to\n     *   `1000`)\n     *\n     * - `easing`: Can be a string reference to an easing function set on\n     *   the `Math` object or a function. See the _Custom easing function_\n     *   demo below. (Defaults to `easeInOutSine`)\n     *\n     * Due to poor performance, animation is disabled in old IE browsers\n     * for several chart types.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-animation-disabled/\n     *         Animation disabled\n     * @sample {highcharts} highcharts/plotoptions/series-animation-slower/\n     *         Slower animation\n     * @sample {highcharts} highcharts/plotoptions/series-animation-easing/\n     *         Custom easing function\n     * @sample {highstock} stock/plotoptions/animation-slower/\n     *         Slower animation\n     * @sample {highstock} stock/plotoptions/animation-easing/\n     *         Custom easing function\n     * @sample {highmaps} maps/plotoptions/series-animation-true/\n     *         Animation enabled on map series\n     * @sample {highmaps} maps/plotoptions/mapbubble-animation-false/\n     *         Disabled on mapbubble series\n     *\n     * @type    {boolean|Highcharts.AnimationOptionsObject}\n     * @default {highcharts} true\n     * @default {highstock} true\n     * @default {highmaps} false\n     *\n     * @private\n     */\n    animation: {\n        /** @ignore-option */\n        duration: 1000\n    },\n    /**\n     * An additional class name to apply to the series' graphical elements.\n     * This option does not replace default class names of the graphical\n     * element. Changes to the series' color will also be reflected in a\n     * chart's legend and tooltip.\n     *\n     * @sample {highcharts} highcharts/css/point-series-classname\n     *         Series and point class name\n     *\n     * @type      {string}\n     * @since     5.0.0\n     * @apioption plotOptions.series.className\n     */\n    /**\n     * Disable this option to allow series rendering in the whole plotting\n     * area.\n     *\n     * **Note:** Clipping should be always enabled when\n     * [chart.zoomType](#chart.zoomType) is set\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-clip/\n     *         Disabled clipping\n     *\n     * @default   true\n     * @type      {boolean}\n     * @since     3.0.0\n     * @apioption plotOptions.series.clip\n     */\n    /**\n     * The main color of the series. In line type series it applies to the\n     * line and the point markers unless otherwise specified. In bar type\n     * series it applies to the bars unless a color is specified per point.\n     * The default value is pulled from the `options.colors` array.\n     *\n     * In styled mode, the color can be defined by the\n     * [colorIndex](#plotOptions.series.colorIndex) option. Also, the series\n     * color can be set with the `.highcharts-series`,\n     * `.highcharts-color-{n}`, `.highcharts-{type}-series` or\n     * `.highcharts-series-{n}` class, or individual classes given by the\n     * `className` option.\n     *\n     * @productdesc {highmaps}\n     * In maps, the series color is rarely used, as most choropleth maps use\n     * the color to denote the value of each point. The series color can\n     * however be used in a map with multiple series holding categorized\n     * data.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-color-general/\n     *         General plot option\n     * @sample {highcharts} highcharts/plotoptions/series-color-specific/\n     *         One specific series\n     * @sample {highcharts} highcharts/plotoptions/series-color-area/\n     *         Area color\n     * @sample {highcharts} highcharts/series/infographic/\n     *         Pattern fill\n     * @sample {highmaps} maps/demo/category-map/\n     *         Category map by multiple series\n     *\n     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @apioption plotOptions.series.color\n     */\n    /**\n     * Styled mode only. A specific color index to use for the series, so its\n     * graphic representations are given the class name `highcharts-color-{n}`.\n     *\n     * Since v11, CSS variables on the form `--highcharts-color-{n}` make\n     * changing the color scheme very convenient.\n     *\n     * @sample    {highcharts} highcharts/css/colorindex/ Series and point color\n     *            index\n     *\n     * @type      {number}\n     * @since     5.0.0\n     * @apioption plotOptions.series.colorIndex\n     */\n    /**\n     * Whether to connect a graph line across null points, or render a gap\n     * between the two points on either side of the null.\n     *\n     * In stacked area chart, if `connectNulls` is set to true,\n     * null points are interpreted as 0.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-connectnulls-false/\n     *         False by default\n     * @sample {highcharts} highcharts/plotoptions/series-connectnulls-true/\n     *         True\n     *\n     * @type      {boolean}\n     * @default   false\n     * @product   highcharts highstock\n     * @apioption plotOptions.series.connectNulls\n     */\n    /**\n     * You can set the cursor to \"pointer\" if you have click events attached\n     * to the series, to signal to the user that the points and lines can\n     * be clicked.\n     *\n     * In styled mode, the series cursor can be set with the same classes\n     * as listed under [series.color](#plotOptions.series.color).\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-cursor-line/\n     *         On line graph\n     * @sample {highcharts} highcharts/plotoptions/series-cursor-column/\n     *         On columns\n     * @sample {highcharts} highcharts/plotoptions/series-cursor-scatter/\n     *         On scatter markers\n     * @sample {highstock} stock/plotoptions/cursor/\n     *         Pointer on a line graph\n     * @sample {highmaps} maps/plotoptions/series-allowpointselect/\n     *         Map area\n     * @sample {highmaps} maps/plotoptions/mapbubble-allowpointselect/\n     *         Map bubble\n     *\n     * @type      {string|Highcharts.CursorValue}\n     * @apioption plotOptions.series.cursor\n     */\n    /**\n     * A reserved subspace to store options and values for customized\n     * functionality. Here you can add additional data for your own event\n     * callbacks and formatter callbacks.\n     *\n     * @sample {highcharts} highcharts/point/custom/\n     *         Point and series with custom data\n     *\n     * @type      {Highcharts.Dictionary<*>}\n     * @apioption plotOptions.series.custom\n     */\n    /**\n     * Name of the dash style to use for the graph, or for some series types\n     * the outline of each shape.\n     *\n     * In styled mode, the\n     * [stroke dash-array](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/css/series-dashstyle/)\n     * can be set with the same classes as listed under\n     * [series.color](#plotOptions.series.color).\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-dashstyle-all/\n     *         Possible values demonstrated\n     * @sample {highcharts} highcharts/plotoptions/series-dashstyle/\n     *         Chart suitable for printing in black and white\n     * @sample {highstock} highcharts/plotoptions/series-dashstyle-all/\n     *         Possible values demonstrated\n     * @sample {highmaps} highcharts/plotoptions/series-dashstyle-all/\n     *         Possible values demonstrated\n     * @sample {highmaps} maps/plotoptions/series-dashstyle/\n     *         Dotted borders on a map\n     *\n     * @type      {Highcharts.DashStyleValue}\n     * @default   Solid\n     * @since     2.1\n     * @apioption plotOptions.series.dashStyle\n     */\n    /**\n     * A description of the series to add to the screen reader information\n     * about the series.\n     *\n     * @type      {string}\n     * @since     5.0.0\n     * @requires  modules/accessibility\n     * @apioption plotOptions.series.description\n     */\n    /**\n     * Options for the series data sorting.\n     *\n     * @type      {Highcharts.DataSortingOptionsObject}\n     * @since     8.0.0\n     * @product   highcharts highstock\n     * @apioption plotOptions.series.dataSorting\n     */\n    /**\n     * Enable or disable data sorting for the series. Use [xAxis.reversed](\n     * #xAxis.reversed) to change the sorting order.\n     *\n     * @sample {highcharts} highcharts/datasorting/animation/\n     *         Data sorting in scatter-3d\n     * @sample {highcharts} highcharts/datasorting/labels-animation/\n     *         Axis labels animation\n     * @sample {highcharts} highcharts/datasorting/dependent-sorting/\n     *         Dependent series sorting\n     * @sample {highcharts} highcharts/datasorting/independent-sorting/\n     *         Independent series sorting\n     *\n     * @type      {boolean}\n     * @since     8.0.0\n     * @apioption plotOptions.series.dataSorting.enabled\n     */\n    /**\n     * Whether to allow matching points by name in an update. If this option\n     * is disabled, points will be matched by order.\n     *\n     * @sample {highcharts} highcharts/datasorting/match-by-name/\n     *         Enabled match by name\n     *\n     * @type      {boolean}\n     * @since     8.0.0\n     * @apioption plotOptions.series.dataSorting.matchByName\n     */\n    /**\n     * Determines what data value should be used to sort by.\n     *\n     * @sample {highcharts} highcharts/datasorting/sort-key/\n     *         Sort key as `z` value\n     *\n     * @type      {string}\n     * @since     8.0.0\n     * @default   y\n     * @apioption plotOptions.series.dataSorting.sortKey\n     */\n    /**\n     * Enable or disable the mouse tracking for a specific series. This\n     * includes point tooltips and click events on graphs and points. For\n     * large datasets it improves performance.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-enablemousetracking-false/\n     *         No mouse tracking\n     * @sample {highmaps} maps/plotoptions/series-enablemousetracking-false/\n     *         No mouse tracking\n     *\n     * @type      {boolean}\n     * @default   true\n     * @apioption plotOptions.series.enableMouseTracking\n     */\n    enableMouseTracking: true,\n    /**\n     * Whether to use the Y extremes of the total chart width or only the\n     * zoomed area when zooming in on parts of the X axis. By default, the\n     * Y axis adjusts to the min and max of the visible data. Cartesian\n     * series only.\n     *\n     * @type      {boolean}\n     * @default   false\n     * @since     4.1.6\n     * @product   highcharts highstock gantt\n     * @apioption plotOptions.series.getExtremesFromAll\n     */\n    /**\n     * Highlight only the hovered point and fade the remaining points.\n     *\n     * Scatter-type series require enabling the 'inactive' marker state and\n     * adjusting opacity. Note that this approach could affect performance\n     * with large datasets.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-inactiveotherpoints-enabled/\n     *         Chart with inactiveOtherPoints option enabled.\n     *\n     * @type      {boolean}\n     * @default   false\n     * @apioption plotOptions.series.inactiveOtherPoints\n     */\n    /**\n     * An array specifying which option maps to which key in the data point\n     * array. This makes it convenient to work with unstructured data arrays\n     * from different sources.\n     *\n     * @see [series.data](#series.line.data)\n     *\n     * @sample {highcharts|highstock} highcharts/series/data-keys/\n     *         An extended data array with keys\n     * @sample {highcharts|highstock} highcharts/series/data-nested-keys/\n     *         Nested keys used to access object properties\n     *\n     * @type      {Array<string>}\n     * @since     4.1.6\n     * @apioption plotOptions.series.keys\n     */\n    /**\n     * The line cap used for line ends and line joins on the graph.\n     *\n     * @sample highcharts/series-line/linecap/\n     *         Line cap comparison\n     *\n     * @type       {Highcharts.SeriesLinecapValue}\n     * @default    round\n     * @product    highcharts highstock\n     * @apioption  plotOptions.series.linecap\n     */\n    /**\n     * The [id](#series.id) of another series to link to. Additionally,\n     * the value can be \":previous\" to link to the previous series. When\n     * two series are linked, only the first one appears in the legend.\n     * Toggling the visibility of this also toggles the linked series.\n     *\n     * If master series uses data sorting and linked series does not have\n     * its own sorting definition, the linked series will be sorted in the\n     * same order as the master one.\n     *\n     * @sample {highcharts|highstock} highcharts/demo/arearange-line/\n     *         Linked series\n     *\n     * @type      {string}\n     * @since     3.0\n     * @product   highcharts highstock gantt\n     * @apioption plotOptions.series.linkedTo\n     */\n    /**\n     * Options for the corresponding navigator series if `showInNavigator`\n     * is `true` for this series. Available options are the same as any\n     * series, documented at [plotOptions](#plotOptions.series) and\n     * [series](#series).\n     *\n     * These options are merged with options in [navigator.series](\n     * #navigator.series), and will take precedence if the same option is\n     * defined both places.\n     *\n     * @see [navigator.series](#navigator.series)\n     *\n     * @type      {Highcharts.PlotSeriesOptions}\n     * @since     5.0.0\n     * @product   highstock\n     * @apioption plotOptions.series.navigatorOptions\n     */\n    /**\n     * The color for the parts of the graph or points that are below the\n     * [threshold](#plotOptions.series.threshold). Note that `zones` takes\n     * precedence over the negative color. Using `negativeColor` is\n     * equivalent to applying a zone with value of 0.\n     *\n     * @see In styled mode, a negative color is applied by setting this option\n     *      to `true` combined with the `.highcharts-negative` class name.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-negative-color/\n     *         Spline, area and column\n     * @sample {highcharts} highcharts/plotoptions/arearange-negativecolor/\n     *         Arearange\n     * @sample {highcharts} highcharts/css/series-negative-color/\n     *         Styled mode\n     * @sample {highstock} highcharts/plotoptions/series-negative-color/\n     *         Spline, area and column\n     * @sample {highstock} highcharts/plotoptions/arearange-negativecolor/\n     *         Arearange\n     * @sample {highmaps} highcharts/plotoptions/series-negative-color/\n     *         Spline, area and column\n     * @sample {highmaps} highcharts/plotoptions/arearange-negativecolor/\n     *         Arearange\n     *\n     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @since     3.0\n     * @apioption plotOptions.series.negativeColor\n     */\n    /**\n     * Same as\n     * [accessibility.point.descriptionFormat](#accessibility.point.descriptionFormat),\n     * but for an individual series. Overrides the chart wide configuration.\n     *\n     * @type      {Function}\n     * @since 11.1.0\n     * @apioption plotOptions.series.pointDescriptionFormat\n     */\n    /**\n     * Same as\n     * [accessibility.series.descriptionFormatter](#accessibility.series.descriptionFormatter),\n     * but for an individual series. Overrides the chart wide configuration.\n     *\n     * @type      {Function}\n     * @since     5.0.12\n     * @apioption plotOptions.series.pointDescriptionFormatter\n     */\n    /**\n     * If no x values are given for the points in a series, `pointInterval`\n     * defines the interval of the x values. For example, if a series\n     * contains one value every decade starting from year 0, set\n     * `pointInterval` to `10`. In true `datetime` axes, the `pointInterval`\n     * is set in milliseconds.\n     *\n     * It can be also be combined with `pointIntervalUnit` to draw irregular\n     * time intervals.\n     *\n     * If combined with `relativeXValue`, an x value can be set on each\n     * point, and the `pointInterval` is added x times to the `pointStart`\n     * setting.\n     *\n     * Please note that this options applies to the _series data_, not the\n     * interval of the axis ticks, which is independent.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-pointstart-datetime/\n     *         Datetime X axis\n     * @sample {highcharts} highcharts/plotoptions/series-relativexvalue/\n     *         Relative x value\n     * @sample {highstock} stock/plotoptions/pointinterval-pointstart/\n     *         Using pointStart and pointInterval\n     * @sample {highstock} stock/plotoptions/relativexvalue/\n     *         Relative x value\n     *\n     * @type      {number}\n     * @default   1\n     * @product   highcharts highstock gantt\n     * @apioption plotOptions.series.pointInterval\n     */\n    /**\n     * On datetime series, this allows for setting the\n     * [pointInterval](#plotOptions.series.pointInterval) to irregular time\n     * units, `day`, `month` and `year`. A day is usually the same as 24\n     * hours, but `pointIntervalUnit` also takes the DST crossover into\n     * consideration when dealing with local time. Combine this option with\n     * `pointInterval` to draw weeks, quarters, 6 months, 10 years etc.\n     *\n     * Please note that this options applies to the _series data_, not the\n     * interval of the axis ticks, which is independent.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-pointintervalunit/\n     *         One point a month\n     * @sample {highstock} highcharts/plotoptions/series-pointintervalunit/\n     *         One point a month\n     *\n     * @type       {string}\n     * @since      4.1.0\n     * @product    highcharts highstock gantt\n     * @validvalue [\"day\", \"month\", \"year\"]\n     * @apioption  plotOptions.series.pointIntervalUnit\n     */\n    /**\n     * Possible values: `\"on\"`, `\"between\"`, `number`.\n     *\n     * In a column chart, when pointPlacement is `\"on\"`, the point will not\n     * create any padding of the X axis. In a polar column chart this means\n     * that the first column points directly north. If the pointPlacement is\n     * `\"between\"`, the columns will be laid out between ticks. This is\n     * useful for example for visualising an amount between two points in\n     * time or in a certain sector of a polar chart.\n     *\n     * Since Highcharts 3.0.2, the point placement can also be numeric,\n     * where 0 is on the axis value, -0.5 is between this value and the\n     * previous, and 0.5 is between this value and the next. Unlike the\n     * textual options, numeric point placement options won't affect axis\n     * padding.\n     *\n     * Note that pointPlacement needs a [pointRange](\n     * #plotOptions.series.pointRange) to work. For column series this is\n     * computed, but for line-type series it needs to be set.\n     *\n     * For the `xrange` series type and gantt charts, if the Y axis is a\n     * category axis, the `pointPlacement` applies to the Y axis rather than\n     * the (typically datetime) X axis.\n     *\n     * Defaults to `undefined` in cartesian charts, `\"between\"` in polar\n     * charts.\n     *\n     * @see [xAxis.tickmarkPlacement](#xAxis.tickmarkPlacement)\n     *\n     * @sample {highcharts|highstock} highcharts/plotoptions/series-pointplacement-between/\n     *         Between in a column chart\n     * @sample {highcharts|highstock} highcharts/plotoptions/series-pointplacement-numeric/\n     *         Numeric placement for custom layout\n     * @sample {highcharts|highstock} maps/plotoptions/heatmap-pointplacement/\n     *         Placement in heatmap\n     *\n     * @type      {string|number}\n     * @since     2.3.0\n     * @product   highcharts highstock gantt\n     * @apioption plotOptions.series.pointPlacement\n     */\n    /**\n     * If no x values are given for the points in a series, `pointStart`\n     * defines on what value to start. For example, if a series contains one\n     * yearly value starting from 1945, set `pointStart` to 1945.\n     *\n     * The `pointStart` setting can be a number, or a datetime string that is\n     * parsed according to the `time.timezone` setting.\n     *\n     * If combined with `relativeXValue`, an x value can be set on each\n     * point. The x value from the point options is multiplied by\n     * `pointInterval` and added to `pointStart` to produce a modified x\n     * value.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-pointstart-linear/\n     *         Linear\n     * @sample {highcharts} highcharts/plotoptions/series-pointstart-datetime/\n     *         Datetime\n     * @sample {highcharts} highcharts/plotoptions/series-relativexvalue/\n     *         Relative x value\n     * @sample {highstock} stock/plotoptions/pointinterval-pointstart/\n     *         Using pointStart and pointInterval\n     * @sample {highstock} stock/plotoptions/relativexvalue/\n     *         Relative x value\n     *\n     * @type      {number|string}\n     * @default   0\n     * @product   highcharts highstock gantt\n     * @apioption plotOptions.series.pointStart\n     */\n    /**\n     * When true, X values in the data set are relative to the current\n     * `pointStart`, `pointInterval` and `pointIntervalUnit` settings. This\n     * allows compression of the data for datasets with irregular X values.\n     *\n     * The real X values are computed on the formula `f(x) = ax + b`, where\n     * `a` is the `pointInterval` (optionally with a time unit given by\n     * `pointIntervalUnit`), and `b` is the `pointStart`.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-relativexvalue/\n     *         Relative X value\n     * @sample {highstock} stock/plotoptions/relativexvalue/\n     *         Relative X value\n     *\n     * @type      {boolean}\n     * @default   false\n     * @product   highcharts highstock\n     * @apioption plotOptions.series.relativeXValue\n     */\n    /**\n     * Whether to select the series initially. If `showCheckbox` is true,\n     * the checkbox next to the series name in the legend will be checked\n     * for a selected series.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-selected/\n     *         One out of two series selected\n     *\n     * @type      {boolean}\n     * @default   false\n     * @since     1.2.0\n     * @apioption plotOptions.series.selected\n     */\n    /**\n     * Whether to apply a drop shadow to the graph line. Since 2.3 the\n     * shadow can be an object configuration containing `color`, `offsetX`,\n     * `offsetY`, `opacity` and `width`.\n     *\n     * Note that in some cases, like stacked columns or other dense layouts, the\n     * series may cast shadows on each other. In that case, the\n     * `chart.seriesGroupShadow` allows applying a common drop shadow to the\n     * whole series group.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-shadow/\n     *         Shadow enabled\n     *\n     * @type      {boolean|Highcharts.ShadowOptionsObject}\n     * @default   false\n     * @apioption plotOptions.series.shadow\n     */\n    /**\n     * Whether to display this particular series or series type in the\n     * legend. Standalone series are shown in legend by default, and linked\n     * series are not. Since v7.2.0 it is possible to show series that use\n     * colorAxis by setting this option to `true`.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-showinlegend/\n     *         One series in the legend, one hidden\n     *\n     * @type      {boolean}\n     * @apioption plotOptions.series.showInLegend\n     */\n    /**\n     * Whether or not to show the series in the navigator. Takes precedence\n     * over [navigator.baseSeries](#navigator.baseSeries) if defined.\n     *\n     * @type      {boolean}\n     * @since     5.0.0\n     * @product   highstock\n     * @apioption plotOptions.series.showInNavigator\n     */\n    /**\n     * If set to `true`, the accessibility module will skip past the points\n     * in this series for keyboard navigation.\n     *\n     * @type      {boolean}\n     * @since     5.0.12\n     * @apioption plotOptions.series.skipKeyboardNavigation\n     */\n    /**\n     * Whether to stack the values of each series on top of each other.\n     * Possible values are `undefined` to disable, `\"normal\"` to stack by\n     * value or `\"percent\"`.\n     *\n     * When stacking is enabled, data must be sorted\n     * in ascending X order.\n     *\n     * Some stacking options are related to specific series types. In the\n     * streamgraph series type, the stacking option is set to `\"stream\"`.\n     * The second one is `\"overlap\"`, which only applies to waterfall\n     * series.\n     *\n     * @see [yAxis.reversedStacks](#yAxis.reversedStacks)\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-stacking-line/\n     *         Line\n     * @sample {highcharts} highcharts/plotoptions/series-stacking-column/\n     *         Column\n     * @sample {highcharts} highcharts/plotoptions/series-stacking-bar/\n     *         Bar\n     * @sample {highcharts} highcharts/plotoptions/series-stacking-area/\n     *         Area\n     * @sample {highcharts} highcharts/plotoptions/series-stacking-percent-line/\n     *         Line\n     * @sample {highcharts} highcharts/plotoptions/series-stacking-percent-column/\n     *         Column\n     * @sample {highcharts} highcharts/plotoptions/series-stacking-percent-bar/\n     *         Bar\n     * @sample {highcharts} highcharts/plotoptions/series-stacking-percent-area/\n     *         Area\n     * @sample {highcharts} highcharts/plotoptions/series-waterfall-with-normal-stacking\n     *         Waterfall with normal stacking\n     * @sample {highcharts} highcharts/plotoptions/series-waterfall-with-overlap-stacking\n     *         Waterfall with overlap stacking\n     * @sample {highstock} stock/plotoptions/stacking/\n     *         Area\n     *\n     * @type       {string}\n     * @product    highcharts highstock\n     * @validvalue [\"normal\", \"overlap\", \"percent\", \"stream\"]\n     * @apioption  plotOptions.series.stacking\n     */\n    /**\n     * Whether to apply steps to the line. Possible values are `left`,\n     * `center` and `right`.\n     *\n     * @sample {highcharts} highcharts/plotoptions/line-step/\n     *         Different step line options\n     * @sample {highcharts} highcharts/plotoptions/area-step/\n     *         Stepped, stacked area\n     * @sample {highstock} stock/plotoptions/line-step/\n     *         Step line\n     *\n     * @type       {string}\n     * @since      1.2.5\n     * @product    highcharts highstock\n     * @validvalue [\"left\", \"center\", \"right\"]\n     * @apioption  plotOptions.series.step\n     */\n    /**\n     * The threshold, also called zero level or base level. For line type\n     * series this is only used in conjunction with\n     * [negativeColor](#plotOptions.series.negativeColor).\n     *\n     * @see [softThreshold](#plotOptions.series.softThreshold).\n     *\n     * @type      {number|null}\n     * @default   0\n     * @since     3.0\n     * @product   highcharts highstock\n     * @apioption plotOptions.series.threshold\n     */\n    /**\n     * Set the initial visibility of the series.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-visible/\n     *         Two series, one hidden and one visible\n     * @sample {highstock} stock/plotoptions/series-visibility/\n     *         Hidden series\n     *\n     * @type      {boolean}\n     * @default   true\n     * @apioption plotOptions.series.visible\n     */\n    /**\n     * Defines the Axis on which the zones are applied.\n     *\n     * @see [zones](#plotOptions.series.zones)\n     *\n     * @sample {highcharts} highcharts/series/color-zones-zoneaxis-x/\n     *         Zones on the X-Axis\n     * @sample {highstock} highcharts/series/color-zones-zoneaxis-x/\n     *         Zones on the X-Axis\n     *\n     * @type      {string}\n     * @default   y\n     * @since     4.1.0\n     * @product   highcharts highstock\n     * @apioption plotOptions.series.zoneAxis\n     */\n    /**\n     * General event handlers for the series items. These event hooks can\n     * also be attached to the series at run time using the\n     * `Highcharts.addEvent` function.\n     *\n     * @declare Highcharts.SeriesEventsOptionsObject\n     *\n     * @private\n     */\n    events: {},\n    /**\n     * Fires after the series has finished its initial animation, or in case\n     * animation is disabled, immediately as the series is displayed.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-events-afteranimate/\n     *         Show label after animate\n     * @sample {highstock} highcharts/plotoptions/series-events-afteranimate/\n     *         Show label after animate\n     *\n     * @type      {Highcharts.SeriesAfterAnimateCallbackFunction}\n     * @since     4.0\n     * @product   highcharts highstock gantt\n     * @context   Highcharts.Series\n     * @apioption plotOptions.series.events.afterAnimate\n     */\n    /**\n     * Fires when the checkbox next to the series' name in the legend is\n     * clicked. One parameter, `event`, is passed to the function. The state\n     * of the checkbox is found by `event.checked`. The checked item is\n     * found by `event.item`. Return `false` to prevent the default action\n     * which is to toggle the select state of the series.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-events-checkboxclick/\n     *         Alert checkbox status\n     *\n     * @type      {Highcharts.SeriesCheckboxClickCallbackFunction}\n     * @since     1.2.0\n     * @context   Highcharts.Series\n     * @apioption plotOptions.series.events.checkboxClick\n     */\n    /**\n     * Fires when the series is clicked. One parameter, `event`, is passed\n     * to the function, containing common event information. Additionally,\n     * `event.point` holds a pointer to the nearest point on the graph.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-events-click/\n     *         Alert click info\n     * @sample {highstock} stock/plotoptions/series-events-click/\n     *         Alert click info\n     * @sample {highmaps} maps/plotoptions/series-events-click/\n     *         Display click info in subtitle\n     *\n     * @type      {Highcharts.SeriesClickCallbackFunction}\n     * @context   Highcharts.Series\n     * @apioption plotOptions.series.events.click\n     */\n    /**\n     * Fires when the series is hidden after chart generation time, either\n     * by clicking the legend item or by calling `.hide()`.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-events-hide/\n     *         Alert when the series is hidden by clicking the legend item\n     *\n     * @type      {Highcharts.SeriesHideCallbackFunction}\n     * @since     1.2.0\n     * @context   Highcharts.Series\n     * @apioption plotOptions.series.events.hide\n     */\n    /**\n     * Fires when the legend item belonging to the series is clicked. One\n     * parameter, `event`, is passed to the function. The default action\n     * is to toggle the visibility of the series. This can be prevented\n     * by returning `false` or calling `event.preventDefault()`.\n     *\n     * **Note:** This option is deprecated in favor of\n     * [legend.events.itemClick](#legend.events.itemClick).\n     *\n     * @type       {Highcharts.SeriesLegendItemClickCallbackFunction}\n     * @deprecated 11.4.4\n     * @context    Highcharts.Series\n     * @apioption  plotOptions.series.events.legendItemClick\n     */\n    /**\n     * Fires when the mouse leaves the graph. One parameter, `event`, is\n     * passed to the function, containing common event information. If the\n     * [stickyTracking](#plotOptions.series) option is true, `mouseOut`\n     * doesn't happen before the mouse enters another graph or leaves the\n     * plot area.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-events-mouseover-sticky/\n     *         With sticky tracking by default\n     * @sample {highcharts} highcharts/plotoptions/series-events-mouseover-no-sticky/\n     *         Without sticky tracking\n     *\n     * @type      {Highcharts.SeriesMouseOutCallbackFunction}\n     * @context   Highcharts.Series\n     * @apioption plotOptions.series.events.mouseOut\n     */\n    /**\n     * Fires when the mouse enters the graph. One parameter, `event`, is\n     * passed to the function, containing common event information.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-events-mouseover-sticky/\n     *         With sticky tracking by default\n     * @sample {highcharts} highcharts/plotoptions/series-events-mouseover-no-sticky/\n     *         Without sticky tracking\n     *\n     * @type      {Highcharts.SeriesMouseOverCallbackFunction}\n     * @context   Highcharts.Series\n     * @apioption plotOptions.series.events.mouseOver\n     */\n    /**\n     * Fires when the series is shown after chart generation time, either\n     * by clicking the legend item or by calling `.show()`.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-events-show/\n     *         Alert when the series is shown by clicking the legend item.\n     *\n     * @type      {Highcharts.SeriesShowCallbackFunction}\n     * @since     1.2.0\n     * @context   Highcharts.Series\n     * @apioption plotOptions.series.events.show\n     */\n    /**\n     * Options for the point markers of line and scatter-like series. Properties\n     * like `fillColor`, `lineColor` and `lineWidth` define the visual\n     * appearance of the markers. The `symbol` option defines the shape. Other\n     * series types, like column series, don't have markers, but have visual\n     * options on the series level instead.\n     *\n     * In styled mode, the markers can be styled with the `.highcharts-point`,\n     * `.highcharts-point-hover` and `.highcharts-point-select` class names.\n     *\n     * @declare Highcharts.PointMarkerOptionsObject\n     *\n     * @sample {highmaps} maps/demo/mappoint-mapmarker\n     *         Using the mapmarker symbol for points\n     *\n     * @private\n     */\n    marker: {\n        /**\n         * Enable or disable the point marker. If `undefined`, the markers\n         * are hidden when the data is dense, and shown for more widespread\n         * data points.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-marker-enabled/\n         *         Disabled markers\n         * @sample {highcharts} highcharts/plotoptions/series-marker-enabled-false/\n         *         Disabled in normal state but enabled on hover\n         * @sample {highstock} stock/plotoptions/series-marker/\n         *         Enabled markers\n         *\n         * @type      {boolean}\n         * @default   {highcharts} undefined\n         * @default   {highstock} false\n         * @apioption plotOptions.series.marker.enabled\n         */\n        /**\n         * The threshold for how dense the point markers should be before\n         * they are hidden, given that `enabled` is not defined. The number\n         * indicates the horizontal distance between the two closest points\n         * in the series, as multiples of the `marker.radius`. In other\n         * words, the default value of 2 means points are hidden if\n         * overlapping horizontally.\n         *\n         * @sample highcharts/plotoptions/series-marker-enabledthreshold\n         *         A higher threshold\n         *\n         * @since 6.0.5\n         */\n        enabledThreshold: 2,\n        /**\n         * The fill color of the point marker. When `undefined`, the series'\n         * or point's color is used.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-marker-fillcolor/\n         *         White fill\n         *\n         * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         * @apioption plotOptions.series.marker.fillColor\n         */\n        /**\n         * Image markers only. Set the image width explicitly. When using\n         * this option, a `width` must also be set.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-marker-width-height/\n         *         Fixed width and height\n         * @sample {highstock} highcharts/plotoptions/series-marker-width-height/\n         *         Fixed width and height\n         *\n         * @type      {number}\n         * @since     4.0.4\n         * @apioption plotOptions.series.marker.height\n         */\n        /**\n         * The color of the point marker's outline. When `undefined`, the\n         * series' or point's color is used.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-marker-fillcolor/\n         *         Inherit from series color (undefined)\n         *\n         * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         */\n        lineColor: \"#ffffff\" /* Palette.backgroundColor */,\n        /**\n         * The width of the point marker's outline.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-marker-fillcolor/\n         *         2px blue marker\n         */\n        lineWidth: 0,\n        /**\n         * The radius of the point marker.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-marker-radius/\n         *         Bigger markers\n         *\n         * @default {highstock} 2\n         * @default {highcharts} 4\n         *\n         */\n        radius: 4,\n        /**\n         * A predefined shape or symbol for the marker. When undefined, the\n         * symbol is pulled from options.symbols. Other possible values are\n         * `'circle'`, `'square'`,`'diamond'`, `'triangle'` and\n         * `'triangle-down'`.\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 {highcharts} highcharts/plotoptions/series-marker-symbol/\n         *         Predefined, graphic and custom markers\n         * @sample {highstock} highcharts/plotoptions/series-marker-symbol/\n         *         Predefined, graphic and custom markers\n         * @sample {highmaps} maps/demo/mappoint-mapmarker\n         *         Using the mapmarker symbol for points\n         *\n         * @type      {string}\n         * @apioption plotOptions.series.marker.symbol\n         */\n        /**\n         * Image markers only. Set the image width explicitly. When using\n         * this option, a `height` must also be set.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-marker-width-height/\n         *         Fixed width and height\n         * @sample {highstock} highcharts/plotoptions/series-marker-width-height/\n         *         Fixed width and height\n         *\n         * @type      {number}\n         * @since     4.0.4\n         * @apioption plotOptions.series.marker.width\n         */\n        /**\n         * States for a single point marker.\n         *\n         * @declare Highcharts.PointStatesOptionsObject\n         */\n        states: {\n            /**\n             * The normal state of a single point marker. Currently only\n             * used for setting animation when returning to normal state\n             * from hover.\n             *\n             * @declare Highcharts.PointStatesNormalOptionsObject\n             */\n            normal: {\n                /**\n                 * Animation when returning to normal state after hovering.\n                 *\n                 * @type {boolean|Partial<Highcharts.AnimationOptionsObject>}\n                 */\n                animation: true\n            },\n            /**\n             * The hover state for a single point marker.\n             *\n             * @declare Highcharts.PointStatesHoverOptionsObject\n             */\n            hover: {\n                /**\n                 * Animation when hovering over the marker.\n                 *\n                 * @type {boolean|Partial<Highcharts.AnimationOptionsObject>}\n                 */\n                animation: {\n                    /** @internal */\n                    duration: 150\n                },\n                /**\n                 * Enable or disable the point marker.\n                 *\n                 * @sample {highcharts} highcharts/plotoptions/series-marker-states-hover-enabled/\n                 *         Disabled hover state\n                 */\n                enabled: true,\n                /**\n                 * The fill color of the marker in hover state. When\n                 * `undefined`, the series' or point's fillColor for normal\n                 * state is used.\n                 *\n                 * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n                 * @apioption plotOptions.series.marker.states.hover.fillColor\n                 */\n                /**\n                 * The color of the point marker's outline. When\n                 * `undefined`, the series' or point's lineColor for normal\n                 * state is used.\n                 *\n                 * @sample {highcharts} highcharts/plotoptions/series-marker-states-hover-linecolor/\n                 *         White fill color, black line color\n                 *\n                 * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n                 * @apioption plotOptions.series.marker.states.hover.lineColor\n                 */\n                /**\n                 * The width of the point marker's outline. When\n                 * `undefined`, the series' or point's lineWidth for normal\n                 * state is used.\n                 *\n                 * @sample {highcharts} highcharts/plotoptions/series-marker-states-hover-linewidth/\n                 *         3px line width\n                 *\n                 * @type      {number}\n                 * @apioption plotOptions.series.marker.states.hover.lineWidth\n                 */\n                /**\n                 * The radius of the point marker. In hover state, it\n                 * defaults to the normal state's radius + 2 as per the\n                 * [radiusPlus](#plotOptions.series.marker.states.hover.radiusPlus)\n                 * option.\n                 *\n                 * @sample {highcharts} highcharts/plotoptions/series-marker-states-hover-radius/\n                 *         10px radius\n                 *\n                 * @type      {number}\n                 * @apioption plotOptions.series.marker.states.hover.radius\n                 */\n                /**\n                 * The number of pixels to increase the radius of the\n                 * hovered point.\n                 *\n                 * @sample {highcharts} highcharts/plotoptions/series-states-hover-linewidthplus/\n                 *         5 pixels greater radius on hover\n                 * @sample {highstock} highcharts/plotoptions/series-states-hover-linewidthplus/\n                 *         5 pixels greater radius on hover\n                 *\n                 * @since 4.0.3\n                 */\n                radiusPlus: 2,\n                /**\n                 * The additional line width for a hovered point.\n                 *\n                 * @sample {highcharts} highcharts/plotoptions/series-states-hover-linewidthplus/\n                 *         2 pixels wider on hover\n                 * @sample {highstock} highcharts/plotoptions/series-states-hover-linewidthplus/\n                 *         2 pixels wider on hover\n                 *\n                 * @since 4.0.3\n                 */\n                lineWidthPlus: 1\n            },\n            /**\n             * The appearance of the point marker when selected. In order to\n             * allow a point to be selected, set the\n             * `series.allowPointSelect` option to true.\n             *\n             * @declare Highcharts.PointStatesSelectOptionsObject\n             */\n            select: {\n                /**\n                 * Enable or disable visible feedback for selection.\n                 *\n                 * @sample {highcharts} highcharts/plotoptions/series-marker-states-select-enabled/\n                 *         Disabled select state\n                 *\n                 * @type      {boolean}\n                 * @default   true\n                 * @apioption plotOptions.series.marker.states.select.enabled\n                 */\n                /**\n                 * The radius of the point marker. In hover state, it\n                 * defaults to the normal state's radius + 2.\n                 *\n                 * @sample {highcharts} highcharts/plotoptions/series-marker-states-select-radius/\n                 *         10px radius for selected points\n                 *\n                 * @type      {number}\n                 * @apioption plotOptions.series.marker.states.select.radius\n                 */\n                /**\n                 * The fill color of the point marker.\n                 *\n                 * @sample {highcharts} highcharts/plotoptions/series-marker-states-select-fillcolor/\n                 *         Solid red discs for selected points\n                 *\n                 * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n                 */\n                fillColor: \"#cccccc\" /* Palette.neutralColor20 */,\n                /**\n                 * The color of the point marker's outline. When\n                 * `undefined`, the series' or point's color is used.\n                 *\n                 * @sample {highcharts} highcharts/plotoptions/series-marker-states-select-linecolor/\n                 *         Red line color for selected points\n                 *\n                 * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n                 */\n                lineColor: \"#000000\" /* Palette.neutralColor100 */,\n                /**\n                 * The width of the point marker's outline.\n                 *\n                 * @sample {highcharts} highcharts/plotoptions/series-marker-states-select-linewidth/\n                 *         3px line width for selected points\n                 */\n                lineWidth: 2\n            }\n        }\n    },\n    /**\n     * Properties for each single point.\n     *\n     * @declare Highcharts.PlotSeriesPointOptions\n     *\n     * @private\n     */\n    point: {\n        /**\n         * Fires when a point is clicked. One parameter, `event`, is passed\n         * to the function, containing common event information.\n         *\n         * If the `series.allowPointSelect` option is true, the default\n         * action for the point's click event is to toggle the point's\n         * select state. Returning `false` cancels this action.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-point-events-click/\n         *         Click marker to alert values\n         * @sample {highcharts} highcharts/plotoptions/series-point-events-click-column/\n         *         Click column\n         * @sample {highcharts} highcharts/plotoptions/series-point-events-click-url/\n         *         Go to URL\n         * @sample {highmaps} maps/plotoptions/series-point-events-click/\n         *         Click marker to display values\n         * @sample {highmaps} maps/plotoptions/series-point-events-click-url/\n         *         Go to URL\n         *\n         * @type      {Highcharts.PointClickCallbackFunction}\n         * @context   Highcharts.Point\n         * @apioption plotOptions.series.point.events.click\n         */\n        /**\n         * Fires when the mouse leaves the area close to the point. One\n         * parameter, `event`, is passed to the function, containing common\n         * event information.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-point-events-mouseover/\n         *         Show values in the chart's corner on mouse over\n         *\n         * @type      {Highcharts.PointMouseOutCallbackFunction}\n         * @context   Highcharts.Point\n         * @apioption plotOptions.series.point.events.mouseOut\n         */\n        /**\n         * Fires when the mouse enters the area close to the point. One\n         * parameter, `event`, is passed to the function, containing common\n         * event information.\n         *\n         * Returning `false` cancels the default behavior, which is to show a\n         * tooltip for the point.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-point-events-mouseover/\n         *         Show values in the chart's corner on mouse over\n         *\n         * @type      {Highcharts.PointMouseOverCallbackFunction}\n         * @context   Highcharts.Point\n         * @apioption plotOptions.series.point.events.mouseOver\n         */\n        /**\n         * Fires when the point is removed using the `.remove()` method. One\n         * parameter, `event`, is passed to the function. Returning `false`\n         * cancels the operation.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-point-events-remove/\n         *         Remove point and confirm\n         *\n         * @type      {Highcharts.PointRemoveCallbackFunction}\n         * @since     1.2.0\n         * @context   Highcharts.Point\n         * @apioption plotOptions.series.point.events.remove\n         */\n        /**\n         * Fires when the point is selected either programmatically or\n         * following a click on the point. One parameter, `event`, is passed\n         * to the function. Returning `false` cancels the operation.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-point-events-select/\n         *         Report the last selected point\n         * @sample {highmaps} maps/plotoptions/series-allowpointselect/\n         *         Report select and unselect\n         *\n         * @type      {Highcharts.PointSelectCallbackFunction}\n         * @since     1.2.0\n         * @context   Highcharts.Point\n         * @apioption plotOptions.series.point.events.select\n         */\n        /**\n         * Fires when the point is unselected either programmatically or\n         * following a click on the point. One parameter, `event`, is passed\n         * to the function.\n         *  Returning `false` cancels the operation.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-point-events-unselect/\n         *         Report the last unselected point\n         * @sample {highmaps} maps/plotoptions/series-allowpointselect/\n         *         Report select and unselect\n         *\n         * @type      {Highcharts.PointUnselectCallbackFunction}\n         * @since     1.2.0\n         * @context   Highcharts.Point\n         * @apioption plotOptions.series.point.events.unselect\n         */\n        /**\n         * Fires when the point is updated programmatically through the\n         * `.update()` method. One parameter, `event`, is passed to the\n         * function. The new point options can be accessed through\n         * `event.options`. Returning `false` cancels the operation.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-point-events-update/\n         *         Confirm point updating\n         *\n         * @type      {Highcharts.PointUpdateCallbackFunction}\n         * @since     1.2.0\n         * @context   Highcharts.Point\n         * @apioption plotOptions.series.point.events.update\n         */\n        /**\n         * Events for each single point.\n         *\n         * @declare Highcharts.PointEventsOptionsObject\n         */\n        events: {}\n    },\n    /**\n     * Options for the series data labels, appearing next to each data\n     * point.\n     *\n     * Since v6.2.0, multiple data labels can be applied to each single\n     * point by defining them as an array of configs.\n     *\n     * In styled mode, the data labels can be styled with the\n     * `.highcharts-data-label-box` and `.highcharts-data-label` class names\n     * ([see example](https://www.highcharts.com/samples/highcharts/css/series-datalabels)).\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-datalabels-enabled\n     *         Data labels enabled\n     * @sample {highcharts} highcharts/plotoptions/series-datalabels-multiple\n     *         Multiple data labels on a bar series\n     * @sample {highcharts} highcharts/css/series-datalabels\n     *         Styled mode example\n     * @sample {highmaps} maps/demo/color-axis\n     *         Choropleth map with data labels\n     * @sample {highmaps} maps/demo/mappoint-datalabels-mapmarker\n     *         Using data labels as map markers\n     *\n     * @type    {*|Array<*>}\n     * @product highcharts highstock highmaps gantt\n     *\n     * @private\n     */\n    dataLabels: {\n        /**\n         * Enable or disable the initial animation when a series is displayed\n         * for the `dataLabels`. The animation can also be set as a\n         * configuration object. Please note that this option only applies to\n         * the initial animation.\n         *\n         * For other animations, see [chart.animation](#chart.animation) and the\n         * animation parameter under the API methods. The following properties\n         * are supported:\n         *\n         * - `defer`: The animation delay time in milliseconds.\n         *\n         * @sample {highcharts} highcharts/plotoptions/animation-defer/\n         *          Animation defer settings\n         *\n         * @type      {boolean|Partial<Highcharts.AnimationOptionsObject>}\n         * @since     8.2.0\n         * @apioption plotOptions.series.dataLabels.animation\n         */\n        animation: {},\n        /**\n         * The animation delay time in milliseconds. Set to `0` to render the\n         * data labels immediately. As `undefined` inherits defer time from the\n         * [series.animation.defer](#plotOptions.series.animation.defer).\n         *\n         * @type      {number}\n         * @since     8.2.0\n         * @apioption plotOptions.series.dataLabels.animation.defer\n         */\n        /**\n         * The alignment of the data label compared to the point. If `right`,\n         * the right side of the label should be touching the point. For points\n         * with an extent, like columns, the alignments also dictates how to\n         * align it inside the box, as given with the\n         * [inside](#plotOptions.column.dataLabels.inside) option. Can be one of\n         * `left`, `center` or `right`.\n         *\n         * @sample {highcharts}\n         *         highcharts/plotoptions/series-datalabels-align-left/ Left\n         *         aligned\n         * @sample {highcharts}\n         *         highcharts/plotoptions/bar-datalabels-align-inside-bar/ Data\n         *         labels inside the bar\n         *\n         * @type {Highcharts.AlignValue|null}\n         */\n        align: 'center',\n        /**\n         * Alignment method for data labels. If set to `plotEdges`, the labels\n         * are aligned within the plot area in the direction of the y-axis. So\n         * in a regular column chart, the labels are aligned vertically\n         * according to the `verticalAlign` setting. In a bar chart, which is\n         * inverted, the labels are aligned horizontally according to the\n         * `align` setting. Applies to cartesian series only.\n         *\n         * @sample {highcharts} highcharts/series-bar/datalabels-alignto/\n         *         Align to plot edges\n         *\n         * @type      {string}\n         * @since 11.4.2\n         * @apioption plotOptions.series.dataLabels.alignTo\n         */\n        /**\n         * Whether to allow data labels to overlap. To make the labels less\n         * sensitive for overlapping, the\n         * [dataLabels.padding](#plotOptions.series.dataLabels.padding)\n         * can be set to 0.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-datalabels-allowoverlap-false/\n         *         Don't allow overlap\n         *\n         * @type      {boolean}\n         * @default   false\n         * @since     4.1.0\n         * @apioption plotOptions.series.dataLabels.allowOverlap\n         */\n        /**\n         * The background color or gradient for the data label. Setting it to\n         * `auto` will use the point's color.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-datalabels-box/\n         *         Data labels box options\n         * @sample {highmaps} maps/plotoptions/series-datalabels-box/\n         *         Data labels box options\n         * @sample {highmaps} maps/demo/mappoint-datalabels-mapmarker\n         *         Data labels as map markers\n         *\n         * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         * @since     2.2.1\n         * @apioption plotOptions.series.dataLabels.backgroundColor\n         */\n        /**\n         * The border color for the data label. Setting it to `auto` will use\n         * the point's color. Defaults to `undefined`.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-datalabels-box/\n         *         Data labels box options\n         *\n         * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         * @since     2.2.1\n         * @apioption plotOptions.series.dataLabels.borderColor\n         */\n        /**\n         * The border radius in pixels for the data label.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-datalabels-box/\n         *         Data labels box options\n         * @sample {highmaps} maps/plotoptions/series-datalabels-box/\n         *         Data labels box options\n         *\n         * @type      {number}\n         * @default   0\n         * @since     2.2.1\n         * @apioption plotOptions.series.dataLabels.borderRadius\n         */\n        /**\n         * The border width in pixels for the data label.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-datalabels-box/\n         *         Data labels box options\n         *\n         * @type      {number}\n         * @default   0\n         * @since     2.2.1\n         * @apioption plotOptions.series.dataLabels.borderWidth\n         */\n        borderWidth: 0,\n        /**\n         * A class name for the data label. Particularly in styled mode,\n         * this can be used to give each series' or point's data label\n         * unique styling. In addition to this option, a default color class\n         * name is added so that we can give the labels a contrast text\n         * shadow.\n         *\n         * @sample {highcharts} highcharts/css/data-label-contrast/\n         *         Contrast text shadow\n         * @sample {highcharts} highcharts/css/series-datalabels/\n         *         Styling by CSS\n         *\n         * @type      {string}\n         * @since     5.0.0\n         * @apioption plotOptions.series.dataLabels.className\n         */\n        /**\n         * This options is deprecated.\n         * Use [style.color](#plotOptions.series.dataLabels.style) instead.\n         *\n         * The text color for the data labels. Defaults to `undefined`. For\n         * certain series types, like column or map, the data labels can be\n         * drawn inside the points. In this case the data label will be\n         * drawn with maximum contrast by default. Additionally, it will be\n         * given a `text-outline` style with the opposite color, to further\n         * increase the contrast. This can be overridden by setting the\n         * `text-outline` style to `none` in the `dataLabels.style` option.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-datalabels-color/\n         *         Red data labels\n         * @sample {highmaps} maps/demo/color-axis/\n         *         White data labels\n         *\n         * @see [style.color](#plotOptions.series.dataLabels.style)\n         *\n         * @type       {Highcharts.ColorType}\n         * @deprecated 10.3\n         * @apioption  plotOptions.series.dataLabels.color\n         */\n        /**\n         * Whether to hide data labels that are outside the plot area. By\n         * default, the data label is moved inside the plot area according\n         * to the\n         * [overflow](#plotOptions.series.dataLabels.overflow)\n         * option.\n         *\n         * @type      {boolean}\n         * @default   true\n         * @since     2.3.3\n         * @apioption plotOptions.series.dataLabels.crop\n         */\n        /**\n         * Whether to defer displaying the data labels until the initial\n         * series animation has finished. Setting to `false` renders the\n         * data label immediately. If set to `true` inherits the defer\n         * time set in [plotOptions.series.animation](#plotOptions.series.animation).\n         *\n         * @since     4.0.0\n         * @type      {boolean}\n         * @product   highcharts highstock gantt\n         */\n        defer: true,\n        /**\n         * Enable or disable the data labels.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-datalabels-enabled/\n         *         Data labels enabled\n         * @sample {highmaps} maps/demo/color-axis/\n         *         Data labels enabled\n         *\n         * @type      {boolean}\n         * @default   false\n         * @apioption plotOptions.series.dataLabels.enabled\n         */\n        /**\n         * A declarative filter to control of which data labels to display.\n         * The declarative filter is designed for use when callback\n         * functions are not available, like when the chart options require\n         * a pure JSON structure or for use with graphical editors. For\n         * programmatic control, use the `formatter` instead, and return\n         * `undefined` to disable a single data label.\n         *\n         * @example\n         * filter: {\n         *     property: 'percentage',\n         *     operator: '>',\n         *     value: 4\n         * }\n         *\n         * @sample {highcharts} highcharts/demo/pie-monochrome\n         *         Data labels filtered by percentage\n         *\n         * @declare   Highcharts.DataLabelsFilterOptionsObject\n         * @since     6.0.3\n         * @apioption plotOptions.series.dataLabels.filter\n         */\n        /**\n         * The operator to compare by. Can be one of `>`, `<`, `>=`, `<=`,\n         * `==`, `===`, `!=` and `!==`.\n         *\n         * @type       {string}\n         * @validvalue [\">\", \"<\", \">=\", \"<=\", \"==\", \"===\", \"!=\", \"!==\"]\n         * @apioption  plotOptions.series.dataLabels.filter.operator\n         */\n        /**\n         * The point property to filter by. Point options are passed\n         * directly to properties, additionally there are `y` value,\n         * `percentage` and others listed under {@link Highcharts.Point}\n         * members.\n         *\n         * @type      {string}\n         * @apioption plotOptions.series.dataLabels.filter.property\n         */\n        /**\n         * The value to compare against.\n         *\n         * @type      {number}\n         * @apioption plotOptions.series.dataLabels.filter.value\n         */\n        /**\n         * A\n         * [format string](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting)\n         * for the data label. Available variables are the same as for\n         * `formatter`.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-datalabels-format/\n         *         Add a unit\n         * @sample {highcharts} highcharts/plotoptions/series-datalabels-format-subexpression/\n         *         Complex logic in the format string\n         * @sample {highmaps} maps/plotoptions/series-datalabels-format/\n         *         Formatted value in the data label\n         *\n         * @type      {string}\n         * @default   y\n         * @default   point.value\n         * @since     3.0\n         * @apioption plotOptions.series.dataLabels.format\n         */\n        // eslint-disable-next-line valid-jsdoc\n        /**\n         * Callback JavaScript function to format the data label. Note that if a\n         * `format` is defined, the format takes precedence and the formatter is\n         * ignored.\n         *\n         * @sample {highmaps} maps/plotoptions/series-datalabels-format/\n         *         Formatted value\n         *\n         * @type {Highcharts.DataLabelsFormatterCallbackFunction}\n         */\n        formatter: function () {\n            var numberFormatter = this.series.chart.numberFormatter;\n            return typeof this.y !== 'number' ?\n                '' : numberFormatter(this.y, -1);\n        },\n        /**\n         * For points with an extent, like columns or map areas, whether to\n         * align the data label inside the box or to the actual value point.\n         * Defaults to `false` in most cases, `true` in stacked columns.\n         *\n         * @type      {boolean}\n         * @since     3.0\n         * @apioption plotOptions.series.dataLabels.inside\n         */\n        /**\n         * Format for points with the value of null. Works analogously to\n         * [format](#plotOptions.series.dataLabels.format). `nullFormat` can\n         * be applied only to series which support displaying null points\n         * i.e `heatmap` or `tilemap`. Does not work with series that don't\n         * display null points, like `line`, `column`, `bar` or `pie`.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-datalabels-nullformat/\n         *         Format data label for null points in heat map\n         *\n         * @type      {boolean|string}\n         * @since     7.1.0\n         * @apioption plotOptions.series.dataLabels.nullFormat\n         */\n        /**\n         * Callback JavaScript function that defines formatting for points\n         * with the value of null. Works analogously to\n         * [formatter](#plotOptions.series.dataLabels.formatter).\n         * `nullFormatter` can be applied only to series which support\n         * displaying null points i.e `heatmap` or `tilemap`. Does not work\n         * with series that don't display null points, like `line`, `column`,\n         * `bar` or `pie`.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-datalabels-nullformat/\n         *         Format data label for null points in heat map\n         *\n         * @type      {Highcharts.DataLabelsFormatterCallbackFunction}\n         * @since     7.1.0\n         * @apioption plotOptions.series.dataLabels.nullFormatter\n         */\n        /**\n         * How to handle data labels that flow outside the plot area. The\n         * default is `\"justify\"`, which aligns them inside the plot area.\n         * For columns and bars, this means it will be moved inside the bar.\n         * To display data labels outside the plot area, set `crop` to\n         * `false` and `overflow` to `\"allow\"`.\n         *\n         * @type       {Highcharts.DataLabelsOverflowValue}\n         * @default    justify\n         * @since      3.0.6\n         * @apioption  plotOptions.series.dataLabels.overflow\n         */\n        /**\n         * When either the `borderWidth` or the `backgroundColor` is set,\n         * this is the padding within the box.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-datalabels-box/\n         *         Data labels box options\n         * @sample {highmaps} maps/plotoptions/series-datalabels-box/\n         *         Data labels box options\n         *\n         * @since 2.2.1\n         */\n        padding: 5,\n        /**\n         * Aligns data labels relative to points. If `center` alignment is\n         * not possible, it defaults to `right`.\n         *\n         * @type      {Highcharts.AlignValue}\n         * @default   center\n         * @apioption plotOptions.series.dataLabels.position\n         */\n        /**\n         * Text rotation in degrees. Note that due to a more complex\n         * structure, backgrounds, borders and padding will be lost on a\n         * rotated data label.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-datalabels-rotation/\n         *         Vertical labels\n         *\n         * @type      {number}\n         * @default   0\n         * @apioption plotOptions.series.dataLabels.rotation\n         */\n        /**\n         * The shadow of the box. Works best with `borderWidth` or\n         * `backgroundColor`. Since 2.3 the shadow can be an object\n         * configuration containing `color`, `offsetX`, `offsetY`, `opacity`\n         * and `width`.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-datalabels-box/\n         *         Data labels box options\n         *\n         * @type      {boolean|Highcharts.ShadowOptionsObject}\n         * @default   false\n         * @since     2.2.1\n         * @apioption plotOptions.series.dataLabels.shadow\n         */\n        /**\n         * The name of a symbol to use for the border around the label.\n         * Symbols are predefined functions on the Renderer object.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-datalabels-shape/\n         *         A callout for annotations\n         *\n         * @type      {string}\n         * @default   square\n         * @since     4.1.2\n         * @apioption plotOptions.series.dataLabels.shape\n         */\n        /**\n         * Styles for the label. The default `color` setting is\n         * `\"contrast\"`, which is a pseudo color that Highcharts picks up\n         * and applies the maximum contrast to the underlying point item,\n         * for example the bar in a bar chart.\n         *\n         * The `textOutline` is a pseudo property that applies an outline of\n         * the given width with the given color, which by default is the\n         * maximum contrast to the text. So a bright text color will result\n         * in a black text outline for maximum readability on a mixed\n         * background. In some cases, especially with grayscale text, the\n         * text outline doesn't work well, in which cases it can be disabled\n         * by setting it to `\"none\"`. When `useHTML` is true, the\n         * `textOutline` will not be picked up. In this, case, the same\n         * effect can be acheived through the `text-shadow` CSS property.\n         *\n         * For some series types, where each point has an extent, like for\n         * example tree maps, the data label may overflow the point. There\n         * are two strategies for handling overflow. By default, the text\n         * will wrap to multiple lines. The other strategy is to set\n         * `style.textOverflow` to `ellipsis`, which will keep the text on\n         * one line plus it will break inside long words.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-datalabels-style/\n         *         Bold labels\n         * @sample {highcharts} highcharts/plotoptions/pie-datalabels-overflow/\n         *         Long labels truncated with an ellipsis in a pie\n         * @sample {highcharts} highcharts/plotoptions/pie-datalabels-overflow-wrap/\n         *         Long labels are wrapped in a pie\n         * @sample {highmaps} maps/demo/color-axis/\n         *         Bold labels\n         *\n         * @type      {Highcharts.CSSObject}\n         * @since     4.1.0\n         * @apioption plotOptions.series.dataLabels.style\n         */\n        style: {\n            /** @internal */\n            fontSize: '0.7em',\n            /** @internal */\n            fontWeight: 'bold',\n            /** @internal */\n            color: 'contrast',\n            /** @internal */\n            textOutline: '1px contrast'\n        },\n        /**\n         * Options for a label text which should follow marker's shape.\n         * Border and background are disabled for a label that follows a\n         * path.\n         *\n         * **Note:** Only SVG-based renderer supports this option. Setting\n         * `useHTML` to true will disable this option.\n         *\n         * @declare   Highcharts.DataLabelsTextPathOptionsObject\n         * @since     7.1.0\n         * @apioption plotOptions.series.dataLabels.textPath\n         */\n        /**\n         * Presentation attributes for the text path.\n         *\n         * @type      {Highcharts.SVGAttributes}\n         * @since     7.1.0\n         * @apioption plotOptions.series.dataLabels.textPath.attributes\n         */\n        /**\n         * Enable or disable `textPath` option for link's or marker's data\n         * labels.\n         *\n         * @type      {boolean}\n         * @since     7.1.0\n         * @apioption plotOptions.series.dataLabels.textPath.enabled\n         */\n        /**\n         * Whether to\n         * [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n         * to render the labels.\n         *\n         * @type      {boolean}\n         * @default   false\n         * @apioption plotOptions.series.dataLabels.useHTML\n         */\n        /**\n         * The vertical alignment of a data label. Can be one of `top`,\n         * `middle` or `bottom`. The default value depends on the data, for\n         * instance in a column chart, the label is above positive values\n         * and below negative values.\n         *\n         * @type  {Highcharts.VerticalAlignValue|null}\n         * @since 2.3.3\n         */\n        verticalAlign: 'bottom',\n        /**\n         * The x position offset of the label relative to the point in\n         * pixels.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-datalabels-rotation/\n         *         Vertical and positioned\n         * @sample {highcharts} highcharts/plotoptions/bar-datalabels-align-inside-bar/\n         *         Data labels inside the bar\n         */\n        x: 0,\n        /**\n         * The z index of the data labels. Use a `zIndex` of 6 to display it above\n         * the series, or use a `zIndex` of 2 to display it behind the series.\n         *\n         * @type      {number}\n         * @default   6\n         * @since     2.3.5\n         * @apioption plotOptions.series.dataLabels.zIndex\n         */\n        /**\n         * The y position offset of the label relative to the point in\n         * pixels.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-datalabels-rotation/\n         *         Vertical and positioned\n         */\n        y: 0\n    },\n    /**\n     * When the series contains less points than the crop threshold, all\n     * points are drawn, even if the points fall outside the visible plot\n     * area at the current zoom. The advantage of drawing all points\n     * (including markers and columns), is that animation is performed on\n     * updates. On the other hand, when the series contains more points than\n     * the crop threshold, the series data is cropped to only contain points\n     * that fall within the plot area. The advantage of cropping away\n     * invisible points is to increase performance on large series.\n     *\n     * @since   2.2\n     * @product highcharts highstock\n     *\n     * @private\n     */\n    cropThreshold: 300,\n    /**\n     * Opacity of a series parts: line, fill (e.g. area) and dataLabels.\n     *\n     * @see [states.inactive.opacity](#plotOptions.series.states.inactive.opacity)\n     *\n     * @since 7.1.0\n     *\n     * @private\n     */\n    opacity: 1,\n    /**\n     * The width of each point on the x axis. For example in a column chart\n     * with one value each day, the pointRange would be 1 day (= 24 * 3600\n     * * 1000 milliseconds). This is normally computed automatically, but\n     * this option can be used to override the automatic value.\n     *\n     * @product highstock\n     *\n     * @private\n     */\n    pointRange: 0,\n    /**\n     * When this is true, the series will not cause the Y axis to cross\n     * the zero plane (or [threshold](#plotOptions.series.threshold) option)\n     * unless the data actually crosses the plane.\n     *\n     * For example, if `softThreshold` is `false`, a series of 0, 1, 2,\n     * 3 will make the Y axis show negative values according to the\n     * `minPadding` option. If `softThreshold` is `true`, the Y axis starts\n     * at 0.\n     *\n     * @since   4.1.9\n     * @product highcharts highstock\n     *\n     * @private\n     */\n    softThreshold: true,\n    /**\n     * @declare Highcharts.SeriesStatesOptionsObject\n     *\n     * @private\n     */\n    states: {\n        /**\n         * The normal state of a series, or for point items in column, pie\n         * and similar series. Currently only used for setting animation\n         * when returning to normal state from hover.\n         *\n         * @declare Highcharts.SeriesStatesNormalOptionsObject\n         */\n        normal: {\n            /**\n             * Animation when returning to normal state after hovering.\n             *\n                 * @type {boolean|Partial<Highcharts.AnimationOptionsObject>}\n             */\n            animation: true\n        },\n        /**\n         * Options for the hovered series. These settings override the\n         * normal state options when a series is moused over or touched.\n         *\n         * @declare Highcharts.SeriesStatesHoverOptionsObject\n         */\n        hover: {\n            /**\n             * Enable separate styles for the hovered series to visualize\n             * that the user hovers either the series itself or the legend.\n             *\n             * @sample {highcharts} highcharts/plotoptions/series-states-hover-enabled/\n             *         Line\n             * @sample {highcharts} highcharts/plotoptions/series-states-hover-enabled-column/\n             *         Column\n             * @sample {highcharts} highcharts/plotoptions/series-states-hover-enabled-pie/\n             *         Pie\n             *\n             * @type      {boolean}\n             * @default   true\n             * @since     1.2\n             * @apioption plotOptions.series.states.hover.enabled\n             */\n            /**\n             * Animation setting for hovering the graph in line-type series.\n             *\n             * @type {boolean|Partial<Highcharts.AnimationOptionsObject>}\n             * @since   5.0.8\n             * @product highcharts highstock\n             */\n            animation: {\n                /**\n                 * The duration of the hover animation in milliseconds. By\n                 * default the hover state animates quickly in, and slowly\n                 * back to normal.\n                 *\n                 * @internal\n                 */\n                duration: 150\n            },\n            /**\n             * Pixel width of the graph line. By default this property is\n             * undefined, and the `lineWidthPlus` property dictates how much\n             * to increase the linewidth from normal state.\n             *\n             * @sample {highcharts} highcharts/plotoptions/series-states-hover-linewidth/\n             *         5px line on hover\n             *\n             * @type      {number}\n             * @product   highcharts highstock\n             * @apioption plotOptions.series.states.hover.lineWidth\n             */\n            /**\n             * The additional line width for the graph of a hovered series.\n             *\n             * @sample {highcharts} highcharts/plotoptions/series-states-hover-linewidthplus/\n             *         5 pixels wider\n             * @sample {highstock} highcharts/plotoptions/series-states-hover-linewidthplus/\n             *         5 pixels wider\n             *\n             * @since   4.0.3\n             * @product highcharts highstock\n             */\n            lineWidthPlus: 1,\n            /**\n             * In Highcharts 1.0, the appearance of all markers belonging\n             * to the hovered series. For settings on the hover state of the\n             * individual point, see\n             * [marker.states.hover](#plotOptions.series.marker.states.hover).\n             *\n             * @deprecated\n             *\n             * @extends   plotOptions.series.marker\n             * @excluding states, symbol\n             * @product   highcharts highstock\n             */\n            marker: {\n            // `lineWidth: base + 1`,\n            // `radius: base + 1`\n            },\n            /**\n             * Options for the halo appearing around the hovered point in\n             * line-type series as well as outside the hovered slice in pie\n             * charts. By default the halo is filled by the current point or\n             * series color with an opacity of 0.25\\. The halo can be\n             * disabled by setting the `halo` option to `null`.\n             *\n             * In styled mode, the halo is styled with the\n             * `.highcharts-halo` class, with colors inherited from\n             * `.highcharts-color-{n}`.\n             *\n             * @sample {highcharts} highcharts/plotoptions/halo/\n             *         Halo options\n             * @sample {highstock} highcharts/plotoptions/halo/\n             *         Halo options\n             *\n             * @declare Highcharts.SeriesStatesHoverHaloOptionsObject\n             * @type    {null|*}\n             * @since   4.0\n             * @product highcharts highstock\n             */\n            halo: {\n                /**\n                 * A collection of SVG attributes to override the appearance\n                 * of the halo, for example `fill`, `stroke` and\n                 * `stroke-width`.\n                 *\n                 * @type      {Highcharts.SVGAttributes}\n                 * @since     4.0\n                 * @product   highcharts highstock\n                 * @apioption plotOptions.series.states.hover.halo.attributes\n                 */\n                /**\n                 * The pixel size of the halo. For point markers this is the\n                 * radius of the halo. For pie slices it is the width of the\n                 * halo outside the slice. For bubbles it defaults to 5 and\n                 * is the width of the halo outside the bubble.\n                 *\n                 * @since   4.0\n                 * @product highcharts highstock\n                 */\n                size: 10,\n                /**\n                 * Opacity for the halo unless a specific fill is overridden\n                 * using the `attributes` setting. Note that Highcharts is\n                 * only able to apply opacity to colors of hex or rgb(a)\n                 * formats.\n                 *\n                 * @since   4.0\n                 * @product highcharts highstock\n                 */\n                opacity: 0.25\n            }\n        },\n        /**\n         * Specific options for point in selected states, after being\n         * selected by\n         * [allowPointSelect](#plotOptions.series.allowPointSelect)\n         * or programmatically.\n         *\n         * @sample maps/plotoptions/series-allowpointselect/\n         *         Allow point select demo\n         *\n         * @declare   Highcharts.SeriesStatesSelectOptionsObject\n         * @extends   plotOptions.series.states.hover\n         * @excluding brightness\n         */\n        select: {\n            animation: {\n                /** @internal */\n                duration: 0\n            }\n        },\n        /**\n         * The opposite state of a hover for series.\n         *\n         * @sample highcharts/plotoptions/series-states-inactive-disabled\n         *         Disabled inactive state\n         *\n         * @declare Highcharts.SeriesStatesInactiveOptionsObject\n         */\n        inactive: {\n            /**\n             * Enable or disable the inactive state for a series\n             *\n             * @sample highcharts/plotoptions/series-states-inactive-disabled\n             *         Disabled inactive state\n             *\n             * @type {boolean}\n             * @default true\n             * @apioption plotOptions.series.states.inactive.enabled\n             */\n            /**\n             * The animation for entering the inactive state.\n             *\n             * @type {boolean|Partial<Highcharts.AnimationOptionsObject>}\n             */\n            animation: {\n                /** @internal */\n                duration: 150\n            },\n            /**\n             * Opacity of series elements (dataLabels, line, area).\n             *\n             * @type {number}\n             */\n            opacity: 0.2\n        }\n    },\n    /**\n     * Sticky tracking of mouse events. When true, the `mouseOut` event on a\n     * series isn't triggered until the mouse moves over another series, or\n     * out of the plot area. When false, the `mouseOut` event on a series is\n     * triggered when the mouse leaves the area around the series' graph or\n     * markers. This also implies the tooltip when not shared. When\n     * `stickyTracking` is false and `tooltip.shared` is false, the tooltip\n     * will be hidden when moving the mouse between series. Defaults to true\n     * for line and area type series, but to false for columns, pies etc.\n     *\n     * **Note:** The boost module will force this option because of\n     * technical limitations.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-stickytracking-true/\n     *         True by default\n     * @sample {highcharts} highcharts/plotoptions/series-stickytracking-false/\n     *         False\n     *\n     * @default {highcharts} true\n     * @default {highstock} true\n     * @default {highmaps} false\n     * @since   2.0\n     *\n     * @private\n     */\n    stickyTracking: true,\n    /**\n     * A configuration object for the tooltip rendering of each single\n     * series. Properties are inherited from [tooltip](#tooltip), but only\n     * the following properties can be defined on a series level.\n     *\n     * @declare   Highcharts.SeriesTooltipOptionsObject\n     * @since     2.3\n     * @extends   tooltip\n     * @excluding animation, backgroundColor, borderColor, borderRadius,\n     *            borderWidth, className, crosshairs, enabled, formatter,\n     *            headerShape, hideDelay, outside, padding, positioner,\n     *            shadow, shape, shared, snap, split, stickOnContact,\n     *            style, useHTML\n     * @apioption plotOptions.series.tooltip\n     */\n    /**\n     * When a series contains a `data` array that is longer than this, the\n     * Series class looks for data configurations of plain numbers or arrays of\n     * numbers. The first and last valid points are checked. If found, the rest\n     * of the data is assumed to be the same. This saves expensive data checking\n     * and indexing in long series, and makes data-heavy charts render faster.\n     *\n     * Set it to `0` disable.\n     *\n     * Note:\n     * - In boost mode turbo threshold is forced. Only array of numbers or two\n     *   dimensional arrays are allowed.\n     * - In version 11.4.3 and earlier, if object configurations were passed\n     *   beyond the turbo threshold, a warning was logged in the console and the\n     *   data series didn't render.\n     *\n     * @since   2.2\n     * @product highcharts highstock gantt\n     *\n     * @private\n     */\n    turboThreshold: 1000,\n    /**\n     * An array defining zones within a series. Zones can be applied to the\n     * X axis, Y axis or Z axis for bubbles, according to the `zoneAxis`\n     * option. The zone definitions have to be in ascending order regarding\n     * to the value.\n     *\n     * In styled mode, the color zones are styled with the\n     * `.highcharts-zone-{n}` class, or custom classed from the `className`\n     * option\n     * ([view live demo](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/css/color-zones/)).\n     *\n     * @see [zoneAxis](#plotOptions.series.zoneAxis)\n     *\n     * @sample {highcharts} highcharts/series/color-zones-simple/\n     *         Color zones\n     * @sample {highstock} highcharts/series/color-zones-simple/\n     *         Color zones\n     *\n     * @declare   Highcharts.SeriesZonesOptionsObject\n     * @type      {Array<*>}\n     * @since     4.1.0\n     * @product   highcharts highstock\n     * @apioption plotOptions.series.zones\n     */\n    /**\n     * Styled mode only. A custom class name for the zone.\n     *\n     * @sample highcharts/css/color-zones/\n     *         Zones styled by class name\n     *\n     * @type      {string}\n     * @since     5.0.0\n     * @apioption plotOptions.series.zones.className\n     */\n    /**\n     * Defines the color of the series.\n     *\n     * @see [series color](#plotOptions.series.color)\n     *\n     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @since     4.1.0\n     * @product   highcharts highstock\n     * @apioption plotOptions.series.zones.color\n     */\n    /**\n     * A name for the dash style to use for the graph.\n     *\n     * @see [plotOptions.series.dashStyle](#plotOptions.series.dashStyle)\n     *\n     * @sample {highcharts|highstock} highcharts/series/color-zones-dashstyle-dot/\n     *         Dashed line indicates prognosis\n     *\n     * @type      {Highcharts.DashStyleValue}\n     * @since     4.1.0\n     * @product   highcharts highstock\n     * @apioption plotOptions.series.zones.dashStyle\n     */\n    /**\n     * Defines the fill color for the series (in area type series)\n     *\n     * @see [fillColor](#plotOptions.area.fillColor)\n     *\n     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @since     4.1.0\n     * @product   highcharts highstock\n     * @apioption plotOptions.series.zones.fillColor\n     */\n    /**\n     * The value up to where the zone extends, if undefined the zones\n     * stretches to the last value in the series.\n     *\n     * @type      {number}\n     * @since     4.1.0\n     * @product   highcharts highstock\n     * @apioption plotOptions.series.zones.value\n     */\n    /**\n     * When using dual or multiple color axes, this number defines which\n     * colorAxis the particular series is connected to. It refers to\n     * either the\n     * {@link #colorAxis.id|axis id}\n     * or the index of the axis in the colorAxis array, with 0 being the\n     * first. Set this option to false to prevent a series from connecting\n     * to the default color axis.\n     *\n     * Since v7.2.0 the option can also be an axis id or an axis index\n     * instead of a boolean flag.\n     *\n     * @sample highcharts/coloraxis/coloraxis-with-pie/\n     *         Color axis with pie series\n     * @sample highcharts/coloraxis/multiple-coloraxis/\n     *         Multiple color axis\n     *\n     * @type      {number|string|boolean}\n     * @default   0\n     * @product   highcharts highstock highmaps\n     * @apioption plotOptions.series.colorAxis\n     */\n    /**\n     * Determines what data value should be used to calculate point color\n     * if `colorAxis` is used. Requires to set `min` and `max` if some\n     * custom point property is used or if approximation for data grouping\n     * is set to `'sum'`.\n     *\n     * @sample highcharts/coloraxis/custom-color-key/\n     *         Custom color key\n     * @sample highcharts/coloraxis/color-key-with-stops/\n     *         Custom colorKey with color axis stops\n     * @sample highcharts/coloraxis/changed-default-color-key/\n     *         Changed default color key\n     *\n     * @type      {string}\n     * @default   y\n     * @since     7.2.0\n     * @product   highcharts highstock highmaps\n     * @apioption plotOptions.series.colorKey\n     */\n    /**\n     * What type of legend symbol to render for this series. Can be one of\n     * `areaMarker`, `lineMarker` or `rectangle`.\n     *\n     * @validvalue [\"areaMarker\", \"lineMarker\", \"rectangle\"]\n     *\n     * @sample {highcharts} highcharts/series/legend-symbol/\n     *         Change the legend symbol\n     *\n     * @type      {string}\n     * @default   rectangle\n     * @since     11.0.1\n     * @apioption plotOptions.series.legendSymbol\n     */\n    /**\n     * Defines the color of the legend symbol for this series. Defaults to\n     * undefined, in which case the series color is used. Does not work with\n     * styled mode.\n     *\n     * @sample {highcharts|highstock} highcharts/series/legend-symbol-color/\n     *         Change the legend symbol color\n     *\n     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @default   undefined\n     * @since 12.0.0\n     * @product   highcharts highstock highmaps\n     * @apioption plotOptions.series.legendSymbolColor\n     */\n    /**\n     * Determines whether the series should look for the nearest point\n     * in both dimensions or just the x-dimension when hovering the series.\n     * Defaults to `'xy'` for scatter series and `'x'` for most other\n     * series. If the data has duplicate x-values, it is recommended to\n     * set this to `'xy'` to allow hovering over all points.\n     *\n     * Applies only to series types using nearest neighbor search (not\n     * direct hover) for tooltip.\n     *\n     * @sample {highcharts} highcharts/series/findnearestpointby/\n     *         Different hover behaviors\n     * @sample {highstock} highcharts/series/findnearestpointby/\n     *         Different hover behaviors\n     * @sample {highmaps} highcharts/series/findnearestpointby/\n     *         Different hover behaviors\n     *\n     * @since      5.0.10\n     * @validvalue [\"x\", \"xy\"]\n     *\n     * @private\n     */\n    findNearestPointBy: 'x'\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var SeriesDefaults = (seriesDefaults);\n\n;// ./code/es5/es-modules/Core/Series/SeriesRegistry.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar SeriesRegistry_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n        p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\nvar SeriesRegistry_defaultOptions = Defaults.defaultOptions;\n\n\nvar SeriesRegistry_extend = Core_Utilities.extend, SeriesRegistry_extendClass = Core_Utilities.extendClass, SeriesRegistry_merge = Core_Utilities.merge;\n/* *\n *\n *  Namespace\n *\n * */\nvar SeriesRegistry;\n(function (SeriesRegistry) {\n    /* *\n     *\n     *  Properties\n     *\n     * */\n    /**\n     * @internal\n     * @todo Move `Globals.seriesTypes` code to her.\n     */\n    SeriesRegistry.seriesTypes = Core_Globals.seriesTypes;\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Registers class pattern of a series.\n     *\n     * @private\n     */\n    function registerSeriesType(seriesType, SeriesClass) {\n        var defaultPlotOptions = SeriesRegistry_defaultOptions.plotOptions || {},\n            seriesOptions = SeriesClass.defaultOptions,\n            seriesProto = SeriesClass.prototype;\n        seriesProto.type = seriesType;\n        if (!seriesProto.pointClass) {\n            seriesProto.pointClass = Series_Point;\n        }\n        if (SeriesRegistry.seriesTypes[seriesType]) {\n            return false;\n        }\n        if (seriesOptions) {\n            defaultPlotOptions[seriesType] = seriesOptions;\n        }\n        SeriesRegistry.seriesTypes[seriesType] = SeriesClass;\n        return true;\n    }\n    SeriesRegistry.registerSeriesType = registerSeriesType;\n    /**\n     * Old factory to create new series prototypes.\n     *\n     * @deprecated\n     * @function Highcharts.seriesType\n     *\n     * @param {string} type\n     * The series type name.\n     *\n     * @param {string} parent\n     * The parent series type name. Use `line` to inherit from the basic\n     * {@link Series} object.\n     *\n     * @param {Highcharts.SeriesOptionsType|Highcharts.Dictionary<*>} options\n     * The additional default options that are merged with the parent's options.\n     *\n     * @param {Highcharts.Dictionary<*>} [props]\n     * The properties (functions and primitives) to set on the new prototype.\n     *\n     * @param {Highcharts.Dictionary<*>} [pointProps]\n     * Members for a series-specific extension of the {@link Point} prototype if\n     * needed.\n     *\n     * @return {Highcharts.Series}\n     * The newly created prototype as extended from {@link Series} or its\n     * derivatives.\n     */\n    function seriesType(type, parent, options, seriesProto, pointProto) {\n        var defaultPlotOptions = SeriesRegistry_defaultOptions.plotOptions || {};\n        parent = parent || '';\n        // Merge the options\n        defaultPlotOptions[type] = SeriesRegistry_merge(defaultPlotOptions[parent], options);\n        // Create the class\n        delete SeriesRegistry.seriesTypes[type];\n        registerSeriesType(type, SeriesRegistry_extendClass(SeriesRegistry.seriesTypes[parent] || function () { }, seriesProto));\n        SeriesRegistry.seriesTypes[type].prototype.type = type;\n        // Create the point class if needed\n        if (pointProto) {\n            var PointClass = /** @class */ (function (_super) {\n                    SeriesRegistry_extends(PointClass, _super);\n                function PointClass() {\n                    return _super !== null && _super.apply(this, arguments) || this;\n                }\n                return PointClass;\n            }(Series_Point));\n            SeriesRegistry_extend(PointClass.prototype, pointProto);\n            SeriesRegistry.seriesTypes[type].prototype.pointClass = PointClass;\n        }\n        return SeriesRegistry.seriesTypes[type];\n    }\n    SeriesRegistry.seriesType = seriesType;\n})(SeriesRegistry || (SeriesRegistry = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Series_SeriesRegistry = (SeriesRegistry);\n\n;// ./code/es5/es-modules/Core/Series/Series.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar Series_assign = (undefined && undefined.__assign) || function () {\n    Series_assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return Series_assign.apply(this, arguments);\n};\nvar Series_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\n\nvar Series_animObject = AnimationUtilities.animObject, Series_setAnimation = AnimationUtilities.setAnimation;\n\n\nvar Series_defaultOptions = Defaults.defaultOptions;\n\nvar Series_registerEventOptions = Core_Foundation.registerEventOptions;\n\nvar Series_svg = Core_Globals.svg, Series_win = Core_Globals.win;\n\n\n\n\nvar seriesTypes = Series_SeriesRegistry.seriesTypes;\n\n\nvar Series_arrayMax = Core_Utilities.arrayMax, Series_arrayMin = Core_Utilities.arrayMin, Series_clamp = Core_Utilities.clamp, Series_correctFloat = Core_Utilities.correctFloat, Series_crisp = Core_Utilities.crisp, Series_defined = Core_Utilities.defined, Series_destroyObjectProperties = Core_Utilities.destroyObjectProperties, Series_diffObjects = Core_Utilities.diffObjects, Series_erase = Core_Utilities.erase, Series_error = Core_Utilities.error, Series_extend = Core_Utilities.extend, Series_find = Core_Utilities.find, Series_fireEvent = Core_Utilities.fireEvent, Series_getClosestDistance = Core_Utilities.getClosestDistance, Series_getNestedProperty = Core_Utilities.getNestedProperty, Series_insertItem = Core_Utilities.insertItem, Series_isArray = Core_Utilities.isArray, Series_isNumber = Core_Utilities.isNumber, Series_isString = Core_Utilities.isString, Series_merge = Core_Utilities.merge, Series_objectEach = Core_Utilities.objectEach, Series_pick = Core_Utilities.pick, Series_removeEvent = Core_Utilities.removeEvent, Series_syncTimeout = Core_Utilities.syncTimeout;\n/* *\n *\n *  Class\n *\n * */\n/**\n * This is the base series prototype that all other series types inherit from.\n * A new series is initialized either through the\n * [series](https://api.highcharts.com/highcharts/series)\n * option structure, or after the chart is initialized, through\n * {@link Highcharts.Chart#addSeries}.\n *\n * The object can be accessed in a number of ways. All series and point event\n * handlers give a reference to the `series` object. The chart object has a\n * {@link Highcharts.Chart#series|series} property that is a collection of all\n * the chart's series. The point objects and axis objects also have the same\n * reference.\n *\n * Another way to reference the series programmatically is by `id`. Add an id\n * in the series configuration options, and get the series object by\n * {@link Highcharts.Chart#get}.\n *\n * Configuration options for the series are given in three levels. Options for\n * all series in a chart are given in the\n * [plotOptions.series](https://api.highcharts.com/highcharts/plotOptions.series)\n * object. Then options for all series of a specific type\n * are given in the plotOptions of that type, for example `plotOptions.line`.\n * Next, options for one single series are given in the series array, or as\n * arguments to `chart.addSeries`.\n *\n * The data in the series is stored in various arrays.\n *\n * - First, `series.options.data` contains all the original config options for\n *   each point whether added by options or methods like `series.addPoint`.\n *\n * - The `series.dataTable` refers to an instance of [DataTableCore](https://api.highcharts.com/class-reference/Highcharts.Data)\n *   or `DataTable` that contains the data in a tabular format. Individual\n *   columns can be read from `series.getColumn()`.\n *\n * - Next, `series.data` contains those values converted to points, but in case\n *   the series data length exceeds the `cropThreshold`, or if the data is\n *   grouped, `series.data` doesn't contain all the points. It only contains the\n *   points that have been created on demand.\n *\n * - Then there's `series.points` that contains all currently visible point\n *   objects. In case of cropping, the cropped-away points are not part of this\n *   array. The `series.points` array starts at `series.cropStart` compared to\n *   `series.data` and `series.options.data`. If however the series data is\n *   grouped, these can't be correlated one to one.\n *\n * @class\n * @name Highcharts.Series\n *\n * @param {Highcharts.Chart} chart\n * The chart instance.\n *\n * @param {Highcharts.SeriesOptionsType|object} options\n * The series options.\n */\nvar Series = /** @class */ (function () {\n    function Series() {\n        /* *\n         *\n         *  Static Properties\n         *\n         * */\n        this.zoneAxis = 'y';\n        // eslint-enable valid-jsdoc\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    Series.prototype.init = function (chart, userOptions) {\n        var _a;\n        Series_fireEvent(this, 'init', { options: userOptions });\n        // Create the data table\n        (_a = this.dataTable) !== null && _a !== void 0 ? _a : (this.dataTable = new Data_DataTableCore());\n        var series = this,\n            chartSeries = chart.series;\n        // The 'eventsToUnbind' property moved from prototype into the\n        // Series init to avoid reference to the same array between\n        // the different series and charts. #12959, #13937\n        this.eventsToUnbind = [];\n        /**\n         * Read only. The chart that the series belongs to.\n         *\n         * @name Highcharts.Series#chart\n         * @type {Highcharts.Chart}\n         */\n        series.chart = chart;\n        /**\n         * Read only. The series' type, like \"line\", \"area\", \"column\" etc.\n         * The type in the series options anc can be altered using\n         * {@link Series#update}.\n         *\n         * @name Highcharts.Series#type\n         * @type {string}\n         */\n        /**\n         * Read only. The series' current options. To update, use\n         * {@link Series#update}.\n         *\n         * @name Highcharts.Series#options\n         * @type {Highcharts.SeriesOptionsType}\n         */\n        series.options = series.setOptions(userOptions);\n        var options = series.options,\n            visible = options.visible !== false;\n        /**\n         * All child series that are linked to the current series through the\n         * [linkedTo](https://api.highcharts.com/highcharts/series.line.linkedTo)\n         * option.\n         *\n         * @name Highcharts.Series#linkedSeries\n         * @type {Array<Highcharts.Series>}\n         * @readonly\n         */\n        series.linkedSeries = [];\n        // Bind the axes\n        series.bindAxes();\n        Series_extend(series, {\n            /**\n             * The series name as given in the options. Defaults to\n             * \"Series {n}\".\n             *\n             * @name Highcharts.Series#name\n             * @type {string}\n             */\n            name: options.name,\n            state: '',\n            /**\n             * Read only. The series' visibility state as set by {@link\n             * Series#show}, {@link Series#hide}, or in the initial\n             * configuration.\n             *\n             * @name Highcharts.Series#visible\n             * @type {boolean}\n             */\n            visible: visible, // True by default\n            /**\n             * Read only. The series' selected state as set by {@link\n             * Highcharts.Series#select}.\n             *\n             * @name Highcharts.Series#selected\n             * @type {boolean}\n             */\n            selected: options.selected === true // False by default\n        });\n        Series_registerEventOptions(this, options);\n        var events = options.events;\n        if ((events && events.click) ||\n            (options.point &&\n                options.point.events &&\n                options.point.events.click) ||\n            options.allowPointSelect) {\n            chart.runTrackerClick = true;\n        }\n        series.getColor();\n        series.getSymbol();\n        // Mark cartesian\n        if (series.isCartesian) {\n            chart.hasCartesianSeries = true;\n        }\n        // Get the index and register the series in the chart. The index is\n        // one more than the current latest series index (#5960).\n        var lastSeries;\n        if (chartSeries.length) {\n            lastSeries = chartSeries[chartSeries.length - 1];\n        }\n        series._i = Series_pick(lastSeries && lastSeries._i, -1) + 1;\n        series.opacity = series.options.opacity;\n        // Insert the series and re-order all series above the insertion\n        // point.\n        chart.orderItems('series', Series_insertItem(this, chartSeries));\n        // Set options for series with sorting and set data later.\n        if (options.dataSorting && options.dataSorting.enabled) {\n            series.setDataSortingOptions();\n        }\n        else if (!series.points && !series.data) {\n            series.setData(options.data, false);\n        }\n        Series_fireEvent(this, 'afterInit');\n    };\n    /**\n     * Check whether the series item is itself or inherits from a certain\n     * series type.\n     *\n     * @function Highcharts.Series#is\n     * @param {string} type The type of series to check for, can be either\n     *        featured or custom series types. For example `column`, `pie`,\n     *        `ohlc` etc.\n     *\n     * @return {boolean}\n     *        True if this item is or inherits from the given type.\n     */\n    Series.prototype.is = function (type) {\n        return seriesTypes[type] && this instanceof seriesTypes[type];\n    };\n    /**\n     * Set the xAxis and yAxis properties of cartesian series, and register\n     * the series in the `axis.series` array.\n     *\n     * @private\n     * @function Highcharts.Series#bindAxes\n     */\n    Series.prototype.bindAxes = function () {\n        var series = this,\n            seriesOptions = series.options,\n            chart = series.chart;\n        var axisOptions;\n        Series_fireEvent(this, 'bindAxes', null, function () {\n            // Repeat for xAxis and yAxis\n            (series.axisTypes || []).forEach(function (coll) {\n                // Loop through the chart's axis objects\n                (chart[coll] || []).forEach(function (axis) {\n                    axisOptions = axis.options;\n                    // Apply if the series xAxis or yAxis option matches\n                    // the number of the axis, or if undefined, use the\n                    // first axis\n                    if (Series_pick(seriesOptions[coll], 0) === axis.index ||\n                        (typeof seriesOptions[coll] !==\n                            'undefined' &&\n                            seriesOptions[coll] === axisOptions.id)) {\n                        // Register this series in the axis.series lookup\n                        Series_insertItem(series, axis.series);\n                        // Set this series.xAxis or series.yAxis reference\n                        /**\n                         * Read only. The unique xAxis object associated\n                         * with the series.\n                         *\n                         * @name Highcharts.Series#xAxis\n                         * @type {Highcharts.Axis}\n                         */\n                        /**\n                         * Read only. The unique yAxis object associated\n                         * with the series.\n                         *\n                         * @name Highcharts.Series#yAxis\n                         * @type {Highcharts.Axis}\n                         */\n                        series[coll] = axis;\n                        // Mark dirty for redraw\n                        axis.isDirty = true;\n                    }\n                });\n                // The series needs an X and an Y axis\n                if (!series[coll] &&\n                    series.optionalAxis !== coll) {\n                    Series_error(18, true, chart);\n                }\n            });\n        });\n        Series_fireEvent(this, 'afterBindAxes');\n    };\n    /**\n     * Define hasData functions for series. These return true if there\n     * are data points on this series within the plot area.\n     *\n     * @private\n     * @function Highcharts.Series#hasData\n     */\n    Series.prototype.hasData = function () {\n        return ((this.visible &&\n            typeof this.dataMax !== 'undefined' &&\n            typeof this.dataMin !== 'undefined') || ( // #3703\n        this.visible &&\n            this.dataTable.rowCount > 0 // #9758\n        ));\n    };\n    /**\n     * Determine whether the marker in a series has changed.\n     *\n     * @private\n     * @function Highcharts.Series#hasMarkerChanged\n     */\n    Series.prototype.hasMarkerChanged = function (options, oldOptions) {\n        var marker = options.marker,\n            oldMarker = oldOptions.marker || {};\n        return marker && ((oldMarker.enabled && !marker.enabled) ||\n            oldMarker.symbol !== marker.symbol || // #10870, #15946\n            oldMarker.height !== marker.height || // #16274\n            oldMarker.width !== marker.width // #16274\n        );\n    };\n    /**\n     * Return an auto incremented x value based on the pointStart and\n     * pointInterval options. This is only used if an x value is not given\n     * for the point that calls autoIncrement.\n     *\n     * @private\n     * @function Highcharts.Series#autoIncrement\n     */\n    Series.prototype.autoIncrement = function (x) {\n        var _a,\n            _b;\n        var options = this.options,\n            _c = this.options,\n            pointIntervalUnit = _c.pointIntervalUnit,\n            relativeXValue = _c.relativeXValue,\n            time = this.chart.time,\n            xIncrement = (_b = (_a = this.xIncrement) !== null && _a !== void 0 ? _a : time.parse(options.pointStart)) !== null && _b !== void 0 ? _b : 0;\n        var pointInterval;\n        this.pointInterval = pointInterval = Series_pick(this.pointInterval, options.pointInterval, 1);\n        if (relativeXValue && Series_isNumber(x)) {\n            pointInterval *= x;\n        }\n        // Added code for pointInterval strings\n        if (pointIntervalUnit) {\n            var d = time.toParts(xIncrement);\n            if (pointIntervalUnit === 'day') {\n                d[2] += pointInterval;\n            }\n            else if (pointIntervalUnit === 'month') {\n                d[1] += pointInterval;\n            }\n            else if (pointIntervalUnit === 'year') {\n                d[0] += pointInterval;\n            }\n            pointInterval = time.makeTime.apply(time, d) - xIncrement;\n        }\n        if (relativeXValue && Series_isNumber(x)) {\n            return xIncrement + pointInterval;\n        }\n        this.xIncrement = xIncrement + pointInterval;\n        return xIncrement;\n    };\n    /**\n     * Internal function to set properties for series if data sorting is\n     * enabled.\n     *\n     * @private\n     * @function Highcharts.Series#setDataSortingOptions\n     */\n    Series.prototype.setDataSortingOptions = function () {\n        var options = this.options;\n        Series_extend(this, {\n            requireSorting: false,\n            sorted: false,\n            enabledDataSorting: true,\n            allowDG: false\n        });\n        // To allow unsorted data for column series.\n        if (!Series_defined(options.pointRange)) {\n            options.pointRange = 1;\n        }\n    };\n    /**\n     * Set the series options by merging from the options tree. Called\n     * internally on initializing and updating series. This function will\n     * not redraw the series. For API usage, use {@link Series#update}.\n     * @private\n     * @function Highcharts.Series#setOptions\n     * @param {Highcharts.SeriesOptionsType} itemOptions\n     * The series options.\n     * @emits Highcharts.Series#event:afterSetOptions\n     */\n    Series.prototype.setOptions = function (itemOptions) {\n        var _a,\n            _b;\n        var chart = this.chart,\n            chartOptions = chart.options,\n            plotOptions = chartOptions.plotOptions,\n            userOptions = chart.userOptions || {},\n            seriesUserOptions = Series_merge(itemOptions),\n            styledMode = chart.styledMode,\n            e = {\n                plotOptions: plotOptions,\n                userOptions: seriesUserOptions\n            };\n        var zone;\n        Series_fireEvent(this, 'setOptions', e);\n        // These may be modified by the event\n        var typeOptions = e.plotOptions[this.type],\n            userPlotOptions = (userOptions.plotOptions || {}),\n            userPlotOptionsSeries = userPlotOptions.series || {},\n            defaultPlotOptionsType = (Series_defaultOptions.plotOptions[this.type] || {}),\n            userPlotOptionsType = userPlotOptions[this.type] || {};\n        // Use copy to prevent undetected changes (#9762)\n        /**\n         * Contains series options by the user without defaults.\n         * @name Highcharts.Series#userOptions\n         * @type {Highcharts.SeriesOptionsType}\n         */\n        this.userOptions = e.userOptions;\n        var options = Series_merge(typeOptions,\n            plotOptions.series, \n            // #3881, chart instance plotOptions[type] should trump\n            // plotOptions.series\n            userPlotOptionsType,\n            seriesUserOptions);\n        // The tooltip options are merged between global and series specific\n        // options. Importance order asscendingly:\n        // globals: (1)tooltip, (2)plotOptions.series,\n        // (3)plotOptions[this.type]\n        // init userOptions with possible later updates: 4-6 like 1-3 and\n        // (7)this series options\n        this.tooltipOptions = Series_merge(Series_defaultOptions.tooltip, // 1\n        (_a = Series_defaultOptions.plotOptions.series) === null || _a === void 0 ? void 0 : _a.tooltip, // 2\n        defaultPlotOptionsType === null || defaultPlotOptionsType === void 0 ? void 0 : defaultPlotOptionsType.tooltip, // 3\n        chart.userOptions.tooltip, // 4\n        (_b = userPlotOptions.series) === null || _b === void 0 ? void 0 : _b.tooltip, // 5\n        userPlotOptionsType.tooltip, // 6\n        seriesUserOptions.tooltip // 7\n        );\n        // When shared tooltip, stickyTracking is true by default,\n        // unless user says otherwise.\n        this.stickyTracking = Series_pick(seriesUserOptions.stickyTracking, userPlotOptionsType.stickyTracking, userPlotOptionsSeries.stickyTracking, (this.tooltipOptions.shared && !this.noSharedTooltip ?\n            true :\n            options.stickyTracking));\n        // Delete marker object if not allowed (#1125)\n        if (typeOptions.marker === null) {\n            delete options.marker;\n        }\n        // Handle color zones\n        this.zoneAxis = options.zoneAxis || 'y';\n        var zones = this.zones = // #20440, create deep copy of zones options\n                (options.zones || []).map(function (z) { return (Series_assign({},\n            z)); });\n        if ((options.negativeColor || options.negativeFillColor) &&\n            !options.zones) {\n            zone = {\n                value: options[this.zoneAxis + 'Threshold'] ||\n                    options.threshold ||\n                    0,\n                className: 'highcharts-negative'\n            };\n            if (!styledMode) {\n                zone.color = options.negativeColor;\n                zone.fillColor = options.negativeFillColor;\n            }\n            zones.push(zone);\n        }\n        // Push one extra zone for the rest\n        if (zones.length && Series_defined(zones[zones.length - 1].value)) {\n            zones.push(styledMode ? {} : {\n                color: this.color,\n                fillColor: this.fillColor\n            });\n        }\n        Series_fireEvent(this, 'afterSetOptions', { options: options });\n        return options;\n    };\n    /**\n     * Return series name in \"Series {Number}\" format or the one defined by\n     * a user. This method can be simply overridden as series name format\n     * can vary (e.g. technical indicators).\n     *\n     * @function Highcharts.Series#getName\n     *\n     * @return {string}\n     * The series name.\n     */\n    Series.prototype.getName = function () {\n        // #4119\n        return Series_pick(this.options.name, 'Series ' + (this.index + 1));\n    };\n    /**\n     * @private\n     * @function Highcharts.Series#getCyclic\n     */\n    Series.prototype.getCyclic = function (prop, value, defaults) {\n        var chart = this.chart, indexName = \"\" + prop + \"Index\", counterName = \"\" + prop + \"Counter\", len = (\n            // Symbol count\n            (defaults === null || defaults === void 0 ? void 0 : defaults.length) ||\n                // Color count\n                chart.options.chart.colorCount);\n        var i,\n            setting;\n        if (!value) {\n            // Pick up either the colorIndex option, or the series.colorIndex\n            // after Series.update()\n            setting = Series_pick(prop === 'color' ? this.options.colorIndex : void 0, this[indexName]);\n            if (Series_defined(setting)) { // After Series.update()\n                i = setting;\n            }\n            else {\n                // #6138\n                if (!chart.series.length) {\n                    chart[counterName] = 0;\n                }\n                i = chart[counterName] % len;\n                chart[counterName] += 1;\n            }\n            if (defaults) {\n                value = defaults[i];\n            }\n        }\n        // Set the colorIndex\n        if (typeof i !== 'undefined') {\n            this[indexName] = i;\n        }\n        this[prop] = value;\n    };\n    /**\n     * Get the series' color based on either the options or pulled from\n     * global options.\n     *\n     * @private\n     * @function Highcharts.Series#getColor\n     */\n    Series.prototype.getColor = function () {\n        if (this.chart.styledMode) {\n            this.getCyclic('color');\n        }\n        else if (this.options.colorByPoint) {\n            this.color = \"#cccccc\" /* Palette.neutralColor20 */;\n        }\n        else {\n            this.getCyclic('color', this.options.color ||\n                Series_defaultOptions.plotOptions[this.type].color, this.chart.options.colors);\n        }\n    };\n    /**\n     * Get all points' instances created for this series.\n     *\n     * @private\n     * @function Highcharts.Series#getPointsCollection\n     */\n    Series.prototype.getPointsCollection = function () {\n        return (this.hasGroupedData ? this.points : this.data) || [];\n    };\n    /**\n     * Get the series' symbol based on either the options or pulled from\n     * global options.\n     *\n     * @private\n     * @function Highcharts.Series#getSymbol\n     */\n    Series.prototype.getSymbol = function () {\n        var seriesMarkerOption = this.options.marker;\n        this.getCyclic('symbol', seriesMarkerOption.symbol, this.chart.options.symbols);\n    };\n    /**\n     * Shorthand to get one of the series' data columns from `Series.dataTable`.\n     *\n     * @private\n     * @function Highcharts.Series#getColumn\n     */\n    Series.prototype.getColumn = function (columnName, modified) {\n        return (modified ? this.dataTable.modified : this.dataTable)\n            .getColumn(columnName, true) || [];\n    };\n    /**\n     * Finds the index of an existing point that matches the given point\n     * options.\n     *\n     * @private\n     * @function Highcharts.Series#findPointIndex\n     * @param {Highcharts.PointOptionsObject} optionsObject\n     * The options of the point.\n     * @param {number} fromIndex\n     * The index to start searching from, used for optimizing series with\n     * required sorting.\n     * @return {number|undefined}\n     * Returns the index of a matching point, or undefined if no match is found.\n     */\n    Series.prototype.findPointIndex = function (optionsObject, fromIndex) {\n        var id = optionsObject.id,\n            x = optionsObject.x,\n            oldData = this.points,\n            dataSorting = this.options.dataSorting;\n        var matchingPoint,\n            matchedById,\n            pointIndex;\n        if (id) {\n            var item = this.chart.get(id);\n            if (item instanceof Series_Point) {\n                matchingPoint = item;\n            }\n        }\n        else if (this.linkedParent ||\n            this.enabledDataSorting ||\n            this.options.relativeXValue) {\n            var matcher = function (oldPoint) { return !oldPoint.touched &&\n                    oldPoint.index === optionsObject.index; };\n            if (dataSorting && dataSorting.matchByName) {\n                matcher = function (oldPoint) { return !oldPoint.touched &&\n                    oldPoint.name === optionsObject.name; };\n            }\n            else if (this.options.relativeXValue) {\n                matcher = function (oldPoint) { return !oldPoint.touched &&\n                    oldPoint.options.x === optionsObject.x; };\n            }\n            matchingPoint = Series_find(oldData, matcher);\n            // Add unmatched point as a new point\n            if (!matchingPoint) {\n                return void 0;\n            }\n        }\n        if (matchingPoint) {\n            pointIndex = matchingPoint && matchingPoint.index;\n            if (typeof pointIndex !== 'undefined') {\n                matchedById = true;\n            }\n        }\n        // Search for the same X in the existing data set\n        if (typeof pointIndex === 'undefined' && Series_isNumber(x)) {\n            pointIndex = this.getColumn('x').indexOf(x, fromIndex);\n        }\n        // Reduce pointIndex if data is cropped\n        if (pointIndex !== -1 &&\n            typeof pointIndex !== 'undefined' &&\n            this.cropped) {\n            pointIndex = (pointIndex >= this.cropStart) ?\n                pointIndex - this.cropStart : pointIndex;\n        }\n        if (!matchedById &&\n            Series_isNumber(pointIndex) &&\n            oldData[pointIndex] && oldData[pointIndex].touched) {\n            pointIndex = void 0;\n        }\n        return pointIndex;\n    };\n    /**\n     * Internal function called from setData. If the point count is the same\n     * as it was, or if there are overlapping X values, just run\n     * Point.update which is cheaper, allows animation, and keeps references\n     * to points. This also allows adding or removing points if the X-es\n     * don't match.\n     *\n     * @private\n     * @function Highcharts.Series#updateData\n     */\n    Series.prototype.updateData = function (data, animation) {\n        var options = this.options,\n            dataSorting = options.dataSorting,\n            oldData = this.points,\n            pointsToAdd = [],\n            requireSorting = this.requireSorting,\n            equalLength = data.length === oldData.length;\n        var hasUpdatedByKey,\n            i,\n            point,\n            lastIndex,\n            succeeded = true;\n        this.xIncrement = null;\n        // Iterate the new data\n        data.forEach(function (pointOptions, i) {\n            var optionsObject = (Series_defined(pointOptions) &&\n                    this.pointClass.prototype.optionsToObject.call({ series: this },\n                pointOptions)) || {};\n            var pointIndex;\n            // Get the x of the new data point\n            var x = optionsObject.x,\n                id = optionsObject.id;\n            if (id || Series_isNumber(x)) {\n                pointIndex = this.findPointIndex(optionsObject, lastIndex);\n                // Matching X not found\n                // or used already due to ununique x values (#8995),\n                // add point (but later)\n                if (pointIndex === -1 ||\n                    typeof pointIndex === 'undefined') {\n                    pointsToAdd.push(pointOptions);\n                    // Matching X found, update\n                }\n                else if (oldData[pointIndex] &&\n                    pointOptions !== options.data[pointIndex]) {\n                    oldData[pointIndex].update(pointOptions, false, null, false);\n                    // Mark it touched, below we will remove all points that\n                    // are not touched.\n                    oldData[pointIndex].touched = true;\n                    // Speed optimize by only searching after last known\n                    // index. Performs ~20% bettor on large data sets.\n                    if (requireSorting) {\n                        lastIndex = pointIndex + 1;\n                    }\n                    // Point exists, no changes, don't remove it\n                }\n                else if (oldData[pointIndex]) {\n                    oldData[pointIndex].touched = true;\n                }\n                // If the length is equal and some of the nodes had a\n                // match in the same position, we don't want to remove\n                // non-matches.\n                if (!equalLength ||\n                    i !== pointIndex ||\n                    (dataSorting && dataSorting.enabled) ||\n                    this.hasDerivedData) {\n                    hasUpdatedByKey = true;\n                }\n            }\n            else {\n                // Gather all points that are not matched\n                pointsToAdd.push(pointOptions);\n            }\n        }, this);\n        // Remove points that don't exist in the updated data set\n        if (hasUpdatedByKey) {\n            i = oldData.length;\n            while (i--) {\n                point = oldData[i];\n                if (point && !point.touched && point.remove) {\n                    point.remove(false, animation);\n                }\n            }\n            // If we did not find keys (ids or x-values), and the length is the\n            // same, update one-to-one\n        }\n        else if (equalLength && (!dataSorting || !dataSorting.enabled)) {\n            data.forEach(function (point, i) {\n                // .update doesn't exist on a linked, hidden series (#3709)\n                // (#10187)\n                if (point !== oldData[i].y && !oldData[i].destroyed) {\n                    oldData[i].update(point, false, null, false);\n                }\n            });\n            // Don't add new points since those configs are used above\n            pointsToAdd.length = 0;\n            // Did not succeed in updating data\n        }\n        else {\n            succeeded = false;\n        }\n        oldData.forEach(function (point) {\n            if (point) {\n                point.touched = false;\n            }\n        });\n        if (!succeeded) {\n            return false;\n        }\n        // Add new points\n        pointsToAdd.forEach(function (point) {\n            this.addPoint(point, false, null, null, false);\n        }, this);\n        var xData = this.getColumn('x');\n        if (this.xIncrement === null &&\n            xData.length) {\n            this.xIncrement = Series_arrayMax(xData);\n            this.autoIncrement();\n        }\n        return true;\n    };\n    Series.prototype.dataColumnKeys = function () {\n        return Series_spreadArray(['x'], (this.pointArrayMap || ['y']), true);\n    };\n    /**\n     * Apply a new set of data to the series and optionally redraw it. The\n     * new data array is passed by reference (except in case of\n     * `updatePoints`), and may later be mutated when updating the chart\n     * data.\n     *\n     * Note the difference in behaviour when setting the same amount of\n     * points, or a different amount of points, as handled by the\n     * `updatePoints` parameter.\n     *\n     * @sample highcharts/members/series-setdata/\n     *         Set new data from a button\n     * @sample highcharts/members/series-setdata-pie/\n     *         Set data in a pie\n     * @sample stock/members/series-setdata/\n     *         Set new data in Highcharts Stock\n     * @sample maps/members/series-setdata/\n     *         Set new data in Highmaps\n     *\n     * @function Highcharts.Series#setData\n     *\n     * @param {Array<Highcharts.PointOptionsType>} data\n     *        Takes an array of data in the same format as described under\n     *        `series.{type}.data` for the given series type, for example a\n     *        line series would take data in the form described under\n     *        [series.line.data](https://api.highcharts.com/highcharts/series.line.data).\n     *\n     * @param {boolean} [redraw=true]\n     *        Whether to redraw the chart after the series is altered. If\n     *        doing more operations on the chart, it is a good idea to set\n     *        redraw to false and call {@link Chart#redraw} after.\n     *\n     * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n     *        When the updated data is the same length as the existing data,\n     *        points will be updated by default, and animation visualizes\n     *        how the points are changed. Set false to disable animation, or\n     *        a configuration object to set duration or easing.\n     *\n     * @param {boolean} [updatePoints=true]\n     *        When this is true, points will be updated instead of replaced\n     *        whenever possible. This occurs a) when the updated data is the\n     *        same length as the existing data, b) when points are matched\n     *        by their id's, or c) when points can be matched by X values.\n     *        This allows updating with animation and performs better. In\n     *        this case, the original array is not passed by reference. Set\n     *        `false` to prevent.\n     */\n    Series.prototype.setData = function (data, redraw, animation, updatePoints) {\n        var _a,\n            _b;\n        var _c,\n            _d;\n        if (redraw === void 0) { redraw = true; }\n        var series = this,\n            oldData = series.points,\n            oldDataLength = (oldData && oldData.length) || 0,\n            options = series.options,\n            chart = series.chart,\n            dataSorting = options.dataSorting,\n            xAxis = series.xAxis,\n            turboThreshold = options.turboThreshold,\n            table = this.dataTable,\n            dataColumnKeys = this.dataColumnKeys(),\n            pointValKey = series.pointValKey || 'y',\n            pointArrayMap = series.pointArrayMap || [],\n            valueCount = pointArrayMap.length,\n            keys = options.keys;\n        var i,\n            updatedData,\n            indexOfX = 0,\n            indexOfY = 1,\n            copiedData;\n        if (!chart.options.chart.allowMutatingData) { // #4259\n            // Remove old reference\n            if (options.data) {\n                delete series.options.data;\n            }\n            if (series.userOptions.data) {\n                delete series.userOptions.data;\n            }\n            copiedData = Series_merge(true, data);\n        }\n        data = copiedData || data || [];\n        var dataLength = data.length;\n        if (dataSorting && dataSorting.enabled) {\n            data = this.sortData(data);\n        }\n        // First try to run Point.update which is cheaper, allows animation, and\n        // keeps references to points.\n        if (chart.options.chart.allowMutatingData &&\n            updatePoints !== false &&\n            dataLength &&\n            oldDataLength &&\n            !series.cropped &&\n            !series.hasGroupedData &&\n            series.visible &&\n            // Soft updating has no benefit in boost, and causes JS error\n            // (#8355)\n            !series.boosted) {\n            updatedData = this.updateData(data, animation);\n        }\n        if (!updatedData) {\n            // Reset properties\n            series.xIncrement = null;\n            series.colorCounter = 0; // For series with colorByPoint (#1547)\n            // In turbo mode, look for one- or twodimensional arrays of numbers.\n            // The first and the last valid value are tested, and we assume that\n            // all the rest are defined the same way. Although the 'for' loops\n            // are similar, they are repeated inside each if-else conditional\n            // for max performance.\n            var runTurbo = turboThreshold && dataLength > turboThreshold;\n            if (runTurbo) {\n                var firstPoint = series.getFirstValidPoint(data),\n                    lastPoint = series.getFirstValidPoint(data,\n                    dataLength - 1, -1),\n                    isShortArray = function (a) { return Boolean(Series_isArray(a) && (keys || Series_isNumber(a[0]))); };\n                // Assume all points are numbers\n                if (Series_isNumber(firstPoint) && Series_isNumber(lastPoint)) {\n                    var x = [],\n                        valueData = [];\n                    for (var _e = 0, data_1 = data; _e < data_1.length; _e++) {\n                        var value = data_1[_e];\n                        x.push(this.autoIncrement());\n                        valueData.push(value);\n                    }\n                    table.setColumns((_a = {\n                            x: x\n                        },\n                        _a[pointValKey] = valueData,\n                        _a));\n                    // Assume all points are arrays when first point is\n                }\n                else if (isShortArray(firstPoint) &&\n                    isShortArray(lastPoint)) {\n                    if (valueCount) { // [x, low, high] or [x, o, h, l, c]\n                        // When autoX is 1, the x is skipped: [low, high]. When\n                        // autoX is 0, the x is included: [x, low, high]\n                        var autoX = firstPoint.length === valueCount ?\n                                1 : 0,\n                            colArray_1 = new Array(dataColumnKeys.length)\n                                .fill(0).map(function () { return []; });\n                        for (var _f = 0, _g = data; _f < _g.length; _f++) {\n                            var pt = _g[_f];\n                            if (autoX) {\n                                colArray_1[0].push(this.autoIncrement());\n                            }\n                            for (var j = autoX; j <= valueCount; j++) {\n                                (_c = colArray_1[j]) === null || _c === void 0 ? void 0 : _c.push(pt[j - autoX]);\n                            }\n                        }\n                        table.setColumns(dataColumnKeys.reduce(function (columns, columnName, i) {\n                            columns[columnName] = colArray_1[i];\n                            return columns;\n                        }, {}));\n                    }\n                    else { // [x, y]\n                        if (keys) {\n                            indexOfX = keys.indexOf('x');\n                            indexOfY = keys.indexOf('y');\n                            indexOfX = indexOfX >= 0 ? indexOfX : 0;\n                            indexOfY = indexOfY >= 0 ? indexOfY : 1;\n                        }\n                        if (firstPoint.length === 1) {\n                            indexOfY = 0;\n                        }\n                        var xData = [],\n                            valueData = [];\n                        if (indexOfX === indexOfY) {\n                            for (var _h = 0, data_2 = data; _h < data_2.length; _h++) {\n                                var pt = data_2[_h];\n                                xData.push(this.autoIncrement());\n                                valueData.push(pt[indexOfY]);\n                            }\n                        }\n                        else {\n                            for (var _j = 0, data_3 = data; _j < data_3.length; _j++) {\n                                var pt = data_3[_j];\n                                xData.push(pt[indexOfX]);\n                                valueData.push(pt[indexOfY]);\n                            }\n                        }\n                        table.setColumns((_b = {\n                                x: xData\n                            },\n                            _b[pointValKey] = valueData,\n                            _b));\n                    }\n                }\n                else {\n                    // Highcharts expects configs to be numbers or arrays in\n                    // turbo mode\n                    runTurbo = false;\n                }\n            }\n            if (!runTurbo) {\n                var columns = dataColumnKeys.reduce(function (columns,\n                    columnName) {\n                        columns[columnName] = [];\n                    return columns;\n                }, {});\n                for (i = 0; i < dataLength; i++) {\n                    var pt = series.pointClass.prototype.applyOptions.apply({ series: series },\n                        [data[i]]);\n                    for (var _k = 0, dataColumnKeys_1 = dataColumnKeys; _k < dataColumnKeys_1.length; _k++) {\n                        var key = dataColumnKeys_1[_k];\n                        columns[key][i] = pt[key];\n                    }\n                }\n                table.setColumns(columns);\n            }\n            // Forgetting to cast strings to numbers is a common caveat when\n            // handling CSV or JSON\n            if (Series_isString(this.getColumn('y')[0])) {\n                Series_error(14, true, chart);\n            }\n            series.data = [];\n            series.options.data = series.userOptions.data = data;\n            // Destroy old points\n            i = oldDataLength;\n            while (i--) {\n                (_d = oldData[i]) === null || _d === void 0 ? void 0 : _d.destroy();\n            }\n            // Reset minRange (#878)\n            if (xAxis) {\n                xAxis.minRange = xAxis.userMinRange;\n            }\n            // Redraw\n            series.isDirty = chart.isDirtyBox = true;\n            series.isDirtyData = !!oldData;\n            animation = false;\n        }\n        // Typically for pie series, points need to be processed and\n        // generated prior to rendering the legend\n        if (options.legendType === 'point') {\n            this.processData();\n            this.generatePoints();\n        }\n        if (redraw) {\n            chart.redraw(animation);\n        }\n    };\n    /**\n     * Internal function to sort series data\n     *\n     * @private\n     * @function Highcharts.Series#sortData\n     * @param {Array<Highcharts.PointOptionsType>} data\n     * Force data grouping.\n     */\n    Series.prototype.sortData = function (data) {\n        var series = this,\n            options = series.options,\n            dataSorting = options.dataSorting,\n            sortKey = dataSorting.sortKey || 'y',\n            getPointOptionsObject = function (series,\n            pointOptions) {\n                return (Series_defined(pointOptions) &&\n                    series.pointClass.prototype.optionsToObject.call({\n                        series: series\n                    },\n            pointOptions)) || {};\n        };\n        data.forEach(function (pointOptions, i) {\n            data[i] = getPointOptionsObject(series, pointOptions);\n            data[i].index = i;\n        }, this);\n        // Sorting\n        var sortedData = data.concat().sort(function (a,\n            b) {\n                var aValue = Series_getNestedProperty(sortKey,\n            a);\n            var bValue = Series_getNestedProperty(sortKey,\n                b);\n            return bValue < aValue ? -1 : bValue > aValue ? 1 : 0;\n        });\n        // Set x value depending on the position in the array\n        sortedData.forEach(function (point, i) {\n            point.x = i;\n        }, this);\n        // Set the same x for linked series points if they don't have their\n        // own sorting\n        if (series.linkedSeries) {\n            series.linkedSeries.forEach(function (linkedSeries) {\n                var options = linkedSeries.options,\n                    seriesData = options.data;\n                if ((!options.dataSorting ||\n                    !options.dataSorting.enabled) &&\n                    seriesData) {\n                    seriesData.forEach(function (pointOptions, i) {\n                        seriesData[i] = getPointOptionsObject(linkedSeries, pointOptions);\n                        if (data[i]) {\n                            seriesData[i].x = data[i].x;\n                            seriesData[i].index = i;\n                        }\n                    });\n                    linkedSeries.setData(seriesData, false);\n                }\n            });\n        }\n        return data;\n    };\n    /**\n     * Internal function to process the data by cropping away unused data\n     * points if the series is longer than the crop threshold. This saves\n     * computing time for large series.\n     *\n     * @private\n     * @function Highcharts.Series#getProcessedData\n     * @param {boolean} [forceExtremesFromAll]\n     * Force getting extremes of a total series data range.\n     */\n    Series.prototype.getProcessedData = function (forceExtremesFromAll) {\n        var series = this,\n            table = series.dataTable,\n            isCartesian = series.isCartesian,\n            options = series.options,\n            xAxis = series.xAxis,\n            cropThreshold = options.cropThreshold,\n            getExtremesFromAll = forceExtremesFromAll ||\n                // X-range series etc, #21003\n                series.getExtremesFromAll,\n            logarithmic = xAxis === null || xAxis === void 0 ? void 0 : xAxis.logarithmic,\n            dataLength = table.rowCount;\n        var croppedData,\n            cropped,\n            cropStart = 0,\n            xExtremes,\n            min,\n            max,\n            xData = series.getColumn('x'),\n            modified = table,\n            updatingNames = false;\n        if (xAxis) {\n            // Corrected for log axis (#3053)\n            xExtremes = xAxis.getExtremes();\n            min = xExtremes.min;\n            max = xExtremes.max;\n            updatingNames = !!(xAxis.categories && !xAxis.names.length);\n            // Optionally filter out points outside the plot area\n            if (isCartesian &&\n                series.sorted &&\n                !getExtremesFromAll &&\n                (!cropThreshold ||\n                    dataLength > cropThreshold ||\n                    series.forceCrop)) {\n                // It's outside current extremes\n                if (xData[dataLength - 1] < min ||\n                    xData[0] > max) {\n                    modified = new Data_DataTableCore();\n                    // Only crop if it's actually spilling out\n                }\n                else if (\n                // Don't understand why this condition is needed\n                series.getColumn(series.pointValKey || 'y').length && (xData[0] < min ||\n                    xData[dataLength - 1] > max)) {\n                    croppedData = this.cropData(table, min, max);\n                    modified = croppedData.modified;\n                    cropStart = croppedData.start;\n                    cropped = true;\n                }\n            }\n        }\n        // Find the closest distance between processed points\n        xData = modified.getColumn('x') || [];\n        var closestPointRange = Series_getClosestDistance([\n                logarithmic ?\n                    xData.map(logarithmic.log2lin) :\n                    xData\n            ], \n            // Unsorted data is not supported by the line tooltip, as well as\n            // data grouping and navigation in Stock charts (#725) and width\n            // calculation of columns (#1900). Avoid warning during the\n            // premature processing pass in updateNames (#16104).\n            function () { return (series.requireSorting &&\n                !updatingNames &&\n                Series_error(15,\n            false,\n            series.chart)); });\n        return {\n            modified: modified,\n            cropped: cropped,\n            cropStart: cropStart,\n            closestPointRange: closestPointRange\n        };\n    };\n    /**\n     * Internal function to apply processed data.\n     * In Highcharts Stock, this function is extended to provide data grouping.\n     *\n     * @private\n     * @function Highcharts.Series#processData\n     * @param {boolean} [force]\n     * Force data grouping.\n     */\n    Series.prototype.processData = function (force) {\n        var series = this,\n            xAxis = series.xAxis,\n            table = series.dataTable;\n        // If the series data or axes haven't changed, don't go through\n        // this. Return false to pass the message on to override methods\n        // like in data grouping.\n        if (series.isCartesian &&\n            !series.isDirty &&\n            !xAxis.isDirty &&\n            !series.yAxis.isDirty &&\n            !force) {\n            return false;\n        }\n        var processedData = series.getProcessedData();\n        // Record the properties\n        table.modified = processedData.modified;\n        series.cropped = processedData.cropped; // Undefined or true\n        series.cropStart = processedData.cropStart;\n        series.closestPointRange = (series.basePointRange = processedData.closestPointRange);\n        Series_fireEvent(series, 'afterProcessData');\n    };\n    /**\n     * Iterate over xData and crop values between min and max. Returns\n     * object containing crop start/end cropped xData with corresponding\n     * part of yData, dataMin and dataMax within the cropped range.\n     *\n     * @private\n     * @function Highcharts.Series#cropData\n     */\n    Series.prototype.cropData = function (table, min, max) {\n        var xData = table.getColumn('x',\n            true) || [],\n            dataLength = xData.length,\n            columns = {};\n        var i,\n            j,\n            start = 0,\n            end = dataLength;\n        // Iterate up to find slice start\n        for (i = 0; i < dataLength; i++) {\n            if (xData[i] >= min) {\n                start = Math.max(0, i - 1);\n                break;\n            }\n        }\n        // Proceed to find slice end\n        for (j = i; j < dataLength; j++) {\n            if (xData[j] > max) {\n                end = j + 1;\n                break;\n            }\n        }\n        for (var _a = 0, _b = this.dataColumnKeys(); _a < _b.length; _a++) {\n            var key = _b[_a];\n            var column = table.getColumn(key,\n                true);\n            if (column) {\n                columns[key] = column.slice(start, end);\n            }\n        }\n        return {\n            modified: new Data_DataTableCore({ columns: columns }),\n            start: start,\n            end: end\n        };\n    };\n    /**\n     * Generate the data point after the data has been processed by cropping\n     * away unused points and optionally grouped in Highcharts Stock.\n     *\n     * @private\n     * @function Highcharts.Series#generatePoints\n     */\n    Series.prototype.generatePoints = function () {\n        var _a,\n            _b,\n            _c,\n            _d;\n        var series = this,\n            options = series.options,\n            dataOptions = series.processedData || options.data,\n            table = series.dataTable.modified,\n            xData = series.getColumn('x',\n            true),\n            PointClass = series.pointClass,\n            processedDataLength = table.rowCount,\n            cropStart = series.cropStart || 0,\n            hasGroupedData = series.hasGroupedData,\n            keys = options.keys,\n            points = [],\n            groupCropStartIndex = (options.dataGrouping &&\n                options.dataGrouping.groupAll ?\n                cropStart :\n                0),\n            categories = (_a = series.xAxis) === null || _a === void 0 ? void 0 : _a.categories,\n            pointArrayMap = series.pointArrayMap || ['y'], \n            // Create a configuration object out of a data row\n            dataColumnKeys = this.dataColumnKeys();\n        var dataLength,\n            cursor,\n            point,\n            i,\n            data = series.data,\n            pOptions;\n        if (!data && !hasGroupedData) {\n            var arr = [];\n            arr.length = (dataOptions === null || dataOptions === void 0 ? void 0 : dataOptions.length) || 0;\n            data = series.data = arr;\n        }\n        if (keys && hasGroupedData) {\n            // Grouped data has already applied keys (#6590)\n            series.options.keys = false;\n        }\n        for (i = 0; i < processedDataLength; i++) {\n            cursor = cropStart + i;\n            if (!hasGroupedData) {\n                point = data[cursor];\n                pOptions = dataOptions ?\n                    dataOptions[cursor] :\n                    table.getRow(i, pointArrayMap);\n                // #970:\n                if (!point &&\n                    pOptions !== void 0) {\n                    data[cursor] = point = new PointClass(series, pOptions, xData[i]);\n                }\n            }\n            else {\n                // Splat the y data in case of ohlc data array\n                point = new PointClass(series, table.getRow(i, dataColumnKeys) || []);\n                point.dataGroup = series.groupMap[groupCropStartIndex + i];\n                if ((_b = point.dataGroup) === null || _b === void 0 ? void 0 : _b.options) {\n                    point.options = point.dataGroup.options;\n                    Series_extend(point, point.dataGroup.options);\n                    // Collision of props and options (#9770)\n                    delete point.dataLabels;\n                }\n            }\n            if (point) { // #6279\n                /**\n                 * Contains the point's index in the `Series.points` array.\n                 *\n                 * @name Highcharts.Point#index\n                 * @type {number}\n                 * @readonly\n                 */\n                // For faster access in Point.update\n                point.index = hasGroupedData ?\n                    (groupCropStartIndex + i) : cursor;\n                points[i] = point;\n                // Set point properties for convenient access in tooltip and\n                // data labels\n                point.category = (_c = categories === null || categories === void 0 ? void 0 : categories[point.x]) !== null && _c !== void 0 ? _c : point.x;\n                point.key = (_d = point.name) !== null && _d !== void 0 ? _d : point.category;\n            }\n        }\n        // Restore keys options (#6590)\n        series.options.keys = keys;\n        // Hide cropped-away points - this only runs when the number of\n        // points is above cropThreshold, or when switching view from\n        // non-grouped data to grouped data (#637)\n        if (data &&\n            (processedDataLength !== (dataLength = data.length) ||\n                hasGroupedData)) {\n            for (i = 0; i < dataLength; i++) {\n                // When has grouped data, clear all points\n                if (i === cropStart && !hasGroupedData) {\n                    i += processedDataLength;\n                }\n                if (data[i]) {\n                    data[i].destroyElements();\n                    data[i].plotX = void 0; // #1003\n                }\n            }\n        }\n        /**\n         * Read only. An array containing those values converted to points.\n         * In case the series data length exceeds the `cropThreshold`, or if\n         * the data is grouped, `series.data` doesn't contain all the\n         * points. Also, in case a series is hidden, the `data` array may be\n         * empty. In case of cropping, the `data` array may contain `undefined`\n         * values, instead of points. To access raw values,\n         * `series.options.data` will always be up to date. `Series.data` only\n         * contains the points that have been created on demand. To modify the\n         * data, use\n         * {@link Highcharts.Series#setData} or\n         * {@link Highcharts.Point#update}.\n         *\n         * @see Series.points\n         *\n         * @name Highcharts.Series#data\n         * @type {Array<Highcharts.Point>}\n         */\n        series.data = data;\n        /**\n         * An array containing all currently visible point objects. In case\n         * of cropping, the cropped-away points are not part of this array.\n         * The `series.points` array starts at `series.cropStart` compared\n         * to `series.data` and `series.options.data`. If however the series\n         * data is grouped, these can't be correlated one to one. To modify\n         * the data, use {@link Highcharts.Series#setData} or\n         * {@link Highcharts.Point#update}.\n         *\n         * @name Highcharts.Series#points\n         * @type {Array<Highcharts.Point>}\n         */\n        series.points = points;\n        Series_fireEvent(this, 'afterGeneratePoints');\n    };\n    /**\n     * Get current X extremes for the visible data.\n     *\n     * @private\n     * @function Highcharts.Series#getXExtremes\n     * @param {Array<number>} xData\n     * The data to inspect. Defaults to the current data within the visible\n     * range.\n     */\n    Series.prototype.getXExtremes = function (xData) {\n        return {\n            min: Series_arrayMin(xData),\n            max: Series_arrayMax(xData)\n        };\n    };\n    /**\n     * Calculate Y extremes for the visible data. The result is returned\n     * as an object with `dataMin` and `dataMax` properties.\n     *\n     * @private\n     * @function Highcharts.Series#getExtremes\n     * @param {Array<number>} [yData]\n     * The data to inspect. Defaults to the current data within the visible\n     * range.\n     * @param {boolean} [forceExtremesFromAll]\n     * Force getting extremes of a total series data range.\n     */\n    Series.prototype.getExtremes = function (yData, forceExtremesFromAll) {\n        var _a;\n        var _b = this, xAxis = _b.xAxis, yAxis = _b.yAxis, getExtremesFromAll = forceExtremesFromAll ||\n                this.getExtremesFromAll ||\n                this.options.getExtremesFromAll, // #4599, #21003\n            table = getExtremesFromAll && this.cropped ?\n                this.dataTable :\n                this.dataTable.modified, rowCount = table.rowCount, customData = yData || this.stackedYData, yAxisData = customData ?\n                [customData] :\n                ((_a = (this.keysAffectYAxis || this.pointArrayMap || ['y'])) === null || _a === void 0 ? void 0 : _a.map(function (key) { return table.getColumn(key, true) || []; })) || [], xData = this.getColumn('x', true), activeYData = [], \n            // Handle X outside the viewed area. This does not work with\n            // non-sorted data like scatter (#7639).\n            shoulder = this.requireSorting && !this.is('column') ?\n                1 : 0, \n            // #2117, need to compensate for log X axis\n            positiveValuesOnly = yAxis ? yAxis.positiveValuesOnly : false, doAll = getExtremesFromAll ||\n                this.cropped ||\n                !xAxis; // For colorAxis support\n            var xExtremes, x, i, xMin = 0, xMax = 0;\n        if (xAxis) {\n            xExtremes = xAxis.getExtremes();\n            xMin = xExtremes.min;\n            xMax = xExtremes.max;\n        }\n        for (i = 0; i < rowCount; i++) {\n            x = xData[i];\n            // Check if it is within the selected x axis range\n            if (doAll ||\n                ((xData[i + shoulder] || x) >= xMin &&\n                    (xData[i - shoulder] || x) <= xMax)) {\n                for (var _c = 0, yAxisData_1 = yAxisData; _c < yAxisData_1.length; _c++) {\n                    var values = yAxisData_1[_c];\n                    var val = values[i];\n                    // For points within the visible range, including the\n                    // first point outside the visible range (#7061),\n                    // consider y extremes.\n                    if (Series_isNumber(val) &&\n                        (val > 0 || !positiveValuesOnly)) {\n                        activeYData.push(val);\n                    }\n                }\n            }\n        }\n        var dataExtremes = {\n                activeYData: activeYData, // Needed for Stock Cumulative Sum\n                dataMin: Series_arrayMin(activeYData),\n                dataMax: Series_arrayMax(activeYData)\n            };\n        Series_fireEvent(this, 'afterGetExtremes', { dataExtremes: dataExtremes });\n        return dataExtremes;\n    };\n    /**\n     * Set the current data extremes as `dataMin` and `dataMax` on the\n     * Series item. Use this only when the series properties should be\n     * updated.\n     *\n     * @private\n     * @function Highcharts.Series#applyExtremes\n     */\n    Series.prototype.applyExtremes = function () {\n        var dataExtremes = this.getExtremes();\n        /**\n         * Contains the minimum value of the series' data point. Some series\n         * types like `networkgraph` do not support this property as they\n         * lack a `y`-value.\n         * @name Highcharts.Series#dataMin\n         * @type {number|undefined}\n         * @readonly\n         */\n        this.dataMin = dataExtremes.dataMin;\n        /**\n         * Contains the maximum value of the series' data point. Some series\n         * types like `networkgraph` do not support this property as they\n         * lack a `y`-value.\n         * @name Highcharts.Series#dataMax\n         * @type {number|undefined}\n         * @readonly\n         */\n        this.dataMax = dataExtremes.dataMax;\n        return dataExtremes;\n    };\n    /**\n     * Find and return the first non nullish point in the data\n     *\n     * @private\n     * @function Highcharts.Series.getFirstValidPoint\n     * @param {Array<Highcharts.PointOptionsType>} data\n     *        Array of options for points\n     * @param {number} [start=0]\n     *        Index to start searching from\n     * @param {number} [increment=1]\n     *        Index increment, set -1 to search backwards\n     */\n    Series.prototype.getFirstValidPoint = function (data, start, increment) {\n        if (start === void 0) { start = 0; }\n        if (increment === void 0) { increment = 1; }\n        var dataLength = data.length;\n        var i = start;\n        while (i >= 0 && i < dataLength) {\n            if (Series_defined(data[i])) {\n                return data[i];\n            }\n            i += increment;\n        }\n    };\n    /**\n     * Translate data points from raw data values to chart specific\n     * positioning data needed later in the `drawPoints` and `drawGraph`\n     * functions. This function can be overridden in plugins and custom\n     * series type implementations.\n     *\n     * @function Highcharts.Series#translate\n     *\n     * @emits Highcharts.Series#events:translate\n     */\n    Series.prototype.translate = function () {\n        var _a;\n        this.generatePoints();\n        var series = this,\n            options = series.options,\n            stacking = options.stacking,\n            xAxis = series.xAxis,\n            enabledDataSorting = series.enabledDataSorting,\n            yAxis = series.yAxis,\n            points = series.points,\n            dataLength = points.length,\n            pointPlacement = series.pointPlacementToXValue(), // #7860\n            dynamicallyPlaced = Boolean(pointPlacement),\n            threshold = options.threshold,\n            stackThreshold = options.startFromThreshold ? threshold : 0;\n        var i,\n            plotX,\n            lastPlotX,\n            stackIndicator,\n            closestPointRangePx = Number.MAX_VALUE;\n        /**\n         * Plotted coordinates need to be within a limited range. Drawing\n         * too far outside the viewport causes various rendering issues\n         * (#3201, #3923, #7555).\n         * @private\n         */\n        function limitedRange(val) {\n            return Series_clamp(val, -1e9, 1e9);\n        }\n        // Translate each point\n        for (i = 0; i < dataLength; i++) {\n            var point = points[i],\n                xValue = point.x;\n            var stackItem = void 0,\n                stackValues = void 0,\n                yValue = point.y,\n                lowValue = point.low;\n            var stacks = stacking && ((_a = yAxis.stacking) === null || _a === void 0 ? void 0 : _a.stacks[(series.negStacks &&\n                    yValue <\n                        (stackThreshold ? 0 : threshold) ?\n                    '-' :\n                    '') + series.stackKey]);\n            plotX = xAxis.translate(// #3923\n            xValue, false, false, false, true, pointPlacement);\n            /**\n             * The translated X value for the point in terms of pixels. Relative\n             * to the X axis position if the series has one, otherwise relative\n             * to the plot area. Depending on the series type this value might\n             * not be defined.\n             *\n             * In an inverted chart the x-axis is going from the bottom to the\n             * top so the `plotX` value is the number of pixels from the bottom\n             * of the axis.\n             *\n             * @see Highcharts.Point#pos\n             * @name Highcharts.Point#plotX\n             * @type {number|undefined}\n             */\n            point.plotX = Series_isNumber(plotX) ? Series_correctFloat(// #5236\n            limitedRange(plotX) // #3923\n            ) : void 0;\n            // Calculate the bottom y value for stacked series\n            if (stacking &&\n                series.visible &&\n                stacks &&\n                stacks[xValue]) {\n                stackIndicator = series.getStackIndicator(stackIndicator, xValue, series.index);\n                if (!point.isNull && stackIndicator.key) {\n                    stackItem = stacks[xValue];\n                    stackValues = stackItem.points[stackIndicator.key];\n                }\n                if (stackItem && Series_isArray(stackValues)) {\n                    lowValue = stackValues[0];\n                    yValue = stackValues[1];\n                    if (lowValue === stackThreshold &&\n                        stackIndicator.key === stacks[xValue].base) {\n                        lowValue = Series_pick(Series_isNumber(threshold) ? threshold : yAxis.min);\n                    }\n                    // #1200, #1232\n                    if (yAxis.positiveValuesOnly &&\n                        Series_defined(lowValue) &&\n                        lowValue <= 0) {\n                        lowValue = void 0;\n                    }\n                    point.total = point.stackTotal = Series_pick(stackItem.total);\n                    point.percentage = Series_defined(point.y) && stackItem.total ?\n                        (point.y / stackItem.total * 100) : void 0;\n                    point.stackY = yValue;\n                    // In case of variwide series (where widths of points are\n                    // different in most cases), stack labels are positioned\n                    // wrongly, so the call of the setOffset is omitted here and\n                    // labels are correctly positioned later, at the end of the\n                    // variwide's translate function (#10962)\n                    if (!series.irregularWidths) {\n                        stackItem.setOffset(series.pointXOffset || 0, series.barW || 0, void 0, void 0, void 0, series.xAxis);\n                    }\n                }\n            }\n            // Set translated yBottom or remove it\n            point.yBottom = Series_defined(lowValue) ?\n                limitedRange(yAxis.translate(lowValue, false, true, false, true)) :\n                void 0;\n            // General hook, used for Highcharts Stock compare and cumulative\n            if (series.dataModify) {\n                yValue = series.dataModify.modifyValue(yValue, i);\n            }\n            // Set the plotY value, reset it for redraws #3201, #18422\n            var plotY = void 0;\n            if (Series_isNumber(yValue) && point.plotX !== void 0) {\n                plotY = yAxis.translate(yValue, false, true, false, true);\n                plotY = Series_isNumber(plotY) ? limitedRange(plotY) : void 0;\n            }\n            /**\n             * The translated Y value for the point in terms of pixels. Relative\n             * to the Y axis position if the series has one, otherwise relative\n             * to the plot area. Depending on the series type this value might\n             * not be defined.\n             *\n             * In an inverted chart the y-axis is going from right to left\n             * so the `plotY` value is the number of pixels from the right\n             * of the `yAxis`.\n             *\n             * @see Highcharts.Point#pos\n             * @name Highcharts.Point#plotY\n             * @type {number|undefined}\n             */\n            point.plotY = plotY;\n            point.isInside = this.isPointInside(point);\n            // Set client related positions for mouse tracking\n            point.clientX = dynamicallyPlaced ?\n                Series_correctFloat(xAxis.translate(xValue, false, false, false, true, pointPlacement)) :\n                plotX; // #1514, #5383, #5518\n            // Negative points #19028\n            point.negative = (point.y || 0) < (threshold || 0);\n            // Determine auto enabling of markers (#3635, #5099)\n            if (!point.isNull && point.visible !== false) {\n                if (typeof lastPlotX !== 'undefined') {\n                    closestPointRangePx = Math.min(closestPointRangePx, Math.abs(plotX - lastPlotX));\n                }\n                lastPlotX = plotX;\n            }\n            // Find point zone\n            point.zone = this.zones.length ? point.getZone() : void 0;\n            // Animate new points with data sorting\n            if (!point.graphic && series.group && enabledDataSorting) {\n                point.isNew = true;\n            }\n        }\n        series.closestPointRangePx = closestPointRangePx;\n        Series_fireEvent(this, 'afterTranslate');\n    };\n    /**\n     * Return the series points with null points filtered out.\n     *\n     * @function Highcharts.Series#getValidPoints\n     *\n     * @param {Array<Highcharts.Point>} [points]\n     * The points to inspect, defaults to {@link Series.points}.\n     *\n     * @param {boolean} [insideOnly=false]\n     * Whether to inspect only the points that are inside the visible view.\n     *\n     * @param {boolean} [allowNull=false]\n     * Whether to allow null points to pass as valid points.\n     *\n     * @return {Array<Highcharts.Point>}\n     * The valid points.\n     */\n    Series.prototype.getValidPoints = function (points, insideOnly, allowNull) {\n        var chart = this.chart;\n        // #3916, #5029, #5085\n        return (points || this.points || []).filter(function (point) {\n            var plotX = point.plotX,\n                plotY = point.plotY, \n                // Undefined plotY is treated as null when negative values\n                // in log axis (#18422)\n                asNull = !allowNull && (point.isNull || !Series_isNumber(plotY));\n            if (asNull || (insideOnly && !chart.isInsidePlot(plotX, plotY, { inverted: chart.inverted }))) {\n                return false;\n            }\n            return point.visible !== false;\n        });\n    };\n    /**\n     * Get the clipping for the series. Could be called for a series to\n     * initiate animating the clip or to set the final clip (only width\n     * and x).\n     *\n     * @private\n     * @function Highcharts.Series#getClip\n     */\n    Series.prototype.getClipBox = function () {\n        var _a;\n        var _b = this,\n            chart = _b.chart,\n            xAxis = _b.xAxis,\n            yAxis = _b.yAxis;\n        // If no axes on the series, use global clipBox\n        var _c = Series_merge(chart.clipBox),\n            x = _c.x,\n            y = _c.y,\n            width = _c.width,\n            height = _c.height;\n        // Otherwise, use clipBox.width which is corrected for plotBorderWidth\n        // and clipOffset\n        if (xAxis && xAxis.len !== chart.plotSizeX) {\n            width = xAxis.len;\n        }\n        if (yAxis && yAxis.len !== chart.plotSizeY) {\n            height = yAxis.len;\n        }\n        // If the chart is inverted and the series is not invertible, the chart\n        // clip box should be inverted, but not the series clip box (#20264)\n        if (chart.inverted && !this.invertible) {\n            _a = [height, width], width = _a[0], height = _a[1];\n        }\n        return { x: x, y: y, width: width, height: height };\n    };\n    /**\n     * Get the shared clip key, creating it if it doesn't exist.\n     *\n     * @private\n     * @function Highcharts.Series#getSharedClipKey\n     */\n    Series.prototype.getSharedClipKey = function () {\n        this.sharedClipKey = (this.options.xAxis || 0) + ',' +\n            (this.options.yAxis || 0);\n        return this.sharedClipKey;\n    };\n    /**\n     * Set the clipping for the series. For animated series the clip is later\n     * modified.\n     *\n     * @private\n     * @function Highcharts.Series#setClip\n     */\n    Series.prototype.setClip = function () {\n        var _a = this,\n            chart = _a.chart,\n            group = _a.group,\n            markerGroup = _a.markerGroup,\n            sharedClips = chart.sharedClips,\n            renderer = chart.renderer,\n            clipBox = this.getClipBox(),\n            sharedClipKey = this.getSharedClipKey(); // #4526\n            var clipRect = sharedClips[sharedClipKey];\n        // If a clipping rectangle for the same set of axes does not exist,\n        // create it\n        if (!clipRect) {\n            sharedClips[sharedClipKey] = clipRect = renderer.clipRect(clipBox);\n            // When setting chart size, or when the series is rendered again before\n            // starting animating, in compliance to a responsive rule\n        }\n        else {\n            clipRect.animate(clipBox);\n        }\n        if (group) {\n            // When clip is false, reset to no clip after animation\n            group.clip(this.options.clip === false ? void 0 : clipRect);\n        }\n        // Unclip temporary animation clip\n        if (markerGroup) {\n            markerGroup.clip();\n        }\n    };\n    /**\n     * Animate in the series. Called internally twice. First with the `init`\n     * parameter set to true, which sets up the initial state of the\n     * animation. Then when ready, it is called with the `init` parameter\n     * undefined, in order to perform the actual animation.\n     *\n     * @function Highcharts.Series#animate\n     *\n     * @param {boolean} [init]\n     * Initialize the animation.\n     */\n    Series.prototype.animate = function (init) {\n        var _a = this, chart = _a.chart, group = _a.group, markerGroup = _a.markerGroup, inverted = chart.inverted, animation = Series_animObject(this.options.animation), \n            // The key for temporary animation clips\n            animationClipKey = [\n                this.getSharedClipKey(),\n                animation.duration,\n                animation.easing,\n                animation.defer\n            ].join(',');\n        var animationClipRect = chart.sharedClips[animationClipKey],\n            markerAnimationClipRect = chart.sharedClips[animationClipKey + 'm'];\n        // Initialize the animation. Set up the clipping rectangle.\n        if (init && group) {\n            var clipBox = this.getClipBox();\n            // Create temporary animation clips\n            if (!animationClipRect) {\n                clipBox.width = 0;\n                if (inverted) {\n                    clipBox.x = chart.plotHeight;\n                }\n                animationClipRect = chart.renderer.clipRect(clipBox);\n                chart.sharedClips[animationClipKey] = animationClipRect;\n                // The marker clip box. The number 99 is a safe margin to avoid\n                // markers being clipped during animation.\n                var markerClipBox = {\n                        x: inverted ? -99 : -99,\n                        y: inverted ? -99 : -99,\n                        width: inverted ? chart.plotWidth + 199 : 99,\n                        height: inverted ? 99 : chart.plotHeight + 199\n                    };\n                markerAnimationClipRect = chart.renderer.clipRect(markerClipBox);\n                chart.sharedClips[animationClipKey + 'm'] = markerAnimationClipRect;\n            }\n            else {\n                // When height changes during animation, typically due to\n                // responsive settings\n                animationClipRect.attr('height', clipBox.height);\n            }\n            group.clip(animationClipRect);\n            markerGroup === null || markerGroup === void 0 ? void 0 : markerGroup.clip(markerAnimationClipRect);\n            // Run the animation\n        }\n        else if (animationClipRect &&\n            // Only first series in this pane\n            !animationClipRect.hasClass('highcharts-animating')) {\n            var finalBox = this.getClipBox(),\n                step_1 = animation.step;\n            // Only do this when there are actually markers, or we have multiple\n            // series (#20473)\n            if ((markerGroup === null || markerGroup === void 0 ? void 0 : markerGroup.element.childNodes.length) ||\n                chart.series.length > 1) {\n                // To provide as smooth animation as possible, update the marker\n                // group clipping in steps of the main group animation\n                animation.step = function (val, fx) {\n                    if (step_1) {\n                        step_1.apply(fx, arguments);\n                    }\n                    if (fx.prop === 'width' &&\n                        (markerAnimationClipRect === null || markerAnimationClipRect === void 0 ? void 0 : markerAnimationClipRect.element)) {\n                        markerAnimationClipRect.attr(inverted ? 'height' : 'width', val + 99);\n                    }\n                };\n            }\n            animationClipRect\n                .addClass('highcharts-animating')\n                .animate(finalBox, animation);\n        }\n    };\n    /**\n     * This runs after animation to land on the final plot clipping.\n     *\n     * @private\n     * @function Highcharts.Series#afterAnimate\n     *\n     * @emits Highcharts.Series#event:afterAnimate\n     */\n    Series.prototype.afterAnimate = function () {\n        var _this = this;\n        this.setClip();\n        // Destroy temporary clip rectangles that are no longer in use\n        Series_objectEach(this.chart.sharedClips, function (clip, key, sharedClips) {\n            if (clip && !_this.chart.container.querySelector(\"[clip-path=\\\"url(#\".concat(clip.id, \")\\\"]\"))) {\n                clip.destroy();\n                delete sharedClips[key];\n            }\n        });\n        this.finishedAnimating = true;\n        Series_fireEvent(this, 'afterAnimate');\n    };\n    /**\n     * Draw the markers for line-like series types, and columns or other\n     * graphical representation for {@link Point} objects for other series\n     * types. The resulting element is typically stored as\n     * {@link Point.graphic}, and is created on the first call and updated\n     * and moved on subsequent calls.\n     *\n     * @function Highcharts.Series#drawPoints\n     */\n    Series.prototype.drawPoints = function (points) {\n        if (points === void 0) { points = this.points; }\n        var series = this,\n            chart = series.chart,\n            styledMode = chart.styledMode,\n            colorAxis = series.colorAxis,\n            options = series.options,\n            seriesMarkerOptions = options.marker,\n            markerGroup = series[series.specialGroup || 'markerGroup'],\n            xAxis = series.xAxis,\n            globallyEnabled = Series_pick(seriesMarkerOptions.enabled, !xAxis || xAxis.isRadial ? true : null, \n            // Use larger or equal as radius is null in bubbles (#6321)\n            series.closestPointRangePx >= (seriesMarkerOptions.enabledThreshold *\n                seriesMarkerOptions.radius));\n        var i,\n            point,\n            graphic,\n            verb,\n            pointMarkerOptions,\n            hasPointMarker,\n            markerAttribs;\n        if (seriesMarkerOptions.enabled !== false ||\n            series._hasPointMarkers) {\n            for (i = 0; i < points.length; i++) {\n                point = points[i];\n                graphic = point.graphic;\n                verb = graphic ? 'animate' : 'attr';\n                pointMarkerOptions = point.marker || {};\n                hasPointMarker = !!point.marker;\n                var shouldDrawMarker = ((globallyEnabled &&\n                        typeof pointMarkerOptions.enabled === 'undefined') || pointMarkerOptions.enabled) && !point.isNull && point.visible !== false;\n                // Only draw the point if y is defined\n                if (shouldDrawMarker) {\n                    // Shortcuts\n                    var symbol = Series_pick(pointMarkerOptions.symbol,\n                        series.symbol, 'rect');\n                    markerAttribs = series.markerAttribs(point, (point.selected && 'select'));\n                    // Set starting position for point sliding animation.\n                    if (series.enabledDataSorting) {\n                        point.startXPos = xAxis.reversed ?\n                            -(markerAttribs.width || 0) :\n                            xAxis.width;\n                    }\n                    var isInside = point.isInside !== false;\n                    if (!graphic &&\n                        isInside &&\n                        ((markerAttribs.width || 0) > 0 || point.hasImage)) {\n                        /**\n                         * SVG graphic representing the point in the chart. In\n                         * some cases it may be a hidden graphic to improve\n                         * accessibility.\n                         *\n                         * Typically this is a simple shape, like a `rect`\n                         * for column charts or `path` for line markers, but\n                         * for some complex series types like boxplot or 3D\n                         * charts, the graphic may be a `g` element\n                         * containing other shapes. The graphic is generated\n                         * the first time {@link Series#drawPoints} runs,\n                         * and updated and moved on subsequent runs.\n                         *\n                         * @see Highcharts.Point#graphics\n                         *\n                         * @name Highcharts.Point#graphic\n                         * @type {Highcharts.SVGElement|undefined}\n                         */\n                        point.graphic = graphic = chart.renderer\n                            .symbol(symbol, markerAttribs.x, markerAttribs.y, markerAttribs.width, markerAttribs.height, hasPointMarker ?\n                            pointMarkerOptions :\n                            seriesMarkerOptions)\n                            .add(markerGroup);\n                        // Sliding animation for new points\n                        if (series.enabledDataSorting &&\n                            chart.hasRendered) {\n                            graphic.attr({\n                                x: point.startXPos\n                            });\n                            verb = 'animate';\n                        }\n                    }\n                    if (graphic && verb === 'animate') { // Update\n                        // Since the marker group isn't clipped, each\n                        // individual marker must be toggled\n                        graphic[isInside ? 'show' : 'hide'](isInside)\n                            .animate(markerAttribs);\n                    }\n                    // Presentational attributes\n                    if (graphic) {\n                        var pointAttr = series.pointAttribs(point, ((styledMode || !point.selected) ?\n                                void 0 :\n                                'select'));\n                        if (!styledMode) {\n                            graphic[verb](pointAttr);\n                        }\n                        else if (colorAxis) { // #14114\n                            graphic['css']({\n                                fill: pointAttr.fill\n                            });\n                        }\n                    }\n                    if (graphic) {\n                        graphic.addClass(point.getClassName(), true);\n                    }\n                }\n                else if (graphic) {\n                    point.graphic = graphic.destroy(); // #1269\n                }\n            }\n        }\n    };\n    /**\n     * Get non-presentational attributes for a point. Used internally for\n     * both styled mode and classic. Can be overridden for different series\n     * types.\n     *\n     * @see Series#pointAttribs\n     *\n     * @function Highcharts.Series#markerAttribs\n     *\n     * @param {Highcharts.Point} point\n     * The Point to inspect.\n     *\n     * @param {string} [state]\n     * The state, can be either `hover`, `select` or undefined.\n     *\n     * @return {Highcharts.SVGAttributes}\n     * A hash containing those attributes that are not settable from CSS.\n     */\n    Series.prototype.markerAttribs = function (point, state) {\n        var seriesOptions = this.options,\n            seriesMarkerOptions = seriesOptions.marker,\n            pointMarkerOptions = point.marker || {},\n            symbol = (pointMarkerOptions.symbol ||\n                seriesMarkerOptions.symbol),\n            attribs = {};\n        var seriesStateOptions,\n            pointStateOptions,\n            radius = Series_pick(pointMarkerOptions.radius,\n            seriesMarkerOptions && seriesMarkerOptions.radius);\n        // Handle hover and select states\n        if (state) {\n            seriesStateOptions = seriesMarkerOptions.states[state];\n            pointStateOptions = pointMarkerOptions.states &&\n                pointMarkerOptions.states[state];\n            radius = Series_pick(pointStateOptions && pointStateOptions.radius, seriesStateOptions && seriesStateOptions.radius, radius && radius + (seriesStateOptions && seriesStateOptions.radiusPlus ||\n                0));\n        }\n        point.hasImage = symbol && symbol.indexOf('url') === 0;\n        if (point.hasImage) {\n            radius = 0; // And subsequently width and height is not set\n        }\n        var pos = point.pos();\n        if (Series_isNumber(radius) && pos) {\n            if (seriesOptions.crisp) {\n                pos[0] = Series_crisp(pos[0], point.hasImage ?\n                    0 :\n                    symbol === 'rect' ?\n                        // Rectangle symbols need crisp edges, others don't\n                        (seriesMarkerOptions === null || seriesMarkerOptions === void 0 ? void 0 : seriesMarkerOptions.lineWidth) || 0 :\n                        1);\n            }\n            attribs.x = pos[0] - radius;\n            attribs.y = pos[1] - radius;\n        }\n        if (radius) {\n            attribs.width = attribs.height = 2 * radius;\n        }\n        return attribs;\n    };\n    /**\n     * Internal function to get presentational attributes for each point.\n     * Unlike {@link Series#markerAttribs}, this function should return\n     * those attributes that can also be set in CSS. In styled mode,\n     * `pointAttribs` won't be called.\n     *\n     * @private\n     * @function Highcharts.Series#pointAttribs\n     *\n     * @param {Highcharts.Point} [point]\n     * The point instance to inspect.\n     *\n     * @param {string} [state]\n     * The point state, can be either `hover`, `select` or 'normal'. If\n     * undefined, normal state is assumed.\n     *\n     * @return {Highcharts.SVGAttributes}\n     * The presentational attributes to be set on the point.\n     */\n    Series.prototype.pointAttribs = function (point, state) {\n        var seriesMarkerOptions = this.options.marker,\n            pointOptions = point && point.options,\n            pointMarkerOptions = ((pointOptions && pointOptions.marker) || {}),\n            pointColorOption = pointOptions && pointOptions.color,\n            pointColor = point && point.color,\n            zoneColor = point && point.zone && point.zone.color;\n        var seriesStateOptions,\n            pointStateOptions,\n            color = this.color,\n            fill,\n            stroke,\n            strokeWidth = Series_pick(pointMarkerOptions.lineWidth,\n            seriesMarkerOptions.lineWidth),\n            opacity = 1;\n        color = (pointColorOption ||\n            zoneColor ||\n            pointColor ||\n            color);\n        fill = (pointMarkerOptions.fillColor ||\n            seriesMarkerOptions.fillColor ||\n            color);\n        stroke = (pointMarkerOptions.lineColor ||\n            seriesMarkerOptions.lineColor ||\n            color);\n        // Handle hover and select states\n        state = state || 'normal';\n        if (state) {\n            seriesStateOptions = (seriesMarkerOptions.states[state] || {});\n            pointStateOptions = (pointMarkerOptions.states &&\n                pointMarkerOptions.states[state]) || {};\n            strokeWidth = Series_pick(pointStateOptions.lineWidth, seriesStateOptions.lineWidth, strokeWidth + Series_pick(pointStateOptions.lineWidthPlus, seriesStateOptions.lineWidthPlus, 0));\n            fill = (pointStateOptions.fillColor ||\n                seriesStateOptions.fillColor ||\n                fill);\n            stroke = (pointStateOptions.lineColor ||\n                seriesStateOptions.lineColor ||\n                stroke);\n            opacity = Series_pick(pointStateOptions.opacity, seriesStateOptions.opacity, opacity);\n        }\n        return {\n            'stroke': stroke,\n            'stroke-width': strokeWidth,\n            'fill': fill,\n            'opacity': opacity\n        };\n    };\n    /**\n     * Clear DOM objects and free up memory.\n     *\n     * @private\n     * @function Highcharts.Series#destroy\n     *\n     * @emits Highcharts.Series#event:destroy\n     */\n    Series.prototype.destroy = function (keepEventsForUpdate) {\n        var series = this, chart = series.chart, issue134 = /AppleWebKit\\/533/.test(Series_win.navigator.userAgent), data = series.data || [];\n        var destroy,\n            i,\n            point,\n            axis;\n        // Add event hook\n        Series_fireEvent(series, 'destroy', { keepEventsForUpdate: keepEventsForUpdate });\n        // Remove events\n        this.removeEvents(keepEventsForUpdate);\n        // Erase from axes\n        (series.axisTypes || []).forEach(function (AXIS) {\n            axis = series[AXIS];\n            if (axis && axis.series) {\n                Series_erase(axis.series, series);\n                axis.isDirty = axis.forceRedraw = true;\n            }\n        });\n        // Remove legend items\n        if (series.legendItem) {\n            series.chart.legend.destroyItem(series);\n        }\n        // Destroy all points with their elements\n        i = data.length;\n        while (i--) {\n            point = data[i];\n            if (point && point.destroy) {\n                point.destroy();\n            }\n        }\n        for (var _a = 0, _b = series.zones; _a < _b.length; _a++) {\n            var zone = _b[_a];\n            // Destroy SVGElement's but preserve primitive props (#20426)\n            Series_destroyObjectProperties(zone, void 0, true);\n        }\n        // Clear the animation timeout if we are destroying the series\n        // during initial animation\n        Core_Utilities.clearTimeout(series.animationTimeout);\n        // Destroy all SVGElements associated to the series\n        Series_objectEach(series, function (val, prop) {\n            // Survive provides a hook for not destroying\n            if (val instanceof SVG_SVGElement && !val.survive) {\n                // Issue 134 workaround\n                destroy = issue134 && prop === 'group' ?\n                    'hide' :\n                    'destroy';\n                val[destroy]();\n            }\n        });\n        // Remove from hoverSeries\n        if (chart.hoverSeries === series) {\n            chart.hoverSeries = void 0;\n        }\n        Series_erase(chart.series, series);\n        chart.orderItems('series');\n        // Clear all members\n        Series_objectEach(series, function (val, prop) {\n            if (!keepEventsForUpdate || prop !== 'hcEvents') {\n                delete series[prop];\n            }\n        });\n    };\n    /**\n     * Clip the graphs into zones for colors and styling.\n     *\n     * @private\n     * @function Highcharts.Series#applyZones\n     */\n    Series.prototype.applyZones = function () {\n        var series = this,\n            area = series.area,\n            chart = series.chart,\n            graph = series.graph,\n            zones = series.zones,\n            points = series.points,\n            xAxis = series.xAxis,\n            yAxis = series.yAxis,\n            zoneAxis = series.zoneAxis,\n            inverted = chart.inverted,\n            renderer = chart.renderer,\n            axis = this[\"\" + zoneAxis + \"Axis\"],\n            _a = axis || {},\n            isXAxis = _a.isXAxis,\n            _b = _a.len,\n            len = _b === void 0 ? 0 : _b,\n            _c = _a.minPointOffset,\n            minPointOffset = _c === void 0 ? 0 : _c,\n            halfWidth = ((graph === null || graph === void 0 ? void 0 : graph.strokeWidth()) || 0) / 2 + 1, \n            // Avoid points that are so close to the threshold that the graph\n            // line would be split\n            avoidClose = function (zone,\n            plotX,\n            plotY) {\n                if (plotX === void 0) { plotX = 0; }\n                if (plotY === void 0) { plotY = 0; }\n                if (inverted) {\n                    plotY = len - plotY;\n            }\n            var _a = zone.translated,\n                translated = _a === void 0 ? 0 : _a,\n                lineClip = zone.lineClip,\n                distance = plotY - translated;\n            lineClip === null || lineClip === void 0 ? void 0 : lineClip.push([\n                'L',\n                plotX,\n                Math.abs(distance) < halfWidth ?\n                    plotY - halfWidth * (distance <= 0 ? -1 : 1) :\n                    translated\n            ]);\n        };\n        if (zones.length &&\n            (graph || area) &&\n            axis &&\n            Series_isNumber(axis.min)) {\n            var axisMax_1 = axis.getExtremes().max + minPointOffset, \n                // Invert the x and y coordinates of inverted charts\n                invertPath_1 = function (path) {\n                    path.forEach(function (segment,\n                i) {\n                        if (segment[0] === 'M' || segment[0] === 'L') {\n                            path[i] = [\n                                segment[0],\n                                isXAxis ? len - segment[1] : segment[1],\n                                isXAxis ? segment[2] : len - segment[2]\n                            ];\n                    }\n                });\n            };\n            // Reset\n            zones.forEach(function (zone) {\n                zone.lineClip = [];\n                zone.translated = Series_clamp(axis.toPixels(Series_pick(zone.value, axisMax_1), true) || 0, 0, len);\n            });\n            // The use of the Color Threshold assumes there are no gaps so it is\n            // safe to hide the original graph and area unless it is not\n            // waterfall series, then use showLine property to set lines between\n            // columns to be visible (#7862)\n            if (graph && !this.showLine) {\n                graph.hide();\n            }\n            if (area) {\n                area.hide();\n            }\n            // Prepare for adaptive clips, avoiding segments close to the\n            // threshold (#19709)\n            if (zoneAxis === 'y' &&\n                // Overheat protection\n                points.length < xAxis.len) {\n                for (var _d = 0, points_1 = points; _d < points_1.length; _d++) {\n                    var point = points_1[_d];\n                    var plotX = point.plotX,\n                        plotY = point.plotY,\n                        zone = point.zone,\n                        zoneBelow = zone && zones[zones.indexOf(zone) - 1];\n                    // Close to upper boundary\n                    if (zone) {\n                        avoidClose(zone, plotX, plotY);\n                    }\n                    // Close to lower boundary\n                    if (zoneBelow) {\n                        avoidClose(zoneBelow, plotX, plotY);\n                    }\n                }\n            }\n            // Compute and apply the clips\n            var lastLineClip_1 = [], \n                // Starting point of the first zone. Offset for category axis\n                // (#22188).\n                lastTranslated_1 = axis.toPixels(axis.getExtremes().min - minPointOffset,\n                true);\n            zones.forEach(function (zone) {\n                var _a,\n                    _b;\n                var lineClip = zone.lineClip || [],\n                    translated = Math.round(zone.translated || 0);\n                if (xAxis.reversed) {\n                    lineClip.reverse();\n                }\n                var clip = zone.clip,\n                    simpleClip = zone.simpleClip,\n                    x1 = 0,\n                    y1 = 0,\n                    x2 = xAxis.len,\n                    y2 = yAxis.len;\n                if (isXAxis) {\n                    x1 = translated;\n                    x2 = lastTranslated_1;\n                }\n                else {\n                    y1 = translated;\n                    y2 = lastTranslated_1;\n                }\n                // Adaptive clips\n                var simplePath = [\n                        ['M',\n                    x1,\n                    y1],\n                        ['L',\n                    x2,\n                    y1],\n                        ['L',\n                    x2,\n                    y2],\n                        ['L',\n                    x1,\n                    y2],\n                        ['Z']\n                    ],\n                    adaptivePath = Series_spreadArray(Series_spreadArray(Series_spreadArray(Series_spreadArray([\n                        simplePath[0]\n                    ],\n                    lineClip,\n                    true),\n                    [\n                        simplePath[1],\n                        simplePath[2]\n                    ],\n                    false),\n                    lastLineClip_1,\n                    true),\n                    [\n                        simplePath[3],\n                        simplePath[4]\n                    ],\n                    false);\n                lastLineClip_1 = lineClip.reverse();\n                lastTranslated_1 = translated;\n                if (inverted) {\n                    invertPath_1(adaptivePath);\n                    if (area) {\n                        invertPath_1(simplePath);\n                    }\n                }\n                /* Debug clip paths\n                zone.path?.destroy();\n                zone.path = chart.renderer.path(adaptivePath)\n                    .attr({\n                        stroke: zone.color || this.color || 'gray',\n                        'stroke-width': 1,\n                        'dashstyle': 'Dash'\n                    })\n                    .add(series.group);\n                // */\n                if (clip) {\n                    clip.animate({ d: adaptivePath });\n                    simpleClip === null || simpleClip === void 0 ? void 0 : simpleClip.animate({ d: simplePath });\n                }\n                else {\n                    clip = zone.clip = renderer.path(adaptivePath);\n                    if (area) {\n                        simpleClip = zone.simpleClip = renderer.path(simplePath);\n                    }\n                }\n                // When no data, graph zone is not applied and after setData\n                // clip was ignored. As a result, it should be applied each\n                // time.\n                if (graph) {\n                    (_a = zone.graph) === null || _a === void 0 ? void 0 : _a.clip(clip);\n                }\n                if (area) {\n                    (_b = zone.area) === null || _b === void 0 ? void 0 : _b.clip(simpleClip);\n                }\n            });\n        }\n        else if (series.visible) {\n            // If zones were removed, restore graph and area\n            if (graph) {\n                graph.show();\n            }\n            if (area) {\n                area.show();\n            }\n        }\n    };\n    /**\n     * General abstraction for creating plot groups like series.group,\n     * series.dataLabelsGroup and series.markerGroup. On subsequent calls,\n     * the group will only be adjusted to the updated plot size.\n     *\n     * @private\n     * @function Highcharts.Series#plotGroup\n     */\n    Series.prototype.plotGroup = function (prop, name, visibility, zIndex, parent) {\n        var group = this[prop];\n        var isNew = !group,\n            attrs = {\n                visibility: visibility,\n                zIndex: zIndex || 0.1 // Pointer logic uses this\n            };\n        // Avoid setting undefined opacity, or in styled mode\n        if (Series_defined(this.opacity) &&\n            !this.chart.styledMode && this.state !== 'inactive' // #13719\n        ) {\n            attrs.opacity = this.opacity;\n        }\n        // Generate it on first call\n        if (!group) {\n            this[prop] = group = this.chart.renderer\n                .g()\n                .add(parent);\n        }\n        // Add the class names, and replace existing ones as response to\n        // Series.update (#6660)\n        group.addClass(('highcharts-' + name +\n            ' highcharts-series-' + this.index +\n            ' highcharts-' + this.type + '-series ' +\n            (Series_defined(this.colorIndex) ?\n                'highcharts-color-' + this.colorIndex + ' ' :\n                '') +\n            (this.options.className || '') +\n            (group.hasClass('highcharts-tracker') ?\n                ' highcharts-tracker' :\n                '')), true);\n        // Place it on first and subsequent (redraw) calls\n        group.attr(attrs)[isNew ? 'attr' : 'animate'](this.getPlotBox(name));\n        return group;\n    };\n    /**\n     * Get the translation and scale for the plot area of this series.\n     *\n     * @function Highcharts.Series#getPlotBox\n     */\n    Series.prototype.getPlotBox = function (name) {\n        var horAxis = this.xAxis,\n            vertAxis = this.yAxis;\n        var chart = this.chart,\n            inverted = (chart.inverted &&\n                !chart.polar &&\n                horAxis &&\n                this.invertible &&\n                name === 'series');\n        // Swap axes for inverted (#2339)\n        if (chart.inverted) {\n            horAxis = vertAxis;\n            vertAxis = this.xAxis;\n        }\n        return {\n            translateX: horAxis ? horAxis.left : chart.plotLeft,\n            translateY: vertAxis ? vertAxis.top : chart.plotTop,\n            rotation: inverted ? 90 : 0,\n            rotationOriginX: inverted ?\n                (horAxis.len - vertAxis.len) / 2 :\n                0,\n            rotationOriginY: inverted ?\n                (horAxis.len + vertAxis.len) / 2 :\n                0,\n            scaleX: inverted ? -1 : 1, // #1623\n            scaleY: 1\n        };\n    };\n    /**\n     * Removes the event handlers attached previously with addEvents.\n     * @private\n     * @function Highcharts.Series#removeEvents\n     */\n    Series.prototype.removeEvents = function (keepEventsForUpdate) {\n        var eventsToUnbind = this.eventsToUnbind;\n        if (!keepEventsForUpdate) {\n            // Remove all events\n            Series_removeEvent(this);\n        }\n        if (eventsToUnbind.length) {\n            // Remove only internal events for proper update. #12355 solves\n            // problem with multiple destroy events\n            eventsToUnbind.forEach(function (unbind) {\n                unbind();\n            });\n            eventsToUnbind.length = 0;\n        }\n    };\n    /**\n     * Render the graph and markers. Called internally when first rendering\n     * and later when redrawing the chart. This function can be extended in\n     * plugins, but normally shouldn't be called directly.\n     *\n     * @function Highcharts.Series#render\n     *\n     * @emits Highcharts.Series#event:afterRender\n     */\n    Series.prototype.render = function () {\n        var _a,\n            _b,\n            _c,\n            _d,\n            _e;\n        var series = this,\n            chart = series.chart,\n            options = series.options,\n            hasRendered = series.hasRendered,\n            animOptions = Series_animObject(options.animation),\n            visibility = series.visible ?\n                'inherit' : 'hidden', // #2597\n            zIndex = options.zIndex,\n            chartSeriesGroup = chart.seriesGroup;\n        var animDuration = series.finishedAnimating ?\n                0 : animOptions.duration;\n        Series_fireEvent(this, 'render');\n        // The group\n        series.plotGroup('group', 'series', visibility, zIndex, chartSeriesGroup);\n        series.markerGroup = series.plotGroup('markerGroup', 'markers', visibility, zIndex, chartSeriesGroup);\n        // Initial clipping, applies to columns etc. (#3839).\n        if (options.clip !== false) {\n            series.setClip();\n        }\n        // Initialize the animation\n        if (animDuration) {\n            (_a = series.animate) === null || _a === void 0 ? void 0 : _a.call(series, true);\n        }\n        // Draw the graph if any\n        if (series.drawGraph) {\n            series.drawGraph();\n            series.applyZones();\n        }\n        // Draw the points\n        if (series.visible) {\n            series.drawPoints();\n        }\n        // Draw the data labels\n        (_b = series.drawDataLabels) === null || _b === void 0 ? void 0 : _b.call(series);\n        // In pie charts, slices are added to the DOM, but actual rendering\n        // is postponed until labels reserved their space\n        (_c = series.redrawPoints) === null || _c === void 0 ? void 0 : _c.call(series);\n        // Draw the mouse tracking area\n        if (options.enableMouseTracking) {\n            (_d = series.drawTracker) === null || _d === void 0 ? void 0 : _d.call(series);\n        }\n        // Run the animation\n        if (animDuration) {\n            (_e = series.animate) === null || _e === void 0 ? void 0 : _e.call(series);\n        }\n        // Call the afterAnimate function on animation complete (but don't\n        // overwrite the animation.complete option which should be available\n        // to the user).\n        if (!hasRendered) {\n            // Additional time if defer is defined before afterAnimate\n            // will be triggered\n            if (animDuration && animOptions.defer) {\n                animDuration += animOptions.defer;\n            }\n            series.animationTimeout = Series_syncTimeout(function () {\n                series.afterAnimate();\n            }, animDuration || 0);\n        }\n        // Means data is in accordance with what you see\n        series.isDirty = false;\n        // (See #322) series.isDirty = series.isDirtyData = false; // means\n        // data is in accordance with what you see\n        series.hasRendered = true;\n        Series_fireEvent(series, 'afterRender');\n    };\n    /**\n     * Redraw the series. This function is called internally from\n     * `chart.redraw` and normally shouldn't be called directly.\n     * @private\n     * @function Highcharts.Series#redraw\n     */\n    Series.prototype.redraw = function () {\n        // Cache it here as it is set to false in render, but used after\n        var wasDirty = this.isDirty || this.isDirtyData;\n        this.translate();\n        this.render();\n        if (wasDirty) { // #3868, #3945\n            delete this.kdTree;\n        }\n    };\n    /**\n     * Whether to reserve space for the series, either because it is visible or\n     * because the `chart.ignoreHiddenSeries` option is false.\n     *\n     * @private\n     */\n    Series.prototype.reserveSpace = function () {\n        return this.visible || !this.chart.options.chart.ignoreHiddenSeries;\n    };\n    /**\n     * Find the nearest point from a pointer event. This applies to series that\n     * use k-d-trees to get the nearest point. Native pointer events must be\n     * normalized using `Pointer.normalize`, that adds `chartX` and `chartY`\n     * properties.\n     *\n     * @sample highcharts/demo/synchronized-charts\n     *         Synchronized charts with tooltips\n     *\n     * @function Highcharts.Series#searchPoint\n     *\n     * @param {Highcharts.PointerEvent} e\n     *        The normalized pointer event\n     * @param {boolean} [compareX=false]\n     *        Search only by the X value, not Y\n     *\n     * @return {Point|undefined}\n     *        The closest point to the pointer event\n     */\n    Series.prototype.searchPoint = function (e, compareX) {\n        var _a = this,\n            xAxis = _a.xAxis,\n            yAxis = _a.yAxis,\n            inverted = this.chart.inverted;\n        return this.searchKDTree({\n            clientX: inverted ?\n                xAxis.len - e.chartY + xAxis.pos :\n                e.chartX - xAxis.pos,\n            plotY: inverted ?\n                yAxis.len - e.chartX + yAxis.pos :\n                e.chartY - yAxis.pos\n        }, compareX, e);\n    };\n    /**\n     * Build the k-d-tree that is used by mouse and touch interaction to get\n     * the closest point. Line-like series typically have a one-dimensional\n     * tree where points are searched along the X axis, while scatter-like\n     * series typically search in two dimensions, X and Y.\n     *\n     * @private\n     * @function Highcharts.Series#buildKDTree\n     */\n    Series.prototype.buildKDTree = function (e) {\n        // Prevent multiple k-d-trees from being built simultaneously\n        // (#6235)\n        this.buildingKdTree = true;\n        var series = this,\n            dimensions = series.options.findNearestPointBy\n                .indexOf('y') > -1 ? 2 : 1;\n        /**\n         * Internal function\n         * @private\n         */\n        function kdtree(points, depth, dimensions) {\n            var length = points === null || points === void 0 ? void 0 : points.length;\n            var axis,\n                median;\n            if (length) {\n                // Alternate between the axis\n                axis = series.kdAxisArray[depth % dimensions];\n                // Sort point array\n                points.sort(function (a, b) { return (a[axis] || 0) - (b[axis] || 0); });\n                median = Math.floor(length / 2);\n                // Build and return node\n                return {\n                    point: points[median],\n                    left: kdtree(points.slice(0, median), depth + 1, dimensions),\n                    right: kdtree(points.slice(median + 1), depth + 1, dimensions)\n                };\n            }\n        }\n        /**\n         * Start the recursive build process with a clone of the points\n         * array and null points filtered out. (#3873)\n         * @private\n         */\n        function startRecursive() {\n            series.kdTree = kdtree(series.getValidPoints(void 0, \n            // For line-type series restrict to plot area, but\n            // column-type series not (#3916, #4511)\n            !series.directTouch), dimensions, dimensions);\n            series.buildingKdTree = false;\n        }\n        delete series.kdTree;\n        // For testing tooltips, don't build async. Also if touchstart, we may\n        // be dealing with click events on mobile, so don't delay (#6817).\n        Series_syncTimeout(startRecursive, series.options.kdNow || (e === null || e === void 0 ? void 0 : e.type) === 'touchstart' ? 0 : 1);\n    };\n    /**\n     * @private\n     * @function Highcharts.Series#searchKDTree\n     */\n    Series.prototype.searchKDTree = function (point, compareX, e, suppliedPointEvaluator, suppliedBSideCheckEvaluator) {\n        var series = this, _a = this.kdAxisArray, kdX = _a[0], kdY = _a[1], kdComparer = compareX ? 'distX' : 'dist', kdDimensions = (series.options.findNearestPointBy || '')\n                .indexOf('y') > -1 ? 2 : 1, useRadius = !!series.isBubble, pointEvaluator = suppliedPointEvaluator || (function (p1, p2, comparisonProp) { return [\n                (p1[comparisonProp] || 0) < (p2[comparisonProp] || 0) ?\n                    p1 :\n                    p2,\n                false\n            ]; }), bSideCheckEvaluator = suppliedBSideCheckEvaluator || (function (a, b) { return a < b; });\n        /**\n         * Set the one and two dimensional distance on the point object.\n         * @private\n         */\n        function setDistance(p1, p2) {\n            var _a;\n            var p1kdX = p1[kdX],\n                p2kdX = p2[kdX],\n                x = (Series_defined(p1kdX) && Series_defined(p2kdX)) ? p1kdX - p2kdX : null,\n                p1kdY = p1[kdY],\n                p2kdY = p2[kdY],\n                y = (Series_defined(p1kdY) && Series_defined(p2kdY)) ? p1kdY - p2kdY : 0,\n                radius = useRadius ? (((_a = p2.marker) === null || _a === void 0 ? void 0 : _a.radius) || 0) : 0;\n            p2.dist = Math.sqrt(((x && x * x) || 0) + y * y) - radius;\n            p2.distX = Series_defined(x) ? (Math.abs(x) - radius) : Number.MAX_VALUE;\n        }\n        /**\n         * @private\n         */\n        function doSearch(search, tree, depth, dimensions) {\n            var _a;\n            var _b;\n            var point = tree.point,\n                axis = series.kdAxisArray[depth % dimensions];\n            var ret = point,\n                flip = false;\n            setDistance(search, point);\n            // Pick side based on distance to splitting point\n            var tdist = (search[axis] || 0) - (point[axis] || 0) +\n                    (useRadius ? (((_b = point.marker) === null || _b === void 0 ? void 0 : _b.radius) || 0) : 0), sideA = tdist < 0 ? 'left' : 'right', sideB = tdist < 0 ? 'right' : 'left';\n            // End of tree\n            if (tree[sideA]) {\n                _a = pointEvaluator(point, doSearch(search, tree[sideA], depth + 1, dimensions), kdComparer), ret = _a[0], flip = _a[1];\n            }\n            if (tree[sideB]) {\n                var sqrtTDist = Math.sqrt(tdist * tdist),\n                    retDist = ret[kdComparer];\n                // Compare distance to current best to splitting point to decide\n                // whether to check side B or no\n                if (bSideCheckEvaluator(sqrtTDist, retDist, flip)) {\n                    ret = pointEvaluator(ret, doSearch(search, tree[sideB], depth + 1, dimensions), kdComparer)[0];\n                }\n            }\n            return ret;\n        }\n        if (!this.kdTree && !this.buildingKdTree) {\n            this.buildKDTree(e);\n        }\n        if (this.kdTree) {\n            return doSearch(point, this.kdTree, kdDimensions, kdDimensions);\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.Series#pointPlacementToXValue\n     */\n    Series.prototype.pointPlacementToXValue = function () {\n        var _a = this,\n            options = _a.options,\n            xAxis = _a.xAxis;\n        var factor = options.pointPlacement;\n        // Point placement is relative to each series pointRange (#5889)\n        if (factor === 'between') {\n            factor = xAxis.reversed ? -0.5 : 0.5; // #11955\n        }\n        return Series_isNumber(factor) ?\n            factor * (options.pointRange || xAxis.pointRange) :\n            0;\n    };\n    /**\n     * @private\n     * @function Highcharts.Series#isPointInside\n     */\n    Series.prototype.isPointInside = function (point) {\n        var _a = this,\n            chart = _a.chart,\n            xAxis = _a.xAxis,\n            yAxis = _a.yAxis,\n            _b = point.plotX,\n            plotX = _b === void 0 ? -1 : _b,\n            _c = point.plotY,\n            plotY = _c === void 0 ? -1 : _c,\n            isInside = (plotY >= 0 &&\n                plotY <= (yAxis ? yAxis.len : chart.plotHeight) &&\n                plotX >= 0 &&\n                plotX <= (xAxis ? xAxis.len : chart.plotWidth));\n        return isInside;\n    };\n    /**\n     * Draw the tracker object that sits above all data labels and markers to\n     * track mouse events on the graph or points. For the line type charts\n     * the tracker uses the same graphPath, but with a greater stroke width\n     * for better control.\n     * @private\n     */\n    Series.prototype.drawTracker = function () {\n        var _a;\n        var series = this,\n            options = series.options,\n            trackByArea = options.trackByArea,\n            trackerPath = [].concat((trackByArea ? series.areaPath : series.graphPath) || []),\n            chart = series.chart,\n            pointer = chart.pointer,\n            renderer = chart.renderer,\n            snap = ((_a = chart.options.tooltip) === null || _a === void 0 ? void 0 : _a.snap) || 0,\n            onMouseOver = function () {\n                if (options.enableMouseTracking &&\n                    chart.hoverSeries !== series) {\n                    series.onMouseOver();\n            }\n        }, \n        /*\n         * Empirical lowest possible opacities for TRACKER_FILL for an\n         * element to stay invisible but clickable\n         * IE9: 0.00000000001 (unlimited)\n         * IE10: 0.0001 (exporting only)\n         * FF: 0.00000000001 (unlimited)\n         * Chrome: 0.000001\n         * Safari: 0.000001\n         * Opera: 0.00000000001 (unlimited)\n         */\n        TRACKER_FILL = 'rgba(192,192,192,' + (Series_svg ? 0.0001 : 0.002) + ')';\n        var tracker = series.tracker;\n        // Draw the tracker\n        if (tracker) {\n            tracker.attr({ d: trackerPath });\n        }\n        else if (series.graph) { // Create\n            series.tracker = tracker = renderer.path(trackerPath)\n                .attr({\n                visibility: series.visible ? 'inherit' : 'hidden',\n                zIndex: 2\n            })\n                .addClass(trackByArea ?\n                'highcharts-tracker-area' :\n                'highcharts-tracker-line')\n                .add(series.group);\n            if (!chart.styledMode) {\n                tracker.attr({\n                    'stroke-linecap': 'round',\n                    'stroke-linejoin': 'round', // #1225\n                    stroke: TRACKER_FILL,\n                    fill: trackByArea ? TRACKER_FILL : 'none',\n                    'stroke-width': series.graph.strokeWidth() +\n                        (trackByArea ? 0 : 2 * snap)\n                });\n            }\n            // The tracker is added to the series group, which is clipped, but\n            // is covered by the marker group. So the marker group also needs to\n            // capture events.\n            [\n                series.tracker,\n                series.markerGroup,\n                series.dataLabelsGroup\n            ].forEach(function (tracker) {\n                if (tracker) {\n                    tracker.addClass('highcharts-tracker')\n                        .on('mouseover', onMouseOver)\n                        .on('mouseout', function (e) {\n                        pointer === null || pointer === void 0 ? void 0 : pointer.onTrackerMouseOut(e);\n                    });\n                    if (options.cursor && !chart.styledMode) {\n                        tracker.css({ cursor: options.cursor });\n                    }\n                    tracker.on('touchstart', onMouseOver);\n                }\n            });\n        }\n        Series_fireEvent(this, 'afterDrawTracker');\n    };\n    /**\n     * Add a point to the series after render time. The point can be added at\n     * the end, or by giving it an X value, to the start or in the middle of the\n     * series.\n     *\n     * @sample highcharts/members/series-addpoint-append/\n     *         Append point\n     * @sample highcharts/members/series-addpoint-append-and-shift/\n     *         Append and shift\n     * @sample highcharts/members/series-addpoint-x-and-y/\n     *         Both X and Y values given\n     * @sample highcharts/members/series-addpoint-pie/\n     *         Append pie slice\n     * @sample stock/members/series-addpoint/\n     *         Append 100 points in Highcharts Stock\n     * @sample stock/members/series-addpoint-shift/\n     *         Append and shift in Highcharts Stock\n     * @sample maps/members/series-addpoint/\n     *         Add a point in Highmaps\n     *\n     * @function Highcharts.Series#addPoint\n     *\n     * @param {Highcharts.PointOptionsType} options\n     *        The point options. If options is a single number, a point with\n     *        that y value is appended to the series. If it is an array, it will\n     *        be interpreted as x and y values respectively. If it is an\n     *        object, advanced options as outlined under `series.data` are\n     *        applied.\n     *\n     * @param {boolean} [redraw=true]\n     *        Whether to redraw the chart after the point is added. When adding\n     *        more than one point, it is highly recommended that the redraw\n     *        option be set to false, and instead {@link Chart#redraw} is\n     *        explicitly called after the adding of points is finished.\n     *        Otherwise, the chart will redraw after adding each point.\n     *\n     * @param {boolean} [shift=false]\n     *        If true, a point is shifted off the start of the series as one is\n     *        appended to the end.\n     *\n     * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n     *        Whether to apply animation, and optionally animation\n     *        configuration.\n     *\n     * @param {boolean} [withEvent=true]\n     *        Used internally, whether to fire the series `addPoint` event.\n     *\n     * @emits Highcharts.Series#event:addPoint\n     */\n    Series.prototype.addPoint = function (options, redraw, shift, animation, withEvent) {\n        var series = this,\n            seriesOptions = series.options,\n            chart = series.chart,\n            data = series.data,\n            table = series.dataTable,\n            xAxis = series.xAxis,\n            names = xAxis && xAxis.hasNames && xAxis.names,\n            dataOptions = seriesOptions.data,\n            xData = series.getColumn('x');\n        var isInTheMiddle,\n            i;\n        // Optional redraw, defaults to true\n        redraw = Series_pick(redraw, true);\n        // Get options and push the point to xData, yData and series.options. In\n        // series.generatePoints the Point instance will be created on demand\n        // and pushed to the series.data array.\n        var point = { series: series };\n        series.pointClass.prototype.applyOptions.apply(point, [options]);\n        var x = point.x;\n        // Get the insertion point\n        i = xData.length;\n        if (series.requireSorting && x < xData[i - 1]) {\n            isInTheMiddle = true;\n            while (i && xData[i - 1] > x) {\n                i--;\n            }\n        }\n        // Insert the row at the given index\n        table.setRow(point, i, true, { addColumns: false });\n        if (names && point.name) {\n            names[x] = point.name;\n        }\n        dataOptions === null || dataOptions === void 0 ? void 0 : dataOptions.splice(i, 0, options);\n        if (isInTheMiddle ||\n            // When processedData is present we need to splice an empty slot\n            // into series.data, otherwise generatePoints won't pick it up.\n            series.processedData) {\n            series.data.splice(i, 0, null);\n            series.processData();\n        }\n        // Generate points to be added to the legend (#1329)\n        if (seriesOptions.legendType === 'point') {\n            series.generatePoints();\n        }\n        // Shift the first point off the parallel arrays\n        if (shift) {\n            if (data[0] && !!data[0].remove) {\n                data[0].remove(false);\n            }\n            else {\n                Series_spreadArray([\n                    data,\n                    dataOptions\n                ], Object.values(table.getColumns()), true).filter(Series_defined).forEach(function (coll) {\n                    coll.shift();\n                });\n                table.rowCount -= 1;\n                Series_fireEvent(table, 'afterDeleteRows');\n            }\n        }\n        // Fire event\n        if (withEvent !== false) {\n            Series_fireEvent(series, 'addPoint', { point: point });\n        }\n        // Redraw\n        series.isDirty = true;\n        series.isDirtyData = true;\n        if (redraw) {\n            chart.redraw(animation); // Animation is set anyway on redraw, #5665\n        }\n    };\n    /**\n     * Remove a point from the series. Unlike the\n     * {@link Highcharts.Point#remove} method, this can also be done on a point\n     * that is not instantiated because it is outside the view or subject to\n     * Highcharts Stock data grouping.\n     *\n     * @sample highcharts/members/series-removepoint/\n     *         Remove cropped point\n     *\n     * @function Highcharts.Series#removePoint\n     *\n     * @param {number} i\n     *        The index of the point in the {@link Highcharts.Series.data|data}\n     *        array.\n     *\n     * @param {boolean} [redraw=true]\n     *        Whether to redraw the chart after the point is added. When\n     *        removing more than one point, it is highly recommended that the\n     *        `redraw` option be set to `false`, and instead {@link\n     *        Highcharts.Chart#redraw} is explicitly called after the adding of\n     *        points is finished.\n     *\n     * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n     *        Whether and optionally how the series should be animated.\n     *\n     * @emits Highcharts.Point#event:remove\n     */\n    Series.prototype.removePoint = function (i, redraw, animation) {\n        var series = this,\n            chart = series.chart,\n            data = series.data,\n            points = series.points,\n            table = series.dataTable,\n            point = data[i],\n            remove = function () {\n                // Splice out the point's data from all parallel arrays\n                Series_spreadArray([\n                    // #4935\n                    (points === null || points === void 0 ? void 0 : points.length) === data.length ? points : void 0,\n                    data,\n                    series.options.data\n                ],\n            Object.values(table.getColumns()),\n            true).filter(Series_defined).forEach(function (coll) {\n                    coll.splice(i, 1);\n            });\n            // Shorthand row deletion in order to avoid including the whole\n            // `deleteRows` function in the DataTableCore module.\n            table.rowCount -= 1;\n            Series_fireEvent(table, 'afterDeleteRows');\n            point === null || point === void 0 ? void 0 : point.destroy();\n            // Redraw\n            series.isDirty = true;\n            series.isDirtyData = true;\n            if (redraw) {\n                chart.redraw();\n            }\n        };\n        Series_setAnimation(animation, chart);\n        redraw = Series_pick(redraw, true);\n        // Fire the event with a default handler of removing the point\n        if (point) {\n            point.firePointEvent('remove', null, remove);\n        }\n        else {\n            remove();\n        }\n    };\n    /**\n     * Remove a series and optionally redraw the chart.\n     *\n     * @sample highcharts/members/series-remove/\n     *         Remove first series from a button\n     *\n     * @function Highcharts.Series#remove\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     * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n     *        Whether to apply animation, and optionally animation\n     *        configuration.\n     *\n     * @param {boolean} [withEvent=true]\n     *        Used internally, whether to fire the series `remove` event.\n     *\n     * @emits Highcharts.Series#event:remove\n     */\n    Series.prototype.remove = function (redraw, animation, withEvent, keepEvents) {\n        var series = this,\n            chart = series.chart;\n        /**\n         * @private\n         */\n        function remove() {\n            // Destroy elements\n            series.destroy(keepEvents);\n            // Redraw\n            chart.isDirtyLegend = chart.isDirtyBox = true;\n            chart.linkSeries(keepEvents);\n            if (Series_pick(redraw, true)) {\n                chart.redraw(animation);\n            }\n        }\n        // Fire the event with a default handler of removing the point\n        if (withEvent !== false) {\n            Series_fireEvent(series, 'remove', null, remove);\n        }\n        else {\n            remove();\n        }\n    };\n    /**\n     * Update the series with a new set of options. For a clean and precise\n     * handling of new options, all methods and elements from the series are\n     * removed, and it is initialized from scratch. Therefore, this method is\n     * more performance expensive than some other utility methods like {@link\n     * Series#setData} or {@link Series#setVisible}.\n     *\n     * Note that `Series.update` may mutate the passed `data` options.\n     *\n     * @sample highcharts/members/series-update/\n     *         Updating series options\n     * @sample maps/members/series-update/\n     *         Update series options in Highmaps\n     *\n     * @function Highcharts.Series#update\n     *\n     * @param {Highcharts.SeriesOptionsType} options\n     *        New options that will be merged with the series' existing options.\n     *\n     * @param {boolean} [redraw=true]\n     *        Whether to redraw the chart after the series is altered. If doing\n     *        more operations on the chart, it is a good idea to set redraw to\n     *        false and call {@link Chart#redraw} after.\n     *\n     * @emits Highcharts.Series#event:update\n     * @emits Highcharts.Series#event:afterUpdate\n     */\n    Series.prototype.update = function (options, redraw) {\n        var _a,\n            _b,\n            _c,\n            _d;\n        options = Series_diffObjects(options, this.userOptions);\n        Series_fireEvent(this, 'update', { options: options });\n        var series = this,\n            chart = series.chart, \n            // Must use user options when changing type because series.options\n            // is merged in with type specific plotOptions\n            oldOptions = series.userOptions,\n            initialType = series.initialType || series.type,\n            plotOptions = chart.options.plotOptions,\n            initialSeriesProto = seriesTypes[initialType].prototype,\n            groups = [\n                'group',\n                'markerGroup',\n                'dataLabelsGroup',\n                'transformGroup'\n            ],\n            optionsToCheck = [\n                'dataGrouping',\n                'pointStart',\n                'pointInterval',\n                'pointIntervalUnit',\n                'keys'\n            ], \n            // Animation must be enabled when calling update before the initial\n            // animation has first run. This happens when calling update\n            // directly after chart initialization, or when applying responsive\n            // rules (#6912).\n            animation = series.finishedAnimating && { animation: false },\n            kinds = {};\n        var seriesOptions,\n            n,\n            preserve = [\n                'colorIndex',\n                'eventOptions',\n                'navigatorSeries',\n                'symbolIndex',\n                'baseSeries'\n            ],\n            newType = (options.type ||\n                oldOptions.type ||\n                chart.options.chart.type);\n        var keepPoints = !(\n            // Indicators, histograms etc recalculate the data. It should be\n            // possible to omit this.\n            this.hasDerivedData ||\n                // New type requires new point classes\n                (newType && newType !== this.type) ||\n                // New options affecting how the data points are built\n                typeof options.keys !== 'undefined' ||\n                typeof options.pointStart !== 'undefined' ||\n                typeof options.pointInterval !== 'undefined' ||\n                typeof options.relativeXValue !== 'undefined' ||\n                options.joinBy ||\n                options.mapData || // #11636\n                // Changes to data grouping requires new points in new group\n                optionsToCheck.some(function (option) { return series.hasOptionChanged(option); }));\n        newType = newType || initialType;\n        if (keepPoints) {\n            preserve.push('data', 'isDirtyData', \n            // GeoHeatMap interpolation\n            'isDirtyCanvas', 'points', 'dataTable', 'processedData', // #17057\n            'xIncrement', 'cropped', '_hasPointMarkers', 'hasDataLabels', \n            // Networkgraph (#14397)\n            'nodes', 'layout', \n            // Treemap\n            'level', \n            // Map specific, consider moving it to series-specific preserve-\n            // properties (#10617)\n            'mapMap', 'mapData', 'minY', 'maxY', 'minX', 'maxX', 'transformGroups' // #18857\n            );\n            if (options.visible !== false) {\n                preserve.push('area', 'graph');\n            }\n            series.parallelArrays.forEach(function (key) {\n                preserve.push(key + 'Data');\n            });\n            if (options.data) {\n                // `setData` uses `dataSorting` options so we need to update\n                // them earlier\n                if (options.dataSorting) {\n                    Series_extend(series.options.dataSorting, options.dataSorting);\n                }\n                this.setData(options.data, false);\n            }\n        }\n        else {\n            this.dataTable.modified = this.dataTable;\n        }\n        // Do the merge, with some forced options\n        options = Series_merge(oldOptions, {\n            // When oldOptions.index is null it should't be cleared.\n            // Otherwise navigator series will have wrong indexes (#10193).\n            index: oldOptions.index === void 0 ?\n                series.index : oldOptions.index,\n            pointStart: \n            // When updating from blank (#7933)\n            (_c = (_b = (_a = plotOptions === null || plotOptions === void 0 ? void 0 : plotOptions.series) === null || _a === void 0 ? void 0 : _a.pointStart) !== null && _b !== void 0 ? _b : oldOptions.pointStart) !== null && _c !== void 0 ? _c : \n            // When updating after addPoint\n            series.getColumn('x')[0]\n        }, !keepPoints && { data: series.options.data }, options, animation);\n        // Merge does not merge arrays, but replaces them. Since points were\n        // updated, `series.options.data` has correct merged options, use it:\n        if (keepPoints && options.data) {\n            options.data = series.options.data;\n        }\n        // Make sure preserved properties are not destroyed (#3094)\n        preserve = groups.concat(preserve);\n        preserve.forEach(function (prop) {\n            preserve[prop] = series[prop];\n            delete series[prop];\n        });\n        var casting = false;\n        if (seriesTypes[newType]) {\n            casting = newType !== series.type;\n            // Destroy the series and delete all properties, it will be\n            // reinserted within the `init` call below\n            series.remove(false, false, false, true);\n            if (casting) {\n                // #20264: Re-detect a certain chart properties from new series\n                chart.propFromSeries();\n                // Modern browsers including IE11\n                if (Object.setPrototypeOf) {\n                    Object.setPrototypeOf(series, seriesTypes[newType].prototype);\n                    // Legacy (IE < 11)\n                }\n                else {\n                    var ownEvents = Object.hasOwnProperty.call(series, 'hcEvents') && series.hcEvents;\n                    for (n in initialSeriesProto) { // eslint-disable-line guard-for-in\n                        series[n] = void 0;\n                    }\n                    // Reinsert all methods and properties from the new type\n                    // prototype (#2270, #3719).\n                    Series_extend(series, seriesTypes[newType].prototype);\n                    // The events are tied to the prototype chain, don't copy if\n                    // they're not the series' own\n                    if (ownEvents) {\n                        series.hcEvents = ownEvents;\n                    }\n                    else {\n                        delete series.hcEvents;\n                    }\n                }\n            }\n        }\n        else {\n            Series_error(17, true, chart, { missingModuleFor: newType });\n        }\n        // Re-register groups (#3094) and other preserved properties\n        preserve.forEach(function (prop) {\n            series[prop] = preserve[prop];\n        });\n        series.init(chart, options);\n        // Remove particular elements of the points. Check `series.options`\n        // because we need to consider the options being set on plotOptions as\n        // well.\n        if (keepPoints && this.points) {\n            seriesOptions = series.options;\n            // What kind of elements to destroy\n            if (seriesOptions.visible === false) {\n                kinds.graphic = 1;\n                kinds.dataLabel = 1;\n            }\n            else {\n                // If the marker got disabled or changed its symbol, width or\n                // height - destroy\n                if (this.hasMarkerChanged(seriesOptions, oldOptions)) {\n                    kinds.graphic = 1;\n                }\n                if (!((_d = series.hasDataLabels) === null || _d === void 0 ? void 0 : _d.call(series))) {\n                    kinds.dataLabel = 1;\n                }\n            }\n            for (var _e = 0, _f = this.points; _e < _f.length; _e++) {\n                var point = _f[_e];\n                if (point && point.series) {\n                    point.resolveColor();\n                    // Destroy elements in order to recreate based on updated\n                    // series options.\n                    if (Object.keys(kinds).length) {\n                        point.destroyElements(kinds);\n                    }\n                    if (seriesOptions.showInLegend === false &&\n                        point.legendItem) {\n                        chart.legend.destroyItem(point);\n                    }\n                }\n            }\n        }\n        series.initialType = initialType;\n        chart.linkSeries(); // Links are lost in series.remove (#3028)\n        // Set data for series with sorting enabled if it isn't set yet (#19715)\n        chart.setSortedData();\n        // #15383: Fire updatedData if the type has changed to keep linked\n        // series such as indicators updated\n        if (casting && series.linkedSeries.length) {\n            series.isDirtyData = true;\n        }\n        Series_fireEvent(this, 'afterUpdate');\n        if (Series_pick(redraw, true)) {\n            chart.redraw(keepPoints ? void 0 : false);\n        }\n    };\n    /**\n     * Used from within series.update\n     * @private\n     */\n    Series.prototype.setName = function (name) {\n        this.name = this.options.name = this.userOptions.name = name;\n        this.chart.isDirtyLegend = true;\n    };\n    /**\n     * Check if the option has changed.\n     * @private\n     */\n    Series.prototype.hasOptionChanged = function (optionName) {\n        var _a,\n            _b;\n        var chart = this.chart,\n            option = this.options[optionName],\n            plotOptions = chart.options.plotOptions,\n            oldOption = this.userOptions[optionName],\n            plotOptionsOption = Series_pick((_a = plotOptions === null || plotOptions === void 0 ? void 0 : plotOptions[this.type]) === null || _a === void 0 ? void 0 : _a[optionName], (_b = plotOptions === null || plotOptions === void 0 ? void 0 : plotOptions.series) === null || _b === void 0 ? void 0 : _b[optionName]);\n        // Check if `plotOptions` are defined already, #19203\n        if (oldOption && !Series_defined(plotOptionsOption)) {\n            return option !== oldOption;\n        }\n        return option !== Series_pick(plotOptionsOption, option);\n    };\n    /**\n     * Runs on mouse over the series graphical items.\n     *\n     * @function Highcharts.Series#onMouseOver\n     * @emits Highcharts.Series#event:mouseOver\n     */\n    Series.prototype.onMouseOver = function () {\n        var series = this,\n            chart = series.chart,\n            hoverSeries = chart.hoverSeries,\n            pointer = chart.pointer;\n        pointer === null || pointer === void 0 ? void 0 : pointer.setHoverChartIndex();\n        // Set normal state to previous series\n        if (hoverSeries && hoverSeries !== series) {\n            hoverSeries.onMouseOut();\n        }\n        // Trigger the event, but to save processing time,\n        // only if defined\n        if (series.options.events.mouseOver) {\n            Series_fireEvent(series, 'mouseOver');\n        }\n        // Hover this\n        series.setState('hover');\n        /**\n         * Contains the original hovered series.\n         *\n         * @name Highcharts.Chart#hoverSeries\n         * @type {Highcharts.Series|null}\n         */\n        chart.hoverSeries = series;\n    };\n    /**\n     * Runs on mouse out of the series graphical items.\n     *\n     * @function Highcharts.Series#onMouseOut\n     *\n     * @emits Highcharts.Series#event:mouseOut\n     */\n    Series.prototype.onMouseOut = function () {\n        // Trigger the event only if listeners exist\n        var series = this,\n            options = series.options,\n            chart = series.chart,\n            tooltip = chart.tooltip,\n            hoverPoint = chart.hoverPoint;\n        // #182, set to null before the mouseOut event fires\n        chart.hoverSeries = null;\n        // Trigger mouse out on the point, which must be in this series\n        if (hoverPoint) {\n            hoverPoint.onMouseOut();\n        }\n        // Fire the mouse out event\n        if (series && options.events.mouseOut) {\n            Series_fireEvent(series, 'mouseOut');\n        }\n        // Hide the tooltip\n        if (tooltip &&\n            !series.stickyTracking &&\n            (!tooltip.shared || series.noSharedTooltip)) {\n            tooltip.hide();\n        }\n        // Reset all inactive states\n        chart.series.forEach(function (s) {\n            s.setState('', true);\n        });\n    };\n    /**\n     * Set the state of the series. Called internally on mouse interaction\n     * operations, but it can also be called directly to visually\n     * highlight a series.\n     *\n     * @function Highcharts.Series#setState\n     *\n     * @param {Highcharts.SeriesStateValue|\"\"} [state]\n     *        The new state, can be either `'hover'`, `'inactive'`, `'select'`,\n     *        or `''` (an empty string), `'normal'` or `undefined` to set to\n     *        normal state.\n     * @param {boolean} [inherit]\n     *        Determines if state should be inherited by points too.\n     */\n    Series.prototype.setState = function (state, inherit) {\n        var series = this, options = series.options, graph = series.graph, inactiveOtherPoints = options.inactiveOtherPoints, stateOptions = options.states, \n            // By default a quick animation to hover/inactive,\n            // slower to un-hover\n            stateAnimation = Series_pick((stateOptions[state || 'normal'] &&\n                stateOptions[state || 'normal'].animation), series.chart.options.chart.animation);\n        var lineWidth = options.lineWidth,\n            opacity = options.opacity;\n        state = state || '';\n        if (series.state !== state) {\n            // Toggle class names\n            [\n                series.group,\n                series.markerGroup,\n                series.dataLabelsGroup\n            ].forEach(function (group) {\n                if (group) {\n                    // Old state\n                    if (series.state) {\n                        group.removeClass('highcharts-series-' + series.state);\n                    }\n                    // New state\n                    if (state) {\n                        group.addClass('highcharts-series-' + state);\n                    }\n                }\n            });\n            series.state = state;\n            if (!series.chart.styledMode) {\n                if (stateOptions[state] &&\n                    stateOptions[state].enabled === false) {\n                    return;\n                }\n                if (state) {\n                    lineWidth = (stateOptions[state].lineWidth ||\n                        lineWidth + (stateOptions[state].lineWidthPlus || 0)); // #4035\n                    opacity = Series_pick(stateOptions[state].opacity, opacity);\n                }\n                if (graph && !graph.dashstyle && Series_isNumber(lineWidth)) {\n                    // Animate the graph stroke-width\n                    for (var _a = 0, _b = Series_spreadArray([\n                        graph\n                    ], this.zones.map(function (zone) { return zone.graph; }), true); _a < _b.length; _a++) {\n                        var graphElement = _b[_a];\n                        graphElement === null || graphElement === void 0 ? void 0 : graphElement.animate({\n                            'stroke-width': lineWidth\n                        }, stateAnimation);\n                    }\n                }\n                // For some types (pie, networkgraph, sankey) opacity is\n                // resolved on a point level\n                if (!inactiveOtherPoints) {\n                    [\n                        series.group,\n                        series.markerGroup,\n                        series.dataLabelsGroup,\n                        series.labelBySeries\n                    ].forEach(function (group) {\n                        if (group) {\n                            group.animate({\n                                opacity: opacity\n                            }, stateAnimation);\n                        }\n                    });\n                }\n            }\n        }\n        // Don't loop over points on a series that doesn't apply inactive state\n        // to siblings markers (e.g. line, column)\n        if (inherit && inactiveOtherPoints && series.points) {\n            series.setAllPointsToState(state || void 0);\n        }\n    };\n    /**\n     * Set the state for all points in the series.\n     *\n     * @function Highcharts.Series#setAllPointsToState\n     *\n     * @private\n     *\n     * @param {string} [state]\n     *        Can be either `hover` or undefined to set to normal state.\n     */\n    Series.prototype.setAllPointsToState = function (state) {\n        this.points.forEach(function (point) {\n            if (point.setState) {\n                point.setState(state);\n            }\n        });\n    };\n    /**\n     * Show or hide the series.\n     *\n     * @function Highcharts.Series#setVisible\n     *\n     * @param {boolean} [visible]\n     * True to show the series, false to hide. If undefined, the visibility is\n     * toggled.\n     *\n     * @param {boolean} [redraw=true]\n     * Whether to redraw the chart after the series is altered. If doing more\n     * operations on the chart, it is a good idea to set redraw to false and\n     * call {@link Chart#redraw|chart.redraw()} after.\n     *\n     * @emits Highcharts.Series#event:hide\n     * @emits Highcharts.Series#event:show\n     */\n    Series.prototype.setVisible = function (vis, redraw) {\n        var _a;\n        var series = this,\n            chart = series.chart,\n            ignoreHiddenSeries = chart.options.chart.ignoreHiddenSeries,\n            oldVisibility = series.visible;\n        // If called without an argument, toggle visibility\n        series.visible =\n            vis =\n                series.options.visible =\n                    series.userOptions.visible =\n                        typeof vis === 'undefined' ? !oldVisibility : vis; // #5618\n        var showOrHide = vis ? 'show' : 'hide';\n        // Show or hide elements\n        [\n            'group',\n            'dataLabelsGroup',\n            'markerGroup',\n            'tracker',\n            'tt'\n        ].forEach(function (key) {\n            var _a;\n            (_a = series[key]) === null || _a === void 0 ? void 0 : _a[showOrHide]();\n        });\n        // Hide tooltip (#1361)\n        if (chart.hoverSeries === series ||\n            ((_a = chart.hoverPoint) === null || _a === void 0 ? void 0 : _a.series) === series) {\n            series.onMouseOut();\n        }\n        if (series.legendItem) {\n            chart.legend.colorizeItem(series, vis);\n        }\n        // Rescale or adapt to resized chart\n        series.isDirty = true;\n        // In a stack, all other series are affected\n        if (series.options.stacking) {\n            chart.series.forEach(function (otherSeries) {\n                if (otherSeries.options.stacking && otherSeries.visible) {\n                    otherSeries.isDirty = true;\n                }\n            });\n        }\n        // Show or hide linked series\n        series.linkedSeries.forEach(function (otherSeries) {\n            otherSeries.setVisible(vis, false);\n        });\n        if (ignoreHiddenSeries) {\n            chart.isDirtyBox = true;\n        }\n        Series_fireEvent(series, showOrHide);\n        if (redraw !== false) {\n            chart.redraw();\n        }\n    };\n    /**\n     * Show the series if hidden.\n     *\n     * @sample highcharts/members/series-hide/\n     *         Toggle visibility from a button\n     *\n     * @function Highcharts.Series#show\n     * @emits Highcharts.Series#event:show\n     */\n    Series.prototype.show = function () {\n        this.setVisible(true);\n    };\n    /**\n     * Hide the series if visible. If the\n     * [chart.ignoreHiddenSeries](https://api.highcharts.com/highcharts/chart.ignoreHiddenSeries)\n     * option is true, the chart is redrawn without this series.\n     *\n     * @sample highcharts/members/series-hide/\n     *         Toggle visibility from a button\n     *\n     * @function Highcharts.Series#hide\n     * @emits Highcharts.Series#event:hide\n     */\n    Series.prototype.hide = function () {\n        this.setVisible(false);\n    };\n    /**\n     * Select or unselect the series. This means its\n     * {@link Highcharts.Series.selected|selected}\n     * property is set, the checkbox in the legend is toggled and when selected,\n     * the series is returned by the {@link Highcharts.Chart#getSelectedSeries}\n     * function.\n     *\n     * @sample highcharts/members/series-select/\n     *         Select a series from a button\n     *\n     * @function Highcharts.Series#select\n     *\n     * @param {boolean} [selected]\n     * True to select the series, false to unselect. If undefined, the selection\n     * state is toggled.\n     *\n     * @emits Highcharts.Series#event:select\n     * @emits Highcharts.Series#event:unselect\n     */\n    Series.prototype.select = function (selected) {\n        var series = this;\n        series.selected =\n            selected =\n                this.options.selected = (typeof selected === 'undefined' ?\n                    !series.selected :\n                    selected);\n        if (series.checkbox) {\n            series.checkbox.checked = selected;\n        }\n        Series_fireEvent(series, selected ? 'select' : 'unselect');\n    };\n    /**\n     * Checks if a tooltip should be shown for a given point.\n     *\n     * @private\n     */\n    Series.prototype.shouldShowTooltip = function (plotX, plotY, options) {\n        if (options === void 0) { options = {}; }\n        options.series = this;\n        options.visiblePlotOnly = true;\n        return this.chart.isInsidePlot(plotX, plotY, options);\n    };\n    /**\n     * Draws the legend symbol based on the legendSymbol user option.\n     *\n     * @private\n     */\n    Series.prototype.drawLegendSymbol = function (legend, item) {\n        var _a;\n        (_a = Legend_LegendSymbol[this.options.legendSymbol || 'rectangle']) === null || _a === void 0 ? void 0 : _a.call(this, legend, item);\n    };\n    Series.defaultOptions = SeriesDefaults;\n    /**\n     * Registry of all available series types.\n     *\n     * @name Highcharts.Series.types\n     * @type {Highcharts.Dictionary<typeof_Highcharts.Series>}\n     */\n    Series.types = Series_SeriesRegistry.seriesTypes;\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * Registers a series class to be accessible via `Series.types`.\n     *\n     * @function Highcharts.Series.registerType\n     *\n     * @param {string} seriesType\n     * The series type as an identifier string in lower case.\n     *\n     * @param {Function} SeriesClass\n     * The series class as a class pattern or a constructor function with\n     * prototype.\n     */\n    Series.registerType = Series_SeriesRegistry.registerSeriesType;\n    return Series;\n}());\nSeries_extend(Series.prototype, {\n    axisTypes: ['xAxis', 'yAxis'],\n    coll: 'series',\n    colorCounter: 0,\n    directTouch: false,\n    invertible: true,\n    isCartesian: true,\n    kdAxisArray: ['clientX', 'plotY'],\n    // Each point's x and y values are stored in this.xData and this.yData:\n    parallelArrays: ['x', 'y'],\n    pointClass: Series_Point,\n    requireSorting: true,\n    // Requires the data to be sorted:\n    sorted: true\n});\n/* *\n *\n *  Registry\n *\n * */\nSeries_SeriesRegistry.series = Series;\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Series_Series = (Series);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * This is a placeholder type of the possible series options for\n * [Highcharts](../highcharts/series), [Highcharts Stock](../highstock/series),\n * [Highmaps](../highmaps/series), and [Gantt](../gantt/series).\n *\n * In TypeScript is this dynamically generated to reference all possible types\n * of series options.\n *\n * @ignore-declaration\n * @typedef {Highcharts.SeriesOptions|Highcharts.Dictionary<*>} Highcharts.SeriesOptionsType\n */\n/**\n * Options for `dataSorting`.\n *\n * @interface Highcharts.DataSortingOptionsObject\n * @since 8.0.0\n */ /**\n* Enable or disable data sorting for the series.\n* @name Highcharts.DataSortingOptionsObject#enabled\n* @type {boolean|undefined}\n*/ /**\n* Whether to allow matching points by name in an update.\n* @name Highcharts.DataSortingOptionsObject#matchByName\n* @type {boolean|undefined}\n*/ /**\n* Determines what data value should be used to sort by.\n* @name Highcharts.DataSortingOptionsObject#sortKey\n* @type {string|undefined}\n*/\n/**\n * Function callback when a series has been animated.\n *\n * @callback Highcharts.SeriesAfterAnimateCallbackFunction\n *\n * @param {Highcharts.Series} this\n *        The series where the event occurred.\n *\n * @param {Highcharts.SeriesAfterAnimateEventObject} event\n *        Event arguments.\n */\n/**\n * Event information regarding completed animation of a series.\n *\n * @interface Highcharts.SeriesAfterAnimateEventObject\n */ /**\n* Animated series.\n* @name Highcharts.SeriesAfterAnimateEventObject#target\n* @type {Highcharts.Series}\n*/ /**\n* Event type.\n* @name Highcharts.SeriesAfterAnimateEventObject#type\n* @type {\"afterAnimate\"}\n*/\n/**\n * Function callback when the checkbox next to the series' name in the legend is\n * clicked.\n *\n * @callback Highcharts.SeriesCheckboxClickCallbackFunction\n *\n * @param {Highcharts.Series} this\n *        The series where the event occurred.\n *\n * @param {Highcharts.SeriesCheckboxClickEventObject} event\n *        Event arguments.\n */\n/**\n * Event information regarding check of a series box.\n *\n * @interface Highcharts.SeriesCheckboxClickEventObject\n */ /**\n* Whether the box has been checked.\n* @name Highcharts.SeriesCheckboxClickEventObject#checked\n* @type {boolean}\n*/ /**\n* Related series.\n* @name Highcharts.SeriesCheckboxClickEventObject#item\n* @type {Highcharts.Series}\n*/ /**\n* Related series.\n* @name Highcharts.SeriesCheckboxClickEventObject#target\n* @type {Highcharts.Series}\n*/ /**\n* Event type.\n* @name Highcharts.SeriesCheckboxClickEventObject#type\n* @type {\"checkboxClick\"}\n*/\n/**\n * Function callback when a series is clicked. Return false to cancel toogle\n * actions.\n *\n * @callback Highcharts.SeriesClickCallbackFunction\n *\n * @param {Highcharts.Series} this\n *        The series where the event occurred.\n *\n * @param {Highcharts.SeriesClickEventObject} event\n *        Event arguments.\n */\n/**\n * Common information for a click event on a series.\n *\n * @interface Highcharts.SeriesClickEventObject\n * @extends global.Event\n */ /**\n* Nearest point on the graph.\n* @name Highcharts.SeriesClickEventObject#point\n* @type {Highcharts.Point}\n*/\n/**\n * Gets fired when the series is hidden after chart generation time, either by\n * clicking the legend item or by calling `.hide()`.\n *\n * @callback Highcharts.SeriesHideCallbackFunction\n *\n * @param {Highcharts.Series} this\n *        The series where the event occurred.\n *\n * @param {global.Event} event\n *        The event that occurred.\n */\n/**\n * The SVG value used for the `stroke-linecap` and `stroke-linejoin` of a line\n * graph.\n *\n * @typedef {\"butt\"|\"round\"|\"square\"|string} Highcharts.SeriesLinecapValue\n */\n/**\n * Gets fired when the legend item belonging to the series is clicked. The\n * default action is to toggle the visibility of the series. This can be\n * prevented by returning `false` or calling `event.preventDefault()`.\n *\n * **Note:** This option is deprecated in favor of\n * Highcharts.LegendItemClickCallbackFunction.\n *\n * @deprecated 11.4.4\n * @callback Highcharts.SeriesLegendItemClickCallbackFunction\n *\n * @param {Highcharts.Series} this\n *        The series where the event occurred.\n *\n * @param {Highcharts.SeriesLegendItemClickEventObject} event\n *        The event that occurred.\n */\n/**\n * Information about the event.\n *\n * **Note:** This option is deprecated in favor of\n * Highcharts.LegendItemClickEventObject.\n *\n * @deprecated 11.4.4\n * @interface Highcharts.SeriesLegendItemClickEventObject\n */ /**\n* Related browser event.\n* @name Highcharts.SeriesLegendItemClickEventObject#browserEvent\n* @type {global.PointerEvent}\n*/ /**\n* Prevent the default action of toggle the visibility of the series.\n* @name Highcharts.SeriesLegendItemClickEventObject#preventDefault\n* @type {Function}\n*/ /**\n* Related series.\n* @name Highcharts.SeriesCheckboxClickEventObject#target\n* @type {Highcharts.Series}\n*/ /**\n* Event type.\n* @name Highcharts.SeriesCheckboxClickEventObject#type\n* @type {\"checkboxClick\"}\n*/\n/**\n * Gets fired when the mouse leaves the graph.\n *\n * @callback Highcharts.SeriesMouseOutCallbackFunction\n *\n * @param {Highcharts.Series} this\n *        Series where the event occurred.\n *\n * @param {global.PointerEvent} event\n *        Event that occurred.\n */\n/**\n * Gets fired when the mouse enters the graph.\n *\n * @callback Highcharts.SeriesMouseOverCallbackFunction\n *\n * @param {Highcharts.Series} this\n *        Series where the event occurred.\n *\n * @param {global.PointerEvent} event\n *        Event that occurred.\n */\n/**\n * Translation and scale for the plot area of a series.\n *\n * @interface Highcharts.SeriesPlotBoxObject\n */ /**\n* @name Highcharts.SeriesPlotBoxObject#scaleX\n* @type {number}\n*/ /**\n* @name Highcharts.SeriesPlotBoxObject#scaleY\n* @type {number}\n*/ /**\n* @name Highcharts.SeriesPlotBoxObject#translateX\n* @type {number}\n*/ /**\n* @name Highcharts.SeriesPlotBoxObject#translateY\n* @type {number}\n*/\n/**\n * Gets fired when the series is shown after chart generation time, either by\n * clicking the legend item or by calling `.show()`.\n *\n * @callback Highcharts.SeriesShowCallbackFunction\n *\n * @param {Highcharts.Series} this\n *        Series where the event occurred.\n *\n * @param {global.Event} event\n *        Event that occurred.\n */\n/**\n * Possible key values for the series state options.\n *\n * @typedef {\"hover\"|\"inactive\"|\"normal\"|\"select\"} Highcharts.SeriesStateValue\n */\n''; // Detach doclets above\n/* *\n *\n *  API Options\n *\n * */\n/**\n * Series options for specific data and the data itself. In TypeScript you\n * have to cast the series options to specific series types, to get all\n * possible options for a series.\n *\n * @example\n * // TypeScript example\n * Highcharts.chart('container', {\n *     series: [{\n *         color: '#06C',\n *         data: [[0, 1], [2, 3]]\n *     } as Highcharts.SeriesLineOptions ]\n * });\n *\n * @type      {Array<*>}\n * @apioption series\n */\n/**\n * An id for the series. This can be used after render time to get a pointer\n * to the series object through `chart.get()`.\n *\n * @sample {highcharts} highcharts/plotoptions/series-id/\n *         Get series by id\n *\n * @type      {string}\n * @since     1.2.0\n * @apioption series.id\n */\n/**\n * The index of the series in the chart, affecting the internal index in the\n * `chart.series` array, the visible Z index as well as the order in the\n * legend.\n *\n * @type      {number}\n * @since     2.3.0\n * @apioption series.index\n */\n/**\n * The sequential index of the series in the legend.\n *\n * @see [legend.reversed](#legend.reversed),\n *      [yAxis.reversedStacks](#yAxis.reversedStacks)\n *\n * @sample {highcharts|highstock} highcharts/series/legendindex/\n *         Legend in opposite order\n *\n * @type      {number}\n * @apioption series.legendIndex\n */\n/**\n * The name of the series as shown in the legend, tooltip etc.\n *\n * @sample {highcharts} highcharts/series/name/\n *         Series name\n * @sample {highmaps} maps/demo/category-map/\n *         Series name\n *\n * @type      {string}\n * @apioption series.name\n */\n/**\n * This option allows grouping series in a stacked chart. The stack option\n * can be a string or anything else, as long as the grouped series' stack\n * options match each other after conversion into a string.\n *\n * @sample {highcharts} highcharts/series/stack/\n *         Stacked and grouped columns\n * @sample {highcharts} highcharts/series/stack-centerincategory/\n *         Stacked and grouped, centered in category\n *\n * @type      {number|string}\n * @since     2.1\n * @product   highcharts highstock\n * @apioption series.stack\n */\n/**\n * The type of series, for example `line` or `column`. By default, the\n * series type is inherited from [chart.type](#chart.type), so unless the\n * chart is a combination of series types, there is no need to set it on the\n * series level.\n *\n * @sample {highcharts} highcharts/series/type/\n *         Line and column in the same chart\n * @sample highcharts/series/type-dynamic/\n *         Dynamic types with button selector\n * @sample {highmaps} maps/demo/mapline-mappoint/\n *         Multiple types in the same map\n *\n * @type      {string}\n * @apioption series.type\n */\n/**\n * When using dual or multiple x axes, this number defines which xAxis the\n * particular series is connected to. It refers to either the\n * {@link #xAxis.id|axis id}\n * or the index of the axis in the xAxis array, with 0 being the first.\n *\n * @type      {number|string}\n * @default   0\n * @product   highcharts highstock\n * @apioption series.xAxis\n */\n/**\n * When using dual or multiple y axes, this number defines which yAxis the\n * particular series is connected to. It refers to either the\n * {@link #yAxis.id|axis id}\n * or the index of the axis in the yAxis array, with 0 being the first.\n *\n * @sample {highcharts} highcharts/series/yaxis/\n *         Apply the column series to the secondary Y axis\n *\n * @type      {number|string}\n * @default   0\n * @product   highcharts highstock\n * @apioption series.yAxis\n */\n/**\n * Define the visual z index of the series.\n *\n * @sample {highcharts} highcharts/plotoptions/series-zindex-default/\n *         With no z index, the series defined last are on top\n * @sample {highcharts} highcharts/plotoptions/series-zindex/\n *         With a z index, the series with the highest z index is on top\n * @sample {highstock} highcharts/plotoptions/series-zindex-default/\n *         With no z index, the series defined last are on top\n * @sample {highstock} highcharts/plotoptions/series-zindex/\n *         With a z index, the series with the highest z index is on top\n *\n * @type      {number}\n * @product   highcharts highstock\n * @apioption series.zIndex\n */\n''; // Include precedent doclets in transpiled\n\n;// ./code/es5/es-modules/Core/Legend/Legend.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar Legend_animObject = AnimationUtilities.animObject, Legend_setAnimation = AnimationUtilities.setAnimation;\n\nvar Legend_registerEventOptions = Core_Foundation.registerEventOptions;\n\nvar Legend_composed = Core_Globals.composed, marginNames = Core_Globals.marginNames;\n\n\n\nvar Legend_distribute = Renderer_RendererUtilities.distribute;\n\nvar Legend_format = Core_Templating.format;\n\nvar Legend_addEvent = Core_Utilities.addEvent, Legend_createElement = Core_Utilities.createElement, Legend_css = Core_Utilities.css, Legend_defined = Core_Utilities.defined, Legend_discardElement = Core_Utilities.discardElement, Legend_find = Core_Utilities.find, Legend_fireEvent = Core_Utilities.fireEvent, Legend_isNumber = Core_Utilities.isNumber, Legend_merge = Core_Utilities.merge, Legend_pick = Core_Utilities.pick, Legend_pushUnique = Core_Utilities.pushUnique, Legend_relativeLength = Core_Utilities.relativeLength, Legend_stableSort = Core_Utilities.stableSort, Legend_syncTimeout = Core_Utilities.syncTimeout;\n/* *\n *\n *  Class\n *\n * */\n/**\n * The overview of the chart's series. The legend object is instantiated\n * internally in the chart constructor, and is available from the `chart.legend`\n * property. Each chart has only one legend.\n *\n * @class\n * @name Highcharts.Legend\n *\n * @param {Highcharts.Chart} chart\n * The chart instance.\n *\n * @param {Highcharts.LegendOptions} options\n * Legend options.\n */\nvar Legend = /** @class */ (function () {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Initialize the legend.\n     *\n     * @private\n     * @function Highcharts.Legend#init\n     *\n     * @param {Highcharts.Chart} chart\n     * The chart instance.\n     *\n     * @param {Highcharts.LegendOptions} options\n     * Legend options.\n     */\n    function Legend(chart, options) {\n        var _this = this;\n        /* *\n         *\n         *  Properties\n         *\n         * */\n        this.allItems = [];\n        this.initialItemY = 0;\n        this.itemHeight = 0;\n        this.itemMarginBottom = 0;\n        this.itemMarginTop = 0;\n        this.itemX = 0;\n        this.itemY = 0;\n        this.lastItemY = 0;\n        this.lastLineHeight = 0;\n        this.legendHeight = 0;\n        this.legendWidth = 0;\n        this.maxItemWidth = 0;\n        this.maxLegendWidth = 0;\n        this.offsetWidth = 0;\n        this.padding = 0;\n        this.pages = [];\n        this.symbolHeight = 0;\n        this.symbolWidth = 0;\n        this.titleHeight = 0;\n        this.totalItemWidth = 0;\n        this.widthOption = 0;\n        /**\n         * Chart of this legend.\n         *\n         * @readonly\n         * @name Highcharts.Legend#chart\n         * @type {Highcharts.Chart}\n         */\n        this.chart = chart;\n        this.setOptions(options);\n        if (options.enabled) {\n            // Render it\n            this.render();\n            Legend_registerEventOptions(this, options);\n            // Move checkboxes\n            Legend_addEvent(this.chart, 'endResize', function () {\n                this.legend.positionCheckboxes();\n            });\n        }\n        // On Legend.init and Legend.update, make sure that proximate layout\n        // events are either added or removed (#18362).\n        Legend_addEvent(this.chart, 'render', function () {\n            if (_this.options.enabled && _this.proximate) {\n                _this.proximatePositions();\n                _this.positionItems();\n            }\n        });\n    }\n    /**\n     * @private\n     * @function Highcharts.Legend#setOptions\n     * @param {Highcharts.LegendOptions} options\n     */\n    Legend.prototype.setOptions = function (options) {\n        var padding = Legend_pick(options.padding, 8);\n        /**\n         * Legend options.\n         *\n         * @readonly\n         * @name Highcharts.Legend#options\n         * @type {Highcharts.LegendOptions}\n         */\n        this.options = options;\n        if (!this.chart.styledMode) {\n            this.itemStyle = options.itemStyle;\n            this.itemHiddenStyle = Legend_merge(this.itemStyle, options.itemHiddenStyle);\n        }\n        this.itemMarginTop = options.itemMarginTop;\n        this.itemMarginBottom = options.itemMarginBottom;\n        this.padding = padding;\n        this.initialItemY = padding - 5; // 5 is pixels above the text\n        this.symbolWidth = Legend_pick(options.symbolWidth, 16);\n        this.pages = [];\n        this.proximate = options.layout === 'proximate' && !this.chart.inverted;\n        // #12705: baseline has to be reset on every update\n        this.baseline = void 0;\n    };\n    /**\n     * Update the legend with new options. Equivalent to running `chart.update`\n     * with a legend configuration option.\n     *\n     * @sample highcharts/legend/legend-update/\n     *         Legend update\n     *\n     * @function Highcharts.Legend#update\n     *\n     * @param {Highcharts.LegendOptions} options\n     * Legend options.\n     *\n     * @param {boolean} [redraw=true]\n     * Whether to redraw the chart after the axis is altered. If doing more\n     * operations on the chart, it is a good idea to set redraw to false and\n     * call {@link Chart#redraw} after. Whether to redraw the chart.\n     *\n     * @emits Highcharts.Legends#event:afterUpdate\n     */\n    Legend.prototype.update = function (options, redraw) {\n        var chart = this.chart;\n        this.setOptions(Legend_merge(true, this.options, options));\n        if ('events' in this.options) {\n            // Legend event handlers\n            Legend_registerEventOptions(this, this.options);\n        }\n        this.destroy();\n        chart.isDirtyLegend = chart.isDirtyBox = true;\n        if (Legend_pick(redraw, true)) {\n            chart.redraw();\n        }\n        Legend_fireEvent(this, 'afterUpdate', { redraw: redraw });\n    };\n    /**\n     * Set the colors for the legend item.\n     *\n     * @private\n     * @function Highcharts.Legend#colorizeItem\n     * @param {Highcharts.BubbleLegendItem|Highcharts.Point|Highcharts.Series} item\n     *        A Series or Point instance\n     * @param {boolean} [visible=false]\n     *        Dimmed or colored\n     *\n     * @todo\n     * Make events official: Fires the event `afterColorizeItem`.\n     */\n    Legend.prototype.colorizeItem = function (item, visible) {\n        var _a;\n        var originalColor = item.color,\n            _b = item.legendItem || {},\n            area = _b.area,\n            group = _b.group,\n            label = _b.label,\n            line = _b.line,\n            symbol = _b.symbol;\n        if (item instanceof Series_Series || item instanceof Series_Point) {\n            item.color = ((_a = item.options) === null || _a === void 0 ? void 0 : _a.legendSymbolColor) || originalColor;\n        }\n        group === null || group === void 0 ? void 0 : group[visible ? 'removeClass' : 'addClass']('highcharts-legend-item-hidden');\n        if (!this.chart.styledMode) {\n            var _c = this.itemHiddenStyle,\n                itemHiddenStyle = _c === void 0 ? {} : _c,\n                hiddenColor_1 = itemHiddenStyle.color,\n                _d = item.options,\n                fillColor = _d.fillColor,\n                fillOpacity = _d.fillOpacity,\n                lineColor = _d.lineColor,\n                marker = _d.marker,\n                colorizeHidden = function (attr) {\n                    if (!visible) {\n                        if (attr.fill) {\n                            attr.fill = hiddenColor_1;\n                    }\n                    if (attr.stroke) {\n                        attr.stroke = hiddenColor_1;\n                    }\n                }\n                return attr;\n            };\n            label === null || label === void 0 ? void 0 : label.css(Legend_merge(visible ? this.itemStyle : itemHiddenStyle));\n            line === null || line === void 0 ? void 0 : line.attr(colorizeHidden({ stroke: lineColor || item.color }));\n            if (symbol) {\n                // Apply marker options\n                symbol.attr(colorizeHidden(marker && symbol.isMarker ? // #585\n                    item.pointAttribs() :\n                    { fill: item.color }));\n            }\n            area === null || area === void 0 ? void 0 : area.attr(colorizeHidden({\n                fill: fillColor || item.color,\n                'fill-opacity': fillColor ? 1 : (fillOpacity !== null && fillOpacity !== void 0 ? fillOpacity : 0.75)\n            }));\n        }\n        item.color = originalColor;\n        Legend_fireEvent(this, 'afterColorizeItem', { item: item, visible: visible });\n    };\n    /**\n     * @private\n     * @function Highcharts.Legend#positionItems\n     */\n    Legend.prototype.positionItems = function () {\n        // Now that the legend width and height are established, put the items\n        // in the final position\n        this.allItems.forEach(this.positionItem, this);\n        if (!this.chart.isResizing) {\n            this.positionCheckboxes();\n        }\n    };\n    /**\n     * Position the legend item.\n     *\n     * @private\n     * @function Highcharts.Legend#positionItem\n     * @param {Highcharts.BubbleLegendItem|Highcharts.Point|Highcharts.Series} item\n     * The item to position\n     */\n    Legend.prototype.positionItem = function (item) {\n        var _this = this;\n        var legend = this,\n            _a = item.legendItem || {},\n            group = _a.group,\n            _b = _a.x,\n            x = _b === void 0 ? 0 : _b,\n            _c = _a.y,\n            y = _c === void 0 ? 0 : _c,\n            options = legend.options,\n            symbolPadding = options.symbolPadding,\n            ltr = !options.rtl,\n            checkbox = item.checkbox;\n        if (group && group.element) {\n            var attribs = {\n                    translateX: ltr ?\n                        x :\n                        legend.legendWidth - x - 2 * symbolPadding - 4,\n                    translateY: y\n                };\n            var complete = function () {\n                    Legend_fireEvent(_this, 'afterPositionItem', { item: item });\n            };\n            group[Legend_defined(group.translateY) ? 'animate' : 'attr'](attribs, void 0, complete);\n        }\n        if (checkbox) {\n            checkbox.x = x;\n            checkbox.y = y;\n        }\n    };\n    /**\n     * Destroy a single legend item, used internally on removing series items.\n     *\n     * @private\n     * @function Highcharts.Legend#destroyItem\n     * @param {Highcharts.BubbleLegendItem|Highcharts.Point|Highcharts.Series} item\n     * The item to remove\n     */\n    Legend.prototype.destroyItem = function (item) {\n        var checkbox = item.checkbox,\n            legendItem = item.legendItem || {};\n        // Destroy SVG elements\n        for (var _i = 0, _a = ['group', 'label', 'line', 'symbol']; _i < _a.length; _i++) {\n            var key = _a[_i];\n            if (legendItem[key]) {\n                legendItem[key] = legendItem[key].destroy();\n            }\n        }\n        if (checkbox) {\n            Legend_discardElement(checkbox);\n        }\n        item.legendItem = void 0;\n    };\n    /**\n     * Destroy the legend. Used internally. To reflow objects, `chart.redraw`\n     * must be called after destruction.\n     *\n     * @private\n     * @function Highcharts.Legend#destroy\n     */\n    Legend.prototype.destroy = function () {\n        var legend = this;\n        // Destroy items\n        for (var _i = 0, _a = this.getAllItems(); _i < _a.length; _i++) {\n            var item = _a[_i];\n            this.destroyItem(item);\n        }\n        // Destroy legend elements\n        for (var _b = 0, _c = [\n            'clipRect',\n            'up',\n            'down',\n            'pager',\n            'nav',\n            'box',\n            'title',\n            'group'\n        ]; _b < _c.length; _b++) {\n            var key = _c[_b];\n            if (legend[key]) {\n                legend[key] = legend[key].destroy();\n            }\n        }\n        this.display = null; // Reset in .render on update.\n    };\n    /**\n     * Position the checkboxes after the width is determined.\n     *\n     * @private\n     * @function Highcharts.Legend#positionCheckboxes\n     */\n    Legend.prototype.positionCheckboxes = function () {\n        var alignAttr = this.group && this.group.alignAttr,\n            clipHeight = this.clipHeight || this.legendHeight,\n            titleHeight = this.titleHeight;\n        var translateY;\n        if (alignAttr) {\n            translateY = alignAttr.translateY;\n            this.allItems.forEach(function (item) {\n                var checkbox = item.checkbox;\n                var top;\n                if (checkbox) {\n                    top = translateY + titleHeight + checkbox.y +\n                        (this.scrollOffset || 0) + 3;\n                    Legend_css(checkbox, {\n                        left: (alignAttr.translateX + item.checkboxOffset +\n                            checkbox.x - 20) + 'px',\n                        top: top + 'px',\n                        display: this.proximate || (top > translateY - 6 &&\n                            top < translateY + clipHeight - 6) ?\n                            '' :\n                            'none'\n                    });\n                }\n            }, this);\n        }\n    };\n    /**\n     * Render the legend title on top of the legend.\n     *\n     * @private\n     * @function Highcharts.Legend#renderTitle\n     */\n    Legend.prototype.renderTitle = function () {\n        var options = this.options,\n            padding = this.padding,\n            titleOptions = options.title;\n        var bBox,\n            titleHeight = 0;\n        if (titleOptions.text) {\n            if (!this.title) {\n                /**\n                 * SVG element of the legend title.\n                 *\n                 * @readonly\n                 * @name Highcharts.Legend#title\n                 * @type {Highcharts.SVGElement}\n                 */\n                this.title = this.chart.renderer.label(titleOptions.text, padding - 3, padding - 4, void 0, void 0, void 0, options.useHTML, void 0, 'legend-title')\n                    .attr({ zIndex: 1 });\n                if (!this.chart.styledMode) {\n                    this.title.css(titleOptions.style);\n                }\n                this.title.add(this.group);\n            }\n            // Set the max title width (#7253)\n            if (!titleOptions.width) {\n                this.title.css({\n                    width: this.maxLegendWidth + 'px'\n                });\n            }\n            bBox = this.title.getBBox();\n            titleHeight = bBox.height;\n            this.offsetWidth = bBox.width; // #1717\n            this.contentGroup.attr({ translateY: titleHeight });\n        }\n        this.titleHeight = titleHeight;\n    };\n    /**\n     * Set the legend item text.\n     *\n     * @function Highcharts.Legend#setText\n     * @param {Highcharts.Point|Highcharts.Series} item\n     *        The item for which to update the text in the legend.\n     */\n    Legend.prototype.setText = function (item) {\n        var options = this.options;\n        item.legendItem.label.attr({\n            text: options.labelFormat ?\n                Legend_format(options.labelFormat, item, this.chart) :\n                options.labelFormatter.call(item)\n        });\n    };\n    /**\n     * Render a single specific legend item. Called internally from the `render`\n     * function.\n     *\n     * @private\n     * @function Highcharts.Legend#renderItem\n     * @param {Highcharts.BubbleLegendItem|Highcharts.Point|Highcharts.Series} item\n     * The item to render.\n     */\n    Legend.prototype.renderItem = function (item) {\n        var legend = this,\n            legendItem = item.legendItem = item.legendItem || {},\n            chart = legend.chart,\n            renderer = chart.renderer,\n            options = legend.options,\n            horizontal = options.layout === 'horizontal',\n            symbolWidth = legend.symbolWidth,\n            symbolPadding = options.symbolPadding || 0,\n            itemStyle = legend.itemStyle,\n            itemHiddenStyle = legend.itemHiddenStyle,\n            itemDistance = horizontal ? Legend_pick(options.itemDistance, 20) : 0,\n            ltr = !options.rtl,\n            isSeries = !item.series,\n            series = !isSeries && item.series.drawLegendSymbol ?\n                item.series :\n                item,\n            seriesOptions = series.options,\n            showCheckbox = (!!legend.createCheckboxForItem &&\n                seriesOptions &&\n                seriesOptions.showCheckbox),\n            useHTML = options.useHTML,\n            itemClassName = item.options.className;\n        var label = legendItem.label, \n            // Full width minus text width\n            itemExtraWidth = symbolWidth + symbolPadding +\n                itemDistance + (showCheckbox ? 20 : 0);\n        if (!label) { // Generate it once, later move it\n            // Generate the group box, a group to hold the symbol and text. Text\n            // is to be appended in Legend class.\n            legendItem.group = renderer\n                .g('legend-item')\n                .addClass('highcharts-' + series.type + '-series ' +\n                'highcharts-color-' + item.colorIndex +\n                (itemClassName ? ' ' + itemClassName : '') +\n                (isSeries ?\n                    ' highcharts-series-' + item.index :\n                    ''))\n                .attr({ zIndex: 1 })\n                .add(legend.scrollGroup);\n            // Generate the list item text and add it to the group\n            legendItem.label = label = renderer.text('', ltr ?\n                symbolWidth + symbolPadding :\n                -symbolPadding, legend.baseline || 0, useHTML);\n            if (!chart.styledMode) {\n                // Merge to prevent modifying original (#1021)\n                label.css(Legend_merge(item.visible ?\n                    itemStyle :\n                    itemHiddenStyle));\n            }\n            label\n                .attr({\n                align: ltr ? 'left' : 'right',\n                zIndex: 2\n            })\n                .add(legendItem.group);\n            // Get the baseline for the first item - the font size is equal for\n            // all\n            if (!legend.baseline) {\n                legend.fontMetrics = renderer.fontMetrics(label);\n                legend.baseline =\n                    legend.fontMetrics.f + 3 + legend.itemMarginTop;\n                label.attr('y', legend.baseline);\n                legend.symbolHeight =\n                    Legend_pick(options.symbolHeight, legend.fontMetrics.f);\n                if (options.squareSymbol) {\n                    legend.symbolWidth = Legend_pick(options.symbolWidth, Math.max(legend.symbolHeight, 16));\n                    itemExtraWidth = legend.symbolWidth + symbolPadding +\n                        itemDistance + (showCheckbox ? 20 : 0);\n                    if (ltr) {\n                        label.attr('x', legend.symbolWidth + symbolPadding);\n                    }\n                }\n            }\n            // Draw the legend symbol inside the group box\n            series.drawLegendSymbol(legend, item);\n            if (legend.setItemEvents) {\n                legend.setItemEvents(item, label, useHTML);\n            }\n        }\n        // Add the HTML checkbox on top\n        if (showCheckbox && !item.checkbox && legend.createCheckboxForItem) {\n            legend.createCheckboxForItem(item);\n        }\n        // Colorize the items\n        legend.colorizeItem(item, item.visible);\n        // Take care of max width and text overflow (#6659)\n        if (chart.styledMode || !itemStyle.width) {\n            label.css({\n                width: ((options.itemWidth ||\n                    legend.widthOption ||\n                    chart.spacingBox.width) - itemExtraWidth) + 'px'\n            });\n        }\n        // Always update the text\n        legend.setText(item);\n        // Calculate the positions for the next line\n        var bBox = label.getBBox();\n        var fontMetricsH = (legend.fontMetrics && legend.fontMetrics.h) || 0;\n        item.itemWidth = item.checkboxOffset =\n            options.itemWidth ||\n                legendItem.labelWidth ||\n                bBox.width + itemExtraWidth;\n        legend.maxItemWidth = Math.max(legend.maxItemWidth, item.itemWidth);\n        legend.totalItemWidth += item.itemWidth;\n        legend.itemHeight = item.itemHeight = Math.round(legendItem.labelHeight ||\n            // Use bBox for multiline (#16398)\n            (bBox.height > fontMetricsH * 1.5 ? bBox.height : fontMetricsH));\n    };\n    /**\n     * Get the position of the item in the layout. We now know the\n     * maxItemWidth from the previous loop.\n     *\n     * @private\n     * @function Highcharts.Legend#layoutItem\n     * @param {Highcharts.BubbleLegendItem|Highcharts.Point|Highcharts.Series} item\n     */\n    Legend.prototype.layoutItem = function (item) {\n        var options = this.options,\n            padding = this.padding,\n            horizontal = options.layout === 'horizontal',\n            itemHeight = item.itemHeight,\n            itemMarginBottom = this.itemMarginBottom,\n            itemMarginTop = this.itemMarginTop,\n            itemDistance = horizontal ? Legend_pick(options.itemDistance, 20) : 0,\n            maxLegendWidth = this.maxLegendWidth,\n            itemWidth = (options.alignColumns &&\n                this.totalItemWidth > maxLegendWidth) ?\n                this.maxItemWidth :\n                item.itemWidth,\n            legendItem = item.legendItem || {};\n        // If the item exceeds the width, start a new line\n        if (horizontal &&\n            this.itemX - padding + itemWidth > maxLegendWidth) {\n            this.itemX = padding;\n            if (this.lastLineHeight) { // Not for the first line (#10167)\n                this.itemY += (itemMarginTop +\n                    this.lastLineHeight +\n                    itemMarginBottom);\n            }\n            this.lastLineHeight = 0; // Reset for next line (#915, #3976)\n        }\n        // Set the edge positions\n        this.lastItemY = itemMarginTop + this.itemY + itemMarginBottom;\n        this.lastLineHeight = Math.max(// #915\n        itemHeight, this.lastLineHeight);\n        // Cache the position of the newly generated or reordered items\n        legendItem.x = this.itemX;\n        legendItem.y = this.itemY;\n        // Advance\n        if (horizontal) {\n            this.itemX += itemWidth;\n        }\n        else {\n            this.itemY +=\n                itemMarginTop + itemHeight + itemMarginBottom;\n            this.lastLineHeight = itemHeight;\n        }\n        // The width of the widest item\n        this.offsetWidth = this.widthOption || Math.max((horizontal ? this.itemX - padding - (item.checkbox ?\n            // Decrease by itemDistance only when no checkbox #4853\n            0 :\n            itemDistance) : itemWidth) + padding, this.offsetWidth);\n    };\n    /**\n     * Get all items, which is one item per series for most series and one\n     * item per point for pie series and its derivatives. Fires the event\n     * `afterGetAllItems`.\n     *\n     * @private\n     * @function Highcharts.Legend#getAllItems\n     * @return {Array<(Highcharts.BubbleLegendItem|Highcharts.Point|Highcharts.Series)>}\n     * The current items in the legend.\n     * @emits Highcharts.Legend#event:afterGetAllItems\n     */\n    Legend.prototype.getAllItems = function () {\n        var allItems = [];\n        this.chart.series.forEach(function (series) {\n            var seriesOptions = series && series.options;\n            // Handle showInLegend. If the series is linked to another series,\n            // defaults to false.\n            if (series && Legend_pick(seriesOptions.showInLegend, !Legend_defined(seriesOptions.linkedTo) ? void 0 : false, true)) {\n                // Use points or series for the legend item depending on\n                // legendType\n                allItems = allItems.concat((series.legendItem || {}).labels ||\n                    (seriesOptions.legendType === 'point' ?\n                        series.data :\n                        series));\n            }\n        });\n        Legend_fireEvent(this, 'afterGetAllItems', { allItems: allItems });\n        return allItems;\n    };\n    /**\n     * Get a short, three letter string reflecting the alignment and layout.\n     *\n     * @private\n     * @function Highcharts.Legend#getAlignment\n     * @return {string}\n     * The alignment, empty string if floating\n     */\n    Legend.prototype.getAlignment = function () {\n        var options = this.options;\n        // Use the first letter of each alignment option in order to detect\n        // the side. (#4189 - use charAt(x) notation instead of [x] for IE7)\n        if (this.proximate) {\n            return options.align.charAt(0) + 'tv';\n        }\n        return options.floating ? '' : (options.align.charAt(0) +\n            options.verticalAlign.charAt(0) +\n            options.layout.charAt(0));\n    };\n    /**\n     * Adjust the chart margins by reserving space for the legend on only one\n     * side of the chart. If the position is set to a corner, top or bottom is\n     * reserved for horizontal legends and left or right for vertical ones.\n     *\n     * @private\n     * @function Highcharts.Legend#adjustMargins\n     * @param {Array<number>} margin\n     * @param {Array<number>} spacing\n     */\n    Legend.prototype.adjustMargins = function (margin, spacing) {\n        var chart = this.chart,\n            options = this.options,\n            alignment = this.getAlignment();\n        if (alignment) {\n            ([\n                /(lth|ct|rth)/,\n                /(rtv|rm|rbv)/,\n                /(rbh|cb|lbh)/,\n                /(lbv|lm|ltv)/\n            ]).forEach(function (alignments, side) {\n                if (alignments.test(alignment) && !Legend_defined(margin[side])) {\n                    // Now we have detected on which side of the chart we should\n                    // reserve space for the legend\n                    chart[marginNames[side]] = Math.max(chart[marginNames[side]], (chart.legend[(side + 1) % 2 ? 'legendHeight' : 'legendWidth'] +\n                        [1, -1, -1, 1][side] * options[(side % 2) ? 'x' : 'y'] +\n                        Legend_pick(options.margin, 12) +\n                        spacing[side] +\n                        (chart.titleOffset[side] || 0)));\n                }\n            });\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.Legend#proximatePositions\n     */\n    Legend.prototype.proximatePositions = function () {\n        var chart = this.chart,\n            boxes = [],\n            alignLeft = this.options.align === 'left';\n        this.allItems.forEach(function (item) {\n            var lastPoint,\n                height,\n                useFirstPoint = alignLeft,\n                target,\n                top;\n            if (item.yAxis) {\n                if (item.xAxis.options.reversed) {\n                    useFirstPoint = !useFirstPoint;\n                }\n                if (item.points) {\n                    lastPoint = Legend_find(useFirstPoint ?\n                        item.points :\n                        item.points.slice(0).reverse(), function (item) {\n                        return Legend_isNumber(item.plotY);\n                    });\n                }\n                height = this.itemMarginTop +\n                    item.legendItem.label.getBBox().height +\n                    this.itemMarginBottom;\n                top = item.yAxis.top - chart.plotTop;\n                if (item.visible) {\n                    target = lastPoint ?\n                        lastPoint.plotY :\n                        item.yAxis.height;\n                    target += top - 0.3 * height;\n                }\n                else {\n                    target = top + item.yAxis.height;\n                }\n                boxes.push({\n                    target: target,\n                    size: height,\n                    item: item\n                });\n            }\n        }, this);\n        var legendItem;\n        for (var _i = 0, _a = Legend_distribute(boxes, chart.plotHeight); _i < _a.length; _i++) {\n            var box = _a[_i];\n            legendItem = box.item.legendItem || {};\n            if (Legend_isNumber(box.pos)) {\n                legendItem.y = chart.plotTop - chart.spacing[0] + box.pos;\n            }\n        }\n    };\n    /**\n     * Render the legend. This method can be called both before and after\n     * `chart.render`. If called after, it will only rearrange items instead\n     * of creating new ones. Called internally on initial render and after\n     * redraws.\n     *\n     * @private\n     * @function Highcharts.Legend#render\n     */\n    Legend.prototype.render = function () {\n        var legend = this,\n            chart = legend.chart,\n            renderer = chart.renderer,\n            options = legend.options,\n            padding = legend.padding, \n            // Add each series or point\n            allItems = legend.getAllItems();\n        var display,\n            legendWidth,\n            legendHeight,\n            legendGroup = legend.group,\n            allowedWidth,\n            box = legend.box;\n        legend.itemX = padding;\n        legend.itemY = legend.initialItemY;\n        legend.offsetWidth = 0;\n        legend.lastItemY = 0;\n        legend.widthOption = Legend_relativeLength(options.width, chart.spacingBox.width - padding);\n        // Compute how wide the legend is allowed to be\n        allowedWidth = chart.spacingBox.width - 2 * padding - options.x;\n        if (['rm', 'lm'].indexOf(legend.getAlignment().substring(0, 2)) > -1) {\n            allowedWidth /= 2;\n        }\n        legend.maxLegendWidth = legend.widthOption || allowedWidth;\n        if (!legendGroup) {\n            /**\n             * SVG group of the legend.\n             *\n             * @readonly\n             * @name Highcharts.Legend#group\n             * @type {Highcharts.SVGElement}\n             */\n            legend.group = legendGroup = renderer\n                .g('legend')\n                .addClass(options.className || '')\n                .attr({ zIndex: 7 })\n                .add();\n            legend.contentGroup = renderer\n                .g()\n                .attr({ zIndex: 1 }) // Above background\n                .add(legendGroup);\n            legend.scrollGroup = renderer\n                .g()\n                .add(legend.contentGroup);\n        }\n        legend.renderTitle();\n        // Sort by legendIndex\n        Legend_stableSort(allItems, function (a, b) {\n            return ((a.options && a.options.legendIndex) || 0) -\n                ((b.options && b.options.legendIndex) || 0);\n        });\n        // Reversed legend\n        if (options.reversed) {\n            allItems.reverse();\n        }\n        /**\n         * All items for the legend, which is an array of series for most series\n         * and an array of points for pie series and its derivatives.\n         *\n         * @readonly\n         * @name Highcharts.Legend#allItems\n         * @type {Array<(Highcharts.Point|Highcharts.Series)>}\n         */\n        legend.allItems = allItems;\n        legend.display = display = !!allItems.length;\n        // Render the items. First we run a loop to set the text and properties\n        // and read all the bounding boxes. The next loop computes the item\n        // positions based on the bounding boxes.\n        legend.lastLineHeight = 0;\n        legend.maxItemWidth = 0;\n        legend.totalItemWidth = 0;\n        legend.itemHeight = 0;\n        allItems.forEach(legend.renderItem, legend);\n        allItems.forEach(legend.layoutItem, legend);\n        // Get the box\n        legendWidth = (legend.widthOption || legend.offsetWidth) + padding;\n        legendHeight = legend.lastItemY + legend.lastLineHeight +\n            legend.titleHeight;\n        legendHeight = legend.handleOverflow(legendHeight);\n        legendHeight += padding;\n        // Draw the border and/or background\n        if (!box) {\n            /**\n             * SVG element of the legend box.\n             *\n             * @readonly\n             * @name Highcharts.Legend#box\n             * @type {Highcharts.SVGElement}\n             */\n            legend.box = box = renderer.rect()\n                .addClass('highcharts-legend-box')\n                .attr({\n                r: options.borderRadius\n            })\n                .add(legendGroup);\n        }\n        // Presentational\n        if (!chart.styledMode) {\n            box\n                .attr({\n                stroke: options.borderColor,\n                'stroke-width': options.borderWidth || 0,\n                fill: options.backgroundColor || 'none'\n            })\n                .shadow(options.shadow);\n        }\n        if (legendWidth > 0 && legendHeight > 0) {\n            box[box.placed ? 'animate' : 'attr'](box.crisp.call({}, {\n                x: 0,\n                y: 0,\n                width: legendWidth,\n                height: legendHeight\n            }, box.strokeWidth()));\n        }\n        // Hide the border if no items\n        legendGroup[display ? 'show' : 'hide']();\n        // Open for responsiveness\n        if (chart.styledMode && legendGroup.getStyle('display') === 'none') {\n            legendWidth = legendHeight = 0;\n        }\n        legend.legendWidth = legendWidth;\n        legend.legendHeight = legendHeight;\n        if (display) {\n            legend.align();\n        }\n        if (!this.proximate) {\n            this.positionItems();\n        }\n        Legend_fireEvent(this, 'afterRender');\n    };\n    /**\n     * Align the legend to chart's box.\n     *\n     * @private\n     * @function Highcharts.align\n     * @param {Highcharts.BBoxObject} alignTo\n     */\n    Legend.prototype.align = function (alignTo) {\n        if (alignTo === void 0) { alignTo = this.chart.spacingBox; }\n        var chart = this.chart,\n            options = this.options;\n        // If aligning to the top and the layout is horizontal, adjust for\n        // the title (#7428)\n        var y = alignTo.y;\n        if (/(lth|ct|rth)/.test(this.getAlignment()) &&\n            chart.titleOffset[0] > 0) {\n            y += chart.titleOffset[0];\n        }\n        else if (/(lbh|cb|rbh)/.test(this.getAlignment()) &&\n            chart.titleOffset[2] > 0) {\n            y -= chart.titleOffset[2];\n        }\n        if (y !== alignTo.y) {\n            alignTo = Legend_merge(alignTo, { y: y });\n        }\n        if (!chart.hasRendered) {\n            // Avoid animation when adjusting alignment for responsiveness and\n            // colorAxis label layout\n            this.group.placed = false;\n        }\n        this.group.align(Legend_merge(options, {\n            width: this.legendWidth,\n            height: this.legendHeight,\n            verticalAlign: this.proximate ? 'top' : options.verticalAlign\n        }), true, alignTo);\n    };\n    /**\n     * Set up the overflow handling by adding navigation with up and down arrows\n     * below the legend.\n     *\n     * @private\n     * @function Highcharts.Legend#handleOverflow\n     */\n    Legend.prototype.handleOverflow = function (legendHeight) {\n        var legend = this,\n            chart = this.chart,\n            renderer = chart.renderer,\n            options = this.options,\n            optionsY = options.y,\n            alignTop = options.verticalAlign === 'top',\n            padding = this.padding,\n            maxHeight = options.maxHeight,\n            navOptions = options.navigation,\n            animation = Legend_pick(navOptions.animation,\n            true),\n            arrowSize = navOptions.arrowSize || 12,\n            pages = this.pages,\n            allItems = this.allItems,\n            clipToHeight = function (height) {\n                if (typeof height === 'number') {\n                    clipRect.attr({\n                        height: height\n                    });\n            }\n            else if (clipRect) { // Reset (#5912)\n                legend.clipRect = clipRect.destroy();\n                legend.contentGroup.clip();\n            }\n            // Use HTML\n            if (legend.contentGroup.div) {\n                legend.contentGroup.div.style.clip = height ?\n                    'rect(' + padding + 'px,9999px,' +\n                        (padding + height) + 'px,0)' :\n                    'auto';\n            }\n        }, addTracker = function (key) {\n            legend[key] = renderer\n                .circle(0, 0, arrowSize * 1.3)\n                .translate(arrowSize / 2, arrowSize / 2)\n                .add(nav);\n            if (!chart.styledMode) {\n                legend[key].attr('fill', 'rgba(0,0,0,0.0001)');\n            }\n            return legend[key];\n        };\n        var clipHeight,\n            lastY,\n            legendItem,\n            spaceHeight = (chart.spacingBox.height +\n                (alignTop ? -optionsY : optionsY) - padding),\n            nav = this.nav,\n            clipRect = this.clipRect;\n        // Adjust the height\n        if (options.layout === 'horizontal' &&\n            options.verticalAlign !== 'middle' &&\n            !options.floating) {\n            spaceHeight /= 2;\n        }\n        if (maxHeight) {\n            spaceHeight = Math.min(spaceHeight, maxHeight);\n        }\n        // Reset the legend height and adjust the clipping rectangle\n        pages.length = 0;\n        if (legendHeight &&\n            spaceHeight > 0 &&\n            legendHeight > spaceHeight &&\n            navOptions.enabled !== false) {\n            this.clipHeight = clipHeight =\n                Math.max(spaceHeight - 20 - this.titleHeight - padding, 0);\n            this.currentPage = Legend_pick(this.currentPage, 1);\n            this.fullHeight = legendHeight;\n            // Fill pages with Y positions so that the top of each a legend item\n            // defines the scroll top for each page (#2098)\n            allItems.forEach(function (item, i) {\n                legendItem = item.legendItem || {};\n                var y = legendItem.y || 0,\n                    h = Math.round(legendItem.label.getBBox().height);\n                var len = pages.length;\n                if (!len || (y - pages[len - 1] > clipHeight &&\n                    (lastY || y) !== pages[len - 1])) {\n                    pages.push(lastY || y);\n                    len++;\n                }\n                // Keep track of which page each item is on\n                legendItem.pageIx = len - 1;\n                if (lastY) {\n                    (allItems[i - 1].legendItem || {}).pageIx = len - 1;\n                }\n                // Add the last page if needed (#2617, #13683)\n                if (\n                // Check the last item\n                i === allItems.length - 1 &&\n                    // If adding next page is needed (#18768)\n                    y + h - pages[len - 1] > clipHeight &&\n                    y > pages[len - 1]) {\n                    pages.push(y);\n                    legendItem.pageIx = len;\n                }\n                if (y !== lastY) {\n                    lastY = y;\n                }\n            });\n            // Only apply clipping if needed. Clipping causes blurred legend in\n            // PDF export (#1787)\n            if (!clipRect) {\n                clipRect = legend.clipRect =\n                    renderer.clipRect(0, padding - 2, 9999, 0);\n                legend.contentGroup.clip(clipRect);\n            }\n            clipToHeight(clipHeight);\n            // Add navigation elements\n            if (!nav) {\n                this.nav = nav = renderer.g()\n                    .attr({ zIndex: 1 })\n                    .add(this.group);\n                this.up = renderer\n                    .symbol('triangle', 0, 0, arrowSize, arrowSize)\n                    .add(nav);\n                addTracker('upTracker')\n                    .on('click', function () {\n                    legend.scroll(-1, animation);\n                });\n                this.pager = renderer.text('', 15, 10)\n                    .addClass('highcharts-legend-navigation');\n                if (!chart.styledMode && navOptions.style) {\n                    this.pager.css(navOptions.style);\n                }\n                this.pager.add(nav);\n                this.down = renderer\n                    .symbol('triangle-down', 0, 0, arrowSize, arrowSize)\n                    .add(nav);\n                addTracker('downTracker')\n                    .on('click', function () {\n                    legend.scroll(1, animation);\n                });\n            }\n            // Set initial position\n            legend.scroll(0);\n            legendHeight = spaceHeight;\n            // Reset\n        }\n        else if (nav) {\n            clipToHeight();\n            this.nav = nav.destroy(); // #6322\n            this.scrollGroup.attr({\n                translateY: 1\n            });\n            this.clipHeight = 0; // #1379\n        }\n        return legendHeight;\n    };\n    /**\n     * Scroll the legend by a number of pages.\n     *\n     * @private\n     * @function Highcharts.Legend#scroll\n     *\n     * @param {number} scrollBy\n     *        The number of pages to scroll.\n     *\n     * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n     *        Whether and how to apply animation.\n     *\n     */\n    Legend.prototype.scroll = function (scrollBy, animation) {\n        var _this = this;\n        var chart = this.chart,\n            pages = this.pages,\n            pageCount = pages.length,\n            clipHeight = this.clipHeight,\n            navOptions = this.options.navigation,\n            pager = this.pager,\n            padding = this.padding;\n        var currentPage = this.currentPage + scrollBy;\n        // When resizing while looking at the last page\n        if (currentPage > pageCount) {\n            currentPage = pageCount;\n        }\n        if (currentPage > 0) {\n            if (typeof animation !== 'undefined') {\n                Legend_setAnimation(animation, chart);\n            }\n            this.nav.attr({\n                translateX: padding,\n                translateY: clipHeight + this.padding + 7 + this.titleHeight,\n                visibility: 'inherit'\n            });\n            [this.up, this.upTracker].forEach(function (elem) {\n                elem.attr({\n                    'class': currentPage === 1 ?\n                        'highcharts-legend-nav-inactive' :\n                        'highcharts-legend-nav-active'\n                });\n            });\n            pager.attr({\n                text: currentPage + '/' + pageCount\n            });\n            [this.down, this.downTracker].forEach(function (elem) {\n                elem.attr({\n                    // Adjust to text width\n                    x: 18 + this.pager.getBBox().width,\n                    'class': currentPage === pageCount ?\n                        'highcharts-legend-nav-inactive' :\n                        'highcharts-legend-nav-active'\n                });\n            }, this);\n            if (!chart.styledMode) {\n                this.up\n                    .attr({\n                    fill: currentPage === 1 ?\n                        navOptions.inactiveColor :\n                        navOptions.activeColor\n                });\n                this.upTracker\n                    .css({\n                    cursor: currentPage === 1 ? 'default' : 'pointer'\n                });\n                this.down\n                    .attr({\n                    fill: currentPage === pageCount ?\n                        navOptions.inactiveColor :\n                        navOptions.activeColor\n                });\n                this.downTracker\n                    .css({\n                    cursor: currentPage === pageCount ?\n                        'default' :\n                        'pointer'\n                });\n            }\n            this.scrollOffset = -pages[currentPage - 1] + this.initialItemY;\n            this.scrollGroup.animate({\n                translateY: this.scrollOffset\n            });\n            this.currentPage = currentPage;\n            this.positionCheckboxes();\n            // Fire event after scroll animation is complete\n            var animOptions = Legend_animObject(Legend_pick(animation,\n                chart.renderer.globalAnimation,\n                true));\n            Legend_syncTimeout(function () {\n                Legend_fireEvent(_this, 'afterScroll', { currentPage: currentPage });\n            }, animOptions.duration);\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.Legend#setItemEvents\n     * @param {Highcharts.BubbleLegendItem|Point|Highcharts.Series} item\n     * @param {Highcharts.SVGElement} legendLabel\n     * @param {boolean} [useHTML=false]\n     * @emits Highcharts.Legend#event:itemClick\n     */\n    Legend.prototype.setItemEvents = function (item, legendLabel, useHTML) {\n        var legend = this,\n            legendItem = item.legendItem || {},\n            boxWrapper = legend.chart.renderer.boxWrapper,\n            isPoint = item instanceof Series_Point,\n            isSeries = item instanceof Series_Series,\n            activeClass = 'highcharts-legend-' +\n                (isPoint ? 'point' : 'series') + '-active',\n            styledMode = legend.chart.styledMode, \n            // When `useHTML`, the symbol is rendered in other group, so\n            // we need to apply events listeners to both places\n            legendElements = useHTML ?\n                [legendLabel,\n            legendItem.symbol] :\n                [legendItem.group];\n        var setOtherItemsState = function (state) {\n                legend.allItems.forEach(function (otherItem) {\n                    if (item !== otherItem) {\n                        [otherItem]\n                            .concat(otherItem.linkedSeries || [])\n                            .forEach(function (otherItem) {\n                            otherItem.setState(state, !isPoint);\n                    });\n                }\n            });\n        };\n        // Set the events on the item group, or in case of useHTML, the item\n        // itself (#1249)\n        for (var _i = 0, legendElements_1 = legendElements; _i < legendElements_1.length; _i++) {\n            var element = legendElements_1[_i];\n            if (element) {\n                element\n                    .on('mouseover', function () {\n                    if (item.visible) {\n                        setOtherItemsState('inactive');\n                    }\n                    item.setState('hover');\n                    // A CSS class to dim or hide other than the hovered\n                    // series.\n                    // Works only if hovered series is visible (#10071).\n                    if (item.visible) {\n                        boxWrapper.addClass(activeClass);\n                    }\n                    if (!styledMode) {\n                        legendLabel.css(legend.options.itemHoverStyle);\n                    }\n                })\n                    .on('mouseout', function () {\n                    if (!legend.chart.styledMode) {\n                        legendLabel.css(Legend_merge(item.visible ?\n                            legend.itemStyle :\n                            legend.itemHiddenStyle));\n                    }\n                    setOtherItemsState('');\n                    // A CSS class to dim or hide other than the hovered\n                    // series.\n                    boxWrapper.removeClass(activeClass);\n                    item.setState();\n                })\n                    .on('click', function (event) {\n                    var defaultItemClick = function () {\n                            if (item.setVisible) {\n                                item.setVisible();\n                        }\n                        // Reset inactive state\n                        setOtherItemsState(item.visible ? 'inactive' : '');\n                    };\n                    // A CSS class to dim or hide other than the hovered\n                    // series. Event handling in iOS causes the activeClass\n                    // to be added prior to click in some cases (#7418).\n                    boxWrapper.removeClass(activeClass);\n                    Legend_fireEvent(legend, 'itemClick', {\n                        // Pass over the click/touch event. #4.\n                        browserEvent: event,\n                        legendItem: item\n                    }, defaultItemClick);\n                    // Deprecated logic\n                    // Click the name or symbol\n                    if (isPoint) {\n                        item.firePointEvent('legendItemClick', {\n                            browserEvent: event\n                        });\n                    }\n                    else if (isSeries) {\n                        Legend_fireEvent(item, 'legendItemClick', {\n                            browserEvent: event\n                        });\n                    }\n                });\n            }\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.Legend#createCheckboxForItem\n     * @param {Highcharts.BubbleLegendItem|Point|Highcharts.Series} item\n     * @emits Highcharts.Series#event:checkboxClick\n     */\n    Legend.prototype.createCheckboxForItem = function (item) {\n        var legend = this;\n        item.checkbox = Legend_createElement('input', {\n            type: 'checkbox',\n            className: 'highcharts-legend-checkbox',\n            checked: item.selected,\n            defaultChecked: item.selected // Required by IE7\n        }, legend.options.itemCheckboxStyle, legend.chart.container);\n        Legend_addEvent(item.checkbox, 'click', function (event) {\n            var target = event.target;\n            Legend_fireEvent(item.series || item, 'checkboxClick', {\n                checked: target.checked,\n                item: item\n            }, function () {\n                item.select();\n            });\n        });\n    };\n    return Legend;\n}());\n/* *\n *\n *  Class Namespace\n *\n * */\n(function (Legend) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    function compose(ChartClass) {\n        if (Legend_pushUnique(Legend_composed, 'Core.Legend')) {\n            Legend_addEvent(ChartClass, 'beforeMargins', function () {\n                /**\n                 * The legend contains an interactive overview over chart items,\n                 * usually individual series or points depending on the series\n                 * type. The color axis and bubble legend are also rendered in\n                 * the chart legend.\n                 *\n                 * @name Highcharts.Chart#legend\n                 * @type {Highcharts.Legend}\n                 */\n                this.legend = new Legend(this, this.options.legend);\n            });\n        }\n    }\n    Legend.compose = compose;\n})(Legend || (Legend = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Legend_Legend = (Legend);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * @interface Highcharts.LegendItemObject\n */ /**\n* @name Highcharts.LegendItemObject#item\n* @type {Highcharts.SVGElement|undefined}\n*/ /**\n* @name Highcharts.LegendItemObject#line\n* @type {Highcharts.SVGElement|undefined}\n*/ /**\n* @name Highcharts.LegendItemObject#symbol\n* @type {Highcharts.SVGElement|undefined}\n*/\n/**\n * Gets fired when the legend item is clicked. The default\n * action is to toggle the visibility of the series or point. This can be\n * prevented by returning `false` or calling `event.preventDefault()`.\n *\n * @callback Highcharts.LegendItemClickCallbackFunction\n *\n * @param {Highcharts.Legend} this\n *        The legend on which the event occurred.\n *\n * @param {Highcharts.LegendItemClickEventObject} event\n *        The event that occurred.\n */\n/**\n * Information about the legend click event.\n *\n * @interface Highcharts.LegendItemClickEventObject\n */ /**\n* Related browser event.\n* @name Highcharts.LegendItemClickEventObject#browserEvent\n* @type {Highcharts.PointerEvent}\n*/ /**\n* Prevent the default action of toggle the visibility of the series or point.\n* @name Highcharts.LegendItemClickEventObject#preventDefault\n* @type {Function}\n* */ /**\n* Related legend item, it can be series, point, color axis or data class from\n* color axis.\n* @name Highcharts.LegendItemClickEventObject#legendItem\n* @type {Highcharts.Series|Highcharts.Point|Highcharts.LegendItemObject}\n* */ /**\n* Related legend.\n* @name Highcharts.LegendItemClickEventObject#target\n* @type {Highcharts.Legend}\n*/ /**\n* Event type.\n* @name Highcharts.LegendItemClickEventObject#type\n* @type {\"itemClick\"}\n*/\n/**\n * Gets fired when the legend item belonging to a point is clicked. The default\n * action is to toggle the visibility of the point. This can be prevented by\n * returning `false` or calling `event.preventDefault()`.\n *\n * **Note:** This option is deprecated in favor of\n * Highcharts.LegendItemClickCallbackFunction.\n *\n * @deprecated 11.4.4\n * @callback Highcharts.PointLegendItemClickCallbackFunction\n *\n * @param {Highcharts.Point} this\n *        The point on which the event occurred.\n *\n * @param {Highcharts.PointLegendItemClickEventObject} event\n *        The event that occurred.\n */\n/**\n * Information about the legend click event.\n *\n * **Note:** This option is deprecated in favor of\n * Highcharts.LegendItemClickEventObject.\n *\n * @deprecated 11.4.4\n * @interface Highcharts.PointLegendItemClickEventObject\n */ /**\n* Related browser event.\n* @name Highcharts.PointLegendItemClickEventObject#browserEvent\n* @type {Highcharts.PointerEvent}\n*/ /**\n* Prevent the default action of toggle the visibility of the point.\n* @name Highcharts.PointLegendItemClickEventObject#preventDefault\n* @type {Function}\n*/ /**\n* Related point.\n* @name Highcharts.PointLegendItemClickEventObject#target\n* @type {Highcharts.Point}\n*/ /**\n* Event type.\n* @name Highcharts.PointLegendItemClickEventObject#type\n* @type {\"legendItemClick\"}\n*/\n/**\n * Series color as used by the legend and some series types.\n * @name Highcharts.Series#color\n * @type {Highcharts.ColorType|undefined}\n */ /**\n* Legend data for the series.\n* @name Highcharts.Series#legendItem\n* @type {Highcharts.LegendItemObject|undefined}\n* @since 10.3.0\n*/\n/**\n * Gets fired when the legend item belonging to a series is clicked. The default\n * action is to toggle the visibility of the series. This can be prevented by\n * returning `false` or calling `event.preventDefault()`.\n *\n * **Note:** This option is deprecated in favor of\n * Highcharts.LegendItemClickCallbackFunction.\n *\n * @deprecated 11.4.4\n * @callback Highcharts.SeriesLegendItemClickCallbackFunction\n *\n * @param {Highcharts.Series} this\n *        The series where the event occurred.\n *\n * @param {Highcharts.SeriesLegendItemClickEventObject} event\n *        The event that occurred.\n */\n/**\n * Information about the legend click event.\n *\n * **Note:** This option is deprecated in favor of\n * Highcharts.LegendItemClickEventObject.\n *\n * @deprecated 11.4.4\n * @interface Highcharts.SeriesLegendItemClickEventObject\n */ /**\n* Related browser event.\n* @name Highcharts.SeriesLegendItemClickEventObject#browserEvent\n* @type {Highcharts.PointerEvent}\n*/ /**\n* Prevent the default action of toggle the visibility of the series.\n* @name Highcharts.SeriesLegendItemClickEventObject#preventDefault\n* @type {Function}\n*/ /**\n* Related series.\n* @name Highcharts.SeriesLegendItemClickEventObject#target\n* @type {Highcharts.Series}\n*/ /**\n* Event type.\n* @name Highcharts.SeriesLegendItemClickEventObject#type\n* @type {\"legendItemClick\"}\n*/\n(''); // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Chart/Chart.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar Chart_assign = (undefined && undefined.__assign) || function () {\n    Chart_assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return Chart_assign.apply(this, arguments);\n};\nvar Chart_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\n\nvar Chart_animate = AnimationUtilities.animate, Chart_animObject = AnimationUtilities.animObject, Chart_setAnimation = AnimationUtilities.setAnimation;\n\n\nvar Chart_defaultOptions = Defaults.defaultOptions;\n\nvar Chart_numberFormat = Core_Templating.numberFormat;\n\nvar Chart_registerEventOptions = Core_Foundation.registerEventOptions;\n\nvar Chart_charts = Core_Globals.charts, Chart_doc = Core_Globals.doc, Chart_marginNames = Core_Globals.marginNames, Chart_svg = Core_Globals.svg, Chart_win = Core_Globals.win;\n\n\n\nvar Chart_seriesTypes = Series_SeriesRegistry.seriesTypes;\n\n\n\n\n\nvar Chart_addEvent = Core_Utilities.addEvent, Chart_attr = Core_Utilities.attr, Chart_createElement = Core_Utilities.createElement, Chart_css = Core_Utilities.css, Chart_defined = Core_Utilities.defined, Chart_diffObjects = Core_Utilities.diffObjects, Chart_discardElement = Core_Utilities.discardElement, Chart_erase = Core_Utilities.erase, Chart_error = Core_Utilities.error, Chart_extend = Core_Utilities.extend, Chart_find = Core_Utilities.find, Chart_fireEvent = Core_Utilities.fireEvent, Chart_getAlignFactor = Core_Utilities.getAlignFactor, Chart_getStyle = Core_Utilities.getStyle, Chart_isArray = Core_Utilities.isArray, Chart_isNumber = Core_Utilities.isNumber, Chart_isObject = Core_Utilities.isObject, Chart_isString = Core_Utilities.isString, Chart_merge = Core_Utilities.merge, Chart_objectEach = Core_Utilities.objectEach, Chart_pick = Core_Utilities.pick, Chart_pInt = Core_Utilities.pInt, Chart_relativeLength = Core_Utilities.relativeLength, Chart_removeEvent = Core_Utilities.removeEvent, Chart_splat = Core_Utilities.splat, Chart_syncTimeout = Core_Utilities.syncTimeout, Chart_uniqueKey = Core_Utilities.uniqueKey;\n/* *\n *\n *  Class\n *\n * */\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/**\n * The Chart class. The recommended constructor is {@link Highcharts#chart}.\n *\n * @example\n * let chart = Highcharts.chart('container', {\n *        title: {\n *               text: 'My chart'\n *        },\n *        series: [{\n *            data: [1, 3, 2, 4]\n *        }]\n * })\n *\n * @class\n * @name Highcharts.Chart\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 images\n *        are loaded. Defining a\n *        [chart.events.load](https://api.highcharts.com/highcharts/chart.events.load)\n *        handler is equivalent.\n */\nvar Chart = /** @class */ (function () {\n    // Implementation\n    function Chart(a, \n    /* eslint-disable @typescript-eslint/no-unused-vars */\n    b, c\n    /* eslint-enable @typescript-eslint/no-unused-vars */\n    ) {\n        this.sharedClips = {};\n        var args = Chart_spreadArray([],\n            arguments,\n            true);\n        // Remove the optional first argument, renderTo, and set it on this.\n        if (Chart_isString(a) || a.nodeName) {\n            this.renderTo = args.shift();\n        }\n        this.init(args[0], args[1]);\n    }\n    /**\n     * Factory function for basic charts.\n     *\n     * @example\n     * // Render a chart in to div#container\n     * let chart = Highcharts.chart('container', {\n     *     title: {\n     *         text: 'My chart'\n     *     },\n     *     series: [{\n     *         data: [1, 3, 2, 4]\n     *     }]\n     * });\n     *\n     * @function Highcharts.chart\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 images are\n     * loaded. Defining a\n     * [chart.events.load](https://api.highcharts.com/highcharts/chart.events.load)\n     * handler is equivalent.\n     *\n     * @return {Highcharts.Chart}\n     * Returns the Chart object.\n     */\n    Chart.chart = function (a, b, c) {\n        return new Chart(a, b, c);\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Function setting zoom options after chart init and after chart update.\n     * Offers support for deprecated options.\n     *\n     * @private\n     * @function Highcharts.Chart#setZoomOptions\n     */\n    Chart.prototype.setZoomOptions = function () {\n        var chart = this,\n            options = chart.options.chart,\n            zooming = options.zooming;\n        chart.zooming = Chart_assign(Chart_assign({}, zooming), { type: Chart_pick(options.zoomType, zooming.type), key: Chart_pick(options.zoomKey, zooming.key), pinchType: Chart_pick(options.pinchType, zooming.pinchType), singleTouch: Chart_pick(options.zoomBySingleTouch, zooming.singleTouch, false), resetButton: Chart_merge(zooming.resetButton, options.resetZoomButton) });\n    };\n    /**\n     * Overridable function that initializes the chart. The constructor's\n     * arguments are passed on directly.\n     *\n     * @function Highcharts.Chart#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.Chart#event:init\n     * @emits Highcharts.Chart#event:afterInit\n     */\n    Chart.prototype.init = function (userOptions, callback) {\n        // Fire the event with a default function\n        Chart_fireEvent(this, 'init', { args: arguments }, function () {\n            var _a,\n                _b;\n            var options = Chart_merge(Chart_defaultOptions,\n                userOptions), // Do the merge\n                optionsChart = options.chart,\n                renderTo = this.renderTo || optionsChart.renderTo;\n            /**\n             * The original options given to the constructor or a chart factory\n             * like {@link Highcharts.chart} and {@link Highcharts.stockChart}.\n             * The original options are shallow copied to avoid mutation. The\n             * copy, `chart.userOptions`, may later be mutated to reflect\n             * updated options throughout the lifetime of the chart.\n             *\n             * For collections, like `series`, `xAxis` and `yAxis`, the chart\n             * user options should always be reflected by the item user option,\n             * so for example the following should always be true:\n             *\n             * `chart.xAxis[0].userOptions === chart.userOptions.xAxis[0]`\n             *\n             * @name Highcharts.Chart#userOptions\n             * @type {Highcharts.Options}\n             */\n            this.userOptions = Chart_extend({}, userOptions);\n            if (!(this.renderTo = (Chart_isString(renderTo) ?\n                Chart_doc.getElementById(renderTo) :\n                renderTo))) {\n                // Display an error if the renderTo is wrong\n                Chart_error(13, true, this);\n            }\n            this.margin = [];\n            this.spacing = [];\n            // An array of functions that returns labels that should be\n            // considered for anti-collision\n            this.labelCollectors = [];\n            this.callback = callback;\n            this.isResizing = 0;\n            /**\n             * The options structure for the chart after merging\n             * {@link #defaultOptions} and {@link #userOptions}. It contains\n             * members for the sub elements like series, legend, tooltip etc.\n             *\n             * @name Highcharts.Chart#options\n             * @type {Highcharts.Options}\n             */\n            this.options = options;\n            /**\n             * All the axes in the chart.\n             *\n             * @see  Highcharts.Chart.xAxis\n             * @see  Highcharts.Chart.yAxis\n             *\n             * @name Highcharts.Chart#axes\n             * @type {Array<Highcharts.Axis>}\n             */\n            this.axes = [];\n            /**\n             * All the current series in the chart.\n             *\n             * @name Highcharts.Chart#series\n             * @type {Array<Highcharts.Series>}\n             */\n            this.series = [];\n            this.locale = (_a = options.lang.locale) !== null && _a !== void 0 ? _a : (_b = this.renderTo.closest('[lang]')) === null || _b === void 0 ? void 0 : _b.lang;\n            /**\n             * The `Time` object associated with the chart. Since v6.0.5,\n             * time settings can be applied individually for each chart. If\n             * no individual settings apply, the `Time` object is shared by\n             * all instances.\n             *\n             * @name Highcharts.Chart#time\n             * @type {Highcharts.Time}\n             */\n            this.time = new Core_Time(Chart_extend(options.time || {}, {\n                locale: this.locale\n            }));\n            options.time = this.time.options;\n            /**\n             * Callback function to override the default function that formats\n             * all the numbers in the chart. Returns a string with the formatted\n             * number.\n             *\n             * @name Highcharts.Chart#numberFormatter\n             * @type {Highcharts.NumberFormatterCallbackFunction}\n             */\n            this.numberFormatter = (optionsChart.numberFormatter || Chart_numberFormat).bind(this);\n            /**\n             * Whether the chart is in styled mode, meaning all presentational\n             * attributes are avoided.\n             *\n             * @name Highcharts.Chart#styledMode\n             * @type {boolean}\n             */\n            this.styledMode = optionsChart.styledMode;\n            this.hasCartesianSeries = optionsChart.showAxes;\n            var chart = this;\n            /**\n             * Index position of the chart in the {@link Highcharts#charts}\n             * property.\n             *\n             * @name Highcharts.Chart#index\n             * @type {number}\n             * @readonly\n             */\n            chart.index = Chart_charts.length; // Add the chart to the global lookup\n            Chart_charts.push(chart);\n            Core_Globals.chartCount++;\n            // Chart event handlers\n            Chart_registerEventOptions(this, optionsChart);\n            /**\n             * A collection of the X axes in the chart.\n             *\n             * @name Highcharts.Chart#xAxis\n             * @type {Array<Highcharts.Axis>}\n             */\n            chart.xAxis = [];\n            /**\n             * A collection of the Y axes in the chart.\n             *\n             * @name Highcharts.Chart#yAxis\n             * @type {Array<Highcharts.Axis>}\n             *\n             * @todo\n             * Make events official: Fire the event `afterInit`.\n             */\n            chart.yAxis = [];\n            chart.pointCount = chart.colorCounter = chart.symbolCounter = 0;\n            this.setZoomOptions();\n            // Fire after init but before first render, before axes and series\n            // have been initialized.\n            Chart_fireEvent(chart, 'afterInit');\n            chart.firstRender();\n        });\n    };\n    /**\n     * Internal function to unitialize an individual series.\n     *\n     * @private\n     * @function Highcharts.Chart#initSeries\n     */\n    Chart.prototype.initSeries = function (options) {\n        var chart = this,\n            optionsChart = chart.options.chart,\n            type = (options.type ||\n                optionsChart.type),\n            SeriesClass = Chart_seriesTypes[type];\n        // No such series type\n        if (!SeriesClass) {\n            Chart_error(17, true, chart, { missingModuleFor: type });\n        }\n        var series = new SeriesClass();\n        if (typeof series.init === 'function') {\n            series.init(chart, options);\n        }\n        return series;\n    };\n    /**\n     * Internal function to set data for all series with enabled sorting.\n     *\n     * @private\n     * @function Highcharts.Chart#setSortedData\n     */\n    Chart.prototype.setSortedData = function () {\n        this.getSeriesOrderByLinks().forEach(function (series) {\n            // We need to set data for series with sorting after series init\n            if (!series.points && !series.data && series.enabledDataSorting) {\n                series.setData(series.options.data, false);\n            }\n        });\n    };\n    /**\n     * Sort and return chart series in order depending on the number of linked\n     * series.\n     *\n     * @private\n     * @function Highcharts.Series#getSeriesOrderByLinks\n     */\n    Chart.prototype.getSeriesOrderByLinks = function () {\n        return this.series.concat().sort(function (a, b) {\n            if (a.linkedSeries.length || b.linkedSeries.length) {\n                return b.linkedSeries.length - a.linkedSeries.length;\n            }\n            return 0;\n        });\n    };\n    /**\n     * Order all series or axes above a given index. When series or axes are\n     * added and ordered by configuration, only the last series is handled\n     * (#248, #1123, #2456, #6112). This function is called on series and axis\n     * initialization and destroy.\n     *\n     * @private\n     * @function Highcharts.Chart#orderItems\n     * @param {string} coll The collection name\n     * @param {number} [fromIndex=0]\n     * If this is given, only the series above this index are handled.\n     */\n    Chart.prototype.orderItems = function (coll, fromIndex) {\n        if (fromIndex === void 0) { fromIndex = 0; }\n        var collection = this[coll], \n            // Item options should be reflected in chart.options.series,\n            // chart.options.yAxis etc\n            optionsArray = this.options[coll] = Chart_splat(this.options[coll])\n                .slice(),\n            userOptionsArray = this.userOptions[coll] = this.userOptions[coll] ?\n                Chart_splat(this.userOptions[coll]).slice() :\n                [];\n        if (this.hasRendered) {\n            // Remove all above index\n            optionsArray.splice(fromIndex);\n            userOptionsArray.splice(fromIndex);\n        }\n        if (collection) {\n            for (var i = fromIndex, iEnd = collection.length; i < iEnd; ++i) {\n                var item = collection[i];\n                if (item) {\n                    /**\n                     * Contains the series' index in the `Chart.series` array.\n                     *\n                     * @name Highcharts.Series#index\n                     * @type {number}\n                     * @readonly\n                     */\n                    item.index = i;\n                    if (item instanceof Series_Series) {\n                        item.name = item.getName();\n                    }\n                    if (!item.options.isInternal) {\n                        optionsArray[i] = item.options;\n                        userOptionsArray[i] = item.userOptions;\n                    }\n                }\n            }\n        }\n    };\n    /**\n     * Check whether a given point is within the plot area.\n     *\n     * @function Highcharts.Chart#isInsidePlot\n     *\n     * @param {number} plotX\n     * Pixel x relative to the plot area.\n     *\n     * @param {number} plotY\n     * Pixel y relative to the plot area.\n     *\n     * @param {Highcharts.ChartIsInsideOptionsObject} [options]\n     * Options object.\n     *\n     * @return {boolean}\n     * Returns true if the given point is inside the plot area.\n     */\n    Chart.prototype.isInsidePlot = function (plotX, plotY, options) {\n        var _a;\n        if (options === void 0) { options = {}; }\n        var _b = this,\n            inverted = _b.inverted,\n            plotBox = _b.plotBox,\n            plotLeft = _b.plotLeft,\n            plotTop = _b.plotTop,\n            scrollablePlotBox = _b.scrollablePlotBox,\n            _c = (options.visiblePlotOnly &&\n                ((_a = this.scrollablePlotArea) === null || _a === void 0 ? void 0 : _a.scrollingContainer)) || {},\n            _d = _c.scrollLeft,\n            scrollLeft = _d === void 0 ? 0 : _d,\n            _e = _c.scrollTop,\n            scrollTop = _e === void 0 ? 0 : _e,\n            series = options.series,\n            box = (options.visiblePlotOnly && scrollablePlotBox) || plotBox,\n            x = options.inverted ? plotY : plotX,\n            y = options.inverted ? plotX : plotY,\n            e = {\n                x: x,\n                y: y,\n                isInsidePlot: true,\n                options: options\n            };\n        if (!options.ignoreX) {\n            var xAxis = (series &&\n                    (inverted && !this.polar ? series.yAxis : series.xAxis)) || {\n                    pos: plotLeft,\n                    len: Infinity\n                };\n            var chartX = options.paneCoordinates ?\n                    xAxis.pos + x : plotLeft + x;\n            if (!(chartX >= Math.max(scrollLeft + plotLeft, xAxis.pos) &&\n                chartX <= Math.min(scrollLeft + plotLeft + box.width, xAxis.pos + xAxis.len))) {\n                e.isInsidePlot = false;\n            }\n        }\n        if (!options.ignoreY && e.isInsidePlot) {\n            var yAxis = (!inverted && options.axis &&\n                    !options.axis.isXAxis && options.axis) || (series && (inverted ? series.xAxis : series.yAxis)) || {\n                    pos: plotTop,\n                    len: Infinity\n                };\n            var chartY = options.paneCoordinates ?\n                    yAxis.pos + y : plotTop + y;\n            if (!(chartY >= Math.max(scrollTop + plotTop, yAxis.pos) &&\n                chartY <= Math.min(scrollTop + plotTop + box.height, yAxis.pos + yAxis.len))) {\n                e.isInsidePlot = false;\n            }\n        }\n        Chart_fireEvent(this, 'afterIsInsidePlot', e);\n        return e.isInsidePlot;\n    };\n    /**\n     * Redraw the chart after changes have been done to the data, axis extremes\n     * chart size or chart elements. All methods for updating axes, series or\n     * points have a parameter for redrawing the chart. This is `true` by\n     * default. But in many cases you want to do more than one operation on the\n     * chart before redrawing, for example add a number of points. In those\n     * cases it is a waste of resources to redraw the chart for each new point\n     * added. So you add the points and call `chart.redraw()` after.\n     *\n     * @function Highcharts.Chart#redraw\n     *\n     * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n     * If or how to apply animation to the redraw. When `undefined`, it applies\n     * the animation that is set in the `chart.animation` option.\n     *\n     * @emits Highcharts.Chart#event:afterSetExtremes\n     * @emits Highcharts.Chart#event:beforeRedraw\n     * @emits Highcharts.Chart#event:predraw\n     * @emits Highcharts.Chart#event:redraw\n     * @emits Highcharts.Chart#event:render\n     * @emits Highcharts.Chart#event:updatedData\n     */\n    Chart.prototype.redraw = function (animation) {\n        Chart_fireEvent(this, 'beforeRedraw');\n        var chart = this,\n            axes = chart.hasCartesianSeries ? chart.axes : chart.colorAxis || [],\n            series = chart.series,\n            pointer = chart.pointer,\n            legend = chart.legend,\n            legendUserOptions = chart.userOptions.legend,\n            renderer = chart.renderer,\n            isHiddenChart = renderer.isHidden(),\n            afterRedraw = [];\n        var hasDirtyStacks,\n            hasStackedSeries,\n            i,\n            isDirtyBox = chart.isDirtyBox,\n            redrawLegend = chart.isDirtyLegend,\n            serie;\n        renderer.rootFontSize = renderer.boxWrapper.getStyle('font-size');\n        // Handle responsive rules, not only on resize (#6130)\n        if (chart.setResponsive) {\n            chart.setResponsive(false);\n        }\n        // Set the global animation. When chart.hasRendered is not true, the\n        // redraw call comes from a responsive rule and animation should not\n        // occur.\n        Chart_setAnimation(chart.hasRendered ? animation : false, chart);\n        if (isHiddenChart) {\n            chart.temporaryDisplay();\n        }\n        // Adjust title layout (reflow multiline text)\n        chart.layOutTitles(false);\n        // Link stacked series\n        i = series.length;\n        while (i--) {\n            serie = series[i];\n            if (serie.options.stacking || serie.options.centerInCategory) {\n                hasStackedSeries = true;\n                if (serie.isDirty) {\n                    hasDirtyStacks = true;\n                    break;\n                }\n            }\n        }\n        if (hasDirtyStacks) { // Mark others as dirty\n            i = series.length;\n            while (i--) {\n                serie = series[i];\n                if (serie.options.stacking) {\n                    serie.isDirty = true;\n                }\n            }\n        }\n        // Handle updated data in the series\n        series.forEach(function (serie) {\n            if (serie.isDirty) {\n                if (serie.options.legendType === 'point') {\n                    if (typeof serie.updateTotals === 'function') {\n                        serie.updateTotals();\n                    }\n                    redrawLegend = true;\n                }\n                else if (legendUserOptions &&\n                    (!!legendUserOptions.labelFormatter ||\n                        legendUserOptions.labelFormat)) {\n                    redrawLegend = true; // #2165\n                }\n            }\n            if (serie.isDirtyData) {\n                Chart_fireEvent(serie, 'updatedData');\n            }\n        });\n        // Handle added or removed series\n        if (redrawLegend && legend && legend.options.enabled) {\n            // Draw legend graphics\n            legend.render();\n            chart.isDirtyLegend = false;\n        }\n        // Reset stacks\n        if (hasStackedSeries) {\n            chart.getStacks();\n        }\n        // Set axes scales\n        axes.forEach(function (axis) {\n            axis.updateNames();\n            axis.setScale();\n        });\n        chart.getMargins(); // #3098\n        // If one axis is dirty, all axes must be redrawn (#792, #2169)\n        axes.forEach(function (axis) {\n            if (axis.isDirty) {\n                isDirtyBox = true;\n            }\n        });\n        // Redraw axes\n        axes.forEach(function (axis) {\n            // Fire 'afterSetExtremes' only if extremes are set\n            var key = axis.min + ',' + axis.max;\n            if (axis.extKey !== key) { // #821, #4452\n                axis.extKey = key;\n                // Prevent a recursive call to chart.redraw() (#1119)\n                afterRedraw.push(function () {\n                    Chart_fireEvent(axis, 'afterSetExtremes', Chart_extend(axis.eventArgs, axis.getExtremes())); // #747, #751\n                    delete axis.eventArgs;\n                });\n            }\n            if (isDirtyBox || hasStackedSeries) {\n                axis.redraw();\n            }\n        });\n        // The plot areas size has changed\n        if (isDirtyBox) {\n            chart.drawChartBox();\n        }\n        // Fire an event before redrawing series, used by the boost module to\n        // clear previous series renderings.\n        Chart_fireEvent(chart, 'predraw');\n        // Redraw affected series\n        series.forEach(function (serie) {\n            if ((isDirtyBox || serie.isDirty) && serie.visible) {\n                serie.redraw();\n            }\n            // Set it here, otherwise we will have unlimited 'updatedData' calls\n            // for a hidden series after setData(). Fixes #6012\n            serie.isDirtyData = false;\n        });\n        // Move tooltip or reset\n        if (pointer) {\n            pointer.reset(true);\n        }\n        // Redraw if canvas\n        renderer.draw();\n        // Fire the events\n        Chart_fireEvent(chart, 'redraw');\n        Chart_fireEvent(chart, 'render');\n        if (isHiddenChart) {\n            chart.temporaryDisplay(true);\n        }\n        // Fire callbacks that are put on hold until after the redraw\n        afterRedraw.forEach(function (callback) {\n            callback.call();\n        });\n    };\n    /**\n     * Get an axis, series or point object by `id` as given in the configuration\n     * options. Returns `undefined` if no item is found.\n     *\n     * @sample highcharts/plotoptions/series-id/\n     *         Get series by id\n     *\n     * @function Highcharts.Chart#get\n     *\n     * @param {string} id\n     * The id as given in the configuration options.\n     *\n     * @return {Highcharts.Axis|Highcharts.Series|Highcharts.Point|undefined}\n     * The retrieved item.\n     */\n    Chart.prototype.get = function (id) {\n        var series = this.series;\n        /**\n         * @private\n         */\n        function itemById(item) {\n            return (item.id === id ||\n                (item.options && item.options.id === id));\n        }\n        var ret = \n            // Search axes\n            Chart_find(this.axes,\n            itemById) ||\n                // Search series\n                Chart_find(this.series,\n            itemById);\n        // Search points\n        for (var i = 0; !ret && i < series.length; i++) {\n            ret = Chart_find(series[i].points || [], itemById);\n        }\n        return ret;\n    };\n    /**\n     * Create the Axis instances based on the config options.\n     *\n     * @private\n     * @function Highcharts.Chart#createAxes\n     * @emits Highcharts.Chart#event:afterCreateAxes\n     * @emits Highcharts.Chart#event:createAxes\n     */\n    Chart.prototype.createAxes = function () {\n        var options = this.userOptions;\n        Chart_fireEvent(this, 'createAxes');\n        for (var _i = 0, _a = ['xAxis', 'yAxis']; _i < _a.length; _i++) {\n            var coll = _a[_i];\n            var arr = options[coll] = Chart_splat(options[coll] || {});\n            for (var _b = 0, arr_1 = arr; _b < arr_1.length; _b++) {\n                var axisOptions = arr_1[_b];\n                // eslint-disable-next-line no-new\n                new Axis_Axis(this, axisOptions, coll);\n            }\n        }\n        Chart_fireEvent(this, 'afterCreateAxes');\n    };\n    /**\n     * Returns an array of all currently selected points in the chart. Points\n     * can be selected by clicking or programmatically by the\n     * {@link Highcharts.Point#select}\n     * function.\n     *\n     * @sample highcharts/plotoptions/series-allowpointselect-line/\n     *         Get selected points\n     * @sample highcharts/members/point-select-lasso/\n     *         Lasso selection\n     * @sample highcharts/chart/events-selection-points/\n     *         Rectangle selection\n     *\n     * @function Highcharts.Chart#getSelectedPoints\n     *\n     * @return {Array<Highcharts.Point>}\n     *         The currently selected points.\n     */\n    Chart.prototype.getSelectedPoints = function () {\n        return this.series.reduce(function (acc, series) {\n            // For one-to-one points inspect series.data in order to retrieve\n            // points outside the visible range (#6445). For grouped data,\n            // inspect the generated series.points.\n            series.getPointsCollection()\n                .forEach(function (point) {\n                if (Chart_pick(point.selectedStaging, point.selected)) {\n                    acc.push(point);\n                }\n            });\n            return acc;\n        }, []);\n    };\n    /**\n     * Returns an array of all currently selected series in the chart. Series\n     * can be selected either programmatically by the\n     * {@link Highcharts.Series#select}\n     * function or by checking the checkbox next to the legend item if\n     * [series.showCheckBox](https://api.highcharts.com/highcharts/plotOptions.series.showCheckbox)\n     * is true.\n     *\n     * @sample highcharts/members/chart-getselectedseries/\n     *         Get selected series\n     *\n     * @function Highcharts.Chart#getSelectedSeries\n     *\n     * @return {Array<Highcharts.Series>}\n     *         The currently selected series.\n     */\n    Chart.prototype.getSelectedSeries = function () {\n        return this.series.filter(function (s) { return s.selected; });\n    };\n    /**\n     * Set a new title or subtitle for the chart.\n     *\n     * @sample highcharts/members/chart-settitle/\n     *         Set title text and styles\n     *\n     * @function Highcharts.Chart#setTitle\n     *\n     * @param {Highcharts.TitleOptions} [titleOptions]\n     *        New title options. The title text itself is set by the\n     *        `titleOptions.text` property.\n     *\n     * @param {Highcharts.SubtitleOptions} [subtitleOptions]\n     *        New subtitle options. The subtitle text itself is set by the\n     *        `subtitleOptions.text` property.\n     *\n     * @param {boolean} [redraw]\n     *        Whether to redraw the chart or wait for a later call to\n     *        `chart.redraw()`.\n     */\n    Chart.prototype.setTitle = function (titleOptions, subtitleOptions, redraw) {\n        this.applyDescription('title', titleOptions);\n        this.applyDescription('subtitle', subtitleOptions);\n        // The initial call also adds the caption. On update, chart.update will\n        // relay to Chart.setCaption.\n        this.applyDescription('caption', void 0);\n        this.layOutTitles(redraw);\n    };\n    /**\n     * Apply a title, subtitle or caption for the chart\n     *\n     * @private\n     * @function Highcharts.Chart#applyDescription\n     * @param key {string}\n     * Either title, subtitle or caption\n     * @param {Highcharts.TitleOptions|Highcharts.SubtitleOptions|Highcharts.CaptionOptions|undefined} explicitOptions\n     * The options to set, will be merged with default options.\n     */\n    Chart.prototype.applyDescription = function (key, explicitOptions) {\n        var _a;\n        var chart = this;\n        // Merge default options with explicit options\n        var options = this.options[key] = Chart_merge(this.options[key],\n            explicitOptions);\n        var elem = this[key];\n        if (elem && explicitOptions) {\n            this[key] = elem = elem.destroy(); // Remove old\n        }\n        if (options && !elem) {\n            elem = this.renderer.text(options.text, 0, 0, options.useHTML)\n                .attr({\n                align: options.align,\n                'class': 'highcharts-' + key,\n                zIndex: options.zIndex || 4\n            })\n                .css({\n                textOverflow: 'ellipsis',\n                whiteSpace: 'nowrap'\n            })\n                .add();\n            // Update methods, relay to `applyDescription`\n            elem.update = function (updateOptions, redraw) {\n                chart.applyDescription(key, updateOptions);\n                chart.layOutTitles(redraw);\n            };\n            // Presentational\n            if (!this.styledMode) {\n                elem.css(Chart_extend(key === 'title' ? {\n                    // #2944\n                    fontSize: this.options.isStock ? '1em' : '1.2em'\n                } : {}, options.style));\n            }\n            // Get unwrapped text length and reset\n            elem.textPxLength = elem.getBBox().width;\n            elem.css({ whiteSpace: (_a = options.style) === null || _a === void 0 ? void 0 : _a.whiteSpace });\n            /**\n             * The chart title. The title has an `update` method that allows\n             * modifying the options directly or indirectly via\n             * `chart.update`.\n             *\n             * @sample highcharts/members/title-update/\n             *         Updating titles\n             *\n             * @name Highcharts.Chart#title\n             * @type {Highcharts.TitleObject}\n             */\n            /**\n             * The chart subtitle. The subtitle has an `update` method that\n             * allows modifying the options directly or indirectly via\n             * `chart.update`.\n             *\n             * @name Highcharts.Chart#subtitle\n             * @type {Highcharts.SubtitleObject}\n             */\n            this[key] = elem;\n        }\n    };\n    /**\n     * Internal function to lay out the chart title, subtitle and caption, and\n     * cache the full offset height for use in `getMargins`. The result is\n     * stored in `this.titleOffset`.\n     *\n     * @private\n     * @function Highcharts.Chart#layOutTitles\n     *\n     * @param {boolean} [redraw=true]\n     * @emits Highcharts.Chart#event:afterLayOutTitles\n     */\n    Chart.prototype.layOutTitles = function (redraw) {\n        var _this = this;\n        var _a,\n            _b,\n            _c,\n            _d;\n        if (redraw === void 0) { redraw = true; }\n        var titleOffset = [0, 0, 0],\n            _e = this,\n            options = _e.options,\n            renderer = _e.renderer,\n            spacingBox = _e.spacingBox;\n        // Lay out the title, subtitle and caption respectively\n        ['title', 'subtitle', 'caption'].forEach(function (key) {\n            var _a;\n            var desc = _this[key],\n                descOptions = _this.options[key],\n                alignTo = Chart_merge(spacingBox),\n                textPxLength = (desc === null || desc === void 0 ? void 0 : desc.textPxLength) || 0;\n            if (desc && descOptions) {\n                // Provide a hook for the exporting button to shift the title\n                Chart_fireEvent(_this, 'layOutTitle', { alignTo: alignTo, key: key, textPxLength: textPxLength });\n                var fontMetrics = renderer.fontMetrics(desc), baseline = fontMetrics.b, lineHeight = fontMetrics.h, verticalAlign = descOptions.verticalAlign || 'top', topAligned = verticalAlign === 'top', \n                    // Use minScale only for top-aligned titles. It is not\n                    // likely that we will need scaling for other positions, but\n                    // if it is requested, we need to adjust the vertical\n                    // position to the scale.\n                    minScale = topAligned && descOptions.minScale || 1, offset = key === 'title' ?\n                        topAligned ? -3 : 0 :\n                        // Floating subtitle (#6574)\n                        topAligned ? titleOffset[0] + 2 : 0, uncappedScale = Math.min(alignTo.width / textPxLength, 1), scale = Math.max(minScale, uncappedScale), alignAttr = Chart_merge({\n                        y: verticalAlign === 'bottom' ?\n                            baseline :\n                            offset + baseline\n                    }, {\n                        align: key === 'title' ?\n                            // Title defaults to center for short titles,\n                            // left for word-wrapped titles\n                            (uncappedScale < minScale ? 'left' : 'center') :\n                            // Subtitle defaults to the title.align\n                            (_a = _this.title) === null || _a === void 0 ? void 0 : _a.alignValue\n                    }, descOptions), width = descOptions.width || ((uncappedScale > minScale ?\n                        // One line\n                        _this.chartWidth :\n                        // Allow word wrap\n                        alignTo.width) / scale);\n                // No animation when switching alignment\n                if (desc.alignValue !== alignAttr.align) {\n                    desc.placed = false;\n                }\n                // Set the width and read the height\n                var height = Math.round(desc\n                        .css({ width: \"\" + width + \"px\" })\n                        // Skip the cache for HTML (#3481, #11666)\n                        .getBBox(descOptions.useHTML).height);\n                alignAttr.height = height;\n                // Perform scaling and alignment\n                desc\n                    .align(alignAttr, false, alignTo)\n                    .attr({\n                    align: alignAttr.align,\n                    scaleX: scale,\n                    scaleY: scale,\n                    'transform-origin': \"\" + (alignTo.x +\n                        textPxLength *\n                            scale *\n                            Chart_getAlignFactor(alignAttr.align)) + \" \".concat(lineHeight)\n                });\n                // Adjust the rendered title offset\n                if (!descOptions.floating) {\n                    var offset_1 = height * (\n                        // When scaling down the title, preserve the offset as\n                        // long as it's only one line, but scale down the offset\n                        // if the title wraps to multiple lines.\n                        height < lineHeight * 1.2 ? 1 : scale);\n                    if (verticalAlign === 'top') {\n                        titleOffset[0] = Math.ceil(titleOffset[0] + offset_1);\n                    }\n                    else if (verticalAlign === 'bottom') {\n                        titleOffset[2] = Math.ceil(titleOffset[2] + offset_1);\n                    }\n                }\n            }\n        }, this);\n        // Handle title.margin and caption.margin\n        if (titleOffset[0] &&\n            (((_a = options.title) === null || _a === void 0 ? void 0 : _a.verticalAlign) || 'top') === 'top') {\n            titleOffset[0] += ((_b = options.title) === null || _b === void 0 ? void 0 : _b.margin) || 0;\n        }\n        if (titleOffset[2] &&\n            ((_c = options.caption) === null || _c === void 0 ? void 0 : _c.verticalAlign) === 'bottom') {\n            titleOffset[2] += ((_d = options.caption) === null || _d === void 0 ? void 0 : _d.margin) || 0;\n        }\n        var requiresDirtyBox = (!this.titleOffset ||\n                this.titleOffset.join(',') !== titleOffset.join(','));\n        // Used in getMargins\n        this.titleOffset = titleOffset;\n        Chart_fireEvent(this, 'afterLayOutTitles');\n        if (!this.isDirtyBox && requiresDirtyBox) {\n            this.isDirtyBox = this.isDirtyLegend = requiresDirtyBox;\n            // Redraw if necessary (#2719, #2744)\n            if (this.hasRendered && redraw && this.isDirtyBox) {\n                this.redraw();\n            }\n        }\n    };\n    /**\n     * Internal function to get the available size of the container element\n     *\n     * @private\n     * @function Highcharts.Chart#getContainerBox\n     */\n    Chart.prototype.getContainerBox = function () {\n        var _this = this;\n        // Temporarily hide support divs from a11y and others, #21888\n        var nonContainers = [].map.call(this.renderTo.children,\n            function (child) {\n                if (child !== _this.container) {\n                    var display = child.style.display;\n                child.style.display = 'none';\n                return [child, display];\n            }\n        }), box = {\n            width: Chart_getStyle(this.renderTo, 'width', true) || 0,\n            height: (Chart_getStyle(this.renderTo, 'height', true) || 0)\n        };\n        // Restore the non-containers\n        nonContainers.filter(Boolean).forEach(function (_a) {\n            var div = _a[0],\n                display = _a[1];\n            div.style.display = display;\n        });\n        return box;\n    };\n    /**\n     * Internal function to get the chart width and height according to options\n     * and container size. Sets {@link Chart.chartWidth} and\n     * {@link Chart.chartHeight}.\n     *\n     * @private\n     * @function Highcharts.Chart#getChartSize\n     */\n    Chart.prototype.getChartSize = function () {\n        var _a;\n        var chart = this,\n            optionsChart = chart.options.chart,\n            widthOption = optionsChart.width,\n            heightOption = optionsChart.height,\n            containerBox = chart.getContainerBox(),\n            enableDefaultHeight = containerBox.height <= 1 ||\n                ( // #21510, prevent infinite reflow\n                !((_a = chart.renderTo.parentElement) === null || _a === void 0 ? void 0 : _a.style.height) &&\n                    chart.renderTo.style.height === '100%');\n        /**\n         * The current pixel width of the chart.\n         *\n         * @name Highcharts.Chart#chartWidth\n         * @type {number}\n         */\n        chart.chartWidth = Math.max(// #1393\n        0, widthOption || containerBox.width || 600 // #1460\n        );\n        /**\n         * The current pixel height of the chart.\n         *\n         * @name Highcharts.Chart#chartHeight\n         * @type {number}\n         */\n        chart.chartHeight = Math.max(0, Chart_relativeLength(heightOption, chart.chartWidth) ||\n            (enableDefaultHeight ? 400 : containerBox.height));\n        chart.containerBox = containerBox;\n    };\n    /**\n     * If the renderTo element has no offsetWidth, most likely one or more of\n     * its parents are hidden. Loop up the DOM tree to temporarily display the\n     * parents, then save the original display properties, and when the true\n     * size is retrieved, reset them. Used on first render and on redraws.\n     *\n     * @private\n     * @function Highcharts.Chart#temporaryDisplay\n     *\n     * @param {boolean} [revert]\n     * Revert to the saved original styles.\n     */\n    Chart.prototype.temporaryDisplay = function (revert) {\n        var node = this.renderTo,\n            tempStyle;\n        if (!revert) {\n            while (node && node.style) {\n                // When rendering to a detached node, it needs to be temporarily\n                // attached in order to read styling and bounding boxes (#5783,\n                // #7024).\n                if (!Chart_doc.body.contains(node) && !node.parentNode) {\n                    node.hcOrigDetached = true;\n                    Chart_doc.body.appendChild(node);\n                }\n                if (Chart_getStyle(node, 'display', false) === 'none' ||\n                    node.hcOricDetached) {\n                    node.hcOrigStyle = {\n                        display: node.style.display,\n                        height: node.style.height,\n                        overflow: node.style.overflow\n                    };\n                    tempStyle = {\n                        display: 'block',\n                        overflow: 'hidden'\n                    };\n                    if (node !== this.renderTo) {\n                        tempStyle.height = 0;\n                    }\n                    Chart_css(node, tempStyle);\n                    // If it still doesn't have an offset width after setting\n                    // display to block, it probably has an !important priority\n                    // #2631, 6803\n                    if (!node.offsetWidth) {\n                        node.style.setProperty('display', 'block', 'important');\n                    }\n                }\n                node = node.parentNode;\n                if (node === Chart_doc.body) {\n                    break;\n                }\n            }\n        }\n        else {\n            while (node && node.style) {\n                if (node.hcOrigStyle) {\n                    Chart_css(node, node.hcOrigStyle);\n                    delete node.hcOrigStyle;\n                }\n                if (node.hcOrigDetached) {\n                    Chart_doc.body.removeChild(node);\n                    node.hcOrigDetached = false;\n                }\n                node = node.parentNode;\n            }\n        }\n    };\n    /**\n     * Set the {@link Chart.container|chart container's} class name, in\n     * addition to `highcharts-container`.\n     *\n     * @function Highcharts.Chart#setClassName\n     *\n     * @param {string} [className]\n     * The additional class name.\n     */\n    Chart.prototype.setClassName = function (className) {\n        this.container.className = 'highcharts-container ' + (className || '');\n    };\n    /**\n     * Get the containing element, determine the size and create the inner\n     * container div to hold the chart.\n     *\n     * @private\n     * @function Highcharts.Chart#afterGetContainer\n     * @emits Highcharts.Chart#event:afterGetContainer\n     */\n    Chart.prototype.getContainer = function () {\n        var _a;\n        var chart = this,\n            options = chart.options,\n            optionsChart = options.chart,\n            indexAttrName = 'data-highcharts-chart',\n            containerId = Chart_uniqueKey(),\n            renderTo = chart.renderTo;\n        var containerStyle;\n        // If the container already holds a chart, destroy it. The check for\n        // hasRendered is there because web pages that are saved to disk from\n        // the browser, will preserve the data-highcharts-chart attribute and\n        // the SVG contents, but not an interactive chart. So in this case,\n        // charts[oldChartIndex] will point to the wrong chart if any (#2609).\n        var oldChartIndex = Chart_pInt(Chart_attr(renderTo,\n            indexAttrName));\n        if (Chart_isNumber(oldChartIndex) &&\n            Chart_charts[oldChartIndex] &&\n            Chart_charts[oldChartIndex].hasRendered) {\n            Chart_charts[oldChartIndex].destroy();\n        }\n        // Make a reference to the chart from the div\n        Chart_attr(renderTo, indexAttrName, chart.index);\n        // Remove previous chart\n        renderTo.innerHTML = HTML_AST.emptyHTML;\n        // If the container doesn't have an offsetWidth, it has or is a child of\n        // a node that has display:none. We need to temporarily move it out to a\n        // visible state to determine the size, else the legend and tooltips\n        // won't render properly. The skipClone option is used in sparklines as\n        // a micro optimization, saving about 1-2 ms each chart.\n        if (!optionsChart.skipClone && !renderTo.offsetWidth) {\n            chart.temporaryDisplay();\n        }\n        // Get the width and height\n        chart.getChartSize();\n        var chartHeight = chart.chartHeight;\n        var chartWidth = chart.chartWidth;\n        // Allow table cells and flex-boxes to shrink without the chart blocking\n        // them out (#6427)\n        Chart_css(renderTo, { overflow: 'hidden' });\n        // Create the inner container\n        if (!chart.styledMode) {\n            containerStyle = Chart_extend({\n                position: 'relative',\n                // Needed for context menu (avoidscrollbars) and content\n                // overflow in IE\n                overflow: 'hidden',\n                width: chartWidth + 'px',\n                height: chartHeight + 'px',\n                textAlign: 'left',\n                lineHeight: 'normal', // #427\n                zIndex: 0, // #1072\n                '-webkit-tap-highlight-color': 'rgba(0,0,0,0)',\n                userSelect: 'none', // #13503\n                'touch-action': 'manipulation',\n                outline: 'none',\n                padding: '0px'\n            }, optionsChart.style || {});\n        }\n        /**\n         * The containing HTML element of the chart. The container is\n         * dynamically inserted into the element given as the `renderTo`\n         * parameter in the {@link Highcharts#chart} constructor.\n         *\n         * @name Highcharts.Chart#container\n         * @type {Highcharts.HTMLDOMElement}\n         */\n        var container = Chart_createElement('div', {\n                id: containerId\n            },\n            containerStyle,\n            renderTo);\n        chart.container = container;\n        // Adjust width if setting height affected it (#20334)\n        chart.getChartSize();\n        if (chartWidth !== chart.chartWidth) {\n            chartWidth = chart.chartWidth;\n            if (!chart.styledMode) {\n                Chart_css(container, {\n                    width: Chart_pick((_a = optionsChart.style) === null || _a === void 0 ? void 0 : _a.width, chartWidth + 'px')\n                });\n            }\n        }\n        chart.containerBox = chart.getContainerBox();\n        // Cache the cursor (#1650)\n        chart._cursor = container.style.cursor;\n        // Initialize the renderer\n        var Renderer = optionsChart.renderer || !Chart_svg ?\n                Renderer_RendererRegistry.getRendererType(optionsChart.renderer) :\n                SVG_SVGRenderer;\n        /**\n         * The renderer instance of the chart. Each chart instance has only one\n         * associated renderer.\n         *\n         * @name Highcharts.Chart#renderer\n         * @type {Highcharts.SVGRenderer}\n         */\n        chart.renderer = new Renderer(container, chartWidth, chartHeight, void 0, optionsChart.forExport, options.exporting && options.exporting.allowHTML, chart.styledMode);\n        // Set the initial animation from the options\n        Chart_setAnimation(void 0, chart);\n        chart.setClassName(optionsChart.className);\n        if (!chart.styledMode) {\n            chart.renderer.setStyle(optionsChart.style);\n        }\n        else {\n            // Initialize definitions\n            for (var key in options.defs) { // eslint-disable-line guard-for-in\n                this.renderer.definition(options.defs[key]);\n            }\n        }\n        // Add a reference to the charts index\n        chart.renderer.chartIndex = chart.index;\n        Chart_fireEvent(this, 'afterGetContainer');\n    };\n    /**\n     * Calculate margins by rendering axis labels in a preliminary position.\n     * Title, subtitle and legend have already been rendered at this stage, but\n     * will be moved into their final positions.\n     *\n     * @private\n     * @function Highcharts.Chart#getMargins\n     * @emits Highcharts.Chart#event:getMargins\n     */\n    Chart.prototype.getMargins = function (skipAxes) {\n        var _a = this,\n            spacing = _a.spacing,\n            margin = _a.margin,\n            titleOffset = _a.titleOffset;\n        this.resetMargins();\n        // Adjust for title and subtitle\n        if (titleOffset[0] && !Chart_defined(margin[0])) {\n            this.plotTop = Math.max(this.plotTop, titleOffset[0] + spacing[0]);\n        }\n        if (titleOffset[2] && !Chart_defined(margin[2])) {\n            this.marginBottom = Math.max(this.marginBottom, titleOffset[2] + spacing[2]);\n        }\n        // Adjust for legend\n        if (this.legend && this.legend.display) {\n            this.legend.adjustMargins(margin, spacing);\n        }\n        Chart_fireEvent(this, 'getMargins');\n        if (!skipAxes) {\n            this.getAxisMargins();\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.Chart#getAxisMargins\n     */\n    Chart.prototype.getAxisMargins = function () {\n        var chart = this, \n            // [top, right, bottom, left]\n            axisOffset = chart.axisOffset = [0, 0, 0, 0],\n            colorAxis = chart.colorAxis,\n            margin = chart.margin,\n            getOffset = function (axes) {\n                axes.forEach(function (axis) {\n                    if (axis.visible) {\n                        axis.getOffset();\n                }\n            });\n        };\n        // Pre-render axes to get labels offset width\n        if (chart.hasCartesianSeries) {\n            getOffset(chart.axes);\n        }\n        else if (colorAxis && colorAxis.length) {\n            getOffset(colorAxis);\n        }\n        // Add the axis offsets\n        Chart_marginNames.forEach(function (m, side) {\n            if (!Chart_defined(margin[side])) {\n                chart[m] += axisOffset[side];\n            }\n        });\n        chart.setChartSize();\n    };\n    /**\n     * Return the current options of the chart, but only those that differ from\n     * default options. Items that can be either an object or an array of\n     * objects, like `series`, `xAxis` and `yAxis`, are always returned as\n     * array.\n     *\n     * @sample highcharts/members/chart-getoptions\n     *\n     * @function Highcharts.Chart#getOptions\n     *\n     * @since 11.1.0\n     */\n    Chart.prototype.getOptions = function () {\n        return Chart_diffObjects(this.userOptions, Chart_defaultOptions);\n    };\n    /**\n     * Reflows the chart to its container. By default, the Resize Observer is\n     * attached to the chart's div which allows to reflows the chart\n     * automatically to its container, as per the\n     * [chart.reflow](https://api.highcharts.com/highcharts/chart.reflow)\n     * option.\n     *\n     * @sample highcharts/chart/events-container/\n     *         Pop up and reflow\n     *\n     * @function Highcharts.Chart#reflow\n     *\n     * @param {global.Event} [e]\n     *        Event arguments. Used primarily when the function is called\n     *        internally as a response to window resize.\n     */\n    Chart.prototype.reflow = function (e) {\n        var _a;\n        var chart = this,\n            oldBox = chart.containerBox,\n            containerBox = chart.getContainerBox();\n        (_a = chart.pointer) === null || _a === void 0 ? true : delete _a.chartPosition;\n        // Width and height checks for display:none. Target is doc in Opera\n        // and win in Firefox, Chrome and IE9.\n        if (!chart.isPrinting &&\n            !chart.isResizing &&\n            oldBox &&\n            // When fired by resize observer inside hidden container\n            containerBox.width) {\n            if (containerBox.width !== oldBox.width ||\n                containerBox.height !== oldBox.height) {\n                Core_Utilities.clearTimeout(chart.reflowTimeout);\n                // When called from window.resize, e is set, else it's called\n                // directly (#2224)\n                chart.reflowTimeout = Chart_syncTimeout(function () {\n                    // Set size, it may have been destroyed in the meantime\n                    // (#1257)\n                    if (chart.container) {\n                        chart.setSize(void 0, void 0, false);\n                    }\n                }, e ? 100 : 0);\n            }\n            chart.containerBox = containerBox;\n        }\n    };\n    /**\n     * Toggle the event handlers necessary for auto resizing, depending on the\n     * `chart.reflow` option.\n     *\n     * @private\n     * @function Highcharts.Chart#setReflow\n     */\n    Chart.prototype.setReflow = function () {\n        var chart = this;\n        var runReflow = function (e) {\n                var _a;\n            if (((_a = chart.options) === null || _a === void 0 ? void 0 : _a.chart.reflow) && chart.hasLoaded) {\n                chart.reflow(e);\n            }\n        };\n        if (typeof ResizeObserver === 'function') {\n            (new ResizeObserver(runReflow)).observe(chart.renderTo);\n            // Fallback for more legacy browser versions.\n        }\n        else {\n            var unbind = Chart_addEvent(Chart_win, 'resize',\n                runReflow);\n            Chart_addEvent(this, 'destroy', unbind);\n        }\n    };\n    /**\n     * Resize the chart to a given width and height. In order to set the width\n     * only, the height argument may be skipped. To set the height only, pass\n     * `undefined` for the width.\n     *\n     * @sample highcharts/members/chart-setsize-button/\n     *         Test resizing from buttons\n     * @sample highcharts/members/chart-setsize-jquery-resizable/\n     *         Add a jQuery UI resizable\n     * @sample stock/members/chart-setsize/\n     *         Highcharts Stock with UI resizable\n     *\n     * @function Highcharts.Chart#setSize\n     *\n     * @param {number|null} [width]\n     *        The new pixel width of the chart. Since v4.2.6, the argument can\n     *        be `undefined` in order to preserve the current value (when\n     *        setting height only), or `null` to adapt to the width of the\n     *        containing element.\n     *\n     * @param {number|null} [height]\n     *        The new pixel height of the chart. Since v4.2.6, the argument can\n     *        be `undefined` in order to preserve the current value, or `null`\n     *        in order to adapt to the height of the containing element.\n     *\n     * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n     *        Whether and how to apply animation. When `undefined`, it applies\n     *        the animation that is set in the `chart.animation` option.\n     *\n     *\n     * @emits Highcharts.Chart#event:endResize\n     * @emits Highcharts.Chart#event:resize\n     */\n    Chart.prototype.setSize = function (width, height, animation) {\n        var chart = this,\n            renderer = chart.renderer;\n        // Handle the isResizing counter\n        chart.isResizing += 1;\n        // Set the animation for the current process\n        Chart_setAnimation(animation, chart);\n        var globalAnimation = renderer.globalAnimation;\n        chart.oldChartHeight = chart.chartHeight;\n        chart.oldChartWidth = chart.chartWidth;\n        if (typeof width !== 'undefined') {\n            chart.options.chart.width = width;\n        }\n        if (typeof height !== 'undefined') {\n            chart.options.chart.height = height;\n        }\n        chart.getChartSize();\n        var chartWidth = chart.chartWidth,\n            chartHeight = chart.chartHeight,\n            _a = chart.scrollablePixelsX,\n            scrollablePixelsX = _a === void 0 ? 0 : _a,\n            _b = chart.scrollablePixelsY,\n            scrollablePixelsY = _b === void 0 ? 0 : _b;\n        // Avoid expensive redrawing if the computed size didn't change\n        if (chart.isDirtyBox ||\n            chartWidth !== chart.oldChartWidth ||\n            chartHeight !== chart.oldChartHeight) {\n            // Resize the container with the global animation applied if enabled\n            // (#2503)\n            if (!chart.styledMode) {\n                (globalAnimation ? Chart_animate : Chart_css)(chart.container, {\n                    width: \"\" + (chartWidth + scrollablePixelsX) + \"px\",\n                    height: \"\" + (chartHeight + scrollablePixelsY) + \"px\"\n                }, globalAnimation);\n            }\n            chart.setChartSize(true);\n            renderer.setSize(chartWidth, chartHeight, globalAnimation);\n            // Handle axes\n            chart.axes.forEach(function (axis) {\n                axis.isDirty = true;\n                axis.setScale();\n            });\n            chart.isDirtyLegend = true; // Force legend redraw\n            chart.isDirtyBox = true; // Force redraw of plot and chart border\n            chart.layOutTitles(); // #2857\n            chart.getMargins();\n            chart.redraw(globalAnimation);\n            chart.oldChartHeight = void 0;\n            Chart_fireEvent(chart, 'resize');\n            // Fire endResize and set isResizing back. If animation is disabled,\n            // fire without delay, but in a new thread to avoid triggering the\n            // resize observer (#19027).\n            setTimeout(function () {\n                if (chart) {\n                    Chart_fireEvent(chart, 'endResize');\n                }\n            }, Chart_animObject(globalAnimation).duration);\n        }\n        // Handle resizing counter even if we've re-rendered or not (#20548).\n        chart.isResizing -= 1;\n    };\n    /**\n     * Set the public chart properties. This is done before and after the\n     * pre-render to determine margin sizes.\n     *\n     * @private\n     * @function Highcharts.Chart#setChartSize\n     * @emits Highcharts.Chart#event:afterSetChartSize\n     */\n    Chart.prototype.setChartSize = function (skipAxes) {\n        var chart = this,\n            chartHeight = chart.chartHeight,\n            chartWidth = chart.chartWidth,\n            inverted = chart.inverted,\n            spacing = chart.spacing,\n            renderer = chart.renderer,\n            clipOffset = chart.clipOffset,\n            clipRoundFunc = Math[inverted ? 'floor' : 'round'];\n        var plotLeft,\n            plotTop,\n            plotWidth,\n            plotHeight;\n        /**\n         * The current left position of the plot area in pixels.\n         *\n         * @name Highcharts.Chart#plotLeft\n         * @type {number}\n         */\n        chart.plotLeft = plotLeft = Math.round(chart.plotLeft);\n        /**\n         * The current top position of the plot area in pixels.\n         *\n         * @name Highcharts.Chart#plotTop\n         * @type {number}\n         */\n        chart.plotTop = plotTop = Math.round(chart.plotTop);\n        /**\n         * The current width of the plot area in pixels.\n         *\n         * @name Highcharts.Chart#plotWidth\n         * @type {number}\n         */\n        chart.plotWidth = plotWidth = Math.max(0, Math.round(chartWidth - plotLeft - chart.marginRight));\n        /**\n         * The current height of the plot area in pixels.\n         *\n         * @name Highcharts.Chart#plotHeight\n         * @type {number}\n         */\n        chart.plotHeight = plotHeight = Math.max(0, Math.round(chartHeight - plotTop - chart.marginBottom));\n        chart.plotSizeX = inverted ? plotHeight : plotWidth;\n        chart.plotSizeY = inverted ? plotWidth : plotHeight;\n        // Set boxes used for alignment\n        chart.spacingBox = renderer.spacingBox = {\n            x: spacing[3],\n            y: spacing[0],\n            width: chartWidth - spacing[3] - spacing[1],\n            height: chartHeight - spacing[0] - spacing[2]\n        };\n        chart.plotBox = renderer.plotBox = {\n            x: plotLeft,\n            y: plotTop,\n            width: plotWidth,\n            height: plotHeight\n        };\n        // Compute the clipping box\n        if (clipOffset) {\n            chart.clipBox = {\n                x: clipRoundFunc(clipOffset[3]),\n                y: clipRoundFunc(clipOffset[0]),\n                width: clipRoundFunc(chart.plotSizeX - clipOffset[1] - clipOffset[3]),\n                height: clipRoundFunc(chart.plotSizeY - clipOffset[0] - clipOffset[2])\n            };\n        }\n        if (!skipAxes) {\n            chart.axes.forEach(function (axis) {\n                axis.setAxisSize();\n                axis.setAxisTranslation();\n            });\n            renderer.alignElements();\n        }\n        Chart_fireEvent(chart, 'afterSetChartSize', { skipAxes: skipAxes });\n    };\n    /**\n     * Initial margins before auto size margins are applied.\n     *\n     * @private\n     * @function Highcharts.Chart#resetMargins\n     */\n    Chart.prototype.resetMargins = function () {\n        Chart_fireEvent(this, 'resetMargins');\n        var chart = this,\n            chartOptions = chart.options.chart,\n            plotBorderWidth = chartOptions.plotBorderWidth || 0,\n            halfWidth = plotBorderWidth / 2;\n        // Create margin and spacing array\n        ['margin', 'spacing'].forEach(function splashArrays(target) {\n            var value = chartOptions[target],\n                values = Chart_isObject(value) ? value : [value,\n                value,\n                value,\n                value];\n            [\n                'Top',\n                'Right',\n                'Bottom',\n                'Left'\n            ].forEach(function (sideName, side) {\n                chart[target][side] = Chart_pick(chartOptions[target + sideName], values[side]);\n            });\n        });\n        // Set margin names like chart.plotTop, chart.plotLeft,\n        // chart.marginRight, chart.marginBottom.\n        Chart_marginNames.forEach(function (m, side) {\n            chart[m] = Chart_pick(chart.margin[side], chart.spacing[side]);\n        });\n        chart.axisOffset = [0, 0, 0, 0]; // Top, right, bottom, left\n        chart.clipOffset = [\n            halfWidth,\n            halfWidth,\n            halfWidth,\n            halfWidth\n        ];\n        chart.plotBorderWidth = plotBorderWidth;\n    };\n    /**\n     * Internal function to draw or redraw the borders and backgrounds for chart\n     * and plot area.\n     *\n     * @private\n     * @function Highcharts.Chart#drawChartBox\n     * @emits Highcharts.Chart#event:afterDrawChartBox\n     */\n    Chart.prototype.drawChartBox = function () {\n        var chart = this,\n            optionsChart = chart.options.chart,\n            renderer = chart.renderer,\n            chartWidth = chart.chartWidth,\n            chartHeight = chart.chartHeight,\n            styledMode = chart.styledMode,\n            plotBGImage = chart.plotBGImage,\n            chartBackgroundColor = optionsChart.backgroundColor,\n            plotBackgroundColor = optionsChart.plotBackgroundColor,\n            plotBackgroundImage = optionsChart.plotBackgroundImage,\n            plotLeft = chart.plotLeft,\n            plotTop = chart.plotTop,\n            plotWidth = chart.plotWidth,\n            plotHeight = chart.plotHeight,\n            plotBox = chart.plotBox,\n            clipRect = chart.clipRect,\n            clipBox = chart.clipBox;\n        var chartBackground = chart.chartBackground,\n            plotBackground = chart.plotBackground,\n            plotBorder = chart.plotBorder,\n            chartBorderWidth,\n            mgn,\n            bgAttr,\n            verb = 'animate';\n        // Chart area\n        if (!chartBackground) {\n            chart.chartBackground = chartBackground = renderer.rect()\n                .addClass('highcharts-background')\n                .add();\n            verb = 'attr';\n        }\n        if (!styledMode) {\n            // Presentational\n            chartBorderWidth = optionsChart.borderWidth || 0;\n            mgn = chartBorderWidth + (optionsChart.shadow ? 8 : 0);\n            bgAttr = {\n                fill: chartBackgroundColor || 'none'\n            };\n            if (chartBorderWidth || chartBackground['stroke-width']) { // #980\n                bgAttr.stroke = optionsChart.borderColor;\n                bgAttr['stroke-width'] = chartBorderWidth;\n            }\n            chartBackground\n                .attr(bgAttr)\n                .shadow(optionsChart.shadow);\n        }\n        else {\n            chartBorderWidth = mgn = chartBackground.strokeWidth();\n        }\n        chartBackground[verb]({\n            x: mgn / 2,\n            y: mgn / 2,\n            width: chartWidth - mgn - chartBorderWidth % 2,\n            height: chartHeight - mgn - chartBorderWidth % 2,\n            r: optionsChart.borderRadius\n        });\n        // Plot background\n        verb = 'animate';\n        if (!plotBackground) {\n            verb = 'attr';\n            chart.plotBackground = plotBackground = renderer.rect()\n                .addClass('highcharts-plot-background')\n                .add();\n        }\n        plotBackground[verb](plotBox);\n        if (!styledMode) {\n            // Presentational attributes for the background\n            plotBackground\n                .attr({\n                fill: plotBackgroundColor || 'none'\n            })\n                .shadow(optionsChart.plotShadow);\n            // Create the background image\n            if (plotBackgroundImage) {\n                if (!plotBGImage) {\n                    chart.plotBGImage = renderer.image(plotBackgroundImage, plotLeft, plotTop, plotWidth, plotHeight).add();\n                }\n                else {\n                    if (plotBackgroundImage !== plotBGImage.attr('href')) {\n                        plotBGImage.attr('href', plotBackgroundImage);\n                    }\n                    plotBGImage.animate(plotBox);\n                }\n            }\n        }\n        // Plot clip\n        if (!clipRect) {\n            chart.clipRect = renderer.clipRect(clipBox);\n        }\n        else {\n            clipRect.animate({\n                width: clipBox.width,\n                height: clipBox.height\n            });\n        }\n        // Plot area border\n        verb = 'animate';\n        if (!plotBorder) {\n            verb = 'attr';\n            chart.plotBorder = plotBorder = renderer.rect()\n                .addClass('highcharts-plot-border')\n                .attr({\n                zIndex: 1 // Above the grid\n            })\n                .add();\n        }\n        if (!styledMode) {\n            // Presentational\n            plotBorder.attr({\n                stroke: optionsChart.plotBorderColor,\n                'stroke-width': optionsChart.plotBorderWidth || 0,\n                fill: 'none'\n            });\n        }\n        plotBorder[verb](plotBorder.crisp({\n            x: plotLeft,\n            y: plotTop,\n            width: plotWidth,\n            height: plotHeight\n        }, -plotBorder.strokeWidth())); // #3282 plotBorder should be negative;\n        // reset\n        chart.isDirtyBox = false;\n        Chart_fireEvent(this, 'afterDrawChartBox');\n    };\n    /**\n     * Detect whether a certain chart property is needed based on inspecting its\n     * options and series. This mainly applies to the chart.inverted property,\n     * and in extensions to the chart.angular and chart.polar properties.\n     *\n     * @private\n     * @function Highcharts.Chart#propFromSeries\n     */\n    Chart.prototype.propFromSeries = function () {\n        var chart = this,\n            optionsChart = chart.options.chart,\n            seriesOptions = chart.options.series;\n        var i,\n            klass,\n            value;\n        /**\n         * The flag is set to `true` if a series of the chart is inverted.\n         *\n         * @name Highcharts.Chart#inverted\n         * @type {boolean|undefined}\n         */\n        ['inverted', 'angular', 'polar'].forEach(function (key) {\n            // The default series type's class\n            klass = Chart_seriesTypes[optionsChart.type];\n            // Get the value from available chart-wide properties\n            value =\n                // It is set in the options:\n                optionsChart[key] ||\n                    // The default series class:\n                    (klass && klass.prototype[key]);\n            // Requires it\n            // 4. Check if any the chart's series require it\n            i = seriesOptions && seriesOptions.length;\n            while (!value && i--) {\n                klass = Chart_seriesTypes[seriesOptions[i].type];\n                if (klass && klass.prototype[key]) {\n                    value = true;\n                }\n            }\n            // Set the chart property\n            chart[key] = value;\n        });\n    };\n    /**\n     * Internal function to link two or more series together, based on the\n     * `linkedTo` option. This is done from `Chart.render`, and after\n     * `Chart.addSeries` and `Series.remove`.\n     *\n     * @private\n     * @function Highcharts.Chart#linkSeries\n     * @emits Highcharts.Chart#event:afterLinkSeries\n     */\n    Chart.prototype.linkSeries = function (isUpdating) {\n        var chart = this,\n            chartSeries = chart.series;\n        // Reset links\n        chartSeries.forEach(function (series) {\n            series.linkedSeries.length = 0;\n        });\n        // Apply new links\n        chartSeries.forEach(function (series) {\n            var linkedTo = series.options.linkedTo;\n            if (Chart_isString(linkedTo)) {\n                var linkedParent = void 0;\n                if (linkedTo === ':previous') {\n                    linkedParent = chart.series[series.index - 1];\n                }\n                else {\n                    linkedParent = chart.get(linkedTo);\n                }\n                // #3341 avoid mutual linking\n                if (linkedParent &&\n                    linkedParent.linkedParent !== series) {\n                    linkedParent.linkedSeries.push(series);\n                    /**\n                     * The parent series of the current series, if the current\n                     * series has a [linkedTo](https://api.highcharts.com/highcharts/series.line.linkedTo)\n                     * setting.\n                     *\n                     * @name Highcharts.Series#linkedParent\n                     * @type {Highcharts.Series}\n                     * @readonly\n                     */\n                    series.linkedParent = linkedParent;\n                    if (linkedParent.enabledDataSorting) {\n                        series.setDataSortingOptions();\n                    }\n                    series.visible = Chart_pick(series.options.visible, linkedParent.options.visible, series.visible); // #3879\n                }\n            }\n        });\n        Chart_fireEvent(this, 'afterLinkSeries', { isUpdating: isUpdating });\n    };\n    /**\n     * Render series for the chart.\n     *\n     * @private\n     * @function Highcharts.Chart#renderSeries\n     */\n    Chart.prototype.renderSeries = function () {\n        this.series.forEach(function (serie) {\n            serie.translate();\n            serie.render();\n        });\n    };\n    /**\n     * Render all graphics for the chart. Runs internally on initialization.\n     *\n     * @private\n     * @function Highcharts.Chart#render\n     */\n    Chart.prototype.render = function () {\n        var _a;\n        var chart = this,\n            axes = chart.axes,\n            colorAxis = chart.colorAxis,\n            renderer = chart.renderer,\n            axisLayoutRuns = chart.options.chart.axisLayoutRuns || 2,\n            renderAxes = function (axes) {\n                axes.forEach(function (axis) {\n                    if (axis.visible) {\n                        axis.render();\n                }\n            });\n        };\n        var expectedSpace = 0, // Correction for X axis labels\n            // If the plot area size has changed significantly, calculate tick\n            // positions again\n            redoHorizontal = true,\n            redoVertical,\n            run = 0;\n        // Title\n        chart.setTitle();\n        // Fire an event before the margins are computed. This is where the\n        // legend is assigned.\n        Chart_fireEvent(chart, 'beforeMargins');\n        // Get stacks\n        (_a = chart.getStacks) === null || _a === void 0 ? void 0 : _a.call(chart);\n        // Get chart margins\n        chart.getMargins(true);\n        chart.setChartSize();\n        for (var _i = 0, axes_1 = axes; _i < axes_1.length; _i++) {\n            var axis = axes_1[_i];\n            var options = axis.options,\n                labels = options.labels;\n            if (chart.hasCartesianSeries && // #20948\n                axis.horiz &&\n                axis.visible &&\n                labels.enabled &&\n                axis.series.length &&\n                axis.coll !== 'colorAxis' &&\n                !chart.polar) {\n                expectedSpace = options.tickLength;\n                axis.createGroups();\n                // Calculate expected space based on dummy tick\n                var mockTick = new Axis_Tick(axis, 0, '', true), label = mockTick.createLabel('x', labels);\n                mockTick.destroy();\n                if (label &&\n                    Chart_pick(labels.reserveSpace, !Chart_isNumber(options.crossing))) {\n                    expectedSpace = label.getBBox().height +\n                        labels.distance +\n                        Math.max(options.offset || 0, 0);\n                }\n                if (expectedSpace) {\n                    label === null || label === void 0 ? void 0 : label.destroy();\n                    break;\n                }\n            }\n        }\n        // Use Math.max to prevent negative plotHeight\n        chart.plotHeight = Math.max(chart.plotHeight - expectedSpace, 0);\n        while ((redoHorizontal || redoVertical || axisLayoutRuns > 1) &&\n            run < axisLayoutRuns // #19794\n        ) {\n            var tempWidth = chart.plotWidth,\n                tempHeight = chart.plotHeight;\n            for (var _b = 0, axes_2 = axes; _b < axes_2.length; _b++) {\n                var axis = axes_2[_b];\n                if (run === 0) {\n                    // Get margins by pre-rendering axes\n                    axis.setScale();\n                }\n                else if ((axis.horiz && redoHorizontal) ||\n                    (!axis.horiz && redoVertical)) {\n                    // Update to reflect the new margins\n                    axis.setTickInterval(true);\n                }\n            }\n            if (run === 0) {\n                chart.getAxisMargins();\n            }\n            else {\n                // Check again for new, rotated or moved labels\n                chart.getMargins();\n            }\n            redoHorizontal = (tempWidth / chart.plotWidth) > (run ? 1 : 1.1);\n            redoVertical = (tempHeight / chart.plotHeight) > (run ? 1 : 1.05);\n            run++;\n        }\n        // Draw the borders and backgrounds\n        chart.drawChartBox();\n        // Axes\n        if (chart.hasCartesianSeries) {\n            renderAxes(axes);\n        }\n        else if (colorAxis && colorAxis.length) {\n            renderAxes(colorAxis);\n        }\n        // The series\n        if (!chart.seriesGroup) {\n            chart.seriesGroup = renderer.g('series-group')\n                .attr({ zIndex: 3 })\n                .shadow(chart.options.chart.seriesGroupShadow)\n                .add();\n        }\n        chart.renderSeries();\n        // Credits\n        chart.addCredits();\n        // Handle responsiveness\n        if (chart.setResponsive) {\n            chart.setResponsive();\n        }\n        // Set flag\n        chart.hasRendered = true;\n    };\n    /**\n     * Set a new credits label for the chart.\n     *\n     * @sample highcharts/credits/credits-update/\n     *         Add and update credits\n     *\n     * @function Highcharts.Chart#addCredits\n     *\n     * @param {Highcharts.CreditsOptions} [credits]\n     * A configuration object for the new credits.\n     */\n    Chart.prototype.addCredits = function (credits) {\n        var chart = this,\n            creds = Chart_merge(true,\n            this.options.credits,\n            credits);\n        if (creds.enabled && !this.credits) {\n            /**\n             * The chart's credits label. The label has an `update` method that\n             * allows setting new options as per the\n             * [credits options set](https://api.highcharts.com/highcharts/credits).\n             *\n             * @name Highcharts.Chart#credits\n             * @type {Highcharts.SVGElement}\n             */\n            this.credits = this.renderer.text(creds.text + (this.mapCredits || ''), 0, 0)\n                .addClass('highcharts-credits')\n                .on('click', function () {\n                if (creds.href) {\n                    Chart_win.location.href = creds.href;\n                }\n            })\n                .attr({\n                align: creds.position.align,\n                zIndex: 8\n            });\n            if (!chart.styledMode) {\n                this.credits.css(creds.style);\n            }\n            this.credits\n                .add()\n                .align(creds.position);\n            // Dynamically update\n            this.credits.update = function (options) {\n                chart.credits = chart.credits.destroy();\n                chart.addCredits(options);\n            };\n        }\n    };\n    /**\n     * Remove the chart and purge memory. This method is called internally\n     * before adding a second chart into the same container, as well as on\n     * window unload to prevent leaks.\n     *\n     * @sample highcharts/members/chart-destroy/\n     *         Destroy the chart from a button\n     * @sample stock/members/chart-destroy/\n     *         Destroy with Highcharts Stock\n     *\n     * @function Highcharts.Chart#destroy\n     *\n     * @emits Highcharts.Chart#event:destroy\n     */\n    Chart.prototype.destroy = function () {\n        var chart = this,\n            axes = chart.axes,\n            series = chart.series,\n            container = chart.container,\n            parentNode = container && container.parentNode;\n        var i;\n        // Fire the chart.destroy event\n        Chart_fireEvent(chart, 'destroy');\n        // Delete the chart from charts lookup array\n        if (chart.renderer.forExport) {\n            Chart_erase(Chart_charts, chart); // #6569\n        }\n        else {\n            Chart_charts[chart.index] = void 0;\n        }\n        Core_Globals.chartCount--;\n        chart.renderTo.removeAttribute('data-highcharts-chart');\n        // Remove events\n        Chart_removeEvent(chart);\n        // ==== Destroy collections:\n        // Destroy axes\n        i = axes.length;\n        while (i--) {\n            axes[i] = axes[i].destroy();\n        }\n        // Destroy scroller & scroller series before destroying base series\n        if (this.scroller && this.scroller.destroy) {\n            this.scroller.destroy();\n        }\n        // Destroy each series\n        i = series.length;\n        while (i--) {\n            series[i] = series[i].destroy();\n        }\n        // ==== Destroy chart properties:\n        [\n            'title', 'subtitle', 'chartBackground', 'plotBackground',\n            'plotBGImage', 'plotBorder', 'seriesGroup', 'clipRect', 'credits',\n            'pointer', 'rangeSelector', 'legend', 'resetZoomButton', 'tooltip',\n            'renderer'\n        ].forEach(function (name) {\n            var prop = chart[name];\n            if (prop && prop.destroy) {\n                chart[name] = prop.destroy();\n            }\n        });\n        // Remove container and all SVG, check container as it can break in IE\n        // when destroyed before finished loading\n        if (container) {\n            container.innerHTML = HTML_AST.emptyHTML;\n            Chart_removeEvent(container);\n            if (parentNode) {\n                Chart_discardElement(container);\n            }\n        }\n        // Clean it all up\n        Chart_objectEach(chart, function (val, key) {\n            delete chart[key];\n        });\n    };\n    /**\n     * Prepare for first rendering after all data are loaded.\n     *\n     * @private\n     * @function Highcharts.Chart#firstRender\n     * @emits Highcharts.Chart#event:beforeRender\n     */\n    Chart.prototype.firstRender = function () {\n        var _a;\n        var chart = this,\n            options = chart.options;\n        // Create the container\n        chart.getContainer();\n        chart.resetMargins();\n        chart.setChartSize();\n        // Set the common chart properties (mainly invert) from the given series\n        chart.propFromSeries();\n        // Get axes\n        chart.createAxes();\n        // Initialize the series\n        var series = Chart_isArray(options.series) ? options.series : [];\n        options.series = []; // Avoid mutation\n        series.forEach(\n        // #9680\n        function (serieOptions) {\n            chart.initSeries(serieOptions);\n        });\n        chart.linkSeries();\n        chart.setSortedData();\n        // Run an event after axes and series are initialized, but before\n        // render. At this stage, the series data is indexed and cached in the\n        // xData and yData arrays, so we can access those before rendering. Used\n        // in Highcharts Stock.\n        Chart_fireEvent(chart, 'beforeRender');\n        chart.render();\n        (_a = chart.pointer) === null || _a === void 0 ? void 0 : _a.getChartPosition(); // #14973\n        // Fire the load event if there are no external images\n        if (!chart.renderer.imgCount && !chart.hasLoaded) {\n            chart.onload();\n        }\n        // If the chart was rendered outside the top container, put it back in\n        // (#3679)\n        chart.temporaryDisplay(true);\n    };\n    /**\n     * Internal function that runs on chart load, async if any images are loaded\n     * in the chart. Runs the callbacks and triggers the `load` and `render`\n     * events.\n     *\n     * @private\n     * @function Highcharts.Chart#onload\n     * @emits Highcharts.Chart#event:load\n     * @emits Highcharts.Chart#event:render\n     */\n    Chart.prototype.onload = function () {\n        // Run callbacks, first the ones registered by modules, then user's one\n        this.callbacks.concat([this.callback]).forEach(function (fn) {\n            // Chart destroyed in its own callback (#3600)\n            if (fn && typeof this.index !== 'undefined') {\n                fn.apply(this, [this]);\n            }\n        }, this);\n        Chart_fireEvent(this, 'load');\n        Chart_fireEvent(this, 'render');\n        // Set up auto resize, check for not destroyed (#6068)\n        if (Chart_defined(this.index)) {\n            this.setReflow();\n        }\n        this.warnIfA11yModuleNotLoaded();\n        // Don't run again\n        this.hasLoaded = true;\n    };\n    /**\n     * Emit console warning if the a11y module is not loaded.\n     * @private\n     */\n    Chart.prototype.warnIfA11yModuleNotLoaded = function () {\n        var _a = this,\n            options = _a.options,\n            title = _a.title;\n        if (options && !this.accessibility) {\n            // Make chart behave as an image with the title as alt text\n            this.renderer.boxWrapper.attr({\n                role: 'img',\n                'aria-label': ((title && title.element.textContent) || ''\n                // #17753, < is not allowed in SVG attributes\n                ).replace(/</g, '&lt;')\n            });\n            if (!(options.accessibility && options.accessibility.enabled === false)) {\n                Chart_error('Highcharts warning: Consider including the ' +\n                    '\"accessibility.js\" module to make your chart more ' +\n                    'usable for people with disabilities. Set the ' +\n                    '\"accessibility.enabled\" option to false to remove this ' +\n                    'warning. See https://www.highcharts.com/docs/accessibility/accessibility-module.', false, this);\n            }\n        }\n    };\n    /**\n     * Add a series to the chart after render time. Note that this method should\n     * never be used when adding data synchronously at chart render time, as it\n     * adds expense to the calculations and rendering. When adding data at the\n     * same time as the chart is initialized, add the series as a configuration\n     * option instead. With multiple axes, the `offset` is dynamically adjusted.\n     *\n     * @sample highcharts/members/chart-addseries/\n     *         Add a series from a button\n     * @sample stock/members/chart-addseries/\n     *         Add a series in Highcharts Stock\n     *\n     * @function Highcharts.Chart#addSeries\n     *\n     * @param {Highcharts.SeriesOptionsType} options\n     *        The config options for the series.\n     *\n     * @param {boolean} [redraw=true]\n     *        Whether to redraw the chart after adding.\n     *\n     * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n     *        Whether to apply animation, and optionally animation\n     *        configuration. When `undefined`, it applies the animation that is\n     *        set in the `chart.animation` option.\n     *\n     * @return {Highcharts.Series}\n     *         The newly created series object.\n     *\n     * @emits Highcharts.Chart#event:addSeries\n     * @emits Highcharts.Chart#event:afterAddSeries\n     */\n    Chart.prototype.addSeries = function (options, redraw, animation) {\n        var chart = this;\n        var series;\n        if (options) { // <- not necessary\n            redraw = Chart_pick(redraw, true); // Defaults to true\n            Chart_fireEvent(chart, 'addSeries', { options: options }, function () {\n                series = chart.initSeries(options);\n                chart.isDirtyLegend = true;\n                chart.linkSeries();\n                if (series.enabledDataSorting) {\n                    // We need to call `setData` after `linkSeries`\n                    series.setData(options.data, false);\n                }\n                Chart_fireEvent(chart, 'afterAddSeries', { series: series });\n                if (redraw) {\n                    chart.redraw(animation);\n                }\n            });\n        }\n        return series;\n    };\n    /**\n     * Add an axis to the chart after render time. Note that this method should\n     * never be used when adding data synchronously at chart render time, as it\n     * adds expense to the calculations and rendering. When adding data at the\n     * same time as the chart is initialized, add the axis as a configuration\n     * option instead.\n     *\n     * @sample highcharts/members/chart-addaxis/\n     *         Add and remove axes\n     *\n     * @function Highcharts.Chart#addAxis\n     *\n     * @param {Highcharts.AxisOptions} options\n     *        The axis options.\n     *\n     * @param {boolean} [isX=false]\n     *        Whether it is an X axis or a value axis.\n     *\n     * @param {boolean} [redraw=true]\n     *        Whether to redraw the chart after adding.\n     *\n     * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n     *        Whether and how to apply animation in the redraw. When\n     *        `undefined`, it applies the animation that is set in the\n     *        `chart.animation` option.\n     *\n     * @return {Highcharts.Axis}\n     *         The newly generated Axis object.\n     */\n    Chart.prototype.addAxis = function (options, isX, redraw, animation) {\n        return this.createAxis(isX ? 'xAxis' : 'yAxis', { axis: options, redraw: redraw, animation: animation });\n    };\n    /**\n     * Add a color axis to the chart after render time. Note that this method\n     * should never be used when adding data synchronously at chart render time,\n     * as it adds expense to the calculations and rendering. When adding data at\n     * the same time as the chart is initialized, add the axis as a\n     * configuration option instead.\n     *\n     * @sample highcharts/members/chart-addaxis/\n     *         Add and remove axes\n     *\n     * @function Highcharts.Chart#addColorAxis\n     *\n     * @param {Highcharts.ColorAxisOptions} options\n     *        The axis options.\n     *\n     * @param {boolean} [redraw=true]\n     *        Whether to redraw the chart after adding.\n     *\n     * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n     *        Whether and how to apply animation in the redraw. When\n     *        `undefined`, it applies the animation that is set in the\n     *        `chart.animation` option.\n     *\n     * @return {Highcharts.Axis}\n     *         The newly generated Axis object.\n     */\n    Chart.prototype.addColorAxis = function (options, redraw, animation) {\n        return this.createAxis('colorAxis', { axis: options, redraw: redraw, animation: animation });\n    };\n    /**\n     * Factory for creating different axis types.\n     *\n     * @private\n     * @function Highcharts.Chart#createAxis\n     *\n     * @param {string} coll\n     *        An axis type.\n     *\n     * @param {...Array<*>} arguments\n     *        All arguments for the constructor.\n     *\n     * @return {Highcharts.Axis}\n     *         The newly generated Axis object.\n     */\n    Chart.prototype.createAxis = function (coll, options) {\n        var axis = new Axis_Axis(this,\n            options.axis,\n            coll);\n        if (Chart_pick(options.redraw, true)) {\n            this.redraw(options.animation);\n        }\n        return axis;\n    };\n    /**\n     * Dim the chart and show a loading text or symbol. Options for the loading\n     * screen are defined in {@link\n     * https://api.highcharts.com/highcharts/loading|the loading options}.\n     *\n     * @sample highcharts/members/chart-hideloading/\n     *         Show and hide loading from a button\n     * @sample highcharts/members/chart-showloading/\n     *         Apply different text labels\n     * @sample stock/members/chart-show-hide-loading/\n     *         Toggle loading in Highcharts Stock\n     *\n     * @function Highcharts.Chart#showLoading\n     *\n     * @param {string} [str]\n     *        An optional text to show in the loading label instead of the\n     *        default one. The default text is set in\n     *        [lang.loading](https://api.highcharts.com/highcharts/lang.loading).\n     */\n    Chart.prototype.showLoading = function (str) {\n        var chart = this,\n            options = chart.options,\n            loadingOptions = options.loading,\n            setLoadingSize = function () {\n                if (loadingDiv) {\n                    Chart_css(loadingDiv, {\n                        left: chart.plotLeft + 'px',\n                        top: chart.plotTop + 'px',\n                        width: chart.plotWidth + 'px',\n                        height: chart.plotHeight + 'px'\n                    });\n            }\n        };\n        var loadingDiv = chart.loadingDiv,\n            loadingSpan = chart.loadingSpan;\n        // Create the layer at the first call\n        if (!loadingDiv) {\n            chart.loadingDiv = loadingDiv = Chart_createElement('div', {\n                className: 'highcharts-loading highcharts-loading-hidden'\n            }, null, chart.container);\n        }\n        if (!loadingSpan) {\n            chart.loadingSpan = loadingSpan = Chart_createElement('span', { className: 'highcharts-loading-inner' }, null, loadingDiv);\n            Chart_addEvent(chart, 'redraw', setLoadingSize); // #1080\n        }\n        loadingDiv.className = 'highcharts-loading';\n        // Update text\n        HTML_AST.setElementHTML(loadingSpan, Chart_pick(str, options.lang.loading, ''));\n        if (!chart.styledMode) {\n            // Update visuals\n            Chart_css(loadingDiv, Chart_extend(loadingOptions.style, {\n                zIndex: 10\n            }));\n            Chart_css(loadingSpan, loadingOptions.labelStyle);\n            // Show it\n            if (!chart.loadingShown) {\n                Chart_css(loadingDiv, {\n                    opacity: 0,\n                    display: ''\n                });\n                Chart_animate(loadingDiv, {\n                    opacity: loadingOptions.style.opacity || 0.5\n                }, {\n                    duration: loadingOptions.showDuration || 0\n                });\n            }\n        }\n        chart.loadingShown = true;\n        setLoadingSize();\n    };\n    /**\n     * Hide the loading layer.\n     *\n     * @see Highcharts.Chart#showLoading\n     *\n     * @sample highcharts/members/chart-hideloading/\n     *         Show and hide loading from a button\n     * @sample stock/members/chart-show-hide-loading/\n     *         Toggle loading in Highcharts Stock\n     *\n     * @function Highcharts.Chart#hideLoading\n     */\n    Chart.prototype.hideLoading = function () {\n        var options = this.options,\n            loadingDiv = this.loadingDiv;\n        if (loadingDiv) {\n            loadingDiv.className =\n                'highcharts-loading highcharts-loading-hidden';\n            if (!this.styledMode) {\n                Chart_animate(loadingDiv, {\n                    opacity: 0\n                }, {\n                    duration: options.loading.hideDuration || 100,\n                    complete: function () {\n                        Chart_css(loadingDiv, { display: 'none' });\n                    }\n                });\n            }\n        }\n        this.loadingShown = false;\n    };\n    /**\n     * A generic function to update any element of the chart. Elements can be\n     * enabled and disabled, moved, re-styled, re-formatted etc.\n     *\n     * A special case is configuration objects that take arrays, for example\n     * [xAxis](https://api.highcharts.com/highcharts/xAxis),\n     * [yAxis](https://api.highcharts.com/highcharts/yAxis) or\n     * [series](https://api.highcharts.com/highcharts/series). For these\n     * collections, an `id` option is used to map the new option set to an\n     * existing object. If an existing object of the same id is not found, the\n     * corresponding item is updated. So for example, running `chart.update`\n     * with a series item without an id, will cause the existing chart's series\n     * with the same index in the series array to be updated. When the\n     * `oneToOne` parameter is true, `chart.update` will also take care of\n     * adding and removing items from the collection. Read more under the\n     * parameter description below.\n     *\n     * Note that when changing series data, `chart.update` may mutate the passed\n     * data options.\n     *\n     * See also the\n     * [responsive option set](https://api.highcharts.com/highcharts/responsive).\n     * Switching between `responsive.rules` basically runs `chart.update` under\n     * the hood.\n     *\n     * @sample highcharts/members/chart-update/\n     *         Update chart geometry\n     *\n     * @function Highcharts.Chart#update\n     *\n     * @param {Highcharts.Options} options\n     *        A configuration object for the new chart options.\n     *\n     * @param {boolean} [redraw=true]\n     *        Whether to redraw the chart.\n     *\n     * @param {boolean} [oneToOne=false]\n     *        When `true`, the `series`, `xAxis`, `yAxis` and `annotations`\n     *        collections will be updated one to one, and items will be either\n     *        added or removed to match the new updated options. For example,\n     *        if the chart has two series and we call `chart.update` with a\n     *        configuration containing three series, one will be added. If we\n     *        call `chart.update` with one series, one will be removed. Setting\n     *        an empty `series` array will remove all series, but leaving out\n     *        the`series` property will leave all series untouched. If the\n     *        series have id's, the new series options will be matched by id,\n     *        and the remaining ones removed.\n     *\n     * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n     *        Whether to apply animation, and optionally animation\n     *        configuration. When `undefined`, it applies the animation that is\n     *        set in the `chart.animation` option.\n     *\n     * @emits Highcharts.Chart#event:update\n     * @emits Highcharts.Chart#event:afterUpdate\n     */\n    Chart.prototype.update = function (options, redraw, oneToOne, animation) {\n        var chart = this,\n            adders = {\n                credits: 'addCredits',\n                title: 'setTitle',\n                subtitle: 'setSubtitle',\n                caption: 'setCaption'\n            },\n            isResponsiveOptions = options.isResponsiveOptions,\n            itemsForRemoval = [];\n        var updateAllAxes,\n            updateAllSeries,\n            runSetSize;\n        Chart_fireEvent(chart, 'update', { options: options });\n        // If there are responsive rules in action, undo the responsive rules\n        // before we apply the updated options and replay the responsive rules\n        // on top from the chart.redraw function (#9617).\n        if (!isResponsiveOptions) {\n            chart.setResponsive(false, true);\n        }\n        options = Chart_diffObjects(options, chart.options);\n        chart.userOptions = Chart_merge(chart.userOptions, options);\n        // If the top-level chart option is present, some special updates are\n        // required\n        var optionsChart = options.chart;\n        if (optionsChart) {\n            Chart_merge(true, chart.options.chart, optionsChart);\n            // Add support for deprecated zooming options like zoomType, #17861\n            this.setZoomOptions();\n            // Setter function\n            if ('className' in optionsChart) {\n                chart.setClassName(optionsChart.className);\n            }\n            if ('inverted' in optionsChart ||\n                'polar' in optionsChart ||\n                'type' in optionsChart) {\n                // Parse options.chart.inverted and options.chart.polar together\n                // with the available series.\n                chart.propFromSeries();\n                updateAllAxes = true;\n            }\n            if ('alignTicks' in optionsChart) { // #6452\n                updateAllAxes = true;\n            }\n            if ('events' in optionsChart) {\n                // Chart event handlers\n                Chart_registerEventOptions(this, optionsChart);\n            }\n            Chart_objectEach(optionsChart, function (val, key) {\n                if (chart.propsRequireUpdateSeries.indexOf('chart.' + key) !==\n                    -1) {\n                    updateAllSeries = true;\n                }\n                // Only dirty box\n                if (chart.propsRequireDirtyBox.indexOf(key) !== -1) {\n                    chart.isDirtyBox = true;\n                }\n                // Chart setSize\n                if (chart.propsRequireReflow.indexOf(key) !== -1) {\n                    chart.isDirtyBox = true;\n                    if (!isResponsiveOptions) {\n                        runSetSize = true;\n                    }\n                }\n            });\n            if (!chart.styledMode && optionsChart.style) {\n                chart.renderer.setStyle(chart.options.chart.style || {});\n            }\n        }\n        // Moved up, because tooltip needs updated plotOptions (#6218)\n        if (!chart.styledMode && options.colors) {\n            this.options.colors = options.colors;\n        }\n        // Some option structures correspond one-to-one to chart objects that\n        // have update methods, for example\n        // options.credits => chart.credits\n        // options.legend => chart.legend\n        // options.title => chart.title\n        // options.tooltip => chart.tooltip\n        // options.subtitle => chart.subtitle\n        // options.mapNavigation => chart.mapNavigation\n        // options.navigator => chart.navigator\n        // options.scrollbar => chart.scrollbar\n        Chart_objectEach(options, function (val, key) {\n            if (chart[key] &&\n                typeof chart[key].update === 'function') {\n                chart[key].update(val, false);\n                // If a one-to-one object does not exist, look for an adder function\n            }\n            else if (typeof chart[adders[key]] === 'function') {\n                chart[adders[key]](val);\n                // Else, just merge the options. For nodes like loading, noData,\n                // plotOptions\n            }\n            else if (key !== 'colors' &&\n                chart.collectionsWithUpdate.indexOf(key) === -1) {\n                Chart_merge(true, chart.options[key], options[key]);\n            }\n            if (key !== 'chart' &&\n                chart.propsRequireUpdateSeries.indexOf(key) !== -1) {\n                updateAllSeries = true;\n            }\n        });\n        // Setters for collections. For axes and series, each item is referred\n        // by an id. If the id is not found, it defaults to the corresponding\n        // item in the collection, so setting one series without an id, will\n        // update the first series in the chart. Setting two series without\n        // an id will update the first and the second respectively (#6019)\n        // chart.update and responsive.\n        this.collectionsWithUpdate.forEach(function (coll) {\n            if (options[coll]) {\n                Chart_splat(options[coll]).forEach(function (newOptions, i) {\n                    var hasId = Chart_defined(newOptions.id);\n                    var item;\n                    // Match by id\n                    if (hasId) {\n                        item = chart.get(newOptions.id);\n                    }\n                    // No match by id found, match by index instead\n                    if (!item && chart[coll]) {\n                        item = chart[coll][Chart_pick(newOptions.index, i)];\n                        // Check if we grabbed an item with an existing but\n                        // different id (#13541). Check that the item in this\n                        // position is not internal (navigator).\n                        if (item && ((hasId && Chart_defined(item.options.id)) ||\n                            item.options.isInternal)) {\n                            item = void 0;\n                        }\n                    }\n                    if (item && item.coll === coll) {\n                        item.update(newOptions, false);\n                        if (oneToOne) {\n                            item.touched = true;\n                        }\n                    }\n                    // If oneToOne and no matching item is found, add one\n                    if (!item && oneToOne && chart.collectionsWithInit[coll]) {\n                        chart.collectionsWithInit[coll][0].apply(chart, \n                        // [newOptions, ...extraArguments, redraw=false]\n                        [\n                            newOptions\n                        ].concat(\n                        // Not all initializers require extra args\n                        chart.collectionsWithInit[coll][1] || []).concat([\n                            false\n                        ])).touched = true;\n                    }\n                });\n                // Add items for removal\n                if (oneToOne) {\n                    chart[coll].forEach(function (item) {\n                        if (!item.touched && !item.options.isInternal) {\n                            itemsForRemoval.push(item);\n                        }\n                        else {\n                            delete item.touched;\n                        }\n                    });\n                }\n            }\n        });\n        itemsForRemoval.forEach(function (item) {\n            if (item.chart && item.remove) { // #9097, avoid removing twice\n                item.remove(false);\n            }\n        });\n        if (updateAllAxes) {\n            chart.axes.forEach(function (axis) {\n                axis.update({}, false);\n            });\n        }\n        // Certain options require the whole series structure to be thrown away\n        // and rebuilt\n        if (updateAllSeries) {\n            chart.getSeriesOrderByLinks().forEach(function (series) {\n                // Avoid removed navigator series\n                if (series.chart) {\n                    series.update({}, false);\n                }\n            }, this);\n        }\n        // Update size. Redraw is forced.\n        var newWidth = optionsChart && optionsChart.width;\n        var newHeight = optionsChart && (Chart_isString(optionsChart.height) ?\n                Chart_relativeLength(optionsChart.height,\n            newWidth || chart.chartWidth) :\n                optionsChart.height);\n        if (\n        // In this case, run chart.setSize with newWidth and newHeight which\n        // are undefined, only for reflowing chart elements because margin\n        // or spacing has been set (#8190)\n        runSetSize ||\n            // In this case, the size is actually set\n            (Chart_isNumber(newWidth) && newWidth !== chart.chartWidth) ||\n            (Chart_isNumber(newHeight) && newHeight !== chart.chartHeight)) {\n            chart.setSize(newWidth, newHeight, animation);\n        }\n        else if (Chart_pick(redraw, true)) {\n            chart.redraw(animation);\n        }\n        Chart_fireEvent(chart, 'afterUpdate', {\n            options: options,\n            redraw: redraw,\n            animation: animation\n        });\n    };\n    /**\n     * Shortcut to set the subtitle options. This can also be done from {@link\n     * Chart#update} or {@link Chart#setTitle}.\n     *\n     * @function Highcharts.Chart#setSubtitle\n     *\n     * @param {Highcharts.SubtitleOptions} options\n     *        New subtitle options. The subtitle text itself is set by the\n     *        `options.text` property.\n     */\n    Chart.prototype.setSubtitle = function (options, redraw) {\n        this.applyDescription('subtitle', options);\n        this.layOutTitles(redraw);\n    };\n    /**\n     * Set the caption options. This can also be done from {@link\n     * Chart#update}.\n     *\n     * @function Highcharts.Chart#setCaption\n     *\n     * @param {Highcharts.CaptionOptions} options\n     *        New caption options. The caption text itself is set by the\n     *        `options.text` property.\n     */\n    Chart.prototype.setCaption = function (options, redraw) {\n        this.applyDescription('caption', options);\n        this.layOutTitles(redraw);\n    };\n    /**\n     * Display the zoom button, so users can reset zoom to the default view\n     * settings.\n     *\n     * @function Highcharts.Chart#showResetZoom\n     *\n     * @emits Highcharts.Chart#event:afterShowResetZoom\n     * @emits Highcharts.Chart#event:beforeShowResetZoom\n     */\n    Chart.prototype.showResetZoom = function () {\n        var chart = this,\n            lang = Chart_defaultOptions.lang,\n            btnOptions = chart.zooming.resetButton,\n            theme = btnOptions.theme,\n            alignTo = (btnOptions.relativeTo === 'chart' ||\n                btnOptions.relativeTo === 'spacingBox' ?\n                null :\n                'plotBox');\n        /**\n         * @private\n         */\n        function zoomOut() {\n            chart.zoomOut();\n        }\n        Chart_fireEvent(this, 'beforeShowResetZoom', null, function () {\n            chart.resetZoomButton = chart.renderer\n                .button(lang.resetZoom, null, null, zoomOut, theme)\n                .attr({\n                align: btnOptions.position.align,\n                title: lang.resetZoomTitle\n            })\n                .addClass('highcharts-reset-zoom')\n                .add()\n                .align(btnOptions.position, false, alignTo);\n        });\n        Chart_fireEvent(this, 'afterShowResetZoom');\n    };\n    /**\n     * Zoom the chart out after a user has zoomed in. See also\n     * [Axis.setExtremes](/class-reference/Highcharts.Axis#setExtremes).\n     *\n     * @function Highcharts.Chart#zoomOut\n     *\n     * @emits Highcharts.Chart#event:selection\n     */\n    Chart.prototype.zoomOut = function () {\n        var _this = this;\n        Chart_fireEvent(this, 'selection', { resetSelection: true }, function () { return _this.transform({ reset: true, trigger: 'zoom' }); });\n    };\n    /**\n     * Pan the chart by dragging the mouse across the pane. This function is\n     * called on mouse move, and the distance to pan is computed from chartX\n     * compared to the first chartX position in the dragging operation.\n     *\n     * @private\n     * @function Highcharts.Chart#pan\n     * @param {Highcharts.PointerEventObject} event\n     * @param {string} panning\n     */\n    Chart.prototype.pan = function (event, panning) {\n        var chart = this,\n            panningOptions = (typeof panning === 'object' ?\n                panning :\n                {\n                    enabled: panning,\n                    type: 'x'\n                }),\n            type = panningOptions.type,\n            axes = type && chart[{\n                x: 'xAxis',\n                xy: 'axes',\n                y: 'yAxis'\n            }[type]]\n                .filter(function (axis) {\n                return axis.options.panningEnabled && !axis.options.isInternal;\n        }), chartOptions = chart.options.chart;\n        if (chartOptions === null || chartOptions === void 0 ? void 0 : chartOptions.panning) {\n            chartOptions.panning = panningOptions;\n        }\n        Chart_fireEvent(this, 'pan', { originalEvent: event }, function () {\n            chart.transform({\n                axes: axes,\n                event: event,\n                to: {\n                    x: event.chartX - (chart.mouseDownX || 0),\n                    y: event.chartY - (chart.mouseDownY || 0)\n                },\n                trigger: 'pan'\n            });\n            Chart_css(chart.container, { cursor: 'move' });\n        });\n    };\n    /**\n     * Pan and scale the chart. Used internally by mouse-pan, touch-pan,\n     * touch-zoom, and mousewheel zoom.\n     *\n     * The main positioning logic is created around two imaginary boxes. What is\n     * currently within the `from` rectangle, should be transformed to fill up\n     * the `to` rectangle.\n     * - In a mouse zoom, the `from` rectangle is the selection, while the `to`\n     *   rectangle is the full plot area.\n     * - In a touch zoom, the `from` rectangle is made up of the last two-finger\n     *   touch, while the `to`` rectangle is the current touch.\n     * - In a mousewheel zoom, the `to` rectangle is a 10x10 px square,\n     *   while the `to` rectangle reflects the scale around that.\n     *\n     * @private\n     * @function Highcharts.Chart#transform\n     */\n    Chart.prototype.transform = function (params) {\n        var _a;\n        var _this = this;\n        var _b,\n            _c,\n            _d;\n        var _e = params.axes,\n            axes = _e === void 0 ? this.axes : _e,\n            event = params.event,\n            _f = params.from,\n            from = _f === void 0 ? {} : _f,\n            reset = params.reset,\n            selection = params.selection,\n            _g = params.to,\n            to = _g === void 0 ? {} : _g,\n            trigger = params.trigger,\n            _h = this,\n            inverted = _h.inverted,\n            time = _h.time;\n        var hasZoomed = false,\n            displayButton,\n            isAnyAxisPanning;\n        // Remove active points for shared tooltip\n        (_b = this.hoverPoints) === null || _b === void 0 ? void 0 : _b.forEach(function (point) { return point.setState(); });\n        for (var _i = 0, axes_3 = axes; _i < axes_3.length; _i++) {\n            var axis = axes_3[_i];\n            var horiz = axis.horiz, len = axis.len, _j = axis.minPointOffset, minPointOffset = _j === void 0 ? 0 : _j, options = axis.options, reversed = axis.reversed, wh = horiz ? 'width' : 'height', xy = horiz ? 'x' : 'y', toLength = Chart_pick(to[wh], axis.len), fromLength = Chart_pick(from[wh], axis.len), \n                // If fingers pinched very close on this axis, treat as pan\n                scale = Math.abs(toLength) < 10 ?\n                    1 :\n                    toLength / fromLength, fromCenter = (from[xy] || 0) + fromLength / 2 - axis.pos, toCenter = ((_c = to[xy]) !== null && _c !== void 0 ? _c : axis.pos) +\n                    toLength / 2 - axis.pos, move = fromCenter - toCenter / scale, pointRangeDirection = (reversed && !inverted) ||\n                    (!reversed && inverted) ?\n                    -1 :\n                    1, minPx = move;\n            // Zooming in multiple panes, zoom only in the pane that receives\n            // the input\n            if (!reset && (fromCenter < 0 || fromCenter > axis.len)) {\n                continue;\n            }\n            var newMin = axis.toValue(minPx,\n                true) +\n                    // Don't apply offset for selection (#20784)\n                    (selection || axis.isOrdinal ?\n                        0 : minPointOffset * pointRangeDirection),\n                newMax = axis.toValue(minPx + len / scale,\n                true) -\n                    (\n                    // Don't apply offset for selection (#20784)\n                    selection || axis.isOrdinal ?\n                        0 :\n                        ((minPointOffset * pointRangeDirection) ||\n                            // Polar zoom tests failed when this was not\n                            // commented:\n                            // (axis.isXAxis && axis.pointRangePadding) ||\n                            0)),\n                allExtremes = axis.allExtremes;\n            if (newMin > newMax) {\n                _a = [newMax, newMin], newMin = _a[0], newMax = _a[1];\n            }\n            // General calculations of the full data extremes. It is calculated\n            // on the first call to transform, then reused for subsequent\n            // touch/pan calls. (#11315).\n            if (scale === 1 &&\n                !reset &&\n                axis.coll === 'yAxis' &&\n                !allExtremes) {\n                for (var _k = 0, _l = axis.series; _k < _l.length; _k++) {\n                    var series = _l[_k];\n                    var seriesExtremes = series.getExtremes(series.getProcessedData(true).modified\n                            .getColumn('y') || [],\n                        true);\n                    allExtremes !== null && allExtremes !== void 0 ? allExtremes : (allExtremes = {\n                        dataMin: Number.MAX_VALUE,\n                        dataMax: -Number.MAX_VALUE\n                    });\n                    if (Chart_isNumber(seriesExtremes.dataMin) &&\n                        Chart_isNumber(seriesExtremes.dataMax)) {\n                        allExtremes.dataMin = Math.min(seriesExtremes.dataMin, allExtremes.dataMin);\n                        allExtremes.dataMax = Math.max(seriesExtremes.dataMax, allExtremes.dataMax);\n                    }\n                }\n                axis.allExtremes = allExtremes;\n            }\n            var _m = Chart_extend(axis.getExtremes(), allExtremes || {}), dataMin = _m.dataMin, dataMax = _m.dataMax, min = _m.min, max = _m.max, optionsMin = time.parse(options.min), optionsMax = time.parse(options.max), \n                // For boosted chart where data extremes are skipped\n                safeDataMin = dataMin !== null && dataMin !== void 0 ? dataMin : optionsMin, safeDataMax = dataMax !== null && dataMax !== void 0 ? dataMax : optionsMax, range = newMax - newMin, padRange = axis.categories ? 0 : Math.min(range, safeDataMax - safeDataMin), paddedMin = safeDataMin - padRange * (Chart_defined(optionsMin) ? 0 : options.minPadding), paddedMax = safeDataMax + padRange * (Chart_defined(optionsMax) ? 0 : options.maxPadding), \n                // We're allowed to zoom outside the data extremes if we're\n                // dealing with a bubble chart, if we're panning, or if we're\n                // pinching or mousewheeling in.\n                allowZoomOutside = axis.allowZoomOutside ||\n                    scale === 1 ||\n                    (trigger !== 'zoom' && scale > 1), \n                // Calculate the floor and the ceiling\n                floor = Math.min(optionsMin !== null && optionsMin !== void 0 ? optionsMin : paddedMin, paddedMin, allowZoomOutside ? min : paddedMin), ceiling = Math.max(optionsMax !== null && optionsMax !== void 0 ? optionsMax : paddedMax, paddedMax, allowZoomOutside ? max : paddedMax);\n            // It is not necessary to calculate extremes on ordinal axis,\n            // because they are already calculated, so we don't want to override\n            // them.\n            if (!axis.isOrdinal ||\n                axis.options.overscroll || // #21316\n                scale !== 1 ||\n                reset) {\n                // If the new range spills over, either to the min or max,\n                // adjust it.\n                if (newMin < floor) {\n                    newMin = floor;\n                    if (scale >= 1) {\n                        newMax = newMin + range;\n                    }\n                }\n                if (newMax > ceiling) {\n                    newMax = ceiling;\n                    if (scale >= 1) {\n                        newMin = newMax - range;\n                    }\n                }\n                // Set new extremes if they are actually new\n                if (reset || (axis.series.length &&\n                    (newMin !== min || newMax !== max) &&\n                    newMin >= floor &&\n                    newMax <= ceiling)) {\n                    if (selection) {\n                        selection[axis.coll].push({\n                            axis: axis,\n                            min: newMin,\n                            max: newMax\n                        });\n                    }\n                    else {\n                        // Temporarily flag the axis as `isPanning` in order to\n                        // disallow certain axis padding options that would make\n                        // panning/zooming hard. Reset and redraw after the\n                        // operation has finished.\n                        axis.isPanning = trigger !== 'zoom';\n                        if (axis.isPanning) {\n                            isAnyAxisPanning = true; // #21319\n                        }\n                        axis.setExtremes(reset ? void 0 : newMin, reset ? void 0 : newMax, false, false, { move: move, trigger: trigger, scale: scale });\n                        if (!reset &&\n                            (newMin > floor || newMax < ceiling) &&\n                            trigger !== 'mousewheel') {\n                            displayButton = true;\n                        }\n                    }\n                    hasZoomed = true;\n                }\n                if (event) {\n                    this[horiz ? 'mouseDownX' : 'mouseDownY'] =\n                        event[horiz ? 'chartX' : 'chartY'];\n                }\n            }\n        }\n        if (hasZoomed) {\n            if (selection) {\n                Chart_fireEvent(this, 'selection', selection, \n                // Run transform again, this time without the selection data\n                // so that the transform is applied.\n                function () {\n                    delete params.selection;\n                    params.trigger = 'zoom';\n                    _this.transform(params);\n                });\n            }\n            else {\n                // Show or hide the Reset zoom button, but not while panning\n                if (displayButton &&\n                    !isAnyAxisPanning &&\n                    !this.resetZoomButton) {\n                    this.showResetZoom();\n                }\n                else if (!displayButton && this.resetZoomButton) {\n                    this.resetZoomButton = this.resetZoomButton.destroy();\n                }\n                this.redraw(trigger === 'zoom' &&\n                    ((_d = this.options.chart.animation) !== null && _d !== void 0 ? _d : this.pointCount < 100));\n            }\n        }\n        return hasZoomed;\n    };\n    return Chart;\n}());\nChart_extend(Chart.prototype, {\n    // Hook for adding callbacks in modules\n    callbacks: [],\n    /**\n     * These collections (arrays) implement `Chart.addSomething` method used in\n     * chart.update() to create new object in the collection. Equivalent for\n     * deleting is resolved by simple `Something.remove()`.\n     *\n     * Note: We need to define these references after initializers are bound to\n     * chart's prototype.\n     *\n     * @private\n     */\n    collectionsWithInit: {\n        // CollectionName: [ initializingMethod, [extraArguments] ]\n        xAxis: [Chart.prototype.addAxis, [true]],\n        yAxis: [Chart.prototype.addAxis, [false]],\n        series: [Chart.prototype.addSeries]\n    },\n    /**\n     * These collections (arrays) implement update() methods with support for\n     * one-to-one option.\n     * @private\n     */\n    collectionsWithUpdate: [\n        'xAxis',\n        'yAxis',\n        'series'\n    ],\n    /**\n     * These properties cause isDirtyBox to be set to true when updating. Can be\n     * extended from plugins.\n     * @private\n     */\n    propsRequireDirtyBox: [\n        'backgroundColor',\n        'borderColor',\n        'borderWidth',\n        'borderRadius',\n        'plotBackgroundColor',\n        'plotBackgroundImage',\n        'plotBorderColor',\n        'plotBorderWidth',\n        'plotShadow',\n        'shadow'\n    ],\n    /**\n     * These properties require a full reflow of chart elements, best\n     * implemented through running `Chart.setSize` internally (#8190).\n     * @private\n     */\n    propsRequireReflow: [\n        'margin',\n        'marginTop',\n        'marginRight',\n        'marginBottom',\n        'marginLeft',\n        'spacing',\n        'spacingTop',\n        'spacingRight',\n        'spacingBottom',\n        'spacingLeft'\n    ],\n    /**\n     * These properties cause all series to be updated when updating. Can be\n     * extended from plugins.\n     * @private\n     */\n    propsRequireUpdateSeries: [\n        'chart.inverted',\n        'chart.polar',\n        'chart.ignoreHiddenSeries',\n        'chart.type',\n        'colors',\n        'plotOptions',\n        'time',\n        'tooltip'\n    ]\n});\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Chart_Chart = (Chart);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * Callback for chart constructors.\n *\n * @callback Highcharts.ChartCallbackFunction\n *\n * @param {Highcharts.Chart} chart\n *        Created chart.\n */\n/**\n * Format a number and return a string based on input settings.\n *\n * @callback Highcharts.NumberFormatterCallbackFunction\n *\n * @param {number} number\n *        The input number to format.\n *\n * @param {number} decimals\n *        The amount of decimals. A value of -1 preserves the amount in the\n *        input number.\n *\n * @param {string} [decimalPoint]\n *        The decimal point, defaults to the one given in the lang options, or\n *        a dot.\n *\n * @param {string} [thousandsSep]\n *        The thousands separator, defaults to the one given in the lang\n *        options, or a space character.\n *\n * @return {string} The formatted number.\n */\n/**\n * The chart title. The title has an `update` method that allows modifying the\n * options directly or indirectly via `chart.update`.\n *\n * @interface Highcharts.TitleObject\n * @extends Highcharts.SVGElement\n */ /**\n* Modify options for the title.\n*\n* @function Highcharts.TitleObject#update\n*\n* @param {Highcharts.TitleOptions} titleOptions\n*        Options to modify.\n*\n* @param {boolean} [redraw=true]\n*        Whether to redraw the chart after the title is altered. If doing more\n*        operations on the chart, it is a good idea to set redraw to false and\n*        call {@link Chart#redraw} after.\n*/\n/**\n * The chart subtitle. The subtitle has an `update` method that\n * allows modifying the options directly or indirectly via\n * `chart.update`.\n *\n * @interface Highcharts.SubtitleObject\n * @extends Highcharts.SVGElement\n */ /**\n* Modify options for the subtitle.\n*\n* @function Highcharts.SubtitleObject#update\n*\n* @param {Highcharts.SubtitleOptions} subtitleOptions\n*        Options to modify.\n*\n* @param {boolean} [redraw=true]\n*        Whether to redraw the chart after the subtitle is altered. If doing\n*        more operations on the chart, it is a good idea to set redraw to false\n*        and call {@link Chart#redraw} after.\n*/\n/**\n * The chart caption. The caption has an `update` method that\n * allows modifying the options directly or indirectly via\n * `chart.update`.\n *\n * @interface Highcharts.CaptionObject\n * @extends Highcharts.SVGElement\n */ /**\n* Modify options for the caption.\n*\n* @function Highcharts.CaptionObject#update\n*\n* @param {Highcharts.CaptionOptions} captionOptions\n*        Options to modify.\n*\n* @param {boolean} [redraw=true]\n*        Whether to redraw the chart after the caption is altered. If doing\n*        more operations on the chart, it is a good idea to set redraw to false\n*        and call {@link Chart#redraw} after.\n*/\n/**\n * @interface Highcharts.ChartIsInsideOptionsObject\n */ /**\n* @name Highcharts.ChartIsInsideOptionsObject#axis\n* @type {Highcharts.Axis|undefined}\n*/ /**\n* @name Highcharts.ChartIsInsideOptionsObject#ignoreX\n* @type {boolean|undefined}\n*/ /**\n* @name Highcharts.ChartIsInsideOptionsObject#ignoreY\n* @type {boolean|undefined}\n*/ /**\n* @name Highcharts.ChartIsInsideOptionsObject#inverted\n* @type {boolean|undefined}\n*/ /**\n* @name Highcharts.ChartIsInsideOptionsObject#paneCoordinates\n* @type {boolean|undefined}\n*/ /**\n* @name Highcharts.ChartIsInsideOptionsObject#series\n* @type {Highcharts.Series|undefined}\n*/ /**\n* @name Highcharts.ChartIsInsideOptionsObject#visiblePlotOnly\n* @type {boolean|undefined}\n*/\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Extensions/ScrollablePlotArea.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 *  Highcharts feature to make the Y axis stay fixed when scrolling the chart\n *  horizontally on mobile devices. Supports left and right side axes.\n */\n\n\nvar ScrollablePlotArea_stop = AnimationUtilities.stop;\n\nvar ScrollablePlotArea_composed = Core_Globals.composed;\n\n\nvar ScrollablePlotArea_addEvent = Core_Utilities.addEvent, ScrollablePlotArea_createElement = Core_Utilities.createElement, ScrollablePlotArea_css = Core_Utilities.css, ScrollablePlotArea_defined = Core_Utilities.defined, ScrollablePlotArea_erase = Core_Utilities.erase, ScrollablePlotArea_merge = Core_Utilities.merge, ScrollablePlotArea_pushUnique = Core_Utilities.pushUnique;\n/* *\n *\n *  Functions\n *\n * */\n/** @private */\nfunction onChartRender() {\n    var scrollablePlotArea = this.scrollablePlotArea;\n    if ((this.scrollablePixelsX || this.scrollablePixelsY) &&\n        !scrollablePlotArea) {\n        this.scrollablePlotArea = scrollablePlotArea = new ScrollablePlotArea(this);\n    }\n    scrollablePlotArea === null || scrollablePlotArea === void 0 ? void 0 : scrollablePlotArea.applyFixed();\n}\n/** @private */\nfunction markDirty() {\n    if (this.chart.scrollablePlotArea) {\n        this.chart.scrollablePlotArea.isDirty = true;\n    }\n}\nvar ScrollablePlotArea = /** @class */ (function () {\n    function ScrollablePlotArea(chart) {\n        var _a,\n            _b;\n        var chartOptions = chart.options.chart,\n            Renderer = Renderer_RendererRegistry.getRendererType(),\n            scrollableOptions = chartOptions.scrollablePlotArea || {},\n            moveFixedElements = this.moveFixedElements.bind(this),\n            styles = {\n                WebkitOverflowScrolling: 'touch',\n                overflowX: 'hidden',\n                overflowY: 'hidden'\n            };\n        if (chart.scrollablePixelsX) {\n            styles.overflowX = 'auto';\n        }\n        if (chart.scrollablePixelsY) {\n            styles.overflowY = 'auto';\n        }\n        this.chart = chart;\n        // Insert a container with relative position that scrolling and fixed\n        // container renders to (#10555)\n        var parentDiv = this.parentDiv = ScrollablePlotArea_createElement('div', {\n                className: 'highcharts-scrolling-parent'\n            }, {\n                position: 'relative'\n            },\n            chart.renderTo), \n            // Add the necessary divs to provide scrolling\n            scrollingContainer = this.scrollingContainer = ScrollablePlotArea_createElement('div', {\n                'className': 'highcharts-scrolling'\n            },\n            styles,\n            parentDiv),\n            innerContainer = this.innerContainer = ScrollablePlotArea_createElement('div', {\n                'className': 'highcharts-inner-container'\n            },\n            void 0,\n            scrollingContainer),\n            fixedDiv = this.fixedDiv = ScrollablePlotArea_createElement('div', {\n                className: 'highcharts-fixed'\n            }, {\n                position: 'absolute',\n                overflow: 'hidden',\n                pointerEvents: 'none',\n                zIndex: (((_a = chartOptions.style) === null || _a === void 0 ? void 0 : _a.zIndex) || 0) + 2,\n                top: 0\n            },\n            void 0,\n            true),\n            fixedRenderer = this.fixedRenderer = new Renderer(fixedDiv,\n            chart.chartWidth,\n            chart.chartHeight,\n            chartOptions.style);\n        // Mask\n        this.mask = fixedRenderer\n            .path()\n            .attr({\n            fill: chartOptions.backgroundColor || '#fff',\n            'fill-opacity': (_b = scrollableOptions.opacity) !== null && _b !== void 0 ? _b : 0.85,\n            zIndex: -1\n        })\n            .addClass('highcharts-scrollable-mask')\n            .add();\n        scrollingContainer.parentNode.insertBefore(fixedDiv, scrollingContainer);\n        ScrollablePlotArea_css(chart.renderTo, { overflow: 'visible' });\n        ScrollablePlotArea_addEvent(chart, 'afterShowResetZoom', moveFixedElements);\n        ScrollablePlotArea_addEvent(chart, 'afterApplyDrilldown', moveFixedElements);\n        ScrollablePlotArea_addEvent(chart, 'afterLayOutTitles', moveFixedElements);\n        // On scroll, reset the chart position because it applies to the\n        // scrolled container\n        var lastHoverPoint;\n        ScrollablePlotArea_addEvent(scrollingContainer, 'scroll', function () {\n            var pointer = chart.pointer,\n                hoverPoint = chart.hoverPoint;\n            if (pointer) {\n                delete pointer.chartPosition;\n                if (hoverPoint) {\n                    lastHoverPoint = hoverPoint;\n                }\n                pointer.runPointActions(void 0, lastHoverPoint, true);\n            }\n        });\n        // Now move the container inside\n        innerContainer.appendChild(chart.container);\n    }\n    ScrollablePlotArea.compose = function (AxisClass, ChartClass, SeriesClass) {\n        var _this = this;\n        if (ScrollablePlotArea_pushUnique(ScrollablePlotArea_composed, this.compose)) {\n            ScrollablePlotArea_addEvent(AxisClass, 'afterInit', markDirty);\n            ScrollablePlotArea_addEvent(ChartClass, 'afterSetChartSize', function (e) {\n                return _this.afterSetSize(e.target, e);\n            });\n            ScrollablePlotArea_addEvent(ChartClass, 'render', onChartRender);\n            ScrollablePlotArea_addEvent(SeriesClass, 'show', markDirty);\n        }\n    };\n    ScrollablePlotArea.afterSetSize = function (chart, e) {\n        var _a = chart.options.chart.scrollablePlotArea || {},\n            minWidth = _a.minWidth,\n            minHeight = _a.minHeight,\n            clipBox = chart.clipBox,\n            plotBox = chart.plotBox,\n            inverted = chart.inverted,\n            renderer = chart.renderer;\n        var scrollablePixelsX,\n            scrollablePixelsY,\n            recalculateHoriz;\n        if (!renderer.forExport) {\n            // The amount of pixels to scroll, the difference between chart\n            // width and scrollable width\n            if (minWidth) {\n                chart.scrollablePixelsX = scrollablePixelsX = Math.max(0, minWidth - chart.chartWidth);\n                if (scrollablePixelsX) {\n                    chart.scrollablePlotBox = ScrollablePlotArea_merge(chart.plotBox);\n                    plotBox.width = chart.plotWidth += scrollablePixelsX;\n                    clipBox[inverted ? 'height' : 'width'] += scrollablePixelsX;\n                    recalculateHoriz = true;\n                }\n                // Currently we can only do either X or Y\n            }\n            else if (minHeight) {\n                chart.scrollablePixelsY = scrollablePixelsY = Math.max(0, minHeight - chart.chartHeight);\n                if (ScrollablePlotArea_defined(scrollablePixelsY)) {\n                    chart.scrollablePlotBox = ScrollablePlotArea_merge(chart.plotBox);\n                    plotBox.height = chart.plotHeight += scrollablePixelsY;\n                    clipBox[inverted ? 'width' : 'height'] += scrollablePixelsY;\n                    recalculateHoriz = false;\n                }\n            }\n            if (ScrollablePlotArea_defined(recalculateHoriz) && !e.skipAxes) {\n                for (var _i = 0, _b = chart.axes; _i < _b.length; _i++) {\n                    var axis = _b[_i];\n                    // Apply the corrected plot size to the axes of the other\n                    // orientation than the scrolling direction\n                    if (axis.horiz === recalculateHoriz ||\n                        // Or parallel axes\n                        (chart.hasParallelCoordinates && axis.coll === 'yAxis')) {\n                        axis.setAxisSize();\n                        axis.setAxisTranslation();\n                    }\n                }\n            }\n        }\n    };\n    ScrollablePlotArea.prototype.applyFixed = function () {\n        var _a;\n        var _b = this,\n            chart = _b.chart,\n            fixedRenderer = _b.fixedRenderer,\n            isDirty = _b.isDirty,\n            scrollingContainer = _b.scrollingContainer,\n            axisOffset = chart.axisOffset,\n            chartWidth = chart.chartWidth,\n            chartHeight = chart.chartHeight,\n            container = chart.container,\n            plotHeight = chart.plotHeight,\n            plotLeft = chart.plotLeft,\n            plotTop = chart.plotTop,\n            plotWidth = chart.plotWidth,\n            _c = chart.scrollablePixelsX,\n            scrollablePixelsX = _c === void 0 ? 0 : _c,\n            _d = chart.scrollablePixelsY,\n            scrollablePixelsY = _d === void 0 ? 0 : _d,\n            chartOptions = chart.options.chart,\n            scrollableOptions = chartOptions.scrollablePlotArea || {},\n            _e = scrollableOptions.scrollPositionX,\n            scrollPositionX = _e === void 0 ? 0 : _e,\n            _f = scrollableOptions.scrollPositionY,\n            scrollPositionY = _f === void 0 ? 0 : _f,\n            scrollableWidth = chartWidth + scrollablePixelsX,\n            scrollableHeight = chartHeight + scrollablePixelsY;\n        // Set the size of the fixed renderer to the visible width\n        fixedRenderer.setSize(chartWidth, chartHeight);\n        if (isDirty !== null && isDirty !== void 0 ? isDirty : true) {\n            this.isDirty = false;\n            this.moveFixedElements();\n        }\n        // Increase the size of the scrollable renderer and background\n        ScrollablePlotArea_stop(chart.container);\n        ScrollablePlotArea_css(container, {\n            width: \"\" + scrollableWidth + \"px\",\n            height: \"\" + scrollableHeight + \"px\"\n        });\n        chart.renderer.boxWrapper.attr({\n            width: scrollableWidth,\n            height: scrollableHeight,\n            viewBox: [0, 0, scrollableWidth, scrollableHeight].join(' ')\n        });\n        (_a = chart.chartBackground) === null || _a === void 0 ? void 0 : _a.attr({\n            width: scrollableWidth,\n            height: scrollableHeight\n        });\n        ScrollablePlotArea_css(scrollingContainer, {\n            width: \"\" + chartWidth + \"px\",\n            height: \"\" + chartHeight + \"px\"\n        });\n        // Set scroll position the first time (this.isDirty was undefined at\n        // the top of this function)\n        if (!ScrollablePlotArea_defined(isDirty)) {\n            scrollingContainer.scrollLeft = scrollablePixelsX * scrollPositionX;\n            scrollingContainer.scrollTop = scrollablePixelsY * scrollPositionY;\n        }\n        // Mask behind the left and right side\n        var maskTop = plotTop - axisOffset[0] - 1,\n            maskLeft = plotLeft - axisOffset[3] - 1,\n            maskBottom = plotTop + plotHeight + axisOffset[2] + 1,\n            maskRight = plotLeft + plotWidth + axisOffset[1] + 1,\n            maskPlotRight = plotLeft + plotWidth - scrollablePixelsX,\n            maskPlotBottom = plotTop + plotHeight - scrollablePixelsY;\n        var d = [['M', 0, 0]];\n        if (scrollablePixelsX) {\n            d = [\n                // Left side\n                ['M', 0, maskTop],\n                ['L', plotLeft - 1, maskTop],\n                ['L', plotLeft - 1, maskBottom],\n                ['L', 0, maskBottom],\n                ['Z'],\n                // Right side\n                ['M', maskPlotRight, maskTop],\n                ['L', chartWidth, maskTop],\n                ['L', chartWidth, maskBottom],\n                ['L', maskPlotRight, maskBottom],\n                ['Z']\n            ];\n        }\n        else if (scrollablePixelsY) {\n            d = [\n                // Top side\n                ['M', maskLeft, 0],\n                ['L', maskLeft, plotTop - 1],\n                ['L', maskRight, plotTop - 1],\n                ['L', maskRight, 0],\n                ['Z'],\n                // Bottom side\n                ['M', maskLeft, maskPlotBottom],\n                ['L', maskLeft, chartHeight],\n                ['L', maskRight, chartHeight],\n                ['L', maskRight, maskPlotBottom],\n                ['Z']\n            ];\n        }\n        if (chart.redrawTrigger !== 'adjustHeight') {\n            this.mask.attr({ d: d });\n        }\n    };\n    /**\n     * These elements are moved over to the fixed renderer and stay fixed when\n     * the user scrolls the chart\n     * @private\n     */\n    ScrollablePlotArea.prototype.moveFixedElements = function () {\n        var _a = this.chart,\n            container = _a.container,\n            inverted = _a.inverted,\n            scrollablePixelsX = _a.scrollablePixelsX,\n            scrollablePixelsY = _a.scrollablePixelsY,\n            fixedRenderer = this.fixedRenderer,\n            fixedSelectors = ScrollablePlotArea.fixedSelectors;\n        var axisClass;\n        if (scrollablePixelsX && !inverted) {\n            axisClass = '.highcharts-yaxis';\n        }\n        else if (scrollablePixelsX && inverted) {\n            axisClass = '.highcharts-xaxis';\n        }\n        else if (scrollablePixelsY && !inverted) {\n            axisClass = '.highcharts-xaxis';\n        }\n        else if (scrollablePixelsY && inverted) {\n            axisClass = '.highcharts-yaxis';\n        }\n        if (axisClass && !(this.chart.hasParallelCoordinates &&\n            axisClass === '.highcharts-yaxis')) {\n            // Add if not added yet\n            for (var _i = 0, _b = [\n                \"\" + axisClass + \":not(.highcharts-radial-axis)\",\n                \"\" + axisClass + \"-labels:not(.highcharts-radial-axis-labels)\"\n            ]; _i < _b.length; _i++) {\n                var className = _b[_i];\n                ScrollablePlotArea_pushUnique(fixedSelectors, className);\n            }\n        }\n        else {\n            // Clear all axis related selectors\n            for (var _c = 0, _d = [\n                '.highcharts-xaxis',\n                '.highcharts-yaxis'\n            ]; _c < _d.length; _c++) {\n                var classBase = _d[_c];\n                for (var _e = 0, _f = [\n                    \"\" + classBase + \":not(.highcharts-radial-axis)\",\n                    \"\" + classBase + \"-labels:not(.highcharts-radial-axis-labels)\"\n                ]; _e < _f.length; _e++) {\n                    var className = _f[_e];\n                    ScrollablePlotArea_erase(fixedSelectors, className);\n                }\n            }\n        }\n        for (var _g = 0, fixedSelectors_1 = fixedSelectors; _g < fixedSelectors_1.length; _g++) {\n            var className = fixedSelectors_1[_g];\n            [].forEach.call(container.querySelectorAll(className), function (elem) {\n                (elem.namespaceURI === fixedRenderer.SVG_NS ?\n                    fixedRenderer.box :\n                    fixedRenderer.box.parentNode).appendChild(elem);\n                elem.style.pointerEvents = 'auto';\n            });\n        }\n    };\n    ScrollablePlotArea.fixedSelectors = [\n        '.highcharts-breadcrumbs-group',\n        '.highcharts-contextbutton',\n        '.highcharts-caption',\n        '.highcharts-credits',\n        '.highcharts-drillup-button',\n        '.highcharts-legend',\n        '.highcharts-legend-checkbox',\n        '.highcharts-navigator-series',\n        '.highcharts-navigator-xaxis',\n        '.highcharts-navigator-yaxis',\n        '.highcharts-navigator',\n        '.highcharts-range-selector-group',\n        '.highcharts-reset-zoom',\n        '.highcharts-scrollbar',\n        '.highcharts-subtitle',\n        '.highcharts-title'\n    ];\n    return ScrollablePlotArea;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Extensions_ScrollablePlotArea = (ScrollablePlotArea);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * Options for a scrollable plot area. This feature provides a minimum size for\n * the plot area of the chart. If the size gets smaller than this, typically\n * on mobile devices, a native browser scrollbar is presented. This scrollbar\n * provides smooth scrolling for the contents of the plot area, whereas the\n * title, legend and unaffected axes are fixed.\n *\n * Since v7.1.2, a scrollable plot area can be defined for either horizontal or\n * vertical scrolling, depending on whether the `minWidth` or `minHeight`\n * option is set.\n *\n * @sample highcharts/chart/scrollable-plotarea\n *         Scrollable plot area\n * @sample highcharts/chart/scrollable-plotarea-vertical\n *         Vertically scrollable plot area\n * @sample {gantt} gantt/chart/scrollable-plotarea-vertical\n *         Gantt chart with vertically scrollable plot area\n *\n * @since     6.1.0\n * @product   highcharts gantt\n * @apioption chart.scrollablePlotArea\n */\n/**\n * The minimum height for the plot area. If it gets smaller than this, the plot\n * area will become scrollable.\n *\n * @type      {number}\n * @since     7.1.2\n * @apioption chart.scrollablePlotArea.minHeight\n */\n/**\n * The minimum width for the plot area. If it gets smaller than this, the plot\n * area will become scrollable.\n *\n * @type      {number}\n * @since     6.1.0\n * @apioption chart.scrollablePlotArea.minWidth\n */\n/**\n * The initial scrolling position of the scrollable plot area. Ranges from 0 to\n * 1, where 0 aligns the plot area to the left and 1 aligns it to the right.\n * Typically we would use 1 if the chart has right aligned Y axes.\n *\n * @type      {number}\n * @since     6.1.0\n * @apioption chart.scrollablePlotArea.scrollPositionX\n */\n/**\n * The initial scrolling position of the scrollable plot area. Ranges from 0 to\n * 1, where 0 aligns the plot area to the top and 1 aligns it to the bottom.\n *\n * @type      {number}\n * @since     7.1.2\n * @apioption chart.scrollablePlotArea.scrollPositionY\n */\n/**\n * The opacity of mask applied on one of the sides of the plot\n * area.\n *\n * @sample {highcharts} highcharts/chart/scrollable-plotarea-opacity\n *         Disabled opacity for the mask\n *\n * @type        {number}\n * @default     0.85\n * @since       7.1.1\n * @apioption   chart.scrollablePlotArea.opacity\n */\n(''); // Keep doclets above in transpiled file\n\n;// ./code/es5/es-modules/Core/Axis/Stacking/StackItem.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar StackItem_format = Core_Templating.format;\n\nvar StackItem_Series = Series_SeriesRegistry.series;\n\nvar StackItem_destroyObjectProperties = Core_Utilities.destroyObjectProperties, StackItem_fireEvent = Core_Utilities.fireEvent, StackItem_getAlignFactor = Core_Utilities.getAlignFactor, StackItem_isNumber = Core_Utilities.isNumber, StackItem_pick = Core_Utilities.pick;\n/* *\n *\n *  Class\n *\n * */\n/**\n * The class for stacks. Each stack, on a specific X value and either negative\n * or positive, has its own stack item.\n * @private\n */\nvar StackItem = /** @class */ (function () {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    function StackItem(axis, options, negativeValue, x, stackOption) {\n        var inverted = axis.chart.inverted,\n            reversed = axis.reversed;\n        this.axis = axis;\n        // The stack goes to the left either if the stack has negative value\n        // or when axis is reversed. XOR operator.\n        var isNegative = (this.isNegative = !!negativeValue !== !!reversed);\n        // Save the options to be able to style the label\n        this.options = options = options || {};\n        // Save the x value to be able to position the label later\n        this.x = x;\n        // Initialize total value\n        this.total = null;\n        this.cumulative = null;\n        // This will keep each points' extremes stored by series.index and point\n        // index\n        this.points = {};\n        this.hasValidPoints = false;\n        // Save the stack option on the series configuration object,\n        // and whether to treat it as percent\n        this.stack = stackOption;\n        this.leftCliff = 0;\n        this.rightCliff = 0;\n        // The align options and text align varies on whether the stack is\n        // negative and if the chart is inverted or not.\n        // First test the user supplied value, then use the dynamic.\n        this.alignOptions = {\n            align: options.align ||\n                (inverted ? (isNegative ? 'left' : 'right') : 'center'),\n            verticalAlign: options.verticalAlign ||\n                (inverted ? 'middle' : isNegative ? 'bottom' : 'top'),\n            y: options.y,\n            x: options.x\n        };\n        this.textAlign =\n            options.textAlign ||\n                (inverted ? (!isNegative ? 'left' : 'right') : 'center');\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    StackItem.prototype.destroy = function () {\n        StackItem_destroyObjectProperties(this, this.axis);\n    };\n    /**\n     * Renders the stack total label and adds it to the stack label group.\n     * @private\n     */\n    StackItem.prototype.render = function (group) {\n        var chart = this.axis.chart,\n            options = this.options,\n            formatOption = options.format, \n            // Format the text in the label.\n            str = formatOption ?\n                StackItem_format(formatOption,\n            this,\n            chart) :\n                options.formatter.call(this);\n        // Change the text to reflect the new total and set visibility to hidden\n        // in case the series is hidden\n        if (this.label) {\n            this.label.attr({ text: str, visibility: 'hidden' });\n        }\n        else {\n            // Create new label\n            this.label = chart.renderer.label(str, null, void 0, options.shape, void 0, void 0, options.useHTML, false, 'stack-labels');\n            var attr = {\n                    r: options.borderRadius || 0,\n                    text: str,\n                    // Set default padding to 5 as it is in datalabels #12308\n                    padding: StackItem_pick(options.padding, 5),\n                    visibility: 'hidden' // Hidden until setOffset is called\n                };\n            if (!chart.styledMode) {\n                attr.fill = options.backgroundColor;\n                attr.stroke = options.borderColor;\n                attr['stroke-width'] = options.borderWidth;\n                this.label.css(options.style || {});\n            }\n            this.label.attr(attr);\n            if (!this.label.added) {\n                this.label.add(group); // Add to the labels-group\n            }\n        }\n        // Rank it higher than data labels (#8742)\n        this.label.labelrank = chart.plotSizeY;\n        StackItem_fireEvent(this, 'afterRender');\n    };\n    /**\n     * Sets the offset that the stack has from the x value and repositions the\n     * label.\n     * @private\n     */\n    StackItem.prototype.setOffset = function (xOffset, width, boxBottom, boxTop, defaultX, xAxis) {\n        var _a = this,\n            alignOptions = _a.alignOptions,\n            axis = _a.axis,\n            label = _a.label,\n            options = _a.options,\n            textAlign = _a.textAlign,\n            chart = axis.chart,\n            stackBox = this.getStackBox({\n                xOffset: xOffset,\n                width: width,\n                boxBottom: boxBottom,\n                boxTop: boxTop,\n                defaultX: defaultX,\n                xAxis: xAxis\n            }),\n            verticalAlign = alignOptions.verticalAlign;\n        if (label && stackBox) {\n            var labelBox = label.getBBox(void 0, 0),\n                padding = label.padding;\n            var isJustify = StackItem_pick(options.overflow, 'justify') === 'justify',\n                visible = void 0;\n            // Reset alignOptions property after justify #12337\n            alignOptions.x = options.x || 0;\n            alignOptions.y = options.y || 0;\n            // Calculate the adjusted Stack position, to take into consideration\n            // The size if the labelBox and vertical alignment as\n            // well as the text alignment. It's need to be done to work with\n            // default SVGLabel.align/justify methods.\n            var _b = this.adjustStackPosition({\n                    labelBox: labelBox,\n                    verticalAlign: verticalAlign,\n                    textAlign: textAlign\n                }),\n                x = _b.x,\n                y = _b.y;\n            stackBox.x -= x;\n            stackBox.y -= y;\n            // Align the label to the adjusted box.\n            label.align(alignOptions, false, stackBox);\n            // Check if label is inside the plotArea #12294\n            visible = chart.isInsidePlot(label.alignAttr.x + alignOptions.x + x, label.alignAttr.y + alignOptions.y + y);\n            if (!visible) {\n                isJustify = false;\n            }\n            if (isJustify) {\n                // Justify stackLabel into the alignBox\n                StackItem_Series.prototype.justifyDataLabel.call(axis, label, alignOptions, label.alignAttr, labelBox, stackBox);\n            }\n            // Add attr to avoid the default animation of justifyDataLabel.\n            // Also add correct rotation with its rotation origin. #15129\n            label.attr({\n                x: label.alignAttr.x,\n                y: label.alignAttr.y,\n                rotation: options.rotation,\n                rotationOriginX: labelBox.width *\n                    StackItem_getAlignFactor(options.textAlign || 'center'),\n                rotationOriginY: labelBox.height / 2\n            });\n            // Check if the dataLabel should be visible.\n            if (StackItem_pick(!isJustify && options.crop, true)) {\n                visible =\n                    StackItem_isNumber(label.x) &&\n                        StackItem_isNumber(label.y) &&\n                        chart.isInsidePlot(label.x - padding + (label.width || 0), label.y) &&\n                        chart.isInsidePlot(label.x + padding, label.y);\n            }\n            label[visible ? 'show' : 'hide']();\n        }\n        StackItem_fireEvent(this, 'afterSetOffset', { xOffset: xOffset, width: width });\n    };\n    /**\n     * Adjust the stack BBox position, to take into consideration the alignment\n     * of the dataLabel. This is necessary to make the stackDataLabel work with\n     * core methods like `SVGLabel.adjust` and `Series.justifyDataLabel`.\n     * @param AdjustStackPositionProps\n     * @return {{x: number, y: number}} Adjusted BBox position of the stack.\n     */\n    StackItem.prototype.adjustStackPosition = function (_a) {\n        var labelBox = _a.labelBox,\n            verticalAlign = _a.verticalAlign,\n            textAlign = _a.textAlign;\n        return {\n            x: labelBox.width / 2 +\n                (labelBox.width / 2) * (2 * StackItem_getAlignFactor(textAlign) - 1),\n            y: (labelBox.height / 2) * 2 * (1 - StackItem_getAlignFactor(verticalAlign))\n        };\n    };\n    /**\n     * Get the bbox of the stack.\n     * @private\n     * @function Highcharts.StackItem#getStackBox\n     * @return {BBoxObject} The x, y, height, width of the stack.\n     */\n    StackItem.prototype.getStackBox = function (stackBoxProps) {\n        var stackItem = this,\n            axis = this.axis,\n            chart = axis.chart,\n            boxTop = stackBoxProps.boxTop,\n            defaultX = stackBoxProps.defaultX,\n            xOffset = stackBoxProps.xOffset,\n            width = stackBoxProps.width,\n            boxBottom = stackBoxProps.boxBottom,\n            totalStackValue = axis.stacking.usePercentage ?\n                100 :\n                StackItem_pick(boxTop,\n            this.total, 0),\n            y = axis.toPixels(totalStackValue),\n            xAxis = stackBoxProps.xAxis || chart.xAxis[0],\n            x = StackItem_pick(defaultX,\n            xAxis.translate(this.x)) + xOffset,\n            yZero = axis.toPixels(boxBottom ||\n                (StackItem_isNumber(axis.min) &&\n                    axis.logarithmic &&\n                    axis.logarithmic.lin2log(axis.min)) ||\n                0),\n            height = Math.abs(y - yZero),\n            inverted = chart.inverted,\n            neg = stackItem.isNegative;\n        return inverted ?\n            {\n                x: (neg ? y : y - height) - chart.plotLeft,\n                y: xAxis.height - x - width + xAxis.top - chart.plotTop,\n                width: height,\n                height: width\n            } : {\n            x: x + xAxis.transB - chart.plotLeft,\n            y: (neg ? y - height : y) - chart.plotTop,\n            width: width,\n            height: height\n        };\n    };\n    return StackItem;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Stacking_StackItem = (StackItem);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * Stack of data points\n *\n * @product highcharts\n *\n * @interface Highcharts.StackItemObject\n */ /**\n* Alignment settings\n* @name Highcharts.StackItemObject#alignOptions\n* @type {Highcharts.AlignObject}\n*/ /**\n* Related axis\n* @name Highcharts.StackItemObject#axis\n* @type {Highcharts.Axis}\n*/ /**\n* Cumulative value of the stacked data points\n* @name Highcharts.StackItemObject#cumulative\n* @type {number}\n*/ /**\n* True if on the negative side\n* @name Highcharts.StackItemObject#isNegative\n* @type {boolean}\n*/ /**\n* Related SVG element\n* @name Highcharts.StackItemObject#label\n* @type {Highcharts.SVGElement}\n*/ /**\n* Related stack options\n* @name Highcharts.StackItemObject#options\n* @type {Highcharts.YAxisStackLabelsOptions}\n*/ /**\n* Total value of the stacked data points\n* @name Highcharts.StackItemObject#total\n* @type {number}\n*/ /**\n* Shared x value of the stack\n* @name Highcharts.StackItemObject#x\n* @type {number}\n*/\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Axis/Stacking/StackingAxis.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar StackingAxis_getDeferredAnimation = AnimationUtilities.getDeferredAnimation;\n\n\nvar seriesProto = Series_SeriesRegistry.series.prototype;\n\n\nvar StackingAxis_addEvent = Core_Utilities.addEvent, StackingAxis_correctFloat = Core_Utilities.correctFloat, StackingAxis_defined = Core_Utilities.defined, StackingAxis_destroyObjectProperties = Core_Utilities.destroyObjectProperties, StackingAxis_fireEvent = Core_Utilities.fireEvent, StackingAxis_isNumber = Core_Utilities.isNumber, StackingAxis_objectEach = Core_Utilities.objectEach, StackingAxis_pick = Core_Utilities.pick;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Generate stacks for each series and calculate stacks total values\n *\n * @private\n * @function Highcharts.Chart#getStacks\n */\nfunction chartGetStacks() {\n    var chart = this,\n        inverted = chart.inverted;\n    // Reset stacks for each axis\n    chart.axes.forEach(function (axis) {\n        if (axis.stacking && axis.stacking.stacks && axis.hasVisibleSeries) {\n            axis.stacking.oldStacks = axis.stacking.stacks;\n        }\n    });\n    chart.series.forEach(function (series) {\n        var xAxisOptions = series.xAxis && series.xAxis.options || {};\n        if (series.options.stacking && series.reserveSpace()) {\n            series.stackKey = [\n                series.type,\n                StackingAxis_pick(series.options.stack, ''),\n                inverted ? xAxisOptions.top : xAxisOptions.left,\n                inverted ? xAxisOptions.height : xAxisOptions.width\n            ].join(',');\n        }\n    });\n}\n/**\n * @private\n */\nfunction onAxisDestroy() {\n    var _a;\n    var stacking = this.stacking;\n    if (stacking) {\n        var stacks_1 = stacking.stacks;\n        // Destroy each stack total\n        StackingAxis_objectEach(stacks_1, function (stack, stackKey) {\n            StackingAxis_destroyObjectProperties(stack);\n            delete stacks_1[stackKey];\n        });\n        (_a = stacking.stackTotalGroup) === null || _a === void 0 ? void 0 : _a.destroy();\n    }\n}\n/**\n * @private\n */\nfunction onAxisInit() {\n    if (!this.stacking) {\n        this.stacking = new AxisAdditions(this);\n    }\n}\n/**\n * Get stack indicator, according to it's x-value, to determine points with the\n * same x-value\n *\n * @private\n * @function Highcharts.Series#getStackIndicator\n */\nfunction seriesGetStackIndicator(stackIndicator, x, index, key) {\n    // Update stack indicator, when:\n    // first point in a stack || x changed || stack type (negative vs positive)\n    // changed:\n    if (!StackingAxis_defined(stackIndicator) ||\n        stackIndicator.x !== x ||\n        (key && stackIndicator.stackKey !== key)) {\n        stackIndicator = {\n            x: x,\n            index: 0,\n            key: key,\n            stackKey: key\n        };\n    }\n    else {\n        stackIndicator.index++;\n    }\n    stackIndicator.key = [index, x, stackIndicator.index].join(',');\n    return stackIndicator;\n}\n/**\n * Iterate over all stacks and compute the absolute values to percent\n *\n * @private\n * @function Highcharts.Series#modifyStacks\n */\nfunction seriesModifyStacks() {\n    var series = this, yAxis = series.yAxis, stackKey = series.stackKey || '', stacks = yAxis.stacking.stacks, processedXData = series.getColumn('x', true), stacking = series.options.stacking, stacker = series[stacking + 'Stacker'];\n    var stackIndicator;\n    if (stacker) { // Modifier function exists (Series.percentStacker etc.)\n        [stackKey, '-' + stackKey].forEach(function (key) {\n            var _a;\n            var i = processedXData.length,\n                x,\n                stackItem,\n                pointExtremes;\n            while (i--) {\n                x = processedXData[i];\n                stackIndicator = series.getStackIndicator(stackIndicator, x, series.index, key);\n                stackItem = (_a = stacks[key]) === null || _a === void 0 ? void 0 : _a[x];\n                pointExtremes = stackItem === null || stackItem === void 0 ? void 0 : stackItem.points[stackIndicator.key || ''];\n                if (pointExtremes) {\n                    stacker.call(series, pointExtremes, stackItem, i);\n                }\n            }\n        });\n    }\n}\n/**\n * Modifier function for percent stacks. Blows up the stack to 100%.\n *\n * @private\n * @function Highcharts.Series#percentStacker\n */\nfunction seriesPercentStacker(pointExtremes, stack, i) {\n    var totalFactor = stack.total ? 100 / stack.total : 0;\n    // Y bottom value\n    pointExtremes[0] = StackingAxis_correctFloat(pointExtremes[0] * totalFactor);\n    // Y value\n    pointExtremes[1] = StackingAxis_correctFloat(pointExtremes[1] * totalFactor);\n    this.stackedYData[i] = pointExtremes[1];\n}\n/**\n * Set grouped points in a stack-like object. When `centerInCategory` is true,\n * and `stacking` is not enabled, we need a pseudo (horizontal) stack in order\n * to handle grouping of points within the same category.\n *\n * @private\n * @function Highcharts.Series#setGroupedPoints\n * @return {void}\n */\nfunction seriesSetGroupedPoints(axis) {\n    // Only series types supporting centerInCategory need to do this. That also\n    // applies to resetting (#20221).\n    if (this.is('column') || this.is('columnrange')) {\n        if (this.options.centerInCategory &&\n            // With only one series, we don't need to consider centerInCategory\n            this.chart.series.length > 1) {\n            seriesProto.setStackedPoints.call(this, axis, 'group');\n            // After updating, if we now have proper stacks, we must delete the\n            // group pseudo stacks (#14980)\n        }\n        else {\n            axis.stacking.resetStacks();\n        }\n    }\n}\n/**\n * Adds series' points value to corresponding stack\n *\n * @private\n * @function Highcharts.Series#setStackedPoints\n */\nfunction seriesSetStackedPoints(axis, stackingParam) {\n    var _a,\n        _b;\n    var type = stackingParam || this.options.stacking;\n    if (!type ||\n        !this.reserveSpace() ||\n        // Group stacks (centerInCategory) belong on the x-axis, other stacks on\n        // the y-axis.\n        ({ group: 'xAxis' }[type] || 'yAxis') !== axis.coll) {\n        return;\n    }\n    var series = this, xData = series.getColumn('x', true), yData = series.getColumn(series.pointValKey || 'y', true), stackedYData = [], yDataLength = yData.length, seriesOptions = series.options, threshold = seriesOptions.threshold || 0, stackThreshold = seriesOptions.startFromThreshold ? threshold : 0, stackOption = seriesOptions.stack, stackKey = stackingParam ?\n            \"\" + series.type + \",\".concat(type) : (series.stackKey || ''), negKey = '-' + stackKey, negStacks = series.negStacks, stacking = axis.stacking, stacks = stacking.stacks, oldStacks = stacking.oldStacks;\n    var stackIndicator,\n        isNegative,\n        stack,\n        other,\n        key,\n        pointKey,\n        i;\n    stacking.stacksTouched += 1;\n    // Loop over the non-null y values and read them into a local array\n    for (i = 0; i < yDataLength; i++) {\n        var x = xData[i] || 0,\n            y = yData[i],\n            yNumber = StackingAxis_isNumber(y) && y || 0;\n        stackIndicator = series.getStackIndicator(stackIndicator, x, series.index);\n        pointKey = stackIndicator.key || '';\n        // Read stacked values into a stack based on the x value,\n        // the sign of y and the stack key. Stacking is also handled for null\n        // values (#739)\n        isNegative = negStacks && yNumber < (stackThreshold ? 0 : threshold);\n        key = isNegative ? negKey : stackKey;\n        // Create empty object for this stack if it doesn't exist yet\n        if (!stacks[key]) {\n            stacks[key] = {};\n        }\n        // Initialize StackItem for this x\n        if (!stacks[key][x]) {\n            if ((_a = oldStacks[key]) === null || _a === void 0 ? void 0 : _a[x]) {\n                stacks[key][x] = oldStacks[key][x];\n                stacks[key][x].total = null;\n            }\n            else {\n                stacks[key][x] = new Stacking_StackItem(axis, axis.options.stackLabels, !!isNegative, x, stackOption);\n            }\n        }\n        // If the StackItem doesn't exist, create it first\n        stack = stacks[key][x];\n        if (y !== null) {\n            stack.points[pointKey] = stack.points[series.index] = [\n                StackingAxis_pick(stack.cumulative, stackThreshold)\n            ];\n            // Record the base of the stack\n            if (!StackingAxis_defined(stack.cumulative)) {\n                stack.base = pointKey;\n            }\n            stack.touched = stacking.stacksTouched;\n            // In area charts, if there are multiple points on the same X value,\n            // let the area fill the full span of those points\n            if (stackIndicator.index > 0 && series.singleStacks === false) {\n                stack.points[pointKey][0] = stack.points[series.index + ',' + x + ',0'][0];\n            }\n            // When updating to null, reset the point stack (#7493)\n        }\n        else {\n            delete stack.points[pointKey];\n            delete stack.points[series.index];\n        }\n        // Add value to the stack total\n        var total = stack.total || 0;\n        if (type === 'percent') {\n            // Percent stacked column, totals are the same for the positive and\n            // negative stacks\n            other = isNegative ? stackKey : negKey;\n            if (negStacks && ((_b = stacks[other]) === null || _b === void 0 ? void 0 : _b[x])) {\n                other = stacks[other][x];\n                total = other.total = Math.max(other.total || 0, total) +\n                    Math.abs(yNumber);\n                // Percent stacked areas\n            }\n            else {\n                total = StackingAxis_correctFloat(total + Math.abs(yNumber));\n            }\n        }\n        else if (type === 'group') {\n            // In this stack, the total is the number of valid points\n            if (StackingAxis_isNumber(y)) {\n                total++;\n            }\n        }\n        else {\n            total = StackingAxis_correctFloat(total + yNumber);\n        }\n        if (type === 'group') {\n            // This point's index within the stack, pushed to stack.points[1]\n            stack.cumulative = (total || 1) - 1;\n        }\n        else {\n            stack.cumulative = StackingAxis_correctFloat(StackingAxis_pick(stack.cumulative, stackThreshold) + yNumber);\n        }\n        stack.total = total;\n        if (y !== null) {\n            stack.points[pointKey].push(stack.cumulative);\n            stackedYData[i] = stack.cumulative;\n            stack.hasValidPoints = true;\n        }\n    }\n    if (type === 'percent') {\n        stacking.usePercentage = true;\n    }\n    if (type !== 'group') {\n        this.stackedYData = stackedYData; // To be used in getExtremes\n    }\n    // Reset old stacks\n    stacking.oldStacks = {};\n}\n/* *\n *\n *  Classes\n *\n * */\n/**\n * Adds stacking support to axes.\n * @private\n * @class\n */\nvar AxisAdditions = /** @class */ (function () {\n    /* *\n     *\n     *  Constructors\n     *\n     * */\n    function AxisAdditions(axis) {\n        this.oldStacks = {};\n        this.stacks = {};\n        this.stacksTouched = 0;\n        this.axis = axis;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Build the stacks from top down\n     * @private\n     */\n    AxisAdditions.prototype.buildStacks = function () {\n        var stacking = this,\n            axis = stacking.axis,\n            axisSeries = axis.series,\n            isXAxis = axis.coll === 'xAxis',\n            reversedStacks = axis.options.reversedStacks,\n            len = axisSeries.length;\n        var actualSeries,\n            i;\n        this.resetStacks();\n        stacking.usePercentage = false;\n        i = len;\n        while (i--) {\n            actualSeries = axisSeries[reversedStacks ? i : len - i - 1];\n            if (isXAxis) {\n                actualSeries.setGroupedPoints(axis);\n            }\n            actualSeries.setStackedPoints(axis);\n        }\n        // Loop up again to compute percent and stream stack\n        if (!isXAxis) {\n            for (i = 0; i < len; i++) {\n                axisSeries[i].modifyStacks();\n            }\n        }\n        StackingAxis_fireEvent(axis, 'afterBuildStacks');\n    };\n    /**\n     * @private\n     */\n    AxisAdditions.prototype.cleanStacks = function () {\n        if (this.oldStacks) {\n            this.stacks = this.oldStacks;\n            // Reset stacks\n            StackingAxis_objectEach(this.stacks, function (type) {\n                StackingAxis_objectEach(type, function (stack) {\n                    stack.cumulative = stack.total;\n                });\n            });\n        }\n    };\n    /**\n     * Set all the stacks to initial states and destroy unused ones.\n     * @private\n     */\n    AxisAdditions.prototype.resetStacks = function () {\n        var _this = this;\n        StackingAxis_objectEach(this.stacks, function (type) {\n            StackingAxis_objectEach(type, function (stack, x) {\n                // Clean up memory after point deletion (#1044, #4320)\n                if (StackingAxis_isNumber(stack.touched) &&\n                    stack.touched < _this.stacksTouched) {\n                    stack.destroy();\n                    delete type[x];\n                    // Reset stacks\n                }\n                else {\n                    stack.total = null;\n                    stack.cumulative = null;\n                }\n            });\n        });\n    };\n    /**\n     * @private\n     */\n    AxisAdditions.prototype.renderStackTotals = function () {\n        var _a;\n        var stacking = this,\n            axis = stacking.axis,\n            chart = axis.chart,\n            renderer = chart.renderer,\n            stacks = stacking.stacks,\n            stackLabelsAnim = (_a = axis.options.stackLabels) === null || _a === void 0 ? void 0 : _a.animation,\n            animationConfig = StackingAxis_getDeferredAnimation(chart,\n            stackLabelsAnim || false),\n            stackTotalGroup = stacking.stackTotalGroup = (stacking.stackTotalGroup ||\n                renderer\n                    .g('stack-labels')\n                    .attr({\n                    zIndex: 6,\n                    opacity: 0\n                })\n                    .add());\n        // The plotLeft/Top will change when y axis gets wider so we need to\n        // translate the stackTotalGroup at every render call. See bug #506\n        // and #516\n        stackTotalGroup.translate(chart.plotLeft, chart.plotTop);\n        // Render each stack total\n        StackingAxis_objectEach(stacks, function (type) {\n            StackingAxis_objectEach(type, function (stack) {\n                stack.render(stackTotalGroup);\n            });\n        });\n        stackTotalGroup.animate({\n            opacity: 1\n        }, animationConfig);\n    };\n    return AxisAdditions;\n}());\n/* *\n *\n *  Composition\n *\n * */\nvar StackingAxis;\n(function (StackingAxis) {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Extends axis with stacking support.\n     * @private\n     */\n    function compose(AxisClass, ChartClass, SeriesClass) {\n        var chartProto = ChartClass.prototype,\n            seriesProto = SeriesClass.prototype;\n        if (!chartProto.getStacks) {\n            StackingAxis_addEvent(AxisClass, 'init', onAxisInit);\n            StackingAxis_addEvent(AxisClass, 'destroy', onAxisDestroy);\n            chartProto.getStacks = chartGetStacks;\n            seriesProto.getStackIndicator = seriesGetStackIndicator;\n            seriesProto.modifyStacks = seriesModifyStacks;\n            seriesProto.percentStacker = seriesPercentStacker;\n            seriesProto.setGroupedPoints = seriesSetGroupedPoints;\n            seriesProto.setStackedPoints = seriesSetStackedPoints;\n        }\n    }\n    StackingAxis.compose = compose;\n})(StackingAxis || (StackingAxis = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Stacking_StackingAxis = (StackingAxis);\n\n;// ./code/es5/es-modules/Series/Line/LineSeries.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar LineSeries_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n        p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar LineSeries_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\n\nvar LineSeries_defined = Core_Utilities.defined, LineSeries_merge = Core_Utilities.merge, LineSeries_isObject = Core_Utilities.isObject;\n/* *\n *\n *  Class\n *\n * */\n/**\n * The line series is the base type and is therefor the series base prototype.\n *\n * @private\n */\nvar LineSeries = /** @class */ (function (_super) {\n    LineSeries_extends(LineSeries, _super);\n    function LineSeries() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Draw the graph. Called internally when rendering line-like series\n     * types. The first time it generates the `series.graph` item and\n     * optionally other series-wide items like `series.area` for area\n     * charts. On subsequent calls these items are updated with new\n     * positions and attributes.\n     *\n     * @function Highcharts.Series#drawGraph\n     */\n    LineSeries.prototype.drawGraph = function () {\n        var _this = this;\n        var options = this.options,\n            graphPath = (this.gappedPath || this.getGraphPath).call(this),\n            styledMode = this.chart.styledMode;\n        // Draw the graph\n        LineSeries_spreadArray([this], this.zones, true).forEach(function (owner, i) {\n            var attribs,\n                graph = owner.graph;\n            var verb = graph ? 'animate' : 'attr',\n                dashStyle = owner.dashStyle ||\n                    options.dashStyle;\n            if (graph) {\n                graph.endX = _this.preventGraphAnimation ?\n                    null :\n                    graphPath.xMap;\n                graph.animate({ d: graphPath });\n            }\n            else if (graphPath.length) { // #1487\n                /**\n                 * SVG element of line-based charts. Can be used for styling\n                 * purposes. If zones are configured, this element will be\n                 * hidden and replaced by multiple zone lines, accessible\n                 * via `series.zones[i].graph`.\n                 *\n                 * @name Highcharts.Series#graph\n                 * @type {Highcharts.SVGElement|undefined}\n                 */\n                owner.graph = graph = _this.chart.renderer\n                    .path(graphPath)\n                    .addClass('highcharts-graph' +\n                    (i ? \" highcharts-zone-graph-\".concat(i - 1, \" \") : ' ') +\n                    ((i && owner.className) || ''))\n                    .attr({ zIndex: 1 }) // #1069\n                    .add(_this.group);\n            }\n            if (graph && !styledMode) {\n                attribs = {\n                    'stroke': ((!i && options.lineColor) || // Series only\n                        owner.color ||\n                        _this.color ||\n                        \"#cccccc\" /* Palette.neutralColor20 */),\n                    'stroke-width': options.lineWidth || 0,\n                    // Polygon series use filled graph\n                    'fill': (_this.fillGraph && _this.color) || 'none'\n                };\n                // Apply dash style\n                if (dashStyle) {\n                    attribs.dashstyle = dashStyle;\n                    // The reason for the `else if` is that linecaps don't mix well\n                    // with dashstyle. The gaps get partially filled by the\n                    // linecap.\n                }\n                else if (options.linecap !== 'square') {\n                    attribs['stroke-linecap'] =\n                        attribs['stroke-linejoin'] = 'round';\n                }\n                graph[verb](attribs)\n                    // Add shadow to normal series as well as zones\n                    .shadow(options.shadow &&\n                    // If shadow is defined, call function with\n                    // `filterUnits: 'userSpaceOnUse'` to avoid known\n                    // SVG filter bug (#19093)\n                    LineSeries_merge({ filterUnits: 'userSpaceOnUse' }, LineSeries_isObject(options.shadow) ? options.shadow : {}));\n            }\n            // Helpers for animation\n            if (graph) {\n                graph.startX = graphPath.xMap;\n                graph.isArea = graphPath.isArea; // For arearange animation\n            }\n        });\n    };\n    // eslint-disable-next-line valid-jsdoc\n    /**\n     * Get the graph path.\n     *\n     * @private\n     */\n    LineSeries.prototype.getGraphPath = function (points, nullsAsZeroes, connectCliffs) {\n        var series = this,\n            options = series.options,\n            graphPath = [],\n            xMap = [];\n        var gap,\n            step = options.step;\n        points = points || series.points;\n        // Bottom of a stack is reversed\n        var reversed = points.reversed;\n        if (reversed) {\n            points.reverse();\n        }\n        // Reverse the steps (#5004)\n        step = {\n            right: 1,\n            center: 2\n        }[step] || (step && 3);\n        if (step && reversed) {\n            step = 4 - step;\n        }\n        // Remove invalid points, especially in spline (#5015)\n        points = this.getValidPoints(points, false, !(options.connectNulls && !nullsAsZeroes && !connectCliffs));\n        // Build the line\n        points.forEach(function (point, i) {\n            var plotX = point.plotX,\n                plotY = point.plotY,\n                lastPoint = points[i - 1],\n                isNull = point.isNull || typeof plotY !== 'number';\n            // The path to this point from the previous\n            var pathToPoint;\n            if ((point.leftCliff || (lastPoint && lastPoint.rightCliff)) &&\n                !connectCliffs) {\n                gap = true; // ... and continue\n            }\n            // Line series, nullsAsZeroes is not handled\n            if (isNull && !LineSeries_defined(nullsAsZeroes) && i > 0) {\n                gap = !options.connectNulls;\n                // Area series, nullsAsZeroes is set\n            }\n            else if (isNull && !nullsAsZeroes) {\n                gap = true;\n            }\n            else {\n                if (i === 0 || gap) {\n                    pathToPoint = [[\n                            'M',\n                            point.plotX,\n                            point.plotY\n                        ]];\n                    // Generate the spline as defined in the SplineSeries object\n                }\n                else if (series.getPointSpline) {\n                    pathToPoint = [series.getPointSpline(points, point, i)];\n                }\n                else if (step) {\n                    if (step === 1) { // Right\n                        pathToPoint = [[\n                                'L',\n                                lastPoint.plotX,\n                                plotY\n                            ]];\n                    }\n                    else if (step === 2) { // Center\n                        pathToPoint = [[\n                                'L',\n                                (lastPoint.plotX + plotX) / 2,\n                                lastPoint.plotY\n                            ], [\n                                'L',\n                                (lastPoint.plotX + plotX) / 2,\n                                plotY\n                            ]];\n                    }\n                    else {\n                        pathToPoint = [[\n                                'L',\n                                plotX,\n                                lastPoint.plotY\n                            ]];\n                    }\n                    pathToPoint.push([\n                        'L',\n                        plotX,\n                        plotY\n                    ]);\n                }\n                else {\n                    // Normal line to next point\n                    pathToPoint = [[\n                            'L',\n                            plotX,\n                            plotY\n                        ]];\n                }\n                // Prepare for animation. When step is enabled, there are\n                // two path nodes for each x value.\n                xMap.push(point.x);\n                if (step) {\n                    xMap.push(point.x);\n                    if (step === 2) { // Step = center (#8073)\n                        xMap.push(point.x);\n                    }\n                }\n                graphPath.push.apply(graphPath, pathToPoint);\n                gap = false;\n            }\n        });\n        graphPath.xMap = xMap;\n        series.graphPath = graphPath;\n        return graphPath;\n    };\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    LineSeries.defaultOptions = LineSeries_merge(Series_Series.defaultOptions, \n    /**\n     * General options for all series types.\n     *\n     * @optionparent plotOptions.series\n     */\n    {\n        legendSymbol: 'lineMarker'\n    });\n    return LineSeries;\n}(Series_Series));\nSeries_SeriesRegistry.registerSeriesType('line', LineSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Line_LineSeries = ((/* unused pure expression or super */ null && (LineSeries)));\n/* *\n *\n *  API Options\n *\n * */\n/**\n * A line series displays information as a series of data points connected by\n * straight line segments.\n *\n * @sample {highcharts} highcharts/demo/line-chart/\n *         Line chart\n * @sample {highstock} stock/demo/basic-line/\n *         Line chart\n *\n * @extends   plotOptions.series\n * @product   highcharts highstock\n * @apioption plotOptions.line\n */\n/**\n * The SVG value used for the `stroke-linecap` and `stroke-linejoin`\n * of a line graph. Round means that lines are rounded in the ends and\n * bends.\n *\n * @type       {Highcharts.SeriesLinecapValue}\n * @default    round\n * @since      3.0.7\n * @apioption  plotOptions.line.linecap\n */\n/**\n * A `line` series. If the [type](#series.line.type) option is not\n * specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends   series,plotOptions.line\n * @excluding dataParser,dataURL\n * @product   highcharts highstock\n * @apioption series.line\n */\n/**\n * An array of data points for the series. For the `line` series type,\n * points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n *    interpreted as `y` options. The `x` values will be automatically\n *    calculated, either starting at 0 and incremented by 1, or from\n *    `pointStart` and `pointInterval` given in the series options. If the axis\n *    has categories, these will be used. Example:\n *    ```js\n *    data: [0, 5, 3, 5]\n *    ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n *    `x,y`. If the first value is a string, it is applied as the name of the\n *    point, and the `x` value is inferred.\n *    ```js\n *    data: [\n *        [0, 1],\n *        [1, 2],\n *        [2, 8]\n *    ]\n *    ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n *    few settings, see the complete options set below. If the total number of\n *    data points exceeds the series'\n *    [turboThreshold](#series.line.turboThreshold),\n *    this option is not available.\n *    ```js\n *    data: [{\n *        x: 1,\n *        y: 9,\n *        name: \"Point2\",\n *        color: \"#00FF00\"\n *    }, {\n *        x: 1,\n *        y: 6,\n *        name: \"Point1\",\n *        color: \"#FF00FF\"\n *    }]\n *    ```\n *\n * **Note:** In TypeScript you have to extend `PointOptionsObject` with an\n * additional declaration to allow custom data types:\n * ```ts\n * declare module `highcharts` {\n *   interface PointOptionsObject {\n *     custom: Record<string, (boolean|number|string)>;\n *   }\n * }\n * ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n *         Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n *         Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n *         Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n *         Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n *         Config objects\n *\n * @declare   Highcharts.PointOptionsObject\n * @type      {Array<number|Array<(number|string),(number|null)>|null|*>}\n * @apioption series.line.data\n */\n/**\n * An additional, individual class name for the data point's graphic\n * representation. Changes to a point's color will also be reflected in a\n * chart's legend and tooltip.\n *\n * @sample {highcharts} highcharts/css/point-series-classname\n *         Series and point class name\n *\n * @type      {string}\n * @since     5.0.0\n * @product   highcharts gantt\n * @apioption series.line.data.className\n */\n/**\n * Individual color for the point. By default the color is pulled from\n * the global `colors` array.\n *\n * In styled mode, the `color` option doesn't take effect. Instead, use\n * `colorIndex`.\n *\n * @sample {highcharts} highcharts/point/color/\n *         Mark the highest point\n *\n * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @product   highcharts highstock gantt\n * @apioption series.line.data.color\n */\n/**\n * A specific color index to use for the point, so its graphic representations\n * are given the class name `highcharts-color-{n}`. In styled mode this will\n * change the color of the graphic. In non-styled mode, the color is set by the\n * `fill` attribute, so the change in class name won't have a visual effect by\n * default.\n *\n * Since v11, CSS variables on the form `--highcharts-color-{n}` make changing\n * the color scheme very convenient.\n *\n * @sample    {highcharts} highcharts/css/colorindex/\n *            Series and point color index\n *\n * @type      {number}\n * @since     5.0.0\n * @product   highcharts gantt\n * @apioption series.line.data.colorIndex\n */\n/**\n * A reserved subspace to store options and values for customized functionality.\n * Here you can add additional data for your own event callbacks and formatter\n * callbacks.\n *\n * @sample {highcharts} highcharts/point/custom/\n *         Point and series with custom data\n *\n * @type      {Highcharts.Dictionary<*>}\n * @apioption series.line.data.custom\n */\n/**\n * Individual data label for each point. The options are the same as\n * the ones for [plotOptions.series.dataLabels](\n * #plotOptions.series.dataLabels).\n *\n * @sample highcharts/point/datalabels/\n *         Show a label for the last value\n *\n * @type      {*|Array<*>}\n * @declare   Highcharts.DataLabelsOptions\n * @extends   plotOptions.line.dataLabels\n * @product   highcharts highstock gantt\n * @apioption series.line.data.dataLabels\n */\n/**\n * A description of the point to add to the screen reader information\n * about the point.\n *\n * @type      {string}\n * @since     5.0.0\n * @requires  modules/accessibility\n * @apioption series.line.data.description\n */\n/**\n * An id for the point. This can be used after render time to get a\n * pointer to the point object through `chart.get()`.\n *\n * @sample {highcharts} highcharts/point/id/\n *         Remove an id'd point\n *\n * @type      {string}\n * @since     1.2.0\n * @product   highcharts highstock gantt\n * @apioption series.line.data.id\n */\n/**\n * The rank for this point's data label in case of collision. If two\n * data labels are about to overlap, only the one with the highest `labelrank`\n * will be drawn.\n *\n * @type      {number}\n * @apioption series.line.data.labelrank\n */\n/**\n * The name of the point as shown in the legend, tooltip, dataLabels, etc.\n *\n * @see [xAxis.uniqueNames](#xAxis.uniqueNames)\n *\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n *         Point names\n *\n * @type      {string}\n * @apioption series.line.data.name\n */\n/**\n * Whether the data point is selected initially.\n *\n * @type      {boolean}\n * @default   false\n * @product   highcharts highstock gantt\n * @apioption series.line.data.selected\n */\n/**\n * The x value of the point.\n *\n * For datetime axes, a number value is the timestamp in milliseconds since\n * 1970, while a date string is parsed according to the [current time zone]\n * (https://api.highcharts.com/highcharts/time.timezone) of the\n * chart. Date strings are supported since v12.\n *\n * @type      {number|string}\n * @product   highcharts highstock\n * @apioption series.line.data.x\n */\n/**\n * The y value of the point.\n *\n * @type      {number|null}\n * @product   highcharts highstock\n * @apioption series.line.data.y\n */\n/**\n * The individual point events.\n *\n * @extends   plotOptions.series.point.events\n * @product   highcharts highstock gantt\n * @apioption series.line.data.events\n */\n/**\n * Options for the point markers of line-like series.\n *\n * @declare   Highcharts.PointMarkerOptionsObject\n * @extends   plotOptions.series.marker\n * @product   highcharts highstock\n * @apioption series.line.data.marker\n */\n''; // Include precedent doclets in transpiled\n\n;// ./code/es5/es-modules/Series/Area/AreaSeriesDefaults.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 *  API Options\n *\n * */\n/**\n * The area series type.\n *\n * @sample {highcharts} highcharts/demo/area-chart/\n *         Area chart\n * @sample {highstock} stock/demo/area/\n *         Area chart\n *\n * @extends      plotOptions.line\n * @excluding    useOhlcData\n * @product      highcharts highstock\n * @optionparent plotOptions.area\n */\nvar AreaSeriesDefaults = {\n    /**\n     * @see [fillColor](#plotOptions.area.fillColor)\n     * @see [fillOpacity](#plotOptions.area.fillOpacity)\n     *\n     * @apioption plotOptions.area.color\n     */\n    /**\n     * Fill color or gradient for the area. When `undefined`, the series'\n     * `color` is used with the series' `fillOpacity`.\n     *\n     * In styled mode, the fill color can be set with the `.highcharts-area`\n     * class name.\n     *\n     * @see [color](#plotOptions.area.color)\n     * @see [fillOpacity](#plotOptions.area.fillOpacity)\n     *\n     * @sample {highcharts} highcharts/plotoptions/area-fillcolor-default/\n     *         Undefined by default\n     * @sample {highcharts} highcharts/plotoptions/area-fillcolor-gradient/\n     *         Gradient\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @product   highcharts highstock\n     * @apioption plotOptions.area.fillColor\n     */\n    /**\n     * Fill opacity for the area. When you set an explicit `fillColor`,\n     * the `fillOpacity` is not applied. Instead, you should define the\n     * opacity in the `fillColor` with an rgba color definition. The\n     * `fillOpacity` setting, also the default setting, overrides the alpha\n     * component of the `color` setting.\n     *\n     * In styled mode, the fill opacity can be set with the\n     * `.highcharts-area` class name.\n     *\n     * @see [color](#plotOptions.area.color)\n     * @see [fillColor](#plotOptions.area.fillColor)\n     *\n     * @sample {highcharts} highcharts/plotoptions/area-fillopacity/\n     *         Automatic fill color and fill opacity of 0.1\n     *\n     * @type      {number}\n     * @default   {highcharts} 0.75\n     * @default   {highstock} 0.75\n     * @product   highcharts highstock\n     * @apioption plotOptions.area.fillOpacity\n     */\n    /**\n     * A separate color for the graph line. By default the line takes the\n     * `color` of the series, but the lineColor setting allows setting a\n     * separate color for the line without altering the `fillColor`.\n     *\n     * In styled mode, the line stroke can be set with the\n     * `.highcharts-graph` class name.\n     *\n     * @sample {highcharts} highcharts/plotoptions/area-linecolor/\n     *         Dark gray line\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @product   highcharts highstock\n     * @apioption plotOptions.area.lineColor\n     */\n    /**\n     * A separate color for the negative part of the area. Note that `zones`\n     * takes precedence over the negative fill color.\n     *\n     * In styled mode, a negative color is set with the\n     * `.highcharts-negative` class name.\n     *\n     * @see [negativeColor](#plotOptions.area.negativeColor)\n     *\n     * @sample {highcharts} highcharts/css/series-negative-color/\n     *         Negative color in styled mode\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @since     3.0\n     * @product   highcharts\n     * @apioption plotOptions.area.negativeFillColor\n     */\n    /**\n     * Whether the whole area or just the line should respond to mouseover\n     * tooltips and other mouse or touch events.\n     *\n     * @sample {highcharts|highstock} highcharts/plotoptions/area-trackbyarea/\n     *         Display the tooltip when the area is hovered\n     *\n     * @type      {boolean}\n     * @default   false\n     * @since     1.1.6\n     * @product   highcharts highstock\n     * @apioption plotOptions.area.trackByArea\n     */\n    /**\n     * The Y axis value to serve as the base for the area, for\n     * distinguishing between values above and below a threshold. The area\n     * between the graph and the threshold is filled.\n     *\n     * * If a number is given, the Y axis will scale to the threshold.\n     * * If `null`, the scaling behaves like a line series with fill between\n     *   the graph and the Y axis minimum.\n     * * If `Infinity` or `-Infinity`, the area between the graph and the\n     *   corresponding Y axis extreme is filled (since v6.1.0).\n     *\n     * @sample {highcharts} highcharts/plotoptions/area-threshold/\n     *         A threshold of 100\n     * @sample {highcharts} highcharts/plotoptions/area-threshold-infinity/\n     *         A threshold of Infinity\n     *\n     * @type    {number|null}\n     * @since   2.0\n     * @product highcharts highstock\n     */\n    threshold: 0,\n    legendSymbol: 'areaMarker'\n};\n/**\n * A `area` series. If the [type](#series.area.type) option is not\n * specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends   series,plotOptions.area\n * @excluding dataParser, dataURL, useOhlcData\n * @product   highcharts highstock\n * @apioption series.area\n */\n/**\n * @see [fillColor](#series.area.fillColor)\n * @see [fillOpacity](#series.area.fillOpacity)\n *\n * @apioption series.area.color\n */\n/**\n * An array of data points for the series. For the `area` series type,\n * points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n *    interpreted as `y` options. The `x` values will be automatically\n *    calculated, either starting at 0 and incremented by 1, or from\n *    `pointStart` * and `pointInterval` given in the series options. If the\n *    axis has categories, these will be used. Example:\n *    ```js\n *    data: [0, 5, 3, 5]\n *    ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n *    `x,y`. If the first value is a string, it is applied as the name of the\n *    point, and the `x` value is inferred.\n *    ```js\n *    data: [\n *        [0, 9],\n *        [1, 7],\n *        [2, 6]\n *    ]\n *    ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n *    few settings, see the complete options set below. If the total number of\n *    data points exceeds the series'\n *    [turboThreshold](#series.area.turboThreshold), this option is not\n *    available.\n *    ```js\n *    data: [{\n *        x: 1,\n *        y: 9,\n *        name: \"Point2\",\n *        color: \"#00FF00\"\n *    }, {\n *        x: 1,\n *        y: 6,\n *        name: \"Point1\",\n *        color: \"#FF00FF\"\n *    }]\n *    ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n *         Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n *         Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n *         Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n *         Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n *         Config objects\n *\n * @type      {Array<number|Array<(number|string),(number|null)>|null|*>}\n * @extends   series.line.data\n * @product   highcharts highstock\n * @apioption series.area.data\n */\n/**\n * @see [color](#series.area.color)\n * @see [fillOpacity](#series.area.fillOpacity)\n *\n * @apioption series.area.fillColor\n */\n/**\n * @see [color](#series.area.color)\n * @see [fillColor](#series.area.fillColor)\n *\n * @default   {highcharts} 0.75\n * @default   {highstock} 0.75\n * @apioption series.area.fillOpacity\n */\n''; // Adds doclets above to transpiled\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Area_AreaSeriesDefaults = (AreaSeriesDefaults);\n\n;// ./code/es5/es-modules/Series/Area/AreaSeries.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar AreaSeries_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n        p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar AreaSeries_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\nvar AreaSeries_LineSeries = Series_SeriesRegistry.seriesTypes.line;\n\nvar AreaSeries_extend = Core_Utilities.extend, AreaSeries_merge = Core_Utilities.merge, AreaSeries_objectEach = Core_Utilities.objectEach, AreaSeries_pick = Core_Utilities.pick;\n/* *\n *\n *  Class\n *\n * */\n/**\n * Area series type.\n *\n * @private\n * @class\n * @name AreaSeries\n *\n * @augments LineSeries\n */\nvar AreaSeries = /** @class */ (function (_super) {\n    AreaSeries_extends(AreaSeries, _super);\n    function AreaSeries() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * Draw the graph and the underlying area. This method calls the Series\n     * base function and adds the area. The areaPath is calculated in the\n     * getSegmentPath method called from Series.prototype.drawGraph.\n     * @private\n     */\n    AreaSeries.prototype.drawGraph = function () {\n        var _this = this;\n        // Define or reset areaPath\n        this.areaPath = [];\n        // Call the base method\n        _super.prototype.drawGraph.apply(this);\n        // Define local variables\n        var _a = this,\n            areaPath = _a.areaPath,\n            options = _a.options;\n        AreaSeries_spreadArray([this], this.zones, true).forEach(function (owner, i) {\n            var _a;\n            var attribs = {},\n                fillColor = owner.fillColor || options.fillColor;\n            var area = owner.area;\n            var verb = area ? 'animate' : 'attr';\n            // Create or update the area\n            if (area) { // Update\n                area.endX = _this.preventGraphAnimation ?\n                    null :\n                    areaPath.xMap;\n                area.animate({ d: areaPath });\n            }\n            else { // Create\n                attribs.zIndex = 0; // #1069\n                /**\n                 * SVG element of area-based charts. Can be used for styling\n                 * purposes. If zones are configured, this element will be\n                 * hidden and replaced by multiple zone areas, accessible\n                 * via `series.zones[i].area`.\n                 *\n                 * @name Highcharts.Series#area\n                 * @type {Highcharts.SVGElement|undefined}\n                 */\n                area = owner.area = _this.chart.renderer\n                    .path(areaPath)\n                    .addClass('highcharts-area' +\n                    (i ? \" highcharts-zone-area-\".concat(i - 1, \" \") : ' ') +\n                    ((i && owner.className) || ''))\n                    .add(_this.group);\n                area.isArea = true;\n            }\n            if (!_this.chart.styledMode) {\n                // If there is fillColor defined for the area, set it.\n                // Otherwise, we set it to the zone/series color and add\n                // fill-opacity (#18939).\n                attribs.fill = fillColor || owner.color || _this.color;\n                attribs['fill-opacity'] = fillColor ?\n                    1 : ((_a = options.fillOpacity) !== null && _a !== void 0 ? _a : 0.75);\n                // Allow clicking through the area if sticky tracking is true\n                // (#18744)\n                area.css({\n                    pointerEvents: _this.stickyTracking ? 'none' : 'auto'\n                });\n            }\n            area[verb](attribs);\n            area.startX = areaPath.xMap;\n            area.shiftUnit = options.step ? 2 : 1;\n        });\n    };\n    /**\n     * @private\n     */\n    AreaSeries.prototype.getGraphPath = function (points) {\n        var getGraphPath = AreaSeries_LineSeries.prototype.getGraphPath, options = this.options, stacking = options.stacking, yAxis = this.yAxis, bottomPoints = [], graphPoints = [], seriesIndex = this.index, stacks = yAxis.stacking.stacks[this.stackKey], threshold = options.threshold, translatedThreshold = Math.round(// #10909\n            yAxis.getThreshold(options.threshold)), connectNulls = AreaSeries_pick(// #10574\n            options.connectNulls, stacking === 'percent'), \n            // To display null points in underlying stacked series, this\n            // series graph must be broken, and the area also fall down to\n            // fill the gap left by the null point. #2069\n            addDummyPoints = function (i, otherI, side) {\n                var point = points[i], stackedValues = stacking &&\n                    stacks[point.x].points[seriesIndex], nullVal = point[side + 'Null'] || 0, cliffVal = point[side + 'Cliff'] || 0;\n            var top,\n                bottom,\n                isNull = true;\n            if (cliffVal || nullVal) {\n                top = (nullVal ?\n                    stackedValues[0] :\n                    stackedValues[1]) + cliffVal;\n                bottom = stackedValues[0] + cliffVal;\n                isNull = !!nullVal;\n            }\n            else if (!stacking &&\n                points[otherI] &&\n                points[otherI].isNull) {\n                top = bottom = threshold;\n            }\n            // Add to the top and bottom line of the area\n            if (typeof top !== 'undefined') {\n                graphPoints.push({\n                    plotX: plotX,\n                    plotY: top === null ?\n                        translatedThreshold :\n                        yAxis.getThreshold(top),\n                    isNull: isNull,\n                    isCliff: true\n                });\n                bottomPoints.push({\n                    plotX: plotX,\n                    plotY: bottom === null ?\n                        translatedThreshold :\n                        yAxis.getThreshold(bottom),\n                    doCurve: false // #1041, gaps in areaspline areas\n                });\n            }\n        };\n        var plotX,\n            isNull,\n            yBottom;\n        // Find what points to use\n        points = points || this.points;\n        // Fill in missing points\n        if (stacking) {\n            points = this.getStackPoints(points);\n        }\n        for (var i = 0, iEnd = points.length; i < iEnd; ++i) {\n            // Reset after series.update of stacking property (#12033)\n            if (!stacking) {\n                points[i].leftCliff = points[i].rightCliff =\n                    points[i].leftNull = points[i].rightNull = void 0;\n            }\n            isNull = points[i].isNull;\n            plotX = AreaSeries_pick(points[i].rectPlotX, points[i].plotX);\n            yBottom = stacking ?\n                AreaSeries_pick(points[i].yBottom, translatedThreshold) :\n                translatedThreshold;\n            if (!isNull || connectNulls) {\n                if (!connectNulls) {\n                    addDummyPoints(i, i - 1, 'left');\n                }\n                // Skip null point when stacking is false and connectNulls\n                // true\n                if (!(isNull && !stacking && connectNulls)) {\n                    graphPoints.push(points[i]);\n                    bottomPoints.push({\n                        x: i,\n                        plotX: plotX,\n                        plotY: yBottom\n                    });\n                }\n                if (!connectNulls) {\n                    addDummyPoints(i, i + 1, 'right');\n                }\n            }\n        }\n        var topPath = getGraphPath.call(this,\n            graphPoints,\n            true,\n            true);\n        bottomPoints.reversed = true;\n        var bottomPath = getGraphPath.call(this,\n            bottomPoints,\n            true,\n            true);\n        var firstBottomPoint = bottomPath[0];\n        if (firstBottomPoint && firstBottomPoint[0] === 'M') {\n            bottomPath[0] = ['L', firstBottomPoint[1], firstBottomPoint[2]];\n        }\n        var areaPath = topPath.concat(bottomPath);\n        if (areaPath.length) {\n            areaPath.push(['Z']);\n        }\n        // TODO: don't set leftCliff and rightCliff when connectNulls?\n        var graphPath = getGraphPath\n                .call(this,\n            graphPoints,\n            false,\n            connectNulls);\n        if (this.chart.series.length > 1 &&\n            stacking &&\n            graphPoints.some(function (point) { return point.isCliff; })) {\n            areaPath.hasStackedCliffs = graphPath.hasStackedCliffs = true;\n        }\n        areaPath.xMap = topPath.xMap;\n        this.areaPath = areaPath;\n        return graphPath;\n    };\n    /**\n     * Return an array of stacked points, where null and missing points are\n     * replaced by dummy points in order for gaps to be drawn correctly in\n     * stacks.\n     * @private\n     */\n    AreaSeries.prototype.getStackPoints = function (points) {\n        var series = this,\n            segment = [],\n            keys = [],\n            xAxis = this.xAxis,\n            yAxis = this.yAxis,\n            stack = yAxis.stacking.stacks[this.stackKey],\n            pointMap = {},\n            yAxisSeries = yAxis.series,\n            seriesLength = yAxisSeries.length,\n            upOrDown = yAxis.options.reversedStacks ? 1 : -1,\n            seriesIndex = yAxisSeries.indexOf(series);\n        points = points || this.points;\n        if (this.options.stacking) {\n            for (var i = 0; i < points.length; i++) {\n                // Reset after point update (#7326)\n                points[i].leftNull = points[i].rightNull = void 0;\n                // Create a map where we can quickly look up the points by\n                // their X values.\n                pointMap[points[i].x] = points[i];\n            }\n            // Sort the keys (#1651)\n            AreaSeries_objectEach(stack, function (stackX, x) {\n                // Nulled after switching between\n                // grouping and not (#1651, #2336)\n                if (stackX.total !== null) {\n                    keys.push(x);\n                }\n            });\n            keys.sort(function (a, b) {\n                return a - b;\n            });\n            var visibleSeries_1 = yAxisSeries.map(function (s) { return s.visible; });\n            keys.forEach(function (x, idx) {\n                var y = 0,\n                    stackPoint,\n                    stackedValues;\n                if (pointMap[x] && !pointMap[x].isNull) {\n                    segment.push(pointMap[x]);\n                    // Find left and right cliff. -1 goes left, 1 goes\n                    // right.\n                    [-1, 1].forEach(function (direction) {\n                        var nullName = direction === 1 ?\n                                'rightNull' :\n                                'leftNull',\n                            cliffName = direction === 1 ?\n                                'rightCliff' :\n                                'leftCliff',\n                            otherStack = stack[keys[idx + direction]];\n                        var cliff = 0;\n                        // If there is a stack next to this one,\n                        // to the left or to the right...\n                        if (otherStack) {\n                            var i = seriesIndex;\n                            // Can go either up or down,\n                            // depending on reversedStacks\n                            while (i >= 0 && i < seriesLength) {\n                                var si = yAxisSeries[i].index;\n                                stackPoint = otherStack.points[si];\n                                if (!stackPoint) {\n                                    // If the next point in this series is\n                                    // missing, mark the point with\n                                    // point.leftNull or point.rightNull = true.\n                                    if (si === series.index) {\n                                        pointMap[x][nullName] = true;\n                                        // If there are missing points in the next\n                                        // stack in any of the series below this\n                                        // one, we need to subtract the missing\n                                        // values and add a hiatus to the left or\n                                        // right.\n                                    }\n                                    else if (visibleSeries_1[i]) {\n                                        stackedValues = stack[x].points[si];\n                                        if (stackedValues) {\n                                            cliff -= (stackedValues[1] -\n                                                stackedValues[0]);\n                                        }\n                                    }\n                                }\n                                // When reversedStacks is true, loop up,\n                                // else loop down\n                                i += upOrDown;\n                            }\n                        }\n                        pointMap[x][cliffName] = cliff;\n                    });\n                    // There is no point for this X value in this series, so we\n                    // insert a dummy point in order for the areas to be drawn\n                    // correctly.\n                }\n                else {\n                    // Loop down the stack to find the series below this\n                    // one that has a value (#1991)\n                    var i = seriesIndex;\n                    while (i >= 0 && i < seriesLength) {\n                        var si = yAxisSeries[i].index;\n                        stackPoint = stack[x].points[si];\n                        if (stackPoint) {\n                            y = stackPoint[1];\n                            break;\n                        }\n                        // When reversedStacks is true, loop up, else loop\n                        // down\n                        i += upOrDown;\n                    }\n                    y = AreaSeries_pick(y, 0);\n                    y = yAxis.translate(// #6272\n                    y, 0, 1, 0, 1);\n                    segment.push({\n                        isNull: true,\n                        plotX: xAxis.translate(// #6272\n                        x, 0, 0, 0, 1),\n                        x: x,\n                        plotY: y,\n                        yBottom: y\n                    });\n                }\n            });\n        }\n        return segment;\n    };\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    AreaSeries.defaultOptions = AreaSeries_merge(AreaSeries_LineSeries.defaultOptions, Area_AreaSeriesDefaults);\n    return AreaSeries;\n}(AreaSeries_LineSeries));\nAreaSeries_extend(AreaSeries.prototype, {\n    singleStacks: false\n});\nSeries_SeriesRegistry.registerSeriesType('area', AreaSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Area_AreaSeries = ((/* unused pure expression or super */ null && (AreaSeries)));\n\n;// ./code/es5/es-modules/Series/Spline/SplineSeries.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar SplineSeries_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n        p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\nvar SplineSeries_LineSeries = Series_SeriesRegistry.seriesTypes.line;\n\nvar SplineSeries_merge = Core_Utilities.merge, SplineSeries_pick = Core_Utilities.pick;\n/* *\n *\n *  Class\n *\n * */\n/**\n * Spline series type.\n *\n * @private\n */\nvar SplineSeries = /** @class */ (function (_super) {\n    SplineSeries_extends(SplineSeries, _super);\n    function SplineSeries() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * Get the spline segment from a given point's previous neighbour to the\n     * given point.\n     *\n     * @private\n     * @function Highcharts.seriesTypes.spline#getPointSpline\n     */\n    SplineSeries.prototype.getPointSpline = function (points, point, i) {\n        var \n            // 1 means control points midway between points, 2 means 1/3\n            // from the point, 3 is 1/4 etc\n            smoothing = 1.5, denom = smoothing + 1, plotX = point.plotX || 0, plotY = point.plotY || 0, lastPoint = points[i - 1], nextPoint = points[i + 1];\n        var leftContX,\n            leftContY,\n            rightContX,\n            rightContY;\n        /**\n         * @private\n         */\n        function doCurve(otherPoint) {\n            return otherPoint &&\n                !otherPoint.isNull &&\n                otherPoint.doCurve !== false &&\n                // #6387, area splines next to null:\n                !point.isCliff;\n        }\n        // Find control points\n        if (doCurve(lastPoint) && doCurve(nextPoint)) {\n            var lastX = lastPoint.plotX || 0,\n                lastY = lastPoint.plotY || 0,\n                nextX = nextPoint.plotX || 0,\n                nextY = nextPoint.plotY || 0;\n            var correction = 0;\n            leftContX = (smoothing * plotX + lastX) / denom;\n            leftContY = (smoothing * plotY + lastY) / denom;\n            rightContX = (smoothing * plotX + nextX) / denom;\n            rightContY = (smoothing * plotY + nextY) / denom;\n            // Have the two control points make a straight line through main\n            // point\n            if (rightContX !== leftContX) { // #5016, division by zero\n                correction = (((rightContY - leftContY) *\n                    (rightContX - plotX)) /\n                    (rightContX - leftContX) + plotY - rightContY);\n            }\n            leftContY += correction;\n            rightContY += correction;\n            // To prevent false extremes, check that control points are\n            // between neighbouring points' y values\n            if (leftContY > lastY && leftContY > plotY) {\n                leftContY = Math.max(lastY, plotY);\n                // Mirror of left control point\n                rightContY = 2 * plotY - leftContY;\n            }\n            else if (leftContY < lastY && leftContY < plotY) {\n                leftContY = Math.min(lastY, plotY);\n                rightContY = 2 * plotY - leftContY;\n            }\n            if (rightContY > nextY && rightContY > plotY) {\n                rightContY = Math.max(nextY, plotY);\n                leftContY = 2 * plotY - rightContY;\n            }\n            else if (rightContY < nextY && rightContY < plotY) {\n                rightContY = Math.min(nextY, plotY);\n                leftContY = 2 * plotY - rightContY;\n            }\n            // Record for drawing in next point\n            point.rightContX = rightContX;\n            point.rightContY = rightContY;\n            // Visualize control points for debugging\n            /*\n            if (leftContX) {\n                this.chart.renderer\n                    .circle(\n                        leftContX + this.chart.plotLeft,\n                        leftContY + this.chart.plotTop,\n                        2\n                    )\n                    .attr({\n                        stroke: 'red',\n                        'stroke-width': 2,\n                        fill: 'none',\n                        zIndex: 9\n                    })\n                    .add();\n                this.chart.renderer\n                    .path([['M', leftContX + this.chart.plotLeft,\n                        leftContY + this.chart.plotTop\n                    ], ['L', plotX + this.chart.plotLeft,\n                        plotY + this.chart.plotTop\n                    ]])\n                    .attr({\n                        stroke: 'red',\n                        'stroke-width': 2,\n                        zIndex: 9\n                    })\n                    .add();\n            }\n            if (rightContX) {\n                this.chart.renderer\n                    .circle(\n                        rightContX + this.chart.plotLeft,\n                        rightContY + this.chart.plotTop,\n                        2\n                    )\n                    .attr({\n                        stroke: 'green',\n                        'stroke-width': 2,\n                        fill: 'none',\n                        zIndex: 9\n                    })\n                    .add();\n                this.chart.renderer\n                    .path([[\n                        'M', rightContX + this.chart.plotLeft,\n                        rightContY + this.chart.plotTop\n                    ], [\n                        'L', plotX + this.chart.plotLeft,\n                        plotY + this.chart.plotTop\n                    ]])\n                    .attr({\n                        stroke: 'green',\n                        'stroke-width': 2,\n                        zIndex: 9\n                    })\n                    .add();\n            }\n            // */\n            point.controlPoints = {\n                low: [leftContX, leftContY],\n                high: [rightContX, rightContY]\n            };\n        }\n        var ret = [\n                'C',\n                SplineSeries_pick(lastPoint.rightContX,\n            lastPoint.plotX, 0),\n                SplineSeries_pick(lastPoint.rightContY,\n            lastPoint.plotY, 0),\n                SplineSeries_pick(leftContX,\n            plotX, 0),\n                SplineSeries_pick(leftContY,\n            plotY, 0),\n                plotX,\n                plotY\n            ];\n        // Reset for updating series later\n        lastPoint.rightContX = lastPoint.rightContY = void 0;\n        return ret;\n    };\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    /**\n     * A spline series is a special type of line series, where the segments\n     * between the data points are smoothed.\n     *\n     * @sample {highcharts} highcharts/demo/spline-irregular-time/\n     *         Spline chart\n     * @sample {highstock} stock/demo/spline/\n     *         Spline chart\n     *\n     * @extends      plotOptions.series\n     * @excluding    step, boostThreshold, boostBlending\n     * @product      highcharts highstock\n     * @optionparent plotOptions.spline\n     */\n    SplineSeries.defaultOptions = SplineSeries_merge(SplineSeries_LineSeries.defaultOptions);\n    return SplineSeries;\n}(SplineSeries_LineSeries));\nSeries_SeriesRegistry.registerSeriesType('spline', SplineSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Spline_SplineSeries = (SplineSeries);\n/* *\n *\n *  API Options\n *\n * */\n/**\n * A `spline` series. If the [type](#series.spline.type) option is\n * not specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends   series,plotOptions.spline\n * @excluding dataParser, dataURL, step, boostThreshold, boostBlending\n * @product   highcharts highstock\n * @apioption series.spline\n */\n/**\n * An array of data points for the series. For the `spline` series type,\n * points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n *    interpreted as `y` options. The `x` values will be automatically\n *    calculated, either starting at 0 and incremented by 1, or from\n *    `pointStart` and `pointInterval` given in the series options. If the axis\n *    has categories, these will be used. Example:\n *    ```js\n *    data: [0, 5, 3, 5]\n *    ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n *    `x,y`. If the first value is a string, it is applied as the name of the\n *    point, and the `x` value is inferred.\n *    ```js\n *    data: [\n *        [0, 9],\n *        [1, 2],\n *        [2, 8]\n *    ]\n *    ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n *    few settings, see the complete options set below. If the total number of\n *    data points exceeds the series'\n *    [turboThreshold](#series.spline.turboThreshold),\n *    this option is not available.\n *    ```js\n *    data: [{\n *        x: 1,\n *        y: 9,\n *        name: \"Point2\",\n *        color: \"#00FF00\"\n *    }, {\n *        x: 1,\n *        y: 0,\n *        name: \"Point1\",\n *        color: \"#FF00FF\"\n *    }]\n *    ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n *         Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n *         Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n *         Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n *         Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n *         Config objects\n *\n * @type      {Array<number|Array<(number|string),(number|null)>|null|*>}\n * @extends   series.line.data\n * @product   highcharts highstock\n * @apioption series.spline.data\n */\n''; // Adds doclets above intro transpiled\n\n;// ./code/es5/es-modules/Series/AreaSpline/AreaSplineSeries.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar AreaSplineSeries_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n        p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\nvar _a = Series_SeriesRegistry.seriesTypes, AreaSplineSeries_AreaSeries = _a.area, areaProto = _a.area.prototype;\n\nvar AreaSplineSeries_extend = Core_Utilities.extend, AreaSplineSeries_merge = Core_Utilities.merge;\n/* *\n *\n *  Class\n *\n * */\n/**\n * AreaSpline series type.\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.areaspline\n *\n * @augments Highcharts.Series\n */\nvar AreaSplineSeries = /** @class */ (function (_super) {\n    AreaSplineSeries_extends(AreaSplineSeries, _super);\n    function AreaSplineSeries() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    AreaSplineSeries.defaultOptions = AreaSplineSeries_merge(Spline_SplineSeries.defaultOptions, AreaSplineSeries_AreaSeries.defaultOptions);\n    return AreaSplineSeries;\n}(Spline_SplineSeries));\nAreaSplineSeries_extend(AreaSplineSeries.prototype, {\n    getGraphPath: areaProto.getGraphPath,\n    getStackPoints: areaProto.getStackPoints,\n    drawGraph: areaProto.drawGraph\n});\nSeries_SeriesRegistry.registerSeriesType('areaspline', AreaSplineSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var AreaSpline_AreaSplineSeries = ((/* unused pure expression or super */ null && (AreaSplineSeries)));\n/* *\n *\n *  API Options\n *\n * */\n/**\n * The area spline series is an area series where the graph between the\n * points is smoothed into a spline.\n *\n * @sample {highcharts} highcharts/demo/areaspline/\n *         Area spline chart\n * @sample {highstock} stock/demo/areaspline/\n *         Area spline chart\n *\n * @extends   plotOptions.area\n * @excluding step, boostThreshold, boostBlending\n * @product   highcharts highstock\n * @apioption plotOptions.areaspline\n */\n/**\n * @see [fillColor](#plotOptions.areaspline.fillColor)\n * @see [fillOpacity](#plotOptions.areaspline.fillOpacity)\n *\n * @apioption plotOptions.areaspline.color\n */\n/**\n * @see [color](#plotOptions.areaspline.color)\n * @see [fillOpacity](#plotOptions.areaspline.fillOpacity)\n *\n * @apioption plotOptions.areaspline.fillColor\n */\n/**\n * @see [color](#plotOptions.areaspline.color)\n * @see [fillColor](#plotOptions.areaspline.fillColor)\n *\n * @default   0.75\n * @apioption plotOptions.areaspline.fillOpacity\n */\n/**\n * A `areaspline` series. If the [type](#series.areaspline.type) option\n * is not specified, it is inherited from [chart.type](#chart.type).\n *\n *\n * @extends   series,plotOptions.areaspline\n * @excluding dataParser, dataURL, step, boostThreshold, boostBlending\n * @product   highcharts highstock\n * @apioption series.areaspline\n */\n/**\n * @see [fillColor](#series.areaspline.fillColor)\n * @see [fillOpacity](#series.areaspline.fillOpacity)\n *\n * @apioption series.areaspline.color\n */\n/**\n * An array of data points for the series. For the `areaspline` series\n * type, points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n *    interpreted as `y` options. The `x` values will be automatically\n *    calculated, either starting at 0 and incremented by 1, or from\n *    `pointStart` and `pointInterval` given in the series options. If the axis\n *    has categories, these will be used. Example:\n *    ```js\n *    data: [0, 5, 3, 5]\n *    ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n *    `x,y`. If the first value is a string, it is applied as the name of the\n *    point, and the `x` value is inferred.\n *    ```js\n *    data: [\n *        [0, 10],\n *        [1, 9],\n *        [2, 3]\n *    ]\n *    ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n *    few settings, see the complete options set below. If the total number of\n *    data points exceeds the series'\n *    [turboThreshold](#series.areaspline.turboThreshold), this option is not\n *    available.\n *    ```js\n *    data: [{\n *        x: 1,\n *        y: 4,\n *        name: \"Point2\",\n *        color: \"#00FF00\"\n *    }, {\n *        x: 1,\n *        y: 4,\n *        name: \"Point1\",\n *        color: \"#FF00FF\"\n *    }]\n *    ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n *         Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n *         Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n *         Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n *         Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n *         Config objects\n *\n * @type      {Array<number|Array<(number|string),(number|null)>|null|*>}\n * @extends   series.line.data\n * @product   highcharts highstock\n * @apioption series.areaspline.data\n */\n/**\n * @see [color](#series.areaspline.color)\n * @see [fillOpacity](#series.areaspline.fillOpacity)\n *\n * @apioption series.areaspline.fillColor\n */\n/**\n * @see [color](#series.areaspline.color)\n * @see [fillColor](#series.areaspline.fillColor)\n *\n * @default   0.75\n * @apioption series.areaspline.fillOpacity\n */\n''; // Adds doclets above into transpiled\n\n;// ./code/es5/es-modules/Series/Column/ColumnSeriesDefaults.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 *  API Options\n *\n * */\n/**\n * Column series display one column per value along an X axis.\n *\n * @sample {highcharts} highcharts/demo/column-basic/\n *         Column chart\n * @sample {highstock} stock/demo/column/\n *         Column chart\n *\n * @extends      plotOptions.line\n * @excluding    connectEnds, connectNulls, gapSize, gapUnit, linecap,\n *               lineWidth, marker, step, useOhlcData\n * @product      highcharts highstock\n * @optionparent plotOptions.column\n */\nvar ColumnSeriesDefaults = {\n    /**\n     * The corner radius of the border surrounding each column or bar. A number\n     * signifies pixels. A percentage string, like for example `50%`, signifies\n     * a relative size. For columns this is relative to the column width, for\n     * pies it is relative to the radius and the inner radius.\n     *\n     * @sample  {highcharts} highcharts/plotoptions/column-borderradius/\n     *          Rounded columns\n     * @sample  highcharts/plotoptions/series-border-radius\n     *          Column and pie with rounded border\n     *\n     * @type    {number|string|Highcharts.BorderRadiusOptionsObject}\n     * @product highcharts highstock gantt\n     */\n    borderRadius: 3,\n    /**\n     * When using automatic point colors pulled from the global\n     * [colors](colors) or series-specific\n     * [plotOptions.column.colors](series.colors) collections, this option\n     * determines whether the chart should receive one color per series or\n     * one color per point.\n     *\n     * In styled mode, the `colors` or `series.colors` arrays are not\n     * supported, and instead this option gives the points individual color\n     * class names on the form `highcharts-color-{n}`.\n     *\n     * @see [series colors](#plotOptions.column.colors)\n     *\n     * @sample {highcharts} highcharts/plotoptions/column-colorbypoint-false/\n     *         False by default\n     * @sample {highcharts} highcharts/plotoptions/column-colorbypoint-true/\n     *         True\n     *\n     * @type      {boolean}\n     * @default   false\n     * @since     2.0\n     * @product   highcharts highstock gantt\n     * @apioption plotOptions.column.colorByPoint\n     */\n    /**\n     * A series specific or series type specific color set to apply instead\n     * of the global [colors](#colors) when [colorByPoint](\n     * #plotOptions.column.colorByPoint) is true.\n     *\n     * @type      {Array<Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject>}\n     * @since     3.0\n     * @product   highcharts highstock gantt\n     * @apioption plotOptions.column.colors\n     */\n    /**\n     * When `true`, the columns will center in the category, ignoring null\n     * or missing points. When `false`, space will be reserved for null or\n     * missing points.\n     *\n     * @sample {highcharts} highcharts/series-column/centerincategory/\n     *         Center in category\n     * @sample {highcharts} highcharts/series/stack-centerincategory/\n     *         Center in category, stacked and grouped\n     *\n     * @since   8.0.1\n     * @product highcharts highstock gantt\n     */\n    centerInCategory: false,\n    /**\n     * Padding between each value groups, in x axis units.\n     *\n     * @sample {highcharts} highcharts/plotoptions/column-grouppadding-default/\n     *         0.2 by default\n     * @sample {highcharts} highcharts/plotoptions/column-grouppadding-none/\n     *         No group padding - all columns are evenly spaced\n     *\n     * @product highcharts highstock gantt\n     */\n    groupPadding: 0.2,\n    /**\n     * Whether to group non-stacked columns or to let them render\n     * independent of each other. Non-grouped columns will be laid out\n     * individually and overlap each other.\n     *\n     * @sample {highcharts} highcharts/plotoptions/column-grouping-false/\n     *         Grouping disabled\n     * @sample {highstock} highcharts/plotoptions/column-grouping-false/\n     *         Grouping disabled\n     *\n     * @type      {boolean}\n     * @default   true\n     * @since     2.3.0\n     * @product   highcharts highstock gantt\n     * @apioption plotOptions.column.grouping\n     */\n    /** @ignore-option */\n    marker: null, // Point options are specified in the base options\n    /**\n     * The maximum allowed pixel width for a column, translated to the\n     * height of a bar in a bar chart. This prevents the columns from\n     * becoming too wide when there is a small number of points in the\n     * chart.\n     *\n     * @see [pointWidth](#plotOptions.column.pointWidth)\n     *\n     * @sample {highcharts} highcharts/plotoptions/column-maxpointwidth-20/\n     *         Limited to 50\n     * @sample {highstock} highcharts/plotoptions/column-maxpointwidth-20/\n     *         Limited to 50\n     *\n     * @type      {number}\n     * @since     4.1.8\n     * @product   highcharts highstock gantt\n     * @apioption plotOptions.column.maxPointWidth\n     */\n    /**\n     * Padding between each column or bar, in x axis units.\n     *\n     * @sample {highcharts} highcharts/plotoptions/column-pointpadding-default/\n     *         0.1 by default\n     * @sample {highcharts} highcharts/plotoptions/column-pointpadding-025/\n     *          0.25\n     * @sample {highcharts} highcharts/plotoptions/column-pointpadding-none/\n     *         0 for tightly packed columns\n     *\n     * @product highcharts highstock gantt\n     */\n    pointPadding: 0.1,\n    /**\n     * A pixel value specifying a fixed width for each column or bar point.\n     * When set to `undefined`, the width is calculated from the\n     * `pointPadding` and `groupPadding`. The width effects the dimension\n     * that is not based on the point value. For column series it is the\n     * horizontal length and for bar series it is the vertical length.\n     *\n     * @see [maxPointWidth](#plotOptions.column.maxPointWidth)\n     *\n     * @sample {highcharts} highcharts/plotoptions/column-pointwidth-20/\n     *         20px wide columns regardless of chart width or the amount of\n     *         data points\n     *\n     * @type      {number}\n     * @since     1.2.5\n     * @product   highcharts highstock gantt\n     * @apioption plotOptions.column.pointWidth\n     */\n    /**\n     * A pixel value specifying a fixed width for the column or bar.\n     * Overrides pointWidth on the series.\n     *\n     * @see [series.pointWidth](#plotOptions.column.pointWidth)\n     *\n     * @type      {number}\n     * @default   undefined\n     * @since     7.0.0\n     * @product   highcharts highstock gantt\n     * @apioption series.column.data.pointWidth\n     */\n    /**\n     * The minimal height for a column or width for a bar. By default,\n     * 0 values are not shown. To visualize a 0 (or close to zero) point,\n     * set the minimal point length to a pixel value like 3\\. In stacked\n     * column charts, minPointLength might not be respected for tightly\n     * packed values.\n     *\n     * @sample {highcharts} highcharts/plotoptions/column-minpointlength/\n     *         Zero base value\n     * @sample {highcharts} highcharts/plotoptions/column-minpointlength-pos-and-neg/\n     *         Positive and negative close to zero values\n     *\n     * @product highcharts highstock gantt\n     */\n    minPointLength: 0,\n    /**\n     * When the series contains less points than the crop threshold, all\n     * points are drawn, event if the points fall outside the visible plot\n     * area at the current zoom. The advantage of drawing all points\n     * (including markers and columns), is that animation is performed on\n     * updates. On the other hand, when the series contains more points than\n     * the crop threshold, the series data is cropped to only contain points\n     * that fall within the plot area. The advantage of cropping away\n     * invisible points is to increase performance on large series.\n     *\n     * @product highcharts highstock gantt\n     */\n    cropThreshold: 50,\n    /**\n     * The X axis range that each point is valid for. This determines the\n     * width of the column. On a categorized axis, the range will be 1\n     * by default (one category unit). On linear and datetime axes, the\n     * range will be computed as the distance between the two closest data\n     * points.\n     *\n     * The default `null` means it is computed automatically, but this\n     * option can be used to override the automatic value.\n     *\n     * This option is set by default to 1 if data sorting is enabled.\n     *\n     * @sample {highcharts} highcharts/plotoptions/column-pointrange/\n     *         Set the point range to one day on a data set with one week\n     *         between the points\n     *\n     * @type    {number|null}\n     * @since   2.3\n     * @product highcharts highstock gantt\n     */\n    pointRange: null,\n    states: {\n        /**\n         * Options for the hovered point. These settings override the normal\n         * state options when a point is moused over or touched.\n         *\n         * @extends   plotOptions.series.states.hover\n         * @excluding halo, lineWidth, lineWidthPlus, marker\n         * @product   highcharts highstock gantt\n         */\n        hover: {\n            /** @ignore-option */\n            halo: false,\n            /**\n             * A specific border color for the hovered point. Defaults to\n             * inherit the normal state border color.\n             *\n             * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n             * @product   highcharts gantt\n             * @apioption plotOptions.column.states.hover.borderColor\n             */\n            /**\n             * A specific color for the hovered point.\n             *\n             * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n             * @product   highcharts gantt\n             * @apioption plotOptions.column.states.hover.color\n             */\n            /**\n             * How much to brighten the point on interaction. Requires the\n             * main color to be defined in hex or rgb(a) format.\n             *\n             * In styled mode, the hover brightening is by default replaced\n             * with a fill-opacity set in the `.highcharts-point:hover`\n             * rule.\n             *\n             * @sample {highcharts} highcharts/plotoptions/column-states-hover-brightness/\n             *         Brighten by 0.5\n             *\n             * @product highcharts highstock gantt\n             */\n            brightness: 0.1\n        },\n        /**\n         * Options for the selected point. These settings override the\n         * normal state options when a point is selected.\n         *\n         * @extends   plotOptions.series.states.select\n         * @excluding halo, lineWidth, lineWidthPlus, marker\n         * @product   highcharts highstock gantt\n         */\n        select: {\n            /**\n             * A specific color for the selected point.\n             *\n             * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n             * @default #cccccc\n             * @product highcharts highstock gantt\n             */\n            color: \"#cccccc\" /* Palette.neutralColor20 */,\n            /**\n             * A specific border color for the selected point.\n             *\n             * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n             * @default #000000\n             * @product highcharts highstock gantt\n             */\n            borderColor: \"#000000\" /* Palette.neutralColor100 */\n        }\n    },\n    dataLabels: {\n        align: void 0,\n        verticalAlign: void 0,\n        /**\n         * The y position offset of the label relative to the point in\n         * pixels.\n         *\n         * @type {number}\n         */\n        y: void 0\n    },\n    // False doesn't work well: https://jsfiddle.net/highcharts/hz8fopan/14/\n    /** @ignore-option */\n    startFromThreshold: true,\n    stickyTracking: false,\n    tooltip: {\n        distance: 6\n    },\n    /**\n     * The Y axis value to serve as the base for the columns, for\n     * distinguishing between values above and below a threshold. If `null`,\n     * the columns extend from the padding Y axis minimum.\n     *\n     * @type    {number|null}\n     * @since   2.0\n     * @product highcharts\n     */\n    threshold: 0,\n    /**\n     * The width of the border surrounding each column or bar. Defaults to\n     * `1` when there is room for a border, but to `0` when the columns are\n     * so dense that a border would cover the next column.\n     *\n     * In styled mode, the stroke width can be set with the\n     * `.highcharts-point` rule.\n     *\n     * @sample {highcharts} highcharts/plotoptions/column-borderwidth/\n     *         2px black border\n     *\n     * @type      {number}\n     * @default   undefined\n     * @product   highcharts highstock gantt\n     * @apioption plotOptions.column.borderWidth\n     */\n    /**\n     * The color of the border surrounding each column or bar.\n     *\n     * In styled mode, the border stroke can be set with the\n     * `.highcharts-point` rule.\n     *\n     * @sample {highcharts} highcharts/plotoptions/column-bordercolor/\n     *         Dark gray border\n     *\n     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @default   #ffffff\n     * @product   highcharts highstock gantt\n     */\n    borderColor: \"#ffffff\" /* Palette.backgroundColor */\n};\n/**\n * A `column` series. If the [type](#series.column.type) option is\n * not specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends   series,plotOptions.column\n * @excluding connectNulls, dataParser, dataURL, gapSize, gapUnit, linecap,\n *            lineWidth, marker, connectEnds, step\n * @product   highcharts highstock\n * @apioption series.column\n */\n/**\n * An array of data points for the series. For the `column` series type,\n * points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n *    interpreted as `y` options. The `x` values will be automatically\n *    calculated, either starting at 0 and incremented by 1, or from\n *    `pointStart` and `pointInterval` given in the series options. If the axis\n *    has categories, these will be used. Example:\n *    ```js\n *    data: [0, 5, 3, 5]\n *    ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n *    `x,y`. If the first value is a string, it is applied as the name of the\n *    point, and the `x` value is inferred.\n *    ```js\n *    data: [\n *        [0, 6],\n *        [1, 2],\n *        [2, 6]\n *    ]\n *    ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n *    few settings, see the complete options set below. If the total number of\n *    data points exceeds the series'\n *    [turboThreshold](#series.column.turboThreshold), this option is not\n *    available.\n *    ```js\n *    data: [{\n *        x: 1,\n *        y: 9,\n *        name: \"Point2\",\n *        color: \"#00FF00\"\n *    }, {\n *        x: 1,\n *        y: 6,\n *        name: \"Point1\",\n *        color: \"#FF00FF\"\n *    }]\n *    ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n *         Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n *         Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n *         Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n *         Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n *         Config objects\n *\n * @type      {Array<number|Array<(number|string),(number|null)>|null|*>}\n * @extends   series.line.data\n * @excluding marker\n * @product   highcharts highstock\n * @apioption series.column.data\n */\n/**\n * The color of the border surrounding the column or bar.\n *\n * In styled mode, the border stroke can be set with the `.highcharts-point`\n * rule.\n *\n * @sample {highcharts} highcharts/plotoptions/column-bordercolor/\n *         Dark gray border\n *\n * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @product   highcharts highstock\n * @apioption series.column.data.borderColor\n */\n/**\n * The width of the border surrounding the column or bar.\n *\n * In styled mode, the stroke width can be set with the `.highcharts-point`\n * rule.\n *\n * @sample {highcharts} highcharts/plotoptions/column-borderwidth/\n *         2px black border\n *\n * @type      {number}\n * @product   highcharts highstock\n * @apioption series.column.data.borderWidth\n */\n/**\n * A name for the dash style to use for the column or bar. Overrides\n * dashStyle on the series.\n *\n * In styled mode, the stroke dash-array can be set with the same classes as\n * listed under [data.color](#series.column.data.color).\n *\n * @see [series.pointWidth](#plotOptions.column.dashStyle)\n *\n * @type      {Highcharts.DashStyleValue}\n * @apioption series.column.data.dashStyle\n */\n/**\n * A pixel value specifying a fixed width for the column or bar. Overrides\n * pointWidth on the series. The width effects the dimension that is not based\n * on the point value.\n *\n * @see [series.pointWidth](#plotOptions.column.pointWidth)\n *\n * @type      {number}\n * @apioption series.column.data.pointWidth\n */\n/**\n * @excluding halo, lineWidth, lineWidthPlus, marker\n * @product   highcharts highstock\n * @apioption series.column.states.hover\n */\n/**\n * @excluding halo, lineWidth, lineWidthPlus, marker\n * @product   highcharts highstock\n * @apioption series.column.states.select\n */\n''; // Keeps doclets above in JS file\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Column_ColumnSeriesDefaults = (ColumnSeriesDefaults);\n\n;// ./code/es5/es-modules/Series/Column/ColumnSeries.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar ColumnSeries_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n        p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\nvar ColumnSeries_animObject = AnimationUtilities.animObject;\n\nvar ColumnSeries_color = Color_Color.parse;\n\n\nvar ColumnSeries_noop = Core_Globals.noop;\n\n\n\nvar ColumnSeries_clamp = Core_Utilities.clamp, ColumnSeries_crisp = Core_Utilities.crisp, ColumnSeries_defined = Core_Utilities.defined, ColumnSeries_extend = Core_Utilities.extend, ColumnSeries_fireEvent = Core_Utilities.fireEvent, ColumnSeries_isArray = Core_Utilities.isArray, ColumnSeries_isNumber = Core_Utilities.isNumber, ColumnSeries_merge = Core_Utilities.merge, ColumnSeries_pick = Core_Utilities.pick, ColumnSeries_objectEach = Core_Utilities.objectEach;\n/* *\n *\n *  Class\n *\n * */\n/**\n * The column series type.\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.column\n *\n * @augments Highcharts.Series\n */\nvar ColumnSeries = /** @class */ (function (_super) {\n    ColumnSeries_extends(ColumnSeries, _super);\n    function ColumnSeries() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * Animate the column heights one by one from zero.\n     *\n     * @private\n     * @function Highcharts.seriesTypes.column#animate\n     *\n     * @param {boolean} init\n     *        Whether to initialize the animation or run it\n     */\n    ColumnSeries.prototype.animate = function (init) {\n        var series = this,\n            yAxis = this.yAxis,\n            yAxisPos = yAxis.pos,\n            reversed = yAxis.reversed,\n            options = series.options,\n            _a = this.chart,\n            clipOffset = _a.clipOffset,\n            inverted = _a.inverted,\n            attr = {},\n            translateProp = inverted ?\n                'translateX' :\n                'translateY';\n        var translateStart,\n            translatedThreshold;\n        if (init && clipOffset) {\n            attr.scaleY = 0.001;\n            translatedThreshold = ColumnSeries_clamp(yAxis.toPixels(options.threshold || 0), yAxisPos, yAxisPos + yAxis.len);\n            if (inverted) {\n                // Make sure the columns don't cover the axis line during\n                // entrance animation\n                translatedThreshold += reversed ?\n                    -Math.floor(clipOffset[0]) :\n                    Math.ceil(clipOffset[2]);\n                attr.translateX = translatedThreshold - yAxis.len;\n            }\n            else {\n                // Make sure the columns don't cover the axis line during\n                // entrance animation\n                translatedThreshold += reversed ?\n                    Math.ceil(clipOffset[0]) :\n                    -Math.floor(clipOffset[2]);\n                attr.translateY = translatedThreshold;\n            }\n            // Apply final clipping (used in Highcharts Stock) (#7083)\n            // animation is done by scaleY, so clipping is for panes\n            if (series.clipBox) {\n                series.setClip();\n            }\n            series.group.attr(attr);\n        }\n        else { // Run the animation\n            translateStart = Number(series.group.attr(translateProp));\n            series.group.animate({ scaleY: 1 }, ColumnSeries_extend(ColumnSeries_animObject(series.options.animation), {\n                // Do the scale synchronously to ensure smooth\n                // updating (#5030, #7228)\n                step: function (val, fx) {\n                    if (series.group) {\n                        attr[translateProp] = translateStart +\n                            fx.pos * (yAxisPos - translateStart);\n                        series.group.attr(attr);\n                    }\n                }\n            }));\n        }\n    };\n    /**\n     * Initialize the series. Extends the basic Series.init method by\n     * marking other series of the same type as dirty.\n     *\n     * @private\n     * @function Highcharts.seriesTypes.column#init\n     */\n    ColumnSeries.prototype.init = function (chart, \n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    options) {\n        _super.prototype.init.apply(this, arguments);\n        var series = this;\n        chart = series.chart;\n        // If the series is added dynamically, force redraw of other\n        // series affected by a new column\n        if (chart.hasRendered) {\n            chart.series.forEach(function (otherSeries) {\n                if (otherSeries.type === series.type) {\n                    otherSeries.isDirty = true;\n                }\n            });\n        }\n    };\n    /**\n     * Return the width and x offset of the columns adjusted for grouping,\n     * groupPadding, pointPadding, pointWidth etc.\n     *\n     * @private\n     * @function Highcharts.seriesTypes.column#getColumnMetrics\n     */\n    ColumnSeries.prototype.getColumnMetrics = function () {\n        var _a,\n            _b;\n        var series = this,\n            options = series.options,\n            xAxis = series.xAxis,\n            yAxis = series.yAxis,\n            reversedStacks = xAxis.options.reversedStacks, \n            // Keep backward compatibility: reversed xAxis had reversed\n            // stacks\n            reverseStacks = (xAxis.reversed && !reversedStacks) ||\n                (!xAxis.reversed && reversedStacks),\n            stackGroups = {};\n        var stackKey,\n            columnCount = 0;\n        // Get the total number of column type series. This is called on\n        // every series. Consider moving this logic to a chart.orderStacks()\n        // function and call it on init, addSeries and removeSeries\n        if (options.grouping === false) {\n            columnCount = 1;\n        }\n        else {\n            series.chart.series.forEach(function (otherSeries) {\n                var otherYAxis = otherSeries.yAxis,\n                    otherOptions = otherSeries.options;\n                var columnIndex;\n                if (otherSeries.type === series.type &&\n                    otherSeries.reserveSpace() &&\n                    yAxis.len === otherYAxis.len &&\n                    yAxis.pos === otherYAxis.pos) { // #642, #2086\n                    if (otherOptions.stacking &&\n                        otherOptions.stacking !== 'group') {\n                        stackKey = otherSeries.stackKey;\n                        if (typeof stackGroups[stackKey] ===\n                            'undefined') {\n                            stackGroups[stackKey] = columnCount++;\n                        }\n                        columnIndex = stackGroups[stackKey];\n                    }\n                    else if (otherOptions.grouping !== false) { // #1162\n                        columnIndex = columnCount++;\n                    }\n                    otherSeries.columnIndex = columnIndex;\n                }\n            });\n        }\n        var categoryWidth = Math.min(Math.abs(xAxis.transA) * ((!((_a = xAxis.brokenAxis) === null || _a === void 0 ? void 0 : _a.hasBreaks) && ((_b = xAxis.ordinal) === null || _b === void 0 ? void 0 : _b.slope)) ||\n                options.pointRange ||\n                xAxis.closestPointRange ||\n                xAxis.tickInterval ||\n                1), // #2610\n            xAxis.len // #1535\n            ), groupPadding = categoryWidth * options.groupPadding, groupWidth = categoryWidth - 2 * groupPadding, pointOffsetWidth = groupWidth / (columnCount || 1), pointWidth = Math.min(options.maxPointWidth || xAxis.len, ColumnSeries_pick(options.pointWidth, pointOffsetWidth * (1 - 2 * options.pointPadding))), pointPadding = (pointOffsetWidth - pointWidth) / 2, \n            // #1251, #3737\n            colIndex = (series.columnIndex || 0) + (reverseStacks ? 1 : 0), pointXOffset = pointPadding +\n                (groupPadding +\n                    colIndex * pointOffsetWidth -\n                    (categoryWidth / 2)) * (reverseStacks ? -1 : 1);\n        // Save it for reading in linked series (Error bars particularly)\n        series.columnMetrics = {\n            width: pointWidth,\n            offset: pointXOffset,\n            paddedWidth: pointOffsetWidth,\n            columnCount: columnCount\n        };\n        return series.columnMetrics;\n    };\n    /**\n     * Make the columns crisp. The edges are rounded to the nearest full\n     * pixel.\n     *\n     * @private\n     * @function Highcharts.seriesTypes.column#crispCol\n     */\n    ColumnSeries.prototype.crispCol = function (x, y, width, height) {\n        var borderWidth = this.borderWidth,\n            inverted = this.chart.inverted,\n            bottom = ColumnSeries_crisp(y + height,\n            borderWidth,\n            inverted);\n        // Vertical\n        y = ColumnSeries_crisp(y, borderWidth, inverted);\n        height = bottom - y;\n        // Horizontal. We need to first compute the exact right edge, then\n        // round it and compute the width from there.\n        if (this.options.crisp) {\n            var right = ColumnSeries_crisp(x + width,\n                borderWidth);\n            x = ColumnSeries_crisp(x, borderWidth);\n            width = right - x;\n        }\n        return { x: x, y: y, width: width, height: height };\n    };\n    /**\n     * Adjust for missing columns, according to the `centerInCategory`\n     * option. Missing columns are either single points or stacks where the\n     * point or points are either missing or null.\n     *\n     * @private\n     * @function Highcharts.seriesTypes.column#adjustForMissingColumns\n     * @param {number} x\n     * The x coordinate of the column, left side\n     *\n     * @param {number} pointWidth\n     * The pointWidth, already computed upstream\n     *\n     * @param {Highcharts.ColumnPoint} point\n     * The point instance\n     *\n     * @param {Highcharts.ColumnMetricsObject} metrics\n     * The series-wide column metrics\n     *\n     * @return {number}\n     * The adjusted x position, or the original if not adjusted\n     */\n    ColumnSeries.prototype.adjustForMissingColumns = function (x, pointWidth, point, metrics) {\n        var _this = this;\n        var _a;\n        if (!point.isNull && metrics.columnCount > 1) {\n            var visibleSeries_1 = this.xAxis.series\n                    .filter(function (s) { return s.visible; })\n                    .map(function (s) { return s.index; });\n            var indexInCategory_1 = 0,\n                totalInCategory_1 = 0;\n            // Loop over all the stacks on the Y axis. When stacking is enabled,\n            // these are real point stacks. When stacking is not enabled, but\n            // `centerInCategory` is true, there is one stack handling the\n            // grouping of points in each category. This is done in the\n            // `setGroupedPoints` function.\n            ColumnSeries_objectEach((_a = this.xAxis.stacking) === null || _a === void 0 ? void 0 : _a.stacks, function (stack) {\n                var _a;\n                var points = typeof point.x === 'number' ?\n                        (_a = stack[point.x.toString()]) === null || _a === void 0 ? void 0 : _a.points :\n                        void 0,\n                    pointValues = points === null || points === void 0 ? void 0 : points[_this.index],\n                    yStackMap = {};\n                // Look for the index\n                if (points && ColumnSeries_isArray(pointValues)) {\n                    var baseIndex_1 = _this.index;\n                    // If there are multiple points with the same X then\n                    // gather all series in category, and assign index\n                    var seriesIndexes = Object\n                            .keys(points)\n                            .filter(function (pointKey) {\n                            // Filter out duplicate X's\n                            return !pointKey.match(',') &&\n                                // Filter out null points\n                                points[pointKey] &&\n                                points[pointKey].length > 1;\n                    })\n                        .map(parseFloat)\n                        .filter(function (index) {\n                        return visibleSeries_1.indexOf(index) !== -1;\n                    })\n                        // When the series `stack` option is defined, assign\n                        // all subsequent column of the same stack to the\n                        // same index as the base column of the stack, then\n                        // filter out the original series index so that\n                        // `seriesIndexes` is shortened to the amount of\n                        // stacks, not the amount of series (#20550).\n                        .filter(function (index) {\n                        var otherOptions = _this.chart.series[index]\n                                .options,\n                            yStack = otherOptions.stacking &&\n                                otherOptions.stack;\n                        if (ColumnSeries_defined(yStack)) {\n                            if (ColumnSeries_isNumber(yStackMap[yStack])) {\n                                if (baseIndex_1 === index) {\n                                    baseIndex_1 = yStackMap[yStack];\n                                }\n                                return false;\n                            }\n                            yStackMap[yStack] = index;\n                        }\n                        return true;\n                    })\n                        .sort(function (a, b) { return b - a; });\n                    indexInCategory_1 = seriesIndexes.indexOf(baseIndex_1);\n                    totalInCategory_1 = seriesIndexes.length;\n                }\n            });\n            indexInCategory_1 = this.xAxis.reversed ?\n                totalInCategory_1 - 1 - indexInCategory_1 : indexInCategory_1;\n            // Compute the adjusted x position\n            var boxWidth = (totalInCategory_1 - 1) * metrics.paddedWidth +\n                    pointWidth;\n            x = (point.plotX || 0) + boxWidth / 2 - pointWidth -\n                indexInCategory_1 * metrics.paddedWidth;\n        }\n        return x;\n    };\n    /**\n     * Translate each point to the plot area coordinate system and find\n     * shape positions\n     *\n     * @private\n     * @function Highcharts.seriesTypes.column#translate\n     */\n    ColumnSeries.prototype.translate = function () {\n        var series = this,\n            chart = series.chart,\n            options = series.options,\n            dense = series.dense =\n                series.closestPointRange * series.xAxis.transA < 2,\n            borderWidth = series.borderWidth = ColumnSeries_pick(options.borderWidth,\n            dense ? 0 : 1 // #3635\n            ),\n            xAxis = series.xAxis,\n            yAxis = series.yAxis,\n            threshold = options.threshold,\n            minPointLength = ColumnSeries_pick(options.minPointLength, 5),\n            metrics = series.getColumnMetrics(),\n            seriesPointWidth = metrics.width,\n            seriesXOffset = series.pointXOffset = metrics.offset,\n            dataMin = series.dataMin,\n            dataMax = series.dataMax,\n            translatedThreshold = series.translatedThreshold =\n                yAxis.getThreshold(threshold);\n        // Postprocessed for border width\n        var seriesBarW = series.barW =\n                Math.max(seriesPointWidth, 1 + 2 * borderWidth);\n        // When the pointPadding is 0, we want the columns to be packed\n        // tightly, so we allow individual columns to have individual sizes.\n        // When pointPadding is greater, we strive for equal-width columns\n        // (#2694).\n        if (options.pointPadding && options.crisp) {\n            seriesBarW = Math.ceil(seriesBarW);\n        }\n        Series_Series.prototype.translate.apply(series);\n        // Record the new values\n        series.points.forEach(function (point) {\n            var yBottom = ColumnSeries_pick(point.yBottom,\n                translatedThreshold),\n                safeDistance = 999 + Math.abs(yBottom),\n                plotX = point.plotX || 0, \n                // Don't draw too far outside plot area (#1303, #2241,\n                // #4264)\n                plotY = ColumnSeries_clamp(point.plotY, -safeDistance,\n                yAxis.len + safeDistance);\n            var up,\n                barY = Math.min(plotY,\n                yBottom),\n                barH = Math.max(plotY,\n                yBottom) - barY,\n                pointWidth = seriesPointWidth,\n                barX = plotX + seriesXOffset,\n                barW = seriesBarW;\n            // Handle options.minPointLength\n            if (minPointLength && Math.abs(barH) < minPointLength) {\n                barH = minPointLength;\n                up = (!yAxis.reversed && !point.negative) ||\n                    (yAxis.reversed && point.negative);\n                // Reverse zeros if there's no positive value in the series\n                // in visible range (#7046)\n                if (ColumnSeries_isNumber(threshold) &&\n                    ColumnSeries_isNumber(dataMax) &&\n                    point.y === threshold &&\n                    dataMax <= threshold &&\n                    // And if there's room for it (#7311)\n                    (yAxis.min || 0) < threshold &&\n                    // If all points are the same value (i.e zero) not draw\n                    // as negative points (#10646), but only if there's room\n                    // for it (#14876)\n                    (dataMin !== dataMax || (yAxis.max || 0) <= threshold)) {\n                    up = !up;\n                    point.negative = !point.negative;\n                }\n                // If stacked...\n                barY = (Math.abs(barY - translatedThreshold) > minPointLength ?\n                    // ...keep position\n                    yBottom - minPointLength :\n                    // #1485, #4051\n                    translatedThreshold -\n                        (up ? minPointLength : 0));\n            }\n            // Handle point.options.pointWidth\n            // @todo Handle grouping/stacking too. Calculate offset properly\n            if (ColumnSeries_defined(point.options.pointWidth)) {\n                pointWidth = barW =\n                    Math.ceil(point.options.pointWidth);\n                barX -= Math.round((pointWidth - seriesPointWidth) / 2);\n            }\n            // Adjust for null or missing points\n            if (options.centerInCategory) {\n                barX = series.adjustForMissingColumns(barX, pointWidth, point, metrics);\n            }\n            // Cache for access in polar\n            point.barX = barX;\n            point.pointWidth = pointWidth;\n            // Fix the tooltip on center of grouped columns (#1216, #424,\n            // #3648)\n            point.tooltipPos = chart.inverted ?\n                [\n                    ColumnSeries_clamp(yAxis.len + yAxis.pos - chart.plotLeft - plotY, yAxis.pos - chart.plotLeft, yAxis.len + yAxis.pos - chart.plotLeft),\n                    xAxis.len + xAxis.pos - chart.plotTop - barX - barW / 2,\n                    barH\n                ] :\n                [\n                    xAxis.left - chart.plotLeft + barX + barW / 2,\n                    ColumnSeries_clamp(plotY + yAxis.pos -\n                        chart.plotTop, yAxis.pos - chart.plotTop, yAxis.len + yAxis.pos - chart.plotTop),\n                    barH\n                ];\n            // Register shape type and arguments to be used in drawPoints. Allow\n            // `shapeType` defined on `pointClass` level.\n            point.shapeType = series.pointClass.prototype.shapeType ||\n                'roundedRect';\n            point.shapeArgs = series.crispCol(barX, \n            // #3169, drilldown from null must have a position to work from.\n            // #6585, dataLabel should be placed on xAxis, not floating in\n            // the middle of the chart.\n            point.isNull ? translatedThreshold : barY, barW, point.isNull ? 0 : barH);\n        });\n        // Fire a specific event after column translate. We could instead apply\n        // all the column logic in an `afterTranslate` event handler, but there\n        // are so many other series types that use the column translation, that\n        // it is more convenient to have a specific event for it.\n        ColumnSeries_fireEvent(this, 'afterColumnTranslate');\n    };\n    /**\n     * Columns have no graph\n     *\n     * @private\n     * @function Highcharts.seriesTypes.column#drawGraph\n     */\n    ColumnSeries.prototype.drawGraph = function () {\n        this.group[this.dense ? 'addClass' : 'removeClass']('highcharts-dense-data');\n    };\n    /**\n     * Get presentational attributes\n     *\n     * @private\n     * @function Highcharts.seriesTypes.column#pointAttribs\n     */\n    ColumnSeries.prototype.pointAttribs = function (point, state) {\n        var options = this.options, p2o = this.pointAttrToOptions || {}, strokeOption = p2o.stroke || 'borderColor', strokeWidthOption = p2o['stroke-width'] || 'borderWidth';\n        var stateOptions,\n            zone,\n            brightness,\n            fill = (point && point.color) || this.color, \n            // Set to fill when borderColor null:\n            stroke = ((point && point[strokeOption]) ||\n                options[strokeOption] ||\n                fill),\n            dashstyle = (point && point.options.dashStyle) || options.dashStyle,\n            strokeWidth = (point && point[strokeWidthOption]) ||\n                options[strokeWidthOption] ||\n                this[strokeWidthOption] || 0,\n            opacity = ColumnSeries_pick(point && point.opacity,\n            options.opacity, 1);\n        // Handle zone colors\n        if (point && this.zones.length) {\n            zone = point.getZone();\n            // When zones are present, don't use point.color (#4267).\n            // Changed order (#6527), added support for colorAxis (#10670)\n            fill = (point.options.color ||\n                (zone && (zone.color || point.nonZonedColor)) ||\n                this.color);\n            if (zone) {\n                stroke = zone.borderColor || stroke;\n                dashstyle = zone.dashStyle || dashstyle;\n                strokeWidth = zone.borderWidth || strokeWidth;\n            }\n        }\n        // Select or hover states\n        if (state && point) {\n            stateOptions = ColumnSeries_merge(options.states[state], \n            // #6401\n            point.options.states &&\n                point.options.states[state] ||\n                {});\n            brightness = stateOptions.brightness;\n            fill =\n                stateOptions.color || (typeof brightness !== 'undefined' &&\n                    ColumnSeries_color(fill)\n                        .brighten(stateOptions.brightness)\n                        .get()) || fill;\n            stroke = stateOptions[strokeOption] || stroke;\n            strokeWidth =\n                stateOptions[strokeWidthOption] || strokeWidth;\n            dashstyle = stateOptions.dashStyle || dashstyle;\n            opacity = ColumnSeries_pick(stateOptions.opacity, opacity);\n        }\n        var ret = {\n                fill: fill,\n                stroke: stroke,\n                'stroke-width': strokeWidth,\n                opacity: opacity\n            };\n        if (dashstyle) {\n            ret.dashstyle = dashstyle;\n        }\n        return ret;\n    };\n    /**\n     * Draw the columns. For bars, the series.group is rotated, so the same\n     * coordinates apply for columns and bars. This method is inherited by\n     * scatter series.\n     *\n     * @private\n     * @function Highcharts.seriesTypes.column#drawPoints\n     */\n    ColumnSeries.prototype.drawPoints = function (points) {\n        if (points === void 0) { points = this.points; }\n        var series = this,\n            chart = this.chart,\n            options = series.options,\n            renderer = chart.renderer,\n            animationLimit = options.animationLimit || 250;\n        var shapeArgs;\n        // Draw the columns\n        points.forEach(function (point) {\n            var plotY = point.plotY;\n            var graphic = point.graphic,\n                hasGraphic = !!graphic,\n                verb = graphic && chart.pointCount < animationLimit ?\n                    'animate' : 'attr';\n            if (ColumnSeries_isNumber(plotY) && point.y !== null) {\n                shapeArgs = point.shapeArgs;\n                // When updating a series between 2d and 3d or cartesian and\n                // polar, the shape type changes.\n                if (graphic && point.hasNewShapeType()) {\n                    graphic = graphic.destroy();\n                }\n                // Set starting position for point sliding animation.\n                if (series.enabledDataSorting) {\n                    point.startXPos = series.xAxis.reversed ?\n                        -(shapeArgs ? (shapeArgs.width || 0) : 0) :\n                        series.xAxis.width;\n                }\n                if (!graphic) {\n                    point.graphic = graphic =\n                        renderer[point.shapeType](shapeArgs)\n                            .add(point.group || series.group);\n                    if (graphic &&\n                        series.enabledDataSorting &&\n                        chart.hasRendered &&\n                        chart.pointCount < animationLimit) {\n                        graphic.attr({\n                            x: point.startXPos\n                        });\n                        hasGraphic = true;\n                        verb = 'animate';\n                    }\n                }\n                if (graphic && hasGraphic) { // Update\n                    graphic[verb](ColumnSeries_merge(shapeArgs));\n                }\n                // Presentational\n                if (!chart.styledMode) {\n                    graphic[verb](series.pointAttribs(point, (point.selected && 'select')))\n                        .shadow(point.allowShadow !== false && options.shadow);\n                }\n                if (graphic) {\n                    graphic.addClass(point.getClassName(), true);\n                    graphic.attr({\n                        visibility: point.visible ? 'inherit' : 'hidden'\n                    });\n                }\n            }\n            else if (graphic) {\n                point.graphic = graphic.destroy(); // #1269\n            }\n        });\n    };\n    /**\n     * Draw the tracker for a point.\n     * @private\n     */\n    ColumnSeries.prototype.drawTracker = function (points) {\n        if (points === void 0) { points = this.points; }\n        var series = this,\n            chart = series.chart,\n            pointer = chart.pointer,\n            onMouseOver = function (e) {\n                pointer === null || pointer === void 0 ? void 0 : pointer.normalize(e);\n            var point = pointer === null || pointer === void 0 ? void 0 : pointer.getPointFromEvent(e), \n                // Run point events only for points inside plot area, #21136\n                isInsidePlot = chart.scrollablePlotArea ?\n                    chart.isInsidePlot(e.chartX - chart.plotLeft,\n                e.chartY - chart.plotTop, {\n                        visiblePlotOnly: true\n                    }) : true;\n            // Undefined on graph in scatterchart\n            if (pointer &&\n                point &&\n                series.options.enableMouseTracking &&\n                isInsidePlot) {\n                pointer.isDirectTouch = true;\n                point.onMouseOver(e);\n            }\n        };\n        var dataLabels;\n        // Add reference to the point\n        points.forEach(function (point) {\n            dataLabels = (ColumnSeries_isArray(point.dataLabels) ?\n                point.dataLabels :\n                (point.dataLabel ? [point.dataLabel] : []));\n            if (point.graphic) {\n                point.graphic.element.point = point;\n            }\n            dataLabels.forEach(function (dataLabel) {\n                (dataLabel.div || dataLabel.element).point = point;\n            });\n        });\n        // Add the event listeners, we need to do this only once\n        if (!series._hasTracking) {\n            series.trackerGroups.forEach(function (key) {\n                if (series[key]) {\n                    // We don't always have dataLabelsGroup\n                    series[key]\n                        .addClass('highcharts-tracker')\n                        .on('mouseover', onMouseOver)\n                        .on('mouseout', function (e) {\n                        pointer === null || pointer === void 0 ? void 0 : pointer.onTrackerMouseOut(e);\n                    })\n                        .on('touchstart', onMouseOver);\n                    if (!chart.styledMode && series.options.cursor) {\n                        series[key]\n                            .css({ cursor: series.options.cursor });\n                    }\n                }\n            });\n            series._hasTracking = true;\n        }\n        ColumnSeries_fireEvent(this, 'afterDrawTracker');\n    };\n    /**\n     * Remove this series from the chart\n     *\n     * @private\n     * @function Highcharts.seriesTypes.column#remove\n     */\n    ColumnSeries.prototype.remove = function () {\n        var series = this,\n            chart = series.chart;\n        // Column and bar series affects other series of the same type\n        // as they are either stacked or grouped\n        if (chart.hasRendered) {\n            chart.series.forEach(function (otherSeries) {\n                if (otherSeries.type === series.type) {\n                    otherSeries.isDirty = true;\n                }\n            });\n        }\n        Series_Series.prototype.remove.apply(series, arguments);\n    };\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    ColumnSeries.defaultOptions = ColumnSeries_merge(Series_Series.defaultOptions, Column_ColumnSeriesDefaults);\n    return ColumnSeries;\n}(Series_Series));\nColumnSeries_extend(ColumnSeries.prototype, {\n    // When tooltip is not shared, this series (and derivatives) requires\n    // direct touch/hover. KD-tree does not apply.\n    directTouch: true,\n    getSymbol: ColumnSeries_noop,\n    // Use separate negative stacks, unlike area stacks where a negative\n    // point is subtracted from previous (#1910)\n    negStacks: true,\n    trackerGroups: ['group', 'dataLabelsGroup']\n});\nSeries_SeriesRegistry.registerSeriesType('column', ColumnSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Column_ColumnSeries = (ColumnSeries);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * Adjusted width and x offset of the columns for grouping.\n *\n * @private\n * @interface Highcharts.ColumnMetricsObject\n */ /**\n* Width of the columns.\n* @name Highcharts.ColumnMetricsObject#width\n* @type {number}\n*/ /**\n* Offset of the columns.\n* @name Highcharts.ColumnMetricsObject#offset\n* @type {number}\n*/\n''; // Detach doclets above\n\n;// ./code/es5/es-modules/Core/Series/DataLabel.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar DataLabel_getDeferredAnimation = AnimationUtilities.getDeferredAnimation;\n\nvar DataLabel_format = Core_Templating.format;\n\nvar DataLabel_defined = Core_Utilities.defined, DataLabel_extend = Core_Utilities.extend, DataLabel_fireEvent = Core_Utilities.fireEvent, DataLabel_getAlignFactor = Core_Utilities.getAlignFactor, DataLabel_isArray = Core_Utilities.isArray, DataLabel_isString = Core_Utilities.isString, DataLabel_merge = Core_Utilities.merge, DataLabel_objectEach = Core_Utilities.objectEach, DataLabel_pick = Core_Utilities.pick, DataLabel_pInt = Core_Utilities.pInt, DataLabel_splat = Core_Utilities.splat;\n/* *\n *\n *  Composition\n *\n * */\nvar DataLabel;\n(function (DataLabel) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Check if this series has data labels, either a series-level setting, or\n     * individual. In case of individual point labels, this method is overridden\n     * to always return true.\n     * @private\n     */\n    function hasDataLabels() {\n        return mergedDataLabelOptions(this)\n            .some(function (o) {\n            return o === null || o === void 0 ? void 0 : o.enabled;\n        });\n    }\n    /**\n     * Align each individual data label.\n     * @private\n     */\n    function alignDataLabel(point, dataLabel, options, alignTo, isNew) {\n        var _a;\n        var series = this,\n            _b = this,\n            chart = _b.chart,\n            enabledDataSorting = _b.enabledDataSorting,\n            inverted = this.isCartesian && chart.inverted,\n            plotX = point.plotX,\n            plotY = point.plotY,\n            rotation = options.rotation || 0,\n            isInsidePlot = DataLabel_defined(plotX) &&\n                DataLabel_defined(plotY) &&\n                chart.isInsidePlot(plotX,\n            Math.round(plotY), {\n                    inverted: inverted,\n                    paneCoordinates: true,\n                    series: series\n                }),\n            setStartPos = function (alignOptions) {\n                if (enabledDataSorting && series.xAxis && !justify) {\n                    series.setDataLabelStartPos(point,\n            dataLabel,\n            isNew,\n            isInsidePlot,\n            alignOptions);\n            }\n        }, justify = rotation === 0 ? DataLabel_pick(options.overflow, (enabledDataSorting ? 'none' : 'justify')) === 'justify' : false;\n        // Math.round for rounding errors (#2683), alignTo to allow column\n        // labels (#2700)\n        var visible = this.visible &&\n                point.visible !== false &&\n                DataLabel_defined(plotX) &&\n                (point.series.forceDL ||\n                    (enabledDataSorting && !justify) ||\n                    isInsidePlot ||\n                    (\n                    // If the data label is inside the align box, it is enough\n                    // that parts of the align box is inside the plot area\n                    // (#12370). When stacking, it is always inside regardless\n                    // of the option (#15148).\n                    DataLabel_pick(options.inside, !!this.options.stacking) &&\n                        alignTo &&\n                        chart.isInsidePlot(plotX,\n            inverted ?\n                            alignTo.x + 1 :\n                            alignTo.y + alignTo.height - 1, {\n                            inverted: inverted,\n                            paneCoordinates: true,\n                            series: series\n                        })));\n        var pos = point.pos();\n        if (visible && pos) {\n            var bBox = dataLabel.getBBox(),\n                unrotatedbBox = dataLabel.getBBox(void 0, 0);\n            // The alignment box is a singular point\n            alignTo = DataLabel_extend({\n                x: pos[0],\n                y: Math.round(pos[1]),\n                width: 0,\n                height: 0\n            }, alignTo || {});\n            // Align to plot edges\n            if (options.alignTo === 'plotEdges' && series.isCartesian) {\n                alignTo[inverted ? 'x' : 'y'] = 0;\n                alignTo[inverted ? 'width' : 'height'] = ((_a = this.yAxis) === null || _a === void 0 ? void 0 : _a.len) || 0;\n            }\n            // Add the text size for alignment calculation\n            DataLabel_extend(options, {\n                width: bBox.width,\n                height: bBox.height\n            });\n            setStartPos(alignTo); // Data sorting\n            // Align the label to the adjusted box with for unrotated bBox due\n            // to rotationOrigin, which is based on unrotated label\n            dataLabel.align(DataLabel_merge(options, {\n                width: unrotatedbBox.width,\n                height: unrotatedbBox.height\n            }), false, alignTo, false);\n            dataLabel.alignAttr.x += DataLabel_getAlignFactor(options.align) *\n                (unrotatedbBox.width - bBox.width);\n            dataLabel.alignAttr.y += DataLabel_getAlignFactor(options.verticalAlign) *\n                (unrotatedbBox.height - bBox.height);\n            dataLabel[dataLabel.placed ? 'animate' : 'attr']({\n                'text-align': dataLabel.alignAttr['text-align'] || 'center',\n                x: dataLabel.alignAttr.x +\n                    (bBox.width - unrotatedbBox.width) / 2,\n                y: dataLabel.alignAttr.y +\n                    (bBox.height - unrotatedbBox.height) / 2,\n                rotationOriginX: (dataLabel.width || 0) / 2,\n                rotationOriginY: (dataLabel.height || 0) / 2\n            });\n            // Uncomment this block to visualize the bounding boxes used for\n            // determining visibility\n            // chart.renderer.rect(\n            //     (dataLabel.alignAttr.x || 0) + chart.plotLeft,\n            //     (dataLabel.alignAttr.y || 0) + chart.plotTop,\n            //     bBox.width,\n            //     bBox.height\n            // ).attr({\n            //     stroke: 'rgba(0, 0, 0, 0.3)',\n            //     'stroke-width': 1,\n            //     zIndex: 20\n            // }).add();\n            // chart.renderer.circle(\n            //     chart.plotLeft + pick(dataLabel.alignAttr.x, 0),\n            //     chart.plotTop + pick(dataLabel.alignAttr.y, 0),\n            //     2\n            // ).attr({\n            //     fill: 'red',\n            //     zIndex: 20\n            // }).add();\n            if (justify && alignTo.height >= 0) { // #8830\n                this.justifyDataLabel(dataLabel, options, dataLabel.alignAttr, bBox, alignTo, isNew);\n            }\n            else if (DataLabel_pick(options.crop, true)) {\n                var _c = dataLabel.alignAttr,\n                    x = _c.x,\n                    y = _c.y,\n                    correction = 1;\n                // Check if the dataLabel should be visible.\n                visible =\n                    chart.isInsidePlot(x, y, {\n                        paneCoordinates: true,\n                        series: series\n                    }) &&\n                        chart.isInsidePlot(x + bBox.width - correction, y + bBox.height - correction, {\n                            paneCoordinates: true,\n                            series: series\n                        });\n            }\n            // When we're using a shape, make it possible with a connector or an\n            // arrow pointing to this point\n            if (options.shape && !rotation) {\n                dataLabel[isNew ? 'attr' : 'animate']({\n                    anchorX: pos[0],\n                    anchorY: pos[1]\n                });\n            }\n        }\n        // To use alignAttr property in hideOverlappingLabels\n        if (isNew && enabledDataSorting) {\n            dataLabel.placed = false;\n        }\n        // Show or hide based on the final aligned position\n        if (!visible && (!enabledDataSorting || justify)) {\n            dataLabel.hide();\n            dataLabel.placed = false; // Don't animate back in\n        }\n        else {\n            dataLabel.show();\n            dataLabel.placed = true; // Flag for overlapping logic\n        }\n    }\n    /**\n     * Handle the dataLabels.filter option.\n     * @private\n     */\n    function applyFilter(point, options) {\n        var filter = options.filter;\n        if (filter) {\n            var op = filter.operator,\n                prop = point[filter.property],\n                val = filter.value;\n            if ((op === '>' && prop > val) ||\n                (op === '<' && prop < val) ||\n                (op === '>=' && prop >= val) ||\n                (op === '<=' && prop <= val) ||\n                (op === '==' && prop == val) || // eslint-disable-line eqeqeq\n                (op === '===' && prop === val) ||\n                (op === '!=' && prop != val) || // eslint-disable-line eqeqeq\n                (op === '!==' && prop !== val)) {\n                return true;\n            }\n            return false;\n        }\n        return true;\n    }\n    /**\n     * @private\n     */\n    function compose(SeriesClass) {\n        var seriesProto = SeriesClass.prototype;\n        if (!seriesProto.initDataLabels) {\n            seriesProto.initDataLabels = initDataLabels;\n            seriesProto.initDataLabelsGroup = initDataLabelsGroup;\n            seriesProto.alignDataLabel = alignDataLabel;\n            seriesProto.drawDataLabels = drawDataLabels;\n            seriesProto.justifyDataLabel = justifyDataLabel;\n            seriesProto.setDataLabelStartPos = setDataLabelStartPos;\n            seriesProto.hasDataLabels = hasDataLabels;\n        }\n    }\n    DataLabel.compose = compose;\n    /**\n     * Create the SVGElement group for dataLabels\n     * @private\n     */\n    function initDataLabelsGroup() {\n        return this.plotGroup('dataLabelsGroup', 'data-labels', this.hasRendered ? 'inherit' : 'hidden', // #5133, #10220\n        this.options.dataLabels.zIndex || 6);\n    }\n    /**\n     * Init the data labels with the correct animation\n     * @private\n     */\n    function initDataLabels(animationConfig) {\n        var series = this,\n            hasRendered = series.hasRendered || 0;\n        // Create a separate group for the data labels to avoid rotation\n        var dataLabelsGroup = this.initDataLabelsGroup()\n                .attr({ opacity: +hasRendered }); // #3300\n            if (!hasRendered && dataLabelsGroup) {\n                if (series.visible) { // #2597, #3023, #3024\n                    dataLabelsGroup.show();\n            }\n            if (series.options.animation) {\n                dataLabelsGroup.animate({ opacity: 1 }, animationConfig);\n            }\n            else {\n                dataLabelsGroup.attr({ opacity: 1 });\n            }\n        }\n        return dataLabelsGroup;\n    }\n    /**\n     * Draw the data labels\n     * @private\n     */\n    function drawDataLabels(points) {\n        var _a;\n        points = points || this.points;\n        var series = this, chart = series.chart, seriesOptions = series.options, renderer = chart.renderer, _b = chart.options.chart, backgroundColor = _b.backgroundColor, plotBackgroundColor = _b.plotBackgroundColor, contrastColor = renderer.getContrast((DataLabel_isString(plotBackgroundColor) && plotBackgroundColor) ||\n                (DataLabel_isString(backgroundColor) && backgroundColor) ||\n                \"#000000\" /* Palette.neutralColor100 */), seriesDlOptions = mergedDataLabelOptions(series);\n        var pointOptions,\n            dataLabelsGroup;\n        // Resolve the animation\n        var _c = seriesDlOptions[0],\n            animation = _c.animation,\n            defer = _c.defer,\n            animationConfig = defer ?\n                DataLabel_getDeferredAnimation(chart,\n            animation,\n            series) :\n                { defer: 0,\n            duration: 0 };\n        DataLabel_fireEvent(this, 'drawDataLabels');\n        if ((_a = series.hasDataLabels) === null || _a === void 0 ? void 0 : _a.call(series)) {\n            dataLabelsGroup = this.initDataLabels(animationConfig);\n            // Make the labels for each point\n            points.forEach(function (point) {\n                var _a,\n                    _b;\n                var dataLabels = point.dataLabels || [];\n                // Merge in series options for the point.\n                // @note dataLabelAttribs (like pointAttribs) would eradicate\n                // the need for dlOptions, and simplify the section below.\n                pointOptions = DataLabel_splat(mergeArrays(seriesDlOptions, \n                // The dlOptions prop is used in treemaps\n                point.dlOptions || ((_a = point.options) === null || _a === void 0 ? void 0 : _a.dataLabels)));\n                // Handle each individual data label for this point\n                pointOptions.forEach(function (labelOptions, i) {\n                    // Options for one datalabel\n                    var labelEnabled = (labelOptions.enabled &&\n                            (point.visible || point.dataLabelOnHidden) &&\n                            // #2282, #4641, #7112, #10049\n                            (!point.isNull || point.dataLabelOnNull) &&\n                            applyFilter(point,\n                        labelOptions)),\n                        backgroundColor = labelOptions.backgroundColor,\n                        borderColor = labelOptions.borderColor,\n                        distance = labelOptions.distance,\n                        _a = labelOptions.style,\n                        style = _a === void 0 ? {} : _a;\n                    var formatString,\n                        labelText,\n                        rotation,\n                        attr = {},\n                        dataLabel = dataLabels[i],\n                        isNew = !dataLabel,\n                        labelBgColor;\n                    if (labelEnabled) {\n                        // Create individual options structure that can be\n                        // extended without affecting others\n                        formatString = DataLabel_pick(labelOptions[point.formatPrefix + 'Format'], labelOptions.format);\n                        labelText = DataLabel_defined(formatString) ?\n                            DataLabel_format(formatString, point, chart) :\n                            (labelOptions[point.formatPrefix + 'Formatter'] ||\n                                labelOptions.formatter).call(point, labelOptions);\n                        rotation = labelOptions.rotation;\n                        if (!chart.styledMode) {\n                            // Determine the color\n                            style.color = DataLabel_pick(labelOptions.color, style.color, DataLabel_isString(series.color) ? series.color : void 0, \"#000000\" /* Palette.neutralColor100 */);\n                            // Get automated contrast color\n                            if (style.color === 'contrast') {\n                                if (backgroundColor !== 'none') {\n                                    labelBgColor = backgroundColor;\n                                }\n                                point.contrastColor = renderer.getContrast(labelBgColor !== 'auto' && labelBgColor ||\n                                    (point.color || series.color));\n                                style.color = (labelBgColor || // #20007\n                                    (!DataLabel_defined(distance) &&\n                                        labelOptions.inside) ||\n                                    DataLabel_pInt(distance || 0) < 0 ||\n                                    seriesOptions.stacking) ?\n                                    point.contrastColor :\n                                    contrastColor;\n                            }\n                            else {\n                                delete point.contrastColor;\n                            }\n                            if (seriesOptions.cursor) {\n                                style.cursor = seriesOptions.cursor;\n                            }\n                        }\n                        attr = {\n                            r: labelOptions.borderRadius || 0,\n                            rotation: rotation,\n                            padding: labelOptions.padding,\n                            zIndex: 1\n                        };\n                        if (!chart.styledMode) {\n                            attr.fill = backgroundColor === 'auto' ?\n                                point.color :\n                                backgroundColor;\n                            attr.stroke = borderColor === 'auto' ?\n                                point.color :\n                                borderColor;\n                            attr['stroke-width'] = labelOptions.borderWidth;\n                        }\n                        // Remove unused attributes (#947)\n                        DataLabel_objectEach(attr, function (val, name) {\n                            if (typeof val === 'undefined') {\n                                delete attr[name];\n                            }\n                        });\n                    }\n                    // If the point is outside the plot area, or the label\n                    // changes properties that we cannot change, destroy it and\n                    // build a new one below. #678, #820.\n                    if (dataLabel && (!labelEnabled ||\n                        !DataLabel_defined(labelText) ||\n                        !!dataLabel.div !== !!labelOptions.useHTML ||\n                        (\n                        // Change from no rotation to rotation and\n                        // vice versa. Don't use defined() because\n                        // rotation = 0 means also rotation = undefined\n                        (!dataLabel.rotation ||\n                            !labelOptions.rotation) &&\n                            dataLabel.rotation !== labelOptions.rotation))) {\n                        dataLabel = void 0;\n                        isNew = true;\n                    }\n                    // Individual labels are disabled if the are explicitly\n                    // disabled in the point options, or if they fall outside\n                    // the plot area.\n                    if (labelEnabled && DataLabel_defined(labelText)) {\n                        if (!dataLabel) {\n                            // Create new label element\n                            dataLabel = renderer.label(labelText, 0, 0, labelOptions.shape, void 0, void 0, labelOptions.useHTML, void 0, 'data-label');\n                            dataLabel.addClass(' highcharts-data-label-color-' +\n                                point.colorIndex +\n                                ' ' + (labelOptions.className || '') +\n                                ( // #3398\n                                labelOptions.useHTML ?\n                                    ' highcharts-tracker' :\n                                    ''));\n                        }\n                        else {\n                            // Use old element and just update text\n                            attr.text = labelText;\n                        }\n                        // Store data label options for later access\n                        if (dataLabel) {\n                            dataLabel.options = labelOptions;\n                            dataLabel.attr(attr);\n                            if (!chart.styledMode) {\n                                // Styles must be applied before add in order to\n                                // read text bounding box\n                                dataLabel.css(style).shadow(labelOptions.shadow);\n                            }\n                            else if (style.width) {\n                                // In styled mode with a width property set,\n                                // the width should be applied to the\n                                // dataLabel. (#20499). These properties affect\n                                // layout and must be applied also in styled\n                                // mode.\n                                dataLabel.css({\n                                    width: style.width,\n                                    textOverflow: style.textOverflow,\n                                    whiteSpace: style.whiteSpace\n                                });\n                            }\n                            DataLabel_fireEvent(dataLabel, 'beforeAddingDataLabel', { labelOptions: labelOptions, point: point });\n                            if (!dataLabel.added) {\n                                dataLabel.add(dataLabelsGroup);\n                            }\n                            // Now the data label is created and placed at 0,0,\n                            // so we need to align it\n                            series.alignDataLabel(point, dataLabel, labelOptions, void 0, isNew);\n                            dataLabel.isActive = true;\n                            if (dataLabels[i] && dataLabels[i] !== dataLabel) {\n                                dataLabels[i].destroy();\n                            }\n                            dataLabels[i] = dataLabel;\n                        }\n                    }\n                });\n                // Destroy and remove the inactive ones\n                var j = dataLabels.length;\n                while (j--) {\n                    // The item can be undefined if a disabled data label is\n                    // succeeded by an enabled one (#19457)\n                    if (!dataLabels[j] || !dataLabels[j].isActive) {\n                        (_b = dataLabels[j]) === null || _b === void 0 ? void 0 : _b.destroy();\n                        dataLabels.splice(j, 1);\n                    }\n                    else {\n                        dataLabels[j].isActive = false;\n                    }\n                }\n                // Write back\n                point.dataLabel = dataLabels[0];\n                point.dataLabels = dataLabels;\n            });\n        }\n        DataLabel_fireEvent(this, 'afterDrawDataLabels');\n    }\n    /**\n     * If data labels fall partly outside the plot area, align them back in, in\n     * a way that doesn't hide the point.\n     * @private\n     */\n    function justifyDataLabel(dataLabel, options, alignAttr, bBox, alignTo, isNew) {\n        var chart = this.chart,\n            align = options.align,\n            verticalAlign = options.verticalAlign,\n            padding = dataLabel.box ? 0 : (dataLabel.padding || 0),\n            horizontalAxis = chart.inverted ? this.yAxis : this.xAxis,\n            horizontalAxisShift = horizontalAxis ?\n                horizontalAxis.left - chart.plotLeft : 0,\n            verticalAxis = chart.inverted ? this.xAxis : this.yAxis,\n            verticalAxisShift = verticalAxis ?\n                verticalAxis.top - chart.plotTop : 0;\n        var _a = options.x,\n            x = _a === void 0 ? 0 : _a,\n            _b = options.y,\n            y = _b === void 0 ? 0 : _b,\n            off,\n            justified;\n        // Off left\n        off = (alignAttr.x || 0) + padding + horizontalAxisShift;\n        if (off < 0) {\n            if (align === 'right' && x >= 0) {\n                options.align = 'left';\n                options.inside = true;\n            }\n            else {\n                x -= off;\n            }\n            justified = true;\n        }\n        // Off right\n        off = (alignAttr.x || 0) + bBox.width - padding + horizontalAxisShift;\n        if (off > chart.plotWidth) {\n            if (align === 'left' && x <= 0) {\n                options.align = 'right';\n                options.inside = true;\n            }\n            else {\n                x += chart.plotWidth - off;\n            }\n            justified = true;\n        }\n        // Off top\n        off = alignAttr.y + padding + verticalAxisShift;\n        if (off < 0) {\n            if (verticalAlign === 'bottom' && y >= 0) {\n                options.verticalAlign = 'top';\n                options.inside = true;\n            }\n            else {\n                y -= off;\n            }\n            justified = true;\n        }\n        // Off bottom\n        off = (alignAttr.y || 0) + bBox.height - padding + verticalAxisShift;\n        if (off > chart.plotHeight) {\n            if (verticalAlign === 'top' && y <= 0) {\n                options.verticalAlign = 'bottom';\n                options.inside = true;\n            }\n            else {\n                y += chart.plotHeight - off;\n            }\n            justified = true;\n        }\n        if (justified) {\n            options.x = x;\n            options.y = y;\n            dataLabel.placed = !isNew;\n            dataLabel.align(options, void 0, alignTo);\n        }\n        return justified;\n    }\n    /**\n     * Merge two objects that can be arrays. If one of them is an array, the\n     * other is merged into each element. If both are arrays, each element is\n     * merged by index. If neither are arrays, we use normal merge.\n     * @private\n     */\n    function mergeArrays(one, two) {\n        var res = [],\n            i;\n        if (DataLabel_isArray(one) && !DataLabel_isArray(two)) {\n            res = one.map(function (el) {\n                return DataLabel_merge(el, two);\n            });\n        }\n        else if (DataLabel_isArray(two) && !DataLabel_isArray(one)) {\n            res = two.map(function (el) {\n                return DataLabel_merge(one, el);\n            });\n        }\n        else if (!DataLabel_isArray(one) && !DataLabel_isArray(two)) {\n            res = DataLabel_merge(one, two);\n        }\n        else if (DataLabel_isArray(one) && DataLabel_isArray(two)) {\n            i = Math.max(one.length, two.length);\n            while (i--) {\n                res[i] = DataLabel_merge(one[i], two[i]);\n            }\n        }\n        return res;\n    }\n    /**\n     * Merge plotOptions and series options for dataLabels.\n     * @private\n     */\n    function mergedDataLabelOptions(series) {\n        var _a,\n            _b;\n        var plotOptions = series.chart.options.plotOptions;\n        return DataLabel_splat(mergeArrays(mergeArrays((_a = plotOptions === null || plotOptions === void 0 ? void 0 : plotOptions.series) === null || _a === void 0 ? void 0 : _a.dataLabels, (_b = plotOptions === null || plotOptions === void 0 ? void 0 : plotOptions[series.type]) === null || _b === void 0 ? void 0 : _b.dataLabels), series.options.dataLabels));\n    }\n    /**\n     * Set starting position for data label sorting animation.\n     * @private\n     */\n    function setDataLabelStartPos(point, dataLabel, isNew, isInside, alignOptions) {\n        var chart = this.chart, inverted = chart.inverted, xAxis = this.xAxis, reversed = xAxis.reversed, labelCenter = ((inverted ? dataLabel.height : dataLabel.width) || 0) / 2, pointWidth = point.pointWidth, halfWidth = pointWidth ? pointWidth / 2 : 0;\n        dataLabel.startXPos = inverted ?\n            alignOptions.x :\n            (reversed ?\n                -labelCenter - halfWidth :\n                xAxis.width - labelCenter + halfWidth);\n        dataLabel.startYPos = inverted ?\n            (reversed ?\n                this.yAxis.height - labelCenter + halfWidth :\n                -labelCenter - halfWidth) : alignOptions.y;\n        // We need to handle visibility in case of sorting point outside plot\n        // area\n        if (!isInside) {\n            dataLabel\n                .attr({ opacity: 1 })\n                .animate({ opacity: 0 }, void 0, dataLabel.hide);\n        }\n        else if (dataLabel.visibility === 'hidden') {\n            dataLabel.show();\n            dataLabel\n                .attr({ opacity: 0 })\n                .animate({ opacity: 1 });\n        }\n        // Save start position on first render, but do not change position\n        if (!chart.hasRendered) {\n            return;\n        }\n        // Set start position\n        if (isNew) {\n            dataLabel.attr({ x: dataLabel.startXPos, y: dataLabel.startYPos });\n        }\n        dataLabel.placed = true;\n    }\n})(DataLabel || (DataLabel = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Series_DataLabel = (DataLabel);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * Callback JavaScript function to format the data label as a string. Note that\n * if a `format` is defined, the format takes precedence and the formatter is\n * ignored.\n *\n * @callback Highcharts.DataLabelsFormatterCallbackFunction\n *\n * @param {Highcharts.Point} this\n * Data label context to format\n *\n * @param {Highcharts.DataLabelsOptions} options\n * [API options](/highcharts/plotOptions.series.dataLabels) of the data label\n *\n * @return {number|string|null|undefined}\n * Formatted data label text\n */\n/**\n * Values for handling data labels that flow outside the plot area.\n *\n * @typedef {\"allow\"|\"justify\"} Highcharts.DataLabelsOverflowValue\n */\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Series/Column/ColumnDataLabel.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar ColumnDataLabel_composed = Core_Globals.composed;\n\nvar ColumnDataLabel_Series = Series_SeriesRegistry.series;\n\nvar ColumnDataLabel_merge = Core_Utilities.merge, ColumnDataLabel_pick = Core_Utilities.pick, ColumnDataLabel_pushUnique = Core_Utilities.pushUnique;\n/* *\n *\n *  Composition\n *\n * */\nvar ColumnDataLabel;\n(function (ColumnDataLabel) {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Override the basic data label alignment by adjusting for the position of\n     * the column.\n     * @private\n     */\n    function alignDataLabel(point, dataLabel, options, alignTo, isNew) {\n        var inverted = this.chart.inverted,\n            series = point.series,\n            xLen = (series.xAxis ? series.xAxis.len : this.chart.plotSizeX) || 0,\n            yLen = (series.yAxis ? series.yAxis.len : this.chart.plotSizeY) || 0, \n            // Data label box for alignment\n            dlBox = point.dlBox || point.shapeArgs,\n            below = ColumnDataLabel_pick(point.below, // Range series\n            point.plotY >\n                ColumnDataLabel_pick(this.translatedThreshold,\n            yLen)), \n            // Draw it inside the box?\n            inside = ColumnDataLabel_pick(options.inside, !!this.options.stacking);\n        // Align to the column itself, or the top of it\n        if (dlBox) { // Area range uses this method but not alignTo\n            alignTo = ColumnDataLabel_merge(dlBox);\n            // Check for specific overflow and crop conditions (#13240)\n            if (!(options.overflow === 'allow' && options.crop === false)) {\n                if (alignTo.y < 0) {\n                    alignTo.height += alignTo.y;\n                    alignTo.y = 0;\n                }\n                // If parts of the box overshoots outside the plot area, modify\n                // the box to center the label inside\n                var overshoot = alignTo.y + alignTo.height - yLen;\n                if (overshoot > 0 && overshoot < alignTo.height - 1) {\n                    alignTo.height -= overshoot;\n                }\n            }\n            if (inverted) {\n                alignTo = {\n                    x: yLen - alignTo.y - alignTo.height,\n                    y: xLen - alignTo.x - alignTo.width,\n                    width: alignTo.height,\n                    height: alignTo.width\n                };\n            }\n            // Compute the alignment box\n            if (!inside) {\n                if (inverted) {\n                    alignTo.x += below ? 0 : alignTo.width;\n                    alignTo.width = 0;\n                }\n                else {\n                    alignTo.y += below ? alignTo.height : 0;\n                    alignTo.height = 0;\n                }\n            }\n        }\n        // When alignment is undefined (typically columns and bars), display the\n        // individual point below or above the point depending on the threshold\n        options.align = ColumnDataLabel_pick(options.align, !inverted || inside ? 'center' : below ? 'right' : 'left');\n        options.verticalAlign = ColumnDataLabel_pick(options.verticalAlign, inverted || inside ? 'middle' : below ? 'top' : 'bottom');\n        // Call the parent method\n        ColumnDataLabel_Series.prototype.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew);\n        // If label was justified and we have contrast, set it:\n        if (options.inside && point.contrastColor) {\n            dataLabel.css({\n                color: point.contrastColor\n            });\n        }\n    }\n    /** @private */\n    function compose(ColumnSeriesClass) {\n        Series_DataLabel.compose(ColumnDataLabel_Series);\n        if (ColumnDataLabel_pushUnique(ColumnDataLabel_composed, 'ColumnDataLabel')) {\n            ColumnSeriesClass.prototype.alignDataLabel = alignDataLabel;\n        }\n    }\n    ColumnDataLabel.compose = compose;\n})(ColumnDataLabel || (ColumnDataLabel = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Column_ColumnDataLabel = (ColumnDataLabel);\n\n;// ./code/es5/es-modules/Series/Bar/BarSeries.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar BarSeries_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n        p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\nvar BarSeries_extend = Core_Utilities.extend, BarSeries_merge = Core_Utilities.merge;\n/* *\n *\n *  Class\n *\n * */\n/**\n * Bar series type.\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.bar\n *\n * @augments Highcharts.Series\n */\nvar BarSeries = /** @class */ (function (_super) {\n    BarSeries_extends(BarSeries, _super);\n    function BarSeries() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    /**\n     * A bar series is a special type of column series where the columns are\n     * horizontal.\n     *\n     * @sample highcharts/demo/bar-chart/\n     *         Bar chart\n     *\n     * @extends      plotOptions.column\n     * @product      highcharts\n     * @optionparent plotOptions.bar\n     */\n    BarSeries.defaultOptions = BarSeries_merge(Column_ColumnSeries.defaultOptions, {\n    // Nothing here yet\n    });\n    return BarSeries;\n}(Column_ColumnSeries));\nBarSeries_extend(BarSeries.prototype, {\n    inverted: true\n});\nSeries_SeriesRegistry.registerSeriesType('bar', BarSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Bar_BarSeries = ((/* unused pure expression or super */ null && (BarSeries)));\n/* *\n *\n *  API Options\n *\n * */\n/**\n * A `bar` series. If the [type](#series.bar.type) option is not specified,\n * it is inherited from [chart.type](#chart.type).\n *\n * @extends   series,plotOptions.bar\n * @excluding connectNulls, dashStyle, dataParser, dataURL, gapSize, gapUnit,\n *            linecap, lineWidth, marker, connectEnds, step\n * @product   highcharts\n * @apioption series.bar\n */\n/**\n * An array of data points for the series. For the `bar` series type,\n * points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n *    interpreted as `y` options. The `x` values will be automatically\n *    calculated, either starting at 0 and incremented by 1, or from\n *    `pointStart` and `pointInterval` given in the series options. If the axis\n *    has categories, these will be used. Example:\n *    ```js\n *    data: [0, 5, 3, 5]\n *    ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n *    `x,y`. If the first value is a string, it is applied as the name of the\n *    point, and the `x` value is inferred.\n *    ```js\n *    data: [\n *        [0, 5],\n *        [1, 10],\n *        [2, 3]\n *    ]\n *    ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n *    few settings, see the complete options set below. If the total number of\n *    data points exceeds the series'\n *    [turboThreshold](#series.bar.turboThreshold), this option is not\n *    available.\n *    ```js\n *    data: [{\n *        x: 1,\n *        y: 1,\n *        name: \"Point2\",\n *        color: \"#00FF00\"\n *    }, {\n *        x: 1,\n *        y: 10,\n *        name: \"Point1\",\n *        color: \"#FF00FF\"\n *    }]\n *    ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n *         Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n *         Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n *         Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n *         Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n *         Config objects\n *\n * @type      {Array<number|Array<(number|string),(number|null)>|null|*>}\n * @extends   series.column.data\n * @product   highcharts\n * @apioption series.bar.data\n */\n/**\n * @excluding halo,lineWidth,lineWidthPlus,marker\n * @product   highcharts highstock\n * @apioption series.bar.states.hover\n */\n/**\n * @excluding halo,lineWidth,lineWidthPlus,marker\n * @product   highcharts highstock\n * @apioption series.bar.states.select\n */\n''; // Gets doclets above into transpiled\n\n;// ./code/es5/es-modules/Series/Scatter/ScatterSeriesDefaults.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 *  API Options\n *\n * */\n/**\n * A scatter plot uses cartesian coordinates to display values for two\n * variables for a set of data.\n *\n * @sample {highcharts} highcharts/demo/scatter/\n *         Scatter plot\n *\n * @extends      plotOptions.line\n * @excluding    cropThreshold, legendSymbolColor, pointPlacement, shadow,\n *               useOhlcData\n * @product      highcharts highstock\n * @optionparent plotOptions.scatter\n */\nvar ScatterSeriesDefaults = {\n    /**\n     * The width of the line connecting the data points.\n     *\n     * @sample {highcharts} highcharts/plotoptions/scatter-linewidth-none/\n     *         0 by default\n     * @sample {highcharts} highcharts/plotoptions/scatter-linewidth-1/\n     *         1px\n     *\n     * @product highcharts highstock\n     */\n    lineWidth: 0,\n    findNearestPointBy: 'xy',\n    /**\n     * Apply a jitter effect for the rendered markers. When plotting\n     * discrete values, a little random noise may help telling the points\n     * apart. The jitter setting applies a random displacement of up to `n`\n     * axis units in either direction. So for example on a horizontal X\n     * axis, setting the `jitter.x` to 0.24 will render the point in a\n     * random position between 0.24 units to the left and 0.24 units to the\n     * right of the true axis position. On a category axis, setting it to\n     * 0.5 will fill up the bin and make the data appear continuous.\n     *\n     * When rendered on top of a box plot or a column series, a jitter value\n     * of 0.24 will correspond to the underlying series' default\n     * [groupPadding](\n     * https://api.highcharts.com/highcharts/plotOptions.column.groupPadding)\n     * and [pointPadding](\n     * https://api.highcharts.com/highcharts/plotOptions.column.pointPadding)\n     * settings.\n     *\n     * **Note:** With boost mode enabled, the jitter effect is not supported.\n     *\n     * @sample {highcharts} highcharts/demo/scatter-jitter\n     *         Jitter on a scatter plot\n     *\n     * @sample {highcharts} highcharts/series-scatter/jitter-boxplot\n     *         Jittered scatter plot on top of a box plot\n     *\n     * @product highcharts highstock\n     * @since 7.0.2\n     */\n    jitter: {\n        /**\n         * The maximal X offset for the random jitter effect.\n         */\n        x: 0,\n        /**\n         * The maximal Y offset for the random jitter effect.\n         */\n        y: 0\n    },\n    marker: {\n        enabled: true // Overrides auto-enabling in line series (#3647)\n    },\n    /**\n     * Sticky tracking of mouse events. When true, the `mouseOut` event\n     * on a series isn't triggered until the mouse moves over another\n     * series, or out of the plot area. When false, the `mouseOut` event on\n     * a series is triggered when the mouse leaves the area around the\n     * series' graph or markers. This also implies the tooltip. When\n     * `stickyTracking` is false and `tooltip.shared` is false, the tooltip\n     * will be hidden when moving the mouse between series.\n     *\n     * @type      {boolean}\n     * @default   false\n     * @product   highcharts highstock highmaps\n     * @apioption plotOptions.scatter.stickyTracking\n     */\n    /**\n     * A configuration object for the tooltip rendering of each single\n     * series. Properties are inherited from [tooltip](#tooltip).\n     * Overridable properties are `headerFormat`, `pointFormat`,\n     * `yDecimals`, `xDateFormat`, `yPrefix` and `ySuffix`. Unlike other\n     * series, in a scatter plot the series.name by default shows in the\n     * headerFormat and point.x and point.y in the pointFormat.\n     *\n     * @product highcharts highstock highmaps\n     */\n    tooltip: {\n        /**\n         * @product highcharts highstock\n         */\n        headerFormat: '<span style=\"color:{point.color}\">\\u25CF</span> ' +\n            '<span style=\"font-size: 0.8em\"> {series.name}</span><br/>',\n        pointFormat: 'x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>'\n    }\n};\n/**\n * A `scatter` series. If the [type](#series.scatter.type) option is\n * not specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends   series,plotOptions.scatter\n * @excluding cropThreshold, dataParser, dataURL, useOhlcData\n * @product   highcharts highstock\n * @apioption series.scatter\n */\n/**\n * An array of data points for the series. For the `scatter` series\n * type, points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n *    interpreted as `y` options. The `x` values will be automatically\n *    calculated, either starting at 0 and incremented by 1, or from\n *    `pointStart` and `pointInterval` given in the series options. If the axis\n *    has categories, these will be used. Example:\n *    ```js\n *    data: [0, 5, 3, 5]\n *    ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n *    `x,y`. If the first value is a string, it is applied as the name of the\n *    point, and the `x` value is inferred.\n *    ```js\n *    data: [\n *        [0, 0],\n *        [1, 8],\n *        [2, 9]\n *    ]\n *    ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n *    few settings, see the complete options set below. If the total number of\n *    data points exceeds the series'\n *    [turboThreshold](#series.scatter.turboThreshold), this option is not\n *    available.\n *    ```js\n *    data: [{\n *        x: 1,\n *        y: 2,\n *        name: \"Point2\",\n *        color: \"#00FF00\"\n *    }, {\n *        x: 1,\n *        y: 4,\n *        name: \"Point1\",\n *        color: \"#FF00FF\"\n *    }]\n *    ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n *         Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n *         Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n *         Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n *         Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n *         Config objects\n *\n * @type      {Array<number|Array<(number|string),(number|null)>|null|*>}\n * @extends   series.line.data\n * @product   highcharts highstock\n * @apioption series.scatter.data\n */\n''; // Keeps doclets above in JS file\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Scatter_ScatterSeriesDefaults = (ScatterSeriesDefaults);\n\n;// ./code/es5/es-modules/Series/Scatter/ScatterSeries.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar ScatterSeries_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n        p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\nvar ScatterSeries_a = Series_SeriesRegistry.seriesTypes, ScatterSeries_ColumnSeries = ScatterSeries_a.column, ScatterSeries_LineSeries = ScatterSeries_a.line;\n\nvar ScatterSeries_addEvent = Core_Utilities.addEvent, ScatterSeries_extend = Core_Utilities.extend, ScatterSeries_merge = Core_Utilities.merge;\n/* *\n *\n *  Class\n *\n * */\n/**\n * Scatter series type.\n *\n * @private\n */\nvar ScatterSeries = /** @class */ (function (_super) {\n    ScatterSeries_extends(ScatterSeries, _super);\n    function ScatterSeries() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * Optionally add the jitter effect.\n     * @private\n     */\n    ScatterSeries.prototype.applyJitter = function () {\n        var series = this,\n            jitter = this.options.jitter,\n            len = this.points.length;\n        /**\n         * Return a repeatable, pseudo-random number based on an integer\n         * seed.\n         * @private\n         */\n        function unrandom(seed) {\n            var rand = Math.sin(seed) * 10000;\n            return rand - Math.floor(rand);\n        }\n        if (jitter) {\n            this.points.forEach(function (point, i) {\n                ['x', 'y'].forEach(function (dim, j) {\n                    if (jitter[dim] && !point.isNull) {\n                        var plotProp = \"plot\".concat(dim.toUpperCase()), axis = series[\"\" + dim + \"Axis\"], translatedJitter = jitter[dim] *\n                                axis.transA;\n                        if (axis && !axis.logarithmic) {\n                            // Identify the outer bounds of the jitter range\n                            var min = Math.max(0, (point[plotProp] || 0) - translatedJitter),\n                                max = Math.min(axis.len, (point[plotProp] || 0) + translatedJitter);\n                            // Find a random position within this range\n                            point[plotProp] = min +\n                                (max - min) * unrandom(i + j * len);\n                            // Update clientX for the tooltip k-d-tree\n                            if (dim === 'x') {\n                                point.clientX = point.plotX;\n                            }\n                        }\n                    }\n                });\n            });\n        }\n    };\n    /**\n     * @private\n     */\n    ScatterSeries.prototype.drawGraph = function () {\n        if (this.options.lineWidth) {\n            _super.prototype.drawGraph.call(this);\n        }\n        else if (this.graph) {\n            this.graph = this.graph.destroy();\n        }\n    };\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    ScatterSeries.defaultOptions = ScatterSeries_merge(ScatterSeries_LineSeries.defaultOptions, Scatter_ScatterSeriesDefaults);\n    return ScatterSeries;\n}(ScatterSeries_LineSeries));\nScatterSeries_extend(ScatterSeries.prototype, {\n    drawTracker: ScatterSeries_ColumnSeries.prototype.drawTracker,\n    sorted: false,\n    requireSorting: false,\n    noSharedTooltip: true,\n    trackerGroups: ['group', 'markerGroup', 'dataLabelsGroup']\n});\n/* *\n *\n *  Events\n *\n * */\n/* eslint-disable no-invalid-this */\nScatterSeries_addEvent(ScatterSeries, 'afterTranslate', function () {\n    this.applyJitter();\n});\nSeries_SeriesRegistry.registerSeriesType('scatter', ScatterSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Scatter_ScatterSeries = ((/* unused pure expression or super */ null && (ScatterSeries)));\n\n;// ./code/es5/es-modules/Series/CenteredUtilities.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar CenteredUtilities_deg2rad = Core_Globals.deg2rad;\n\n\nvar CenteredUtilities_fireEvent = Core_Utilities.fireEvent, CenteredUtilities_isNumber = Core_Utilities.isNumber, CenteredUtilities_pick = Core_Utilities.pick, CenteredUtilities_relativeLength = Core_Utilities.relativeLength;\n/**\n * @private\n */\nvar CenteredUtilities;\n(function (CenteredUtilities) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * Get the center of the pie based on the size and center options relative\n     * to the plot area. Borrowed by the polar and gauge series types.\n     *\n     * @private\n     * @function Highcharts.CenteredSeriesMixin.getCenter\n     */\n    function getCenter() {\n        var options = this.options,\n            chart = this.chart,\n            slicingRoom = 2 * (options.slicedOffset || 0),\n            plotWidth = chart.plotWidth - 2 * slicingRoom,\n            plotHeight = chart.plotHeight - 2 * slicingRoom,\n            centerOption = options.center,\n            smallestSize = Math.min(plotWidth,\n            plotHeight),\n            thickness = options.thickness;\n        var handleSlicingRoom,\n            size = options.size,\n            innerSize = options.innerSize || 0,\n            i,\n            value;\n        if (typeof size === 'string') {\n            size = parseFloat(size);\n        }\n        if (typeof innerSize === 'string') {\n            innerSize = parseFloat(innerSize);\n        }\n        var positions = [\n                CenteredUtilities_pick(centerOption === null || centerOption === void 0 ? void 0 : centerOption[0], '50%'),\n                CenteredUtilities_pick(centerOption === null || centerOption === void 0 ? void 0 : centerOption[1], '50%'),\n                // Prevent from negative values\n                CenteredUtilities_pick(size && size < 0 ? void 0 : options.size, '100%'),\n                CenteredUtilities_pick(innerSize && innerSize < 0 ? void 0 : options.innerSize || 0, '0%')\n            ];\n        // No need for inner size in angular (gauges) series but still required\n        // for pie series\n        if (chart.angular && !(this instanceof Series_Series)) {\n            positions[3] = 0;\n        }\n        for (i = 0; i < 4; ++i) {\n            value = positions[i];\n            handleSlicingRoom = i < 2 || (i === 2 && /%$/.test(value));\n            // I == 0: centerX, relative to width\n            // i == 1: centerY, relative to height\n            // i == 2: size, relative to smallestSize\n            // i == 3: innerSize, relative to size\n            positions[i] = CenteredUtilities_relativeLength(value, [plotWidth, plotHeight, smallestSize, positions[2]][i]) + (handleSlicingRoom ? slicingRoom : 0);\n        }\n        // Inner size cannot be larger than size (#3632)\n        if (positions[3] > positions[2]) {\n            positions[3] = positions[2];\n        }\n        // Thickness overrides innerSize, need to be less than pie size (#6647)\n        if (CenteredUtilities_isNumber(thickness) &&\n            thickness * 2 < positions[2] && thickness > 0) {\n            positions[3] = positions[2] - thickness * 2;\n        }\n        CenteredUtilities_fireEvent(this, 'afterGetCenter', { positions: positions });\n        return positions;\n    }\n    CenteredUtilities.getCenter = getCenter;\n    /**\n     * GetStartAndEndRadians - Calculates start and end angles in radians.\n     * Used in series types such as pie and sunburst.\n     *\n     * @private\n     * @function Highcharts.CenteredSeriesMixin.getStartAndEndRadians\n     *\n     * @param {number} [start]\n     *        Start angle in degrees.\n     *\n     * @param {number} [end]\n     *        Start angle in degrees.\n     *\n     * @return {Highcharts.RadianAngles}\n     *         Returns an object containing start and end angles as radians.\n     */\n    function getStartAndEndRadians(start, end) {\n        var startAngle = CenteredUtilities_isNumber(start) ? start : 0, // Must be a number\n            endAngle = ((CenteredUtilities_isNumber(end) && // Must be a number\n                end > startAngle && // Must be larger than the start angle\n                // difference must be less than 360 degrees\n                (end - startAngle) < 360) ?\n                end :\n                startAngle + 360),\n            correction = -90;\n        return {\n            start: CenteredUtilities_deg2rad * (startAngle + correction),\n            end: CenteredUtilities_deg2rad * (endAngle + correction)\n        };\n    }\n    CenteredUtilities.getStartAndEndRadians = getStartAndEndRadians;\n})(CenteredUtilities || (CenteredUtilities = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Series_CenteredUtilities = (CenteredUtilities);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * @private\n * @interface Highcharts.RadianAngles\n */ /**\n* @name Highcharts.RadianAngles#end\n* @type {number}\n*/ /**\n* @name Highcharts.RadianAngles#start\n* @type {number}\n*/\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Series/Pie/PiePoint.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar PiePoint_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n        p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar PiePoint_assign = (undefined && undefined.__assign) || function () {\n    PiePoint_assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return PiePoint_assign.apply(this, arguments);\n};\n\nvar PiePoint_setAnimation = AnimationUtilities.setAnimation;\n\n\nvar PiePoint_addEvent = Core_Utilities.addEvent, PiePoint_defined = Core_Utilities.defined, PiePoint_extend = Core_Utilities.extend, PiePoint_isNumber = Core_Utilities.isNumber, PiePoint_pick = Core_Utilities.pick, PiePoint_relativeLength = Core_Utilities.relativeLength;\n/* *\n *\n *  Class\n *\n * */\nvar PiePoint = /** @class */ (function (_super) {\n    PiePoint_extends(PiePoint, _super);\n    /**\n     * Initialize the pie slice.\n     * @private\n     */\n    function PiePoint(series, options, x) {\n        var _a;\n        var _this = _super.call(this,\n            series,\n            options,\n            x) || this;\n        _this.half = 0;\n        (_a = _this.name) !== null && _a !== void 0 ? _a : (_this.name = 'Slice');\n        // Add event listener for select\n        var toggleSlice = function (e) {\n                _this.slice(e.type === 'select');\n        };\n        PiePoint_addEvent(_this, 'select', toggleSlice);\n        PiePoint_addEvent(_this, 'unselect', toggleSlice);\n        return _this;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * Extendable method for getting the path of the connector between the\n     * data label and the pie slice.\n     * @private\n     */\n    PiePoint.prototype.getConnectorPath = function (dataLabel) {\n        var labelPosition = dataLabel.dataLabelPosition,\n            options = (dataLabel.options || {}),\n            connectorShape = options.connectorShape,\n            shapeFunc = (this.connectorShapes[connectorShape] || connectorShape);\n        return labelPosition && shapeFunc.call(this, PiePoint_assign(PiePoint_assign({}, labelPosition.computed), { alignment: labelPosition.alignment }), labelPosition.connectorPosition, options) || [];\n    };\n    /**\n     * @private\n     */\n    PiePoint.prototype.getTranslate = function () {\n        return this.sliced && this.slicedTranslation || {\n            translateX: 0,\n            translateY: 0\n        };\n    };\n    /**\n     * @private\n     */\n    PiePoint.prototype.haloPath = function (size) {\n        var shapeArgs = this.shapeArgs;\n        return this.sliced || !this.visible ?\n            [] :\n            this.series.chart.renderer.symbols.arc(shapeArgs.x, shapeArgs.y, shapeArgs.r + size, shapeArgs.r + size, {\n                // Substract 1px to ensure the background is not bleeding\n                // through between the halo and the slice (#7495).\n                innerR: shapeArgs.r - 1,\n                start: shapeArgs.start,\n                end: shapeArgs.end,\n                borderRadius: shapeArgs.borderRadius\n            });\n    };\n    /**\n     * Negative points are not valid (#1530, #3623, #5322)\n     * @private\n     */\n    PiePoint.prototype.isValid = function () {\n        return PiePoint_isNumber(this.y) && this.y >= 0;\n    };\n    /**\n     * Toggle the visibility of a pie slice or other data point. Note that this\n     * method is available only for some series, like pie, treemap and sunburst.\n     *\n     * @function Highcharts.Point#setVisible\n     *\n     * @param {boolean} [vis]\n     * True to show the pie slice or other data point, false to hide. If\n     * undefined, the visibility is toggled.\n     *\n     * @param {boolean} [redraw] Whether to redraw the chart after the point is\n     * altered. If doing more operations on the chart, it is a good idea to set\n     * redraw to false and call {@link Chart#redraw|chart.redraw()} after.\n     *\n     */\n    PiePoint.prototype.setVisible = function (vis, redraw) {\n        if (redraw === void 0) { redraw = true; }\n        if (vis !== this.visible) {\n            // If called without an argument, toggle visibility\n            this.update({\n                visible: vis !== null && vis !== void 0 ? vis : !this.visible\n            }, redraw, void 0, false);\n        }\n    };\n    /**\n     * Set or toggle whether the slice is cut out from the pie.\n     * @private\n     *\n     * @param {boolean} sliced\n     * When undefined, the slice state is toggled.\n     *\n     * @param {boolean} [redraw]\n     * Whether to redraw the chart. True by default.\n     *\n     * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n     * Animation options.\n     */\n    PiePoint.prototype.slice = function (sliced, redraw, animation) {\n        var series = this.series,\n            chart = series.chart;\n        PiePoint_setAnimation(animation, chart);\n        // Redraw is true by default\n        redraw = PiePoint_pick(redraw, true);\n        /**\n         * Pie series only. Whether to display a slice offset from the\n         * center.\n         * @name Highcharts.Point#sliced\n         * @type {boolean|undefined}\n         */\n        // if called without an argument, toggle\n        this.sliced = this.options.sliced = sliced =\n            PiePoint_defined(sliced) ? sliced : !this.sliced;\n        // Update userOptions.data\n        series.options.data[series.data.indexOf(this)] =\n            this.options;\n        if (this.graphic) {\n            this.graphic.animate(this.getTranslate());\n        }\n    };\n    return PiePoint;\n}(Series_Point));\nPiePoint_extend(PiePoint.prototype, {\n    connectorShapes: {\n        // Only one available before v7.0.0\n        fixedOffset: function (labelPosition, connectorPosition, options) {\n            var breakAt = connectorPosition.breakAt,\n                touchingSliceAt = connectorPosition.touchingSliceAt,\n                lineSegment = options.softConnector ? [\n                    'C', // Soft break\n                    // 1st control point (of the curve)\n                    labelPosition.x +\n                        // 5 gives the connector a little horizontal bend\n                        (labelPosition.alignment === 'left' ? -5 : 5),\n                    labelPosition.y, //\n                    2 * breakAt.x - touchingSliceAt.x, // 2nd control point\n                    2 * breakAt.y - touchingSliceAt.y, //\n                    breakAt.x, // End of the curve\n                    breakAt.y //\n                ] : [\n                    'L', // Pointy break\n                    breakAt.x,\n                    breakAt.y\n                ];\n            // Assemble the path\n            return ([\n                ['M', labelPosition.x, labelPosition.y],\n                lineSegment,\n                ['L', touchingSliceAt.x, touchingSliceAt.y]\n            ]);\n        },\n        straight: function (labelPosition, connectorPosition) {\n            var touchingSliceAt = connectorPosition.touchingSliceAt;\n            // Direct line to the slice\n            return [\n                ['M', labelPosition.x, labelPosition.y],\n                ['L', touchingSliceAt.x, touchingSliceAt.y]\n            ];\n        },\n        crookedLine: function (labelPosition, connectorPosition, options) {\n            var _a = connectorPosition.angle,\n                angle = _a === void 0 ? this.angle || 0 : _a,\n                breakAt = connectorPosition.breakAt,\n                touchingSliceAt = connectorPosition.touchingSliceAt,\n                series = this.series,\n                _b = series.center,\n                cx = _b[0],\n                cy = _b[1],\n                diameter = _b[2],\n                r = diameter / 2,\n                _c = series.chart,\n                plotLeft = _c.plotLeft,\n                plotWidth = _c.plotWidth,\n                leftAligned = labelPosition.alignment === 'left',\n                x = labelPosition.x,\n                y = labelPosition.y;\n            var crookX = breakAt.x;\n            if (options.crookDistance) {\n                var crookDistance = PiePoint_relativeLength(// % to fraction\n                    options.crookDistance, 1);\n                crookX = leftAligned ?\n                    cx +\n                        r +\n                        (plotWidth + plotLeft - cx - r) * (1 - crookDistance) :\n                    plotLeft + (cx - r) * crookDistance;\n                // When the crookDistance option is undefined, make the bend in the\n                // intersection between the radial line in the middle of the slice,\n                // and the extension of the label position.\n            }\n            else {\n                crookX = cx + (cy - y) * Math.tan(angle - Math.PI / 2);\n            }\n            var path = [['M',\n                x,\n                y]];\n            // The crookedLine formula doesn't make sense if the path overlaps\n            // the label - use straight line instead in that case\n            if (leftAligned ?\n                (crookX <= x && crookX >= breakAt.x) :\n                (crookX >= x && crookX <= breakAt.x)) {\n                path.push(['L', crookX, y]);\n            }\n            path.push(['L', breakAt.x, breakAt.y], ['L', touchingSliceAt.x, touchingSliceAt.y]);\n            return path;\n        }\n    }\n});\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Pie_PiePoint = (PiePoint);\n\n;// ./code/es5/es-modules/Series/Pie/PieSeriesDefaults.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 *  API Options\n *\n * */\n/**\n * A pie chart is a circular graphic which is divided into slices to\n * illustrate numerical proportion.\n *\n * @sample highcharts/demo/pie-chart/\n *         Pie chart\n *\n * @extends      plotOptions.line\n * @excluding    animationLimit, boostThreshold, connectEnds, connectNulls,\n *               cropThreshold, dashStyle, dataSorting, dragDrop,\n *               findNearestPointBy, getExtremesFromAll, label, lineWidth,\n *               linkedTo, marker, negativeColor, pointInterval,\n *               pointIntervalUnit, pointPlacement, pointStart,\n *               softThreshold, stacking, step, threshold, turboThreshold,\n *               zoneAxis, zones, dataSorting, boostBlending\n * @product      highcharts highmaps\n * @optionparent plotOptions.pie\n *\n * @private\n */\nvar PieSeriesDefaults = {\n    /**\n     * The corner radius of the border surrounding each slice. A number\n     * signifies pixels. A percentage string, like for example `50%`, signifies\n     * a size relative to the radius and the inner radius.\n     *\n     * @sample  highcharts/plotoptions/series-border-radius\n     *          Column and pie with rounded border\n     *\n     * @since   11.0.0\n     *\n     * @type      {number|string|Highcharts.BorderRadiusOptionsObject}\n     */\n    borderRadius: 3,\n    /**\n     * @excluding legendItemClick\n     * @apioption plotOptions.pie.events\n     */\n    /**\n     * Fires when the checkbox next to the point name in the legend is\n     * clicked. One parameter, event, is passed to the function. The state\n     * of the checkbox is found by event.checked. The checked item is found\n     * by event.item. Return false to prevent the default action which is to\n     * toggle the select state of the series.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-events-checkboxclick/\n     *         Alert checkbox status\n     *\n     * @type      {Function}\n     * @since     1.2.0\n     * @product   highcharts highmaps\n     * @context   Highcharts.Point\n     * @apioption plotOptions.pie.events.checkboxClick\n     */\n    /**\n     * Fires when the legend item belonging to the pie point (slice) is\n     * clicked. The `this` keyword refers to the point itself. One\n     * parameter, `event`, is passed to the function, containing common\n     * event information. The default action is to toggle the visibility of\n     * the point. This can be prevented by calling `event.preventDefault()`.\n     *\n     *  **Note:** This option is deprecated in favor of\n     * [legend.events.itemClick](#legend.events.itemClick).\n     *\n     * @deprecated 11.4.4\n     * @type       {Highcharts.PointLegendItemClickCallbackFunction}\n     * @since      1.2.0\n     * @product    highcharts highmaps\n     * @apioption  plotOptions.pie.point.events.legendItemClick\n     */\n    /**\n     * The center of the pie chart relative to the plot area. Can be\n     * percentages or pixel values. The default behaviour (as of 3.0) is to\n     * center the pie so that all slices and data labels are within the plot\n     * area. As a consequence, the pie may actually jump around in a chart\n     * with dynamic values, as the data labels move. In that case, the\n     * center should be explicitly set, for example to `[\"50%\", \"50%\"]`.\n     *\n     * @sample {highcharts} highcharts/plotoptions/pie-center/\n     *         Centered at 100, 100\n     *\n     * @type    {Array<(number|string|null),(number|string|null)>}\n     * @default [null, null]\n     * @product highcharts highmaps\n     *\n     * @private\n     */\n    center: [null, null],\n    /**\n     * The color of the pie series. A pie series is represented as an empty\n     * circle if the total sum of its values is 0. Use this property to\n     * define the color of its border.\n     *\n     * In styled mode, the color can be defined by the\n     * [colorIndex](#plotOptions.series.colorIndex) option. Also, the series\n     * color can be set with the `.highcharts-series`,\n     * `.highcharts-color-{n}`, `.highcharts-{type}-series` or\n     * `.highcharts-series-{n}` class, or individual classes given by the\n     * `className` option.\n     *\n     * @sample {highcharts} highcharts/plotoptions/pie-emptyseries/\n     *         Empty pie series\n     *\n     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @default   ${palette.neutralColor20}\n     * @apioption plotOptions.pie.color\n     */\n    /**\n     * @product highcharts\n     *\n     * @private\n     */\n    clip: false,\n    /**\n     * @ignore-option\n     *\n     * @private\n     */\n    colorByPoint: true, // Always true for pies\n    /**\n     * A series specific or series type specific color set to use instead\n     * of the global [colors](#colors).\n     *\n     * @sample {highcharts} highcharts/demo/pie-monochrome/\n     *         Set default colors for all pies\n     *\n     * @type      {Array<Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject>}\n     * @since     3.0\n     * @product   highcharts highmaps\n     * @apioption plotOptions.pie.colors\n     */\n    /**\n     * @declare   Highcharts.SeriesPieDataLabelsOptionsObject\n     * @extends   plotOptions.series.dataLabels\n     * @excluding align, allowOverlap, inside, staggerLines, step\n     * @private\n     */\n    dataLabels: {\n        /**\n         * Alignment method for data labels. Possible values are:\n         *\n         * - `plotEdges`: Each label touches the nearest vertical edge of\n         *   the plot area.\n         *\n         * - `connectors`: Connectors have the same x position and the\n         *   widest label of each half (left & right) touches the nearest\n         *   vertical edge of the plot area.\n         *\n         * @sample {highcharts} highcharts/plotoptions/pie-datalabels-alignto-connectors/\n         *         alignTo: connectors\n         * @sample {highcharts} highcharts/plotoptions/pie-datalabels-alignto-plotedges/\n         *         alignTo: plotEdges\n         *\n         * @type      {string}\n         * @since     7.0.0\n         * @product   highcharts highmaps\n         * @apioption plotOptions.pie.dataLabels.alignTo\n         */\n        /**\n         * The color of the line connecting the data label to the pie slice.\n         * The default color is the same as the point's color.\n         *\n         * In styled mode, the connector stroke is given in the\n         * `.highcharts-data-label-connector` class.\n         *\n         * @sample {highcharts} highcharts/plotoptions/pie-datalabels-connectorcolor/\n         *         Blue connectors\n         * @sample {highcharts} highcharts/css/pie-point/\n         *         Styled connectors\n         *\n         * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         * @since     2.1\n         * @product   highcharts highmaps\n         * @apioption plotOptions.pie.dataLabels.connectorColor\n         */\n        /**\n         * The distance from the data label to the connector. Note that\n         * data labels also have a default `padding`, so in order for the\n         * connector to touch the text, the `padding` must also be 0.\n         *\n         * @sample {highcharts} highcharts/plotoptions/pie-datalabels-connectorpadding/\n         *         No padding\n         *\n         * @since   2.1\n         * @product highcharts highmaps\n         */\n        connectorPadding: 5,\n        /**\n         * Specifies the method that is used to generate the connector path.\n         * Highcharts provides 3 built-in connector shapes: `'crookedLine'`\n         * (default since v11), `'fixedOffset'` and `'straight'`.\n         *\n         * Users can provide their own method by passing a function instead of a\n         * string. Three arguments are passed to the callback:\n         *\n         * - An object that holds the information about the coordinates of the\n         *   label (`x` & `y` properties) and how the label is located in\n         *   relation to the pie (`alignment` property). `alignment` can by one\n         *   of the following: `'left'` (pie on the left side of the data\n         *   label), `'right'` (pie on the right side of the data label) or\n         *   `'center'` (data label overlaps the pie).\n         *\n         * - An object that holds the information about the position of the\n         *   connector. Its `touchingSliceAt`  porperty tells the position of\n         *   the place where the connector touches the slice.\n         *\n         * - Data label options\n         *\n         * The function has to return an SVG path definition in array form (see\n         * the example).\n         *\n         * @sample {highcharts}\n         *         highcharts/plotoptions/pie-datalabels-connectorshape-string/\n         *         connectorShape is a String\n         * @sample {highcharts}\n         *         highcharts/plotoptions/pie-datalabels-connectorshape-function/\n         *         connectorShape is a function\n         *\n         * @type    {string|Function}\n         * @since   7.0.0\n         * @product highcharts highmaps\n         */\n        connectorShape: 'crookedLine',\n        /**\n         * The width of the line connecting the data label to the pie slice.\n         *\n         * In styled mode, the connector stroke width is given in the\n         * `.highcharts-data-label-connector` class.\n         *\n         * @sample {highcharts} highcharts/plotoptions/pie-datalabels-connectorwidth-disabled/\n         *         Disable the connector\n         * @sample {highcharts} highcharts/css/pie-point/\n         *         Styled connectors\n         *\n         * @type      {number}\n         * @default   1\n         * @since     2.1\n         * @product   highcharts highmaps\n         * @apioption plotOptions.pie.dataLabels.connectorWidth\n         */\n        /**\n         * Works only if `connectorShape` is `'crookedLine'`. It defines how\n         * far from the vertical plot edge the coonnector path should be\n         * crooked. With the default, `undefined`, the crook is placed so that\n         * the horizontal line from the label intersects with the radial line\n         * extending through the center of the pie slice.\n         *\n         * @sample {highcharts} highcharts/plotoptions/pie-datalabels-crookdistance/\n         *         crookDistance set to 90%\n         *\n         * @since   7.0.0\n         * @product highcharts highmaps\n         */\n        crookDistance: void 0,\n        /**\n         * The distance of the data label from the pie's edge. Negative\n         * numbers put the data label on top of the pie slices. Can also be\n         * defined as a percentage of pie's radius. Connectors are only\n         * shown for data labels outside the pie.\n         *\n         * @sample {highcharts} highcharts/plotoptions/pie-datalabels-distance/\n         *         Data labels on top of the pie\n         *\n         * @type    {number|string}\n         * @since   2.1\n         * @product highcharts highmaps\n         */\n        distance: 30,\n        enabled: true,\n        /**\n         * A\n         * [format string](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting)\n         * for the data label. Available variables are the same as for\n         * `formatter`.\n         *\n         * @sample {highcharts} highcharts/plotoptions/series-datalabels-format/\n         *         Add a unit\n         *\n         * @type      {string}\n         * @default   undefined\n         * @since     3.0\n         * @apioption plotOptions.pie.dataLabels.format\n         */\n        // eslint-disable-next-line valid-jsdoc\n        /**\n         * Callback JavaScript function to format the data label. Note that\n         * if a `format` is defined, the format takes precedence and the\n         * formatter is ignored.\n         *\n         * @type {Highcharts.DataLabelsFormatterCallbackFunction}\n         * @default function () { return this.point.isNull ? void 0 : this.point.name; }\n         */\n        formatter: function () {\n            return this.isNull ? void 0 : this.name;\n        },\n        /**\n         * Whether to render the connector as a soft arc or a line with a sharp\n         * break. Works only if `connectorShape` equals to `fixedOffset`.\n         *\n         * @sample {highcharts}\n         *         highcharts/plotoptions/pie-datalabels-softconnector-true/\n         *         Soft\n         * @sample {highcharts}\n         *         highcharts/plotoptions/pie-datalabels-softconnector-false/\n         *         Non soft\n         *\n         * @since   2.1.7\n         * @product highcharts highmaps\n         */\n        softConnector: true,\n        /**\n         * @sample {highcharts} highcharts/plotoptions/pie-datalabels-overflow\n         *         Long labels truncated with an ellipsis\n         * @sample {highcharts} highcharts/plotoptions/pie-datalabels-overflow-wrap\n         *         Long labels are wrapped\n         *\n         * @type      {Highcharts.CSSObject}\n         * @apioption plotOptions.pie.dataLabels.style\n         */\n        x: 0\n    },\n    /**\n     * If the total sum of the pie's values is 0, the series is represented\n     * as an empty circle . The `fillColor` option defines the color of that\n     * circle. Use [pie.borderWidth](#plotOptions.pie.borderWidth) to set\n     * the border thickness.\n     *\n     * @sample {highcharts} highcharts/plotoptions/pie-emptyseries/\n     *         Empty pie series\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @private\n     */\n    fillColor: void 0,\n    /**\n     * The end angle of the pie in degrees where 0 is top and 90 is right.\n     * Defaults to `startAngle` plus 360.\n     *\n     * @sample {highcharts} highcharts/demo/pie-semi-circle/\n     *         Semi-circle donut\n     *\n     * @type      {number}\n     * @since     1.3.6\n     * @product   highcharts highmaps\n     * @apioption plotOptions.pie.endAngle\n     */\n    /**\n     * Thickness describing the ring size for a donut type chart,\n     * overriding [innerSize](#plotOptions.pie.innerSize).\n     *\n     * @type      {number}\n     * @default   undefined\n     * @product   highcharts\n     * @since 10.1.0\n     * @apioption plotOptions.pie.thickness\n     * @private\n     */\n    /**\n     * Equivalent to [chart.ignoreHiddenSeries](#chart.ignoreHiddenSeries),\n     * this option tells whether the series shall be redrawn as if the\n     * hidden point were `null`.\n     *\n     * The default value changed from `false` to `true` with Highcharts\n     * 3.0.\n     *\n     * @sample {highcharts} highcharts/plotoptions/pie-ignorehiddenpoint/\n     *         True, the hiddden point is ignored\n     *\n     * @since   2.3.0\n     * @product highcharts highmaps\n     *\n     * @private\n     */\n    ignoreHiddenPoint: true,\n    /**\n     * @default   true\n     * @extends   plotOptions.series.inactiveOtherPoints\n     * @private\n     */\n    inactiveOtherPoints: true,\n    /**\n     * The size of the inner diameter for the pie. A size greater than 0\n     * renders a donut chart. Can be a percentage or pixel value.\n     * Percentages are relative to the pie size. Pixel values are given as\n     * integers. Setting overridden by thickness.\n     *\n     *\n     * Note: in Highcharts < 4.1.2, the percentage was relative to the plot\n     * area, not the pie size.\n     *\n     * @sample {highcharts} highcharts/plotoptions/pie-innersize-80px/\n     *         80px inner size\n     * @sample {highcharts} highcharts/plotoptions/pie-innersize-50percent/\n     *         50% of the plot area\n     * @sample {highcharts} highcharts/demo/3d-pie-donut/\n     *         3D donut\n     *\n     * @type      {number|string}\n     * @default   0\n     * @since     2.0\n     * @product   highcharts highmaps\n     * @apioption plotOptions.pie.innerSize\n     */\n    /**\n     * @ignore-option\n     *\n     * @private\n     */\n    legendType: 'point',\n    /**\n     * @ignore-option\n     *\n     * @private\n     */\n    marker: null, // Point options are specified in the base options\n    /**\n     * The minimum size for a pie in response to auto margins. The pie will\n     * try to shrink to make room for data labels in side the plot area,\n     *  but only to this size.\n     *\n     * @type      {number|string}\n     * @default   80\n     * @since     3.0\n     * @product   highcharts highmaps\n     * @apioption plotOptions.pie.minSize\n     */\n    /**\n     * The diameter of the pie relative to the plot area. Can be a\n     * percentage or pixel value. Pixel values are given as integers. The\n     * default behaviour (as of 3.0) is to scale to the plot area and give\n     * room for data labels within the plot area.\n     * [slicedOffset](#plotOptions.pie.slicedOffset) is also included in the\n     * default size calculation. As a consequence, the size of the pie may\n     * vary when points are updated and data labels more around. In that\n     * case it is best to set a fixed value, for example `\"75%\"`.\n     *\n     * @sample {highcharts} highcharts/plotoptions/pie-size/\n     *         Smaller pie\n     *\n     * @type    {number|string|null}\n     * @product highcharts highmaps\n     *\n     * @private\n     */\n    size: null,\n    /**\n     * Whether to display this particular series or series type in the\n     * legend. Since 2.1, pies are not shown in the legend by default.\n     *\n     * @sample {highcharts} highcharts/plotoptions/series-showinlegend/\n     *         One series in the legend, one hidden\n     *\n     * @product highcharts highmaps\n     *\n     * @private\n     */\n    showInLegend: false,\n    /**\n     * If a point is sliced, moved out from the center, how many pixels\n     * should it be moved?.\n     *\n     * @sample {highcharts} highcharts/plotoptions/pie-slicedoffset-20/\n     *         20px offset\n     *\n     * @product highcharts highmaps\n     *\n     * @private\n     */\n    slicedOffset: 10,\n    /**\n     * The start angle of the pie slices in degrees where 0 is top and 90\n     * right.\n     *\n     * @sample {highcharts} highcharts/plotoptions/pie-startangle-90/\n     *         Start from right\n     *\n     * @type      {number}\n     * @default   0\n     * @since     2.3.4\n     * @product   highcharts highmaps\n     * @apioption plotOptions.pie.startAngle\n     */\n    /**\n     * Sticky tracking of mouse events. When true, the `mouseOut` event\n     * on a series isn't triggered until the mouse moves over another\n     * series, or out of the plot area. When false, the `mouseOut` event on\n     * a series is triggered when the mouse leaves the area around the\n     * series'  graph or markers. This also implies the tooltip. When\n     * `stickyTracking` is false and `tooltip.shared` is false, the tooltip\n     * will be hidden when moving the mouse between series.\n     *\n     * @product highcharts highmaps\n     *\n     * @private\n     */\n    stickyTracking: false,\n    tooltip: {\n        followPointer: true\n    },\n    /**\n     * The color of the border surrounding each slice. When `null`, the\n     * border takes the same color as the slice fill. This can be used\n     * together with a `borderWidth` to fill drawing gaps created by\n     * antialiazing artefacts in borderless pies.\n     *\n     * In styled mode, the border stroke is given in the `.highcharts-point`\n     * class.\n     *\n     * @sample {highcharts} highcharts/plotoptions/pie-bordercolor-black/\n     *         Black border\n     *\n     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @default #ffffff\n     * @product highcharts highmaps\n     *\n     * @private\n     */\n    borderColor: \"#ffffff\" /* Palette.backgroundColor */,\n    /**\n     * The width of the border surrounding each slice.\n     *\n     * When setting the border width to 0, there may be small gaps between\n     * the slices due to SVG antialiasing artefacts. To work around this,\n     * keep the border width at 0.5 or 1, but set the `borderColor` to\n     * `null` instead.\n     *\n     * In styled mode, the border stroke width is given in the\n     * `.highcharts-point` class.\n     *\n     * @sample {highcharts} highcharts/plotoptions/pie-borderwidth/\n     *         3px border\n     *\n     * @product highcharts highmaps\n     *\n     * @private\n     */\n    borderWidth: 1,\n    /**\n     * @ignore-option\n     * @private\n     */\n    lineWidth: void 0, // #12222\n    states: {\n        /**\n         * @extends   plotOptions.series.states.hover\n         * @excluding marker, lineWidth, lineWidthPlus\n         * @product   highcharts highmaps\n         */\n        hover: {\n            /**\n             * How much to brighten the point on interaction. Requires the\n             * main color to be defined in hex or rgb(a) format.\n             *\n             * In styled mode, the hover brightness is by default replaced\n             * by a fill-opacity given in the `.highcharts-point-hover`\n             * class.\n             *\n             * @sample {highcharts} highcharts/plotoptions/pie-states-hover-brightness/\n             *         Brightened by 0.5\n             *\n             * @product highcharts highmaps\n             */\n            brightness: 0.1\n        }\n    }\n};\n/**\n * A `pie` series. If the [type](#series.pie.type) option is not specified,\n * it is inherited from [chart.type](#chart.type).\n *\n * @extends   series,plotOptions.pie\n * @excluding cropThreshold, dataParser, dataURL, linkedTo, stack, xAxis, yAxis,\n *            dataSorting, step, boostThreshold, boostBlending\n * @product   highcharts highmaps\n * @apioption series.pie\n */\n/**\n * An array of data points for the series. For the `pie` series type,\n * points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n *    interpreted as `y` options. Example:\n *    ```js\n *    data: [0, 5, 3, 5]\n *    ```\n *\n * 2. An array of objects with named values. The following snippet shows only a\n *    few settings, see the complete options set below. If the total number of\n *    data points exceeds the series'\n *    [turboThreshold](#series.pie.turboThreshold),\n *    this option is not available.\n *    ```js\n *    data: [{\n *        y: 1,\n *        name: \"Point2\",\n *        color: \"#00FF00\"\n *    }, {\n *        y: 7,\n *        name: \"Point1\",\n *        color: \"#FF00FF\"\n *    }]\n *    ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n *         Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n *         Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n *         Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n *         Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n *         Config objects\n *\n * @type      {Array<number|Array<string,(number|null)>|null|*>}\n * @extends   series.line.data\n * @excluding marker, x\n * @product   highcharts highmaps\n * @apioption series.pie.data\n */\n/**\n * @type      {Highcharts.SeriesPieDataLabelsOptionsObject}\n * @product   highcharts highmaps\n * @apioption series.pie.data.dataLabels\n */\n/**\n * The sequential index of the data point in the legend.\n *\n * @type      {number}\n * @product   highcharts highmaps\n * @apioption series.pie.data.legendIndex\n */\n/**\n * Whether to display a slice offset from the center.\n *\n * @sample {highcharts} highcharts/point/sliced/\n *         One sliced point\n *\n * @type      {boolean}\n * @product   highcharts highmaps\n * @apioption series.pie.data.sliced\n */\n/**\n * @extends plotOptions.pie.dataLabels\n * @excluding align, allowOverlap, inside, staggerLines, step\n * @product   highcharts highmaps\n * @apioption series.pie.dataLabels\n */\n/**\n * @excluding legendItemClick\n * @product   highcharts highmaps\n * @apioption series.pie.events\n */\n''; // Placeholder for transpiled doclets above\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Pie_PieSeriesDefaults = (PieSeriesDefaults);\n\n;// ./code/es5/es-modules/Series/Pie/PieSeries.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar PieSeries_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n        p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\nvar getStartAndEndRadians = Series_CenteredUtilities.getStartAndEndRadians;\n\n\nvar PieSeries_noop = Core_Globals.noop;\n\n\n\n\n\n\nvar PieSeries_clamp = Core_Utilities.clamp, PieSeries_extend = Core_Utilities.extend, PieSeries_fireEvent = Core_Utilities.fireEvent, PieSeries_merge = Core_Utilities.merge, PieSeries_pick = Core_Utilities.pick;\n/* *\n *\n *  Class\n *\n * */\n/**\n * Pie series type.\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.pie\n *\n * @augments Highcharts.Series\n */\nvar PieSeries = /** @class */ (function (_super) {\n    PieSeries_extends(PieSeries, _super);\n    function PieSeries() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * Animates the pies in.\n     * @private\n     */\n    PieSeries.prototype.animate = function (init) {\n        var series = this,\n            points = series.points,\n            startAngleRad = series.startAngleRad;\n        if (!init) {\n            points.forEach(function (point) {\n                var graphic = point.graphic,\n                    args = point.shapeArgs;\n                if (graphic && args) {\n                    // Start values\n                    graphic.attr({\n                        // Animate from inner radius (#779)\n                        r: PieSeries_pick(point.startR, (series.center && series.center[3] / 2)),\n                        start: startAngleRad,\n                        end: startAngleRad\n                    });\n                    // Animate\n                    graphic.animate({\n                        r: args.r,\n                        start: args.start,\n                        end: args.end\n                    }, series.options.animation);\n                }\n            });\n        }\n    };\n    /**\n     * Called internally to draw auxiliary graph in pie-like series in\n     * situtation when the default graph is not sufficient enough to present\n     * the data well. Auxiliary graph is saved in the same object as\n     * regular graph.\n     * @private\n     */\n    PieSeries.prototype.drawEmpty = function () {\n        var start = this.startAngleRad,\n            end = this.endAngleRad,\n            options = this.options;\n        var centerX,\n            centerY;\n        // Draw auxiliary graph if there're no visible points.\n        if (this.total === 0 && this.center) {\n            centerX = this.center[0];\n            centerY = this.center[1];\n            if (!this.graph) {\n                this.graph = this.chart.renderer\n                    .arc(centerX, centerY, this.center[1] / 2, 0, start, end)\n                    .addClass('highcharts-empty-series')\n                    .add(this.group);\n            }\n            this.graph.attr({\n                d: SVG_Symbols.arc(centerX, centerY, this.center[2] / 2, 0, {\n                    start: start,\n                    end: end,\n                    innerR: this.center[3] / 2\n                })\n            });\n            if (!this.chart.styledMode) {\n                this.graph.attr({\n                    'stroke-width': options.borderWidth,\n                    fill: options.fillColor || 'none',\n                    stroke: options.color || \"#cccccc\" /* Palette.neutralColor20 */\n                });\n            }\n        }\n        else if (this.graph) { // Destroy the graph object.\n            this.graph = this.graph.destroy();\n        }\n    };\n    /**\n     * Slices in pie chart are initialized in DOM, but it's shapes and\n     * animations are normally run in `drawPoints()`.\n     * @private\n     */\n    PieSeries.prototype.drawPoints = function () {\n        var renderer = this.chart.renderer;\n        this.points.forEach(function (point) {\n            // When updating a series between 2d and 3d or cartesian and\n            // polar, the shape type changes.\n            if (point.graphic && point.hasNewShapeType()) {\n                point.graphic = point.graphic.destroy();\n            }\n            if (!point.graphic) {\n                point.graphic = renderer[point.shapeType](point.shapeArgs)\n                    .add(point.series.group);\n                point.delayedRendering = true;\n            }\n        });\n    };\n    /**\n     * Extend the generatePoints method by adding total and percentage\n     * properties to each point\n     * @private\n     */\n    PieSeries.prototype.generatePoints = function () {\n        _super.prototype.generatePoints.call(this);\n        this.updateTotals();\n    };\n    /**\n     * Utility for getting the x value from a given y, used for anticollision\n     * logic in data labels.\n     * @private\n     */\n    PieSeries.prototype.getX = function (y, left, point, dataLabel) {\n        var center = this.center, \n            // Variable pie has individual radius\n            radius = this.radii ?\n                this.radii[point.index] || 0 :\n                center[2] / 2,\n            labelPosition = dataLabel.dataLabelPosition,\n            distance = (labelPosition === null || labelPosition === void 0 ? void 0 : labelPosition.distance) || 0;\n        var angle = Math.asin(PieSeries_clamp((y - center[1]) / (radius + distance), -1, 1));\n        var x = center[0] +\n                (left ? -1 : 1) *\n                    (Math.cos(angle) * (radius + distance)) +\n                (distance > 0 ?\n                    (left ? -1 : 1) * (dataLabel.padding || 0) :\n                    0);\n        return x;\n    };\n    /**\n     * Define hasData function for non-cartesian series. Returns true if the\n     * series has points at all.\n     * @private\n     */\n    PieSeries.prototype.hasData = function () {\n        return !!this.dataTable.rowCount;\n    };\n    /**\n     * Draw the data points\n     * @private\n     */\n    PieSeries.prototype.redrawPoints = function () {\n        var series = this,\n            chart = series.chart;\n        var groupTranslation,\n            graphic,\n            pointAttr,\n            shapeArgs;\n        this.drawEmpty();\n        // Apply the drop-shadow to the group because otherwise each element\n        // would cast a shadow on others\n        if (series.group && !chart.styledMode) {\n            series.group.shadow(series.options.shadow);\n        }\n        // Draw the slices\n        series.points.forEach(function (point) {\n            var animateTo = {};\n            graphic = point.graphic;\n            if (!point.isNull && graphic) {\n                shapeArgs = point.shapeArgs;\n                // If the point is sliced, use special translation, else use\n                // plot area translation\n                groupTranslation = point.getTranslate();\n                if (!chart.styledMode) {\n                    pointAttr = series.pointAttribs(point, (point.selected && 'select'));\n                }\n                // Draw the slice\n                if (!point.delayedRendering) {\n                    graphic\n                        .setRadialReference(series.center);\n                    if (!chart.styledMode) {\n                        PieSeries_merge(true, animateTo, pointAttr);\n                    }\n                    PieSeries_merge(true, animateTo, shapeArgs, groupTranslation);\n                    graphic.animate(animateTo);\n                }\n                else {\n                    graphic\n                        .setRadialReference(series.center)\n                        .attr(shapeArgs)\n                        .attr(groupTranslation);\n                    if (!chart.styledMode) {\n                        graphic\n                            .attr(pointAttr)\n                            .attr({ 'stroke-linejoin': 'round' });\n                    }\n                    point.delayedRendering = false;\n                }\n                graphic\n                    .attr({\n                    visibility: point.visible ? 'inherit' : 'hidden'\n                });\n                graphic.addClass(point.getClassName(), true);\n            }\n            else if (graphic) {\n                point.graphic = graphic.destroy();\n            }\n        });\n    };\n    /**\n     * Utility for sorting data labels.\n     * @private\n     */\n    PieSeries.prototype.sortByAngle = function (points, sign) {\n        points.sort(function (a, b) {\n            return ((typeof a.angle !== 'undefined') &&\n                (b.angle - a.angle) * sign);\n        });\n    };\n    /**\n     * Do translation for pie slices\n     * @private\n     */\n    PieSeries.prototype.translate = function (positions) {\n        PieSeries_fireEvent(this, 'translate');\n        this.generatePoints();\n        var series = this,\n            precision = 1000, // Issue #172\n            options = series.options,\n            slicedOffset = options.slicedOffset,\n            radians = getStartAndEndRadians(options.startAngle,\n            options.endAngle),\n            startAngleRad = series.startAngleRad = radians.start,\n            endAngleRad = series.endAngleRad = radians.end,\n            circ = endAngleRad - startAngleRad, // 2 * Math.PI,\n            points = series.points,\n            ignoreHiddenPoint = options.ignoreHiddenPoint,\n            len = points.length;\n        var start,\n            end,\n            angle, \n            // The x component of the radius vector for a given point\n            radiusX,\n            radiusY,\n            i,\n            point,\n            cumulative = 0;\n        // Get positions - either an integer or a percentage string must be\n        // given. If positions are passed as a parameter, we're in a\n        // recursive loop for adjusting space for data labels.\n        if (!positions) {\n            /**\n             * The series center position, read only. This applies only to\n             * circular chart types like pie and sunburst. It is an array of\n             * `[centerX, centerY, diameter, innerDiameter]`.\n             *\n             * @name Highcharts.Series#center\n             * @type {Array<number>}\n             */\n            series.center = positions = series.getCenter();\n        }\n        // Calculate the geometry for each point\n        for (i = 0; i < len; i++) {\n            point = points[i];\n            // Set start and end angle\n            start = startAngleRad + (cumulative * circ);\n            if (point.isValid() &&\n                (!ignoreHiddenPoint || point.visible)) {\n                cumulative += point.percentage / 100;\n            }\n            end = startAngleRad + (cumulative * circ);\n            // Set the shape\n            var shapeArgs = {\n                    x: positions[0],\n                    y: positions[1],\n                    r: positions[2] / 2,\n                    innerR: positions[3] / 2,\n                    start: Math.round(start * precision) / precision,\n                    end: Math.round(end * precision) / precision\n                };\n            point.shapeType = 'arc';\n            point.shapeArgs = shapeArgs;\n            // The angle must stay within -90 and 270 (#2645)\n            angle = (end + start) / 2;\n            if (angle > 1.5 * Math.PI) {\n                angle -= 2 * Math.PI;\n            }\n            else if (angle < -Math.PI / 2) {\n                angle += 2 * Math.PI;\n            }\n            // Center for the sliced out slice\n            point.slicedTranslation = {\n                translateX: Math.round(Math.cos(angle) * slicedOffset),\n                translateY: Math.round(Math.sin(angle) * slicedOffset)\n            };\n            // Set the anchor point for tooltips\n            radiusX = Math.cos(angle) * positions[2] / 2;\n            radiusY = Math.sin(angle) * positions[2] / 2;\n            point.tooltipPos = [\n                positions[0] + radiusX * 0.7,\n                positions[1] + radiusY * 0.7\n            ];\n            point.half = angle < -Math.PI / 2 || angle > Math.PI / 2 ?\n                1 :\n                0;\n            point.angle = angle;\n        }\n        PieSeries_fireEvent(series, 'afterTranslate');\n    };\n    /**\n     * Recompute total chart sum and update percentages of points.\n     * @private\n     */\n    PieSeries.prototype.updateTotals = function () {\n        var points = this.points,\n            len = points.length,\n            ignoreHiddenPoint = this.options.ignoreHiddenPoint;\n        var i,\n            point,\n            total = 0;\n        // Get the total sum\n        for (i = 0; i < len; i++) {\n            point = points[i];\n            if (point.isValid() &&\n                (!ignoreHiddenPoint || point.visible)) {\n                total += point.y;\n            }\n        }\n        this.total = total;\n        // Set each point's properties\n        for (i = 0; i < len; i++) {\n            point = points[i];\n            point.percentage =\n                (total > 0 && (point.visible || !ignoreHiddenPoint)) ?\n                    point.y / total * 100 :\n                    0;\n            point.total = total;\n        }\n    };\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    PieSeries.defaultOptions = PieSeries_merge(Series_Series.defaultOptions, Pie_PieSeriesDefaults);\n    return PieSeries;\n}(Series_Series));\nPieSeries_extend(PieSeries.prototype, {\n    axisTypes: [],\n    directTouch: true,\n    drawGraph: void 0,\n    drawTracker: Column_ColumnSeries.prototype.drawTracker,\n    getCenter: Series_CenteredUtilities.getCenter,\n    getSymbol: PieSeries_noop,\n    invertible: false,\n    isCartesian: false,\n    noSharedTooltip: true,\n    pointAttribs: Column_ColumnSeries.prototype.pointAttribs,\n    pointClass: Pie_PiePoint,\n    requireSorting: false,\n    searchPoint: PieSeries_noop,\n    trackerGroups: ['group', 'dataLabelsGroup']\n});\nSeries_SeriesRegistry.registerSeriesType('pie', PieSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Pie_PieSeries = ((/* unused pure expression or super */ null && (PieSeries)));\n\n;// ./code/es5/es-modules/Series/Pie/PieDataLabel.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar PieDataLabel_composed = Core_Globals.composed, PieDataLabel_noop = Core_Globals.noop;\n\nvar PieDataLabel_distribute = Renderer_RendererUtilities.distribute;\n\nvar PieDataLabel_Series = Series_SeriesRegistry.series;\n\nvar PieDataLabel_arrayMax = Core_Utilities.arrayMax, PieDataLabel_clamp = Core_Utilities.clamp, PieDataLabel_defined = Core_Utilities.defined, PieDataLabel_pick = Core_Utilities.pick, PieDataLabel_pushUnique = Core_Utilities.pushUnique, PieDataLabel_relativeLength = Core_Utilities.relativeLength;\n/* *\n *\n *  Composition\n *\n * */\nvar PieDataLabel_ColumnDataLabel;\n(function (ColumnDataLabel) {\n    /* *\n     *\n     *  Constants\n     *\n     * */\n    var dataLabelPositioners = {\n            // Based on the value computed in Highcharts' distribute algorithm.\n            radialDistributionY: function (point,\n        dataLabel) {\n                var _a;\n            return (((_a = dataLabel.dataLabelPosition) === null || _a === void 0 ? void 0 : _a.top) || 0) +\n                point.distributeBox.pos;\n        },\n        // Get the x - use the natural x position for labels near the top and\n        // bottom, to prevent the top and botton slice connectors from touching\n        // each other on either side. Based on the value computed in Highcharts'\n        // distribute algorithm.\n        radialDistributionX: function (series, point, y, naturalY, dataLabel) {\n            var pos = dataLabel.dataLabelPosition;\n            return series.getX(y < ((pos === null || pos === void 0 ? void 0 : pos.top) || 0) + 2 || y > ((pos === null || pos === void 0 ? void 0 : pos.bottom) || 0) - 2 ?\n                naturalY :\n                y, point.half, point, dataLabel);\n        },\n        // The dataLabels.distance determines the x position of the label\n        justify: function (point, dataLabel, radius, seriesCenter) {\n            var _a;\n            return seriesCenter[0] + (point.half ? -1 : 1) *\n                (radius + (((_a = dataLabel.dataLabelPosition) === null || _a === void 0 ? void 0 : _a.distance) || 0));\n        },\n        // Left edges of the left-half labels touch the left edge of the plot\n        // area. Right edges of the right-half labels touch the right edge of\n        // the plot area.\n        alignToPlotEdges: function (dataLabel, half, plotWidth, plotLeft) {\n            var dataLabelWidth = dataLabel.getBBox().width;\n            return half ? dataLabelWidth + plotLeft :\n                plotWidth - dataLabelWidth - plotLeft;\n        },\n        // Connectors of each side end in the same x position. Labels are\n        // aligned to them. Left edge of the widest left-half label touches the\n        // left edge of the plot area. Right edge of the widest right-half label\n        // touches the right edge of the plot area.\n        alignToConnectors: function (points, half, plotWidth, plotLeft) {\n            var maxDataLabelWidth = 0,\n                dataLabelWidth;\n            // Find widest data label\n            points.forEach(function (point) {\n                dataLabelWidth = point.dataLabel.getBBox().width;\n                if (dataLabelWidth > maxDataLabelWidth) {\n                    maxDataLabelWidth = dataLabelWidth;\n                }\n            });\n            return half ? maxDataLabelWidth + plotLeft :\n                plotWidth - maxDataLabelWidth - plotLeft;\n        }\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /** @private */\n    function compose(PieSeriesClass) {\n        Series_DataLabel.compose(PieDataLabel_Series);\n        if (PieDataLabel_pushUnique(PieDataLabel_composed, 'PieDataLabel')) {\n            var pieProto = PieSeriesClass.prototype;\n            pieProto.dataLabelPositioners = dataLabelPositioners;\n            pieProto.alignDataLabel = PieDataLabel_noop;\n            pieProto.drawDataLabels = drawDataLabels;\n            pieProto.getDataLabelPosition = getDataLabelPosition;\n            pieProto.placeDataLabels = placeDataLabels;\n            pieProto.verifyDataLabelOverflow = verifyDataLabelOverflow;\n        }\n    }\n    ColumnDataLabel.compose = compose;\n    /** @private */\n    function getDataLabelPosition(point, distance) {\n        var halfPI = Math.PI / 2,\n            _a = point.shapeArgs || {},\n            _b = _a.start,\n            start = _b === void 0 ? 0 : _b,\n            _c = _a.end,\n            end = _c === void 0 ? 0 : _c;\n        var angle = point.angle || 0;\n        // If a large slice is crossing the lowest point, prefer rendering it 45\n        // degrees out at either lower right or lower left. That's where there's\n        // most likely to be space available and avoid text being truncated\n        // (#22100). Technically this logic should also apply to the top point,\n        // but that is more of an edge case since the default start angle is at\n        // the top.\n        if (distance > 0 &&\n            // Crossing the bottom\n            start < halfPI && end > halfPI &&\n            // Angle within the bottom quadrant\n            angle > halfPI / 2 && angle < halfPI * 1.5) {\n            angle = angle <= halfPI ?\n                Math.max(halfPI / 2, (start + halfPI) / 2) :\n                Math.min(halfPI * 1.5, (halfPI + end) / 2);\n        }\n        var _d = this, center = _d.center, options = _d.options, r = center[2] / 2, cosAngle = Math.cos(angle), sinAngle = Math.sin(angle), x = center[0] + cosAngle * r, y = center[1] + sinAngle * r, finalConnectorOffset = Math.min((options.slicedOffset || 0) + (options.borderWidth || 0), distance / 5); // #1678\n            return {\n                natural: {\n                    // Initial position of the data label - it's utilized for\n                    // finding the final position for the label\n                    x: x + cosAngle * distance,\n                    y: y + sinAngle * distance\n                },\n                computed: {\n                // Used for generating connector path - initialized later in\n                // drawDataLabels function x: undefined, y: undefined\n                },\n                // Left - pie on the left side of the data label\n                // Right - pie on the right side of the data label\n                // Center - data label overlaps the pie\n                alignment: distance < 0 ? 'center' : point.half ? 'right' : 'left',\n                connectorPosition: {\n                    angle: angle,\n                    breakAt: {\n                        x: x + cosAngle * finalConnectorOffset,\n                        y: y + sinAngle * finalConnectorOffset\n                    },\n                    touchingSliceAt: {\n                        x: x,\n                        y: y\n                    }\n                },\n                distance: distance\n            };\n    }\n    /**\n     * Override the base drawDataLabels method by pie specific functionality\n     * @private\n     */\n    function drawDataLabels() {\n        var _this = this;\n        var _a;\n        var series = this, points = series.points, chart = series.chart, plotWidth = chart.plotWidth, plotHeight = chart.plotHeight, plotLeft = chart.plotLeft, maxWidth = Math.round(chart.chartWidth / 3), seriesCenter = series.center, radius = seriesCenter[2] / 2, centerY = seriesCenter[1], halves = [\n                [], // Right\n                [] // Left\n            ], overflow = [0, 0, 0, 0], // Top, right, bottom, left\n            dataLabelPositioners = series.dataLabelPositioners;\n        var connector,\n            dataLabelWidth,\n            labelHeight,\n            maxLabelDistance = 0;\n        // Get out if not enabled\n        if (!series.visible || !((_a = series.hasDataLabels) === null || _a === void 0 ? void 0 : _a.call(series))) {\n            return;\n        }\n        // Reset all labels that have been shortened\n        points.forEach(function (point) {\n            (point.dataLabels || []).forEach(function (dataLabel) {\n                if (dataLabel.shortened) {\n                    dataLabel\n                        .attr({\n                        width: 'auto'\n                    }).css({\n                        width: 'auto',\n                        textOverflow: 'clip'\n                    });\n                    dataLabel.shortened = false;\n                }\n            });\n        });\n        // Run parent method\n        PieDataLabel_Series.prototype.drawDataLabels.apply(series);\n        points.forEach(function (point) {\n            (point.dataLabels || []).forEach(function (dataLabel, i) {\n                var _a;\n                var r = seriesCenter[2] / 2,\n                    dataLabelOptions = dataLabel.options,\n                    distance = PieDataLabel_relativeLength((dataLabelOptions === null || dataLabelOptions === void 0 ? void 0 : dataLabelOptions.distance) || 0,\n                    r);\n                // Arrange points for collision detection\n                if (i === 0) {\n                    halves[point.half].push(point);\n                }\n                // Avoid long labels squeezing the pie size too far down\n                if (!PieDataLabel_defined((_a = dataLabelOptions === null || dataLabelOptions === void 0 ? void 0 : dataLabelOptions.style) === null || _a === void 0 ? void 0 : _a.width)) {\n                    if (dataLabel.getBBox().width > maxWidth) {\n                        dataLabel.css({\n                            // Use a fraction of the maxWidth to avoid wrapping\n                            // close to the end of the string.\n                            width: Math.round(maxWidth * 0.7) + 'px'\n                        });\n                        dataLabel.shortened = true;\n                    }\n                }\n                dataLabel.dataLabelPosition = _this.getDataLabelPosition(point, distance);\n                maxLabelDistance = Math.max(maxLabelDistance, distance);\n            });\n        });\n        /* Loop over the points in each half, starting from the top and bottom\n         * of the pie to detect overlapping labels.\n         */\n        halves.forEach(function (points, halfIdx) {\n            var length = points.length,\n                positions = [];\n            var top,\n                bottom,\n                size = 0,\n                distributionLength;\n            if (!length) {\n                return;\n            }\n            // Sort by angle\n            series.sortByAngle(points, halfIdx - 0.5);\n            // Only do anti-collision when we have dataLabels outside the pie\n            // and have connectors. (#856)\n            if (maxLabelDistance > 0) {\n                top = Math.max(0, centerY - radius - maxLabelDistance);\n                bottom = Math.min(centerY + radius + maxLabelDistance, chart.plotHeight);\n                points.forEach(function (point) {\n                    // Check if specific points' label is outside the pie\n                    (point.dataLabels || []).forEach(function (dataLabel) {\n                        var _a;\n                        var labelPosition = dataLabel.dataLabelPosition;\n                        if (labelPosition &&\n                            labelPosition.distance > 0) {\n                            // The point.top depends on point.labelDistance\n                            // value. Used for calculation of y value in getX\n                            // method\n                            labelPosition.top = Math.max(0, centerY - radius - labelPosition.distance);\n                            labelPosition.bottom = Math.min(centerY + radius + labelPosition.distance, chart.plotHeight);\n                            size = dataLabel.getBBox().height || 21;\n                            dataLabel.lineHeight = chart.renderer.fontMetrics(dataLabel.text || dataLabel).h + 2 * dataLabel.padding;\n                            point.distributeBox = {\n                                target: ((((_a = dataLabel.dataLabelPosition) === null || _a === void 0 ? void 0 : _a.natural.y) || 0) -\n                                    labelPosition.top +\n                                    dataLabel.lineHeight / 2),\n                                size: size,\n                                rank: point.y\n                            };\n                            positions.push(point.distributeBox);\n                        }\n                    });\n                });\n                distributionLength = bottom + size - top;\n                PieDataLabel_distribute(positions, distributionLength, distributionLength / 5);\n                // Uncomment this to visualize the boxes\n                /*\n                points.forEach((point): void => {\n                    const box = point.distributeBox;\n                    point.dlBox?.destroy();\n                    if (box?.pos) {\n                        point.dlBox = chart.renderer.rect(\n                            chart.plotLeft + this.center[0] + (\n                                halfIdx ?\n                                    -this.center[2] / 2 - 100 :\n                                    this.center[2] / 2\n                            ),\n                            chart.plotTop + box.pos,\n                            100,\n                            box.size\n                        )\n                            .attr({\n                                stroke: 'silver',\n                                'stroke-width': 1\n                            })\n                            .add();\n                    }\n                });\n                // */\n            }\n            // Now the used slots are sorted, fill them up sequentially\n            points.forEach(function (point) {\n                (point.dataLabels || []).forEach(function (dataLabel) {\n                    var dataLabelOptions = (dataLabel.options || {}),\n                        distributeBox = point.distributeBox,\n                        labelPosition = dataLabel.dataLabelPosition,\n                        naturalY = (labelPosition === null || labelPosition === void 0 ? void 0 : labelPosition.natural.y) || 0,\n                        connectorPadding = dataLabelOptions\n                            .connectorPadding || 0,\n                        lineHeight = dataLabel.lineHeight || 21,\n                        bBox = dataLabel.getBBox(),\n                        topOffset = (lineHeight - bBox.height) / 2;\n                    var x = 0,\n                        y = naturalY,\n                        visibility = 'inherit';\n                    if (labelPosition) {\n                        if (positions &&\n                            PieDataLabel_defined(distributeBox) &&\n                            labelPosition.distance > 0) {\n                            if (typeof distributeBox.pos === 'undefined') {\n                                visibility = 'hidden';\n                            }\n                            else {\n                                labelHeight = distributeBox.size;\n                                // Find label's y position\n                                y = dataLabelPositioners\n                                    .radialDistributionY(point, dataLabel);\n                            }\n                        }\n                        // Find label's x position. The justify option is\n                        // undocumented in the API - preserve support for it\n                        if (dataLabelOptions.justify) {\n                            x = dataLabelPositioners.justify(point, dataLabel, radius, seriesCenter);\n                        }\n                        else {\n                            switch (dataLabelOptions.alignTo) {\n                                case 'connectors':\n                                    x = dataLabelPositioners.alignToConnectors(points, halfIdx, plotWidth, plotLeft);\n                                    break;\n                                case 'plotEdges':\n                                    x = dataLabelPositioners.alignToPlotEdges(dataLabel, halfIdx, plotWidth, plotLeft);\n                                    break;\n                                default:\n                                    x = dataLabelPositioners.radialDistributionX(series, point, y - topOffset, naturalY, dataLabel);\n                            }\n                        }\n                        // Record the placement and visibility\n                        labelPosition.attribs = {\n                            visibility: visibility,\n                            align: labelPosition.alignment\n                        };\n                        labelPosition.posAttribs = {\n                            x: x +\n                                (dataLabelOptions.x || 0) + // (#12985)\n                                ({\n                                    left: connectorPadding,\n                                    right: -connectorPadding\n                                }[labelPosition.alignment] || 0),\n                            y: y +\n                                (dataLabelOptions.y || 0) - // (#12985)\n                                // Vertically center\n                                lineHeight / 2\n                        };\n                        labelPosition.computed.x = x;\n                        labelPosition.computed.y = y - topOffset;\n                        // Detect overflowing data labels\n                        if (PieDataLabel_pick(dataLabelOptions.crop, true)) {\n                            dataLabelWidth = dataLabel.getBBox().width;\n                            var sideOverflow = void 0;\n                            // Overflow left\n                            if (x - dataLabelWidth < connectorPadding &&\n                                halfIdx === 1 // Left half\n                            ) {\n                                sideOverflow = Math.round(dataLabelWidth - x + connectorPadding);\n                                overflow[3] = Math.max(sideOverflow, overflow[3]);\n                                // Overflow right\n                            }\n                            else if (x + dataLabelWidth >\n                                plotWidth - connectorPadding &&\n                                halfIdx === 0 // Right half\n                            ) {\n                                sideOverflow = Math.round(x +\n                                    dataLabelWidth -\n                                    plotWidth +\n                                    connectorPadding);\n                                overflow[1] = Math.max(sideOverflow, overflow[1]);\n                            }\n                            // Overflow top\n                            if (y - labelHeight / 2 < 0) {\n                                overflow[0] = Math.max(Math.round(-y + labelHeight / 2), overflow[0]);\n                                // Overflow left\n                            }\n                            else if (y + labelHeight / 2 > plotHeight) {\n                                overflow[2] = Math.max(Math.round(y + labelHeight / 2 - plotHeight), overflow[2]);\n                            }\n                            labelPosition.sideOverflow = sideOverflow;\n                        }\n                    }\n                }); // For each data label of the point\n            }); // For each point\n        }); // For each half\n        // Do not apply the final placement and draw the connectors until we\n        // have verified that labels are not spilling over.\n        if (PieDataLabel_arrayMax(overflow) === 0 ||\n            this.verifyDataLabelOverflow(overflow)) {\n            // Place the labels in the final position\n            this.placeDataLabels();\n            this.points.forEach(function (point) {\n                (point.dataLabels || []).forEach(function (dataLabel) {\n                    var _a;\n                    // #8864: every connector can have individual options\n                    var _b = (dataLabel.options || {}),\n                        connectorColor = _b.connectorColor,\n                        _c = _b.connectorWidth,\n                        connectorWidth = _c === void 0 ? 1 : _c,\n                        labelPosition = dataLabel.dataLabelPosition;\n                    // Draw the connector\n                    if (connectorWidth) {\n                        var isNew = void 0;\n                        connector = dataLabel.connector;\n                        if (labelPosition && labelPosition.distance > 0) {\n                            isNew = !connector;\n                            if (!connector) {\n                                dataLabel.connector = connector = chart.renderer\n                                    .path()\n                                    .addClass('highcharts-data-label-connector ' +\n                                    ' highcharts-color-' +\n                                    point.colorIndex +\n                                    (point.className ?\n                                        ' ' + point.className :\n                                        ''))\n                                    .add(series.dataLabelsGroup);\n                            }\n                            if (!chart.styledMode) {\n                                connector.attr({\n                                    'stroke-width': connectorWidth,\n                                    'stroke': (connectorColor ||\n                                        point.color ||\n                                        \"#666666\" /* Palette.neutralColor60 */)\n                                });\n                            }\n                            connector[isNew ? 'attr' : 'animate']({\n                                d: point.getConnectorPath(dataLabel)\n                            });\n                            connector.attr({\n                                visibility: (_a = labelPosition.attribs) === null || _a === void 0 ? void 0 : _a.visibility\n                            });\n                        }\n                        else if (connector) {\n                            dataLabel.connector = connector.destroy();\n                        }\n                    }\n                });\n            });\n        }\n    }\n    /**\n     * Perform the final placement of the data labels after we have verified\n     * that they fall within the plot area.\n     * @private\n     */\n    function placeDataLabels() {\n        this.points.forEach(function (point) {\n            (point.dataLabels || []).forEach(function (dataLabel) {\n                var _a;\n                var labelPosition = dataLabel.dataLabelPosition;\n                if (labelPosition) {\n                    // Shorten data labels with ellipsis if they still overflow\n                    // after the pie has reached minSize (#223).\n                    if (labelPosition.sideOverflow) {\n                        dataLabel.css({\n                            width: (Math.max(dataLabel.getBBox().width -\n                                labelPosition.sideOverflow, 0)) + 'px',\n                            textOverflow: ((((_a = dataLabel.options) === null || _a === void 0 ? void 0 : _a.style) || {})\n                                .textOverflow ||\n                                'ellipsis')\n                        });\n                        dataLabel.shortened = true;\n                    }\n                    dataLabel.attr(labelPosition.attribs);\n                    dataLabel[dataLabel.moved ? 'animate' : 'attr'](labelPosition.posAttribs);\n                    dataLabel.moved = true;\n                }\n                else if (dataLabel) {\n                    dataLabel.attr({ y: -9999 });\n                }\n            });\n            // Clear for update\n            delete point.distributeBox;\n        }, this);\n    }\n    /**\n     * Verify whether the data labels are allowed to draw, or we should run more\n     * translation and data label positioning to keep them inside the plot area.\n     * Returns true when data labels are ready to draw.\n     * @private\n     */\n    function verifyDataLabelOverflow(overflow) {\n        var center = this.center,\n            options = this.options,\n            centerOption = options.center,\n            minSize = options.minSize || 80;\n        var newSize = minSize, \n            // If a size is set, return true and don't try to shrink the pie\n            // to fit the labels.\n            ret = options.size !== null;\n        if (!ret) {\n            // Handle horizontal size and center\n            if (centerOption[0] !== null) { // Fixed center\n                newSize = Math.max(center[2] -\n                    Math.max(overflow[1], overflow[3]), minSize);\n            }\n            else { // Auto center\n                newSize = Math.max(\n                // Horizontal overflow\n                center[2] - overflow[1] - overflow[3], minSize);\n                // Horizontal center\n                center[0] += (overflow[3] - overflow[1]) / 2;\n            }\n            // Handle vertical size and center\n            if (centerOption[1] !== null) { // Fixed center\n                newSize = PieDataLabel_clamp(newSize, minSize, center[2] - Math.max(overflow[0], overflow[2]));\n            }\n            else { // Auto center\n                newSize = PieDataLabel_clamp(newSize, minSize, \n                // Vertical overflow\n                center[2] - overflow[0] - overflow[2]);\n                // Vertical center\n                center[1] += (overflow[0] - overflow[2]) / 2;\n            }\n            // If the size must be decreased, we need to run translate and\n            // drawDataLabels again\n            if (newSize < center[2]) {\n                center[2] = newSize;\n                center[3] = Math.min(// #3632\n                options.thickness ?\n                    Math.max(0, newSize - options.thickness * 2) :\n                    Math.max(0, PieDataLabel_relativeLength(options.innerSize || 0, newSize)), newSize); // #6647\n                this.translate(center);\n                if (this.drawDataLabels) {\n                    this.drawDataLabels();\n                }\n                // Else, return true to indicate that the pie and its labels is\n                // within the plot area\n            }\n            else {\n                ret = true;\n            }\n        }\n        return ret;\n    }\n})(PieDataLabel_ColumnDataLabel || (PieDataLabel_ColumnDataLabel = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var PieDataLabel = (PieDataLabel_ColumnDataLabel);\n\n;// ./code/es5/es-modules/Core/Geometry/GeometryUtilities.js\n/* *\n *\n *  (c) 2010-2024 Highsoft AS\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Namespace\n *\n * */\nvar GeometryUtilities;\n(function (GeometryUtilities) {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Calculates the center between a list of points.\n     *\n     * @private\n     *\n     * @param {Array<Highcharts.PositionObject>} points\n     * A list of points to calculate the center of.\n     *\n     * @return {Highcharts.PositionObject}\n     * Calculated center\n     */\n    function getCenterOfPoints(points) {\n        var sum = points.reduce(function (sum,\n            point) {\n                sum.x += point.x;\n            sum.y += point.y;\n            return sum;\n        }, { x: 0, y: 0 });\n        return {\n            x: sum.x / points.length,\n            y: sum.y / points.length\n        };\n    }\n    GeometryUtilities.getCenterOfPoints = getCenterOfPoints;\n    /**\n     * Calculates the distance between two points based on their x and y\n     * coordinates.\n     *\n     * @private\n     *\n     * @param {Highcharts.PositionObject} p1\n     * The x and y coordinates of the first point.\n     *\n     * @param {Highcharts.PositionObject} p2\n     * The x and y coordinates of the second point.\n     *\n     * @return {number}\n     * Returns the distance between the points.\n     */\n    function getDistanceBetweenPoints(p1, p2) {\n        return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));\n    }\n    GeometryUtilities.getDistanceBetweenPoints = getDistanceBetweenPoints;\n    /**\n     * Calculates the angle between two points.\n     * @todo add unit tests.\n     * @private\n     * @param {Highcharts.PositionObject} p1 The first point.\n     * @param {Highcharts.PositionObject} p2 The second point.\n     * @return {number} Returns the angle in radians.\n     */\n    function getAngleBetweenPoints(p1, p2) {\n        return Math.atan2(p2.x - p1.x, p2.y - p1.y);\n    }\n    GeometryUtilities.getAngleBetweenPoints = getAngleBetweenPoints;\n    /**\n     * Test for point in polygon. Polygon defined as array of [x,y] points.\n     * @private\n     * @param {PositionObject} point The point potentially within a polygon.\n     * @param {Array<Array<number>>} polygon The polygon potentially containing the point.\n     */\n    function pointInPolygon(_a, polygon) {\n        var x = _a.x,\n            y = _a.y;\n        var len = polygon.length;\n        var i,\n            j,\n            inside = false;\n        for (i = 0, j = len - 1; i < len; j = i++) {\n            var _b = polygon[i],\n                x1 = _b[0],\n                y1 = _b[1],\n                _c = polygon[j],\n                x2 = _c[0],\n                y2 = _c[1];\n            if (y1 > y !== y2 > y &&\n                (x < (x2 - x1) *\n                    (y - y1) /\n                    (y2 - y1) +\n                    x1)) {\n                inside = !inside;\n            }\n        }\n        return inside;\n    }\n    GeometryUtilities.pointInPolygon = pointInPolygon;\n})(GeometryUtilities || (GeometryUtilities = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Geometry_GeometryUtilities = (GeometryUtilities);\n\n;// ./code/es5/es-modules/Extensions/OverlappingDataLabels.js\n/* *\n *\n *  Highcharts module to hide overlapping data labels.\n *  This module is included in Highcharts.\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\nvar pointInPolygon = Geometry_GeometryUtilities.pointInPolygon;\n\nvar OverlappingDataLabels_addEvent = Core_Utilities.addEvent, OverlappingDataLabels_fireEvent = Core_Utilities.fireEvent, OverlappingDataLabels_objectEach = Core_Utilities.objectEach, OverlappingDataLabels_pick = Core_Utilities.pick;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Hide overlapping labels. Labels are moved and faded in and out on zoom to\n * provide a smooth visual impression.\n *\n * @requires modules/overlapping-datalabels\n *\n * @private\n * @function Highcharts.Chart#hideOverlappingLabels\n * @param {Array<Highcharts.SVGElement>} labels\n *        Rendered data labels\n */\nfunction chartHideOverlappingLabels(labels) {\n    var chart = this,\n        len = labels.length,\n        isIntersectRect = function (box1,\n        box2) { return !(box2.x >= box1.x + box1.width ||\n            box2.x + box2.width <= box1.x ||\n            box2.y >= box1.y + box1.height ||\n            box2.y + box2.height <= box1.y); },\n        isPolygonOverlap = function (box1Poly,\n        box2Poly) {\n            for (var _i = 0,\n        box1Poly_1 = box1Poly; _i < box1Poly_1.length; _i++) {\n                var p = box1Poly_1[_i];\n            if (pointInPolygon({ x: p[0], y: p[1] }, box2Poly)) {\n                return true;\n            }\n        }\n        return false;\n    };\n    /**\n     * Get the box with its position inside the chart, as opposed to getBBox\n     * that only reports the position relative to the parent.\n     */\n    function getAbsoluteBox(label) {\n        var _a,\n            _b;\n        if (label && (!label.alignAttr || label.placed)) {\n            var padding = label.box ? 0 : (label.padding || 0),\n                pos = label.alignAttr || {\n                    x: label.attr('x'),\n                    y: label.attr('y')\n                },\n                bBox = label.getBBox();\n            label.width = bBox.width;\n            label.height = bBox.height;\n            return {\n                x: pos.x + (((_a = label.parentGroup) === null || _a === void 0 ? void 0 : _a.translateX) || 0) + padding,\n                y: pos.y + (((_b = label.parentGroup) === null || _b === void 0 ? void 0 : _b.translateY) || 0) + padding,\n                width: (label.width || 0) - 2 * padding,\n                height: (label.height || 0) - 2 * padding,\n                polygon: bBox === null || bBox === void 0 ? void 0 : bBox.polygon\n            };\n        }\n    }\n    var label,\n        label1,\n        label2,\n        box1,\n        box2,\n        isLabelAffected = false;\n    for (var i = 0; i < len; i++) {\n        label = labels[i];\n        if (label) {\n            // Mark with initial opacity\n            label.oldOpacity = label.opacity;\n            label.newOpacity = 1;\n            label.absoluteBox = getAbsoluteBox(label);\n        }\n    }\n    // Prevent a situation in a gradually rising slope, that each label will\n    // hide the previous one because the previous one always has lower rank.\n    labels.sort(function (a, b) { return (b.labelrank || 0) - (a.labelrank || 0); });\n    // Detect overlapping labels\n    for (var i = 0; i < len; ++i) {\n        label1 = labels[i];\n        box1 = label1 && label1.absoluteBox;\n        var box1Poly = box1 === null || box1 === void 0 ? void 0 : box1.polygon;\n        for (var j = i + 1; j < len; ++j) {\n            label2 = labels[j];\n            box2 = label2 && label2.absoluteBox;\n            var toHide = false;\n            if (box1 &&\n                box2 &&\n                label1 !== label2 && // #6465, polar chart with connectEnds\n                label1.newOpacity !== 0 &&\n                label2.newOpacity !== 0 &&\n                // #15863 dataLabels are no longer hidden by translation\n                label1.visibility !== 'hidden' &&\n                label2.visibility !== 'hidden') {\n                var box2Poly = box2.polygon;\n                // If labels have polygons, only evaluate\n                // based on polygons\n                if (box1Poly &&\n                    box2Poly &&\n                    box1Poly !== box2Poly) {\n                    if (isPolygonOverlap(box1Poly, box2Poly)) {\n                        toHide = true;\n                    }\n                    // If there are no polygons, evaluate rectangles coliding\n                }\n                else if (isIntersectRect(box1, box2)) {\n                    toHide = true;\n                }\n                if (toHide) {\n                    var overlappingLabel = (label1.labelrank < label2.labelrank ?\n                            label1 :\n                            label2),\n                        labelText = overlappingLabel.text;\n                    overlappingLabel.newOpacity = 0;\n                    if (labelText === null || labelText === void 0 ? void 0 : labelText.element.querySelector('textPath')) {\n                        labelText.hide();\n                    }\n                }\n            }\n        }\n    }\n    // Hide or show\n    for (var _i = 0, labels_1 = labels; _i < labels_1.length; _i++) {\n        var label_1 = labels_1[_i];\n        if (hideOrShow(label_1, chart)) {\n            isLabelAffected = true;\n        }\n    }\n    if (isLabelAffected) {\n        OverlappingDataLabels_fireEvent(chart, 'afterHideAllOverlappingLabels');\n    }\n}\n/** @private */\nfunction compose(ChartClass) {\n    var chartProto = ChartClass.prototype;\n    if (!chartProto.hideOverlappingLabels) {\n        chartProto.hideOverlappingLabels = chartHideOverlappingLabels;\n        OverlappingDataLabels_addEvent(ChartClass, 'render', OverlappingDataLabels_onChartRender);\n    }\n}\n/**\n * Hide or show labels based on opacity.\n *\n * @private\n * @function hideOrShow\n * @param {Highcharts.SVGElement} label\n * The label.\n * @param {Highcharts.Chart} chart\n * The chart that contains the label.\n * @return {boolean}\n * Whether label is affected\n */\nfunction hideOrShow(label, chart) {\n    var complete,\n        newOpacity,\n        isLabelAffected = false;\n    if (label) {\n        newOpacity = label.newOpacity;\n        if (label.oldOpacity !== newOpacity) {\n            // Toggle data labels\n            if (label.hasClass('highcharts-data-label')) {\n                // Make sure the label is completely hidden to avoid catching\n                // clicks (#4362)\n                label[newOpacity ? 'removeClass' : 'addClass']('highcharts-data-label-hidden');\n                complete = function () {\n                    if (!chart.styledMode) {\n                        label.css({\n                            pointerEvents: newOpacity ? 'auto' : 'none'\n                        });\n                    }\n                };\n                isLabelAffected = true;\n                // Animate or set the opacity\n                label[label.isOld ? 'animate' : 'attr']({ opacity: newOpacity }, void 0, complete);\n                OverlappingDataLabels_fireEvent(chart, 'afterHideOverlappingLabel');\n                // Toggle other labels, tick labels\n            }\n            else {\n                label.attr({\n                    opacity: newOpacity\n                });\n            }\n        }\n        label.isOld = true;\n    }\n    return isLabelAffected;\n}\n/**\n * Collect potential overlapping data labels. Stack labels probably don't need\n * to be considered because they are usually accompanied by data labels that lie\n * inside the columns.\n * @private\n */\nfunction OverlappingDataLabels_onChartRender() {\n    var _a;\n    var chart = this;\n    var labels = [];\n    // Consider external label collectors\n    for (var _i = 0, _b = (chart.labelCollectors || []); _i < _b.length; _i++) {\n        var collector = _b[_i];\n        labels = labels.concat(collector());\n    }\n    for (var _c = 0, _d = (chart.yAxis || []); _c < _d.length; _c++) {\n        var yAxis = _d[_c];\n        if (yAxis.stacking &&\n            yAxis.options.stackLabels &&\n            !yAxis.options.stackLabels.allowOverlap) {\n            OverlappingDataLabels_objectEach(yAxis.stacking.stacks, function (stack) {\n                OverlappingDataLabels_objectEach(stack, function (stackItem) {\n                    if (stackItem.label) {\n                        labels.push(stackItem.label);\n                    }\n                });\n            });\n        }\n    }\n    for (var _e = 0, _f = (chart.series || []); _e < _f.length; _e++) {\n        var series = _f[_e];\n        if (series.visible && ((_a = series.hasDataLabels) === null || _a === void 0 ? void 0 : _a.call(series))) { // #3866\n            var push = function (points) {\n                    var _loop_1 = function (point) {\n                        if (point.visible) {\n                            (point.dataLabels || []).forEach(function (label) {\n                                var _a,\n                _b;\n                            var options = label.options || {};\n                            label.labelrank = OverlappingDataLabels_pick(options.labelrank, point.labelrank, (_a = point.shapeArgs) === null || _a === void 0 ? void 0 : _a.height); // #4118\n                            // Allow overlap if the option is explicitly true\n                            if (\n                            // #13449\n                            (_b = options.allowOverlap) !== null && _b !== void 0 ? _b : \n                            // Pie labels outside have a separate placement\n                            // logic, skip the overlap logic\n                            Number(options.distance) > 0) {\n                                label.oldOpacity = label.opacity;\n                                label.newOpacity = 1;\n                                hideOrShow(label, chart);\n                                // Do not allow overlap\n                            }\n                            else {\n                                labels.push(label);\n                            }\n                        });\n                    }\n                };\n                for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n                    var point = points_1[_i];\n                    _loop_1(point);\n                }\n            };\n            push(series.nodes || []);\n            push(series.points);\n        }\n    }\n    this.hideOverlappingLabels(labels);\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar OverlappingDataLabels = {\n    compose: compose\n};\n/* harmony default export */ var Extensions_OverlappingDataLabels = (OverlappingDataLabels);\n\n;// ./code/es5/es-modules/Extensions/BorderRadius.js\n/* *\n *\n *  Highcharts Border Radius module\n *\n *  Author: Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar BorderRadius_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\n\nvar BorderRadius_defaultOptions = Defaults.defaultOptions;\n\nvar BorderRadius_noop = Core_Globals.noop;\n\nvar BorderRadius_addEvent = Core_Utilities.addEvent, BorderRadius_extend = Core_Utilities.extend, BorderRadius_isObject = Core_Utilities.isObject, BorderRadius_merge = Core_Utilities.merge, BorderRadius_relativeLength = Core_Utilities.relativeLength;\n/* *\n *\n *  Constants\n *\n * */\nvar defaultBorderRadiusOptions = {\n    radius: 0,\n    scope: 'stack',\n    where: void 0\n};\n/* *\n *\n *  Variables\n *\n * */\nvar oldArc = BorderRadius_noop;\nvar oldRoundedRect = BorderRadius_noop;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction applyBorderRadius(path, i, r) {\n    var a = path[i];\n    var b = path[i + 1];\n    if (b[0] === 'Z') {\n        b = path[0];\n    }\n    var line,\n        arc,\n        fromLineToArc;\n    // From straight line to arc\n    if ((a[0] === 'M' || a[0] === 'L') && b[0] === 'A') {\n        line = a;\n        arc = b;\n        fromLineToArc = true;\n        // From arc to straight line\n    }\n    else if (a[0] === 'A' && (b[0] === 'M' || b[0] === 'L')) {\n        line = b;\n        arc = a;\n    }\n    if (line && arc && arc.params) {\n        var bigR = arc[1], \n            // In our use cases, outer pie slice arcs are clockwise and inner\n            // arcs (donut/sunburst etc) are anti-clockwise\n            clockwise = arc[5], params = arc.params, start = params.start, end = params.end, cx = params.cx, cy = params.cy;\n        // Some geometric constants\n        var relativeR = clockwise ? (bigR - r) : (bigR + r), \n            // The angle, on the big arc, that the border radius arc takes up\n            angleOfBorderRadius = relativeR ? Math.asin(r / relativeR) : 0,\n            angleOffset = clockwise ?\n                angleOfBorderRadius :\n                -angleOfBorderRadius, \n            // The distance along the radius of the big arc to the starting\n            // point of the small border radius arc\n            distanceBigCenterToStartArc = (Math.cos(angleOfBorderRadius) *\n                relativeR);\n        // From line to arc\n        if (fromLineToArc) {\n            // Update the cache\n            params.start = start + angleOffset;\n            // First move to the start position at the radial line. We want to\n            // start one borderRadius closer to the center.\n            line[1] = cx + distanceBigCenterToStartArc * Math.cos(start);\n            line[2] = cy + distanceBigCenterToStartArc * Math.sin(start);\n            // Now draw an arc towards the point where the small circle touches\n            // the great circle.\n            path.splice(i + 1, 0, [\n                'A',\n                r,\n                r,\n                0, // Slanting,\n                0, // Long arc\n                1, // Clockwise\n                cx + bigR * Math.cos(params.start),\n                cy + bigR * Math.sin(params.start)\n            ]);\n            // From arc to line\n        }\n        else {\n            // Update the cache\n            params.end = end - angleOffset;\n            // End the big arc a bit earlier\n            arc[6] = cx + bigR * Math.cos(params.end);\n            arc[7] = cy + bigR * Math.sin(params.end);\n            // Draw a small arc towards a point on the end angle, but one\n            // borderRadius closer to the center relative to the perimeter.\n            path.splice(i + 1, 0, [\n                'A',\n                r,\n                r,\n                0,\n                0,\n                1,\n                cx + distanceBigCenterToStartArc * Math.cos(end),\n                cy + distanceBigCenterToStartArc * Math.sin(end)\n            ]);\n        }\n        // Long or short arc must be reconsidered because we have modified the\n        // start and end points\n        arc[4] = Math.abs(params.end - params.start) < Math.PI ? 0 : 1;\n    }\n}\n/**\n * Extend arc with borderRadius.\n * @private\n */\nfunction BorderRadius_arc(x, y, w, h, options) {\n    if (options === void 0) { options = {}; }\n    var path = oldArc(x,\n        y,\n        w,\n        h,\n        options),\n        _a = options.innerR,\n        innerR = _a === void 0 ? 0 : _a,\n        _b = options.r,\n        r = _b === void 0 ? w : _b,\n        _c = options.start,\n        start = _c === void 0 ? 0 : _c,\n        _d = options.end,\n        end = _d === void 0 ? 0 : _d;\n    if (options.open || !options.borderRadius) {\n        return path;\n    }\n    var alpha = end - start,\n        sinHalfAlpha = Math.sin(alpha / 2),\n        borderRadius = Math.max(Math.min(BorderRadius_relativeLength(options.borderRadius || 0,\n        r - innerR), \n        // Cap to half the sector radius\n        (r - innerR) / 2, \n        // For smaller pie slices, cap to the largest small circle that\n        // can be fitted within the sector\n        (r * sinHalfAlpha) / (1 + sinHalfAlpha)), 0), \n        // For the inner radius, we need an extra cap because the inner arc\n        // is shorter than the outer arc\n        innerBorderRadius = Math.min(borderRadius, 2 * (alpha / Math.PI) * innerR);\n    // Apply turn-by-turn border radius. Start at the end since we're\n    // splicing in arc segments.\n    var i = path.length - 1;\n    while (i--) {\n        applyBorderRadius(path, i, i > 1 ? innerBorderRadius : borderRadius);\n    }\n    return path;\n}\n/** @private */\nfunction seriesOnAfterColumnTranslate() {\n    var _a,\n        _b;\n    if (this.options.borderRadius &&\n        !(this.chart.is3d && this.chart.is3d())) {\n        var _c = this,\n            options = _c.options,\n            yAxis = _c.yAxis,\n            percent = options.stacking === 'percent',\n            seriesDefault = (_b = (_a = BorderRadius_defaultOptions.plotOptions) === null || _a === void 0 ? void 0 : _a[this.type]) === null || _b === void 0 ? void 0 : _b.borderRadius,\n            borderRadius = optionsToObject(options.borderRadius,\n            BorderRadius_isObject(seriesDefault) ? seriesDefault : {}),\n            reversed = yAxis.options.reversed;\n        for (var _i = 0, _d = this.points; _i < _d.length; _i++) {\n            var point = _d[_i];\n            var shapeArgs = point.shapeArgs;\n            if (point.shapeType === 'roundedRect' && shapeArgs) {\n                var _e = shapeArgs.width,\n                    width = _e === void 0 ? 0 : _e,\n                    _f = shapeArgs.height,\n                    height = _f === void 0 ? 0 : _f,\n                    _g = shapeArgs.y,\n                    y = _g === void 0 ? 0 : _g;\n                var brBoxY = y,\n                    brBoxHeight = height;\n                // It would be nice to refactor StackItem.getStackBox/\n                // setOffset so that we could get a reliable box out of\n                // it. Currently it is close if we remove the label\n                // offset, but we still need to run crispCol and also\n                // flip it if inverted, so atm it is simpler to do it\n                // like the below.\n                if (borderRadius.scope === 'stack' &&\n                    point.stackTotal) {\n                    var stackEnd = yAxis.translate(percent ? 100 : point.stackTotal,\n                        false,\n                        true,\n                        false,\n                        true),\n                        stackThreshold = yAxis.translate(options.threshold || 0,\n                        false,\n                        true,\n                        false,\n                        true),\n                        box = this.crispCol(0,\n                        Math.min(stackEnd,\n                        stackThreshold), 0,\n                        Math.abs(stackEnd - stackThreshold));\n                    brBoxY = box.y;\n                    brBoxHeight = box.height;\n                }\n                var flip = (point.negative ? -1 : 1) *\n                        (reversed ? -1 : 1) === -1;\n                // Handle the where option\n                var where = borderRadius.where;\n                // Waterfall, hanging columns should have rounding on\n                // all sides\n                if (!where &&\n                    this.is('waterfall') &&\n                    Math.abs((point.yBottom || 0) -\n                        (this.translatedThreshold || 0)) > this.borderWidth) {\n                    where = 'all';\n                }\n                if (!where) {\n                    where = 'end';\n                }\n                // Get the radius\n                var r = Math.min(BorderRadius_relativeLength(borderRadius.radius,\n                    width),\n                    width / 2, \n                    // Cap to the height, but not if where is `end`\n                    where === 'all' ? height / 2 : Infinity) || 0;\n                // If the `where` option is 'end', cut off the\n                // rectangles by making the border-radius box one r\n                // greater, so that the imaginary radius falls outside\n                // the rectangle.\n                if (where === 'end') {\n                    if (flip) {\n                        brBoxY -= r;\n                        brBoxHeight += r;\n                    }\n                    else {\n                        brBoxHeight += r;\n                    }\n                }\n                BorderRadius_extend(shapeArgs, { brBoxHeight: brBoxHeight, brBoxY: brBoxY, r: r });\n            }\n        }\n    }\n}\n/** @private */\nfunction BorderRadius_compose(SeriesClass, SVGElementClass, SVGRendererClass) {\n    var PieSeriesClass = SeriesClass.types.pie;\n    if (!SVGElementClass.symbolCustomAttribs.includes('borderRadius')) {\n        var symbols = SVGRendererClass.prototype.symbols;\n        BorderRadius_addEvent(SeriesClass, 'afterColumnTranslate', seriesOnAfterColumnTranslate, {\n            // After columnrange and polar column modifications\n            order: 9\n        });\n        BorderRadius_addEvent(PieSeriesClass, 'afterTranslate', pieSeriesOnAfterTranslate);\n        SVGElementClass.symbolCustomAttribs.push('borderRadius', 'brBoxHeight', 'brBoxY');\n        oldArc = symbols.arc;\n        oldRoundedRect = symbols.roundedRect;\n        symbols.arc = BorderRadius_arc;\n        symbols.roundedRect = BorderRadius_roundedRect;\n    }\n}\n/** @private */\nfunction optionsToObject(options, seriesBROptions) {\n    if (!BorderRadius_isObject(options)) {\n        options = { radius: options || 0 };\n    }\n    return BorderRadius_merge(defaultBorderRadiusOptions, seriesBROptions, options);\n}\n/** @private */\nfunction pieSeriesOnAfterTranslate() {\n    var borderRadius = optionsToObject(this.options.borderRadius);\n    for (var _i = 0, _a = this.points; _i < _a.length; _i++) {\n        var point = _a[_i];\n        var shapeArgs = point.shapeArgs;\n        if (shapeArgs) {\n            shapeArgs.borderRadius = BorderRadius_relativeLength(borderRadius.radius, (shapeArgs.r || 0) - ((shapeArgs.innerR) || 0));\n        }\n    }\n}\n/**\n * Extend roundedRect with individual cutting through rOffset.\n * @private\n */\nfunction BorderRadius_roundedRect(x, y, width, height, options) {\n    if (options === void 0) { options = {}; }\n    var path = oldRoundedRect(x,\n        y,\n        width,\n        height,\n        options),\n        _a = options.r,\n        r = _a === void 0 ? 0 : _a,\n        _b = options.brBoxHeight,\n        brBoxHeight = _b === void 0 ? height : _b,\n        _c = options.brBoxY,\n        brBoxY = _c === void 0 ? y : _c,\n        brOffsetTop = y - brBoxY,\n        brOffsetBtm = (brBoxY + brBoxHeight) - (y + height), \n        // When the distance to the border-radius box is greater than the r\n        // itself, it means no border radius. The -0.1 accounts for float\n        // rounding errors.\n        rTop = (brOffsetTop - r) > -0.1 ? 0 : r,\n        rBtm = (brOffsetBtm - r) > -0.1 ? 0 : r,\n        cutTop = Math.max(rTop && brOffsetTop, 0),\n        cutBtm = Math.max(rBtm && brOffsetBtm, 0);\n    /*\n\n    The naming of control points:\n\n      / a -------- b \\\n     /                \\\n    h                  c\n    |                  |\n    |                  |\n    |                  |\n    g                  d\n     \\                /\n      \\ f -------- e /\n\n    */\n    var a = [x + rTop,\n        y],\n        b = [x + width - rTop,\n        y],\n        c = [x + width,\n        y + rTop],\n        d = [\n            x + width,\n        y + height - rBtm\n        ],\n        e = [\n            x + width - rBtm,\n            y + height\n        ],\n        f = [x + rBtm,\n        y + height],\n        g = [x,\n        y + height - rBtm],\n        h = [x,\n        y + rTop];\n    var applyPythagoras = function (r,\n        altitude) { return Math.sqrt(Math.pow(r, 2) - Math.pow(altitude, 2)); };\n    // Inside stacks, cut off part of the top\n    if (cutTop) {\n        var base = applyPythagoras(rTop,\n            rTop - cutTop);\n        a[0] -= base;\n        b[0] += base;\n        c[1] = h[1] = y + rTop - cutTop;\n    }\n    // Column is lower than the radius. Cut off bottom inside the top\n    // radius.\n    if (height < rTop - cutTop) {\n        var base = applyPythagoras(rTop,\n            rTop - cutTop - height);\n        c[0] = d[0] = x + width - rTop + base;\n        e[0] = Math.min(c[0], e[0]);\n        f[0] = Math.max(d[0], f[0]);\n        g[0] = h[0] = x + rTop - base;\n        c[1] = h[1] = y + height;\n    }\n    // Inside stacks, cut off part of the bottom\n    if (cutBtm) {\n        var base = applyPythagoras(rBtm,\n            rBtm - cutBtm);\n        e[0] += base;\n        f[0] -= base;\n        d[1] = g[1] = y + height - rBtm + cutBtm;\n    }\n    // Cut off top inside the bottom radius\n    if (height < rBtm - cutBtm) {\n        var base = applyPythagoras(rBtm,\n            rBtm - cutBtm - height);\n        c[0] = d[0] = x + width - rBtm + base;\n        b[0] = Math.min(c[0], b[0]);\n        a[0] = Math.max(d[0], a[0]);\n        g[0] = h[0] = x + rBtm - base;\n        d[1] = g[1] = y;\n    }\n    // Preserve the box for data labels\n    path.length = 0;\n    path.push(BorderRadius_spreadArray(['M'], a, true), BorderRadius_spreadArray(['L'], b, true), BorderRadius_spreadArray(['A', rTop, rTop, 0, 0, 1], c, true), BorderRadius_spreadArray(['L'], d, true), BorderRadius_spreadArray(['A', rBtm, rBtm, 0, 0, 1], e, true), BorderRadius_spreadArray(['L'], f, true), BorderRadius_spreadArray(['A', rBtm, rBtm, 0, 0, 1], g, true), BorderRadius_spreadArray(['L'], h, true), BorderRadius_spreadArray(['A', rTop, rTop, 0, 0, 1], a, true), ['Z']);\n    return path;\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar BorderRadius = {\n    compose: BorderRadius_compose,\n    optionsToObject: optionsToObject\n};\n/* harmony default export */ var Extensions_BorderRadius = (BorderRadius);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * Detailed options for border radius.\n *\n * @sample  {highcharts} highcharts/plotoptions/column-borderradius/\n *          Rounded columns\n * @sample  highcharts/plotoptions/series-border-radius\n *          Column and pie with rounded border\n *\n * @interface Highcharts.BorderRadiusOptionsObject\n */ /**\n* The border radius. A number signifies pixels. A percentage string, like for\n* example `50%`, signifies a relative size. For columns this is relative to the\n* column width, for pies it is relative to the radius and the inner radius.\n*\n* @name Highcharts.BorderRadiusOptionsObject#radius\n* @type {string|number}\n*/ /**\n* The scope of the rounding for column charts. In a stacked column chart, the\n* value `point` means each single point will get rounded corners. The value\n* `stack` means the rounding will apply to the full stack, so that only points\n* close to the top or bottom will receive rounding.\n*\n* @name Highcharts.BorderRadiusOptionsObject#scope\n* @validvalue [\"point\", \"stack\"]\n* @type {string}\n*/ /**\n* For column charts, where in the point or stack to apply rounding. The `end`\n* value means only those corners at the point value will be rounded, leaving\n* the corners at the base or threshold unrounded. This is the most intuitive\n* behaviour. The `all` value means also the base will be rounded.\n*\n* @name Highcharts.BorderRadiusOptionsObject#where\n* @validvalue [\"all\", \"end\"]\n* @type {string}\n* @default end\n*/\n(''); // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Responsive.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar Responsive_diffObjects = Core_Utilities.diffObjects, Responsive_extend = Core_Utilities.extend, Responsive_find = Core_Utilities.find, Responsive_merge = Core_Utilities.merge, Responsive_pick = Core_Utilities.pick, Responsive_uniqueKey = Core_Utilities.uniqueKey;\n/* *\n *\n *  Composition\n *\n * */\nvar Responsive;\n(function (Responsive) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    function compose(ChartClass) {\n        var chartProto = ChartClass.prototype;\n        if (!chartProto.matchResponsiveRule) {\n            Responsive_extend(chartProto, {\n                matchResponsiveRule: matchResponsiveRule,\n                setResponsive: setResponsive\n            });\n        }\n        return ChartClass;\n    }\n    Responsive.compose = compose;\n    /**\n     * Handle a single responsiveness rule.\n     *\n     * @private\n     * @function Highcharts.Chart#matchResponsiveRule\n     * @param {Highcharts.ResponsiveRulesOptions} rule\n     * @param {Array<string>} matches\n     */\n    function matchResponsiveRule(rule, matches) {\n        var condition = rule.condition,\n            fn = condition.callback || function () {\n                return (this.chartWidth <= Responsive_pick(condition.maxWidth,\n            Number.MAX_VALUE) &&\n                    this.chartHeight <= Responsive_pick(condition.maxHeight,\n            Number.MAX_VALUE) &&\n                    this.chartWidth >= Responsive_pick(condition.minWidth, 0) &&\n                    this.chartHeight >= Responsive_pick(condition.minHeight, 0));\n        };\n        if (fn.call(this)) {\n            matches.push(rule._id);\n        }\n    }\n    /**\n     * Update the chart based on the current chart/document size and options\n     * for responsiveness.\n     *\n     * @private\n     * @function Highcharts.Chart#setResponsive\n     * @param  {boolean} [redraw=true]\n     * @param  {boolean} [reset=false]\n     * Reset by un-applying all rules. Chart.update resets all rules before\n     * applying updated options.\n     */\n    function setResponsive(redraw, reset) {\n        var _this = this;\n        var options = this.options.responsive,\n            currentResponsive = this.currentResponsive;\n        var ruleIds = [],\n            undoOptions;\n        if (!reset && options && options.rules) {\n            options.rules.forEach(function (rule) {\n                if (typeof rule._id === 'undefined') {\n                    rule._id = Responsive_uniqueKey();\n                }\n                _this.matchResponsiveRule(rule, ruleIds /* , redraw */);\n            }, this);\n        }\n        // Merge matching rules\n        var mergedOptions = Responsive_merge.apply(void 0,\n            ruleIds\n                .map(function (ruleId) { return Responsive_find((options || {}).rules || [],\n            function (rule) { return (rule._id === ruleId); }); })\n                .map(function (rule) { return (rule && rule.chartOptions); }));\n        mergedOptions.isResponsiveOptions = true;\n        // Stringified key for the rules that currently apply.\n        ruleIds = (ruleIds.toString() || void 0);\n        var currentRuleIds = (currentResponsive && currentResponsive.ruleIds);\n        // Changes in what rules apply\n        if (ruleIds !== currentRuleIds) {\n            // Undo previous rules. Before we apply a new set of rules, we\n            // need to roll back completely to base options (#6291).\n            if (currentResponsive) {\n                this.currentResponsive = void 0;\n                this.updatingResponsive = true;\n                this.update(currentResponsive.undoOptions, redraw, true);\n                this.updatingResponsive = false;\n            }\n            if (ruleIds) {\n                // Get undo-options for matching rules. The `undoOptions``\n                // hold the current values before they are changed by the\n                // `mergedOptions`.\n                undoOptions = Responsive_diffObjects(mergedOptions, this.options, true, this.collectionsWithUpdate);\n                undoOptions.isResponsiveOptions = true;\n                this.currentResponsive = {\n                    ruleIds: ruleIds,\n                    mergedOptions: mergedOptions,\n                    undoOptions: undoOptions\n                };\n                if (!this.updatingResponsive) {\n                    this.update(mergedOptions, redraw, true);\n                }\n            }\n            else {\n                this.currentResponsive = void 0;\n            }\n        }\n    }\n})(Responsive || (Responsive = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Core_Responsive = (Responsive);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * A callback function to gain complete control on when the responsive rule\n * applies.\n *\n * @callback Highcharts.ResponsiveCallbackFunction\n *\n * @param {Highcharts.Chart} this\n * Chart context.\n *\n * @return {boolean}\n * Return `true` if it applies.\n */\n(''); // Keeps doclets above in JS file\n/* *\n *\n *  API Options\n *\n * */\n/**\n * Allows setting a set of rules to apply for different screen or chart\n * sizes. Each rule specifies additional chart options.\n *\n * @sample {highstock} stock/demo/responsive/\n *         Stock chart\n * @sample highcharts/responsive/axis/\n *         Axis\n * @sample highcharts/responsive/legend/\n *         Legend\n * @sample highcharts/responsive/classname/\n *         Class name\n *\n * @since     5.0.0\n * @apioption responsive\n */\n/**\n * A set of rules for responsive settings. The rules are executed from\n * the top down.\n *\n * @sample {highcharts} highcharts/responsive/axis/\n *         Axis changes\n * @sample {highstock} highcharts/responsive/axis/\n *         Axis changes\n * @sample {highmaps} highcharts/responsive/axis/\n *         Axis changes\n *\n * @type      {Array<*>}\n * @since     5.0.0\n * @apioption responsive.rules\n */\n/**\n * A full set of chart options to apply as overrides to the general\n * chart options. The chart options are applied when the given rule\n * is active.\n *\n * A special case is configuration objects that take arrays, for example\n * [xAxis](#xAxis), [yAxis](#yAxis) or [series](#series). For these\n * collections, an `id` option is used to map the new option set to\n * an existing object. If an existing object of the same id is not found,\n * the item of the same index updated. So for example, setting `chartOptions`\n * with two series items without an `id`, will cause the existing chart's\n * two series to be updated with respective options.\n *\n * @sample {highstock} stock/demo/responsive/\n *         Stock chart\n * @sample highcharts/responsive/axis/\n *         Axis\n * @sample highcharts/responsive/legend/\n *         Legend\n * @sample highcharts/responsive/classname/\n *         Class name\n *\n * @type      {Highcharts.Options}\n * @since     5.0.0\n * @apioption responsive.rules.chartOptions\n */\n/**\n * Under which conditions the rule applies.\n *\n * @since     5.0.0\n * @apioption responsive.rules.condition\n */\n/**\n * A callback function to gain complete control on when the responsive\n * rule applies. Return `true` if it applies. This opens for checking\n * against other metrics than the chart size, for example the document\n * size or other elements.\n *\n * @type      {Highcharts.ResponsiveCallbackFunction}\n * @since     5.0.0\n * @context   Highcharts.Chart\n * @apioption responsive.rules.condition.callback\n */\n/**\n * The responsive rule applies if the chart height is less than this.\n *\n * @type      {number}\n * @since     5.0.0\n * @apioption responsive.rules.condition.maxHeight\n */\n/**\n * The responsive rule applies if the chart width is less than this.\n *\n * @sample highcharts/responsive/axis/\n *         Max width is 500\n *\n * @type      {number}\n * @since     5.0.0\n * @apioption responsive.rules.condition.maxWidth\n */\n/**\n * The responsive rule applies if the chart height is greater than this.\n *\n * @type      {number}\n * @default   0\n * @since     5.0.0\n * @apioption responsive.rules.condition.minHeight\n */\n/**\n * The responsive rule applies if the chart width is greater than this.\n *\n * @type      {number}\n * @default   0\n * @since     5.0.0\n * @apioption responsive.rules.condition.minWidth\n */\n(''); // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/masters/highcharts.src.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar G = Core_Globals;\n// Classes\nG.AST = HTML_AST;\nG.Axis = Axis_Axis;\nG.Chart = Chart_Chart;\nG.Color = Color_Color;\nG.DataLabel = Series_DataLabel;\nG.DataTableCore = Data_DataTableCore;\nG.Fx = Animation_Fx;\nG.HTMLElement = HTML_HTMLElement;\nG.Legend = Legend_Legend;\nG.LegendSymbol = Legend_LegendSymbol;\nG.OverlappingDataLabels = G.OverlappingDataLabels || Extensions_OverlappingDataLabels;\nG.PlotLineOrBand = PlotLineOrBand_PlotLineOrBand;\nG.Point = Series_Point;\nG.Pointer = Core_Pointer;\nG.RendererRegistry = Renderer_RendererRegistry;\nG.Series = Series_Series;\nG.SeriesRegistry = Series_SeriesRegistry;\nG.StackItem = Stacking_StackItem;\nG.SVGElement = SVG_SVGElement;\nG.SVGRenderer = SVG_SVGRenderer;\nG.Templating = Core_Templating;\nG.Tick = Axis_Tick;\nG.Time = Core_Time;\nG.Tooltip = Core_Tooltip;\n// Utilities\nG.animate = AnimationUtilities.animate;\nG.animObject = AnimationUtilities.animObject;\nG.chart = Chart_Chart.chart;\nG.color = Color_Color.parse;\nG.dateFormat = Core_Templating.dateFormat;\nG.defaultOptions = Defaults.defaultOptions;\nG.distribute = Renderer_RendererUtilities.distribute;\nG.format = Core_Templating.format;\nG.getDeferredAnimation = AnimationUtilities.getDeferredAnimation;\nG.getOptions = Defaults.getOptions;\nG.numberFormat = Core_Templating.numberFormat;\nG.seriesType = Series_SeriesRegistry.seriesType;\nG.setAnimation = AnimationUtilities.setAnimation;\nG.setOptions = Defaults.setOptions;\nG.stop = AnimationUtilities.stop;\nG.time = Defaults.defaultTime;\nG.timers = Animation_Fx.timers;\n// Compositions\nExtensions_BorderRadius.compose(G.Series, G.SVGElement, G.SVGRenderer);\nColumn_ColumnDataLabel.compose(G.Series.types.column);\nSeries_DataLabel.compose(G.Series);\nAxis_DateTimeAxis.compose(G.Axis);\nHTML_HTMLElement.compose(G.SVGRenderer);\nLegend_Legend.compose(G.Chart);\nAxis_LogarithmicAxis.compose(G.Axis);\nExtensions_OverlappingDataLabels.compose(G.Chart);\nPieDataLabel.compose(G.Series.types.pie);\nPlotLineOrBand_PlotLineOrBand.compose(G.Chart, G.Axis);\nCore_Pointer.compose(G.Chart);\nCore_Responsive.compose(G.Chart);\nExtensions_ScrollablePlotArea.compose(G.Axis, G.Chart, G.Series);\nStacking_StackingAxis.compose(G.Axis, G.Chart, G.Series);\nCore_Tooltip.compose(G.Pointer);\nCore_Utilities.extend(G, Core_Utilities);\n// Default Export\n/* harmony default export */ var highcharts_src = (G);\n\n;// ./code/es5/es-modules/Extensions/ArrowSymbols.js\n/* *\n *\n *  (c) 2017 Highsoft AS\n *  Authors: Lars A. V. Cabrera\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Creates an arrow symbol. Like a triangle, except not filled.\n * ```\n *                   o\n *             o\n *       o\n * o\n *       o\n *             o\n *                   o\n * ```\n *\n * @private\n * @function\n *\n * @param {number} x\n *        x position of the arrow\n *\n * @param {number} y\n *        y position of the arrow\n *\n * @param {number} w\n *        width of the arrow\n *\n * @param {number} h\n *        height of the arrow\n *\n * @return {Highcharts.SVGPathArray}\n *         Path array\n */\nfunction arrow(x, y, w, h) {\n    return [\n        ['M', x, y + h / 2],\n        ['L', x + w, y],\n        ['L', x, y + h / 2],\n        ['L', x + w, y + h]\n    ];\n}\n/**\n * Creates a half-width arrow symbol. Like a triangle, except not filled.\n * ```\n *       o\n *    o\n * o\n *    o\n *       o\n * ```\n *\n * @private\n * @function\n *\n * @param {number} x\n *        x position of the arrow\n *\n * @param {number} y\n *        y position of the arrow\n *\n * @param {number} w\n *        width of the arrow\n *\n * @param {number} h\n *        height of the arrow\n *\n * @return {Highcharts.SVGPathArray}\n *         Path array\n */\nfunction arrowHalf(x, y, w, h) {\n    return arrow(x, y, w / 2, h);\n}\n/**\n * @private\n */\nfunction ArrowSymbols_compose(SVGRendererClass) {\n    var symbols = SVGRendererClass.prototype.symbols;\n    symbols.arrow = arrow;\n    symbols['arrow-filled'] = triangleLeft;\n    symbols['arrow-filled-half'] = triangleLeftHalf;\n    symbols['arrow-half'] = arrowHalf;\n    symbols['triangle-left'] = triangleLeft;\n    symbols['triangle-left-half'] = triangleLeftHalf;\n}\n/**\n * Creates a left-oriented triangle.\n * ```\n *             o\n *       ooooooo\n * ooooooooooooo\n *       ooooooo\n *             o\n * ```\n *\n * @private\n * @function\n *\n * @param {number} x\n *        x position of the triangle\n *\n * @param {number} y\n *        y position of the triangle\n *\n * @param {number} w\n *        width of the triangle\n *\n * @param {number} h\n *        height of the triangle\n *\n * @return {Highcharts.SVGPathArray}\n *         Path array\n */\nfunction triangleLeft(x, y, w, h) {\n    return [\n        ['M', x + w, y],\n        ['L', x, y + h / 2],\n        ['L', x + w, y + h],\n        ['Z']\n    ];\n}\n/**\n * Creates a half-width, left-oriented triangle.\n * ```\n *       o\n *    oooo\n * ooooooo\n *    oooo\n *       o\n * ```\n *\n * @private\n * @function\n *\n * @param {number} x\n *        x position of the triangle\n *\n * @param {number} y\n *        y position of the triangle\n *\n * @param {number} w\n *        width of the triangle\n *\n * @param {number} h\n *        height of the triangle\n *\n * @return {Highcharts.SVGPathArray}\n *         Path array\n */\nfunction triangleLeftHalf(x, y, w, h) {\n    return triangleLeft(x, y, w / 2, h);\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar ArrowSymbols = {\n    compose: ArrowSymbols_compose\n};\n/* harmony default export */ var Extensions_ArrowSymbols = (ArrowSymbols);\n\n;// ./code/es5/es-modules/Gantt/Connection.js\n/* *\n *\n *  (c) 2016 Highsoft AS\n *  Authors: Øystein Moseng, Lars A. V. Cabrera\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar Connection_defined = Core_Utilities.defined, Connection_error = Core_Utilities.error, Connection_merge = Core_Utilities.merge, Connection_objectEach = Core_Utilities.objectEach;\n/* *\n *\n *  Constants\n *\n * */\nvar Connection_deg2rad = Core_Globals.deg2rad, max = Math.max, min = Math.min;\n/* *\n *\n *  Class\n *\n * */\n/**\n * The Connection class. Used internally to represent a connection between two\n * points.\n *\n * @private\n * @class\n * @name Highcharts.Connection\n *\n * @param {Highcharts.Point} from\n *        Connection runs from this Point.\n *\n * @param {Highcharts.Point} to\n *        Connection runs to this Point.\n *\n * @param {Highcharts.ConnectorsOptions} [options]\n *        Connection options.\n */\nvar Connection = /** @class */ (function () {\n    function Connection(from, to, options) {\n        this.init(from, to, options);\n    }\n    /**\n     * Initialize the Connection object. Used as constructor only.\n     *\n     * @function Highcharts.Connection#init\n     *\n     * @param {Highcharts.Point} from\n     *        Connection runs from this Point.\n     *\n     * @param {Highcharts.Point} to\n     *        Connection runs to this Point.\n     *\n     * @param {Highcharts.ConnectorsOptions} [options]\n     *        Connection options.\n     */\n    Connection.prototype.init = function (from, to, options) {\n        this.fromPoint = from;\n        this.toPoint = to;\n        this.options = options;\n        this.chart = from.series.chart;\n        this.pathfinder = this.chart.pathfinder;\n    };\n    /**\n     * Add (or update) this connection's path on chart. Stores reference to the\n     * created element on this.graphics.path.\n     *\n     * @function Highcharts.Connection#renderPath\n     *\n     * @param {Highcharts.SVGPathArray} path\n     *        Path to render, in array format. E.g. ['M', 0, 0, 'L', 10, 10]\n     *\n     * @param {Highcharts.SVGAttributes} [attribs]\n     *        SVG attributes for the path.\n     *\n     * @param {Partial<Highcharts.AnimationOptionsObject>} [animation]\n     *        Animation options for the rendering.\n     */\n    Connection.prototype.renderPath = function (path, attribs) {\n        var connection = this,\n            chart = this.chart,\n            styledMode = chart.styledMode,\n            pathfinder = this.pathfinder,\n            anim = {};\n        var pathGraphic = connection.graphics && connection.graphics.path;\n        // Add the SVG element of the pathfinder group if it doesn't exist\n        if (!pathfinder.group) {\n            pathfinder.group = chart.renderer.g()\n                .addClass('highcharts-pathfinder-group')\n                .attr({ zIndex: -1 })\n                .add(chart.seriesGroup);\n        }\n        // Shift the group to compensate for plot area.\n        // Note: Do this always (even when redrawing a path) to avoid issues\n        // when updating chart in a way that changes plot metrics.\n        pathfinder.group.translate(chart.plotLeft, chart.plotTop);\n        // Create path if does not exist\n        if (!(pathGraphic && pathGraphic.renderer)) {\n            pathGraphic = chart.renderer.path()\n                .add(pathfinder.group);\n            if (!styledMode) {\n                pathGraphic.attr({\n                    opacity: 0\n                });\n            }\n        }\n        // Set path attribs and animate to the new path\n        pathGraphic.attr(attribs);\n        anim.d = path;\n        if (!styledMode) {\n            anim.opacity = 1;\n        }\n        pathGraphic.animate(anim);\n        // Store reference on connection\n        this.graphics = this.graphics || {};\n        this.graphics.path = pathGraphic;\n    };\n    /**\n     * Calculate and add marker graphics for connection to the chart. The\n     * created/updated elements are stored on this.graphics.start and\n     * this.graphics.end.\n     *\n     * @function Highcharts.Connection#addMarker\n     *\n     * @param {string} type\n     *        Marker type, either 'start' or 'end'.\n     *\n     * @param {Highcharts.ConnectorsMarkerOptions} options\n     *        All options for this marker. Not calculated or merged with other\n     *        options.\n     *\n     * @param {Highcharts.SVGPathArray} path\n     *        Connection path in array format. This is used to calculate the\n     *        rotation angle of the markers.\n     */\n    Connection.prototype.addMarker = function (type, options, path) {\n        var connection = this,\n            chart = connection.fromPoint.series.chart,\n            pathfinder = chart.pathfinder,\n            renderer = chart.renderer,\n            point = (type === 'start' ?\n                connection.fromPoint :\n                connection.toPoint),\n            anchor = point.getPathfinderAnchorPoint(options);\n        var markerVector,\n            radians,\n            rotation,\n            box,\n            width,\n            height,\n            pathVector,\n            segment;\n        if (!options.enabled) {\n            return;\n        }\n        // Last vector before start/end of path, used to get angle\n        if (type === 'start') {\n            segment = path[1];\n        }\n        else { // 'end'\n            segment = path[path.length - 2];\n        }\n        if (segment && segment[0] === 'M' || segment[0] === 'L') {\n            pathVector = {\n                x: segment[1],\n                y: segment[2]\n            };\n            // Get angle between pathVector and anchor point and use it to\n            // create marker position.\n            radians = point.getRadiansToVector(pathVector, anchor);\n            markerVector = point.getMarkerVector(radians, options.radius, anchor);\n            // Rotation of marker is calculated from angle between pathVector\n            // and markerVector.\n            // (Note:\n            //  Used to recalculate radians between markerVector and pathVector,\n            //  but this should be the same as between pathVector and anchor.)\n            rotation = -radians / Connection_deg2rad;\n            if (options.width && options.height) {\n                width = options.width;\n                height = options.height;\n            }\n            else {\n                width = height = options.radius * 2;\n            }\n            // Add graphics object if it does not exist\n            connection.graphics = connection.graphics || {};\n            box = {\n                x: markerVector.x - (width / 2),\n                y: markerVector.y - (height / 2),\n                width: width,\n                height: height,\n                rotation: rotation,\n                rotationOriginX: markerVector.x,\n                rotationOriginY: markerVector.y\n            };\n            if (!connection.graphics[type]) {\n                // Create new marker element\n                connection.graphics[type] = renderer\n                    .symbol(options.symbol)\n                    .addClass('highcharts-point-connecting-path-' + type + '-marker' +\n                    ' highcharts-color-' + this.fromPoint.colorIndex)\n                    .attr(box)\n                    .add(pathfinder.group);\n                if (!renderer.styledMode) {\n                    connection.graphics[type].attr({\n                        fill: options.color || connection.fromPoint.color,\n                        stroke: options.lineColor,\n                        'stroke-width': options.lineWidth,\n                        opacity: 0\n                    })\n                        .animate({\n                        opacity: 1\n                    }, point.series.options.animation);\n                }\n            }\n            else {\n                connection.graphics[type].animate(box);\n            }\n        }\n    };\n    /**\n     * Calculate and return connection path.\n     * Note: Recalculates chart obstacles on demand if they aren't calculated.\n     *\n     * @function Highcharts.Connection#getPath\n     *\n     * @param {Highcharts.ConnectorsOptions} options\n     *        Connector options. Not calculated or merged with other options.\n     *\n     * @return {object|undefined}\n     *         Calculated SVG path data in array format.\n     */\n    Connection.prototype.getPath = function (options) {\n        var pathfinder = this.pathfinder,\n            chart = this.chart,\n            algorithm = pathfinder.algorithms[options.type];\n        var chartObstacles = pathfinder.chartObstacles;\n        if (typeof algorithm !== 'function') {\n            Connection_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), Connection_merge({\n            chartObstacles: chartObstacles,\n            lineObstacles: pathfinder.lineObstacles || [],\n            obstacleMetrics: pathfinder.chartObstacleMetrics,\n            hardBounds: {\n                xMin: 0,\n                xMax: chart.plotWidth,\n                yMin: 0,\n                yMax: chart.plotHeight\n            },\n            obstacleOptions: {\n                margin: options.algorithmMargin\n            },\n            startDirectionX: pathfinder.getAlgorithmStartDirection(options.startMarker)\n        }, options));\n    };\n    /**\n     * (re)Calculate and (re)draw the connection.\n     *\n     * @function Highcharts.Connection#render\n     */\n    Connection.prototype.render = function () {\n        var connection = this,\n            fromPoint = connection.fromPoint,\n            series = fromPoint.series,\n            chart = series.chart,\n            pathfinder = chart.pathfinder,\n            attribs = {};\n        var options = Connection_merge(chart.options.connectors,\n            series.options.connectors,\n            fromPoint.options.connectors,\n            connection.options);\n        // Set path attribs\n        if (!chart.styledMode) {\n            attribs.stroke = options.lineColor || fromPoint.color;\n            attribs['stroke-width'] = options.lineWidth;\n            if (options.dashStyle) {\n                attribs.dashstyle = options.dashStyle;\n            }\n        }\n        attribs['class'] = // eslint-disable-line dot-notation\n            'highcharts-point-connecting-path ' +\n                'highcharts-color-' + fromPoint.colorIndex;\n        options = Connection_merge(attribs, options);\n        // Set common marker options\n        if (!Connection_defined(options.marker.radius)) {\n            options.marker.radius = min(max(Math.ceil((options.algorithmMargin || 8) / 2) - 1, 1), 5);\n        }\n        // Get the path\n        var pathResult = connection.getPath(options),\n            path = pathResult.path;\n        // Always update obstacle storage with obstacles from this path.\n        // We don't know if future calls will need this for their algorithm.\n        if (pathResult.obstacles) {\n            pathfinder.lineObstacles =\n                pathfinder.lineObstacles || [];\n            pathfinder.lineObstacles =\n                pathfinder.lineObstacles.concat(pathResult.obstacles);\n        }\n        // Add the calculated path to the pathfinder group\n        connection.renderPath(path, attribs);\n        // Render the markers\n        connection.addMarker('start', Connection_merge(options.marker, options.startMarker), path);\n        connection.addMarker('end', Connection_merge(options.marker, options.endMarker), path);\n    };\n    /**\n     * Destroy connection by destroying the added graphics elements.\n     *\n     * @function Highcharts.Connection#destroy\n     */\n    Connection.prototype.destroy = function () {\n        if (this.graphics) {\n            Connection_objectEach(this.graphics, function (val) {\n                val.destroy();\n            });\n            delete this.graphics;\n        }\n    };\n    return Connection;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Gantt_Connection = (Connection);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * The default pathfinder algorithm to use for a chart. It is possible to define\n * your own algorithms by adding them to the\n * `Highcharts.Pathfinder.prototype.algorithms`\n * object before the chart has been created.\n *\n * The default algorithms are as follows:\n *\n * `straight`:      Draws a straight line between the connecting\n *                  points. Does not avoid other points when drawing.\n *\n * `simpleConnect`: Finds a path between the points using right angles\n *                  only. Takes only starting/ending points into\n *                  account, and will not avoid other points.\n *\n * `fastAvoid`:     Finds a path between the points using right angles\n *                  only. Will attempt to avoid other points, but its\n *                  focus is performance over accuracy. Works well with\n *                  less dense datasets.\n *\n * @typedef {\"fastAvoid\"|\"simpleConnect\"|\"straight\"|string} Highcharts.PathfinderTypeValue\n */\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Extensions/CurrentDateIndication.js\n/* *\n *\n *  (c) 2016-2024 Highsoft AS\n *\n *  Author: Lars A. V. Cabrera\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar CurrentDateIndication_composed = Core_Globals.composed;\n\nvar CurrentDateIndication_addEvent = Core_Utilities.addEvent, CurrentDateIndication_merge = Core_Utilities.merge, CurrentDateIndication_pushUnique = Core_Utilities.pushUnique, CurrentDateIndication_wrap = Core_Utilities.wrap;\n/* *\n *\n *  Constants\n *\n * */\n/**\n * Show an indicator on the axis for the current date and time. Can be a\n * boolean or a configuration object similar to\n * [xAxis.plotLines](#xAxis.plotLines).\n *\n * @sample gantt/current-date-indicator/demo\n *         Current date indicator enabled\n * @sample gantt/current-date-indicator/object-config\n *         Current date indicator with custom options\n *\n * @declare   Highcharts.CurrentDateIndicatorOptions\n * @type      {boolean|CurrentDateIndicatorOptions}\n * @default   true\n * @extends   xAxis.plotLines\n * @excluding value\n * @product   gantt\n * @apioption xAxis.currentDateIndicator\n */\nvar CurrentDateIndication_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 (CurrentDateIndication_pushUnique(CurrentDateIndication_composed, 'CurrentDateIndication')) {\n        CurrentDateIndication_addEvent(AxisClass, 'afterSetOptions', onAxisAfterSetOptions);\n        CurrentDateIndication_addEvent(PlotLineOrBandClass, 'render', onPlotLineOrBandRender);\n        CurrentDateIndication_wrap(PlotLineOrBandClass.prototype, 'getLabelText', wrapPlotLineOrBandGetLabelText);\n    }\n}\n/**\n * @private\n */\nfunction onAxisAfterSetOptions() {\n    var options = this.options,\n        cdiOptions = options.currentDateIndicator;\n    if (cdiOptions) {\n        var plotLineOptions = typeof cdiOptions === 'object' ?\n                CurrentDateIndication_merge(CurrentDateIndication_defaultOptions,\n            cdiOptions) :\n                CurrentDateIndication_merge(CurrentDateIndication_defaultOptions);\n        plotLineOptions.value = Date.now();\n        plotLineOptions.className = 'highcharts-current-date-indicator';\n        if (!options.plotLines) {\n            options.plotLines = [];\n        }\n        options.plotLines.push(plotLineOptions);\n    }\n}\n/**\n * @private\n */\nfunction onPlotLineOrBandRender() {\n    // If the label already exists, update its text\n    if (this.label) {\n        this.label.attr({\n            text: this.getLabelText(this.options.label)\n        });\n    }\n}\n/**\n * @private\n */\nfunction wrapPlotLineOrBandGetLabelText(defaultMethod, defaultLabelOptions) {\n    var options = this.options;\n    if (options &&\n        options.className &&\n        options.className.indexOf('highcharts-current-date-indicator') !== -1 &&\n        options.label &&\n        typeof options.label.formatter === 'function') {\n        options.value = Date.now();\n        return options.label.formatter\n            .call(this, options.value, options.label.format);\n    }\n    return defaultMethod.call(this, defaultLabelOptions);\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar CurrentDateIndication = {\n    compose: CurrentDateIndication_compose\n};\n/* harmony default export */ var Extensions_CurrentDateIndication = (CurrentDateIndication);\n\n;// ./code/es5/es-modules/Core/Chart/GanttChart.js\n/* *\n *\n *  (c) 2016-2024 Highsoft AS\n *\n *  Author: Lars A. V. Cabrera\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar GanttChart_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n        p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\nvar GanttChart_defaultOptions = Defaults.defaultOptions;\n\nvar GanttChart_isArray = Core_Utilities.isArray, GanttChart_merge = Core_Utilities.merge, GanttChart_splat = Core_Utilities.splat;\n/* *\n *\n *  Class\n *\n * */\n/**\n * Gantt-optimized chart. Use {@link Highcharts.Chart|Chart} for common charts.\n *\n * @requires modules/gantt\n *\n * @class\n * @name Highcharts.GanttChart\n * @extends Highcharts.Chart\n */\nvar GanttChart = /** @class */ (function (_super) {\n    GanttChart_extends(GanttChart, _super);\n    function GanttChart() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Initializes the chart. The constructor's arguments are passed on\n     * directly.\n     *\n     * @function Highcharts.GanttChart#init\n     *\n     * @param {Highcharts.Options} userOptions\n     *        Custom options.\n     *\n     * @param {Function} [callback]\n     *        Function to run when the chart has loaded and all external\n     *        images are loaded.\n     *\n     *\n     * @emits Highcharts.GanttChart#event:init\n     * @emits Highcharts.GanttChart#event:afterInit\n     */\n    GanttChart.prototype.init = function (userOptions, callback) {\n        var xAxisOptions = userOptions.xAxis,\n            yAxisOptions = userOptions.yAxis;\n        var defaultLinkedTo;\n        // Avoid doing these twice\n        userOptions.xAxis = userOptions.yAxis = void 0;\n        var options = GanttChart_merge(true, {\n                chart: {\n                    type: 'gantt'\n                },\n                title: {\n                    text: ''\n                },\n                legend: {\n                    enabled: false\n                },\n                navigator: {\n                    series: { type: 'gantt' },\n                    // Bars were clipped, #14060.\n                    yAxis: {\n                        type: 'category'\n                    }\n                }\n            },\n            userOptions, // User's options\n            // forced options\n            {\n                isGantt: true\n            });\n        userOptions.xAxis = xAxisOptions;\n        userOptions.yAxis = yAxisOptions;\n        // Apply X axis options to both single and multi x axes If user hasn't\n        // defined axes as array, make it into an array and add a second axis by\n        // default.\n        options.xAxis = (!GanttChart_isArray(userOptions.xAxis) ?\n            [userOptions.xAxis || {}, {}] :\n            userOptions.xAxis).map(function (xAxisOptions, i) {\n            var _a,\n                _b,\n                _c;\n            if (i === 1) { // Second xAxis\n                defaultLinkedTo = 0;\n            }\n            return GanttChart_merge(\n            // Defaults\n            {\n                grid: {\n                    borderColor: \"#cccccc\" /* Palette.neutralColor20 */,\n                    enabled: true\n                },\n                opposite: (_c = (_b = (_a = GanttChart_defaultOptions.xAxis) === null || _a === void 0 ? void 0 : _a.opposite) !== null && _b !== void 0 ? _b : xAxisOptions.opposite) !== null && _c !== void 0 ? _c : true,\n                linkedTo: defaultLinkedTo\n            }, \n            // User options\n            xAxisOptions, \n            // Forced options\n            {\n                type: 'datetime'\n            });\n        });\n        // Apply Y axis options to both single and multi y axes\n        options.yAxis = (GanttChart_splat(userOptions.yAxis || {})).map(function (yAxisOptions) { return GanttChart_merge(\n        // Defaults\n        {\n            grid: {\n                borderColor: \"#cccccc\" /* Palette.neutralColor20 */,\n                enabled: true\n            },\n            staticScale: 50,\n            reversed: true,\n            // Set default type treegrid, but only if 'categories' is\n            // undefined\n            type: yAxisOptions.categories ? yAxisOptions.type : 'treegrid'\n        }, \n        // User options\n        yAxisOptions); });\n        _super.prototype.init.call(this, options, callback);\n    };\n    return GanttChart;\n}(Chart_Chart));\n/* *\n *\n *  Class Namespace\n *\n * */\n(function (GanttChart) {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable jsdoc/check-param-names */\n    /**\n     * The factory function for creating new gantt charts. Creates a new {@link\n     * Highcharts.GanttChart|GanttChart} object with different default options\n     * than the basic Chart.\n     *\n     * @example\n     * // Render a chart in to div#container\n     * let chart = Highcharts.ganttChart('container', {\n     *     title: {\n     *         text: 'My chart'\n     *     },\n     *     series: [{\n     *         data: ...\n     *     }]\n     * });\n     *\n     * @function Highcharts.ganttChart\n     *\n     * @param {string|Highcharts.HTMLDOMElement} renderTo\n     *        The DOM element to render to, or its id.\n     *\n     * @param {Highcharts.Options} options\n     *        The chart options structure.\n     *\n     * @param {Highcharts.ChartCallbackFunction} [callback]\n     *        Function to run when the chart has loaded and all external\n     *        images are loaded. Defining a\n     *        [chart.events.load](https://api.highcharts.com/highcharts/chart.events.load)\n     *        handler is equivalent.\n     *\n     * @return {Highcharts.GanttChart}\n     *         Returns the Chart object.\n     */\n    function ganttChart(a, b, c) {\n        return new GanttChart(a, b, c);\n    }\n    GanttChart.ganttChart = ganttChart;\n    /* eslint-enable jsdoc/check-param-names */\n})(GanttChart || (GanttChart = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Chart_GanttChart = (GanttChart);\n\n;// ./code/es5/es-modules/Stock/Navigator/ChartNavigatorComposition.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar ChartNavigatorComposition_isTouchDevice = Core_Globals.isTouchDevice;\n\nvar ChartNavigatorComposition_addEvent = Core_Utilities.addEvent, ChartNavigatorComposition_merge = Core_Utilities.merge, ChartNavigatorComposition_pick = Core_Utilities.pick;\n/* *\n *\n *  Constants\n *\n * */\nvar composedMembers = [];\n/* *\n *\n *  Variables\n *\n * */\nvar NavigatorConstructor;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction ChartNavigatorComposition_compose(ChartClass, NavigatorClass) {\n    if (Core_Utilities.pushUnique(composedMembers, ChartClass)) {\n        var chartProto = ChartClass.prototype;\n        NavigatorConstructor = NavigatorClass;\n        chartProto.callbacks.push(onChartCallback);\n        ChartNavigatorComposition_addEvent(ChartClass, 'afterAddSeries', onChartAfterAddSeries);\n        ChartNavigatorComposition_addEvent(ChartClass, 'afterSetChartSize', onChartAfterSetChartSize);\n        ChartNavigatorComposition_addEvent(ChartClass, 'afterUpdate', onChartAfterUpdate);\n        ChartNavigatorComposition_addEvent(ChartClass, 'beforeRender', onChartBeforeRender);\n        ChartNavigatorComposition_addEvent(ChartClass, 'beforeShowResetZoom', onChartBeforeShowResetZoom);\n        ChartNavigatorComposition_addEvent(ChartClass, 'update', onChartUpdate);\n    }\n}\n/**\n * Handle adding new series.\n * @private\n */\nfunction onChartAfterAddSeries() {\n    if (this.navigator) {\n        // Recompute which series should be shown in navigator, and add them\n        this.navigator.setBaseSeries(null, false);\n    }\n}\n/**\n * For stock charts, extend the Chart.setChartSize method so that we can set the\n * final top position of the navigator once the height of the chart, including\n * the legend, is determined. #367. We can't use Chart.getMargins, because\n * labels offsets are not calculated yet.\n * @private\n */\nfunction onChartAfterSetChartSize() {\n    var _a;\n    var legend = this.legend,\n        navigator = this.navigator;\n    var legendOptions,\n        xAxis,\n        yAxis;\n    if (navigator) {\n        legendOptions = legend && legend.options;\n        xAxis = navigator.xAxis;\n        yAxis = navigator.yAxis;\n        var scrollbarHeight = navigator.scrollbarHeight,\n            scrollButtonSize = navigator.scrollButtonSize;\n        // Compute the top position\n        if (this.inverted) {\n            navigator.left = navigator.opposite ?\n                this.chartWidth - scrollbarHeight -\n                    navigator.height :\n                this.spacing[3] + scrollbarHeight;\n            navigator.top = this.plotTop + scrollButtonSize;\n        }\n        else {\n            navigator.left = ChartNavigatorComposition_pick(xAxis.left, this.plotLeft + scrollButtonSize);\n            navigator.top = navigator.navigatorOptions.top ||\n                this.chartHeight -\n                    navigator.height -\n                    scrollbarHeight -\n                    (((_a = this.scrollbar) === null || _a === void 0 ? void 0 : _a.options.margin) || 0) -\n                    this.spacing[2] -\n                    (this.rangeSelector && this.extraBottomMargin ?\n                        this.rangeSelector.getHeight() :\n                        0) -\n                    ((legendOptions &&\n                        legendOptions.verticalAlign === 'bottom' &&\n                        legendOptions.layout !== 'proximate' && // #13392\n                        legendOptions.enabled &&\n                        !legendOptions.floating) ?\n                        legend.legendHeight +\n                            ChartNavigatorComposition_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 (ChartNavigatorComposition_pick(event.redraw, true)) {\n            this.redraw(event.animation); // #7067\n        }\n    }\n}\n/**\n * Initialize navigator for stock charts\n * @private\n */\nfunction onChartBeforeRender() {\n    var options = this.options;\n    if (options.navigator.enabled ||\n        options.scrollbar.enabled) {\n        this.scroller = this.navigator = new NavigatorConstructor(this);\n    }\n}\n/**\n * For Stock charts. For x only zooming, do not to create the zoom button\n * because X axis zooming is already allowed by the Navigator and Range\n * selector. (#9285)\n * @private\n */\nfunction onChartBeforeShowResetZoom() {\n    var chartOptions = this.options,\n        navigator = chartOptions.navigator,\n        rangeSelector = chartOptions.rangeSelector;\n    if (((navigator && navigator.enabled) ||\n        (rangeSelector && rangeSelector.enabled)) &&\n        ((!ChartNavigatorComposition_isTouchDevice &&\n            this.zooming.type === 'x') ||\n            (ChartNavigatorComposition_isTouchDevice && this.zooming.pinchType === 'x'))) {\n        return false;\n    }\n}\n/**\n * @private\n */\nfunction onChartCallback(chart) {\n    var navigator = chart.navigator;\n    // Initialize the navigator\n    if (navigator && chart.xAxis[0]) {\n        var extremes = chart.xAxis[0].getExtremes();\n        navigator.render(extremes.min, extremes.max);\n    }\n}\n/**\n * Merge options, if no scrolling exists yet\n * @private\n */\nfunction onChartUpdate(e) {\n    var navigatorOptions = (e.options.navigator || {}),\n        scrollbarOptions = (e.options.scrollbar || {});\n    if (!this.navigator && !this.scroller &&\n        (navigatorOptions.enabled || scrollbarOptions.enabled)) {\n        ChartNavigatorComposition_merge(true, this.options.navigator, navigatorOptions);\n        ChartNavigatorComposition_merge(true, this.options.scrollbar, scrollbarOptions);\n        delete e.options.navigator;\n        delete e.options.scrollbar;\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar ChartNavigatorComposition = {\n    compose: ChartNavigatorComposition_compose\n};\n/* harmony default export */ var Navigator_ChartNavigatorComposition = (ChartNavigatorComposition);\n\n;// ./code/es5/es-modules/Core/Axis/NavigatorAxisComposition.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar NavigatorAxisComposition_isTouchDevice = Core_Globals.isTouchDevice;\n\nvar NavigatorAxisComposition_addEvent = Core_Utilities.addEvent, NavigatorAxisComposition_correctFloat = Core_Utilities.correctFloat, NavigatorAxisComposition_defined = Core_Utilities.defined, NavigatorAxisComposition_isNumber = Core_Utilities.isNumber, NavigatorAxisComposition_pick = Core_Utilities.pick;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction NavigatorAxisComposition_onAxisInit() {\n    var axis = this;\n    if (!axis.navigatorAxis) {\n        axis.navigatorAxis = new NavigatorAxisAdditions(axis);\n    }\n}\n/**\n * For Stock charts, override selection zooming with some special features\n * because X axis zooming is already allowed by the Navigator and Range\n * selector.\n * @private\n */\nfunction onAxisSetExtremes(e) {\n    var axis = this,\n        chart = axis.chart,\n        chartOptions = chart.options,\n        navigator = chartOptions.navigator,\n        navigatorAxis = axis.navigatorAxis,\n        pinchType = chart.zooming.pinchType,\n        rangeSelector = chartOptions.rangeSelector,\n        zoomType = chart.zooming.type;\n    var zoomed;\n    if (axis.isXAxis &&\n        ((navigator === null || navigator === void 0 ? void 0 : navigator.enabled) || (rangeSelector === null || rangeSelector === void 0 ? void 0 : rangeSelector.enabled))) {\n        // For y only zooming, ignore the X axis completely\n        if (zoomType === 'y' && e.trigger === 'zoom') {\n            zoomed = false;\n            // For xy zooming, record the state of the zoom before zoom selection,\n            // then when the reset button is pressed, revert to this state. This\n            // should apply only if the chart is initialized with a range (#6612),\n            // otherwise zoom all the way out.\n        }\n        else if (((e.trigger === 'zoom' && zoomType === 'xy') ||\n            (NavigatorAxisComposition_isTouchDevice && pinchType === 'xy')) &&\n            axis.options.range) {\n            var previousZoom = navigatorAxis.previousZoom;\n            // Minimum defined, zooming in\n            if (NavigatorAxisComposition_defined(e.min)) {\n                navigatorAxis.previousZoom = [axis.min, axis.max];\n                // Minimum undefined, resetting zoom\n            }\n            else if (previousZoom) {\n                e.min = previousZoom[0];\n                e.max = previousZoom[1];\n                navigatorAxis.previousZoom = void 0;\n            }\n        }\n    }\n    if (typeof zoomed !== 'undefined') {\n        e.preventDefault();\n    }\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * @private\n * @class\n */\nvar NavigatorAxisAdditions = /** @class */ (function () {\n    /* *\n     *\n     *  Constructors\n     *\n     * */\n    function NavigatorAxisAdditions(axis) {\n        this.axis = axis;\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    NavigatorAxisAdditions.compose = function (AxisClass) {\n        if (!AxisClass.keepProps.includes('navigatorAxis')) {\n            AxisClass.keepProps.push('navigatorAxis');\n            NavigatorAxisComposition_addEvent(AxisClass, 'init', NavigatorAxisComposition_onAxisInit);\n            NavigatorAxisComposition_addEvent(AxisClass, 'setExtremes', onAxisSetExtremes);\n        }\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    NavigatorAxisAdditions.prototype.destroy = function () {\n        this.axis = void 0;\n    };\n    /**\n     * Add logic to normalize the zoomed range in order to preserve the pressed\n     * state of range selector buttons\n     *\n     * @private\n     * @function Highcharts.Axis#toFixedRange\n     */\n    NavigatorAxisAdditions.prototype.toFixedRange = function (pxMin, pxMax, fixedMin, fixedMax) {\n        var axis = this.axis,\n            halfPointRange = (axis.pointRange || 0) / 2;\n        var newMin = NavigatorAxisComposition_pick(fixedMin,\n            axis.translate(pxMin,\n            true, !axis.horiz)),\n            newMax = NavigatorAxisComposition_pick(fixedMax,\n            axis.translate(pxMax,\n            true, !axis.horiz));\n        // Add/remove half point range to/from the extremes (#1172)\n        if (!NavigatorAxisComposition_defined(fixedMin)) {\n            newMin = NavigatorAxisComposition_correctFloat(newMin + halfPointRange);\n        }\n        if (!NavigatorAxisComposition_defined(fixedMax)) {\n            newMax = NavigatorAxisComposition_correctFloat(newMax - halfPointRange);\n        }\n        if (!NavigatorAxisComposition_isNumber(newMin) || !NavigatorAxisComposition_isNumber(newMax)) { // #1195, #7411\n            newMin = newMax = void 0;\n        }\n        return {\n            min: newMin,\n            max: newMax\n        };\n    };\n    return NavigatorAxisAdditions;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var NavigatorAxisComposition = (NavigatorAxisAdditions);\n\n;// ./code/es5/es-modules/Stock/Navigator/NavigatorDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar NavigatorDefaults_color = Color_Color.parse;\n\nvar NavigatorDefaults_seriesTypes = Series_SeriesRegistry.seriesTypes;\n/* *\n *\n *  Constants\n *\n * */\n/**\n * The navigator is a small series below the main series, displaying\n * a view of the entire data set. It provides tools to zoom in and\n * out on parts of the data as well as panning across the dataset.\n *\n * @product      highstock gantt\n * @optionparent navigator\n */\nvar NavigatorDefaults = {\n    /**\n     * Whether the navigator and scrollbar should adapt to updated data\n     * in the base X axis. When loading data async, as in the demo below,\n     * this should be `false`. Otherwise new data will trigger navigator\n     * redraw, which will cause unwanted looping. In the demo below, the\n     * data in the navigator is set only once. On navigating, only the main\n     * chart content is updated.\n     *\n     * @sample {highstock} stock/demo/lazy-loading/\n     *         Set to false with async data loading\n     *\n     * @type      {boolean}\n     * @default   true\n     * @apioption navigator.adaptToUpdatedData\n     */\n    /**\n     * An integer identifying the index to use for the base series, or a\n     * string representing the id of the series.\n     *\n     * **Note**: As of Highcharts 5.0, this is now a deprecated option.\n     * Prefer [series.showInNavigator](#plotOptions.series.showInNavigator).\n     *\n     * @see [series.showInNavigator](#plotOptions.series.showInNavigator)\n     *\n     * @deprecated\n     * @type      {number|string}\n     * @default   0\n     * @apioption navigator.baseSeries\n     */\n    /**\n     * Enable or disable the navigator.\n     *\n     * @sample {highstock} stock/navigator/enabled/\n     *         Disable the navigator\n     *\n     * @type      {boolean}\n     * @default   true\n     * @apioption navigator.enabled\n     */\n    /**\n     * When the chart is inverted, whether to draw the navigator on the\n     * opposite side.\n     *\n     * @type      {boolean}\n     * @default   false\n     * @since     5.0.8\n     * @apioption navigator.opposite\n     */\n    /**\n     * The height of the navigator.\n     *\n     * @sample {highstock} stock/navigator/height/\n     *         A higher navigator\n     */\n    height: 40,\n    /**\n     * The distance from the nearest element, the X axis or X axis labels.\n     *\n     * @sample {highstock} stock/navigator/margin/\n     *         A margin of 2 draws the navigator closer to the X axis labels\n     */\n    margin: 25,\n    /**\n     * Whether the mask should be inside the range marking the zoomed\n     * range, or outside. In Highcharts Stock 1.x it was always `false`.\n     *\n     * @sample {highstock} stock/demo/maskinside-false/\n     *         False, mask outside\n     *\n     * @since   2.0\n     */\n    maskInside: true,\n    /**\n     * Options for the handles for dragging the zoomed area.\n     *\n     * @sample {highstock} stock/navigator/handles/\n     *         Colored handles\n     */\n    handles: {\n        /**\n         * Width for handles.\n         *\n         * @sample {highstock} stock/navigator/styled-handles/\n         *         Styled handles\n         *\n         * @since   6.0.0\n         */\n        width: 7,\n        /**\n         * Border radius of the handles.\n         *\n         * @sample {highstock} stock/navigator/handles-border-radius/\n         *      Border radius on the navigator handles.\n         *\n         * @since 11.4.2\n         */\n        borderRadius: 0,\n        /**\n         * Height for handles.\n         *\n         * @sample {highstock} stock/navigator/styled-handles/\n         *         Styled handles\n         *\n         * @since   6.0.0\n         */\n        height: 15,\n        /**\n         * Array to define shapes of handles. 0-index for left, 1-index for\n         * right.\n         *\n         * Additionally, the URL to a graphic can be given on this form:\n         * `url(graphic.png)`. Note that for the image to be applied to\n         * exported charts, its URL needs to be accessible by the export\n         * server.\n         *\n         * Custom callbacks for symbol path generation can also be added to\n         * `Highcharts.SVGRenderer.prototype.symbols`. The callback is then\n         * used by its method name, as shown in the demo.\n         *\n         * @sample {highstock} stock/navigator/styled-handles/\n         *         Styled handles\n         *\n         * @type    {Array<string>}\n         * @default [\"navigator-handle\", \"navigator-handle\"]\n         * @since   6.0.0\n         */\n        symbols: ['navigator-handle', 'navigator-handle'],\n        /**\n         * Allows to enable/disable handles.\n         *\n         * @since   6.0.0\n         */\n        enabled: true,\n        /**\n         * The width for the handle border and the stripes inside.\n         *\n         * @sample {highstock} stock/navigator/styled-handles/\n         *         Styled handles\n         *\n         * @since     6.0.0\n         * @apioption navigator.handles.lineWidth\n         */\n        lineWidth: 1,\n        /**\n         * The fill for the handle.\n         *\n         * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         */\n        backgroundColor: \"#f2f2f2\" /* Palette.neutralColor5 */,\n        /**\n         * The stroke for the handle border and the stripes inside.\n         *\n         * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         */\n        borderColor: \"#999999\" /* Palette.neutralColor40 */\n    },\n    /**\n     * The color of the mask covering the areas of the navigator series\n     * that are currently not visible in the main series. The default\n     * color is bluish with an opacity of 0.3 to see the series below.\n     *\n     * @see In styled mode, the mask is styled with the\n     *      `.highcharts-navigator-mask` and\n     *      `.highcharts-navigator-mask-inside` classes.\n     *\n     * @sample {highstock} stock/navigator/maskfill/\n     *         Blue, semi transparent mask\n     *\n     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @default rgba(102,133,194,0.3)\n     */\n    maskFill: NavigatorDefaults_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 NavigatorDefaults_seriesTypes.areaspline === 'undefined' ?\n            'line' :\n            'areaspline'),\n        /**\n         * The fill opacity of the navigator series.\n         */\n        fillOpacity: 0.05,\n        /**\n         * The pixel line width of the navigator series.\n         */\n        lineWidth: 1,\n        /**\n         * @ignore-option\n         */\n        compare: null,\n        /**\n         * @ignore-option\n         */\n        sonification: {\n            enabled: false\n        },\n        /**\n         * Unless data is explicitly defined, the data is borrowed from the\n         * first series in the chart.\n         *\n         * @type      {Array<number|Array<number|string|null>|object|null>}\n         * @product   highstock\n         * @apioption navigator.series.data\n         */\n        /**\n         * Data grouping options for the navigator series.\n         *\n         * @extends plotOptions.series.dataGrouping\n         */\n        dataGrouping: {\n            approximation: 'average',\n            enabled: true,\n            groupPixelWidth: 2,\n            // Replace smoothed property by anchors, #12455.\n            firstAnchor: 'firstPoint',\n            anchor: 'middle',\n            lastAnchor: 'lastPoint',\n            // Day and week differs from plotOptions.series.dataGrouping\n            units: [\n                ['millisecond', [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]],\n                ['second', [1, 2, 5, 10, 15, 30]],\n                ['minute', [1, 2, 5, 10, 15, 30]],\n                ['hour', [1, 2, 3, 4, 6, 8, 12]],\n                ['day', [1, 2, 3, 4]],\n                ['week', [1, 2, 3]],\n                ['month', [1, 3, 6]],\n                ['year', null]\n            ]\n        },\n        /**\n         * Data label options for the navigator series. Data labels are\n         * disabled by default on the navigator series.\n         *\n         * @extends plotOptions.series.dataLabels\n         */\n        dataLabels: {\n            enabled: false,\n            zIndex: 2 // #1839\n        },\n        id: 'highcharts-navigator-series',\n        className: 'highcharts-navigator-series',\n        /**\n         * Sets the fill color of the navigator series.\n         *\n         * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         * @apioption navigator.series.color\n         */\n        /**\n         * Line color for the navigator series. Allows setting the color\n         * while disallowing the default candlestick setting.\n         *\n         * @type {Highcharts.ColorString|null}\n         */\n        lineColor: null, // #4602\n        marker: {\n            enabled: false\n        },\n        /**\n         * Since Highcharts Stock v8, default value is the same as default\n         * `pointRange` defined for a specific type (e.g. `null` for\n         * column type).\n         *\n         * In Highcharts Stock version < 8, defaults to 0.\n         *\n         * @extends plotOptions.series.pointRange\n         * @type {number|null}\n         * @apioption navigator.series.pointRange\n         */\n        /**\n         * The threshold option. Setting it to 0 will make the default\n         * navigator area series draw its area from the 0 value and up.\n         *\n         * @type {number|null}\n         */\n        threshold: null\n    },\n    /**\n     * Enable or disable navigator sticking to right, while adding new\n     * points. If `undefined`, the navigator sticks to the axis maximum only\n     * if it was already at the maximum prior to adding points.\n     *\n     * @type      {boolean}\n     * @default   undefined\n     * @since 10.2.1\n     * @sample {highstock} stock/navigator/sticktomax-false/\n     * stickToMax set to false\n     * @apioption navigator.stickToMax\n     */\n    /**\n     * Options for the navigator X axis. Default series options for the\n     * navigator xAxis are:\n     * ```js\n     * xAxis: {\n     *     tickWidth: 0,\n     *     lineWidth: 0,\n     *     gridLineWidth: 1,\n     *     tickPixelInterval: 200,\n     *     labels: {\n     *            align: 'left',\n     *         style: {\n     *             color: '#888'\n     *         },\n     *         x: 3,\n     *         y: -4\n     *     }\n     * }\n     * ```\n     *\n     * @extends   xAxis\n     * @excluding linkedTo, maxZoom, minRange, opposite, range, scrollbar,\n     *            showEmpty, maxRange\n     */\n    xAxis: {\n        /**\n         * Additional range on the right side of the xAxis. Works similar to\n         * `xAxis.maxPadding`, but the value is set in terms of axis values,\n         * percentage or pixels.\n         *\n         * If it's a number, it is interpreted as axis values, which in a\n         * datetime axis equals milliseconds.\n         *\n         * If it's a percentage string, is interpreted as percentages of the\n         * axis length. An overscroll of 50% will make a 100px axis 50px longer.\n         *\n         * If it's a pixel string, it is interpreted as a fixed pixel value, but\n         * limited to 90% of the axis length.\n         *\n         * If it's undefined, the value is inherited from `xAxis.overscroll`.\n         *\n         * Can be set for both, main xAxis and navigator's xAxis.\n         *\n         * @type    {number | string | undefined}\n         * @since   6.0.0\n         * @apioption navigator.xAxis.overscroll\n         */\n        className: 'highcharts-navigator-xaxis',\n        tickLength: 0,\n        lineWidth: 0,\n        gridLineColor: \"#e6e6e6\" /* Palette.neutralColor10 */,\n        id: 'navigator-x-axis',\n        gridLineWidth: 1,\n        tickPixelInterval: 200,\n        labels: {\n            align: 'left',\n            /**\n             * @type {Highcharts.CSSObject}\n             */\n            style: {\n                /** @ignore */\n                color: \"#000000\" /* Palette.neutralColor100 */,\n                /** @ignore */\n                fontSize: '0.7em',\n                /** @ignore */\n                opacity: 0.6,\n                /** @ignore */\n                textOutline: '2px contrast'\n            },\n            x: 3,\n            y: -4\n        },\n        crosshair: false\n    },\n    /**\n     * Options for the navigator Y axis. Default series options for the\n     * navigator yAxis are:\n     * ```js\n     * yAxis: {\n     *     gridLineWidth: 0,\n     *     startOnTick: false,\n     *     endOnTick: false,\n     *     minPadding: 0.1,\n     *     maxPadding: 0.1,\n     *     labels: {\n     *         enabled: false\n     *     },\n     *     title: {\n     *         text: null\n     *     },\n     *     tickWidth: 0\n     * }\n     * ```\n     *\n     * @extends   yAxis\n     * @excluding height, linkedTo, maxZoom, minRange, ordinal, range,\n     *            showEmpty, scrollbar, top, units, maxRange, minLength,\n     *            maxLength, resize\n     */\n    yAxis: {\n        className: 'highcharts-navigator-yaxis',\n        gridLineWidth: 0,\n        startOnTick: false,\n        endOnTick: false,\n        minPadding: 0.1,\n        id: 'navigator-y-axis',\n        maxPadding: 0.1,\n        labels: {\n            enabled: false\n        },\n        crosshair: false,\n        title: {\n            text: null\n        },\n        tickLength: 0,\n        tickWidth: 0\n    }\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Navigator_NavigatorDefaults = (NavigatorDefaults);\n/* *\n *\n *  API Options\n *\n * */\n/**\n * Maximum range which can be set using the navigator's handles.\n * Opposite of [xAxis.minRange](#xAxis.minRange).\n *\n * @sample {highstock} stock/navigator/maxrange/\n *         Defined max and min range\n *\n * @type      {number}\n * @since     6.0.0\n * @product   highstock gantt\n * @apioption xAxis.maxRange\n */\n(''); // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Stock/Navigator/NavigatorSymbols.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar NavigatorSymbols_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n            if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n            ar[i] = from[i];\n        }\n    }\n    return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\nvar NavigatorSymbols_relativeLength = Core_Utilities.relativeLength;\n/* *\n *\n *  Constants\n *\n * */\n/**\n * Draw one of the handles on the side of the zoomed range in the navigator.\n * @private\n */\nfunction navigatorHandle(_x, _y, width, height, options) {\n    if (options === void 0) { options = {}; }\n    var halfWidth = options.width ? options.width / 2 : width,\n        markerPosition = 1.5,\n        r = NavigatorSymbols_relativeLength(options.borderRadius || 0,\n        Math.min(halfWidth * 2,\n        height));\n    height = options.height || height;\n    return NavigatorSymbols_spreadArray([\n        ['M', -markerPosition, height / 2 - 3.5],\n        ['L', -markerPosition, height / 2 + 4.5],\n        ['M', markerPosition - 1, height / 2 - 3.5],\n        ['L', markerPosition - 1, height / 2 + 4.5]\n    ], SVG_Symbols.rect(-halfWidth - 1, 0.5, halfWidth * 2 + 1, height, { r: r }), true);\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar NavigatorSymbols = {\n    'navigator-handle': navigatorHandle\n};\n/* harmony default export */ var Navigator_NavigatorSymbols = (NavigatorSymbols);\n\n;// ./code/es5/es-modules/Stock/Utilities/StockUtilities.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar StockUtilities_defined = Core_Utilities.defined;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Sets the chart.fixedRange to the specified value. If the value is larger\n * than actual range, sets it to the maximum possible range. (#20327)\n *\n * @private\n * @function Highcharts.StockChart#setFixedRange\n * @param {number|undefined} range\n *        Range to set in axis units.\n */\nfunction setFixedRange(range) {\n    var xAxis = this.xAxis[0];\n    if (StockUtilities_defined(xAxis.dataMax) &&\n        StockUtilities_defined(xAxis.dataMin) &&\n        range) {\n        this.fixedRange = Math.min(range, xAxis.dataMax - xAxis.dataMin);\n    }\n    else {\n        this.fixedRange = range;\n    }\n}\nvar StockUtilities = {\n    setFixedRange: setFixedRange\n};\n/* harmony default export */ var Utilities_StockUtilities = (StockUtilities);\n\n;// ./code/es5/es-modules/Stock/Navigator/NavigatorComposition.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar NavigatorComposition_setOptions = Defaults.setOptions;\n\nvar NavigatorComposition_composed = Core_Globals.composed;\n\n\n\n\nvar getRendererType = Renderer_RendererRegistry.getRendererType;\n\nvar NavigatorComposition_setFixedRange = Utilities_StockUtilities.setFixedRange;\n\nvar NavigatorComposition_addEvent = Core_Utilities.addEvent, NavigatorComposition_extend = Core_Utilities.extend, NavigatorComposition_pushUnique = Core_Utilities.pushUnique;\n/* *\n *\n *  Variables\n *\n * */\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction NavigatorComposition_compose(ChartClass, AxisClass, SeriesClass) {\n    NavigatorAxisComposition.compose(AxisClass);\n    if (NavigatorComposition_pushUnique(NavigatorComposition_composed, 'Navigator')) {\n        ChartClass.prototype.setFixedRange = NavigatorComposition_setFixedRange;\n        NavigatorComposition_extend(getRendererType().prototype.symbols, Navigator_NavigatorSymbols);\n        NavigatorComposition_addEvent(SeriesClass, 'afterUpdate', onSeriesAfterUpdate);\n        NavigatorComposition_setOptions({ navigator: Navigator_NavigatorDefaults });\n    }\n}\n/**\n * Handle updating series\n * @private\n */\nfunction onSeriesAfterUpdate() {\n    if (this.chart.navigator && !this.options.isInternal) {\n        this.chart.navigator.setBaseSeries(null, false);\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar NavigatorComposition = {\n    compose: NavigatorComposition_compose\n};\n/* harmony default export */ var Navigator_NavigatorComposition = (NavigatorComposition);\n\n;// ./code/es5/es-modules/Core/Axis/ScrollbarAxis.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar ScrollbarAxis_composed = Core_Globals.composed;\n\nvar ScrollbarAxis_addEvent = Core_Utilities.addEvent, ScrollbarAxis_defined = Core_Utilities.defined, ScrollbarAxis_pick = Core_Utilities.pick, ScrollbarAxis_pushUnique = Core_Utilities.pushUnique;\n/* *\n *\n *  Composition\n *\n * */\nvar ScrollbarAxis;\n(function (ScrollbarAxis) {\n    /* *\n     *\n     *  Variables\n     *\n     * */\n    var Scrollbar;\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Attaches to axis events to create scrollbars if enabled.\n     *\n     * @private\n     *\n     * @param {Highcharts.Axis} AxisClass\n     * Axis class to extend.\n     *\n     * @param {Highcharts.Scrollbar} ScrollbarClass\n     * Scrollbar class to use.\n     */\n    function compose(AxisClass, ScrollbarClass) {\n        if (ScrollbarAxis_pushUnique(ScrollbarAxis_composed, 'Axis.Scrollbar')) {\n            Scrollbar = ScrollbarClass;\n            ScrollbarAxis_addEvent(AxisClass, 'afterGetOffset', onAxisAfterGetOffset);\n            ScrollbarAxis_addEvent(AxisClass, 'afterInit', onAxisAfterInit);\n            ScrollbarAxis_addEvent(AxisClass, 'afterRender', onAxisAfterRender);\n        }\n    }\n    ScrollbarAxis.compose = compose;\n    /** @private */\n    function getExtremes(axis) {\n        var axisMin = ScrollbarAxis_pick(axis.options && axis.options.min,\n            axis.min);\n        var axisMax = ScrollbarAxis_pick(axis.options && axis.options.max,\n            axis.max);\n        return {\n            axisMin: axisMin,\n            axisMax: axisMax,\n            scrollMin: ScrollbarAxis_defined(axis.dataMin) ?\n                Math.min(axisMin, axis.min, axis.dataMin, ScrollbarAxis_pick(axis.threshold, Infinity)) : axisMin,\n            scrollMax: ScrollbarAxis_defined(axis.dataMax) ?\n                Math.max(axisMax, axis.max, axis.dataMax, ScrollbarAxis_pick(axis.threshold, -Infinity)) : axisMax\n        };\n    }\n    /**\n     * Make space for a scrollbar.\n     * @private\n     */\n    function onAxisAfterGetOffset() {\n        var axis = this,\n            scrollbar = axis.scrollbar,\n            opposite = scrollbar && !scrollbar.options.opposite,\n            index = axis.horiz ? 2 : opposite ? 3 : 1;\n        if (scrollbar) {\n            // Reset scrollbars offsets\n            axis.chart.scrollbarsOffsets = [0, 0];\n            axis.chart.axisOffset[index] +=\n                scrollbar.size + (scrollbar.options.margin || 0);\n        }\n    }\n    /**\n     * Wrap axis initialization and create scrollbar if enabled.\n     * @private\n     */\n    function onAxisAfterInit() {\n        var axis = this;\n        if (axis.options &&\n            axis.options.scrollbar &&\n            axis.options.scrollbar.enabled) {\n            // Predefined options:\n            axis.options.scrollbar.vertical = !axis.horiz;\n            axis.options.startOnTick = axis.options.endOnTick = false;\n            axis.scrollbar = new Scrollbar(axis.chart.renderer, axis.options.scrollbar, axis.chart);\n            ScrollbarAxis_addEvent(axis.scrollbar, 'changed', function (e) {\n                var _a = getExtremes(axis),\n                    axisMin = _a.axisMin,\n                    axisMax = _a.axisMax,\n                    unitedMin = _a.scrollMin,\n                    unitedMax = _a.scrollMax,\n                    range = unitedMax - unitedMin;\n                var to,\n                    from;\n                // #12834, scroll when show/hide series, wrong extremes\n                if (!ScrollbarAxis_defined(axisMin) || !ScrollbarAxis_defined(axisMax)) {\n                    return;\n                }\n                if ((axis.horiz && !axis.reversed) ||\n                    (!axis.horiz && axis.reversed)) {\n                    to = unitedMin + range * this.to;\n                    from = unitedMin + range * this.from;\n                }\n                else {\n                    // Y-values in browser are reversed, but this also\n                    // applies for reversed horizontal axis:\n                    to = unitedMin + range * (1 - this.from);\n                    from = unitedMin + range * (1 - this.to);\n                }\n                if (this.shouldUpdateExtremes(e.DOMType)) {\n                    // #17977, set animation to undefined instead of true\n                    var animate = e.DOMType === 'mousemove' ||\n                            e.DOMType === 'touchmove' ? false : void 0;\n                    axis.setExtremes(from, to, true, animate, e);\n                }\n                else {\n                    // When live redraw is disabled, don't change extremes\n                    // Only change the position of the scrollbar thumb\n                    this.setRange(this.from, this.to);\n                }\n            });\n        }\n    }\n    /**\n     * Wrap rendering axis, and update scrollbar if one is created.\n     * @private\n     */\n    function onAxisAfterRender() {\n        var axis = this,\n            _a = getExtremes(axis),\n            scrollMin = _a.scrollMin,\n            scrollMax = _a.scrollMax,\n            scrollbar = axis.scrollbar,\n            offset = (axis.axisTitleMargin + (axis.titleOffset || 0)),\n            scrollbarsOffsets = axis.chart.scrollbarsOffsets,\n            axisMargin = axis.options.margin || 0;\n        var offsetsIndex,\n            from,\n            to;\n        if (scrollbar && scrollbarsOffsets) {\n            if (axis.horiz) {\n                // Reserve space for labels/title\n                if (!axis.opposite) {\n                    scrollbarsOffsets[1] += offset;\n                }\n                scrollbar.position(axis.left, (axis.top +\n                    axis.height +\n                    2 +\n                    scrollbarsOffsets[1] -\n                    (axis.opposite ? axisMargin : 0)), axis.width, axis.height);\n                // Next scrollbar should reserve space for margin (if set)\n                if (!axis.opposite) {\n                    scrollbarsOffsets[1] += axisMargin;\n                }\n                offsetsIndex = 1;\n            }\n            else {\n                // Reserve space for labels/title\n                if (axis.opposite) {\n                    scrollbarsOffsets[0] += offset;\n                }\n                var xPosition = void 0;\n                if (!scrollbar.options.opposite) {\n                    xPosition = axis.opposite ? 0 : axisMargin;\n                }\n                else {\n                    xPosition = axis.left +\n                        axis.width +\n                        2 +\n                        scrollbarsOffsets[0] -\n                        (axis.opposite ? 0 : axisMargin);\n                }\n                scrollbar.position(xPosition, axis.top, axis.width, axis.height);\n                // Next scrollbar should reserve space for margin (if set)\n                if (axis.opposite) {\n                    scrollbarsOffsets[0] += axisMargin;\n                }\n                offsetsIndex = 0;\n            }\n            scrollbarsOffsets[offsetsIndex] += scrollbar.size +\n                (scrollbar.options.margin || 0);\n            if (isNaN(scrollMin) ||\n                isNaN(scrollMax) ||\n                !ScrollbarAxis_defined(axis.min) ||\n                !ScrollbarAxis_defined(axis.max) ||\n                axis.dataMin === axis.dataMax // #10733\n            ) {\n                // Default action: when data extremes are the same or there is\n                // not extremes on the axis, but scrollbar exists, make it\n                // full size\n                scrollbar.setRange(0, 1);\n            }\n            else if (axis.min === axis.max) { // #20359\n                // When the extremes are the same, set the scrollbar to a point\n                // within the extremes range. Utilize pointRange to perform the\n                // calculations. (#20359)\n                var interval = axis.pointRange / (axis.dataMax +\n                        1);\n                from = interval * axis.min;\n                to = interval * (axis.max + 1);\n                scrollbar.setRange(from, to);\n            }\n            else {\n                from = ((axis.min - scrollMin) /\n                    (scrollMax - scrollMin));\n                to = ((axis.max - scrollMin) /\n                    (scrollMax - scrollMin));\n                if ((axis.horiz && !axis.reversed) ||\n                    (!axis.horiz && axis.reversed)) {\n                    scrollbar.setRange(from, to);\n                }\n                else {\n                    // Inverse vertical axis\n                    scrollbar.setRange(1 - to, 1 - from);\n                }\n            }\n        }\n    }\n})(ScrollbarAxis || (ScrollbarAxis = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Axis_ScrollbarAxis = (ScrollbarAxis);\n\n;// ./code/es5/es-modules/Stock/Scrollbar/ScrollbarDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Constant\n *\n * */\n/**\n *\n * The scrollbar is a means of panning over the X axis of a stock chart.\n * Scrollbars can also be applied to other types of axes.\n *\n * Another approach to scrollable charts is the [chart.scrollablePlotArea](\n * https://api.highcharts.com/highcharts/chart.scrollablePlotArea) option that\n * is especially suitable for simpler cartesian charts on mobile.\n *\n * In styled mode, all the presentational options for the\n * scrollbar are replaced by the classes `.highcharts-scrollbar-thumb`,\n * `.highcharts-scrollbar-arrow`, `.highcharts-scrollbar-button`,\n * `.highcharts-scrollbar-rifles` and `.highcharts-scrollbar-track`.\n *\n * @sample stock/yaxis/inverted-bar-scrollbar/\n *         A scrollbar on a simple bar chart\n *\n * @product highstock gantt\n * @optionparent scrollbar\n *\n * @private\n */\nvar ScrollbarDefaults = {\n    /**\n     * The height of the scrollbar. If `buttonsEnabled` is true , the height\n     * also applies to the width of the scroll arrows so that they are always\n     * squares.\n     *\n     * @sample stock/scrollbar/style/\n     *         Non-default height\n     *\n     * @type    {number}\n     */\n    height: 10,\n    /**\n     * The border rounding radius of the bar.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    barBorderRadius: 5,\n    /**\n     * The corner radius of the scrollbar buttons.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    buttonBorderRadius: 0,\n    /**\n     * Enable or disable the buttons at the end of the scrollbar.\n     *\n     * @since 11.0.0\n     */\n    buttonsEnabled: false,\n    /**\n     * Enable or disable the scrollbar.\n     *\n     * @sample stock/scrollbar/enabled/\n     *         Disable the scrollbar, only use navigator\n     *\n     * @type      {boolean}\n     * @default   true\n     * @apioption scrollbar.enabled\n     */\n    /**\n     * Whether to redraw the main chart as the scrollbar or the navigator\n     * zoomed window is moved. Defaults to `true` for modern browsers and\n     * `false` for legacy IE browsers as well as mobile devices.\n     *\n     * @sample stock/scrollbar/liveredraw\n     *         Setting live redraw to false\n     *\n     * @type  {boolean}\n     * @since 1.3\n     */\n    liveRedraw: void 0,\n    /**\n     * The margin between the scrollbar and its axis when the scrollbar is\n     * applied directly to an axis, or the navigator in case that is enabled.\n     * Defaults to 10 for axis, 0 for navigator.\n     *\n     * @type {number|undefined}\n     */\n    margin: void 0,\n    /**\n     * The minimum width of the scrollbar.\n     *\n     * @since 1.2.5\n     */\n    minWidth: 6,\n    /** @ignore-option */\n    opposite: true,\n    /**\n     * Whether to show or hide the scrollbar when the scrolled content is\n     * zoomed out to it full extent.\n     *\n     * @type      {boolean}\n     * @default   true\n     * @apioption scrollbar.showFull\n     */\n    step: 0.2,\n    /**\n     * The z index of the scrollbar group.\n     */\n    zIndex: 3,\n    /**\n     * The background color of the scrollbar itself.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    barBackgroundColor: \"#cccccc\" /* Palette.neutralColor20 */,\n    /**\n     * The width of the bar's border.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    barBorderWidth: 0,\n    /**\n     * The color of the scrollbar's border.\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    barBorderColor: \"#cccccc\" /* Palette.neutralColor20 */,\n    /**\n     * The color of the small arrow inside the scrollbar buttons.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    buttonArrowColor: \"#333333\" /* Palette.neutralColor80 */,\n    /**\n     * The color of scrollbar buttons.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    buttonBackgroundColor: \"#e6e6e6\" /* Palette.neutralColor10 */,\n    /**\n     * The color of the border of the scrollbar buttons.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    buttonBorderColor: \"#cccccc\" /* Palette.neutralColor20 */,\n    /**\n     * The border width of the scrollbar buttons.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    buttonBorderWidth: 1,\n    /**\n     * The color of the small rifles in the middle of the scrollbar.\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    rifleColor: 'none',\n    /**\n     * The color of the track background.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    trackBackgroundColor: 'rgba(255, 255, 255, 0.001)', // #18922\n    /**\n     * The color of the border of the scrollbar track.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    trackBorderColor: \"#cccccc\" /* Palette.neutralColor20 */,\n    /**\n     * The corner radius of the border of the scrollbar track.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    trackBorderRadius: 5,\n    /**\n     * The width of the border of the scrollbar track.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    trackBorderWidth: 1\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Scrollbar_ScrollbarDefaults = (ScrollbarDefaults);\n\n;// ./code/es5/es-modules/Stock/Scrollbar/Scrollbar.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar Scrollbar_defaultOptions = Defaults.defaultOptions;\n\n\n\n\nvar Scrollbar_addEvent = Core_Utilities.addEvent, Scrollbar_correctFloat = Core_Utilities.correctFloat, Scrollbar_crisp = Core_Utilities.crisp, Scrollbar_defined = Core_Utilities.defined, Scrollbar_destroyObjectProperties = Core_Utilities.destroyObjectProperties, Scrollbar_fireEvent = Core_Utilities.fireEvent, Scrollbar_merge = Core_Utilities.merge, Scrollbar_pick = Core_Utilities.pick, Scrollbar_removeEvent = Core_Utilities.removeEvent;\n/* *\n *\n *  Constants\n *\n * */\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/**\n * A reusable scrollbar, internally used in Highcharts Stock's\n * navigator and optionally on individual axes.\n *\n * @private\n * @class\n * @name Highcharts.Scrollbar\n * @param {Highcharts.SVGRenderer} renderer\n * @param {Highcharts.ScrollbarOptions} options\n * @param {Highcharts.Chart} chart\n */\nvar Scrollbar = /** @class */ (function () {\n    /* *\n     *\n     *  Constructors\n     *\n     * */\n    function Scrollbar(renderer, options, chart) {\n        /* *\n         *\n         *  Properties\n         *\n         * */\n        this._events = [];\n        this.chartX = 0;\n        this.chartY = 0;\n        this.from = 0;\n        this.scrollbarButtons = [];\n        this.scrollbarLeft = 0;\n        this.scrollbarStrokeWidth = 1;\n        this.scrollbarTop = 0;\n        this.size = 0;\n        this.to = 0;\n        this.trackBorderWidth = 1;\n        this.x = 0;\n        this.y = 0;\n        this.init(renderer, options, chart);\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    Scrollbar.compose = function (AxisClass) {\n        Axis_ScrollbarAxis.compose(AxisClass, Scrollbar);\n    };\n    /**\n     * When we have vertical scrollbar, rifles and arrow in buttons should be\n     * rotated. The same method is used in Navigator's handles, to rotate them.\n     *\n     * @function Highcharts.swapXY\n     *\n     * @param {Highcharts.SVGPathArray} path\n     * Path to be rotated.\n     *\n     * @param {boolean} [vertical]\n     * If vertical scrollbar, swap x-y values.\n     *\n     * @return {Highcharts.SVGPathArray}\n     * Rotated path.\n     *\n     * @requires modules/stock\n     */\n    Scrollbar.swapXY = function (path, vertical) {\n        if (vertical) {\n            path.forEach(function (seg) {\n                var len = seg.length;\n                var temp;\n                for (var i = 0; i < len; i += 2) {\n                    temp = seg[i + 1];\n                    if (typeof temp === 'number') {\n                        seg[i + 1] = seg[i + 2];\n                        seg[i + 2] = temp;\n                    }\n                }\n            });\n        }\n        return path;\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Set up the mouse and touch events for the Scrollbar\n     *\n     * @private\n     * @function Highcharts.Scrollbar#addEvents\n     */\n    Scrollbar.prototype.addEvents = function () {\n        var buttonsOrder = this.options.inverted ? [1, 0] : [0, 1],\n            buttons = this.scrollbarButtons,\n            bar = this.scrollbarGroup.element,\n            track = this.track.element,\n            mouseDownHandler = this.mouseDownHandler.bind(this),\n            mouseMoveHandler = this.mouseMoveHandler.bind(this),\n            mouseUpHandler = this.mouseUpHandler.bind(this);\n        var _events = [\n                // Mouse events\n                [\n                    buttons[buttonsOrder[0]].element,\n                    'click',\n                    this.buttonToMinClick.bind(this)\n                ],\n                [\n                    buttons[buttonsOrder[1]].element,\n                    'click',\n                    this.buttonToMaxClick.bind(this)\n                ],\n                [track, 'click',\n            this.trackClick.bind(this)],\n                [bar, 'mousedown',\n            mouseDownHandler],\n                [bar.ownerDocument, 'mousemove',\n            mouseMoveHandler],\n                [bar.ownerDocument, 'mouseup',\n            mouseUpHandler],\n                // Touch events\n                [bar, 'touchstart',\n            mouseDownHandler],\n                [bar.ownerDocument, 'touchmove',\n            mouseMoveHandler],\n                [bar.ownerDocument, 'touchend',\n            mouseUpHandler]\n            ];\n        // Add them all\n        _events.forEach(function (args) {\n            Scrollbar_addEvent.apply(null, args);\n        });\n        this._events = _events;\n    };\n    Scrollbar.prototype.buttonToMaxClick = function (e) {\n        var scroller = this;\n        var range = ((scroller.to - scroller.from) *\n                Scrollbar_pick(scroller.options.step, 0.2));\n        scroller.updatePosition(scroller.from + range, scroller.to + range);\n        Scrollbar_fireEvent(scroller, 'changed', {\n            from: scroller.from,\n            to: scroller.to,\n            trigger: 'scrollbar',\n            DOMEvent: e\n        });\n    };\n    Scrollbar.prototype.buttonToMinClick = function (e) {\n        var scroller = this;\n        var range = Scrollbar_correctFloat(scroller.to - scroller.from) *\n                Scrollbar_pick(scroller.options.step, 0.2);\n        scroller.updatePosition(Scrollbar_correctFloat(scroller.from - range), Scrollbar_correctFloat(scroller.to - range));\n        Scrollbar_fireEvent(scroller, 'changed', {\n            from: scroller.from,\n            to: scroller.to,\n            trigger: 'scrollbar',\n            DOMEvent: e\n        });\n    };\n    /**\n     * Get normalized (0-1) cursor position over the scrollbar\n     *\n     * @private\n     * @function Highcharts.Scrollbar#cursorToScrollbarPosition\n     *\n     * @param  {*} normalizedEvent\n     *         normalized event, with chartX and chartY values\n     *\n     * @return {Highcharts.Dictionary<number>}\n     *         Local position {chartX, chartY}\n     */\n    Scrollbar.prototype.cursorToScrollbarPosition = function (normalizedEvent) {\n        var scroller = this,\n            options = scroller.options,\n            minWidthDifference = options.minWidth > scroller.calculatedWidth ?\n                options.minWidth :\n                0; // `minWidth` distorts translation\n            return {\n                chartX: (normalizedEvent.chartX - scroller.x -\n                    scroller.xOffset) /\n                    (scroller.barWidth - minWidthDifference),\n                chartY: (normalizedEvent.chartY - scroller.y -\n                    scroller.yOffset) /\n                    (scroller.barWidth - minWidthDifference)\n            };\n    };\n    /**\n     * Destroys allocated elements.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#destroy\n     */\n    Scrollbar.prototype.destroy = function () {\n        var scroller = this,\n            navigator = scroller.chart.scroller;\n        // Disconnect events added in addEvents\n        scroller.removeEvents();\n        // Destroy properties\n        [\n            'track',\n            'scrollbarRifles',\n            'scrollbar',\n            'scrollbarGroup',\n            'group'\n        ].forEach(function (prop) {\n            if (scroller[prop] && scroller[prop].destroy) {\n                scroller[prop] = scroller[prop].destroy();\n            }\n        });\n        // #6421, chart may have more scrollbars\n        if (navigator && scroller === navigator.scrollbar) {\n            navigator.scrollbar = null;\n            // Destroy elements in collection\n            Scrollbar_destroyObjectProperties(navigator.scrollbarButtons);\n        }\n    };\n    /**\n     * Draw the scrollbar buttons with arrows\n     *\n     * @private\n     * @function Highcharts.Scrollbar#drawScrollbarButton\n     * @param {number} index\n     *        0 is left, 1 is right\n     */\n    Scrollbar.prototype.drawScrollbarButton = function (index) {\n        var scroller = this,\n            renderer = scroller.renderer,\n            scrollbarButtons = scroller.scrollbarButtons,\n            options = scroller.options,\n            size = scroller.size,\n            group = renderer.g().add(scroller.group);\n        scrollbarButtons.push(group);\n        if (options.buttonsEnabled) {\n            // Create a rectangle for the scrollbar button\n            var rect = renderer.rect()\n                    .addClass('highcharts-scrollbar-button')\n                    .add(group);\n            // Presentational attributes\n            if (!scroller.chart.styledMode) {\n                rect.attr({\n                    stroke: options.buttonBorderColor,\n                    'stroke-width': options.buttonBorderWidth,\n                    fill: options.buttonBackgroundColor\n                });\n            }\n            // Place the rectangle based on the rendered stroke width\n            rect.attr(rect.crisp({\n                x: -0.5,\n                y: -0.5,\n                width: size,\n                height: size,\n                r: options.buttonBorderRadius\n            }, rect.strokeWidth()));\n            // Button arrow\n            var arrow = renderer\n                    .path(Scrollbar.swapXY([[\n                        'M',\n                        size / 2 + (index ? -1 : 1),\n                        size / 2 - 3\n                    ],\n                [\n                        'L',\n                        size / 2 + (index ? -1 : 1),\n                        size / 2 + 3\n                    ],\n                [\n                        'L',\n                        size / 2 + (index ? 2 : -2),\n                        size / 2\n                    ]],\n                options.vertical))\n                    .addClass('highcharts-scrollbar-arrow')\n                    .add(scrollbarButtons[index]);\n            if (!scroller.chart.styledMode) {\n                arrow.attr({\n                    fill: options.buttonArrowColor\n                });\n            }\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.Scrollbar#init\n     * @param {Highcharts.SVGRenderer} renderer\n     * @param {Highcharts.ScrollbarOptions} options\n     * @param {Highcharts.Chart} chart\n     */\n    Scrollbar.prototype.init = function (renderer, options, chart) {\n        var scroller = this;\n        scroller.scrollbarButtons = [];\n        scroller.renderer = renderer;\n        scroller.userOptions = options;\n        scroller.options = Scrollbar_merge(Scrollbar_ScrollbarDefaults, Scrollbar_defaultOptions.scrollbar, options);\n        scroller.options.margin = Scrollbar_pick(scroller.options.margin, 10);\n        scroller.chart = chart;\n        // Backward compatibility\n        scroller.size = Scrollbar_pick(scroller.options.size, scroller.options.height);\n        // Init\n        if (options.enabled) {\n            scroller.render();\n            scroller.addEvents();\n        }\n    };\n    Scrollbar.prototype.mouseDownHandler = function (e) {\n        var _a;\n        var scroller = this,\n            normalizedEvent = ((_a = scroller.chart.pointer) === null || _a === void 0 ? void 0 : _a.normalize(e)) || e,\n            mousePosition = scroller.cursorToScrollbarPosition(normalizedEvent);\n        scroller.chartX = mousePosition.chartX;\n        scroller.chartY = mousePosition.chartY;\n        scroller.initPositions = [scroller.from, scroller.to];\n        scroller.grabbedCenter = true;\n    };\n    /**\n     * Event handler for the mouse move event.\n     * @private\n     */\n    Scrollbar.prototype.mouseMoveHandler = function (e) {\n        var _a;\n        var scroller = this,\n            normalizedEvent = ((_a = scroller.chart.pointer) === null || _a === void 0 ? void 0 : _a.normalize(e)) || e,\n            options = scroller.options,\n            direction = options.vertical ?\n                'chartY' : 'chartX',\n            initPositions = scroller.initPositions || [];\n        var scrollPosition,\n            chartPosition,\n            change;\n        // In iOS, a mousemove event with e.pageX === 0 is fired when\n        // holding the finger down in the center of the scrollbar. This\n        // should be ignored.\n        if (scroller.grabbedCenter &&\n            // #4696, scrollbar failed on Android\n            (!e.touches || e.touches[0][direction] !== 0)) {\n            chartPosition = scroller.cursorToScrollbarPosition(normalizedEvent)[direction];\n            scrollPosition = scroller[direction];\n            change = chartPosition - scrollPosition;\n            scroller.hasDragged = true;\n            scroller.updatePosition(initPositions[0] + change, initPositions[1] + change);\n            if (scroller.hasDragged) {\n                Scrollbar_fireEvent(scroller, 'changed', {\n                    from: scroller.from,\n                    to: scroller.to,\n                    trigger: 'scrollbar',\n                    DOMType: e.type,\n                    DOMEvent: e\n                });\n            }\n        }\n    };\n    /**\n     * Event handler for the mouse up event.\n     * @private\n     */\n    Scrollbar.prototype.mouseUpHandler = function (e) {\n        var scroller = this;\n        if (scroller.hasDragged) {\n            Scrollbar_fireEvent(scroller, 'changed', {\n                from: scroller.from,\n                to: scroller.to,\n                trigger: 'scrollbar',\n                DOMType: e.type,\n                DOMEvent: e\n            });\n        }\n        scroller.grabbedCenter =\n            scroller.hasDragged =\n                scroller.chartX =\n                    scroller.chartY = null;\n    };\n    /**\n     * Position the scrollbar, method called from a parent with defined\n     * dimensions.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#position\n     * @param {number} x\n     *        x-position on the chart\n     * @param {number} y\n     *        y-position on the chart\n     * @param {number} width\n     *        width of the scrollbar\n     * @param {number} height\n     *        height of the scrollbar\n     */\n    Scrollbar.prototype.position = function (x, y, width, height) {\n        var scroller = this,\n            options = scroller.options,\n            buttonsEnabled = options.buttonsEnabled,\n            _a = options.margin,\n            margin = _a === void 0 ? 0 : _a,\n            vertical = options.vertical,\n            method = scroller.rendered ? 'animate' : 'attr';\n        var xOffset = height,\n            yOffset = 0;\n        // Make the scrollbar visible when it is repositioned, #15763.\n        scroller.group.show();\n        scroller.x = x;\n        scroller.y = y + this.trackBorderWidth;\n        scroller.width = width; // Width with buttons\n        scroller.height = height;\n        scroller.xOffset = xOffset;\n        scroller.yOffset = yOffset;\n        // If Scrollbar is a vertical type, swap options:\n        if (vertical) {\n            scroller.width = scroller.yOffset = width = yOffset = scroller.size;\n            scroller.xOffset = xOffset = 0;\n            scroller.yOffset = yOffset = buttonsEnabled ? scroller.size : 0;\n            // Width without buttons\n            scroller.barWidth = height - (buttonsEnabled ? width * 2 : 0);\n            scroller.x = x = x + margin;\n        }\n        else {\n            scroller.height = height = scroller.size;\n            scroller.xOffset = xOffset = buttonsEnabled ? scroller.size : 0;\n            // Width without buttons\n            scroller.barWidth = width - (buttonsEnabled ? height * 2 : 0);\n            scroller.y = scroller.y + margin;\n        }\n        // Set general position for a group:\n        scroller.group[method]({\n            translateX: x,\n            translateY: scroller.y\n        });\n        // Resize background/track:\n        scroller.track[method]({\n            width: width,\n            height: height\n        });\n        // Move right/bottom button to its place:\n        scroller.scrollbarButtons[1][method]({\n            translateX: vertical ? 0 : width - xOffset,\n            translateY: vertical ? height - yOffset : 0\n        });\n    };\n    /**\n     * Removes the event handlers attached previously with addEvents.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#removeEvents\n     */\n    Scrollbar.prototype.removeEvents = function () {\n        this._events.forEach(function (args) {\n            Scrollbar_removeEvent.apply(null, args);\n        });\n        this._events.length = 0;\n    };\n    /**\n     * Render scrollbar with all required items.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#render\n     */\n    Scrollbar.prototype.render = function () {\n        var scroller = this,\n            renderer = scroller.renderer,\n            options = scroller.options,\n            size = scroller.size,\n            styledMode = scroller.chart.styledMode,\n            group = renderer.g('scrollbar')\n                .attr({\n                zIndex: options.zIndex\n            })\n                .hide() // Initially hide the scrollbar #15863\n                .add();\n        // Draw the scrollbar group\n        scroller.group = group;\n        // Draw the scrollbar track:\n        scroller.track = renderer.rect()\n            .addClass('highcharts-scrollbar-track')\n            .attr({\n            r: options.trackBorderRadius || 0,\n            height: size,\n            width: size\n        }).add(group);\n        if (!styledMode) {\n            scroller.track.attr({\n                fill: options.trackBackgroundColor,\n                stroke: options.trackBorderColor,\n                'stroke-width': options.trackBorderWidth\n            });\n        }\n        var trackBorderWidth = scroller.trackBorderWidth =\n                scroller.track.strokeWidth();\n        scroller.track.attr({\n            x: -Scrollbar_crisp(0, trackBorderWidth),\n            y: -Scrollbar_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(-Scrollbar_crisp(0, scroller.scrollbarStrokeWidth), -Scrollbar_crisp(0, scroller.scrollbarStrokeWidth));\n        // Draw the buttons:\n        scroller.drawScrollbarButton(0);\n        scroller.drawScrollbarButton(1);\n    };\n    /**\n     * Set scrollbar size, with a given scale.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#setRange\n     * @param {number} from\n     *        scale (0-1) where bar should start\n     * @param {number} to\n     *        scale (0-1) where bar should end\n     */\n    Scrollbar.prototype.setRange = function (from, to) {\n        var scroller = this,\n            options = scroller.options,\n            vertical = options.vertical,\n            minWidth = options.minWidth,\n            fullWidth = scroller.barWidth,\n            method = (this.rendered &&\n                !this.hasDragged &&\n                !(this.chart.navigator && this.chart.navigator.hasDragged)) ? 'animate' : 'attr';\n        if (!Scrollbar_defined(fullWidth)) {\n            return;\n        }\n        var toPX = fullWidth * Math.min(to, 1);\n        var fromPX,\n            newSize;\n        from = Math.max(from, 0);\n        fromPX = Math.ceil(fullWidth * from);\n        scroller.calculatedWidth = newSize = Scrollbar_correctFloat(toPX - fromPX);\n        // We need to recalculate position, if minWidth is used\n        if (newSize < minWidth) {\n            fromPX = (fullWidth - minWidth + newSize) * from;\n            newSize = minWidth;\n        }\n        var newPos = Math.floor(fromPX + scroller.xOffset + scroller.yOffset);\n        var newRiflesPos = newSize / 2 - 0.5; // -0.5 -> rifle line width / 2\n            // Store current position:\n            scroller.from = from;\n        scroller.to = to;\n        if (!vertical) {\n            scroller.scrollbarGroup[method]({\n                translateX: newPos\n            });\n            scroller.scrollbar[method]({\n                width: newSize\n            });\n            scroller.scrollbarRifles[method]({\n                translateX: newRiflesPos\n            });\n            scroller.scrollbarLeft = newPos;\n            scroller.scrollbarTop = 0;\n        }\n        else {\n            scroller.scrollbarGroup[method]({\n                translateY: newPos\n            });\n            scroller.scrollbar[method]({\n                height: newSize\n            });\n            scroller.scrollbarRifles[method]({\n                translateY: newRiflesPos\n            });\n            scroller.scrollbarTop = newPos;\n            scroller.scrollbarLeft = 0;\n        }\n        if (newSize <= 12) {\n            scroller.scrollbarRifles.hide();\n        }\n        else {\n            scroller.scrollbarRifles.show();\n        }\n        // Show or hide the scrollbar based on the showFull setting\n        if (options.showFull === false) {\n            if (from <= 0 && to >= 1) {\n                scroller.group.hide();\n            }\n            else {\n                scroller.group.show();\n            }\n        }\n        scroller.rendered = true;\n    };\n    /**\n     * Checks if the extremes should be updated in response to a scrollbar\n     * change event.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#shouldUpdateExtremes\n     */\n    Scrollbar.prototype.shouldUpdateExtremes = function (eventType) {\n        return (Scrollbar_pick(this.options.liveRedraw, Core_Globals.svg &&\n            !Core_Globals.isTouchDevice &&\n            !this.chart.boosted) ||\n            // Mouseup always should change extremes\n            eventType === 'mouseup' ||\n            eventType === 'touchend' ||\n            // Internal events\n            !Scrollbar_defined(eventType));\n    };\n    Scrollbar.prototype.trackClick = function (e) {\n        var _a;\n        var scroller = this;\n        var normalizedEvent = ((_a = scroller.chart.pointer) === null || _a === void 0 ? void 0 : _a.normalize(e)) || e,\n            range = scroller.to - scroller.from,\n            top = scroller.y + scroller.scrollbarTop,\n            left = scroller.x + scroller.scrollbarLeft;\n        if ((scroller.options.vertical && normalizedEvent.chartY > top) ||\n            (!scroller.options.vertical && normalizedEvent.chartX > left)) {\n            // On the top or on the left side of the track:\n            scroller.updatePosition(scroller.from + range, scroller.to + range);\n        }\n        else {\n            // On the bottom or the right side of the track:\n            scroller.updatePosition(scroller.from - range, scroller.to - range);\n        }\n        Scrollbar_fireEvent(scroller, 'changed', {\n            from: scroller.from,\n            to: scroller.to,\n            trigger: 'scrollbar',\n            DOMEvent: e\n        });\n    };\n    /**\n     * Update the scrollbar with new options\n     *\n     * @private\n     * @function Highcharts.Scrollbar#update\n     * @param  {Highcharts.ScrollbarOptions} options\n     */\n    Scrollbar.prototype.update = function (options) {\n        this.destroy();\n        this.init(this.chart.renderer, Scrollbar_merge(true, this.options, options), this.chart);\n    };\n    /**\n     * Update position option in the Scrollbar, with normalized 0-1 scale\n     *\n     * @private\n     * @function Highcharts.Scrollbar#updatePosition\n     * @param  {number} from\n     * @param  {number} to\n     */\n    Scrollbar.prototype.updatePosition = function (from, to) {\n        if (to > 1) {\n            from = Scrollbar_correctFloat(1 - Scrollbar_correctFloat(to - from));\n            to = 1;\n        }\n        if (from < 0) {\n            to = Scrollbar_correctFloat(to - from);\n            from = 0;\n        }\n        this.from = from;\n        this.to = to;\n    };\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    Scrollbar.defaultOptions = Scrollbar_ScrollbarDefaults;\n    return Scrollbar;\n}());\n/* *\n *\n *  Registry\n *\n * */\nScrollbar_defaultOptions.scrollbar = Scrollbar_merge(true, Scrollbar.defaultOptions, Scrollbar_defaultOptions.scrollbar);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Scrollbar_Scrollbar = (Scrollbar);\n\n;// ./code/es5/es-modules/Stock/Navigator/Navigator.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar Navigator_assign = (undefined && undefined.__assign) || function () {\n    Navigator_assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return Navigator_assign.apply(this, arguments);\n};\n\n\n\nvar Navigator_defaultOptions = Defaults.defaultOptions;\n\nvar Navigator_isTouchDevice = Core_Globals.isTouchDevice;\n\n\n\n\nvar symbols = SVG_SVGRenderer.prototype.symbols;\n\nvar Navigator_addEvent = Core_Utilities.addEvent, Navigator_clamp = Core_Utilities.clamp, Navigator_correctFloat = Core_Utilities.correctFloat, Navigator_defined = Core_Utilities.defined, Navigator_destroyObjectProperties = Core_Utilities.destroyObjectProperties, Navigator_erase = Core_Utilities.erase, Navigator_extend = Core_Utilities.extend, Navigator_find = Core_Utilities.find, Navigator_fireEvent = Core_Utilities.fireEvent, Navigator_isArray = Core_Utilities.isArray, Navigator_isNumber = Core_Utilities.isNumber, Navigator_merge = Core_Utilities.merge, Navigator_pick = Core_Utilities.pick, Navigator_removeEvent = Core_Utilities.removeEvent, Navigator_splat = Core_Utilities.splat;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Finding the min or max of a set of variables where we don't know if they are\n * defined, is a pattern that is repeated several places in Highcharts. Consider\n * making this a global utility method.\n * @private\n */\nfunction numExt(extreme) {\n    var args = [];\n    for (var _i = 1; _i < arguments.length; _i++) {\n        args[_i - 1] = arguments[_i];\n    }\n    var numbers = [].filter.call(args,\n        Navigator_isNumber);\n    if (numbers.length) {\n        return Math[extreme].apply(0, numbers);\n    }\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * The Navigator class\n *\n * @private\n * @class\n * @name Highcharts.Navigator\n *\n * @param {Highcharts.Chart} chart\n *        Chart object\n */\nvar Navigator = /** @class */ (function () {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    function Navigator(chart) {\n        this.isDirty = false;\n        this.scrollbarHeight = 0;\n        this.init(chart);\n    }\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    Navigator.compose = function (ChartClass, AxisClass, SeriesClass) {\n        Navigator_ChartNavigatorComposition.compose(ChartClass, Navigator);\n        Navigator_NavigatorComposition.compose(ChartClass, AxisClass, SeriesClass);\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Draw one of the handles on the side of the zoomed range in the navigator.\n     *\n     * @private\n     * @function Highcharts.Navigator#drawHandle\n     *\n     * @param {number} x\n     *        The x center for the handle\n     *\n     * @param {number} index\n     *        0 for left and 1 for right\n     *\n     * @param {boolean|undefined} inverted\n     *        Flag for chart.inverted\n     *\n     * @param {string} verb\n     *        Use 'animate' or 'attr'\n     */\n    Navigator.prototype.drawHandle = function (x, index, inverted, verb) {\n        var navigator = this,\n            height = navigator.navigatorOptions.handles.height;\n        // Place it\n        navigator.handles[index][verb](inverted ? {\n            translateX: Math.round(navigator.left + navigator.height / 2),\n            translateY: Math.round(navigator.top + parseInt(x, 10) + 0.5 - height)\n        } : {\n            translateX: Math.round(navigator.left + parseInt(x, 10)),\n            translateY: Math.round(navigator.top + navigator.height / 2 - height / 2 - 1)\n        });\n    };\n    /**\n     * Render outline around the zoomed range\n     *\n     * @private\n     * @function Highcharts.Navigator#drawOutline\n     *\n     * @param {number} zoomedMin\n     *        in pixels position where zoomed range starts\n     *\n     * @param {number} zoomedMax\n     *        in pixels position where zoomed range ends\n     *\n     * @param {boolean|undefined} inverted\n     *        flag if chart is inverted\n     *\n     * @param {string} verb\n     *        use 'animate' or 'attr'\n     */\n    Navigator.prototype.drawOutline = function (zoomedMin, zoomedMax, inverted, verb) {\n        var navigator = this, maskInside = navigator.navigatorOptions.maskInside, outlineWidth = navigator.outline.strokeWidth(), halfOutline = outlineWidth / 2, outlineCorrection = (outlineWidth % 2) / 2, // #5800\n            scrollButtonSize = navigator.scrollButtonSize, navigatorSize = navigator.size, navigatorTop = navigator.top, height = navigator.height, lineTop = navigatorTop - halfOutline, lineBtm = navigatorTop + height;\n        var left = navigator.left,\n            verticalMin,\n            path;\n        if (inverted) {\n            verticalMin = navigatorTop + zoomedMax + outlineCorrection;\n            zoomedMax = navigatorTop + zoomedMin + outlineCorrection;\n            path = [\n                [\n                    'M',\n                    left + height,\n                    navigatorTop - scrollButtonSize - outlineCorrection\n                ],\n                // Top right of zoomed range\n                ['L', left + height, verticalMin],\n                ['L', left, verticalMin], // Top left of z.r.\n                ['M', left, zoomedMax], // Bottom left of z.r.\n                ['L', left + height, zoomedMax], // Bottom right of z.r.\n                [\n                    'L',\n                    left + height,\n                    navigatorTop + navigatorSize + scrollButtonSize\n                ]\n            ];\n            if (maskInside) {\n                path.push(\n                // Upper left of zoomed range\n                ['M', left + height, verticalMin - halfOutline], \n                // Upper right of z.r.\n                [\n                    'L',\n                    left + height,\n                    zoomedMax + halfOutline\n                ]);\n            }\n        }\n        else {\n            left -= scrollButtonSize;\n            zoomedMin += left + scrollButtonSize - outlineCorrection;\n            zoomedMax += left + scrollButtonSize - outlineCorrection;\n            path = [\n                // Left\n                ['M', left, lineTop],\n                // Upper left of zoomed range\n                ['L', zoomedMin, lineTop],\n                // Lower left of z.r.\n                ['L', zoomedMin, lineBtm],\n                // Lower right of z.r.\n                ['M', zoomedMax, lineBtm],\n                // Upper right of z.r.\n                ['L', zoomedMax, lineTop],\n                // Right\n                [\n                    'L',\n                    left + navigatorSize + scrollButtonSize * 2,\n                    lineTop\n                ]\n            ];\n            if (maskInside) {\n                path.push(\n                // Upper left of zoomed range\n                ['M', zoomedMin - halfOutline, lineTop], \n                // Upper right of z.r.\n                ['L', zoomedMax + halfOutline, lineTop]);\n            }\n        }\n        navigator.outline[verb]({\n            d: path\n        });\n    };\n    /**\n     * Render outline around the zoomed range\n     *\n     * @private\n     * @function Highcharts.Navigator#drawMasks\n     *\n     * @param {number} zoomedMin\n     *        in pixels position where zoomed range starts\n     *\n     * @param {number} zoomedMax\n     *        in pixels position where zoomed range ends\n     *\n     * @param {boolean|undefined} inverted\n     *        flag if chart is inverted\n     *\n     * @param {string} verb\n     *        use 'animate' or 'attr'\n     */\n    Navigator.prototype.drawMasks = function (zoomedMin, zoomedMax, inverted, verb) {\n        var navigator = this,\n            left = navigator.left,\n            top = navigator.top,\n            navigatorHeight = navigator.height;\n        var height,\n            width,\n            x,\n            y;\n        // Determine rectangle position & size\n        // According to (non)inverted position:\n        if (inverted) {\n            x = [left, left, left];\n            y = [top, top + zoomedMin, top + zoomedMax];\n            width = [navigatorHeight, navigatorHeight, navigatorHeight];\n            height = [\n                zoomedMin,\n                zoomedMax - zoomedMin,\n                navigator.size - zoomedMax\n            ];\n        }\n        else {\n            x = [left, left + zoomedMin, left + zoomedMax];\n            y = [top, top, top];\n            width = [\n                zoomedMin,\n                zoomedMax - zoomedMin,\n                navigator.size - zoomedMax\n            ];\n            height = [navigatorHeight, navigatorHeight, navigatorHeight];\n        }\n        navigator.shades.forEach(function (shade, i) {\n            shade[verb]({\n                x: x[i],\n                y: y[i],\n                width: width[i],\n                height: height[i]\n            });\n        });\n    };\n    /**\n     * Generate and update DOM elements for a navigator:\n     *\n     * - main navigator group\n     *\n     * - all shades\n     *\n     * - outline\n     *\n     * - handles\n     *\n     * @private\n     * @function Highcharts.Navigator#renderElements\n     */\n    Navigator.prototype.renderElements = function () {\n        var _a,\n            _b;\n        var navigator = this,\n            navigatorOptions = navigator.navigatorOptions,\n            maskInside = navigatorOptions.maskInside,\n            chart = navigator.chart,\n            inverted = chart.inverted,\n            renderer = chart.renderer,\n            mouseCursor = {\n                cursor: inverted ? 'ns-resize' : 'ew-resize'\n            }, \n            // Create the main navigator group\n            navigatorGroup = (_a = navigator.navigatorGroup) !== null && _a !== void 0 ? _a : (navigator.navigatorGroup = renderer\n                .g('navigator')\n                .attr({\n                zIndex: 8,\n                visibility: 'hidden'\n            })\n                .add());\n        // Create masks, each mask will get events and fill:\n        [\n            !maskInside,\n            maskInside,\n            !maskInside\n        ].forEach(function (hasMask, index) {\n            var _a;\n            var shade = (_a = navigator.shades[index]) !== null && _a !== void 0 ? _a : (navigator.shades[index] = renderer.rect()\n                    .addClass('highcharts-navigator-mask' +\n                    (index === 1 ? '-inside' : '-outside'))\n                    .add(navigatorGroup));\n            if (!chart.styledMode) {\n                shade.attr({\n                    fill: hasMask ? navigatorOptions.maskFill : 'rgba(0,0,0,0)'\n                });\n                if (index === 1) {\n                    shade.css(mouseCursor);\n                }\n            }\n        });\n        // Create the outline:\n        if (!navigator.outline) {\n            navigator.outline = renderer.path()\n                .addClass('highcharts-navigator-outline')\n                .add(navigatorGroup);\n        }\n        if (!chart.styledMode) {\n            navigator.outline.attr({\n                'stroke-width': navigatorOptions.outlineWidth,\n                stroke: navigatorOptions.outlineColor\n            });\n        }\n        // Create the handlers:\n        if ((_b = navigatorOptions.handles) === null || _b === void 0 ? void 0 : _b.enabled) {\n            var handlesOptions_1 = navigatorOptions.handles,\n                height_1 = handlesOptions_1.height,\n                width_1 = handlesOptions_1.width;\n            [0, 1].forEach(function (index) {\n                var _a;\n                var symbolName = handlesOptions_1.symbols[index];\n                if (!navigator.handles[index] ||\n                    navigator.handles[index].symbolUrl !== symbolName) {\n                    // Generate symbol from scratch if we're dealing with an URL\n                    (_a = navigator.handles[index]) === null || _a === void 0 ? void 0 : _a.destroy();\n                    navigator.handles[index] = renderer.symbol(symbolName, -width_1 / 2 - 1, 0, width_1, height_1, handlesOptions_1);\n                    // Z index is 6 for right handle, 7 for left. Can't be 10,\n                    // because of the tooltip in inverted chart (#2908).\n                    navigator.handles[index].attr({ zIndex: 7 - index })\n                        .addClass('highcharts-navigator-handle ' +\n                        'highcharts-navigator-handle-' +\n                        ['left', 'right'][index]).add(navigatorGroup);\n                    navigator.addMouseEvents();\n                    // If the navigator symbol changed, update its path and name\n                }\n                else if (!navigator.handles[index].isImg &&\n                    navigator.handles[index].symbolName !== symbolName) {\n                    var symbolFn = symbols[symbolName],\n                        path = symbolFn.call(symbols, -width_1 / 2 - 1, 0,\n                        width_1,\n                        height_1);\n                    navigator.handles[index].attr({\n                        d: path\n                    });\n                    navigator.handles[index].symbolName = symbolName;\n                }\n                if (chart.inverted) {\n                    navigator.handles[index].attr({\n                        rotation: 90,\n                        rotationOriginX: Math.floor(-width_1 / 2),\n                        rotationOriginY: (height_1 + width_1) / 2\n                    });\n                }\n                if (!chart.styledMode) {\n                    navigator.handles[index]\n                        .attr({\n                        fill: handlesOptions_1.backgroundColor,\n                        stroke: handlesOptions_1.borderColor,\n                        'stroke-width': handlesOptions_1.lineWidth,\n                        width: handlesOptions_1.width,\n                        height: handlesOptions_1.height,\n                        x: -width_1 / 2 - 1,\n                        y: 0\n                    })\n                        .css(mouseCursor);\n                }\n            });\n        }\n    };\n    /**\n     * Update navigator\n     *\n     * @private\n     * @function Highcharts.Navigator#update\n     *\n     * @param {Highcharts.NavigatorOptions} options\n     *        Options to merge in when updating navigator\n     */\n    Navigator.prototype.update = function (options, redraw) {\n        var _a,\n            _b;\n        var _this = this;\n        var _c,\n            _d;\n        if (redraw === void 0) { redraw = false; }\n        var chart = this.chart,\n            invertedUpdate = chart.options.chart.inverted !==\n                ((_c = chart.scrollbar) === null || _c === void 0 ? void 0 : _c.options.vertical);\n        Navigator_merge(true, chart.options.navigator, options);\n        this.navigatorOptions = chart.options.navigator || {};\n        this.setOpposite();\n        // Revert to destroy/init for navigator/scrollbar enabled toggle\n        if (Navigator_defined(options.enabled) || invertedUpdate) {\n            this.destroy();\n            this.navigatorEnabled = options.enabled || this.navigatorEnabled;\n            return this.init(chart);\n        }\n        if (this.navigatorEnabled) {\n            this.isDirty = true;\n            if (options.adaptToUpdatedData === false) {\n                this.baseSeries.forEach(function (series) {\n                    Navigator_removeEvent(series, 'updatedData', _this.updatedDataHandler);\n                }, this);\n            }\n            if (options.adaptToUpdatedData) {\n                this.baseSeries.forEach(function (series) {\n                    series.eventsToUnbind.push(Navigator_addEvent(series, 'updatedData', _this.updatedDataHandler));\n                }, this);\n            }\n            // Update navigator series\n            if (options.series || options.baseSeries) {\n                this.setBaseSeries(void 0, false);\n            }\n            // Update navigator axis\n            if (options.height || options.xAxis || options.yAxis) {\n                this.height = (_d = options.height) !== null && _d !== void 0 ? _d : this.height;\n                var offsets = this.getXAxisOffsets();\n                this.xAxis.update(Navigator_assign(Navigator_assign({}, options.xAxis), (_a = { offsets: offsets }, _a[chart.inverted ? 'width' : 'height'] = this.height, _a[chart.inverted ? 'height' : 'width'] = void 0, _a)), false);\n                this.yAxis.update(Navigator_assign(Navigator_assign({}, options.yAxis), (_b = {}, _b[chart.inverted ? 'width' : 'height'] = this.height, _b)), false);\n            }\n        }\n        if (redraw) {\n            chart.redraw();\n        }\n    };\n    /**\n     * Render the navigator\n     *\n     * @private\n     * @function Highcharts.Navigator#render\n     * @param {number} min\n     *        X axis value minimum\n     * @param {number} max\n     *        X axis value maximum\n     * @param {number} [pxMin]\n     *        Pixel value minimum\n     * @param {number} [pxMax]\n     *        Pixel value maximum\n     */\n    Navigator.prototype.render = function (min, max, pxMin, pxMax) {\n        var navigator = this,\n            chart = navigator.chart,\n            xAxis = navigator.xAxis,\n            pointRange = xAxis.pointRange || 0,\n            scrollbarXAxis = xAxis.navigatorAxis.fake ? chart.xAxis[0] : xAxis,\n            navigatorEnabled = navigator.navigatorEnabled,\n            rendered = navigator.rendered,\n            inverted = chart.inverted,\n            minRange = chart.xAxis[0].minRange,\n            maxRange = chart.xAxis[0].options.maxRange,\n            scrollButtonSize = navigator.scrollButtonSize;\n        var navigatorWidth,\n            scrollbarLeft,\n            scrollbarTop,\n            scrollbarHeight = navigator.scrollbarHeight,\n            navigatorSize,\n            verb;\n        // Don't redraw while moving the handles (#4703).\n        if (this.hasDragged && !Navigator_defined(pxMin)) {\n            return;\n        }\n        if (this.isDirty) {\n            // Update DOM navigator elements\n            this.renderElements();\n        }\n        min = Navigator_correctFloat(min - pointRange / 2);\n        max = Navigator_correctFloat(max + pointRange / 2);\n        // Don't render the navigator until we have data (#486, #4202, #5172).\n        if (!Navigator_isNumber(min) || !Navigator_isNumber(max)) {\n            // However, if navigator was already rendered, we may need to resize\n            // it. For example hidden series, but visible navigator (#6022).\n            if (rendered) {\n                pxMin = 0;\n                pxMax = Navigator_pick(xAxis.width, scrollbarXAxis.width);\n            }\n            else {\n                return;\n            }\n        }\n        navigator.left = Navigator_pick(xAxis.left, \n        // In case of scrollbar only, without navigator\n        chart.plotLeft + scrollButtonSize +\n            (inverted ? chart.plotWidth : 0));\n        var zoomedMax = navigator.size = navigatorSize = Navigator_pick(xAxis.len, (inverted ? chart.plotHeight : chart.plotWidth) -\n                2 * scrollButtonSize);\n        if (inverted) {\n            navigatorWidth = scrollbarHeight;\n        }\n        else {\n            navigatorWidth = navigatorSize + 2 * scrollButtonSize;\n        }\n        // Get the pixel position of the handles\n        pxMin = Navigator_pick(pxMin, xAxis.toPixels(min, true));\n        pxMax = Navigator_pick(pxMax, xAxis.toPixels(max, true));\n        // Verify (#1851, #2238)\n        if (!Navigator_isNumber(pxMin) || Math.abs(pxMin) === Infinity) {\n            pxMin = 0;\n            pxMax = navigatorWidth;\n        }\n        // Are we below the minRange? (#2618, #6191)\n        var newMin = xAxis.toValue(pxMin,\n            true),\n            newMax = xAxis.toValue(pxMax,\n            true),\n            currentRange = Math.abs(Navigator_correctFloat(newMax - newMin));\n        if (currentRange < minRange) {\n            if (this.grabbedLeft) {\n                pxMin = xAxis.toPixels(newMax - minRange - pointRange, true);\n            }\n            else if (this.grabbedRight) {\n                pxMax = xAxis.toPixels(newMin + minRange + pointRange, true);\n            }\n        }\n        else if (Navigator_defined(maxRange) &&\n            Navigator_correctFloat(currentRange - pointRange) > maxRange) {\n            if (this.grabbedLeft) {\n                pxMin = xAxis.toPixels(newMax - maxRange - pointRange, true);\n            }\n            else if (this.grabbedRight) {\n                pxMax = xAxis.toPixels(newMin + maxRange + pointRange, true);\n            }\n        }\n        // Handles are allowed to cross, but never exceed the plot area\n        navigator.zoomedMax = Navigator_clamp(Math.max(pxMin, pxMax), 0, zoomedMax);\n        navigator.zoomedMin = Navigator_clamp(navigator.fixedWidth ?\n            navigator.zoomedMax - navigator.fixedWidth :\n            Math.min(pxMin, pxMax), 0, zoomedMax);\n        navigator.range = navigator.zoomedMax - navigator.zoomedMin;\n        zoomedMax = Math.round(navigator.zoomedMax);\n        var zoomedMin = Math.round(navigator.zoomedMin);\n        if (navigatorEnabled) {\n            navigator.navigatorGroup.attr({\n                visibility: 'inherit'\n            });\n            // Place elements\n            verb = rendered && !navigator.hasDragged ? 'animate' : 'attr';\n            navigator.drawMasks(zoomedMin, zoomedMax, inverted, verb);\n            navigator.drawOutline(zoomedMin, zoomedMax, inverted, verb);\n            if (navigator.navigatorOptions.handles.enabled) {\n                navigator.drawHandle(zoomedMin, 0, inverted, verb);\n                navigator.drawHandle(zoomedMax, 1, inverted, verb);\n            }\n        }\n        if (navigator.scrollbar) {\n            if (inverted) {\n                scrollbarTop = navigator.top - scrollButtonSize;\n                scrollbarLeft = navigator.left - scrollbarHeight +\n                    (navigatorEnabled || !scrollbarXAxis.opposite ? 0 :\n                        // Multiple axes has offsets:\n                        (scrollbarXAxis.titleOffset || 0) +\n                            // Self margin from the axis.title\n                            scrollbarXAxis.axisTitleMargin);\n                scrollbarHeight = navigatorSize + 2 * scrollButtonSize;\n            }\n            else {\n                scrollbarTop = navigator.top + (navigatorEnabled ?\n                    navigator.height :\n                    -scrollbarHeight);\n                scrollbarLeft = navigator.left - scrollButtonSize;\n            }\n            // Reposition scrollbar\n            navigator.scrollbar.position(scrollbarLeft, scrollbarTop, navigatorWidth, scrollbarHeight);\n            // Keep scale 0-1\n            navigator.scrollbar.setRange(\n            // Use real value, not rounded because range can be very small\n            // (#1716)\n            navigator.zoomedMin / (navigatorSize || 1), navigator.zoomedMax / (navigatorSize || 1));\n        }\n        navigator.rendered = true;\n        this.isDirty = false;\n        Navigator_fireEvent(this, 'afterRender');\n    };\n    /**\n     * Set up the mouse and touch events for the navigator\n     *\n     * @private\n     * @function Highcharts.Navigator#addMouseEvents\n     */\n    Navigator.prototype.addMouseEvents = function () {\n        var navigator = this,\n            chart = navigator.chart,\n            container = chart.container;\n        var eventsToUnbind = [],\n            mouseMoveHandler,\n            mouseUpHandler;\n        /**\n         * Create mouse events' handlers.\n         * Make them as separate functions to enable wrapping them:\n         */\n        navigator.mouseMoveHandler = mouseMoveHandler = function (e) {\n            navigator.onMouseMove(e);\n        };\n        navigator.mouseUpHandler = mouseUpHandler = function (e) {\n            navigator.onMouseUp(e);\n        };\n        // Add shades and handles mousedown events\n        eventsToUnbind = navigator.getPartsEvents('mousedown');\n        eventsToUnbind.push(\n        // Add mouse move and mouseup events. These are bind to doc/div,\n        // because Navigator.grabbedSomething flags are stored in mousedown\n        // events\n        Navigator_addEvent(chart.renderTo, 'mousemove', mouseMoveHandler), Navigator_addEvent(container.ownerDocument, 'mouseup', mouseUpHandler), \n        // Touch events\n        Navigator_addEvent(chart.renderTo, 'touchmove', mouseMoveHandler), Navigator_addEvent(container.ownerDocument, 'touchend', mouseUpHandler));\n        eventsToUnbind.concat(navigator.getPartsEvents('touchstart'));\n        navigator.eventsToUnbind = eventsToUnbind;\n        // Data events\n        if (navigator.series && navigator.series[0]) {\n            eventsToUnbind.push(Navigator_addEvent(navigator.series[0].xAxis, 'foundExtremes', function () {\n                chart.navigator.modifyNavigatorAxisExtremes();\n            }));\n        }\n    };\n    /**\n     * Generate events for handles and masks\n     *\n     * @private\n     * @function Highcharts.Navigator#getPartsEvents\n     *\n     * @param {string} eventName\n     *        Event name handler, 'mousedown' or 'touchstart'\n     *\n     * @return {Array<Function>}\n     *         An array of functions to remove navigator functions from the\n     *         events again.\n     */\n    Navigator.prototype.getPartsEvents = function (eventName) {\n        var navigator = this,\n            events = [];\n        ['shades', 'handles'].forEach(function (name) {\n            navigator[name].forEach(function (navigatorItem, index) {\n                events.push(Navigator_addEvent(navigatorItem.element, eventName, function (e) {\n                    navigator[name + 'Mousedown'](e, index);\n                }));\n            });\n        });\n        return events;\n    };\n    /**\n     * Mousedown on a shaded mask, either:\n     *\n     * - will be stored for future drag&drop\n     *\n     * - will directly shift to a new range\n     *\n     * @private\n     * @function Highcharts.Navigator#shadesMousedown\n     *\n     * @param {Highcharts.PointerEventObject} e\n     *        Mouse event\n     *\n     * @param {number} index\n     *        Index of a mask in Navigator.shades array\n     */\n    Navigator.prototype.shadesMousedown = function (e, index) {\n        var _a;\n        e = ((_a = this.chart.pointer) === null || _a === void 0 ? void 0 : _a.normalize(e)) || e;\n        var navigator = this,\n            chart = navigator.chart,\n            xAxis = navigator.xAxis,\n            zoomedMin = navigator.zoomedMin,\n            navigatorSize = navigator.size,\n            range = navigator.range;\n        var navigatorPosition = navigator.left,\n            chartX = e.chartX,\n            fixedMax,\n            fixedMin,\n            ext,\n            left;\n        // For inverted chart, swap some options:\n        if (chart.inverted) {\n            chartX = e.chartY;\n            navigatorPosition = navigator.top;\n        }\n        if (index === 1) {\n            // Store information for drag&drop\n            navigator.grabbedCenter = chartX;\n            navigator.fixedWidth = range;\n            navigator.dragOffset = chartX - zoomedMin;\n        }\n        else {\n            // Shift the range by clicking on shaded areas\n            left = chartX - navigatorPosition - range / 2;\n            if (index === 0) {\n                left = Math.max(0, left);\n            }\n            else if (index === 2 && left + range >= navigatorSize) {\n                left = navigatorSize - range;\n                if (navigator.reversedExtremes) {\n                    // #7713\n                    left -= range;\n                    fixedMin = navigator.getUnionExtremes().dataMin;\n                }\n                else {\n                    // #2293, #3543\n                    fixedMax = navigator.getUnionExtremes().dataMax;\n                }\n            }\n            if (left !== zoomedMin) { // It has actually moved\n                navigator.fixedWidth = range; // #1370\n                ext = xAxis.navigatorAxis.toFixedRange(left, left + range, fixedMin, fixedMax);\n                if (Navigator_defined(ext.min)) { // #7411\n                    Navigator_fireEvent(this, 'setRange', {\n                        min: Math.min(ext.min, ext.max),\n                        max: Math.max(ext.min, ext.max),\n                        redraw: true,\n                        eventArguments: {\n                            trigger: 'navigator'\n                        }\n                    });\n                }\n            }\n        }\n    };\n    /**\n     * Mousedown on a handle mask.\n     * Will store necessary information for drag&drop.\n     *\n     * @private\n     * @function Highcharts.Navigator#handlesMousedown\n     * @param {Highcharts.PointerEventObject} e\n     *        Mouse event\n     * @param {number} index\n     *        Index of a handle in Navigator.handles array\n     */\n    Navigator.prototype.handlesMousedown = function (e, index) {\n        var _a;\n        e = ((_a = this.chart.pointer) === null || _a === void 0 ? void 0 : _a.normalize(e)) || e;\n        var navigator = this,\n            chart = navigator.chart,\n            baseXAxis = chart.xAxis[0], \n            // For reversed axes, min and max are changed,\n            // so the other extreme should be stored\n            reverse = navigator.reversedExtremes;\n        if (index === 0) {\n            // Grab the left handle\n            navigator.grabbedLeft = true;\n            navigator.otherHandlePos = navigator.zoomedMax;\n            navigator.fixedExtreme = reverse ? baseXAxis.min : baseXAxis.max;\n        }\n        else {\n            // Grab the right handle\n            navigator.grabbedRight = true;\n            navigator.otherHandlePos = navigator.zoomedMin;\n            navigator.fixedExtreme = reverse ? baseXAxis.max : baseXAxis.min;\n        }\n        chart.setFixedRange(void 0);\n    };\n    /**\n     * Mouse move event based on x/y mouse position.\n     *\n     * @private\n     * @function Highcharts.Navigator#onMouseMove\n     *\n     * @param {Highcharts.PointerEventObject} e\n     *        Mouse event\n     */\n    Navigator.prototype.onMouseMove = function (e) {\n        var _a;\n        var navigator = this,\n            chart = navigator.chart,\n            navigatorSize = navigator.navigatorSize,\n            range = navigator.range,\n            dragOffset = navigator.dragOffset,\n            inverted = chart.inverted;\n        var left = navigator.left,\n            chartX;\n        // In iOS, a mousemove event with e.pageX === 0 is fired when holding\n        // the finger down in the center of the scrollbar. This should be\n        // ignored.\n        if (!e.touches || e.touches[0].pageX !== 0) { // #4696\n            e = ((_a = chart.pointer) === null || _a === void 0 ? void 0 : _a.normalize(e)) || e;\n            chartX = e.chartX;\n            // Swap some options for inverted chart\n            if (inverted) {\n                left = navigator.top;\n                chartX = e.chartY;\n            }\n            // Drag left handle or top handle\n            if (navigator.grabbedLeft) {\n                navigator.hasDragged = true;\n                navigator.render(0, 0, chartX - left, navigator.otherHandlePos);\n                // Drag right handle or bottom handle\n            }\n            else if (navigator.grabbedRight) {\n                navigator.hasDragged = true;\n                navigator.render(0, 0, navigator.otherHandlePos, chartX - left);\n                // Drag scrollbar or open area in navigator\n            }\n            else if (navigator.grabbedCenter) {\n                navigator.hasDragged = true;\n                if (chartX < dragOffset) { // Outside left\n                    chartX = dragOffset;\n                    // Outside right\n                }\n                else if (chartX >\n                    navigatorSize + dragOffset - range) {\n                    chartX = navigatorSize + dragOffset - range;\n                }\n                navigator.render(0, 0, chartX - dragOffset, chartX - dragOffset + range);\n            }\n            if (navigator.hasDragged &&\n                navigator.scrollbar &&\n                Navigator_pick(navigator.scrollbar.options.liveRedraw, \n                // By default, don't run live redraw on touch\n                // devices or if the chart is in boost.\n                !Navigator_isTouchDevice &&\n                    !this.chart.boosted)) {\n                e.DOMType = e.type;\n                setTimeout(function () {\n                    navigator.onMouseUp(e);\n                }, 0);\n            }\n        }\n    };\n    /**\n     * Mouse up event based on x/y mouse position.\n     *\n     * @private\n     * @function Highcharts.Navigator#onMouseUp\n     * @param {Highcharts.PointerEventObject} e\n     *        Mouse event\n     */\n    Navigator.prototype.onMouseUp = function (e) {\n        var navigator = this,\n            chart = navigator.chart,\n            xAxis = navigator.xAxis,\n            scrollbar = navigator.scrollbar,\n            DOMEvent = e.DOMEvent || e,\n            inverted = chart.inverted,\n            verb = navigator.rendered && !navigator.hasDragged ?\n                'animate' : 'attr';\n        var zoomedMax,\n            zoomedMin,\n            unionExtremes,\n            fixedMin,\n            fixedMax,\n            ext;\n        if (\n        // MouseUp is called for both, navigator and scrollbar (that order),\n        // which causes calling afterSetExtremes twice. Prevent first call\n        // by checking if scrollbar is going to set new extremes (#6334)\n        (navigator.hasDragged && (!scrollbar || !scrollbar.hasDragged)) ||\n            e.trigger === 'scrollbar') {\n            unionExtremes = navigator.getUnionExtremes();\n            // When dragging one handle, make sure the other one doesn't change\n            if (navigator.zoomedMin === navigator.otherHandlePos) {\n                fixedMin = navigator.fixedExtreme;\n            }\n            else if (navigator.zoomedMax === navigator.otherHandlePos) {\n                fixedMax = navigator.fixedExtreme;\n            }\n            // Snap to right edge (#4076)\n            if (navigator.zoomedMax === navigator.size) {\n                fixedMax = navigator.reversedExtremes ?\n                    unionExtremes.dataMin :\n                    unionExtremes.dataMax;\n            }\n            // Snap to left edge (#7576)\n            if (navigator.zoomedMin === 0) {\n                fixedMin = navigator.reversedExtremes ?\n                    unionExtremes.dataMax :\n                    unionExtremes.dataMin;\n            }\n            ext = xAxis.navigatorAxis.toFixedRange(navigator.zoomedMin, navigator.zoomedMax, fixedMin, fixedMax);\n            if (Navigator_defined(ext.min)) {\n                Navigator_fireEvent(this, 'setRange', {\n                    min: Math.min(ext.min, ext.max),\n                    max: Math.max(ext.min, ext.max),\n                    redraw: true,\n                    animation: navigator.hasDragged ? false : null,\n                    eventArguments: {\n                        trigger: 'navigator',\n                        triggerOp: 'navigator-drag',\n                        DOMEvent: DOMEvent // #1838\n                    }\n                });\n            }\n        }\n        if (e.DOMType !== 'mousemove' &&\n            e.DOMType !== 'touchmove') {\n            navigator.grabbedLeft = navigator.grabbedRight =\n                navigator.grabbedCenter = navigator.fixedWidth =\n                    navigator.fixedExtreme = navigator.otherHandlePos =\n                        navigator.hasDragged = navigator.dragOffset = null;\n        }\n        // Update position of navigator shades, outline and handles (#12573)\n        if (navigator.navigatorEnabled &&\n            Navigator_isNumber(navigator.zoomedMin) &&\n            Navigator_isNumber(navigator.zoomedMax)) {\n            zoomedMin = Math.round(navigator.zoomedMin);\n            zoomedMax = Math.round(navigator.zoomedMax);\n            if (navigator.shades) {\n                navigator.drawMasks(zoomedMin, zoomedMax, inverted, verb);\n            }\n            if (navigator.outline) {\n                navigator.drawOutline(zoomedMin, zoomedMax, inverted, verb);\n            }\n            if (navigator.navigatorOptions.handles.enabled &&\n                Object.keys(navigator.handles).length ===\n                    navigator.handles.length) {\n                navigator.drawHandle(zoomedMin, 0, inverted, verb);\n                navigator.drawHandle(zoomedMax, 1, inverted, verb);\n            }\n        }\n    };\n    /**\n     * Removes the event handlers attached previously with addEvents.\n     *\n     * @private\n     * @function Highcharts.Navigator#removeEvents\n     */\n    Navigator.prototype.removeEvents = function () {\n        if (this.eventsToUnbind) {\n            this.eventsToUnbind.forEach(function (unbind) {\n                unbind();\n            });\n            this.eventsToUnbind = void 0;\n        }\n        this.removeBaseSeriesEvents();\n    };\n    /**\n     * Remove data events.\n     *\n     * @private\n     * @function Highcharts.Navigator#removeBaseSeriesEvents\n     */\n    Navigator.prototype.removeBaseSeriesEvents = function () {\n        var baseSeries = this.baseSeries || [];\n        if (this.navigatorEnabled && baseSeries[0]) {\n            if (this.navigatorOptions.adaptToUpdatedData !== false) {\n                baseSeries.forEach(function (series) {\n                    Navigator_removeEvent(series, 'updatedData', this.updatedDataHandler);\n                }, this);\n            }\n            // We only listen for extremes-events on the first baseSeries\n            if (baseSeries[0].xAxis) {\n                Navigator_removeEvent(baseSeries[0].xAxis, 'foundExtremes', this.modifyBaseAxisExtremes);\n            }\n        }\n    };\n    /**\n     * Calculate the navigator xAxis offsets\n     *\n     * @private\n     */\n    Navigator.prototype.getXAxisOffsets = function () {\n        return (this.chart.inverted ?\n            [this.scrollButtonSize, 0, -this.scrollButtonSize, 0] :\n            [0, -this.scrollButtonSize, 0, this.scrollButtonSize]);\n    };\n    /**\n     * Initialize the Navigator object\n     *\n     * @private\n     * @function Highcharts.Navigator#init\n     */\n    Navigator.prototype.init = function (chart) {\n        var _a;\n        var chartOptions = chart.options,\n            navigatorOptions = chartOptions.navigator || {},\n            navigatorEnabled = navigatorOptions.enabled,\n            scrollbarOptions = chartOptions.scrollbar || {},\n            scrollbarEnabled = scrollbarOptions.enabled,\n            height = navigatorEnabled && navigatorOptions.height || 0,\n            scrollbarHeight = scrollbarEnabled && scrollbarOptions.height || 0,\n            scrollButtonSize = scrollbarOptions.buttonsEnabled && scrollbarHeight || 0;\n        this.handles = [];\n        this.shades = [];\n        this.chart = chart;\n        this.setBaseSeries();\n        this.height = height;\n        this.scrollbarHeight = scrollbarHeight;\n        this.scrollButtonSize = scrollButtonSize;\n        this.scrollbarEnabled = scrollbarEnabled;\n        this.navigatorEnabled = navigatorEnabled;\n        this.navigatorOptions = navigatorOptions;\n        this.scrollbarOptions = scrollbarOptions;\n        this.setOpposite();\n        var navigator = this,\n            baseSeries = navigator.baseSeries,\n            xAxisIndex = chart.xAxis.length,\n            yAxisIndex = chart.yAxis.length,\n            baseXaxis = baseSeries && baseSeries[0] && baseSeries[0].xAxis ||\n                chart.xAxis[0] || { options: {} };\n        chart.isDirtyBox = true;\n        if (navigator.navigatorEnabled) {\n            var offsets = this.getXAxisOffsets();\n            // An x axis is required for scrollbar also\n            navigator.xAxis = new Axis_Axis(chart, Navigator_merge({\n                // Inherit base xAxis' break, ordinal options and overscroll\n                breaks: baseXaxis.options.breaks,\n                ordinal: baseXaxis.options.ordinal,\n                overscroll: baseXaxis.options.overscroll\n            }, navigatorOptions.xAxis, {\n                type: 'datetime',\n                yAxis: (_a = navigatorOptions.yAxis) === null || _a === void 0 ? void 0 : _a.id,\n                index: xAxisIndex,\n                isInternal: true,\n                offset: 0,\n                keepOrdinalPadding: true, // #2436\n                startOnTick: false,\n                endOnTick: false,\n                // Inherit base xAxis' padding when ordinal is false (#16915).\n                minPadding: baseXaxis.options.ordinal ? 0 :\n                    baseXaxis.options.minPadding,\n                maxPadding: baseXaxis.options.ordinal ? 0 :\n                    baseXaxis.options.maxPadding,\n                zoomEnabled: false\n            }, chart.inverted ? {\n                offsets: offsets,\n                width: height\n            } : {\n                offsets: offsets,\n                height: height\n            }), 'xAxis');\n            navigator.yAxis = new Axis_Axis(chart, Navigator_merge(navigatorOptions.yAxis, {\n                alignTicks: false,\n                offset: 0,\n                index: yAxisIndex,\n                isInternal: true,\n                reversed: Navigator_pick((navigatorOptions.yAxis &&\n                    navigatorOptions.yAxis.reversed), (chart.yAxis[0] && chart.yAxis[0].reversed), false), // #14060\n                zoomEnabled: false\n            }, chart.inverted ? {\n                width: height\n            } : {\n                height: height\n            }), 'yAxis');\n            // If we have a base series, initialize the navigator series\n            if (baseSeries || navigatorOptions.series.data) {\n                navigator.updateNavigatorSeries(false);\n                // If not, set up an event to listen for added series\n            }\n            else if (chart.series.length === 0) {\n                navigator.unbindRedraw = Navigator_addEvent(chart, 'beforeRedraw', function () {\n                    // We've got one, now add it as base\n                    if (chart.series.length > 0 && !navigator.series) {\n                        navigator.setBaseSeries();\n                        navigator.unbindRedraw(); // Reset\n                    }\n                });\n            }\n            navigator.reversedExtremes = (chart.inverted && !navigator.xAxis.reversed) || (!chart.inverted && navigator.xAxis.reversed);\n            // Render items, so we can bind events to them:\n            navigator.renderElements();\n            // Add mouse events\n            navigator.addMouseEvents();\n            // In case of scrollbar only, fake an x axis to get translation\n        }\n        else {\n            navigator.xAxis = {\n                chart: chart,\n                navigatorAxis: {\n                    fake: true\n                },\n                translate: function (value, reverse) {\n                    var axis = chart.xAxis[0], ext = axis.getExtremes(), scrollTrackWidth = axis.len - 2 * scrollButtonSize, min = numExt('min', axis.options.min, ext.dataMin), valueRange = numExt('max', axis.options.max, ext.dataMax) - min;\n                    return reverse ?\n                        // From pixel to value\n                        (value * valueRange / scrollTrackWidth) + min :\n                        // From value to pixel\n                        scrollTrackWidth * (value - min) / valueRange;\n                },\n                toPixels: function (value) {\n                    return this.translate(value);\n                },\n                toValue: function (value) {\n                    return this.translate(value, true);\n                }\n            };\n            navigator.xAxis.navigatorAxis.axis = navigator.xAxis;\n            navigator.xAxis.navigatorAxis.toFixedRange = (NavigatorAxisComposition.prototype.toFixedRange.bind(navigator.xAxis.navigatorAxis));\n        }\n        // Initialize the scrollbar\n        if (chart.options.scrollbar.enabled) {\n            var options = Navigator_merge(chart.options.scrollbar, { vertical: chart.inverted });\n            if (!Navigator_isNumber(options.margin) && navigator.navigatorEnabled) {\n                options.margin = chart.inverted ? -3 : 3;\n            }\n            chart.scrollbar = navigator.scrollbar = new Scrollbar_Scrollbar(chart.renderer, options, chart);\n            Navigator_addEvent(navigator.scrollbar, 'changed', function (e) {\n                var range = navigator.size,\n                    to = range * this.to,\n                    from = range * this.from;\n                navigator.hasDragged = navigator.scrollbar.hasDragged;\n                navigator.render(0, 0, from, to);\n                if (this.shouldUpdateExtremes(e.DOMType)) {\n                    setTimeout(function () {\n                        navigator.onMouseUp(e);\n                    });\n                }\n            });\n        }\n        // Add data events\n        navigator.addBaseSeriesEvents();\n        // Add redraw events\n        navigator.addChartEvents();\n    };\n    /**\n     * Set the opposite property on navigator\n     *\n     * @private\n     */\n    Navigator.prototype.setOpposite = function () {\n        var navigatorOptions = this.navigatorOptions,\n            navigatorEnabled = this.navigatorEnabled,\n            chart = this.chart;\n        this.opposite = Navigator_pick(navigatorOptions.opposite, Boolean(!navigatorEnabled && chart.inverted)); // #6262\n    };\n    /**\n     * Get the union data extremes of the chart - the outer data extremes of the\n     * base X axis and the navigator axis.\n     *\n     * @private\n     * @function Highcharts.Navigator#getUnionExtremes\n     */\n    Navigator.prototype.getUnionExtremes = function (returnFalseOnNoBaseSeries) {\n        var baseAxis = this.chart.xAxis[0],\n            time = this.chart.time,\n            navAxis = this.xAxis,\n            navAxisOptions = navAxis.options,\n            baseAxisOptions = baseAxis.options;\n        var ret;\n        if (!returnFalseOnNoBaseSeries || baseAxis.dataMin !== null) {\n            ret = {\n                dataMin: Navigator_pick(// #4053\n                time.parse(navAxisOptions === null || navAxisOptions === void 0 ? void 0 : navAxisOptions.min), numExt('min', time.parse(baseAxisOptions.min), baseAxis.dataMin, navAxis.dataMin, navAxis.min)),\n                dataMax: Navigator_pick(time.parse(navAxisOptions === null || navAxisOptions === void 0 ? void 0 : navAxisOptions.max), numExt('max', time.parse(baseAxisOptions.max), baseAxis.dataMax, navAxis.dataMax, navAxis.max))\n            };\n        }\n        return ret;\n    };\n    /**\n     * Set the base series and update the navigator series from this. With a bit\n     * of modification we should be able to make this an API method to be called\n     * from the outside\n     *\n     * @private\n     * @function Highcharts.Navigator#setBaseSeries\n     * @param {Highcharts.SeriesOptionsType} [baseSeriesOptions]\n     *        Additional series options for a navigator\n     * @param {boolean} [redraw]\n     *        Whether to redraw after update.\n     */\n    Navigator.prototype.setBaseSeries = function (baseSeriesOptions, redraw) {\n        var chart = this.chart,\n            baseSeries = this.baseSeries = [];\n        baseSeriesOptions = (baseSeriesOptions ||\n            chart.options && chart.options.navigator.baseSeries ||\n            (chart.series.length ?\n                // Find the first non-navigator series (#8430)\n                Navigator_find(chart.series, function (s) { return (!s.options.isInternal); }).index :\n                0));\n        // Iterate through series and add the ones that should be shown in\n        // navigator.\n        (chart.series || []).forEach(function (series, i) {\n            if (\n            // Don't include existing nav series\n            !series.options.isInternal &&\n                (series.options.showInNavigator ||\n                    (i === baseSeriesOptions ||\n                        series.options.id === baseSeriesOptions) &&\n                        series.options.showInNavigator !== false)) {\n                baseSeries.push(series);\n            }\n        });\n        // When run after render, this.xAxis already exists\n        if (this.xAxis && !this.xAxis.navigatorAxis.fake) {\n            this.updateNavigatorSeries(true, redraw);\n        }\n    };\n    /**\n     * Update series in the navigator from baseSeries, adding new if does not\n     * exist.\n     *\n     * @private\n     * @function Highcharts.Navigator.updateNavigatorSeries\n     */\n    Navigator.prototype.updateNavigatorSeries = function (addEvents, redraw) {\n        var _a,\n            _b;\n        var navigator = this,\n            chart = navigator.chart,\n            baseSeries = navigator.baseSeries,\n            navSeriesMixin = {\n                enableMouseTracking: false,\n                index: null, // #6162\n                linkedTo: null, // #6734\n                group: 'nav', // For columns\n                padXAxis: false,\n                xAxis: (_a = this.navigatorOptions.xAxis) === null || _a === void 0 ? void 0 : _a.id,\n                yAxis: (_b = this.navigatorOptions.yAxis) === null || _b === void 0 ? void 0 : _b.id,\n                showInLegend: false,\n                stacking: void 0, // #4823\n                isInternal: true,\n                states: {\n                    inactive: {\n                        opacity: 1\n                    }\n                }\n            }, \n            // Remove navigator series that are no longer in the baseSeries\n            navigatorSeries = navigator.series =\n                (navigator.series || []).filter(function (navSeries) {\n                    var base = navSeries.baseSeries;\n                if (baseSeries.indexOf(base) < 0) { // Not in array\n                    // If there is still a base series connected to this\n                    // series, remove event handler and reference.\n                    if (base) {\n                        Navigator_removeEvent(base, 'updatedData', navigator.updatedDataHandler);\n                        delete base.navigatorSeries;\n                    }\n                    // Kill the nav series. It may already have been\n                    // destroyed (#8715).\n                    if (navSeries.chart) {\n                        navSeries.destroy();\n                    }\n                    return false;\n                }\n                return true;\n            });\n        var baseOptions,\n            mergedNavSeriesOptions,\n            chartNavigatorSeriesOptions = navigator.navigatorOptions.series,\n            baseNavigatorOptions;\n        // Go through each base series and merge the options to create new\n        // series\n        if (baseSeries && baseSeries.length) {\n            baseSeries.forEach(function (base) {\n                var _a;\n                var linkedNavSeries = base.navigatorSeries,\n                    userNavOptions = Navigator_extend(\n                    // Grab color and visibility from base as default\n                    {\n                        color: base.color,\n                        visible: base.visible\n                    }, !Navigator_isArray(chartNavigatorSeriesOptions) ?\n                        chartNavigatorSeriesOptions :\n                        Navigator_defaultOptions.navigator.series);\n                // Don't update if the series exists in nav and we have disabled\n                // adaptToUpdatedData.\n                if (linkedNavSeries &&\n                    navigator.navigatorOptions.adaptToUpdatedData === false) {\n                    return;\n                }\n                navSeriesMixin.name = 'Navigator ' + baseSeries.length;\n                baseOptions = base.options || {};\n                baseNavigatorOptions = baseOptions.navigatorOptions || {};\n                // The dataLabels options are not merged correctly\n                // if the settings are an array, #13847.\n                userNavOptions.dataLabels = Navigator_splat(userNavOptions.dataLabels);\n                mergedNavSeriesOptions = Navigator_merge(baseOptions, navSeriesMixin, userNavOptions, baseNavigatorOptions);\n                // Once nav series type is resolved, pick correct pointRange\n                mergedNavSeriesOptions.pointRange = Navigator_pick(\n                // Stricte set pointRange in options\n                userNavOptions.pointRange, baseNavigatorOptions.pointRange, \n                // Fallback to default values, e.g. `null` for column\n                Navigator_defaultOptions.plotOptions[mergedNavSeriesOptions.type || 'line'].pointRange);\n                // Merge data separately. Do a slice to avoid mutating the\n                // navigator options from base series (#4923).\n                var navigatorSeriesData = baseNavigatorOptions.data || userNavOptions.data;\n                navigator.hasNavigatorData =\n                    navigator.hasNavigatorData || !!navigatorSeriesData;\n                mergedNavSeriesOptions.data = (navigatorSeriesData ||\n                    ((_a = baseOptions.data) === null || _a === void 0 ? void 0 : _a.slice(0)));\n                // Update or add the series\n                if (linkedNavSeries && linkedNavSeries.options) {\n                    linkedNavSeries.update(mergedNavSeriesOptions, redraw);\n                }\n                else {\n                    base.navigatorSeries = chart.initSeries(mergedNavSeriesOptions);\n                    // Set data on initial run with dataSorting enabled (#20318)\n                    chart.setSortedData();\n                    base.navigatorSeries.baseSeries = base; // Store ref\n                    navigatorSeries.push(base.navigatorSeries);\n                }\n            });\n        }\n        // If user has defined data (and no base series) or explicitly defined\n        // navigator.series as an array, we create these series on top of any\n        // base series.\n        if (chartNavigatorSeriesOptions.data &&\n            !(baseSeries && baseSeries.length) ||\n            Navigator_isArray(chartNavigatorSeriesOptions)) {\n            navigator.hasNavigatorData = false;\n            // Allow navigator.series to be an array\n            chartNavigatorSeriesOptions =\n                Navigator_splat(chartNavigatorSeriesOptions);\n            chartNavigatorSeriesOptions.forEach(function (userSeriesOptions, i) {\n                navSeriesMixin.name =\n                    'Navigator ' + (navigatorSeries.length + 1);\n                mergedNavSeriesOptions = Navigator_merge(Navigator_defaultOptions.navigator.series, {\n                    // Since we don't have a base series to pull color from,\n                    // try to fake it by using color from series with same\n                    // index. Otherwise pull from the colors array. We need\n                    // an explicit color as otherwise updates will increment\n                    // color counter and we'll get a new color for each\n                    // update of the nav series.\n                    color: chart.series[i] &&\n                        !chart.series[i].options.isInternal &&\n                        chart.series[i].color ||\n                        chart.options.colors[i] ||\n                        chart.options.colors[0]\n                }, navSeriesMixin, userSeriesOptions);\n                mergedNavSeriesOptions.data = userSeriesOptions.data;\n                if (mergedNavSeriesOptions.data) {\n                    navigator.hasNavigatorData = true;\n                    navigatorSeries.push(chart.initSeries(mergedNavSeriesOptions));\n                }\n            });\n        }\n        if (addEvents) {\n            this.addBaseSeriesEvents();\n        }\n    };\n    /**\n     * Add data events.\n     * For example when main series is updated we need to recalculate extremes\n     *\n     * @private\n     * @function Highcharts.Navigator#addBaseSeriesEvent\n     */\n    Navigator.prototype.addBaseSeriesEvents = function () {\n        var _this = this;\n        var navigator = this,\n            baseSeries = navigator.baseSeries || [];\n        // Bind modified extremes event to first base's xAxis only.\n        // In event of > 1 base-xAxes, the navigator will ignore those.\n        // Adding this multiple times to the same axis is no problem, as\n        // duplicates should be discarded by the browser.\n        if (baseSeries[0] && baseSeries[0].xAxis) {\n            baseSeries[0].eventsToUnbind.push(Navigator_addEvent(baseSeries[0].xAxis, 'foundExtremes', this.modifyBaseAxisExtremes));\n        }\n        baseSeries.forEach(function (base) {\n            // Link base series show/hide to navigator series visibility\n            base.eventsToUnbind.push(Navigator_addEvent(base, 'show', function () {\n                if (this.navigatorSeries) {\n                    this.navigatorSeries.setVisible(true, false);\n                }\n            }));\n            base.eventsToUnbind.push(Navigator_addEvent(base, 'hide', function () {\n                if (this.navigatorSeries) {\n                    this.navigatorSeries.setVisible(false, false);\n                }\n            }));\n            // Respond to updated data in the base series, unless explicitly\n            // not adapting to data changes.\n            if (_this.navigatorOptions.adaptToUpdatedData !== false) {\n                if (base.xAxis) {\n                    base.eventsToUnbind.push(Navigator_addEvent(base, 'updatedData', _this.updatedDataHandler));\n                }\n            }\n            // Handle series removal\n            base.eventsToUnbind.push(Navigator_addEvent(base, 'remove', function () {\n                if (baseSeries) {\n                    Navigator_erase(baseSeries, base); // #21043\n                }\n                if (this.navigatorSeries && navigator.series) {\n                    Navigator_erase(navigator.series, this.navigatorSeries);\n                    if (Navigator_defined(this.navigatorSeries.options)) {\n                        this.navigatorSeries.remove(false);\n                    }\n                    delete this.navigatorSeries;\n                }\n            }));\n        });\n    };\n    /**\n     * Get minimum from all base series connected to the navigator\n     * @private\n     * @param {number} currentSeriesMin\n     *        Minium from the current series\n     * @return {number}\n     *         Minimum from all series\n     */\n    Navigator.prototype.getBaseSeriesMin = function (currentSeriesMin) {\n        return this.baseSeries.reduce(function (min, series) {\n            var _a;\n            // #10193\n            return Math.min(min, (_a = series.getColumn('x')[0]) !== null && _a !== void 0 ? _a : min);\n        }, currentSeriesMin);\n    };\n    /**\n     * Set the navigator x axis extremes to reflect the total. The navigator\n     * extremes should always be the extremes of the union of all series in the\n     * chart as well as the navigator series.\n     *\n     * @private\n     * @function Highcharts.Navigator#modifyNavigatorAxisExtremes\n     */\n    Navigator.prototype.modifyNavigatorAxisExtremes = function () {\n        var xAxis = this.xAxis;\n        if (typeof xAxis.getExtremes !== 'undefined') {\n            var unionExtremes = this.getUnionExtremes(true);\n            if (unionExtremes &&\n                (unionExtremes.dataMin !== xAxis.min ||\n                    unionExtremes.dataMax !== xAxis.max)) {\n                xAxis.min = unionExtremes.dataMin;\n                xAxis.max = unionExtremes.dataMax;\n            }\n        }\n    };\n    /**\n     * Hook to modify the base axis extremes with information from the Navigator\n     *\n     * @private\n     * @function Highcharts.Navigator#modifyBaseAxisExtremes\n     */\n    Navigator.prototype.modifyBaseAxisExtremes = function () {\n        var _a;\n        var baseXAxis = this,\n            navigator = baseXAxis.chart.navigator,\n            baseExtremes = baseXAxis.getExtremes(),\n            baseMin = baseExtremes.min,\n            baseMax = baseExtremes.max,\n            baseDataMin = baseExtremes.dataMin,\n            baseDataMax = baseExtremes.dataMax,\n            range = baseMax - baseMin,\n            stickToMin = navigator.stickToMin,\n            stickToMax = navigator.stickToMax,\n            overscroll = Navigator_pick((_a = baseXAxis.ordinal) === null || _a === void 0 ? void 0 : _a.convertOverscroll(baseXAxis.options.overscroll), 0),\n            navigatorSeries = navigator.series && navigator.series[0],\n            hasSetExtremes = !!baseXAxis.setExtremes, \n            // When the extremes have been set by range selector button, don't\n            // stick to min or max. The range selector buttons will handle the\n            // extremes. (#5489)\n            unmutable = baseXAxis.eventArgs &&\n                baseXAxis.eventArgs.trigger === 'rangeSelectorButton';\n        var newMax,\n            newMin;\n        if (!unmutable) {\n            // If the zoomed range is already at the min, move it to the right\n            // as new data comes in\n            if (stickToMin) {\n                newMin = baseDataMin;\n                newMax = newMin + range;\n            }\n            // If the zoomed range is already at the max, move it to the right\n            // as new data comes in\n            if (stickToMax) {\n                newMax = baseDataMax + overscroll;\n                // If stickToMin is true, the new min value is set above\n                if (!stickToMin) {\n                    newMin = Math.max(baseDataMin, // Don't go below data extremes (#13184)\n                    newMax - range, navigator.getBaseSeriesMin(navigatorSeries && navigatorSeries.xData ?\n                        navigatorSeries.xData[0] :\n                        -Number.MAX_VALUE));\n                }\n            }\n            // Update the extremes\n            if (hasSetExtremes && (stickToMin || stickToMax)) {\n                if (Navigator_isNumber(newMin)) {\n                    baseXAxis.min = baseXAxis.userMin = newMin;\n                    baseXAxis.max = baseXAxis.userMax = newMax;\n                }\n            }\n        }\n        // Reset\n        navigator.stickToMin =\n            navigator.stickToMax = null;\n    };\n    /**\n     * Handler for updated data on the base series. When data is modified, the\n     * navigator series must reflect it. This is called from the Chart.redraw\n     * function before axis and series extremes are computed.\n     *\n     * @private\n     * @function Highcharts.Navigator#updateDataHandler\n     */\n    Navigator.prototype.updatedDataHandler = function () {\n        var navigator = this.chart.navigator,\n            baseSeries = this,\n            navigatorSeries = this.navigatorSeries,\n            shouldStickToMax = navigator.reversedExtremes ?\n                Math.round(navigator.zoomedMin) === 0 :\n                Math.round(navigator.zoomedMax) >= Math.round(navigator.size);\n        // If the scrollbar is scrolled all the way to the right, keep right as\n        // new data comes in, unless user set navigator.stickToMax to false.\n        navigator.stickToMax = Navigator_pick(this.chart.options.navigator &&\n            this.chart.options.navigator.stickToMax, shouldStickToMax);\n        navigator.stickToMin = navigator.shouldStickToMin(baseSeries, navigator);\n        // Set the navigator series data to the new data of the base series\n        if (navigatorSeries && !navigator.hasNavigatorData) {\n            navigatorSeries.options.pointStart = baseSeries.getColumn('x')[0];\n            navigatorSeries.setData(baseSeries.options.data, false, null, false); // #5414\n        }\n    };\n    /**\n     * Detect if the zoomed area should stick to the minimum, #14742.\n     *\n     * @private\n     * @function Highcharts.Navigator#shouldStickToMin\n     */\n    Navigator.prototype.shouldStickToMin = function (baseSeries, navigator) {\n        var xDataMin = navigator.getBaseSeriesMin(baseSeries.getColumn('x')[0]),\n            xAxis = baseSeries.xAxis,\n            max = xAxis.max,\n            min = xAxis.min,\n            range = xAxis.options.range;\n        var stickToMin = true;\n        if (Navigator_isNumber(max) && Navigator_isNumber(min)) {\n            // If range declared, stick to the minimum only if the range\n            // is smaller than the data set range.\n            if (range && max - xDataMin > 0) {\n                stickToMin = max - xDataMin < range;\n            }\n            else {\n                // If the current axis minimum falls outside the new\n                // updated dataset, we must adjust.\n                stickToMin = min <= xDataMin;\n            }\n        }\n        else {\n            stickToMin = false; // #15864\n        }\n        return stickToMin;\n    };\n    /**\n     * Add chart events, like redrawing navigator, when chart requires that.\n     *\n     * @private\n     * @function Highcharts.Navigator#addChartEvents\n     */\n    Navigator.prototype.addChartEvents = function () {\n        if (!this.eventsToUnbind) {\n            this.eventsToUnbind = [];\n        }\n        this.eventsToUnbind.push(\n        // Move the scrollbar after redraw, like after data updata even if\n        // axes don't redraw\n        Navigator_addEvent(this.chart, 'redraw', function () {\n            var navigator = this.navigator,\n                xAxis = navigator && (navigator.baseSeries &&\n                    navigator.baseSeries[0] &&\n                    navigator.baseSeries[0].xAxis ||\n                    this.xAxis[0]); // #5709, #13114\n                if (xAxis) {\n                    navigator.render(xAxis.min,\n                xAxis.max);\n            }\n        }), \n        // Make room for the navigator, can be placed around the chart:\n        Navigator_addEvent(this.chart, 'getMargins', function () {\n            var chart = this,\n                navigator = chart.navigator;\n            var marginName = navigator.opposite ?\n                    'plotTop' : 'marginBottom';\n            if (chart.inverted) {\n                marginName = navigator.opposite ?\n                    'marginRight' : 'plotLeft';\n            }\n            chart[marginName] =\n                (chart[marginName] || 0) + (navigator.navigatorEnabled || !chart.inverted ?\n                    navigator.height + navigator.scrollbarHeight :\n                    0) + navigator.navigatorOptions.margin;\n        }), Navigator_addEvent(Navigator, 'setRange', function (e) {\n            this.chart.xAxis[0].setExtremes(e.min, e.max, e.redraw, e.animation, e.eventArguments);\n        }));\n    };\n    /**\n     * Destroys allocated elements.\n     *\n     * @private\n     * @function Highcharts.Navigator#destroy\n     */\n    Navigator.prototype.destroy = function () {\n        var _this = this;\n        // Disconnect events added in addEvents\n        this.removeEvents();\n        if (this.xAxis) {\n            Navigator_erase(this.chart.xAxis, this.xAxis);\n            Navigator_erase(this.chart.axes, this.xAxis);\n        }\n        if (this.yAxis) {\n            Navigator_erase(this.chart.yAxis, this.yAxis);\n            Navigator_erase(this.chart.axes, this.yAxis);\n        }\n        // Destroy series\n        (this.series || []).forEach(function (s) {\n            if (s.destroy) {\n                s.destroy();\n            }\n        });\n        // Destroy properties\n        [\n            'series', 'xAxis', 'yAxis', 'shades', 'outline', 'scrollbarTrack',\n            'scrollbarRifles', 'scrollbarGroup', 'scrollbar', 'navigatorGroup',\n            'rendered'\n        ].forEach(function (prop) {\n            if (_this[prop] && _this[prop].destroy) {\n                _this[prop].destroy();\n            }\n            _this[prop] = null;\n        });\n        // Destroy elements in collection\n        [this.handles].forEach(function (coll) {\n            Navigator_destroyObjectProperties(coll);\n        });\n        this.navigatorEnabled = false;\n    };\n    return Navigator;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Navigator_Navigator = (Navigator);\n\n;// ./code/es5/es-modules/Stock/RangeSelector/RangeSelectorDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Declarations\n *\n * */\n/**\n * An object containing language-related strings and settings. A typical setup\n * uses `Highcharts.setOptions` to make the options apply to all charts in the\n * same page.\n *\n * ```js\n * Highcharts.setOptions({\n *     lang: {\n *         locale: 'fr'\n *     }\n * });\n * ```\n *\n * @optionparent lang\n */\nvar lang = {\n    /**\n     * The text for the label for the range selector buttons.\n     *\n     * @product highstock gantt\n     */\n    rangeSelectorZoom: 'Zoom',\n    /**\n     * The text for the label for the \"from\" input box in the range\n     * selector. Since v9.0, this string is empty as the label is not\n     * rendered by default.\n     *\n     * @product highstock gantt\n     */\n    rangeSelectorFrom: '',\n    /**\n     * The text for the label for the \"to\" input box in the range selector.\n     *\n     * @product highstock gantt\n     */\n    rangeSelectorTo: '→'\n};\n/**\n * The range selector is a tool for selecting ranges to display within\n * the chart. It provides buttons to select preconfigured ranges in\n * the chart, like 1 day, 1 week, 1 month etc. It also provides input\n * boxes where min and max dates can be manually input.\n *\n * @product      highstock gantt\n * @optionparent rangeSelector\n */\nvar rangeSelector = {\n    /**\n     * Whether to enable all buttons from the start. By default buttons are\n     * only enabled if the corresponding time range exists on the X axis,\n     * but enabling all buttons allows for dynamically loading different\n     * time ranges.\n     *\n     * @sample {highstock} stock/rangeselector/allbuttonsenabled-true/\n     *         All buttons enabled\n     *\n     * @since     2.0.3\n     */\n    allButtonsEnabled: false,\n    /**\n     * An array of configuration objects for the buttons.\n     *\n     * Defaults to:\n     * ```js\n     * buttons: [{\n     *     type: 'month',\n     *     count: 1,\n     *     text: '1m',\n     *     title: 'View 1 month'\n     * }, {\n     *     type: 'month',\n     *     count: 3,\n     *     text: '3m',\n     *     title: 'View 3 months'\n     * }, {\n     *     type: 'month',\n     *     count: 6,\n     *     text: '6m',\n     *     title: 'View 6 months'\n     * }, {\n     *     type: 'ytd',\n     *     text: 'YTD',\n     *     title: 'View year to date'\n     * }, {\n     *     type: 'year',\n     *     count: 1,\n     *     text: '1y',\n     *     title: 'View 1 year'\n     * }, {\n     *     type: 'all',\n     *     text: 'All',\n     *     title: 'View all'\n     * }]\n     * ```\n     *\n     * @sample {highstock} stock/demo/rangeselector-datagrouping/\n     *         Data grouping by buttons\n     *\n     * @type      {Array<*>}\n     */\n    buttons: [{\n            type: 'month',\n            count: 1,\n            text: '1m',\n            title: 'View 1 month'\n        }, {\n            type: 'month',\n            count: 3,\n            text: '3m',\n            title: 'View 3 months'\n        }, {\n            type: 'month',\n            count: 6,\n            text: '6m',\n            title: 'View 6 months'\n        }, {\n            type: 'ytd',\n            text: 'YTD',\n            title: 'View year to date'\n        }, {\n            type: 'year',\n            count: 1,\n            text: '1y',\n            title: 'View 1 year'\n        }, {\n            type: 'all',\n            text: 'All',\n            title: 'View all'\n        }],\n    /**\n     * How many units of the defined type the button should span. If `type`\n     * is \"month\" and `count` is 3, the button spans three months.\n     *\n     * @type      {number}\n     * @default   1\n     * @apioption rangeSelector.buttons.count\n     */\n    /**\n     * Fires when clicking on the rangeSelector button. One parameter,\n     * event, is passed to the function, containing common event\n     * information.\n     *\n     * ```js\n     * click: function(e) {\n     *   console.log(this);\n     * }\n     * ```\n     *\n     * Return false to stop default button's click action.\n     *\n     * @sample {highstock} stock/rangeselector/button-click/\n     *         Click event on the button\n     *\n     * @type      {Highcharts.RangeSelectorClickCallbackFunction}\n     * @apioption rangeSelector.buttons.events.click\n     */\n    /**\n     * Additional range (in milliseconds) added to the end of the calculated\n     * time span.\n     *\n     * @sample {highstock} stock/rangeselector/min-max-offsets/\n     *         Button offsets\n     *\n     * @type      {number}\n     * @default   0\n     * @since     6.0.0\n     * @apioption rangeSelector.buttons.offsetMax\n     */\n    /**\n     * Additional range (in milliseconds) added to the start of the\n     * calculated time span.\n     *\n     * @sample {highstock} stock/rangeselector/min-max-offsets/\n     *         Button offsets\n     *\n     * @type      {number}\n     * @default   0\n     * @since     6.0.0\n     * @apioption rangeSelector.buttons.offsetMin\n     */\n    /**\n     * When buttons apply dataGrouping on a series, by default zooming\n     * in/out will deselect buttons and unset dataGrouping. Enable this\n     * option to keep buttons selected when extremes change.\n     *\n     * @sample {highstock} stock/rangeselector/preserve-datagrouping/\n     *         Different preserveDataGrouping settings\n     *\n     * @type      {boolean}\n     * @default   false\n     * @since     6.1.2\n     * @apioption rangeSelector.buttons.preserveDataGrouping\n     */\n    /**\n     * A custom data grouping object for each button.\n     *\n     * @see [series.dataGrouping](#plotOptions.series.dataGrouping)\n     *\n     * @sample {highstock} stock/demo/rangeselector-datagrouping/\n     *         Data grouping by range selector buttons\n     *\n     * @type      {*}\n     * @extends   plotOptions.series.dataGrouping\n     * @apioption rangeSelector.buttons.dataGrouping\n     */\n    /**\n     * The text for the button itself.\n     *\n     * @type      {string}\n     * @apioption rangeSelector.buttons.text\n     */\n    /**\n     * Explanation for the button, shown as a tooltip on hover, and used by\n     * assistive technology.\n     *\n     * @type      {string}\n     * @apioption rangeSelector.buttons.title\n     */\n    /**\n     * Defined the time span for the button. Can be one of `millisecond`,\n     * `second`, `minute`, `hour`, `day`, `week`, `month`, `year`, `ytd`,\n     * and `all`.\n     *\n     * @type       {Highcharts.RangeSelectorButtonTypeValue}\n     * @apioption  rangeSelector.buttons.type\n     */\n    /**\n     * The space in pixels between the buttons in the range selector.\n     */\n    buttonSpacing: 5,\n    /**\n     * Whether to collapse the range selector buttons into a dropdown when\n     * there is not enough room to show everything in a single row, instead\n     * of dividing the range selector into multiple rows.\n     * Can be one of the following:\n     *  - `always`: Always collapse\n     *  - `responsive`: Only collapse when there is not enough room\n     *  - `never`: Never collapse\n     *\n     * @sample {highstock} stock/rangeselector/dropdown/\n     *         Dropdown option\n     *\n     * @validvalue [\"always\", \"responsive\", \"never\"]\n     * @since 9.0.0\n     */\n    dropdown: 'responsive',\n    /**\n     * Enable or disable the range selector. Default to `true` for stock\n     * charts, using the `stockChart` factory.\n     *\n     * @sample {highstock} stock/rangeselector/enabled/\n     *         Disable the range selector\n     *\n     * @type {boolean|undefined}\n     * @default {highstock} true\n     */\n    enabled: void 0,\n    /**\n     * The vertical alignment of the rangeselector box. Allowed properties\n     * are `top`, `middle`, `bottom`.\n     *\n     * @sample {highstock} stock/rangeselector/vertical-align-middle/\n     *         Middle\n     * @sample {highstock} stock/rangeselector/vertical-align-bottom/\n     *         Bottom\n     *\n     * @type  {Highcharts.VerticalAlignValue}\n     * @since 6.0.0\n     */\n    verticalAlign: 'top',\n    /**\n     * A collection of attributes for the buttons. The object takes SVG\n     * attributes like `fill`, `stroke`, `stroke-width`, as well as `style`,\n     * a collection of CSS properties for the text.\n     *\n     * The object can also be extended with states, so you can set\n     * presentational options for `hover`, `select` or `disabled` button\n     * states.\n     *\n     * CSS styles for the text label.\n     *\n     * In styled mode, the buttons are styled by the\n     * `.highcharts-range-selector-buttons .highcharts-button` rule with its\n     * different states.\n     *\n     * @sample {highstock} stock/rangeselector/styling/\n     *         Styling the buttons and inputs\n     *\n     * @type {Highcharts.SVGAttributes}\n     */\n    buttonTheme: {\n        /** @ignore */\n        width: 28,\n        /** @ignore */\n        height: 18,\n        /** @ignore */\n        padding: 2,\n        /** @ignore */\n        zIndex: 7 // #484, #852\n    },\n    /**\n     * When the rangeselector is floating, the plot area does not reserve\n     * space for it. This opens for positioning anywhere on the chart.\n     *\n     * @sample {highstock} stock/rangeselector/floating/\n     *         Placing the range selector between the plot area and the\n     *         navigator\n     *\n     * @since 6.0.0\n     */\n    floating: false,\n    /**\n     * The x offset of the range selector relative to its horizontal\n     * alignment within `chart.spacingLeft` and `chart.spacingRight`.\n     *\n     * @since 6.0.0\n     */\n    x: 0,\n    /**\n     * The y offset of the range selector relative to its horizontal\n     * alignment within `chart.spacingLeft` and `chart.spacingRight`.\n     *\n     * @since 6.0.0\n     */\n    y: 0,\n    /**\n     * Deprecated. The height of the range selector. Currently it is\n     * calculated dynamically.\n     *\n     * @deprecated\n     * @type  {number|undefined}\n     * @since 2.1.9\n     */\n    height: void 0, // Reserved space for buttons and input\n    /**\n     * The border color of the date input boxes.\n     *\n     * @sample {highstock} stock/rangeselector/styling/\n     *         Styling the buttons and inputs\n     *\n     * @type      {Highcharts.ColorString}\n     * @since     1.3.7\n     */\n    inputBoxBorderColor: 'none',\n    /**\n     * The pixel height of the date input boxes.\n     *\n     * @sample {highstock} stock/rangeselector/styling/\n     *         Styling the buttons and inputs\n     *\n     * @since     1.3.7\n     */\n    inputBoxHeight: 17,\n    /**\n     * The pixel width of the date input boxes. When `undefined`, the width\n     * is fitted to the rendered content.\n     *\n     * @sample {highstock} stock/rangeselector/styling/\n     *         Styling the buttons and inputs\n     *\n     * @type   {number|undefined}\n     * @since  1.3.7\n     */\n    inputBoxWidth: void 0,\n    /**\n     * The date format in the input boxes when not selected for editing.\n     * Defaults to `%e %b %Y`.\n     *\n     * This is used to determine which type of input to show,\n     * `datetime-local`, `date` or `time` and falling back to `text` when\n     * the browser does not support the input type or the format contains\n     * milliseconds.\n     *\n     * @sample {highstock} stock/rangeselector/input-type/\n     *         Input types\n     * @sample {highstock} stock/rangeselector/input-format/\n     *         Milliseconds in the range selector\n     *\n     */\n    inputDateFormat: '%[ebY]',\n    /**\n     * A custom callback function to parse values entered in the input boxes and\n     * return a valid JavaScript time as milliseconds since 1970. The first\n     * argument passed is the value to parse, second is a boolean indicating use\n     * of UTC time. The third is a reference to the `time` object. Time zone can\n     * be read from `time.timezone`.\n     *\n     * This will only get called for inputs of type `text`. Since v8.2.3, the\n     * input type is dynamically determined based on the granularity of the\n     * `inputDateFormat` and the browser support.\n     *\n     * @sample {highstock} stock/rangeselector/input-format/\n     *         Milliseconds in the range selector\n     *\n     * @type      {Highcharts.RangeSelectorParseCallbackFunction}\n     * @since     1.3.3\n     */\n    inputDateParser: void 0,\n    /**\n     * The date format in the input boxes when they are selected for\n     * editing. This must be a format that is recognized by JavaScript\n     * Date.parse.\n     *\n     * This will only be used for inputs of type `text`. Since v8.2.3,\n     * the input type is dynamically determined based on the granularity\n     * of the `inputDateFormat` and the browser support.\n     *\n     * @sample {highstock} stock/rangeselector/input-format/\n     *         Milliseconds in the range selector\n     *\n     */\n    inputEditDateFormat: '%Y-%m-%d',\n    /**\n     * Enable or disable the date input boxes.\n     */\n    inputEnabled: true,\n    /**\n     * Positioning for the input boxes. Allowed properties are `align`,\n     *  `x` and `y`.\n     *\n     * @since 1.2.4\n     */\n    inputPosition: {\n        /**\n         * The alignment of the input box. Allowed properties are `left`,\n         * `center`, `right`.\n         *\n         * @sample {highstock} stock/rangeselector/input-button-opposite-alignment/\n         *         Opposite alignment\n         *\n         * @sample {highstock} stock/rangeselector/input-button-same-alignment/\n         *         Same alignment for buttons and input\n         *\n         * @type  {Highcharts.AlignValue}\n         * @since 6.0.0\n         */\n        align: 'right',\n        /**\n         * X offset of the input row.\n         */\n        x: 0,\n        /**\n         * Y offset of the input row.\n         */\n        y: 0\n    },\n    /**\n     * The space in pixels between the labels and the date input boxes in\n     * the range selector.\n     *\n     * @since 9.0.0\n     */\n    inputSpacing: 5,\n    /**\n     * The index of the button to appear pre-selected. If the selected range\n     * exceeds the total data range and the 'all' option is available,\n     * the 'all' option, showing the full range, is automatically selected.\n     *\n     * @type      {number}\n     */\n    selected: void 0,\n    /**\n     * Positioning for the button row.\n     *\n     * @since 1.2.4\n     */\n    buttonPosition: {\n        /**\n         * The alignment of the input box. Allowed properties are `left`,\n         * `center`, `right`.\n         *\n         * @sample {highstock} stock/rangeselector/input-button-opposite-alignment/\n         *         Opposite alignment\n         *\n         * @sample {highstock} stock/rangeselector/input-button-same-alignment/\n         *         Same alignment for buttons and input\n         *\n         * @type  {Highcharts.AlignValue}\n         * @since 6.0.0\n         */\n        align: 'left',\n        /**\n         * X offset of the button row.\n         */\n        x: 0,\n        /**\n         * Y offset of the button row.\n         */\n        y: 0\n    },\n    /**\n     * CSS for the HTML inputs in the range selector.\n     *\n     * In styled mode, the inputs are styled by the\n     * `.highcharts-range-input text` rule in SVG mode, and\n     * `input.highcharts-range-selector` when active.\n     *\n     * @sample {highstock} stock/rangeselector/styling/\n     *         Styling the buttons and inputs\n     *\n     * @type      {Highcharts.CSSObject}\n     * @apioption rangeSelector.inputStyle\n     */\n    inputStyle: {\n        /** @ignore */\n        color: \"#334eff\" /* Palette.highlightColor80 */,\n        /** @ignore */\n        cursor: 'pointer',\n        /** @ignore */\n        fontSize: '0.8em'\n    },\n    /**\n     * CSS styles for the labels - the Zoom, From and To texts.\n     *\n     * In styled mode, the labels are styled by the\n     * `.highcharts-range-label` class.\n     *\n     * @sample {highstock} stock/rangeselector/styling/\n     *         Styling the buttons and inputs\n     *\n     * @type {Highcharts.CSSObject}\n     */\n    labelStyle: {\n        /** @ignore */\n        color: \"#666666\" /* Palette.neutralColor60 */,\n        /** @ignore */\n        fontSize: '0.8em'\n    }\n};\n/* *\n *\n *  Default Export\n *\n * */\nvar RangeSelectorDefaults = {\n    lang: lang,\n    rangeSelector: rangeSelector\n};\n/* harmony default export */ var RangeSelector_RangeSelectorDefaults = (RangeSelectorDefaults);\n\n;// ./code/es5/es-modules/Stock/RangeSelector/RangeSelectorComposition.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar RangeSelectorComposition_defaultOptions = Defaults.defaultOptions;\n\nvar RangeSelectorComposition_composed = Core_Globals.composed;\n\n\nvar RangeSelectorComposition_addEvent = Core_Utilities.addEvent, RangeSelectorComposition_defined = Core_Utilities.defined, RangeSelectorComposition_extend = Core_Utilities.extend, RangeSelectorComposition_isNumber = Core_Utilities.isNumber, RangeSelectorComposition_merge = Core_Utilities.merge, RangeSelectorComposition_pick = Core_Utilities.pick, RangeSelectorComposition_pushUnique = Core_Utilities.pushUnique;\n/* *\n *\n *  Constants\n *\n * */\nvar chartDestroyEvents = [];\n/* *\n *\n *  Variables\n *\n * */\nvar RangeSelectorConstructor;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Get the axis min value based on the range option and the current max. For\n * stock charts this is extended via the {@link RangeSelector} so that if the\n * selected range is a multiple of months or years, it is compensated for\n * various month lengths.\n *\n * @private\n * @function Highcharts.Axis#minFromRange\n * @return {number|undefined}\n *         The new minimum value.\n */\nfunction axisMinFromRange() {\n    var rangeOptions = this.range,\n        type = rangeOptions.type,\n        max = this.max,\n        time = this.chart.time, \n        // Get the true range from a start date\n        getTrueRange = function (base,\n        count) {\n            var original = time.toParts(base),\n        modified = original.slice();\n        if (type === 'year') {\n            modified[0] += count;\n        }\n        else {\n            modified[1] += count;\n        }\n        var d = time.makeTime.apply(time,\n            modified);\n        var numbers = time.toParts(d);\n        // When subtracting a month still places us in the same month, like\n        // subtracting one month from March 31 places us on February 31,\n        // which translates to March 3 (#6537)\n        if (type === 'month' &&\n            original[1] === numbers[1] &&\n            Math.abs(count) === 1) {\n            modified[0] = original[0];\n            modified[1] = original[1];\n            // 0 is the last day of the previous month\n            modified[2] = 0;\n        }\n        d = time.makeTime.apply(time, modified);\n        return d - base;\n    };\n    var min,\n        range;\n    if (RangeSelectorComposition_isNumber(rangeOptions)) {\n        min = max - rangeOptions;\n        range = rangeOptions;\n    }\n    else if (rangeOptions) {\n        min = max + getTrueRange(max, -(rangeOptions.count || 1));\n        // Let the fixedRange reflect initial settings (#5930)\n        if (this.chart) {\n            this.chart.setFixedRange(max - min);\n        }\n    }\n    var dataMin = RangeSelectorComposition_pick(this.dataMin,\n        Number.MIN_VALUE);\n    if (!RangeSelectorComposition_isNumber(min)) {\n        min = dataMin;\n    }\n    if (min <= dataMin) {\n        min = dataMin;\n        if (typeof range === 'undefined') { // #4501\n            range = getTrueRange(min, rangeOptions.count);\n        }\n        this.newMax = Math.min(min + range, RangeSelectorComposition_pick(this.dataMax, Number.MAX_VALUE));\n    }\n    if (!RangeSelectorComposition_isNumber(max)) {\n        min = void 0;\n    }\n    else if (!RangeSelectorComposition_isNumber(rangeOptions) &&\n        rangeOptions &&\n        rangeOptions._offsetMin) {\n        min += rangeOptions._offsetMin;\n    }\n    return min;\n}\n/**\n * @private\n */\nfunction updateRangeSelectorButtons() {\n    var _a;\n    (_a = this.rangeSelector) === null || _a === void 0 ? void 0 : _a.redrawElements();\n}\n/**\n * @private\n */\nfunction RangeSelectorComposition_compose(AxisClass, ChartClass, RangeSelectorClass) {\n    RangeSelectorConstructor = RangeSelectorClass;\n    if (RangeSelectorComposition_pushUnique(RangeSelectorComposition_composed, 'RangeSelector')) {\n        var chartProto = ChartClass.prototype;\n        AxisClass.prototype.minFromRange = axisMinFromRange;\n        RangeSelectorComposition_addEvent(ChartClass, 'afterGetContainer', createRangeSelector);\n        RangeSelectorComposition_addEvent(ChartClass, 'beforeRender', RangeSelectorComposition_onChartBeforeRender);\n        RangeSelectorComposition_addEvent(ChartClass, 'destroy', onChartDestroy);\n        RangeSelectorComposition_addEvent(ChartClass, 'getMargins', onChartGetMargins);\n        RangeSelectorComposition_addEvent(ChartClass, 'redraw', redrawRangeSelector);\n        RangeSelectorComposition_addEvent(ChartClass, 'update', RangeSelectorComposition_onChartUpdate);\n        RangeSelectorComposition_addEvent(ChartClass, 'beforeRedraw', updateRangeSelectorButtons);\n        chartProto.callbacks.push(redrawRangeSelector);\n        RangeSelectorComposition_extend(RangeSelectorComposition_defaultOptions, { rangeSelector: RangeSelector_RangeSelectorDefaults.rangeSelector });\n        RangeSelectorComposition_extend(RangeSelectorComposition_defaultOptions.lang, RangeSelector_RangeSelectorDefaults.lang);\n    }\n}\n/**\n * Initialize rangeselector for stock charts\n * @private\n */\nfunction createRangeSelector() {\n    if (this.options.rangeSelector &&\n        this.options.rangeSelector.enabled) {\n        this.rangeSelector = new RangeSelectorConstructor(this);\n    }\n}\n/**\n * @private\n */\nfunction RangeSelectorComposition_onChartBeforeRender() {\n    var chart = this,\n        rangeSelector = chart.rangeSelector;\n    if (rangeSelector) {\n        if (RangeSelectorComposition_isNumber(rangeSelector.deferredYTDClick)) {\n            rangeSelector.clickButton(rangeSelector.deferredYTDClick);\n            delete rangeSelector.deferredYTDClick;\n        }\n        var verticalAlign = rangeSelector.options.verticalAlign;\n        if (!rangeSelector.options.floating) {\n            if (verticalAlign === 'bottom') {\n                this.extraBottomMargin = true;\n            }\n            else if (verticalAlign === 'top') {\n                this.extraTopMargin = true;\n            }\n        }\n    }\n}\nfunction redrawRangeSelector() {\n    var chart = this;\n    var rangeSelector = this.rangeSelector;\n    if (!rangeSelector) {\n        return;\n    }\n    var alignTo;\n    var extremes = chart.xAxis[0].getExtremes();\n    var legend = chart.legend;\n    var verticalAlign = (rangeSelector &&\n            rangeSelector.options.verticalAlign);\n    if (RangeSelectorComposition_isNumber(extremes.min)) {\n        rangeSelector.render(extremes.min, extremes.max);\n    }\n    // Re-align the legend so that it's below the rangeselector\n    if (legend.display &&\n        verticalAlign === 'top' &&\n        verticalAlign === legend.options.verticalAlign) {\n        // Create a new alignment box for the legend.\n        alignTo = RangeSelectorComposition_merge(chart.spacingBox);\n        if (legend.options.layout === 'vertical') {\n            alignTo.y = chart.plotTop;\n        }\n        else {\n            alignTo.y += rangeSelector.getHeight();\n        }\n        legend.group.placed = false; // Don't animate the alignment.\n        legend.align(alignTo);\n    }\n}\n/**\n * Remove resize/afterSetExtremes at chart destroy.\n * @private\n */\nfunction onChartDestroy() {\n    for (var i = 0, iEnd = chartDestroyEvents.length; i < iEnd; ++i) {\n        var events = chartDestroyEvents[i];\n        if (events[0] === this) {\n            events[1].forEach(function (unbind) { return unbind(); });\n            chartDestroyEvents.splice(i, 1);\n            return;\n        }\n    }\n}\n/**\n *\n */\nfunction onChartGetMargins() {\n    var _a;\n    var rangeSelector = this.rangeSelector;\n    if ((_a = rangeSelector === null || rangeSelector === void 0 ? void 0 : rangeSelector.options) === null || _a === void 0 ? void 0 : _a.enabled) {\n        var rangeSelectorHeight = rangeSelector.getHeight();\n        var verticalAlign = rangeSelector.options.verticalAlign;\n        if (!rangeSelector.options.floating) {\n            if (verticalAlign === 'bottom') {\n                this.marginBottom += rangeSelectorHeight;\n            }\n            else if (verticalAlign !== 'middle') {\n                this.plotTop += rangeSelectorHeight;\n            }\n        }\n    }\n}\n/**\n * @private\n */\nfunction RangeSelectorComposition_onChartUpdate(e) {\n    var chart = this,\n        options = e.options,\n        optionsRangeSelector = options.rangeSelector,\n        extraBottomMarginWas = this.extraBottomMargin,\n        extraTopMarginWas = this.extraTopMargin;\n    var rangeSelector = chart.rangeSelector;\n    if (optionsRangeSelector &&\n        optionsRangeSelector.enabled &&\n        !RangeSelectorComposition_defined(rangeSelector) &&\n        this.options.rangeSelector) {\n        this.options.rangeSelector.enabled = true;\n        this.rangeSelector = rangeSelector = new RangeSelectorConstructor(this);\n    }\n    this.extraBottomMargin = false;\n    this.extraTopMargin = false;\n    if (rangeSelector) {\n        var verticalAlign = (optionsRangeSelector &&\n                optionsRangeSelector.verticalAlign) || (rangeSelector.options && rangeSelector.options.verticalAlign);\n        if (!rangeSelector.options.floating) {\n            if (verticalAlign === 'bottom') {\n                this.extraBottomMargin = true;\n            }\n            else if (verticalAlign !== 'middle') {\n                this.extraTopMargin = true;\n            }\n        }\n        if (this.extraBottomMargin !== extraBottomMarginWas ||\n            this.extraTopMargin !== extraTopMarginWas) {\n            this.isDirtyBox = true;\n        }\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar RangeSelectorComposition = {\n    compose: RangeSelectorComposition_compose\n};\n/* harmony default export */ var RangeSelector_RangeSelectorComposition = (RangeSelectorComposition);\n\n;// ./code/es5/es-modules/Core/Axis/OrdinalAxis.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar OrdinalAxis_assign = (undefined && undefined.__assign) || function () {\n    OrdinalAxis_assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return OrdinalAxis_assign.apply(this, arguments);\n};\n\n\n\n\nvar OrdinalAxis_addEvent = Core_Utilities.addEvent, OrdinalAxis_correctFloat = Core_Utilities.correctFloat, OrdinalAxis_css = Core_Utilities.css, OrdinalAxis_defined = Core_Utilities.defined, OrdinalAxis_error = Core_Utilities.error, OrdinalAxis_isNumber = Core_Utilities.isNumber, OrdinalAxis_pick = Core_Utilities.pick, OrdinalAxis_timeUnits = Core_Utilities.timeUnits, OrdinalAxis_isString = Core_Utilities.isString;\n/* *\n *\n *  Composition\n *\n * */\n/**\n * Extends the axis with ordinal support.\n * @private\n */\nvar OrdinalAxis;\n(function (OrdinalAxis) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Extends the axis with ordinal support.\n     *\n     * @private\n     *\n     * @param AxisClass\n     * Axis class to extend.\n     *\n     * @param ChartClass\n     * Chart class to use.\n     *\n     * @param SeriesClass\n     * Series class to use.\n     */\n    function compose(AxisClass, SeriesClass, ChartClass) {\n        var axisProto = AxisClass.prototype;\n        if (!axisProto.ordinal2lin) {\n            axisProto.getTimeTicks = getTimeTicks;\n            axisProto.index2val = index2val;\n            axisProto.lin2val = lin2val;\n            axisProto.val2lin = val2lin;\n            // Record this to prevent overwriting by broken-axis module (#5979)\n            axisProto.ordinal2lin = axisProto.val2lin;\n            OrdinalAxis_addEvent(AxisClass, 'afterInit', onAxisAfterInit);\n            OrdinalAxis_addEvent(AxisClass, 'foundExtremes', onAxisFoundExtremes);\n            OrdinalAxis_addEvent(AxisClass, 'afterSetScale', onAxisAfterSetScale);\n            OrdinalAxis_addEvent(AxisClass, 'initialAxisTranslation', onAxisInitialAxisTranslation);\n            OrdinalAxis_addEvent(ChartClass, 'pan', onChartPan);\n            OrdinalAxis_addEvent(ChartClass, 'touchpan', onChartPan);\n            OrdinalAxis_addEvent(SeriesClass, 'updatedData', onSeriesUpdatedData);\n        }\n        return AxisClass;\n    }\n    OrdinalAxis.compose = compose;\n    /**\n     * In an ordinal axis, there might be areas with dense concentrations of\n     * points, then large gaps between some. Creating equally distributed\n     * ticks over this entire range may lead to a huge number of ticks that\n     * will later be removed. So instead, break the positions up in\n     * segments, find the tick positions for each segment then concatenize\n     * them. This method is used from both data grouping logic and X axis\n     * tick position logic.\n     * @private\n     */\n    function getTimeTicks(normalizedInterval, min, max, startOfWeek, positions, closestDistance, findHigherRanks) {\n        if (positions === void 0) { positions = []; }\n        if (closestDistance === void 0) { closestDistance = 0; }\n        var higherRanks = {},\n            tickPixelIntervalOption = this.options.tickPixelInterval,\n            time = this.chart.time, \n            // Record all the start positions of a segment, to use when\n            // deciding what's a gap in the data.\n            segmentStarts = [];\n        var end,\n            segmentPositions,\n            hasCrossedHigherRank,\n            info,\n            outsideMax,\n            start = 0,\n            groupPositions = [],\n            lastGroupPosition = -Number.MAX_VALUE;\n        // The positions are not always defined, for example for ordinal\n        // positions when data has regular interval (#1557, #2090)\n        if ((!this.options.ordinal && !this.options.breaks) ||\n            !positions ||\n            positions.length < 3 ||\n            typeof min === 'undefined') {\n            return time.getTimeTicks.apply(time, arguments);\n        }\n        // Analyze the positions array to split it into segments on gaps\n        // larger than 5 times the closest distance. The closest distance is\n        // already found at this point, so we reuse that instead of\n        // computing it again.\n        var posLength = positions.length;\n        for (end = 0; end < posLength; end++) {\n            outsideMax = end && positions[end - 1] > max;\n            if (positions[end] < min) { // Set the last position before min\n                start = end;\n            }\n            if (end === posLength - 1 ||\n                positions[end + 1] - positions[end] > closestDistance * 5 ||\n                outsideMax) {\n                // For each segment, calculate the tick positions from the\n                // getTimeTicks utility function. The interval will be the\n                // same regardless of how long the segment is.\n                if (positions[end] > lastGroupPosition) { // #1475\n                    segmentPositions = time.getTimeTicks(normalizedInterval, positions[start], positions[end], startOfWeek);\n                    // Prevent duplicate groups, for example for multiple\n                    // segments within one larger time frame (#1475)\n                    while (segmentPositions.length &&\n                        segmentPositions[0] <= lastGroupPosition) {\n                        segmentPositions.shift();\n                    }\n                    if (segmentPositions.length) {\n                        lastGroupPosition =\n                            segmentPositions[segmentPositions.length - 1];\n                    }\n                    segmentStarts.push(groupPositions.length);\n                    groupPositions = groupPositions.concat(segmentPositions);\n                }\n                // Set start of next segment\n                start = end + 1;\n            }\n            if (outsideMax) {\n                break;\n            }\n        }\n        // Get the grouping info from the last of the segments. The info is\n        // the same for all segments.\n        if (segmentPositions) {\n            info = segmentPositions.info;\n            // Optionally identify ticks with higher rank, for example\n            // when the ticks have crossed midnight.\n            if (findHigherRanks && info.unitRange <= OrdinalAxis_timeUnits.hour) {\n                end = groupPositions.length - 1;\n                // Compare points two by two\n                for (start = 1; start < end; start++) {\n                    if (time.dateFormat('%d', groupPositions[start]) !==\n                        time.dateFormat('%d', groupPositions[start - 1])) {\n                        higherRanks[groupPositions[start]] = 'day';\n                        hasCrossedHigherRank = true;\n                    }\n                }\n                // If the complete array has crossed midnight, we want\n                // to mark the first positions also as higher rank\n                if (hasCrossedHigherRank) {\n                    higherRanks[groupPositions[0]] = 'day';\n                }\n                info.higherRanks = higherRanks;\n            }\n            // Save the info\n            info.segmentStarts = segmentStarts;\n            groupPositions.info = info;\n        }\n        else {\n            OrdinalAxis_error(12, false, this.chart);\n        }\n        // Don't show ticks within a gap in the ordinal axis, where the\n        // space between two points is greater than a portion of the tick\n        // pixel interval\n        if (findHigherRanks && OrdinalAxis_defined(tickPixelIntervalOption)) {\n            var length_1 = groupPositions.length,\n                translatedArr = [],\n                distances = [];\n            var itemToRemove = void 0,\n                translated = void 0,\n                lastTranslated = void 0,\n                medianDistance = void 0,\n                distance = void 0,\n                i = length_1;\n            // Find median pixel distance in order to keep a reasonably even\n            // distance between ticks (#748)\n            while (i--) {\n                translated = this.translate(groupPositions[i]);\n                if (lastTranslated) {\n                    distances[i] = lastTranslated - translated;\n                }\n                translatedArr[i] = lastTranslated = translated;\n            }\n            distances.sort(function (a, b) { return a - b; });\n            medianDistance = distances[Math.floor(distances.length / 2)];\n            if (medianDistance < tickPixelIntervalOption * 0.6) {\n                medianDistance = null;\n            }\n            // Now loop over again and remove ticks where needed\n            i = groupPositions[length_1 - 1] > max ? length_1 - 1 : length_1; // #817\n            lastTranslated = void 0;\n            while (i--) {\n                translated = translatedArr[i];\n                distance = Math.abs(lastTranslated - translated);\n                // #4175 - when axis is reversed, the distance, is negative but\n                // tickPixelIntervalOption positive, so we need to compare the\n                // same values\n                // Remove ticks that are closer than 0.6 times the pixel\n                // interval from the one to the right, but not if it is close to\n                // the median distance (#748).\n                if (lastTranslated &&\n                    distance < tickPixelIntervalOption * 0.8 &&\n                    (medianDistance === null || distance < medianDistance * 0.8)) {\n                    // Is this a higher ranked position with a normal\n                    // position to the right?\n                    if (higherRanks[groupPositions[i]] &&\n                        !higherRanks[groupPositions[i + 1]]) {\n                        // Yes: remove the lower ranked neighbour to the\n                        // right\n                        itemToRemove = i + 1;\n                        lastTranslated = translated; // #709\n                    }\n                    else {\n                        // No: remove this one\n                        itemToRemove = i;\n                    }\n                    groupPositions.splice(itemToRemove, 1);\n                }\n                else {\n                    lastTranslated = translated;\n                }\n            }\n        }\n        return groupPositions;\n    }\n    /**\n     * Get axis position of given index of the extended ordinal positions.\n     * Used only when panning an ordinal axis.\n     *\n     * @private\n     * @function Highcharts.Axis#index2val\n     * @param {number} index\n     * The index value of searched point\n     */\n    function index2val(index) {\n        var axis = this,\n            ordinal = axis.ordinal, \n            // Context could be changed to extendedOrdinalPositions.\n            ordinalPositions = ordinal.positions;\n        // The visible range contains only equally spaced values.\n        if (!ordinalPositions) {\n            return index;\n        }\n        var i = ordinalPositions.length - 1,\n            distance;\n        if (index < 0) { // Out of range, in effect panning to the left\n            index = ordinalPositions[0];\n        }\n        else if (index > i) { // Out of range, panning to the right\n            index = ordinalPositions[i];\n        }\n        else { // Split it up\n            i = Math.floor(index);\n            distance = index - i; // The decimal\n        }\n        if (typeof distance !== 'undefined' &&\n            typeof ordinalPositions[i] !== 'undefined') {\n            return ordinalPositions[i] + (distance ?\n                distance *\n                    (ordinalPositions[i + 1] - ordinalPositions[i]) :\n                0);\n        }\n        return index;\n    }\n    /**\n     * Translate from linear (internal) to axis value.\n     *\n     * @private\n     * @function Highcharts.Axis#lin2val\n     * @param {number} val\n     * The linear abstracted value.\n     */\n    function lin2val(val) {\n        var axis = this,\n            ordinal = axis.ordinal,\n            localMin = axis.old ? axis.old.min : axis.min,\n            localA = axis.old ? axis.old.transA : axis.transA;\n        // Always use extendedPositions (#19816)\n        var positions = ordinal.getExtendedPositions();\n        // In some cases (especially in early stages of the chart creation) the\n        // getExtendedPositions might return undefined.\n        if (positions === null || positions === void 0 ? void 0 : positions.length) {\n            // Convert back from modivied value to pixels. // #15970\n            var pixelVal = OrdinalAxis_correctFloat((val - localMin) * localA +\n                    axis.minPixelPadding),\n                index = OrdinalAxis_correctFloat(ordinal.getIndexOfPoint(pixelVal,\n                positions)),\n                mantissa = OrdinalAxis_correctFloat(index % 1);\n            // Check if the index is inside position array. If true,\n            // read/approximate value for that exact index.\n            if (index >= 0 && index <= positions.length - 1) {\n                var leftNeighbour = positions[Math.floor(index)],\n                    rightNeighbour = positions[Math.ceil(index)],\n                    distance = rightNeighbour - leftNeighbour;\n                return positions[Math.floor(index)] + mantissa * distance;\n            }\n        }\n        // If the value is outside positions array, return initial value\n        return val; // #16784\n    }\n    /**\n     * Internal function to calculate the precise index in ordinalPositions\n     * array.\n     * @private\n     */\n    function getIndexInArray(ordinalPositions, val) {\n        var index = OrdinalAxis.Additions.findIndexOf(ordinalPositions,\n            val,\n            true);\n        if (ordinalPositions[index] === val) {\n            return index;\n        }\n        var percent = (val - ordinalPositions[index]) /\n                (ordinalPositions[index + 1] - ordinalPositions[index]);\n        return index + percent;\n    }\n    /**\n    * @private\n    */\n    function onAxisAfterInit() {\n        var axis = this;\n        if (!axis.ordinal) {\n            axis.ordinal = new OrdinalAxis.Additions(axis);\n        }\n    }\n    /**\n     * @private\n     */\n    function onAxisFoundExtremes() {\n        var axis = this,\n            eventArgs = axis.eventArgs,\n            options = axis.options;\n        if (axis.isXAxis &&\n            OrdinalAxis_defined(options.overscroll) &&\n            options.overscroll !== 0 &&\n            OrdinalAxis_isNumber(axis.max) &&\n            OrdinalAxis_isNumber(axis.min)) {\n            if (axis.options.ordinal && !axis.ordinal.originalOrdinalRange) {\n                // Calculate the original ordinal range\n                axis.ordinal.getExtendedPositions(false);\n            }\n            if (axis.max === axis.dataMax &&\n                (\n                // Panning is an exception. We don't want to apply\n                // overscroll when panning over the dataMax\n                (eventArgs === null || eventArgs === void 0 ? void 0 : eventArgs.trigger) !== 'pan' ||\n                    axis.isInternal) &&\n                // Scrollbar buttons are the other execption\n                (eventArgs === null || eventArgs === void 0 ? void 0 : eventArgs.trigger) !== 'navigator') {\n                var overscroll = axis.ordinal.convertOverscroll(options.overscroll);\n                axis.max += overscroll;\n                // Live data and buttons require translation for the min:\n                if (!axis.isInternal &&\n                    OrdinalAxis_defined(axis.userMin) &&\n                    (eventArgs === null || eventArgs === void 0 ? void 0 : eventArgs.trigger) !== 'mousewheel') {\n                    axis.min += overscroll;\n                }\n            }\n        }\n    }\n    /**\n     * For ordinal axis, that loads data async, redraw axis after data is\n     * loaded. If we don't do that, axis will have the same extremes as\n     * previously, but ordinal positions won't be calculated. See #10290\n     * @private\n     */\n    function onAxisAfterSetScale() {\n        var axis = this;\n        if (axis.horiz && !axis.isDirty) {\n            axis.isDirty = axis.isOrdinal &&\n                axis.chart.navigator &&\n                !axis.chart.navigator.adaptToUpdatedData;\n        }\n    }\n    /**\n     * @private\n     */\n    function onAxisInitialAxisTranslation() {\n        var axis = this;\n        if (axis.ordinal) {\n            axis.ordinal.beforeSetTickPositions();\n            axis.tickInterval = axis.ordinal.postProcessTickInterval(axis.tickInterval);\n        }\n    }\n    /**\n     * Extending the Chart.pan method for ordinal axes\n     * @private\n     */\n    function onChartPan(e) {\n        var chart = this,\n            xAxis = chart.xAxis[0],\n            overscroll = xAxis.ordinal.convertOverscroll(xAxis.options.overscroll),\n            chartX = e.originalEvent.chartX,\n            panning = chart.options.chart.panning;\n        var runBase = false;\n        if (panning &&\n            panning.type !== 'y' &&\n            xAxis.options.ordinal &&\n            xAxis.series.length &&\n            // On touch devices, let default function handle the pinching\n            (!e.touches || e.touches.length <= 1)) {\n            var mouseDownX = chart.mouseDownX,\n                extremes = xAxis.getExtremes(),\n                dataMin = extremes.dataMin,\n                dataMax = extremes.dataMax,\n                min = extremes.min,\n                max = extremes.max,\n                hoverPoints = chart.hoverPoints,\n                closestPointRange = (xAxis.closestPointRange ||\n                    (xAxis.ordinal && xAxis.ordinal.overscrollPointsRange)),\n                pointPixelWidth = (xAxis.translationSlope *\n                    (xAxis.ordinal.slope || closestPointRange)), \n                // How many ordinal units did we move?\n                movedUnits = Math.round((mouseDownX - chartX) / pointPixelWidth), \n                // Get index of all the chart's points\n                extendedOrdinalPositions = xAxis.ordinal.getExtendedPositions(),\n                extendedAxis = {\n                    ordinal: {\n                        positions: extendedOrdinalPositions,\n                        extendedOrdinalPositions: extendedOrdinalPositions\n                    }\n                },\n                index2val_1 = xAxis.index2val,\n                val2lin_1 = xAxis.val2lin;\n            var trimmedRange = void 0,\n                ordinalPositions = void 0;\n            // Make sure panning to the edges does not decrease the zoomed range\n            if ((min <= dataMin && movedUnits < 0) ||\n                (max + overscroll >= dataMax && movedUnits > 0)) {\n                return;\n            }\n            // We have an ordinal axis, but the data is equally spaced\n            if (!extendedAxis.ordinal.positions) {\n                runBase = true;\n            }\n            else if (Math.abs(movedUnits) > 1) {\n                // Remove active points for shared tooltip\n                if (hoverPoints) {\n                    hoverPoints.forEach(function (point) {\n                        point.setState();\n                    });\n                }\n                // In grouped data series, the last ordinal position represents\n                // the grouped data, which is to the left of the real data max.\n                // If we don't compensate for this, we will be allowed to pan\n                // grouped data series passed the right of the plot area.\n                ordinalPositions = extendedAxis.ordinal.positions;\n                if (dataMax >\n                    ordinalPositions[ordinalPositions.length - 1]) {\n                    ordinalPositions.push(dataMax);\n                }\n                // Get the new min and max values by getting the ordinal index\n                // for the current extreme, then add the moved units and\n                // translate back to values. This happens on the extended\n                // ordinal positions if the new position is out of range, else\n                // it happens on the current x axis which is smaller and faster.\n                chart.setFixedRange(max - min);\n                trimmedRange = xAxis.navigatorAxis\n                    .toFixedRange(void 0, void 0, index2val_1.apply(extendedAxis, [\n                    val2lin_1.apply(extendedAxis, [min, true]) +\n                        movedUnits\n                ]), index2val_1.apply(extendedAxis, [\n                    val2lin_1.apply(extendedAxis, [max, true]) +\n                        movedUnits\n                ]));\n                // Apply it if it is within the available data range\n                if (trimmedRange.min >= Math.min(ordinalPositions[0], min) &&\n                    trimmedRange.max <= Math.max(ordinalPositions[ordinalPositions.length - 1], max) + overscroll) {\n                    xAxis.setExtremes(trimmedRange.min, trimmedRange.max, true, false, { trigger: 'pan' });\n                }\n                chart.mouseDownX = chartX; // Set new reference for next run\n                OrdinalAxis_css(chart.container, { cursor: 'move' });\n            }\n        }\n        else {\n            runBase = true;\n        }\n        // Revert to the linear chart.pan version\n        if (runBase || (panning && /y/.test(panning.type))) {\n            if (overscroll) {\n                xAxis.max = xAxis.dataMax + overscroll;\n            }\n        }\n        else {\n            e.preventDefault();\n        }\n    }\n    /**\n     * @private\n     */\n    function onSeriesUpdatedData() {\n        var xAxis = this.xAxis;\n        // Destroy the extended ordinal index on updated data\n        // and destroy extendedOrdinalPositions, #16055.\n        if (xAxis && xAxis.options.ordinal) {\n            delete xAxis.ordinal.index;\n            delete xAxis.ordinal.originalOrdinalRange;\n        }\n    }\n    /**\n     * Translate from a linear axis value to the corresponding ordinal axis\n     * position. If there are no gaps in the ordinal axis this will be the\n     * same. The translated value is the value that the point would have if\n     * the axis was linear, using the same min and max.\n     *\n     * @private\n     * @function Highcharts.Axis#val2lin\n     * @param {number} val\n     * The axis value.\n     * @param {boolean} [toIndex]\n     * Whether to return the index in the ordinalPositions or the new value.\n     */\n    function val2lin(val, toIndex) {\n        var axis = this,\n            ordinal = axis.ordinal,\n            ordinalPositions = ordinal.positions;\n        var slope = ordinal.slope,\n            extendedOrdinalPositions;\n        if (!ordinalPositions) {\n            return val;\n        }\n        var ordinalLength = ordinalPositions.length;\n        var ordinalIndex;\n        // If the searched value is inside visible plotArea, ivastigate the\n        // value basing on ordinalPositions.\n        if (ordinalPositions[0] <= val &&\n            ordinalPositions[ordinalLength - 1] >= val) {\n            ordinalIndex = getIndexInArray(ordinalPositions, val);\n            // Final return value is based on ordinalIndex\n        }\n        else {\n            extendedOrdinalPositions =\n                ordinal.getExtendedPositions &&\n                    ordinal.getExtendedPositions();\n            if (!(extendedOrdinalPositions && extendedOrdinalPositions.length)) {\n                return val;\n            }\n            var length_2 = extendedOrdinalPositions.length;\n            if (!slope) {\n                slope =\n                    (extendedOrdinalPositions[length_2 - 1] -\n                        extendedOrdinalPositions[0]) /\n                        length_2;\n            }\n            // `originalPointReference` is equal to the index of first point of\n            // ordinalPositions in extendedOrdinalPositions.\n            var originalPositionsReference = getIndexInArray(extendedOrdinalPositions,\n                ordinalPositions[0]);\n            // If the searched value is outside the visiblePlotArea,\n            // check if it is inside extendedOrdinalPositions.\n            if (val >= extendedOrdinalPositions[0] &&\n                val <=\n                    extendedOrdinalPositions[length_2 - 1]) {\n                // Return Value\n                ordinalIndex = getIndexInArray(extendedOrdinalPositions, val) -\n                    originalPositionsReference;\n            }\n            else {\n                if (!toIndex) {\n                    // If the value is outside positions array,\n                    // return initial value, #16784\n                    return val;\n                }\n                // Since ordinal.slope is the average distance between 2\n                // points on visible plotArea, this can be used to calculate\n                // the approximate position of the point, which is outside\n                // the extendedOrdinalPositions.\n                if (val < extendedOrdinalPositions[0]) {\n                    var diff = extendedOrdinalPositions[0] - val,\n                        approximateIndexOffset = diff / slope;\n                    ordinalIndex =\n                        -originalPositionsReference -\n                            approximateIndexOffset;\n                }\n                else {\n                    var diff = val -\n                            extendedOrdinalPositions[length_2 - 1],\n                        approximateIndexOffset = diff / slope;\n                    ordinalIndex =\n                        approximateIndexOffset +\n                            length_2 -\n                            originalPositionsReference;\n                }\n            }\n        }\n        return toIndex ? ordinalIndex : slope * (ordinalIndex || 0) +\n            ordinal.offset;\n    }\n    /* *\n     *\n     *  Classes\n     *\n     * */\n    /**\n     * @private\n     */\n    var Additions = /** @class */ (function () {\n            /* *\n             *\n             *  Constructors\n             *\n             * */\n            /**\n             * @private\n             */\n            function Additions(axis) {\n                this.index = {};\n            this.axis = axis;\n        }\n        /* *\n        *\n        *  Functions\n        *\n        * */\n        /**\n         * Calculate the ordinal positions before tick positions are calculated.\n         * @private\n         */\n        Additions.prototype.beforeSetTickPositions = function () {\n            var _a;\n            var axis = this.axis,\n                ordinal = axis.ordinal,\n                extremes = axis.getExtremes(),\n                min = extremes.min,\n                max = extremes.max,\n                hasBreaks = (_a = axis.brokenAxis) === null || _a === void 0 ? void 0 : _a.hasBreaks,\n                isOrdinal = axis.options.ordinal;\n            var len,\n                uniqueOrdinalPositions,\n                dist,\n                minIndex,\n                maxIndex,\n                slope,\n                i,\n                ordinalPositions = [],\n                overscrollPointsRange = Number.MAX_VALUE,\n                useOrdinal = false,\n                adjustOrdinalExtremesPoints = false,\n                isBoosted = false;\n            // Apply the ordinal logic\n            if (isOrdinal || hasBreaks) { // #4167 YAxis is never ordinal ?\n                var distanceBetweenPoint_1 = 0;\n                axis.series.forEach(function (series, i) {\n                    var xData = series.getColumn('x',\n                        true);\n                    uniqueOrdinalPositions = [];\n                    // For an axis with multiple series, check if the distance\n                    // between points is identical throughout all series.\n                    if (i > 0 &&\n                        series.options.id !== 'highcharts-navigator-series' &&\n                        xData.length > 1) {\n                        adjustOrdinalExtremesPoints = (distanceBetweenPoint_1 !== xData[1] - xData[0]);\n                    }\n                    distanceBetweenPoint_1 = xData[1] - xData[0];\n                    if (series.boosted) {\n                        isBoosted = series.boosted;\n                    }\n                    if (series.reserveSpace() &&\n                        (series\n                            .takeOrdinalPosition !== false || hasBreaks)) {\n                        // Concatenate the processed X data into the existing\n                        // positions, or the empty array\n                        ordinalPositions = ordinalPositions.concat(xData);\n                        len = ordinalPositions.length;\n                        // Remove duplicates (#1588)\n                        ordinalPositions.sort(function (a, b) {\n                            // Without a custom function it is sorted as strings\n                            return a - b;\n                        });\n                        overscrollPointsRange = Math.min(overscrollPointsRange, OrdinalAxis_pick(\n                        // Check for a single-point series:\n                        series.closestPointRange, overscrollPointsRange));\n                        if (len) {\n                            i = 0;\n                            while (i < len - 1) {\n                                if (ordinalPositions[i] !==\n                                    ordinalPositions[i + 1]) {\n                                    uniqueOrdinalPositions.push(ordinalPositions[i + 1]);\n                                }\n                                i++;\n                            }\n                            // Check first item:\n                            if (uniqueOrdinalPositions[0] !==\n                                ordinalPositions[0]) {\n                                uniqueOrdinalPositions.unshift(ordinalPositions[0]);\n                            }\n                            ordinalPositions = uniqueOrdinalPositions;\n                        }\n                    }\n                });\n                if (!axis.ordinal.originalOrdinalRange) {\n                    // Calculate current originalOrdinalRange\n                    axis.ordinal.originalOrdinalRange =\n                        (ordinalPositions.length - 1) * overscrollPointsRange;\n                }\n                // If the distance between points is not identical throughout\n                // all series, remove the first and last ordinal position to\n                // avoid enabling ordinal logic when it is not needed, #17405.\n                // Only for boosted series because changes are negligible.\n                if (adjustOrdinalExtremesPoints && isBoosted) {\n                    ordinalPositions.pop();\n                    ordinalPositions.shift();\n                }\n                // Cache the length\n                len = ordinalPositions.length;\n                // Check if we really need the overhead of mapping axis data\n                // against the ordinal positions. If the series consist of\n                // evenly spaced data any way, we don't need any ordinal logic.\n                if (len > 2) { // Two points have equal distance by default\n                    dist = ordinalPositions[1] - ordinalPositions[0];\n                    i = len - 1;\n                    while (i-- && !useOrdinal) {\n                        if (ordinalPositions[i + 1] - ordinalPositions[i] !==\n                            dist) {\n                            useOrdinal = true;\n                        }\n                    }\n                    // When zooming in on a week, prevent axis padding for\n                    // weekends even though the data within the week is evenly\n                    // spaced.\n                    if (!axis.options.keepOrdinalPadding &&\n                        (ordinalPositions[0] - min > dist ||\n                            (max -\n                                ordinalPositions[ordinalPositions.length - 1]) > dist)) {\n                        useOrdinal = true;\n                    }\n                }\n                else if (axis.options.overscroll) {\n                    if (len === 2) {\n                        // Exactly two points, distance for overscroll is fixed:\n                        overscrollPointsRange =\n                            ordinalPositions[1] - ordinalPositions[0];\n                    }\n                    else if (len === 1) {\n                        // We have just one point, closest distance is unknown.\n                        // Assume then it is last point and overscrolled range:\n                        overscrollPointsRange = axis.ordinal.convertOverscroll(axis.options.overscroll);\n                        ordinalPositions = [\n                            ordinalPositions[0],\n                            ordinalPositions[0] + overscrollPointsRange\n                        ];\n                    }\n                    else {\n                        // In case of zooming in on overscrolled range, stick to\n                        // the old range:\n                        overscrollPointsRange = ordinal.overscrollPointsRange;\n                    }\n                }\n                // Record the slope and offset to compute the linear values from\n                // the array index. Since the ordinal positions may exceed the\n                // current range, get the start and end positions within it\n                // (#719, #665b)\n                if (useOrdinal || axis.forceOrdinal) {\n                    if (axis.options.overscroll) {\n                        ordinal.overscrollPointsRange = overscrollPointsRange;\n                        ordinalPositions = ordinalPositions.concat(ordinal.getOverscrollPositions());\n                    }\n                    // Register\n                    ordinal.positions = ordinalPositions;\n                    // This relies on the ordinalPositions being set. Use\n                    // Math.max and Math.min to prevent padding on either sides\n                    // of the data.\n                    minIndex = axis.ordinal2lin(// #5979\n                    Math.max(min, ordinalPositions[0]), true);\n                    maxIndex = Math.max(axis.ordinal2lin(Math.min(max, ordinalPositions[ordinalPositions.length - 1]), true), 1); // #3339\n                    // Set the slope and offset of the values compared to the\n                    // indices in the ordinal positions.\n                    ordinal.slope = slope =\n                        (max - min) / (maxIndex - minIndex);\n                    ordinal.offset = min - (minIndex * slope);\n                }\n                else {\n                    ordinal.overscrollPointsRange = OrdinalAxis_pick(axis.closestPointRange, ordinal.overscrollPointsRange);\n                    ordinal.positions = axis.ordinal.slope = ordinal.offset =\n                        void 0;\n                }\n            }\n            axis.isOrdinal = isOrdinal && useOrdinal; // #3818, #4196, #4926\n            ordinal.groupIntervalFactor = null; // Reset for next run\n        };\n        /**\n         * Faster way of using the Array.indexOf method.\n         * Works for sorted arrays only with unique values.\n         *\n         * @param {Array} sortedArray\n         *        The sorted array inside which we are looking for.\n         * @param {number} key\n         *        The key to being found.\n         * @param {boolean} indirectSearch\n         *        In case of lack of the point in the array, should return\n         *        value be equal to -1 or the closest smaller index.\n         *  @private\n         */\n        Additions.findIndexOf = function (sortedArray, key, indirectSearch) {\n            var start = 0,\n                end = sortedArray.length - 1,\n                middle;\n            while (start < end) {\n                middle = Math.ceil((start + end) / 2);\n                // Key found as the middle element.\n                if (sortedArray[middle] <= key) {\n                    // Continue searching to the right.\n                    start = middle;\n                }\n                else {\n                    // Continue searching to the left.\n                    end = middle - 1;\n                }\n            }\n            if (sortedArray[start] === key) {\n                return start;\n            }\n            // Key could not be found.\n            return !indirectSearch ? -1 : start;\n        };\n        /**\n         * Get the ordinal positions for the entire data set. This is necessary\n         * in chart panning because we need to find out what points or data\n         * groups are available outside the visible range. When a panning\n         * operation starts, if an index for the given grouping does not exists,\n         * it is created and cached. This index is deleted on updated data, so\n         * it will be regenerated the next time a panning operation starts.\n         * @private\n         */\n        Additions.prototype.getExtendedPositions = function (withOverscroll) {\n            if (withOverscroll === void 0) { withOverscroll = true; }\n            var ordinal = this,\n                axis = ordinal.axis,\n                axisProto = axis.constructor.prototype,\n                chart = axis.chart,\n                key = axis.series.reduce(function (k,\n                series) {\n                    var grouping = series.currentDataGrouping;\n                return (k +\n                    (grouping ? grouping.count + grouping.unitName : 'raw'));\n            }, ''), overscroll = withOverscroll ?\n                axis.ordinal.convertOverscroll(axis.options.overscroll) : 0, extremes = axis.getExtremes();\n            var fakeAxis,\n                fakeSeries = void 0,\n                ordinalIndex = ordinal.index;\n            // If this is the first time, or the ordinal index is deleted by\n            // updatedData,\n            // create it.\n            if (!ordinalIndex) {\n                ordinalIndex = ordinal.index = {};\n            }\n            if (!ordinalIndex[key]) {\n                // Create a fake axis object where the extended ordinal\n                // positions are emulated\n                fakeAxis = {\n                    series: [],\n                    chart: chart,\n                    forceOrdinal: false,\n                    getExtremes: function () {\n                        return {\n                            min: extremes.dataMin,\n                            max: extremes.dataMax + overscroll\n                        };\n                    },\n                    applyGrouping: axisProto.applyGrouping,\n                    getGroupPixelWidth: axisProto.getGroupPixelWidth,\n                    getTimeTicks: axisProto.getTimeTicks,\n                    options: {\n                        ordinal: true\n                    },\n                    ordinal: {\n                        getGroupIntervalFactor: this.getGroupIntervalFactor\n                    },\n                    ordinal2lin: axisProto.ordinal2lin, // #6276\n                    getIndexOfPoint: axisProto.getIndexOfPoint,\n                    val2lin: axisProto.val2lin // #2590\n                };\n                fakeAxis.ordinal.axis = fakeAxis;\n                // Add the fake series to hold the full data, then apply\n                // processData to it\n                axis.series.forEach(function (series) {\n                    var _a,\n                        _b,\n                        _c;\n                    fakeSeries = {\n                        xAxis: fakeAxis,\n                        chart: chart,\n                        groupPixelWidth: series.groupPixelWidth,\n                        destroyGroupedData: Core_Globals.noop,\n                        getColumn: series.getColumn,\n                        applyGrouping: series.applyGrouping,\n                        getProcessedData: series.getProcessedData,\n                        reserveSpace: series.reserveSpace,\n                        visible: series.visible\n                    };\n                    var xData = series.getColumn('x').concat(withOverscroll ?\n                            ordinal.getOverscrollPositions() :\n                            []);\n                    fakeSeries.dataTable = new Data_DataTableCore({\n                        columns: {\n                            x: xData\n                        }\n                    });\n                    fakeSeries.options = OrdinalAxis_assign(OrdinalAxis_assign({}, series.options), { dataGrouping: series.currentDataGrouping ? {\n                            firstAnchor: (_a = series.options.dataGrouping) === null || _a === void 0 ? void 0 : _a.firstAnchor,\n                            anchor: (_b = series.options.dataGrouping) === null || _b === void 0 ? void 0 : _b.anchor,\n                            lastAnchor: (_c = series.options.dataGrouping) === null || _c === void 0 ? void 0 : _c.firstAnchor,\n                            enabled: true,\n                            forced: true,\n                            approximation: 'open',\n                            units: [[\n                                    series.currentDataGrouping.unitName,\n                                    [series.currentDataGrouping.count]\n                                ]]\n                        } : {\n                            enabled: false\n                        } });\n                    fakeAxis.series.push(fakeSeries);\n                    series.processData.apply(fakeSeries);\n                });\n                fakeAxis.applyGrouping({ hasExtremesChanged: true });\n                // Force to use the ordinal when points are evenly spaced (e.g.\n                // weeks), #3825.\n                if (((fakeSeries === null || fakeSeries === void 0 ? void 0 : fakeSeries.closestPointRange) !==\n                    (fakeSeries === null || fakeSeries === void 0 ? void 0 : fakeSeries.basePointRange)) &&\n                    fakeSeries.currentDataGrouping) {\n                    fakeAxis.forceOrdinal = true;\n                }\n                // Run beforeSetTickPositions to compute the ordinalPositions\n                axis.ordinal.beforeSetTickPositions.apply({ axis: fakeAxis });\n                if (!axis.ordinal.originalOrdinalRange &&\n                    fakeAxis.ordinal.originalOrdinalRange) {\n                    axis.ordinal.originalOrdinalRange =\n                        fakeAxis.ordinal.originalOrdinalRange;\n                }\n                // Cache it\n                if (fakeAxis.ordinal.positions) {\n                    ordinalIndex[key] = fakeAxis.ordinal.positions;\n                }\n            }\n            return ordinalIndex[key];\n        };\n        /**\n         * Find the factor to estimate how wide the plot area would have been if\n         * ordinal gaps were included. This value is used to compute an imagined\n         * plot width in order to establish the data grouping interval.\n         *\n         * A real world case is the intraday-candlestick example. Without this\n         * logic, it would show the correct data grouping when viewing a range\n         * within each day, but once moving the range to include the gap between\n         * two days, the interval would include the cut-away night hours and the\n         * data grouping would be wrong. So the below method tries to compensate\n         * by identifying the most common point interval, in this case days.\n         *\n         * An opposite case is presented in issue #718. We have a long array of\n         * daily data, then one point is appended one hour after the last point.\n         * We expect the data grouping not to change.\n         *\n         * In the future, if we find cases where this estimation doesn't work\n         * optimally, we might need to add a second pass to the data grouping\n         * logic, where we do another run with a greater interval if the number\n         * of data groups is more than a certain fraction of the desired group\n         * count.\n         * @private\n         */\n        Additions.prototype.getGroupIntervalFactor = function (xMin, xMax, series) {\n            var ordinal = this,\n                processedXData = series.getColumn('x',\n                true),\n                len = processedXData.length,\n                distances = [];\n            var median,\n                i,\n                groupIntervalFactor = ordinal.groupIntervalFactor;\n            // Only do this computation for the first series, let the other\n            // inherit it (#2416)\n            if (!groupIntervalFactor) {\n                // Register all the distances in an array\n                for (i = 0; i < len - 1; i++) {\n                    distances[i] = (processedXData[i + 1] -\n                        processedXData[i]);\n                }\n                // Sort them and find the median\n                distances.sort(function (a, b) {\n                    return a - b;\n                });\n                median = distances[Math.floor(len / 2)];\n                // Compensate for series that don't extend through the entire\n                // axis extent. #1675.\n                xMin = Math.max(xMin, processedXData[0]);\n                xMax = Math.min(xMax, processedXData[len - 1]);\n                ordinal.groupIntervalFactor = groupIntervalFactor =\n                    (len * median) / (xMax - xMin);\n            }\n            // Return the factor needed for data grouping\n            return groupIntervalFactor;\n        };\n        /**\n         * Get index of point inside the ordinal positions array.\n         *\n         * @private\n         * @param {number} pixelVal\n         * The pixel value of a point.\n         *\n         * @param {Array<number>} [ordinalArray]\n         * An array of all points available on the axis for the given data set.\n         * Either ordinalPositions if the value is inside the plotArea or\n         * extendedOrdinalPositions if not.\n         */\n        Additions.prototype.getIndexOfPoint = function (pixelVal, ordinalArray) {\n            var ordinal = this,\n                axis = ordinal.axis,\n                min = axis.min,\n                minX = axis.minPixelPadding,\n                indexOfMin = getIndexInArray(ordinalArray,\n                min);\n            var ordinalPointPixelInterval = axis.translationSlope *\n                    (ordinal.slope ||\n                        axis.closestPointRange ||\n                        ordinal.overscrollPointsRange);\n            var shiftIndex = OrdinalAxis_correctFloat((pixelVal - minX) / ordinalPointPixelInterval);\n            return indexOfMin + shiftIndex;\n        };\n        /**\n         * Get ticks for an ordinal axis within a range where points don't\n         * exist. It is required when overscroll is enabled. We can't base on\n         * points, because we may not have any, so we use approximated\n         * pointRange and generate these ticks between Axis.dataMax,\n         * Axis.dataMax + Axis.overscroll evenly spaced. Used in panning and\n         * navigator scrolling.\n         * @private\n         */\n        Additions.prototype.getOverscrollPositions = function () {\n            var ordinal = this,\n                axis = ordinal.axis,\n                extraRange = ordinal.convertOverscroll(axis.options.overscroll),\n                distance = ordinal.overscrollPointsRange,\n                positions = [];\n            var max = axis.dataMax;\n            if (OrdinalAxis_defined(distance)) {\n                // Max + pointRange because we need to scroll to the last\n                while (max < axis.dataMax + extraRange) {\n                    max += distance;\n                    positions.push(max);\n                }\n            }\n            return positions;\n        };\n        /**\n         * Make the tick intervals closer because the ordinal gaps make the\n         * ticks spread out or cluster.\n         * @private\n         */\n        Additions.prototype.postProcessTickInterval = function (tickInterval) {\n            // Problem: https://jsfiddle.net/highcharts/FQm4E/1/. This is a case\n            // where this algorithm doesn't work optimally. In this case, the\n            // tick labels are spread out per week, but all the gaps reside\n            // within weeks. So we have a situation where the labels are courser\n            // than the ordinal gaps, and thus the tick interval should not be\n            // altered.\n            var ordinal = this,\n                axis = ordinal.axis,\n                ordinalSlope = ordinal.slope,\n                closestPointRange = axis.closestPointRange;\n            var ret;\n            if (ordinalSlope && closestPointRange) {\n                if (!axis.options.breaks) {\n                    ret = (tickInterval /\n                        (ordinalSlope / closestPointRange));\n                }\n                else {\n                    ret = closestPointRange || tickInterval; // #7275\n                }\n            }\n            else {\n                ret = tickInterval;\n            }\n            return ret;\n        };\n        /**\n         * If overscroll is pixel or pecentage value, convert it to axis range.\n         *\n         * @private\n         * @param {number | string} overscroll\n         * Overscroll value in axis range, pixels or percentage value.\n         * @return {number}\n         * Overscroll value in axis range.\n         */\n        Additions.prototype.convertOverscroll = function (overscroll) {\n            if (overscroll === void 0) { overscroll = 0; }\n            var ordinal = this,\n                axis = ordinal.axis,\n                calculateOverscroll = function (overscrollPercentage) {\n                    return OrdinalAxis_pick(ordinal.originalOrdinalRange,\n                OrdinalAxis_defined(axis.dataMax) && OrdinalAxis_defined(axis.dataMin) ?\n                        axis.dataMax - axis.dataMin : 0) * overscrollPercentage;\n            };\n            if (OrdinalAxis_isString(overscroll)) {\n                var overscrollValue = parseInt(overscroll, 10);\n                if (/%$/.test(overscroll)) {\n                    // If overscroll is percentage\n                    return calculateOverscroll(overscrollValue / 100);\n                }\n                if (/px/.test(overscroll)) {\n                    // If overscroll is pixels, it is limited to 90% of the axis\n                    // length to prevent division by zero\n                    var limitedOverscrollValue = Math.min(overscrollValue,\n                        axis.len * 0.9),\n                        pixelToPercent = limitedOverscrollValue / axis.len;\n                    return calculateOverscroll(pixelToPercent / (1 - pixelToPercent));\n                }\n                // If overscroll is a string but not pixels or percentage,\n                // return 0 as no overscroll\n                return 0;\n            }\n            return overscroll;\n        };\n        return Additions;\n    }());\n    OrdinalAxis.Additions = Additions;\n})(OrdinalAxis || (OrdinalAxis = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Axis_OrdinalAxis = (OrdinalAxis);\n\n;// ./code/es5/es-modules/Stock/RangeSelector/RangeSelector.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar RangeSelector_defaultOptions = Defaults.defaultOptions;\n\n\n\n\n\nvar RangeSelector_addEvent = Core_Utilities.addEvent, RangeSelector_createElement = Core_Utilities.createElement, RangeSelector_css = Core_Utilities.css, RangeSelector_defined = Core_Utilities.defined, RangeSelector_destroyObjectProperties = Core_Utilities.destroyObjectProperties, RangeSelector_diffObjects = Core_Utilities.diffObjects, RangeSelector_discardElement = Core_Utilities.discardElement, RangeSelector_extend = Core_Utilities.extend, RangeSelector_fireEvent = Core_Utilities.fireEvent, RangeSelector_isNumber = Core_Utilities.isNumber, RangeSelector_isString = Core_Utilities.isString, RangeSelector_merge = Core_Utilities.merge, RangeSelector_objectEach = Core_Utilities.objectEach, RangeSelector_pick = Core_Utilities.pick, RangeSelector_splat = Core_Utilities.splat;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Get the preferred input type based on a date format string.\n *\n * @private\n * @function preferredInputType\n */\nfunction preferredInputType(format) {\n    var hasTimeKey = function (char) {\n            return new RegExp(\"%[[a-zA-Z]*\".concat(char)).test(format);\n    };\n    var ms = RangeSelector_isString(format) ?\n            format.indexOf('%L') !== -1 :\n            // Implemented but not typed as of 2024\n            format.fractionalSecondDigits;\n    if (ms) {\n        return 'text';\n    }\n    var date = RangeSelector_isString(format) ?\n            ['a', 'A', 'd', 'e', 'w', 'b', 'B', 'm', 'o', 'y', 'Y']\n                .some(hasTimeKey) :\n            format.dateStyle || format.day || format.month || format.year;\n    var time = RangeSelector_isString(format) ?\n            ['H', 'k', 'I', 'l', 'M', 'S'].some(hasTimeKey) :\n            format.timeStyle || format.hour || format.minute || format.second;\n    if (date && time) {\n        return 'datetime-local';\n    }\n    if (date) {\n        return 'date';\n    }\n    if (time) {\n        return 'time';\n    }\n    return 'text';\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * The range selector.\n *\n * @private\n * @class\n * @name Highcharts.RangeSelector\n * @param {Highcharts.Chart} chart\n */\nvar RangeSelector = /** @class */ (function () {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    function RangeSelector(chart) {\n        var _this = this;\n        this.isDirty = false;\n        this.buttonOptions = RangeSelector.prototype.defaultButtons;\n        this.initialButtonGroupWidth = 0;\n        this.maxButtonWidth = function () {\n            var buttonWidth = 0;\n            _this.buttons.forEach(function (button) {\n                var bBox = button.getBBox();\n                if (bBox.width > buttonWidth) {\n                    buttonWidth = bBox.width;\n                }\n            });\n            return buttonWidth;\n        };\n        this.init(chart);\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    RangeSelector.compose = function (AxisClass, ChartClass) {\n        RangeSelector_RangeSelectorComposition.compose(AxisClass, ChartClass, RangeSelector);\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * The method to run when one of the buttons in the range selectors is\n     * clicked\n     *\n     * @private\n     * @function Highcharts.RangeSelector#clickButton\n     * @param {number} i\n     *        The index of the button\n     * @param {boolean} [redraw]\n     */\n    RangeSelector.prototype.clickButton = function (i, redraw) {\n        var rangeSelector = this,\n            chart = rangeSelector.chart,\n            rangeOptions = rangeSelector.buttonOptions[i],\n            baseAxis = chart.xAxis[0],\n            unionExtremes = (chart.scroller && chart.scroller.getUnionExtremes()) || baseAxis || {},\n            type = rangeOptions.type,\n            dataGrouping = rangeOptions.dataGrouping;\n        var dataMin = unionExtremes.dataMin,\n            dataMax = unionExtremes.dataMax,\n            newMin,\n            newMax = RangeSelector_isNumber(baseAxis === null || baseAxis === void 0 ? void 0 : baseAxis.max) ? Math.round(Math.min(baseAxis.max,\n            dataMax !== null && dataMax !== void 0 ? dataMax : baseAxis.max)) : void 0, // #1568\n            baseXAxisOptions,\n            range = rangeOptions._range,\n            rangeMin,\n            ctx,\n            ytdExtremes,\n            addOffsetMin = true;\n        // Chart has no data, base series is removed\n        if (dataMin === null || dataMax === null) {\n            return;\n        }\n        rangeSelector.setSelected(i);\n        // Apply dataGrouping associated to button\n        if (dataGrouping) {\n            this.forcedDataGrouping = true;\n            Axis_Axis.prototype.setDataGrouping.call(baseAxis || { chart: this.chart }, dataGrouping, false);\n            this.frozenStates = rangeOptions.preserveDataGrouping;\n        }\n        // Apply range\n        if (type === 'month' || type === 'year') {\n            if (!baseAxis) {\n                // This is set to the user options and picked up later when the\n                // axis is instantiated so that we know the min and max.\n                range = rangeOptions;\n            }\n            else {\n                ctx = {\n                    range: rangeOptions,\n                    max: newMax,\n                    chart: chart,\n                    dataMin: dataMin,\n                    dataMax: dataMax\n                };\n                newMin = baseAxis.minFromRange.call(ctx);\n                if (RangeSelector_isNumber(ctx.newMax)) {\n                    newMax = ctx.newMax;\n                }\n                // #15799: offsetMin is added in minFromRange so that it works\n                // with pre-selected buttons as well\n                addOffsetMin = false;\n            }\n            // Fixed times like minutes, hours, days\n        }\n        else if (range) {\n            if (RangeSelector_isNumber(newMax)) {\n                newMin = Math.max(newMax - range, dataMin);\n                newMax = Math.min(newMin + range, dataMax);\n                addOffsetMin = false;\n            }\n        }\n        else if (type === 'ytd') {\n            // On user clicks on the buttons, or a delayed action running from\n            // the beforeRender event (below), the baseAxis is defined.\n            if (baseAxis) {\n                // When \"ytd\" is the pre-selected button for the initial view,\n                // its calculation is delayed and rerun in the beforeRender\n                // event (below). When the series are initialized, but before\n                // the chart is rendered, we have access to the xData array\n                // (#942).\n                if (baseAxis.hasData() && (!RangeSelector_isNumber(dataMax) ||\n                    !RangeSelector_isNumber(dataMin))) {\n                    dataMin = Number.MAX_VALUE;\n                    dataMax = -Number.MAX_VALUE;\n                    chart.series.forEach(function (series) {\n                        // Reassign it to the last item\n                        var xData = series.getColumn('x');\n                        if (xData.length) {\n                            dataMin = Math.min(xData[0], dataMin);\n                            dataMax = Math.max(xData[xData.length - 1], dataMax);\n                        }\n                    });\n                    redraw = false;\n                }\n                if (RangeSelector_isNumber(dataMax) && RangeSelector_isNumber(dataMin)) {\n                    ytdExtremes = rangeSelector.getYTDExtremes(dataMax, dataMin);\n                    newMin = rangeMin = ytdExtremes.min;\n                    newMax = ytdExtremes.max;\n                }\n                // \"ytd\" is pre-selected. We don't yet have access to processed\n                // point and extremes data (things like pointStart and pointInterval\n                // are missing), so we delay the process (#942)\n            }\n            else {\n                rangeSelector.deferredYTDClick = i;\n                return;\n            }\n        }\n        else if (type === 'all' && baseAxis) {\n            // If the navigator exist and the axis range is declared reset that\n            // range and from now on only use the range set by a user, #14742.\n            if (chart.navigator && chart.navigator.baseSeries[0]) {\n                chart.navigator.baseSeries[0].xAxis.options.range = void 0;\n            }\n            newMin = dataMin;\n            newMax = dataMax;\n        }\n        if (addOffsetMin && rangeOptions._offsetMin && RangeSelector_defined(newMin)) {\n            newMin += rangeOptions._offsetMin;\n        }\n        if (rangeOptions._offsetMax && RangeSelector_defined(newMax)) {\n            newMax += rangeOptions._offsetMax;\n        }\n        if (this.dropdown) {\n            this.dropdown.selectedIndex = i + 1;\n        }\n        // Update the chart\n        if (!baseAxis) {\n            // Axis not yet instantiated. Temporarily set min and range\n            // options and axes once defined and remove them on\n            // chart load (#4317 & #20529).\n            baseXAxisOptions = RangeSelector_splat(chart.options.xAxis || {})[0];\n            var axisRangeUpdateEvent_1 = RangeSelector_addEvent(chart, 'afterCreateAxes',\n                function () {\n                    var xAxis = chart.xAxis[0];\n                xAxis.range = xAxis.options.range = range;\n                xAxis.min = xAxis.options.min = rangeMin;\n            });\n            RangeSelector_addEvent(chart, 'load', function resetMinAndRange() {\n                var xAxis = chart.xAxis[0];\n                chart.setFixedRange(rangeOptions._range);\n                xAxis.options.range = baseXAxisOptions.range;\n                xAxis.options.min = baseXAxisOptions.min;\n                axisRangeUpdateEvent_1(); // Remove event\n            });\n        }\n        else if (RangeSelector_isNumber(newMin) && RangeSelector_isNumber(newMax)) {\n            // Existing axis object. Set extremes after render time.\n            baseAxis.setExtremes(newMin, newMax, RangeSelector_pick(redraw, true), void 0, // Auto animation\n            {\n                trigger: 'rangeSelectorButton',\n                rangeSelectorButton: rangeOptions\n            });\n            chart.setFixedRange(rangeOptions._range);\n        }\n        RangeSelector_fireEvent(this, 'afterBtnClick');\n    };\n    /**\n     * Set the selected option. This method only sets the internal flag, it\n     * doesn't update the buttons or the actual zoomed range.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#setSelected\n     * @param {number} [selected]\n     */\n    RangeSelector.prototype.setSelected = function (selected) {\n        this.selected = this.options.selected = selected;\n    };\n    /**\n     * Initialize the range selector\n     *\n     * @private\n     * @function Highcharts.RangeSelector#init\n     * @param {Highcharts.Chart} chart\n     */\n    RangeSelector.prototype.init = function (chart) {\n        var rangeSelector = this,\n            options = chart.options.rangeSelector,\n            buttonOptions = options.buttons,\n            selectedOption = options.selected,\n            blurInputs = function () {\n                var minInput = rangeSelector.minInput,\n            maxInput = rangeSelector.maxInput;\n            // #3274 in some case blur is not defined\n            if (minInput && !!minInput.blur) {\n                RangeSelector_fireEvent(minInput, 'blur');\n            }\n            if (maxInput && !!maxInput.blur) {\n                RangeSelector_fireEvent(maxInput, 'blur');\n            }\n        };\n        rangeSelector.chart = chart;\n        rangeSelector.options = options;\n        rangeSelector.buttons = [];\n        rangeSelector.buttonOptions = buttonOptions;\n        this.eventsToUnbind = [];\n        this.eventsToUnbind.push(RangeSelector_addEvent(chart.container, 'mousedown', blurInputs));\n        this.eventsToUnbind.push(RangeSelector_addEvent(chart, 'resize', blurInputs));\n        // Extend the buttonOptions with actual range\n        buttonOptions.forEach(rangeSelector.computeButtonRange);\n        // Zoomed range based on a pre-selected button index\n        if (typeof selectedOption !== 'undefined' &&\n            buttonOptions[selectedOption]) {\n            this.clickButton(selectedOption, false);\n        }\n        this.eventsToUnbind.push(RangeSelector_addEvent(chart, 'load', function () {\n            // If a data grouping is applied to the current button, release it\n            // when extremes change\n            if (chart.xAxis && chart.xAxis[0]) {\n                RangeSelector_addEvent(chart.xAxis[0], 'setExtremes', function (e) {\n                    if (RangeSelector_isNumber(this.max) &&\n                        RangeSelector_isNumber(this.min) &&\n                        this.max - this.min !== chart.fixedRange &&\n                        e.trigger !== 'rangeSelectorButton' &&\n                        e.trigger !== 'updatedData' &&\n                        rangeSelector.forcedDataGrouping &&\n                        !rangeSelector.frozenStates) {\n                        this.setDataGrouping(false, false);\n                    }\n                });\n            }\n        }));\n        this.createElements();\n    };\n    /**\n     * Dynamically update the range selector buttons after a new range has been\n     * set\n     *\n     * @private\n     * @function Highcharts.RangeSelector#updateButtonStates\n     */\n    RangeSelector.prototype.updateButtonStates = function () {\n        var rangeSelector = this,\n            chart = this.chart,\n            dropdown = this.dropdown,\n            dropdownLabel = this.dropdownLabel,\n            baseAxis = chart.xAxis[0],\n            actualRange = Math.round(baseAxis.max - baseAxis.min),\n            hasNoData = !baseAxis.hasVisibleSeries,\n            day = 24 * 36e5, // A single day in milliseconds\n            unionExtremes = (chart.scroller &&\n                chart.scroller.getUnionExtremes()) || baseAxis,\n            dataMin = unionExtremes.dataMin,\n            dataMax = unionExtremes.dataMax,\n            ytdExtremes = rangeSelector.getYTDExtremes(dataMax,\n            dataMin),\n            ytdMin = ytdExtremes.min,\n            ytdMax = ytdExtremes.max,\n            selected = rangeSelector.selected,\n            allButtonsEnabled = rangeSelector.options.allButtonsEnabled,\n            buttonStates = new Array(rangeSelector.buttonOptions.length)\n                .fill(0),\n            selectedExists = RangeSelector_isNumber(selected),\n            buttons = rangeSelector.buttons;\n        var isSelectedTooGreat = false,\n            selectedIndex = null;\n        rangeSelector.buttonOptions.forEach(function (rangeOptions, i) {\n            var _a;\n            var range = rangeOptions._range,\n                type = rangeOptions.type,\n                count = rangeOptions.count || 1,\n                offsetRange = rangeOptions._offsetMax -\n                    rangeOptions._offsetMin,\n                isSelected = i === selected, \n                // Disable buttons where the range exceeds what is allowed i;\n            // the current view\n            isTooGreatRange = range >\n                dataMax - dataMin, \n            // Disable buttons where the range is smaller than the minimum\n            // range\n            isTooSmallRange = range < baseAxis.minRange;\n            // Do not select the YTD button if not explicitly told so\n            var isYTDButNotSelected = false, \n                // Disable the All button if we're already showing all\n                isSameRange = range === actualRange;\n            if (isSelected && isTooGreatRange) {\n                isSelectedTooGreat = true;\n            }\n            if (baseAxis.isOrdinal &&\n                ((_a = baseAxis.ordinal) === null || _a === void 0 ? void 0 : _a.positions) &&\n                range &&\n                actualRange < range) {\n                // Handle ordinal ranges\n                var positions = baseAxis.ordinal.positions,\n                    prevOrdinalPosition = Axis_OrdinalAxis.Additions.findIndexOf(positions,\n                    baseAxis.min,\n                    true),\n                    nextOrdinalPosition = Math.min(Axis_OrdinalAxis.Additions.findIndexOf(positions,\n                    baseAxis.max,\n                    true) + 1,\n                    positions.length - 1);\n                if (positions[nextOrdinalPosition] -\n                    positions[prevOrdinalPosition] > range) {\n                    isSameRange = true;\n                }\n            }\n            else if (\n            // Months and years have variable range so we check the extremes\n            (type === 'month' || type === 'year') &&\n                (actualRange + 36e5 >=\n                    { month: 28, year: 365 }[type] * day * count - offsetRange) &&\n                (actualRange - 36e5 <=\n                    { month: 31, year: 366 }[type] * day * count + offsetRange)) {\n                isSameRange = true;\n            }\n            else if (type === 'ytd') {\n                isSameRange = (ytdMax - ytdMin + offsetRange) === actualRange;\n                isYTDButNotSelected = !isSelected;\n            }\n            else if (type === 'all') {\n                isSameRange = (baseAxis.max - baseAxis.min >=\n                    dataMax - dataMin);\n            }\n            // The new zoom area happens to match the range for a button - mark\n            // it selected. This happens when scrolling across an ordinal gap.\n            // It can be seen in the intraday demos when selecting 1h and scroll\n            // across the night gap.\n            var disable = (!allButtonsEnabled &&\n                    !(isSelectedTooGreat && type === 'all') &&\n                    (isTooGreatRange ||\n                        isTooSmallRange ||\n                        hasNoData));\n            var select = ((isSelectedTooGreat && type === 'all') ||\n                    (isYTDButNotSelected ? false : isSameRange) ||\n                    (isSelected && rangeSelector.frozenStates));\n            if (disable) {\n                buttonStates[i] = 3;\n            }\n            else if (select) {\n                if (!selectedExists || i === selected) {\n                    selectedIndex = i;\n                }\n            }\n        });\n        if (selectedIndex !== null) {\n            buttonStates[selectedIndex] = 2;\n            rangeSelector.setSelected(selectedIndex);\n            if (this.dropdown) {\n                this.dropdown.selectedIndex = selectedIndex + 1;\n            }\n        }\n        else {\n            rangeSelector.setSelected();\n            if (this.dropdown) {\n                this.dropdown.selectedIndex = -1;\n            }\n            if (dropdownLabel) {\n                dropdownLabel.setState(0);\n                dropdownLabel.attr({\n                    text: (RangeSelector_defaultOptions.lang.rangeSelectorZoom || '') + ' ▾'\n                });\n            }\n        }\n        for (var i = 0; i < buttonStates.length; i++) {\n            var state = buttonStates[i];\n            var button = buttons[i];\n            if (button.state !== state) {\n                button.setState(state);\n                if (dropdown) {\n                    dropdown.options[i + 1].disabled = (state === 3);\n                    if (state === 2) {\n                        if (dropdownLabel) {\n                            dropdownLabel.setState(2);\n                            dropdownLabel.attr({\n                                text: rangeSelector.buttonOptions[i].text + ' ▾'\n                            });\n                        }\n                        dropdown.selectedIndex = i + 1;\n                    }\n                    var bbox = dropdownLabel.getBBox();\n                    RangeSelector_css(dropdown, {\n                        width: \"\" + bbox.width + \"px\",\n                        height: \"\" + bbox.height + \"px\"\n                    });\n                }\n            }\n        }\n    };\n    /**\n     * Compute and cache the range for an individual button\n     *\n     * @private\n     * @function Highcharts.RangeSelector#computeButtonRange\n     * @param {Highcharts.RangeSelectorButtonsOptions} rangeOptions\n     */\n    RangeSelector.prototype.computeButtonRange = function (rangeOptions) {\n        var type = rangeOptions.type,\n            count = rangeOptions.count || 1, \n            // These time intervals have a fixed number of milliseconds, as\n            // opposed to month, ytd and year\n            fixedTimes = {\n                millisecond: 1,\n                second: 1000,\n                minute: 60 * 1000,\n                hour: 3600 * 1000,\n                day: 24 * 3600 * 1000,\n                week: 7 * 24 * 3600 * 1000\n            };\n        // Store the range on the button object\n        if (fixedTimes[type]) {\n            rangeOptions._range = fixedTimes[type] * count;\n        }\n        else if (type === 'month' || type === 'year') {\n            rangeOptions._range = {\n                month: 30,\n                year: 365\n            }[type] * 24 * 36e5 * count;\n        }\n        rangeOptions._offsetMin = RangeSelector_pick(rangeOptions.offsetMin, 0);\n        rangeOptions._offsetMax = RangeSelector_pick(rangeOptions.offsetMax, 0);\n        rangeOptions._range +=\n            rangeOptions._offsetMax - rangeOptions._offsetMin;\n    };\n    /**\n     * Get the unix timestamp of a HTML input for the dates\n     *\n     * @private\n     * @function Highcharts.RangeSelector#getInputValue\n     */\n    RangeSelector.prototype.getInputValue = function (name) {\n        var input = name === 'min' ? this.minInput : this.maxInput;\n        var options = this.chart.options\n                .rangeSelector;\n        var time = this.chart.time;\n        if (input) {\n            return ((input.type === 'text' && options.inputDateParser) ||\n                this.defaultInputDateParser)(input.value, time.timezone === 'UTC', time);\n        }\n        return 0;\n    };\n    /**\n     * Set the internal and displayed value of a HTML input for the dates\n     *\n     * @private\n     * @function Highcharts.RangeSelector#setInputValue\n     */\n    RangeSelector.prototype.setInputValue = function (name, inputTime) {\n        var options = this.options, time = this.chart.time, input = name === 'min' ? this.minInput : this.maxInput, dateBox = name === 'min' ? this.minDateBox : this.maxDateBox;\n        if (input) {\n            input.setAttribute('type', preferredInputType(options.inputDateFormat || '%e %b %Y'));\n            var hcTimeAttr = input.getAttribute('data-hc-time');\n            var updatedTime = RangeSelector_defined(hcTimeAttr) ? Number(hcTimeAttr) : void 0;\n            if (RangeSelector_defined(inputTime)) {\n                var previousTime = updatedTime;\n                if (RangeSelector_defined(previousTime)) {\n                    input.setAttribute('data-hc-time-previous', previousTime);\n                }\n                input.setAttribute('data-hc-time', inputTime);\n                updatedTime = inputTime;\n            }\n            input.value = time.dateFormat((this.inputTypeFormats[input.type] ||\n                options.inputEditDateFormat), updatedTime);\n            if (dateBox) {\n                dateBox.attr({\n                    text: time.dateFormat(options.inputDateFormat, updatedTime)\n                });\n            }\n        }\n    };\n    /**\n     * Set the min and max value of a HTML input for the dates\n     *\n     * @private\n     * @function Highcharts.RangeSelector#setInputExtremes\n     */\n    RangeSelector.prototype.setInputExtremes = function (name, min, max) {\n        var input = name === 'min' ? this.minInput : this.maxInput;\n        if (input) {\n            var format = this.inputTypeFormats[input.type];\n            var time = this.chart.time;\n            if (format) {\n                var newMin = time.dateFormat(format,\n                    min);\n                if (input.min !== newMin) {\n                    input.min = newMin;\n                }\n                var newMax = time.dateFormat(format,\n                    max);\n                if (input.max !== newMax) {\n                    input.max = newMax;\n                }\n            }\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.RangeSelector#showInput\n     * @param {string} name\n     */\n    RangeSelector.prototype.showInput = function (name) {\n        var dateBox = name === 'min' ? this.minDateBox : this.maxDateBox, input = name === 'min' ? this.minInput : this.maxInput;\n        if (input && dateBox && this.inputGroup) {\n            var isTextInput = input.type === 'text',\n                _a = this.inputGroup,\n                _b = _a.translateX,\n                translateX = _b === void 0 ? 0 : _b,\n                _c = _a.translateY,\n                translateY = _c === void 0 ? 0 : _c,\n                _d = dateBox.x,\n                x = _d === void 0 ? 0 : _d,\n                _e = dateBox.width,\n                width = _e === void 0 ? 0 : _e,\n                _f = dateBox.height,\n                height = _f === void 0 ? 0 : _f,\n                inputBoxWidth = this.options.inputBoxWidth;\n            RangeSelector_css(input, {\n                width: isTextInput ?\n                    ((width + (inputBoxWidth ? -2 : 20)) + 'px') :\n                    'auto',\n                height: (height - 2) + 'px',\n                border: '2px solid silver'\n            });\n            if (isTextInput && inputBoxWidth) {\n                RangeSelector_css(input, {\n                    left: (translateX + x) + 'px',\n                    top: translateY + 'px'\n                });\n                // Inputs of types date, time or datetime-local should be centered\n                // on top of the dateBox\n            }\n            else {\n                RangeSelector_css(input, {\n                    left: Math.min(Math.round(x +\n                        translateX -\n                        (input.offsetWidth - width) / 2), this.chart.chartWidth - input.offsetWidth) + 'px',\n                    top: (translateY - (input.offsetHeight - height) / 2) + 'px'\n                });\n            }\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.RangeSelector#hideInput\n     * @param {string} name\n     */\n    RangeSelector.prototype.hideInput = function (name) {\n        var input = name === 'min' ? this.minInput : this.maxInput;\n        if (input) {\n            RangeSelector_css(input, {\n                top: '-9999em',\n                border: 0,\n                width: '1px',\n                height: '1px'\n            });\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.RangeSelector#defaultInputDateParser\n     */\n    RangeSelector.prototype.defaultInputDateParser = function (inputDate, useUTC, time) {\n        return (time === null || time === void 0 ? void 0 : time.parse(inputDate)) || 0;\n    };\n    /**\n     * Draw either the 'from' or the 'to' HTML input box of the range selector\n     *\n     * @private\n     * @function Highcharts.RangeSelector#drawInput\n     */\n    RangeSelector.prototype.drawInput = function (name) {\n        var _a = this,\n            chart = _a.chart,\n            div = _a.div,\n            inputGroup = _a.inputGroup;\n        var rangeSelector = this,\n            chartStyle = chart.renderer.style || {},\n            renderer = chart.renderer,\n            options = chart.options.rangeSelector,\n            lang = RangeSelector_defaultOptions.lang,\n            isMin = name === 'min';\n        /**\n         * @private\n         */\n        function updateExtremes(name) {\n            var _a;\n            var maxInput = rangeSelector.maxInput,\n                minInput = rangeSelector.minInput,\n                chartAxis = chart.xAxis[0],\n                unionExtremes = ((_a = chart.scroller) === null || _a === void 0 ? void 0 : _a.getUnionExtremes()) || chartAxis,\n                dataMin = unionExtremes.dataMin,\n                dataMax = unionExtremes.dataMax,\n                currentExtreme = chart.xAxis[0].getExtremes()[name];\n            var value = rangeSelector.getInputValue(name);\n            if (RangeSelector_isNumber(value) && value !== currentExtreme) {\n                // Validate the extremes. If it goes beyond the data min or\n                // max, use the actual data extreme (#2438).\n                if (isMin && maxInput && RangeSelector_isNumber(dataMin)) {\n                    if (value > Number(maxInput.getAttribute('data-hc-time'))) {\n                        value = void 0;\n                    }\n                    else if (value < dataMin) {\n                        value = dataMin;\n                    }\n                }\n                else if (minInput && RangeSelector_isNumber(dataMax)) {\n                    if (value < Number(minInput.getAttribute('data-hc-time'))) {\n                        value = void 0;\n                    }\n                    else if (value > dataMax) {\n                        value = dataMax;\n                    }\n                }\n                // Set the extremes\n                if (typeof value !== 'undefined') { // @todo typeof undefined\n                    chartAxis.setExtremes(isMin ? value : chartAxis.min, isMin ? chartAxis.max : value, void 0, void 0, { trigger: 'rangeSelectorInput' });\n                }\n            }\n        }\n        // Create the text label\n        var text = lang[isMin ? 'rangeSelectorFrom' : 'rangeSelectorTo'] || '';\n        var label = renderer\n                .label(text, 0)\n                .addClass('highcharts-range-label')\n                .attr({\n                padding: text ? 2 : 0,\n                height: text ? options.inputBoxHeight : 0\n            })\n                .add(inputGroup);\n        // Create an SVG label that shows updated date ranges and records click\n        // events that bring in the HTML input.\n        var dateBox = renderer\n                .label('', 0)\n                .addClass('highcharts-range-input')\n                .attr({\n                padding: 2,\n                width: options.inputBoxWidth,\n                height: options.inputBoxHeight,\n                'text-align': 'center'\n            })\n                .on('click',\n            function () {\n                // If it is already focused, the onfocus event doesn't fire\n                // (#3713)\n                rangeSelector.showInput(name);\n            rangeSelector[name + 'Input'].focus();\n        });\n        if (!chart.styledMode) {\n            dateBox.attr({\n                stroke: options.inputBoxBorderColor,\n                'stroke-width': 1\n            });\n        }\n        dateBox.add(inputGroup);\n        // Create the HTML input element. This is rendered as 1x1 pixel then set\n        // to the right size when focused.\n        var input = RangeSelector_createElement('input', {\n                name: name,\n                className: 'highcharts-range-selector'\n            },\n            void 0,\n            div);\n        // #14788: Setting input.type to an unsupported type throws in IE, so\n        // we need to use setAttribute instead\n        input.setAttribute('type', preferredInputType(options.inputDateFormat || '%e %b %Y'));\n        if (!chart.styledMode) {\n            // Styles\n            label.css(RangeSelector_merge(chartStyle, options.labelStyle));\n            dateBox.css(RangeSelector_merge({\n                color: \"#333333\" /* Palette.neutralColor80 */\n            }, chartStyle, options.inputStyle));\n            RangeSelector_css(input, RangeSelector_extend({\n                position: 'absolute',\n                border: 0,\n                boxShadow: '0 0 15px rgba(0,0,0,0.3)',\n                width: '1px', // Chrome needs a pixel to see it\n                height: '1px',\n                padding: 0,\n                textAlign: 'center',\n                fontSize: chartStyle.fontSize,\n                fontFamily: chartStyle.fontFamily,\n                top: '-9999em' // #4798\n            }, options.inputStyle));\n        }\n        // Blow up the input box\n        input.onfocus = function () {\n            rangeSelector.showInput(name);\n        };\n        // Hide away the input box\n        input.onblur = function () {\n            // Update extremes only when inputs are active\n            if (input === Core_Globals.doc.activeElement) { // Only when focused\n                // Update also when no `change` event is triggered, like when\n                // clicking inside the SVG (#4710)\n                updateExtremes(name);\n            }\n            // #10404 - move hide and blur outside focus\n            rangeSelector.hideInput(name);\n            rangeSelector.setInputValue(name);\n            input.blur(); // #4606\n        };\n        var keyDown = false;\n        // Handle changes in the input boxes\n        input.onchange = function () {\n            // Update extremes and blur input when clicking date input calendar\n            if (!keyDown) {\n                updateExtremes(name);\n                rangeSelector.hideInput(name);\n                input.blur();\n            }\n        };\n        input.onkeypress = function (event) {\n            // IE does not fire onchange on enter\n            if (event.keyCode === 13) {\n                updateExtremes(name);\n            }\n        };\n        input.onkeydown = function (event) {\n            keyDown = true;\n            // Arrow keys\n            if (event.key === 'ArrowUp' ||\n                event.key === 'ArrowDown' ||\n                event.key === 'Tab') {\n                updateExtremes(name);\n            }\n        };\n        input.onkeyup = function () {\n            keyDown = false;\n        };\n        return { dateBox: dateBox, input: input, label: label };\n    };\n    /**\n     * Get the position of the range selector buttons and inputs. This can be\n     * overridden from outside for custom positioning.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#getPosition\n     */\n    RangeSelector.prototype.getPosition = function () {\n        var chart = this.chart,\n            options = chart.options.rangeSelector,\n            top = options.verticalAlign === 'top' ?\n                chart.plotTop - chart.axisOffset[0] :\n                0; // Set offset only for verticalAlign top\n            return {\n                buttonTop: top + options.buttonPosition.y,\n                inputTop: top + options.inputPosition.y - 10\n            };\n    };\n    /**\n     * Get the extremes of YTD. Will choose dataMax if its value is lower than\n     * the current timestamp. Will choose dataMin if its value is higher than\n     * the timestamp for the start of current year.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#getYTDExtremes\n     * @return {*}\n     * Returns min and max for the YTD\n     */\n    RangeSelector.prototype.getYTDExtremes = function (dataMax, dataMin) {\n        var time = this.chart.time,\n            year = time.toParts(dataMax)[0],\n            startOfYear = time.makeTime(year, 0);\n        return {\n            max: dataMax,\n            min: Math.max(dataMin, startOfYear)\n        };\n    };\n    RangeSelector.prototype.createElements = function () {\n        var _a;\n        var chart = this.chart,\n            renderer = chart.renderer,\n            container = chart.container,\n            chartOptions = chart.options,\n            options = chartOptions.rangeSelector,\n            inputEnabled = options.inputEnabled,\n            inputsZIndex = RangeSelector_pick((_a = chartOptions.chart.style) === null || _a === void 0 ? void 0 : _a.zIndex, 0) + 1;\n        if (options.enabled === false) {\n            return;\n        }\n        this.group = renderer.g('range-selector-group')\n            .attr({\n            zIndex: 7\n        })\n            .add();\n        this.div = RangeSelector_createElement('div', void 0, {\n            position: 'relative',\n            height: 0,\n            zIndex: inputsZIndex\n        });\n        if (this.buttonOptions.length) {\n            this.renderButtons();\n        }\n        // First create a wrapper outside the container in order to make\n        // the inputs work and make export correct\n        if (container.parentNode) {\n            container.parentNode.insertBefore(this.div, container);\n        }\n        if (inputEnabled) {\n            this.createInputs();\n        }\n    };\n    /**\n     * Create the input elements and its group.\n     *\n     */\n    RangeSelector.prototype.createInputs = function () {\n        this.inputGroup = this.chart.renderer.g('input-group').add(this.group);\n        var minElems = this.drawInput('min');\n        this.minDateBox = minElems.dateBox;\n        this.minLabel = minElems.label;\n        this.minInput = minElems.input;\n        var maxElems = this.drawInput('max');\n        this.maxDateBox = maxElems.dateBox;\n        this.maxLabel = maxElems.label;\n        this.maxInput = maxElems.input;\n    };\n    /**\n     * Render the range selector including the buttons and the inputs. The first\n     * time render is called, the elements are created and positioned. On\n     * subsequent calls, they are moved and updated.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#render\n     * @param {number} [min]\n     *        X axis minimum\n     * @param {number} [max]\n     *        X axis maximum\n     */\n    RangeSelector.prototype.render = function (min, max) {\n        var _a,\n            _b;\n        if (this.options.enabled === false) {\n            return;\n        }\n        var chart = this.chart,\n            chartOptions = chart.options,\n            options = chartOptions.rangeSelector, \n            // Place inputs above the container\n            inputEnabled = options.inputEnabled;\n        if (inputEnabled) {\n            if (!this.inputGroup) {\n                this.createInputs();\n            }\n            // Set or reset the input values\n            this.setInputValue('min', min);\n            this.setInputValue('max', max);\n            if (!this.chart.styledMode) {\n                (_a = this.maxLabel) === null || _a === void 0 ? void 0 : _a.css(options.labelStyle);\n                (_b = this.minLabel) === null || _b === void 0 ? void 0 : _b.css(options.labelStyle);\n            }\n            var unionExtremes = (chart.scroller && chart.scroller.getUnionExtremes()) || chart.xAxis[0] || {};\n            if (RangeSelector_defined(unionExtremes.dataMin) &&\n                RangeSelector_defined(unionExtremes.dataMax)) {\n                var minRange = chart.xAxis[0].minRange || 0;\n                this.setInputExtremes('min', unionExtremes.dataMin, Math.min(unionExtremes.dataMax, this.getInputValue('max')) - minRange);\n                this.setInputExtremes('max', Math.max(unionExtremes.dataMin, this.getInputValue('min')) + minRange, unionExtremes.dataMax);\n            }\n            // Reflow\n            if (this.inputGroup) {\n                var x_1 = 0;\n                [\n                    this.minLabel,\n                    this.minDateBox,\n                    this.maxLabel,\n                    this.maxDateBox\n                ].forEach(function (label) {\n                    if (label) {\n                        var width = label.getBBox().width;\n                        if (width) {\n                            label.attr({ x: x_1 });\n                            x_1 += width + options.inputSpacing;\n                        }\n                    }\n                });\n            }\n        }\n        else {\n            if (this.inputGroup) {\n                this.inputGroup.destroy();\n                delete this.inputGroup;\n            }\n        }\n        if (!this.chart.styledMode) {\n            if (this.zoomText) {\n                this.zoomText.css(options.labelStyle);\n            }\n        }\n        this.alignElements();\n        this.updateButtonStates();\n    };\n    /**\n     * Render the range buttons. This only runs the first time, later the\n     * positioning is laid out in alignElements.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#renderButtons\n     */\n    RangeSelector.prototype.renderButtons = function () {\n        var _this = this;\n        var _a,\n            _b;\n        var _c;\n        var _d = this,\n            chart = _d.chart,\n            options = _d.options;\n        var lang = RangeSelector_defaultOptions.lang;\n        var renderer = chart.renderer;\n        var buttonTheme = RangeSelector_merge(options.buttonTheme);\n        var states = buttonTheme && buttonTheme.states;\n        // Prevent the button from resetting the width when the button state\n        // changes since we need more control over the width when collapsing\n        // the buttons\n        delete buttonTheme.width;\n        delete buttonTheme.states;\n        this.buttonGroup = renderer.g('range-selector-buttons').add(this.group);\n        var dropdown = this.dropdown = RangeSelector_createElement('select',\n            void 0, {\n                position: 'absolute',\n                padding: 0,\n                border: 0,\n                cursor: 'pointer',\n                opacity: 0.0001\n            },\n            this.div);\n        // Create a label for dropdown select element\n        var userButtonTheme = (_a = chart.userOptions.rangeSelector) === null || _a === void 0 ? void 0 : _a.buttonTheme;\n        this.dropdownLabel = renderer.button('', 0, 0, function () { }, RangeSelector_merge(buttonTheme, {\n            'stroke-width': RangeSelector_pick(buttonTheme['stroke-width'], 0),\n            width: 'auto',\n            paddingLeft: RangeSelector_pick(options.buttonTheme.paddingLeft, userButtonTheme === null || userButtonTheme === void 0 ? void 0 : userButtonTheme.padding, 8),\n            paddingRight: RangeSelector_pick(options.buttonTheme.paddingRight, userButtonTheme === null || userButtonTheme === void 0 ? void 0 : userButtonTheme.padding, 8)\n        }), states && states.hover, states && states.select, states && states.disabled)\n            .hide()\n            .add(this.group);\n        // Prevent page zoom on iPhone\n        RangeSelector_addEvent(dropdown, 'touchstart', function () {\n            dropdown.style.fontSize = '16px';\n        });\n        // Forward events from select to button\n        var mouseOver = Core_Globals.isMS ? 'mouseover' : 'mouseenter', mouseOut = Core_Globals.isMS ? 'mouseout' : 'mouseleave';\n        RangeSelector_addEvent(dropdown, mouseOver, function () {\n            RangeSelector_fireEvent(_this.dropdownLabel.element, mouseOver);\n        });\n        RangeSelector_addEvent(dropdown, mouseOut, function () {\n            RangeSelector_fireEvent(_this.dropdownLabel.element, mouseOut);\n        });\n        RangeSelector_addEvent(dropdown, 'change', function () {\n            var button = _this.buttons[dropdown.selectedIndex - 1];\n            RangeSelector_fireEvent(button.element, 'click');\n        });\n        this.zoomText = renderer\n            .label(lang.rangeSelectorZoom || '', 0)\n            .attr({\n            padding: options.buttonTheme.padding,\n            height: options.buttonTheme.height,\n            paddingLeft: 0,\n            paddingRight: 0\n        })\n            .add(this.buttonGroup);\n        if (!this.chart.styledMode) {\n            this.zoomText.css(options.labelStyle);\n            (_b = (_c = options.buttonTheme)['stroke-width']) !== null && _b !== void 0 ? _b : (_c['stroke-width'] = 0);\n        }\n        RangeSelector_createElement('option', {\n            textContent: this.zoomText.textStr,\n            disabled: true\n        }, void 0, dropdown);\n        this.createButtons();\n    };\n    RangeSelector.prototype.createButtons = function () {\n        var _this = this;\n        var options = this.options;\n        var buttonTheme = RangeSelector_merge(options.buttonTheme);\n        var states = buttonTheme && buttonTheme.states;\n        // Prevent the button from resetting the width when the button state\n        // changes since we need more control over the width when collapsing\n        // the buttons\n        var width = buttonTheme.width || 28;\n        delete buttonTheme.width;\n        delete buttonTheme.states;\n        this.buttonOptions.forEach(function (rangeOptions, i) {\n            _this.createButton(rangeOptions, i, width, states);\n        });\n    };\n    RangeSelector.prototype.createButton = function (rangeOptions, i, width, states) {\n        var _this = this;\n        var _a = this,\n            dropdown = _a.dropdown,\n            buttons = _a.buttons,\n            chart = _a.chart,\n            options = _a.options;\n        var renderer = chart.renderer;\n        var buttonTheme = RangeSelector_merge(options.buttonTheme);\n        dropdown === null || dropdown === void 0 ? void 0 : dropdown.add(RangeSelector_createElement('option', {\n            textContent: rangeOptions.title || rangeOptions.text\n        }), i + 2);\n        buttons[i] = renderer\n            .button(rangeOptions.text, 0, 0, function (e) {\n            // Extract events from button object and call\n            var buttonEvents = (rangeOptions.events && rangeOptions.events.click);\n            var callDefaultEvent;\n            if (buttonEvents) {\n                callDefaultEvent =\n                    buttonEvents.call(rangeOptions, e);\n            }\n            if (callDefaultEvent !== false) {\n                _this.clickButton(i);\n            }\n            _this.isActive = true;\n        }, buttonTheme, states && states.hover, states && states.select, states && states.disabled)\n            .attr({\n            'text-align': 'center',\n            width: width\n        })\n            .add(this.buttonGroup);\n        if (rangeOptions.title) {\n            buttons[i].attr('title', rangeOptions.title);\n        }\n    };\n    /**\n     * Align the elements horizontally and vertically.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#alignElements\n     */\n    RangeSelector.prototype.alignElements = function () {\n        var _this = this;\n        var _a;\n        var _b = this,\n            buttonGroup = _b.buttonGroup,\n            buttons = _b.buttons,\n            chart = _b.chart,\n            group = _b.group,\n            inputGroup = _b.inputGroup,\n            options = _b.options,\n            zoomText = _b.zoomText;\n        var chartOptions = chart.options;\n        var navButtonOptions = (chartOptions.exporting &&\n                chartOptions.exporting.enabled !== false &&\n                chartOptions.navigation &&\n                chartOptions.navigation.buttonOptions);\n        var buttonPosition = options.buttonPosition,\n            inputPosition = options.inputPosition,\n            verticalAlign = options.verticalAlign;\n        // Get the X offset required to avoid overlapping with the exporting\n        // button. This is used both by the buttonGroup and the inputGroup.\n        var getXOffsetForExportButton = function (group,\n            position,\n            rightAligned) {\n                if (navButtonOptions &&\n                    _this.titleCollision(chart) &&\n                    verticalAlign === 'top' &&\n                    rightAligned && ((position.y -\n                    group.getBBox().height - 12) <\n                    ((navButtonOptions.y || 0) +\n                        (navButtonOptions.height || 0) +\n                        chart.spacing[0]))) {\n                    return -40;\n            }\n            return 0;\n        };\n        var plotLeft = chart.plotLeft;\n        if (group && buttonPosition && inputPosition) {\n            var translateX = buttonPosition.x - chart.spacing[3];\n            if (buttonGroup) {\n                this.positionButtons();\n                if (!this.initialButtonGroupWidth) {\n                    var width_1 = 0;\n                    if (zoomText) {\n                        width_1 += zoomText.getBBox().width + 5;\n                    }\n                    buttons.forEach(function (button, i) {\n                        width_1 += button.width || 0;\n                        if (i !== buttons.length - 1) {\n                            width_1 += options.buttonSpacing;\n                        }\n                    });\n                    this.initialButtonGroupWidth = width_1;\n                }\n                plotLeft -= chart.spacing[3];\n                // Detect collision between button group and exporting\n                var xOffsetForExportButton_1 = getXOffsetForExportButton(buttonGroup,\n                    buttonPosition,\n                    buttonPosition.align === 'right' ||\n                        inputPosition.align === 'right');\n                this.alignButtonGroup(xOffsetForExportButton_1);\n                if ((_a = this.buttonGroup) === null || _a === void 0 ? void 0 : _a.translateY) {\n                    this.dropdownLabel\n                        .attr({ y: this.buttonGroup.translateY });\n                }\n                // Skip animation\n                group.placed = buttonGroup.placed = chart.hasLoaded;\n            }\n            var xOffsetForExportButton = 0;\n            if (options.inputEnabled && inputGroup) {\n                // Detect collision between the input group and exporting button\n                xOffsetForExportButton = getXOffsetForExportButton(inputGroup, inputPosition, buttonPosition.align === 'right' ||\n                    inputPosition.align === 'right');\n                if (inputPosition.align === 'left') {\n                    translateX = plotLeft;\n                }\n                else if (inputPosition.align === 'right') {\n                    translateX = -Math.max(chart.axisOffset[1], -xOffsetForExportButton);\n                }\n                // Update the alignment to the updated spacing box\n                inputGroup.align({\n                    y: inputPosition.y,\n                    width: inputGroup.getBBox().width,\n                    align: inputPosition.align,\n                    // Fix wrong getBBox() value on right align\n                    x: inputPosition.x + translateX - 2\n                }, true, chart.spacingBox);\n                // Skip animation\n                inputGroup.placed = chart.hasLoaded;\n            }\n            this.handleCollision(xOffsetForExportButton);\n            // Vertical align\n            group.align({\n                verticalAlign: verticalAlign\n            }, true, chart.spacingBox);\n            var alignTranslateY = group.alignAttr.translateY;\n            // Set position\n            var groupHeight = group.getBBox().height + 20; // # 20 padding\n                var translateY = 0;\n            // Calculate bottom position\n            if (verticalAlign === 'bottom') {\n                var legendOptions = chart.legend && chart.legend.options;\n                var legendHeight = (legendOptions &&\n                        legendOptions.verticalAlign === 'bottom' &&\n                        legendOptions.enabled &&\n                        !legendOptions.floating ?\n                        (chart.legend.legendHeight +\n                            RangeSelector_pick(legendOptions.margin, 10)) :\n                        0);\n                groupHeight = groupHeight + legendHeight - 20;\n                translateY = (alignTranslateY -\n                    groupHeight -\n                    (options.floating ? 0 : options.y) -\n                    (chart.titleOffset ? chart.titleOffset[2] : 0) -\n                    10 // 10 spacing\n                );\n            }\n            if (verticalAlign === 'top') {\n                if (options.floating) {\n                    translateY = 0;\n                }\n                if (chart.titleOffset && chart.titleOffset[0]) {\n                    translateY = chart.titleOffset[0];\n                }\n                translateY += ((chart.margin[0] - chart.spacing[0]) || 0);\n            }\n            else if (verticalAlign === 'middle') {\n                if (inputPosition.y === buttonPosition.y) {\n                    translateY = alignTranslateY;\n                }\n                else if (inputPosition.y || buttonPosition.y) {\n                    if (inputPosition.y < 0 ||\n                        buttonPosition.y < 0) {\n                        translateY -= Math.min(inputPosition.y, buttonPosition.y);\n                    }\n                    else {\n                        translateY = alignTranslateY - groupHeight;\n                    }\n                }\n            }\n            group.translate(options.x, options.y + Math.floor(translateY));\n            // Translate HTML inputs\n            var _c = this,\n                minInput = _c.minInput,\n                maxInput = _c.maxInput,\n                dropdown = _c.dropdown;\n            if (options.inputEnabled && minInput && maxInput) {\n                minInput.style.marginTop = group.translateY + 'px';\n                maxInput.style.marginTop = group.translateY + 'px';\n            }\n            if (dropdown) {\n                dropdown.style.marginTop = group.translateY + 'px';\n            }\n        }\n    };\n    /**\n     * @private\n     */\n    RangeSelector.prototype.redrawElements = function () {\n        var _a,\n            _b,\n            _c,\n            _d,\n            _e,\n            _f,\n            _g;\n        var chart = this.chart,\n            _h = this.options,\n            inputBoxHeight = _h.inputBoxHeight,\n            inputBoxBorderColor = _h.inputBoxBorderColor;\n        (_a = this.maxDateBox) === null || _a === void 0 ? void 0 : _a.attr({\n            height: inputBoxHeight\n        });\n        (_b = this.minDateBox) === null || _b === void 0 ? void 0 : _b.attr({\n            height: inputBoxHeight\n        });\n        if (!chart.styledMode) {\n            (_c = this.maxDateBox) === null || _c === void 0 ? void 0 : _c.attr({\n                stroke: inputBoxBorderColor\n            });\n            (_d = this.minDateBox) === null || _d === void 0 ? void 0 : _d.attr({\n                stroke: inputBoxBorderColor\n            });\n        }\n        if (this.isDirty) {\n            this.isDirty = false;\n            // Reset this prop to force redrawing collapse of buttons\n            this.isCollapsed = void 0;\n            var newButtonsOptions = (_e = this.options.buttons) !== null && _e !== void 0 ? _e : [];\n            var btnLength = Math.min(newButtonsOptions.length,\n                this.buttonOptions.length);\n            var _j = this,\n                dropdown = _j.dropdown,\n                options = _j.options;\n            var buttonTheme = RangeSelector_merge(options.buttonTheme);\n            var states = buttonTheme && buttonTheme.states;\n            // Prevent the button from resetting the width when the button state\n            // changes since we need more control over the width when collapsing\n            // the buttons\n            var width = buttonTheme.width || 28;\n            // Destroy additional buttons\n            if (newButtonsOptions.length < this.buttonOptions.length) {\n                for (var i = this.buttonOptions.length - 1; i >= newButtonsOptions.length; i--) {\n                    var btn = this.buttons.pop();\n                    btn === null || btn === void 0 ? void 0 : btn.destroy();\n                    (_f = this.dropdown) === null || _f === void 0 ? void 0 : _f.options.remove(i + 1);\n                }\n            }\n            // Update current buttons\n            for (var i = btnLength - 1; i >= 0; i--) {\n                var diff = RangeSelector_diffObjects(newButtonsOptions[i],\n                    this.buttonOptions[i]);\n                if (Object.keys(diff).length !== 0) {\n                    var rangeOptions = newButtonsOptions[i];\n                    this.buttons[i].destroy();\n                    dropdown === null || dropdown === void 0 ? void 0 : dropdown.options.remove(i + 1);\n                    this.createButton(rangeOptions, i, width, states);\n                    this.computeButtonRange(rangeOptions);\n                }\n            }\n            // Create missing buttons\n            if (newButtonsOptions.length > this.buttonOptions.length) {\n                for (var i = this.buttonOptions.length; i < newButtonsOptions.length; i++) {\n                    this.createButton(newButtonsOptions[i], i, width, states);\n                    this.computeButtonRange(newButtonsOptions[i]);\n                }\n            }\n            this.buttonOptions = (_g = this.options.buttons) !== null && _g !== void 0 ? _g : [];\n            if (RangeSelector_defined(this.options.selected) && this.buttons.length) {\n                this.clickButton(this.options.selected, false);\n            }\n        }\n    };\n    /**\n     * Align the button group horizontally and vertically.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#alignButtonGroup\n     * @param {number} xOffsetForExportButton\n     * @param {number} [width]\n     */\n    RangeSelector.prototype.alignButtonGroup = function (xOffsetForExportButton, width) {\n        var _a = this,\n            chart = _a.chart,\n            options = _a.options,\n            buttonGroup = _a.buttonGroup,\n            dropdown = _a.dropdown,\n            dropdownLabel = _a.dropdownLabel;\n        var buttonPosition = options.buttonPosition;\n        var plotLeft = chart.plotLeft - chart.spacing[3];\n        var translateX = buttonPosition.x - chart.spacing[3];\n        var dropdownTranslateX = chart.plotLeft;\n        if (buttonPosition.align === 'right') {\n            translateX += xOffsetForExportButton - plotLeft; // #13014\n            if (this.hasVisibleDropdown) {\n                dropdownTranslateX = chart.chartWidth +\n                    xOffsetForExportButton -\n                    this.maxButtonWidth() - 20;\n            }\n        }\n        else if (buttonPosition.align === 'center') {\n            translateX -= plotLeft / 2;\n            if (this.hasVisibleDropdown) {\n                dropdownTranslateX = chart.chartWidth / 2 -\n                    this.maxButtonWidth();\n            }\n        }\n        if (dropdown) {\n            RangeSelector_css(dropdown, {\n                left: dropdownTranslateX + 'px',\n                top: (buttonGroup === null || buttonGroup === void 0 ? void 0 : buttonGroup.translateY) + 'px'\n            });\n        }\n        dropdownLabel === null || dropdownLabel === void 0 ? void 0 : dropdownLabel.attr({\n            x: dropdownTranslateX\n        });\n        if (buttonGroup) {\n            // Align button group\n            buttonGroup.align({\n                y: buttonPosition.y,\n                width: RangeSelector_pick(width, this.initialButtonGroupWidth),\n                align: buttonPosition.align,\n                x: translateX\n            }, true, chart.spacingBox);\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.RangeSelector#positionButtons\n     */\n    RangeSelector.prototype.positionButtons = function () {\n        var _a = this,\n            buttons = _a.buttons,\n            chart = _a.chart,\n            options = _a.options,\n            zoomText = _a.zoomText;\n        var verb = chart.hasLoaded ? 'animate' : 'attr';\n        var buttonPosition = options.buttonPosition;\n        var plotLeft = chart.plotLeft;\n        var buttonLeft = plotLeft;\n        if (zoomText && zoomText.visibility !== 'hidden') {\n            // #8769, allow dynamically updating margins\n            zoomText[verb]({\n                x: RangeSelector_pick(plotLeft + buttonPosition.x, plotLeft)\n            });\n            // Button start position\n            buttonLeft += buttonPosition.x +\n                zoomText.getBBox().width + 5;\n        }\n        for (var i = 0, iEnd = this.buttonOptions.length; i < iEnd; ++i) {\n            if (buttons[i].visibility !== 'hidden') {\n                buttons[i][verb]({ x: buttonLeft });\n                // Increase the button position for the next button\n                buttonLeft += (buttons[i].width || 0) + options.buttonSpacing;\n            }\n            else {\n                buttons[i][verb]({ x: plotLeft });\n            }\n        }\n    };\n    /**\n     * Handle collision between the button group and the input group\n     *\n     * @private\n     * @function Highcharts.RangeSelector#handleCollision\n     *\n     * @param  {number} xOffsetForExportButton\n     *                  The X offset of the group required to make room for the\n     *                  exporting button\n     */\n    RangeSelector.prototype.handleCollision = function (xOffsetForExportButton) {\n        var _a = this,\n            chart = _a.chart,\n            buttonGroup = _a.buttonGroup,\n            inputGroup = _a.inputGroup,\n            initialButtonGroupWidth = _a.initialButtonGroupWidth;\n        var _b = this.options,\n            buttonPosition = _b.buttonPosition,\n            dropdown = _b.dropdown,\n            inputPosition = _b.inputPosition;\n        var moveInputsDown = function () {\n                if (inputGroup && buttonGroup) {\n                    inputGroup.attr({\n                        translateX: inputGroup.alignAttr.translateX + (chart.axisOffset[1] >= -xOffsetForExportButton ?\n                            0 :\n                            -xOffsetForExportButton),\n                        translateY: inputGroup.alignAttr.translateY +\n                            buttonGroup.getBBox().height + 10\n                    });\n            }\n        };\n        // Detect collision\n        if (inputGroup && buttonGroup) {\n            if (inputPosition.align === buttonPosition.align) {\n                moveInputsDown();\n                if (initialButtonGroupWidth >\n                    chart.plotWidth + xOffsetForExportButton - 20) {\n                    this.collapseButtons();\n                }\n                else {\n                    this.expandButtons();\n                }\n            }\n            else if (initialButtonGroupWidth -\n                xOffsetForExportButton +\n                inputGroup.getBBox().width >\n                chart.plotWidth) {\n                if (dropdown === 'responsive') {\n                    this.collapseButtons();\n                }\n                else {\n                    moveInputsDown();\n                }\n            }\n            else {\n                this.expandButtons();\n            }\n        }\n        else if (buttonGroup && dropdown === 'responsive') {\n            if (initialButtonGroupWidth > chart.plotWidth) {\n                this.collapseButtons();\n            }\n            else {\n                this.expandButtons();\n            }\n        }\n        // Forced states\n        if (buttonGroup) {\n            if (dropdown === 'always') {\n                this.collapseButtons();\n            }\n            if (dropdown === 'never') {\n                this.expandButtons();\n            }\n        }\n        this.alignButtonGroup(xOffsetForExportButton);\n    };\n    /**\n     * Collapse the buttons and show the select element.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#collapseButtons\n     * @param {number} xOffsetForExportButton\n     */\n    RangeSelector.prototype.collapseButtons = function () {\n        var _a = this,\n            buttons = _a.buttons,\n            zoomText = _a.zoomText;\n        if (this.isCollapsed === true) {\n            return;\n        }\n        this.isCollapsed = true;\n        zoomText.hide();\n        buttons.forEach(function (button) { return void button.hide(); });\n        this.showDropdown();\n    };\n    /**\n     * Show all the buttons and hide the select element.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#expandButtons\n     */\n    RangeSelector.prototype.expandButtons = function () {\n        var _a = this,\n            buttons = _a.buttons,\n            zoomText = _a.zoomText;\n        if (this.isCollapsed === false) {\n            return;\n        }\n        this.isCollapsed = false;\n        this.hideDropdown();\n        zoomText.show();\n        buttons.forEach(function (button) { return void button.show(); });\n        this.positionButtons();\n    };\n    /**\n     * Position the select element on top of the button.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#showDropdown\n     */\n    RangeSelector.prototype.showDropdown = function () {\n        var _a = this,\n            buttonGroup = _a.buttonGroup,\n            dropdownLabel = _a.dropdownLabel,\n            dropdown = _a.dropdown;\n        if (buttonGroup && dropdown) {\n            dropdownLabel.show();\n            RangeSelector_css(dropdown, { visibility: 'inherit' });\n            this.hasVisibleDropdown = true;\n        }\n    };\n    /**\n     * @private\n     * @function Highcharts.RangeSelector#hideDropdown\n     */\n    RangeSelector.prototype.hideDropdown = function () {\n        var dropdown = this.dropdown;\n        if (dropdown) {\n            this.dropdownLabel.hide();\n            RangeSelector_css(dropdown, {\n                visibility: 'hidden',\n                width: '1px',\n                height: '1px'\n            });\n            this.hasVisibleDropdown = false;\n        }\n    };\n    /**\n     * Extracts height of range selector\n     *\n     * @private\n     * @function Highcharts.RangeSelector#getHeight\n     * @return {number}\n     * Returns rangeSelector height\n     */\n    RangeSelector.prototype.getHeight = function () {\n        var rangeSelector = this,\n            options = rangeSelector.options,\n            rangeSelectorGroup = rangeSelector.group,\n            inputPosition = options.inputPosition,\n            buttonPosition = options.buttonPosition,\n            yPosition = options.y,\n            buttonPositionY = buttonPosition.y,\n            inputPositionY = inputPosition.y;\n        var rangeSelectorHeight = 0;\n        if (options.height) {\n            return options.height;\n        }\n        // Align the elements before we read the height in case we're switching\n        // between wrapped and non-wrapped layout\n        this.alignElements();\n        rangeSelectorHeight = rangeSelectorGroup ?\n            // 13px to keep back compatibility\n            (rangeSelectorGroup.getBBox(true).height) + 13 +\n                yPosition :\n            0;\n        var minPosition = Math.min(inputPositionY,\n            buttonPositionY);\n        if ((inputPositionY < 0 && buttonPositionY < 0) ||\n            (inputPositionY > 0 && buttonPositionY > 0)) {\n            rangeSelectorHeight += Math.abs(minPosition);\n        }\n        return rangeSelectorHeight;\n    };\n    /**\n     * Detect collision with title or subtitle\n     *\n     * @private\n     * @function Highcharts.RangeSelector#titleCollision\n     * @return {boolean}\n     * Returns collision status\n     */\n    RangeSelector.prototype.titleCollision = function (chart) {\n        return !(chart.options.title.text ||\n            chart.options.subtitle.text);\n    };\n    /**\n     * Update the range selector with new options\n     *\n     * @private\n     * @function Highcharts.RangeSelector#update\n     * @param {Highcharts.RangeSelectorOptions} options\n     */\n    RangeSelector.prototype.update = function (options, redraw) {\n        if (redraw === void 0) { redraw = true; }\n        var chart = this.chart;\n        RangeSelector_merge(true, this.options, options);\n        if (this.options.selected &&\n            this.options.selected >= this.options.buttons.length) {\n            this.options.selected = void 0;\n            chart.options.rangeSelector.selected = void 0;\n        }\n        if (RangeSelector_defined(options.enabled)) {\n            this.destroy();\n            return this.init(chart);\n        }\n        this.isDirty = !!options.buttons;\n        if (redraw) {\n            this.render();\n        }\n    };\n    /**\n     * Destroys allocated elements.\n     *\n     * @private\n     * @function Highcharts.RangeSelector#destroy\n     */\n    RangeSelector.prototype.destroy = function () {\n        var rSelector = this,\n            minInput = rSelector.minInput,\n            maxInput = rSelector.maxInput;\n        if (rSelector.eventsToUnbind) {\n            rSelector.eventsToUnbind.forEach(function (unbind) { return unbind(); });\n            rSelector.eventsToUnbind = void 0;\n        }\n        // Destroy elements in collections\n        RangeSelector_destroyObjectProperties(rSelector.buttons);\n        // Clear input element events\n        if (minInput) {\n            minInput.onfocus = minInput.onblur = minInput.onchange = null;\n        }\n        if (maxInput) {\n            maxInput.onfocus = maxInput.onblur = maxInput.onchange = null;\n        }\n        // Destroy HTML and SVG elements\n        RangeSelector_objectEach(rSelector, function (val, key) {\n            if (val && key !== 'chart') {\n                if (val instanceof SVG_SVGElement) {\n                    // SVGElement\n                    val.destroy();\n                }\n                else if (val instanceof window.HTMLElement) {\n                    // HTML element\n                    RangeSelector_discardElement(val);\n                }\n                delete rSelector[key];\n            }\n            if (val !== RangeSelector.prototype[key]) {\n                rSelector[key] = null;\n            }\n        }, this);\n        this.buttons = [];\n    };\n    return RangeSelector;\n}());\nRangeSelector_extend(RangeSelector.prototype, {\n    /**\n     * The date formats to use when setting min, max and value on date inputs.\n     * @private\n     */\n    inputTypeFormats: {\n        'datetime-local': '%Y-%m-%dT%H:%M:%S',\n        'date': '%Y-%m-%d',\n        'time': '%H:%M:%S'\n    }\n});\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var RangeSelector_RangeSelector = (RangeSelector);\n/* *\n *\n *  API Options\n *\n * */\n/**\n * Define the time span for the button\n *\n * @typedef {\"all\"|\"day\"|\"hour\"|\"millisecond\"|\"minute\"|\"month\"|\"second\"|\"week\"|\"year\"|\"ytd\"} Highcharts.RangeSelectorButtonTypeValue\n */\n/**\n * Callback function to react on button clicks.\n *\n * @callback Highcharts.RangeSelectorClickCallbackFunction\n *\n * @param {global.Event} e\n *        Event arguments.\n *\n * @param {boolean|undefined}\n *        Return false to cancel the default button event.\n */\n/**\n * Callback function to parse values entered in the input boxes and return a\n * valid JavaScript time as milliseconds since 1970.\n *\n * @callback Highcharts.RangeSelectorParseCallbackFunction\n *\n * @param {string} value\n *        Input value to parse.\n *\n * @return {number}\n *         Parsed JavaScript time value.\n */\n(''); // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Series/PathUtilities.js\n/* *\n *\n *  (c) 2010-2024 Pawel Lysy\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar getLinkPath = {\n    'default': getDefaultPath,\n    straight: getStraightPath,\n    curved: getCurvedPath\n};\n/**\n *\n */\nfunction getDefaultPath(pathParams) {\n    var x1 = pathParams.x1,\n        y1 = pathParams.y1,\n        x2 = pathParams.x2,\n        y2 = pathParams.y2,\n        _a = pathParams.width,\n        width = _a === void 0 ? 0 : _a,\n        _b = pathParams.inverted,\n        inverted = _b === void 0 ? false : _b,\n        radius = pathParams.radius,\n        parentVisible = pathParams.parentVisible;\n    var path = [\n            ['M',\n        x1,\n        y1],\n            ['L',\n        x1,\n        y1],\n            ['C',\n        x1,\n        y1,\n        x1,\n        y2,\n        x1,\n        y2],\n            ['L',\n        x1,\n        y2],\n            ['C',\n        x1,\n        y1,\n        x1,\n        y2,\n        x1,\n        y2],\n            ['L',\n        x1,\n        y2]\n        ];\n    return parentVisible ?\n        applyRadius([\n            ['M', x1, y1],\n            ['L', x1 + width * (inverted ? -0.5 : 0.5), y1],\n            ['L', x1 + width * (inverted ? -0.5 : 0.5), y2],\n            ['L', x2, y2]\n        ], radius) :\n        path;\n}\n/**\n *\n */\nfunction getStraightPath(pathParams) {\n    var x1 = pathParams.x1,\n        y1 = pathParams.y1,\n        x2 = pathParams.x2,\n        y2 = pathParams.y2,\n        _a = pathParams.width,\n        width = _a === void 0 ? 0 : _a,\n        _b = pathParams.inverted,\n        inverted = _b === void 0 ? false : _b,\n        parentVisible = pathParams.parentVisible;\n    return parentVisible ? [\n        ['M', x1, y1],\n        ['L', x1 + width * (inverted ? -1 : 1), y2],\n        ['L', x2, y2]\n    ] : [\n        ['M', x1, y1],\n        ['L', x1, y2],\n        ['L', x1, y2]\n    ];\n}\n/**\n *\n */\nfunction getCurvedPath(pathParams) {\n    var x1 = pathParams.x1,\n        y1 = pathParams.y1,\n        x2 = pathParams.x2,\n        y2 = pathParams.y2,\n        _a = pathParams.offset,\n        offset = _a === void 0 ? 0 : _a,\n        _b = pathParams.width,\n        width = _b === void 0 ? 0 : _b,\n        _c = pathParams.inverted,\n        inverted = _c === void 0 ? false : _c,\n        parentVisible = pathParams.parentVisible;\n    return parentVisible ?\n        [\n            ['M', x1, y1],\n            [\n                'C',\n                x1 + offset,\n                y1,\n                x1 - offset + width * (inverted ? -1 : 1),\n                y2,\n                x1 + width * (inverted ? -1 : 1),\n                y2\n            ],\n            ['L', x2, y2]\n        ] :\n        [\n            ['M', x1, y1],\n            ['C', x1, y1, x1, y2, x1, y2],\n            ['L', x2, y2]\n        ];\n}\n/**\n * General function to apply corner radius to a path\n * @private\n */\nfunction applyRadius(path, r) {\n    var d = [];\n    for (var i = 0; i < path.length; i++) {\n        var x = path[i][1];\n        var y = path[i][2];\n        if (typeof x === 'number' && typeof y === 'number') {\n            // MoveTo\n            if (i === 0) {\n                d.push(['M', x, y]);\n            }\n            else if (i === path.length - 1) {\n                d.push(['L', x, y]);\n                // CurveTo\n            }\n            else if (r) {\n                var prevSeg = path[i - 1];\n                var nextSeg = path[i + 1];\n                if (prevSeg && nextSeg) {\n                    var x1 = prevSeg[1],\n                        y1 = prevSeg[2],\n                        x2 = nextSeg[1],\n                        y2 = nextSeg[2];\n                    // Only apply to breaks\n                    if (typeof x1 === 'number' &&\n                        typeof x2 === 'number' &&\n                        typeof y1 === 'number' &&\n                        typeof y2 === 'number' &&\n                        x1 !== x2 &&\n                        y1 !== y2) {\n                        var directionX = x1 < x2 ? 1 : -1,\n                            directionY = y1 < y2 ? 1 : -1;\n                        d.push([\n                            'L',\n                            x - directionX * Math.min(Math.abs(x - x1), r),\n                            y - directionY * Math.min(Math.abs(y - y1), r)\n                        ], [\n                            'C',\n                            x,\n                            y,\n                            x,\n                            y,\n                            x + directionX * Math.min(Math.abs(x - x2), r),\n                            y + directionY * Math.min(Math.abs(y - y2), r)\n                        ]);\n                    }\n                }\n                // LineTo\n            }\n            else {\n                d.push(['L', x, y]);\n            }\n        }\n    }\n    return d;\n}\nvar PathUtilities = {\n    applyRadius: applyRadius,\n    getLinkPath: getLinkPath\n};\n/* harmony default export */ var Series_PathUtilities = (PathUtilities);\n\n;// ./code/es5/es-modules/Gantt/PathfinderAlgorithms.js\n/* *\n *\n *  (c) 2016 Highsoft AS\n *  Author: Øystein Moseng\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar PathfinderAlgorithms_pick = Core_Utilities.pick;\n/* *\n *\n *  Constants\n *\n * */\nvar PathfinderAlgorithms_min = Math.min, PathfinderAlgorithms_max = Math.max, abs = Math.abs;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Get index of last obstacle before xMin. Employs a type of binary search, and\n * thus requires that obstacles are sorted by xMin value.\n *\n * @private\n * @function findLastObstacleBefore\n *\n * @param {Array<object>} obstacles\n *        Array of obstacles to search in.\n *\n * @param {number} xMin\n *        The xMin threshold.\n *\n * @param {number} [startIx]\n *        Starting index to search from. Must be within array range.\n *\n * @return {number}\n *         The index of the last obstacle element before xMin.\n */\nfunction findLastObstacleBefore(obstacles, xMin, startIx) {\n    var min = xMin - 0.0000001; // Make sure we include all obstacles at xMin\n        var left = startIx || 0, // Left limit\n        right = obstacles.length - 1, // Right limit\n        cursor,\n        cmp;\n    while (left <= right) {\n        cursor = (right + left) >> 1;\n        cmp = min - obstacles[cursor].xMin;\n        if (cmp > 0) {\n            left = cursor + 1;\n        }\n        else if (cmp < 0) {\n            right = cursor - 1;\n        }\n        else {\n            return cursor;\n        }\n    }\n    return left > 0 ? left - 1 : 0;\n}\n/**\n * Test if a point lays within an obstacle.\n *\n * @private\n * @function pointWithinObstacle\n *\n * @param {Object} obstacle\n *        Obstacle to test.\n *\n * @param {Highcharts.Point} point\n *        Point with x/y props.\n *\n * @return {boolean}\n *         Whether point is within the obstacle or not.\n */\nfunction pointWithinObstacle(obstacle, point) {\n    return (point.x <= obstacle.xMax &&\n        point.x >= obstacle.xMin &&\n        point.y <= obstacle.yMax &&\n        point.y >= obstacle.yMin);\n}\n/**\n * Find the index of an obstacle that wraps around a point.\n * Returns -1 if not found.\n *\n * @private\n * @function findObstacleFromPoint\n *\n * @param {Array<object>} obstacles\n *        Obstacles to test.\n *\n * @param {Highcharts.Point} point\n *        Point with x/y props.\n *\n * @return {number}\n *         Ix of the obstacle in the array, or -1 if not found.\n */\nfunction findObstacleFromPoint(obstacles, point) {\n    var i = findLastObstacleBefore(obstacles,\n        point.x + 1) + 1;\n    while (i--) {\n        if (obstacles[i].xMax >= point.x &&\n            // Optimization using lazy evaluation\n            pointWithinObstacle(obstacles[i], point)) {\n            return i;\n        }\n    }\n    return -1;\n}\n/**\n * Get SVG path array from array of line segments.\n *\n * @private\n * @function pathFromSegments\n *\n * @param {Array<object>} segments\n *        The segments to build the path from.\n *\n * @return {Highcharts.SVGPathArray}\n *         SVG path array as accepted by the SVG Renderer.\n */\nfunction pathFromSegments(segments) {\n    var path = [];\n    if (segments.length) {\n        path.push(['M', segments[0].start.x, segments[0].start.y]);\n        for (var i = 0; i < segments.length; ++i) {\n            path.push(['L', segments[i].end.x, segments[i].end.y]);\n        }\n    }\n    return path;\n}\n/**\n * Limits obstacle max/mins in all directions to bounds. Modifies input\n * obstacle.\n *\n * @private\n * @function limitObstacleToBounds\n *\n * @param {Object} obstacle\n *        Obstacle to limit.\n *\n * @param {Object} bounds\n *        Bounds to use as limit.\n *\n * @return {void}\n */\nfunction limitObstacleToBounds(obstacle, bounds) {\n    obstacle.yMin = PathfinderAlgorithms_max(obstacle.yMin, bounds.yMin);\n    obstacle.yMax = PathfinderAlgorithms_min(obstacle.yMax, bounds.yMax);\n    obstacle.xMin = PathfinderAlgorithms_max(obstacle.xMin, bounds.xMin);\n    obstacle.xMax = PathfinderAlgorithms_min(obstacle.xMax, bounds.xMax);\n}\n/**\n * Get an SVG path from a starting coordinate to an ending coordinate.\n * Draws a straight line.\n *\n * @function Highcharts.Pathfinder.algorithms.straight\n *\n * @param {Highcharts.PositionObject} start\n *        Starting coordinate, object with x/y props.\n *\n * @param {Highcharts.PositionObject} end\n *        Ending coordinate, object with x/y props.\n *\n * @return {Object}\n *         An object with the SVG path in Array form as accepted by the SVG\n *         renderer, as well as an array of new obstacles making up this\n *         path.\n */\nfunction straight(start, end) {\n    return {\n        path: [\n            ['M', start.x, start.y],\n            ['L', end.x, end.y]\n        ],\n        obstacles: [{ start: start, end: end }]\n    };\n}\n/**\n * Find a path from a starting coordinate to an ending coordinate, using\n * right angles only, and taking only starting/ending obstacle into\n * consideration.\n *\n * @function Highcharts.Pathfinder.algorithms.simpleConnect\n *\n * @param {Highcharts.PositionObject} start\n *        Starting coordinate, object with x/y props.\n *\n * @param {Highcharts.PositionObject} end\n *        Ending coordinate, object with x/y props.\n *\n * @param {Object} options\n *        Options for the algorithm:\n *        - chartObstacles: Array of chart obstacles to avoid\n *        - startDirectionX: Optional. True if starting in the X direction.\n *          If not provided, the algorithm starts in the direction that is\n *          the furthest between start/end.\n *\n * @return {Object}\n *         An object with the SVG path in Array form as accepted by the SVG\n *         renderer, as well as an array of new obstacles making up this\n *         path.\n */\nvar simpleConnect = function (start, end, options) {\n    var segments = [],\n        chartObstacles = options.chartObstacles,\n        startObstacleIx = findObstacleFromPoint(chartObstacles,\n        start),\n        endObstacleIx = findObstacleFromPoint(chartObstacles,\n        end);\n    var endSegment,\n        dir = PathfinderAlgorithms_pick(options.startDirectionX,\n        abs(end.x - start.x) > abs(end.y - start.y)) ? 'x' : 'y',\n        startObstacle,\n        endObstacle,\n        waypoint,\n        useMax,\n        endPoint;\n    // eslint-disable-next-line valid-jsdoc\n    /**\n     * Return a clone of a point with a property set from a target object,\n     * optionally with an offset\n     * @private\n     */\n    function copyFromPoint(from, fromKey, to, toKey, offset) {\n        var point = {\n                x: from.x,\n                y: from.y\n            };\n        point[fromKey] = to[toKey || fromKey] + (offset || 0);\n        return point;\n    }\n    // eslint-disable-next-line valid-jsdoc\n    /**\n     * Return waypoint outside obstacle.\n     * @private\n     */\n    function getMeOut(obstacle, point, direction) {\n        var useMax = abs(point[direction] - obstacle[direction + 'Min']) >\n                abs(point[direction] - obstacle[direction + 'Max']);\n        return copyFromPoint(point, direction, obstacle, direction + (useMax ? 'Max' : 'Min'), useMax ? 1 : -1);\n    }\n    // Pull out end point\n    if (endObstacleIx > -1) {\n        endObstacle = chartObstacles[endObstacleIx];\n        waypoint = getMeOut(endObstacle, end, dir);\n        endSegment = {\n            start: waypoint,\n            end: end\n        };\n        endPoint = waypoint;\n    }\n    else {\n        endPoint = end;\n    }\n    // If an obstacle envelops the start point, add a segment to get out,\n    // and around it.\n    if (startObstacleIx > -1) {\n        startObstacle = chartObstacles[startObstacleIx];\n        waypoint = getMeOut(startObstacle, start, dir);\n        segments.push({\n            start: start,\n            end: waypoint\n        });\n        // If we are going back again, switch direction to get around start\n        // obstacle.\n        if (\n        // Going towards max from start:\n        waypoint[dir] >= start[dir] ===\n            // Going towards min to end:\n            waypoint[dir] >= endPoint[dir]) {\n            dir = dir === 'y' ? 'x' : 'y';\n            useMax = start[dir] < end[dir];\n            segments.push({\n                start: waypoint,\n                end: copyFromPoint(waypoint, dir, startObstacle, dir + (useMax ? 'Max' : 'Min'), useMax ? 1 : -1)\n            });\n            // Switch direction again\n            dir = dir === 'y' ? 'x' : 'y';\n        }\n    }\n    // We are around the start obstacle. Go towards the end in one\n    // direction.\n    var prevWaypoint = segments.length ?\n            segments[segments.length - 1].end :\n            start;\n    waypoint = copyFromPoint(prevWaypoint, dir, endPoint);\n    segments.push({\n        start: prevWaypoint,\n        end: waypoint\n    });\n    // Final run to end point in the other direction\n    dir = dir === 'y' ? 'x' : 'y';\n    var waypoint2 = copyFromPoint(waypoint,\n        dir,\n        endPoint);\n    segments.push({\n        start: waypoint,\n        end: waypoint2\n    });\n    // Finally add the endSegment\n    segments.push(endSegment);\n    var path = Series_PathUtilities.applyRadius(pathFromSegments(segments),\n        options.radius);\n    return {\n        path: path,\n        obstacles: segments\n    };\n};\nsimpleConnect.requiresObstacles = true;\n/**\n * Find a path from a starting coordinate to an ending coordinate, taking\n * obstacles into consideration. Might not always find the optimal path,\n * but is fast, and usually good enough.\n *\n * @function Highcharts.Pathfinder.algorithms.fastAvoid\n *\n * @param {Highcharts.PositionObject} start\n *        Starting coordinate, object with x/y props.\n *\n * @param {Highcharts.PositionObject} end\n *        Ending coordinate, object with x/y props.\n *\n * @param {Object} options\n *        Options for the algorithm.\n *        - chartObstacles:  Array of chart obstacles to avoid\n *        - lineObstacles:   Array of line obstacles to jump over\n *        - obstacleMetrics: Object with metrics of chartObstacles cached\n *        - hardBounds:      Hard boundaries to not cross\n *        - obstacleOptions: Options for the obstacles, including margin\n *        - startDirectionX: Optional. True if starting in the X direction.\n *                           If not provided, the algorithm starts in the\n *                           direction that is the furthest between\n *                           start/end.\n *\n * @return {Object}\n *         An object with the SVG path in Array form as accepted by the SVG\n *         renderer, as well as an array of new obstacles making up this\n *         path.\n */\nfunction fastAvoid(start, end, options) {\n    /*\n        Algorithm rules/description\n        - Find initial direction\n        - Determine soft/hard max for each direction.\n        - Move along initial direction until obstacle.\n        - Change direction.\n        - If hitting obstacle, first try to change length of previous line\n            before changing direction again.\n\n        Soft min/max x = start/destination x +/- widest obstacle + margin\n        Soft min/max y = start/destination y +/- tallest obstacle + margin\n\n        @todo:\n            - Make retrospective, try changing prev segment to reduce\n                corners\n            - Fix logic for breaking out of end-points - not always picking\n                the best direction currently\n            - When going around the end obstacle we should not always go the\n                shortest route, rather pick the one closer to the end point\n    */\n    var dirIsX = PathfinderAlgorithms_pick(options.startDirectionX,\n        abs(end.x - start.x) > abs(end.y - start.y)),\n        dir = dirIsX ? 'x' : 'y',\n        endSegments = [], \n        // Boundaries to stay within. If beyond soft boundary, prefer to\n        // change direction ASAP. If at hard max, always change immediately.\n        metrics = options.obstacleMetrics,\n        softMinX = PathfinderAlgorithms_min(start.x,\n        end.x) - metrics.maxWidth - 10,\n        softMaxX = PathfinderAlgorithms_max(start.x,\n        end.x) + metrics.maxWidth + 10,\n        softMinY = PathfinderAlgorithms_min(start.y,\n        end.y) - metrics.maxHeight - 10,\n        softMaxY = PathfinderAlgorithms_max(start.y,\n        end.y) + metrics.maxHeight + 10;\n    var segments,\n        useMax,\n        extractedEndPoint,\n        forceObstacleBreak = false, // Used in clearPathTo to keep track of\n        // when to force break through an obstacle.\n        // Obstacles\n        chartObstacles = options.chartObstacles,\n        endObstacleIx = findLastObstacleBefore(chartObstacles,\n        softMaxX);\n    var startObstacleIx = findLastObstacleBefore(chartObstacles,\n        softMinX);\n    // eslint-disable-next-line valid-jsdoc\n    /**\n     * How far can you go between two points before hitting an obstacle?\n     * Does not work for diagonal lines (because it doesn't have to).\n     * @private\n     */\n    function pivotPoint(fromPoint, toPoint, directionIsX) {\n        var searchDirection = fromPoint.x < toPoint.x ? 1 : -1;\n        var firstPoint,\n            lastPoint,\n            highestPoint,\n            lowestPoint;\n        if (fromPoint.x < toPoint.x) {\n            firstPoint = fromPoint;\n            lastPoint = toPoint;\n        }\n        else {\n            firstPoint = toPoint;\n            lastPoint = fromPoint;\n        }\n        if (fromPoint.y < toPoint.y) {\n            lowestPoint = fromPoint;\n            highestPoint = toPoint;\n        }\n        else {\n            lowestPoint = toPoint;\n            highestPoint = fromPoint;\n        }\n        // Go through obstacle range in reverse if toPoint is before\n        // fromPoint in the X-dimension.\n        var i = searchDirection < 0 ?\n                // Searching backwards, start at last obstacle before last point\n                PathfinderAlgorithms_min(findLastObstacleBefore(chartObstacles,\n            lastPoint.x),\n            chartObstacles.length - 1) :\n                // Forwards. Since we're not sorted by xMax, we have to look\n                // at all obstacles.\n                0;\n        // Go through obstacles in this X range\n        while (chartObstacles[i] && (searchDirection > 0 && chartObstacles[i].xMin <= lastPoint.x ||\n            searchDirection < 0 && chartObstacles[i].xMax >= firstPoint.x)) {\n            // If this obstacle is between from and to points in a straight\n            // line, pivot at the intersection.\n            if (chartObstacles[i].xMin <= lastPoint.x &&\n                chartObstacles[i].xMax >= firstPoint.x &&\n                chartObstacles[i].yMin <= highestPoint.y &&\n                chartObstacles[i].yMax >= lowestPoint.y) {\n                if (directionIsX) {\n                    return {\n                        y: fromPoint.y,\n                        x: fromPoint.x < toPoint.x ?\n                            chartObstacles[i].xMin - 1 :\n                            chartObstacles[i].xMax + 1,\n                        obstacle: chartObstacles[i]\n                    };\n                }\n                // Else ...\n                return {\n                    x: fromPoint.x,\n                    y: fromPoint.y < toPoint.y ?\n                        chartObstacles[i].yMin - 1 :\n                        chartObstacles[i].yMax + 1,\n                    obstacle: chartObstacles[i]\n                };\n            }\n            i += searchDirection;\n        }\n        return toPoint;\n    }\n    /**\n     * Decide in which direction to dodge or get out of an obstacle.\n     * Considers desired direction, which way is shortest, soft and hard\n     * bounds.\n     *\n     * (? Returns a string, either xMin, xMax, yMin or yMax.)\n     *\n     * @private\n     * @function\n     *\n     * @param {Object} obstacle\n     *        Obstacle to dodge/escape.\n     *\n     * @param {Object} fromPoint\n     *        Point with x/y props that's dodging/escaping.\n     *\n     * @param {Object} toPoint\n     *        Goal point.\n     *\n     * @param {boolean} dirIsX\n     *        Dodge in X dimension.\n     *\n     * @param {Object} bounds\n     *        Hard and soft boundaries.\n     *\n     * @return {boolean}\n     *         Use max or not.\n     */\n    function getDodgeDirection(obstacle, fromPoint, toPoint, dirIsX, bounds) {\n        var softBounds = bounds.soft, hardBounds = bounds.hard, dir = dirIsX ? 'x' : 'y', toPointMax = { x: fromPoint.x, y: fromPoint.y }, toPointMin = { x: fromPoint.x, y: fromPoint.y }, maxOutOfSoftBounds = obstacle[dir + 'Max'] >=\n                softBounds[dir + 'Max'], minOutOfSoftBounds = obstacle[dir + 'Min'] <=\n                softBounds[dir + 'Min'], maxOutOfHardBounds = obstacle[dir + 'Max'] >=\n                hardBounds[dir + 'Max'], minOutOfHardBounds = obstacle[dir + 'Min'] <=\n                hardBounds[dir + 'Min'], \n            // Find out if we should prefer one direction over the other if\n            // we can choose freely\n            minDistance = abs(obstacle[dir + 'Min'] - fromPoint[dir]), maxDistance = abs(obstacle[dir + 'Max'] - fromPoint[dir]);\n        var // If it's a small difference, pick the one leading towards dest\n            // point. Otherwise pick the shortest distance\n            useMax = abs(minDistance - maxDistance) < 10 ?\n                fromPoint[dir] < toPoint[dir] :\n                maxDistance < minDistance;\n        // Check if we hit any obstacles trying to go around in either\n        // direction.\n        toPointMin[dir] = obstacle[dir + 'Min'];\n        toPointMax[dir] = obstacle[dir + 'Max'];\n        var minPivot = pivotPoint(fromPoint,\n            toPointMin,\n            dirIsX)[dir] !==\n                toPointMin[dir],\n            maxPivot = pivotPoint(fromPoint,\n            toPointMax,\n            dirIsX)[dir] !==\n                toPointMax[dir];\n        useMax = minPivot ?\n            (maxPivot ? useMax : true) :\n            (maxPivot ? false : useMax);\n        // `useMax` now contains our preferred choice, bounds not taken into\n        // account. If both or neither direction is out of bounds we want to\n        // use this.\n        // Deal with soft bounds\n        useMax = minOutOfSoftBounds ?\n            (maxOutOfSoftBounds ? useMax : true) : // Out on min\n            (maxOutOfSoftBounds ? false : useMax); // Not out on min\n        // Deal with hard bounds\n        useMax = minOutOfHardBounds ?\n            (maxOutOfHardBounds ? useMax : true) : // Out on min\n            (maxOutOfHardBounds ? false : useMax); // Not out on min\n        return useMax;\n    }\n    // eslint-disable-next-line valid-jsdoc\n    /**\n     * Find a clear path between point.\n     * @private\n     */\n    function clearPathTo(fromPoint, toPoint, dirIsX) {\n        // Don't waste time if we've hit goal\n        if (fromPoint.x === toPoint.x && fromPoint.y === toPoint.y) {\n            return [];\n        }\n        var dir = dirIsX ? 'x' : 'y',\n            obstacleMargin = options.obstacleOptions.margin,\n            bounds = {\n                soft: {\n                    xMin: softMinX,\n                    xMax: softMaxX,\n                    yMin: softMinY,\n                    yMax: softMaxY\n                },\n                hard: options.hardBounds\n            };\n        var pivot,\n            segments,\n            waypoint,\n            waypointUseMax,\n            envelopingObstacle,\n            secondEnvelopingObstacle,\n            envelopWaypoint;\n        // If fromPoint is inside an obstacle we have a problem. Break out\n        // by just going to the outside of this obstacle. We prefer to go to\n        // the nearest edge in the chosen direction.\n        envelopingObstacle =\n            findObstacleFromPoint(chartObstacles, fromPoint);\n        if (envelopingObstacle > -1) {\n            envelopingObstacle = chartObstacles[envelopingObstacle];\n            waypointUseMax = getDodgeDirection(envelopingObstacle, fromPoint, toPoint, dirIsX, bounds);\n            // Cut obstacle to hard bounds to make sure we stay within\n            limitObstacleToBounds(envelopingObstacle, options.hardBounds);\n            envelopWaypoint = dirIsX ? {\n                y: fromPoint.y,\n                x: envelopingObstacle[waypointUseMax ? 'xMax' : 'xMin'] +\n                    (waypointUseMax ? 1 : -1)\n            } : {\n                x: fromPoint.x,\n                y: envelopingObstacle[waypointUseMax ? 'yMax' : 'yMin'] +\n                    (waypointUseMax ? 1 : -1)\n            };\n            // If we crashed into another obstacle doing this, we put the\n            // waypoint between them instead\n            secondEnvelopingObstacle = findObstacleFromPoint(chartObstacles, envelopWaypoint);\n            if (secondEnvelopingObstacle > -1) {\n                secondEnvelopingObstacle = chartObstacles[secondEnvelopingObstacle];\n                // Cut obstacle to hard bounds\n                limitObstacleToBounds(secondEnvelopingObstacle, options.hardBounds);\n                // Modify waypoint to lay between obstacles\n                envelopWaypoint[dir] = waypointUseMax ? PathfinderAlgorithms_max(envelopingObstacle[dir + 'Max'] - obstacleMargin + 1, (secondEnvelopingObstacle[dir + 'Min'] +\n                    envelopingObstacle[dir + 'Max']) / 2) :\n                    PathfinderAlgorithms_min((envelopingObstacle[dir + 'Min'] + obstacleMargin - 1), ((secondEnvelopingObstacle[dir + 'Max'] +\n                        envelopingObstacle[dir + 'Min']) / 2));\n                // We are not going anywhere. If this happens for the first\n                // time, do nothing. Otherwise, try to go to the extreme of\n                // the obstacle pair in the current direction.\n                if (fromPoint.x === envelopWaypoint.x &&\n                    fromPoint.y === envelopWaypoint.y) {\n                    if (forceObstacleBreak) {\n                        envelopWaypoint[dir] = waypointUseMax ?\n                            PathfinderAlgorithms_max(envelopingObstacle[dir + 'Max'], secondEnvelopingObstacle[dir + 'Max']) + 1 :\n                            PathfinderAlgorithms_min(envelopingObstacle[dir + 'Min'], secondEnvelopingObstacle[dir + 'Min']) - 1;\n                    }\n                    // Toggle on if off, and the opposite\n                    forceObstacleBreak = !forceObstacleBreak;\n                }\n                else {\n                    // This point is not identical to previous.\n                    // Clear break trigger.\n                    forceObstacleBreak = false;\n                }\n            }\n            segments = [{\n                    start: fromPoint,\n                    end: envelopWaypoint\n                }];\n        }\n        else { // If not enveloping, use standard pivot calculation\n            pivot = pivotPoint(fromPoint, {\n                x: dirIsX ? toPoint.x : fromPoint.x,\n                y: dirIsX ? fromPoint.y : toPoint.y\n            }, dirIsX);\n            segments = [{\n                    start: fromPoint,\n                    end: {\n                        x: pivot.x,\n                        y: pivot.y\n                    }\n                }];\n            // Pivot before goal, use a waypoint to dodge obstacle\n            if (pivot[dirIsX ? 'x' : 'y'] !== toPoint[dirIsX ? 'x' : 'y']) {\n                // Find direction of waypoint\n                waypointUseMax = getDodgeDirection(pivot.obstacle, pivot, toPoint, !dirIsX, bounds);\n                // Cut waypoint to hard bounds\n                limitObstacleToBounds(pivot.obstacle, options.hardBounds);\n                waypoint = {\n                    x: dirIsX ?\n                        pivot.x :\n                        pivot.obstacle[waypointUseMax ? 'xMax' : 'xMin'] +\n                            (waypointUseMax ? 1 : -1),\n                    y: dirIsX ?\n                        pivot.obstacle[waypointUseMax ? 'yMax' : 'yMin'] +\n                            (waypointUseMax ? 1 : -1) :\n                        pivot.y\n                };\n                // We're changing direction here, store that to make sure we\n                // also change direction when adding the last segment array\n                // after handling waypoint.\n                dirIsX = !dirIsX;\n                segments = segments.concat(clearPathTo({\n                    x: pivot.x,\n                    y: pivot.y\n                }, waypoint, dirIsX));\n            }\n        }\n        // Get segments for the other direction too\n        // Recursion is our friend\n        segments = segments.concat(clearPathTo(segments[segments.length - 1].end, toPoint, !dirIsX));\n        return segments;\n    }\n    // eslint-disable-next-line valid-jsdoc\n    /**\n     * Extract point to outside of obstacle in whichever direction is\n     * closest. Returns new point outside obstacle.\n     * @private\n     */\n    function extractFromObstacle(obstacle, point, goalPoint) {\n        var dirIsX = PathfinderAlgorithms_min(obstacle.xMax - point.x,\n            point.x - obstacle.xMin) <\n                PathfinderAlgorithms_min(obstacle.yMax - point.y,\n            point.y - obstacle.yMin),\n            bounds = {\n                soft: options.hardBounds,\n                hard: options.hardBounds\n            },\n            useMax = getDodgeDirection(obstacle,\n            point,\n            goalPoint,\n            dirIsX,\n            bounds);\n        return dirIsX ? {\n            y: point.y,\n            x: obstacle[useMax ? 'xMax' : 'xMin'] + (useMax ? 1 : -1)\n        } : {\n            x: point.x,\n            y: obstacle[useMax ? 'yMax' : 'yMin'] + (useMax ? 1 : -1)\n        };\n    }\n    // Cut the obstacle array to soft bounds for optimization in large\n    // datasets.\n    chartObstacles =\n        chartObstacles.slice(startObstacleIx, endObstacleIx + 1);\n    // If an obstacle envelops the end point, move it out of there and add\n    // a little segment to where it was.\n    if ((endObstacleIx = findObstacleFromPoint(chartObstacles, end)) > -1) {\n        extractedEndPoint = extractFromObstacle(chartObstacles[endObstacleIx], end, start);\n        endSegments.push({\n            end: end,\n            start: extractedEndPoint\n        });\n        end = extractedEndPoint;\n    }\n    // If it's still inside one or more obstacles, get out of there by\n    // force-moving towards the start point.\n    while ((endObstacleIx = findObstacleFromPoint(chartObstacles, end)) > -1) {\n        useMax = end[dir] - start[dir] < 0;\n        extractedEndPoint = {\n            x: end.x,\n            y: end.y\n        };\n        extractedEndPoint[dir] = chartObstacles[endObstacleIx][useMax ? dir + 'Max' : dir + 'Min'] + (useMax ? 1 : -1);\n        endSegments.push({\n            end: end,\n            start: extractedEndPoint\n        });\n        end = extractedEndPoint;\n    }\n    // Find the path\n    segments = clearPathTo(start, end, dirIsX);\n    // Add the end-point segments\n    segments = segments.concat(endSegments.reverse());\n    return {\n        path: pathFromSegments(segments),\n        obstacles: segments\n    };\n}\nfastAvoid.requiresObstacles = true;\n/* *\n *\n *  Default Export\n *\n * */\n// Define the available pathfinding algorithms.\n// Algorithms take up to 3 arguments: starting point, ending point, and an\n// options object.\nvar algorithms = {\n    fastAvoid: fastAvoid,\n    straight: straight,\n    simpleConnect: simpleConnect\n};\n/* harmony default export */ var PathfinderAlgorithms = (algorithms);\n\n;// ./code/es5/es-modules/Gantt/ConnectorsDefaults.js\n/* *\n *\n *  (c) 2016 Highsoft AS\n *  Authors: Øystein Moseng, Lars A. V. Cabrera\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  API Defaults\n *\n * */\n/*\n @todo:\n     - Document how to write your own algorithms\n     - Consider adding a Point.pathTo method that wraps creating a connection\n       and rendering it\n*/\nvar connectorsDefaults = {\n    /**\n     * The Pathfinder module allows you to define connections between any two\n     * points, represented as lines - optionally with markers for the start\n     * and/or end points. Multiple algorithms are available for calculating how\n     * the connecting lines are drawn.\n     *\n     * Connector functionality requires Highcharts Gantt to be loaded. In Gantt\n     * charts, the connectors are used to draw dependencies between tasks.\n     *\n     * @see [dependency](series.gantt.data.dependency)\n     *\n     * @sample gantt/pathfinder/demo\n     *         Pathfinder connections\n     *\n     * @declare      Highcharts.ConnectorsOptions\n     * @product      gantt\n     * @optionparent connectors\n     */\n    connectors: {\n        /**\n         * Enable connectors for this chart. Requires Highcharts Gantt.\n         *\n         * @type      {boolean}\n         * @default   true\n         * @since     6.2.0\n         * @apioption connectors.enabled\n         */\n        /**\n         * Set the default dash style for this chart's connecting lines.\n         *\n         * @type      {string}\n         * @default   solid\n         * @since     6.2.0\n         * @apioption connectors.dashStyle\n         */\n        /**\n         * Set the default color for this chart's Pathfinder connecting lines.\n         * Defaults to the color of the point being connected.\n         *\n         * @type      {Highcharts.ColorString}\n         * @since     6.2.0\n         * @apioption connectors.lineColor\n         */\n        /**\n         * Set the default pathfinder margin to use, in pixels. Some Pathfinder\n         * algorithms attempt to avoid obstacles, such as other points in the\n         * chart. These algorithms use this margin to determine how close lines\n         * can be to an obstacle. The default is to compute this automatically\n         * from the size of the obstacles in the chart.\n         *\n         * To draw connecting lines close to existing points, set this to a low\n         * number. For more space around existing points, set this number\n         * higher.\n         *\n         * @sample gantt/pathfinder/algorithm-margin\n         *         Small algorithmMargin\n         *\n         * @type      {number}\n         * @since     6.2.0\n         * @apioption connectors.algorithmMargin\n         */\n        /**\n         * Set the default pathfinder algorithm to use for this chart. It is\n         * possible to define your own algorithms by adding them to the\n         * Highcharts.Pathfinder.prototype.algorithms object before the chart\n         * has been created.\n         *\n         * The default algorithms are as follows:\n         *\n         * `straight`:      Draws a straight line between the connecting\n         *                  points. Does not avoid other points when drawing.\n         *\n         * `simpleConnect`: Finds a path between the points using right angles\n         *                  only. Takes only starting/ending points into\n         *                  account, and will not avoid other points.\n         *\n         * `fastAvoid`:     Finds a path between the points using right angles\n         *                  only. Will attempt to avoid other points, but its\n         *                  focus is performance over accuracy. Works well with\n         *                  less dense datasets.\n         *\n         * Default value: `straight` is used as default for most series types,\n         * while `simpleConnect` is used as default for Gantt series, to show\n         * dependencies between points.\n         *\n         * @sample gantt/pathfinder/demo\n         *         Different types used\n         *\n         * @type    {Highcharts.PathfinderTypeValue}\n         * @default undefined\n         * @since   6.2.0\n         */\n        type: 'straight',\n        /**\n         * The corner radius for the connector line.\n         *\n         * @since 11.2.0\n         */\n        radius: 0,\n        /**\n         * Set the default pixel width for this chart's Pathfinder connecting\n         * lines.\n         *\n         * @since 6.2.0\n         */\n        lineWidth: 1,\n        /**\n         * Marker options for this chart's Pathfinder connectors. Note that\n         * this option is overridden by the `startMarker` and `endMarker`\n         * options.\n         *\n         * @declare Highcharts.ConnectorsMarkerOptions\n         * @since   6.2.0\n         */\n        marker: {\n            /**\n             * Set the radius of the connector markers. The default is\n             * automatically computed based on the algorithmMargin setting.\n             *\n             * Setting marker.width and marker.height will override this\n             * setting.\n             *\n             * @type      {number}\n             * @since     6.2.0\n             * @apioption connectors.marker.radius\n             */\n            /**\n             * Set the width of the connector markers. If not supplied, this\n             * is inferred from the marker radius.\n             *\n             * @type      {number}\n             * @since     6.2.0\n             * @apioption connectors.marker.width\n             */\n            /**\n             * Set the height of the connector markers. If not supplied, this\n             * is inferred from the marker radius.\n             *\n             * @type      {number}\n             * @since     6.2.0\n             * @apioption connectors.marker.height\n             */\n            /**\n             * Set the color of the connector markers. By default this is the\n             * same as the connector color.\n             *\n             * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n             * @since     6.2.0\n             * @apioption connectors.marker.color\n             */\n            /**\n             * Set the line/border color of the connector markers. By default\n             * this is the same as the marker color.\n             *\n             * @type      {Highcharts.ColorString}\n             * @since     6.2.0\n             * @apioption connectors.marker.lineColor\n             */\n            /**\n             * Enable markers for the connectors.\n             */\n            enabled: false,\n            /**\n             * Horizontal alignment of the markers relative to the points.\n             *\n             * @type {Highcharts.AlignValue}\n             */\n            align: 'center',\n            /**\n             * Vertical alignment of the markers relative to the points.\n             *\n             * @type {Highcharts.VerticalAlignValue}\n             */\n            verticalAlign: 'middle',\n            /**\n             * Whether or not to draw the markers inside the points.\n             */\n            inside: false,\n            /**\n             * Set the line/border width of the pathfinder markers.\n             */\n            lineWidth: 1\n        },\n        /**\n         * Marker options specific to the start markers for this chart's\n         * Pathfinder connectors. Overrides the generic marker options.\n         *\n         * @declare Highcharts.ConnectorsStartMarkerOptions\n         * @extends connectors.marker\n         * @since   6.2.0\n         */\n        startMarker: {\n            /**\n             * Set the symbol of the connector start markers.\n             */\n            symbol: 'diamond'\n        },\n        /**\n         * Marker options specific to the end markers for this chart's\n         * Pathfinder connectors. Overrides the generic marker options.\n         *\n         * @declare Highcharts.ConnectorsEndMarkerOptions\n         * @extends connectors.marker\n         * @since   6.2.0\n         */\n        endMarker: {\n            /**\n             * Set the symbol of the connector end markers.\n             */\n            symbol: 'arrow-filled'\n        }\n    }\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var ConnectorsDefaults = (connectorsDefaults);\n/* *\n *\n *  API Options\n *\n * */\n/**\n * Override Pathfinder connector options for a series. Requires Highcharts Gantt\n * to be loaded.\n *\n * @declare   Highcharts.SeriesConnectorsOptionsObject\n * @extends   connectors\n * @since     6.2.0\n * @excluding enabled, algorithmMargin\n * @product   gantt\n * @apioption plotOptions.series.connectors\n */\n/**\n * Connect to a point. This option can be either a string, referring to the ID\n * of another point, or an object, or an array of either. If the option is an\n * array, each element defines a connection.\n *\n * @sample gantt/pathfinder/demo\n *         Different connection types\n *\n * @declare   Highcharts.XrangePointConnectorsOptionsObject\n * @type      {string|Array<string|*>|*}\n * @extends   plotOptions.series.connectors\n * @since     6.2.0\n * @excluding enabled\n * @product   gantt\n * @requires  highcharts-gantt\n * @apioption series.xrange.data.connect\n */\n/**\n * The ID of the point to connect to.\n *\n * @type      {string}\n * @since     6.2.0\n * @product   gantt\n * @apioption series.xrange.data.connect.to\n */\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Gantt/PathfinderComposition.js\n/* *\n *\n *  (c) 2016 Highsoft AS\n *  Authors: Øystein Moseng, Lars A. V. Cabrera\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar PathfinderComposition_setOptions = Defaults.setOptions;\n\nvar PathfinderComposition_defined = Core_Utilities.defined, PathfinderComposition_error = Core_Utilities.error, PathfinderComposition_merge = Core_Utilities.merge;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Get point bounding box using plotX/plotY and shapeArgs. If using\n * graphic.getBBox() directly, the bbox will be affected by animation.\n *\n * @private\n * @function\n *\n * @param {Highcharts.Point} point\n *        The point to get BB of.\n *\n * @return {Highcharts.Dictionary<number>|null}\n *         Result xMax, xMin, yMax, yMin.\n */\nfunction getPointBB(point) {\n    var shapeArgs = point.shapeArgs;\n    // Prefer using shapeArgs (columns)\n    if (shapeArgs) {\n        return {\n            xMin: shapeArgs.x || 0,\n            xMax: (shapeArgs.x || 0) + (shapeArgs.width || 0),\n            yMin: shapeArgs.y || 0,\n            yMax: (shapeArgs.y || 0) + (shapeArgs.height || 0)\n        };\n    }\n    // Otherwise use plotX/plotY and bb\n    var bb = point.graphic && point.graphic.getBBox();\n    return bb ? {\n        xMin: point.plotX - bb.width / 2,\n        xMax: point.plotX + bb.width / 2,\n        yMin: point.plotY - bb.height / 2,\n        yMax: point.plotY + bb.height / 2\n    } : null;\n}\n/**\n * Warn if using legacy options. Copy the options over. Note that this will\n * still break if using the legacy options in chart.update, addSeries etc.\n * @private\n */\nfunction warnLegacy(chart) {\n    if (chart.options.pathfinder ||\n        chart.series.reduce(function (acc, series) {\n            if (series.options) {\n                PathfinderComposition_merge(true, (series.options.connectors = series.options.connectors ||\n                    {}), series.options.pathfinder);\n            }\n            return acc || series.options && series.options.pathfinder;\n        }, false)) {\n        PathfinderComposition_merge(true, (chart.options.connectors = chart.options.connectors || {}), chart.options.pathfinder);\n        PathfinderComposition_error('WARNING: Pathfinder options have been renamed. ' +\n            'Use \"chart.connectors\" or \"series.connectors\" instead.');\n    }\n}\n/* *\n *\n *  Composition\n *\n * */\nvar ConnectionComposition;\n(function (ConnectionComposition) {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /** @private */\n    function compose(ChartClass, PathfinderClass, PointClass) {\n        var pointProto = PointClass.prototype;\n        if (!pointProto.getPathfinderAnchorPoint) {\n            // Initialize Pathfinder for charts\n            ChartClass.prototype.callbacks.push(function (chart) {\n                var options = chart.options;\n                if (options.connectors.enabled !== false) {\n                    warnLegacy(chart);\n                    this.pathfinder = new PathfinderClass(this);\n                    this.pathfinder.update(true); // First draw, defer render\n                }\n            });\n            pointProto.getMarkerVector = pointGetMarkerVector;\n            pointProto.getPathfinderAnchorPoint = pointGetPathfinderAnchorPoint;\n            pointProto.getRadiansToVector = pointGetRadiansToVector;\n            // Set default Pathfinder options\n            PathfinderComposition_setOptions(ConnectorsDefaults);\n        }\n    }\n    ConnectionComposition.compose = compose;\n    /**\n     * Get coordinates of anchor point for pathfinder connection.\n     *\n     * @private\n     * @function Highcharts.Point#getPathfinderAnchorPoint\n     *\n     * @param {Highcharts.ConnectorsMarkerOptions} markerOptions\n     *        Connection options for position on point.\n     *\n     * @return {Highcharts.PositionObject}\n     *         An object with x/y properties for the position. Coordinates are\n     *         in plot values, not relative to point.\n     */\n    function pointGetPathfinderAnchorPoint(markerOptions) {\n        var bb = getPointBB(this);\n        var x,\n            y;\n        switch (markerOptions.align) { // eslint-disable-line default-case\n            case 'right':\n                x = 'xMax';\n                break;\n            case 'left':\n                x = 'xMin';\n        }\n        switch (markerOptions.verticalAlign) { // eslint-disable-line default-case\n            case 'top':\n                y = 'yMin';\n                break;\n            case 'bottom':\n                y = 'yMax';\n        }\n        return {\n            x: x ? bb[x] : (bb.xMin + bb.xMax) / 2,\n            y: y ? bb[y] : (bb.yMin + bb.yMax) / 2\n        };\n    }\n    /**\n     * Utility to get the angle from one point to another.\n     *\n     * @private\n     * @function Highcharts.Point#getRadiansToVector\n     *\n     * @param {Highcharts.PositionObject} v1\n     *        The first vector, as an object with x/y properties.\n     *\n     * @param {Highcharts.PositionObject} v2\n     *        The second vector, as an object with x/y properties.\n     *\n     * @return {number}\n     *         The angle in degrees\n     */\n    function pointGetRadiansToVector(v1, v2) {\n        var box;\n        if (!PathfinderComposition_defined(v2)) {\n            box = getPointBB(this);\n            if (box) {\n                v2 = {\n                    x: (box.xMin + box.xMax) / 2,\n                    y: (box.yMin + box.yMax) / 2\n                };\n            }\n        }\n        return Math.atan2(v2.y - v1.y, v1.x - v2.x);\n    }\n    /**\n     * Utility to get the position of the marker, based on the path angle and\n     * the marker's radius.\n     *\n     * @private\n     * @function Highcharts.Point#getMarkerVector\n     *\n     * @param {number} radians\n     *        The angle in radians from the point center to another vector.\n     *\n     * @param {number} markerRadius\n     *        The radius of the marker, to calculate the additional distance to\n     *        the center of the marker.\n     *\n     * @param {Object} anchor\n     *        The anchor point of the path and marker as an object with x/y\n     *        properties.\n     *\n     * @return {Object}\n     *         The marker vector as an object with x/y properties.\n     */\n    function pointGetMarkerVector(radians, markerRadius, anchor) {\n        var twoPI = Math.PI * 2.0, bb = getPointBB(this), rectWidth = bb.xMax - bb.xMin, rectHeight = bb.yMax - bb.yMin, rAtan = Math.atan2(rectHeight, rectWidth), rectHalfWidth = rectWidth / 2.0, rectHalfHeight = rectHeight / 2.0, rectHorizontalCenter = bb.xMin + rectHalfWidth, rectVerticalCenter = bb.yMin + rectHalfHeight, edgePoint = {\n                x: rectHorizontalCenter,\n                y: rectVerticalCenter\n            };\n        var theta = radians,\n            tanTheta = 1,\n            leftOrRightRegion = false,\n            xFactor = 1,\n            yFactor = 1;\n        while (theta < -Math.PI) {\n            theta += twoPI;\n        }\n        while (theta > Math.PI) {\n            theta -= twoPI;\n        }\n        tanTheta = Math.tan(theta);\n        if ((theta > -rAtan) && (theta <= rAtan)) {\n            // Right side\n            yFactor = -1;\n            leftOrRightRegion = true;\n        }\n        else if (theta > rAtan && theta <= (Math.PI - rAtan)) {\n            // Top side\n            yFactor = -1;\n        }\n        else if (theta > (Math.PI - rAtan) || theta <= -(Math.PI - rAtan)) {\n            // Left side\n            xFactor = -1;\n            leftOrRightRegion = true;\n        }\n        else {\n            // Bottom side\n            xFactor = -1;\n        }\n        // Correct the edgePoint according to the placement of the marker\n        if (leftOrRightRegion) {\n            edgePoint.x += xFactor * (rectHalfWidth);\n            edgePoint.y += yFactor * (rectHalfWidth) * tanTheta;\n        }\n        else {\n            edgePoint.x += xFactor * (rectHeight / (2.0 * tanTheta));\n            edgePoint.y += yFactor * (rectHalfHeight);\n        }\n        if (anchor.x !== rectHorizontalCenter) {\n            edgePoint.x = anchor.x;\n        }\n        if (anchor.y !== rectVerticalCenter) {\n            edgePoint.y = anchor.y;\n        }\n        return {\n            x: edgePoint.x + (markerRadius * Math.cos(theta)),\n            y: edgePoint.y - (markerRadius * Math.sin(theta))\n        };\n    }\n})(ConnectionComposition || (ConnectionComposition = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var PathfinderComposition = (ConnectionComposition);\n\n;// ./code/es5/es-modules/Gantt/Pathfinder.js\n/* *\n *\n *  (c) 2016 Highsoft AS\n *  Authors: Øystein Moseng, Lars A. V. Cabrera\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\n\n\n\nvar Pathfinder_addEvent = Core_Utilities.addEvent, Pathfinder_defined = Core_Utilities.defined, Pathfinder_pick = Core_Utilities.pick, Pathfinder_splat = Core_Utilities.splat;\n/* *\n *\n *  Constants\n *\n * */\nvar Pathfinder_max = Math.max, Pathfinder_min = Math.min;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Get point bounding box using plotX/plotY and shapeArgs. If using\n * graphic.getBBox() directly, the bbox will be affected by animation.\n *\n * @private\n * @function\n *\n * @param {Highcharts.Point} point\n *        The point to get BB of.\n *\n * @return {Highcharts.Dictionary<number>|null}\n *         Result xMax, xMin, yMax, yMin.\n */\nfunction Pathfinder_getPointBB(point) {\n    var shapeArgs = point.shapeArgs;\n    // Prefer using shapeArgs (columns)\n    if (shapeArgs) {\n        return {\n            xMin: shapeArgs.x || 0,\n            xMax: (shapeArgs.x || 0) + (shapeArgs.width || 0),\n            yMin: shapeArgs.y || 0,\n            yMax: (shapeArgs.y || 0) + (shapeArgs.height || 0)\n        };\n    }\n    // Otherwise use plotX/plotY and bb\n    var bb = point.graphic && point.graphic.getBBox();\n    return bb ? {\n        xMin: point.plotX - bb.width / 2,\n        xMax: point.plotX + bb.width / 2,\n        yMin: point.plotY - bb.height / 2,\n        yMax: point.plotY + bb.height / 2\n    } : null;\n}\n/**\n * Compute smallest distance between two rectangles.\n * @private\n */\nfunction calculateObstacleDistance(a, b, bbMargin) {\n    // Count the distance even if we are slightly off\n    var margin = Pathfinder_pick(bbMargin, 10),\n        yOverlap = a.yMax + margin > b.yMin - margin &&\n            a.yMin - margin < b.yMax + margin,\n        xOverlap = a.xMax + margin > b.xMin - margin &&\n            a.xMin - margin < b.xMax + margin,\n        xDistance = yOverlap ? (a.xMin > b.xMax ? a.xMin - b.xMax : b.xMin - a.xMax) : Infinity,\n        yDistance = xOverlap ? (a.yMin > b.yMax ? a.yMin - b.yMax : b.yMin - a.yMax) : Infinity;\n    // If the rectangles collide, try recomputing with smaller margin.\n    // If they collide anyway, discard the obstacle.\n    if (xOverlap && yOverlap) {\n        return (margin ?\n            calculateObstacleDistance(a, b, Math.floor(margin / 2)) :\n            Infinity);\n    }\n    return Pathfinder_min(xDistance, yDistance);\n}\n/**\n * Calculate margin to place around obstacles for the pathfinder in pixels.\n * Returns a minimum of 1 pixel margin.\n *\n * @private\n * @function\n *\n * @param {Array<object>} obstacles\n *        Obstacles to calculate margin from.\n *\n * @return {number}\n *         The calculated margin in pixels. At least 1.\n */\nfunction calculateObstacleMargin(obstacles) {\n    var len = obstacles.length,\n        distances = [];\n    var onstacleDistance;\n    // Go over all obstacles and compare them to the others.\n    for (var i = 0; i < len; ++i) {\n        // Compare to all obstacles ahead. We will already have compared this\n        // obstacle to the ones before.\n        for (var j = i + 1; j < len; ++j) {\n            onstacleDistance =\n                calculateObstacleDistance(obstacles[i], obstacles[j]);\n            // TODO: Magic number 80\n            if (onstacleDistance < 80) { // Ignore large distances\n                distances.push(onstacleDistance);\n            }\n        }\n    }\n    // Ensure we always have at least one value, even in very spacious charts\n    distances.push(80);\n    return Pathfinder_max(Math.floor(distances.sort(function (a, b) {\n        return (a - b);\n    })[\n    // Discard first 10% of the relevant distances, and then grab\n    // the smallest one.\n    Math.floor(distances.length / 10)] / 2 - 1 // Divide the distance by 2 and subtract 1.\n    ), 1 // 1 is the minimum margin\n    );\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * The Pathfinder class.\n *\n * @private\n * @class\n * @name Highcharts.Pathfinder\n *\n * @param {Highcharts.Chart} chart\n *        The chart to operate on.\n */\nvar Pathfinder = /** @class */ (function () {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    function Pathfinder(chart) {\n        this.init(chart);\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    Pathfinder.compose = function (ChartClass, PointClass) {\n        PathfinderComposition.compose(ChartClass, Pathfinder, PointClass);\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Initialize the Pathfinder object.\n     *\n     * @function Highcharts.Pathfinder#init\n     *\n     * @param {Highcharts.Chart} chart\n     *        The chart context.\n     */\n    Pathfinder.prototype.init = function (chart) {\n        // Initialize pathfinder with chart context\n        this.chart = chart;\n        // Init connection reference list\n        this.connections = [];\n        // Recalculate paths/obstacles on chart redraw\n        Pathfinder_addEvent(chart, 'redraw', function () {\n            this.pathfinder.update();\n        });\n    };\n    /**\n     * Update Pathfinder connections from scratch.\n     *\n     * @function Highcharts.Pathfinder#update\n     *\n     * @param {boolean} [deferRender]\n     *        Whether or not to defer rendering of connections until\n     *        series.afterAnimate event has fired. Used on first render.\n     */\n    Pathfinder.prototype.update = function (deferRender) {\n        var chart = this.chart,\n            pathfinder = this,\n            oldConnections = pathfinder.connections;\n        // Rebuild pathfinder connections from options\n        pathfinder.connections = [];\n        chart.series.forEach(function (series) {\n            if (series.visible && !series.options.isInternal) {\n                series.points.forEach(function (point) {\n                    var _a;\n                    var ganttPointOptions = point.options;\n                    // For Gantt series the connect could be\n                    // defined as a dependency\n                    if (ganttPointOptions && ganttPointOptions.dependency) {\n                        ganttPointOptions.connect = ganttPointOptions\n                            .dependency;\n                    }\n                    var connects = ((_a = point.options) === null || _a === void 0 ? void 0 : _a.connect) ?\n                            Pathfinder_splat(point.options.connect) :\n                            [];\n                    var to;\n                    if (point.visible && point.isInside !== false) {\n                        connects.forEach(function (connect) {\n                            var toId = typeof connect === 'string' ?\n                                    connect :\n                                    connect.to;\n                            if (toId) {\n                                to = chart.get(toId);\n                            }\n                            if (to instanceof Series_Point &&\n                                to.series.visible &&\n                                to.visible &&\n                                to.isInside !== false) {\n                                // Add new connection\n                                pathfinder.connections.push(new Gantt_Connection(point, // From\n                                to, typeof connect === 'string' ?\n                                    {} :\n                                    connect));\n                            }\n                        });\n                    }\n                });\n            }\n        });\n        // Clear connections that should not be updated, and move old info over\n        // to new connections.\n        for (var j = 0, k = void 0, found = void 0, lenOld = oldConnections.length, lenNew = pathfinder.connections.length; j < lenOld; ++j) {\n            found = false;\n            var oldCon = oldConnections[j];\n            for (k = 0; k < lenNew; ++k) {\n                var newCon = pathfinder.connections[k];\n                if ((oldCon.options && oldCon.options.type) ===\n                    (newCon.options && newCon.options.type) &&\n                    oldCon.fromPoint === newCon.fromPoint &&\n                    oldCon.toPoint === newCon.toPoint) {\n                    newCon.graphics = oldCon.graphics;\n                    found = true;\n                    break;\n                }\n            }\n            if (!found) {\n                oldCon.destroy();\n            }\n        }\n        // Clear obstacles to force recalculation. This must be done on every\n        // redraw in case positions have changed. Recalculation is handled in\n        // Connection.getPath on demand.\n        delete this.chartObstacles;\n        delete this.lineObstacles;\n        // Draw the pending connections\n        pathfinder.renderConnections(deferRender);\n    };\n    /**\n     * Draw the chart's connecting paths.\n     *\n     * @function Highcharts.Pathfinder#renderConnections\n     *\n     * @param {boolean} [deferRender]\n     *        Whether or not to defer render until series animation is finished.\n     *        Used on first render.\n     */\n    Pathfinder.prototype.renderConnections = function (deferRender) {\n        if (deferRender) {\n            // Render after series are done animating\n            this.chart.series.forEach(function (series) {\n                var render = function () {\n                        // Find pathfinder connections belonging to this series\n                        // that haven't rendered, and render them now.\n                        var pathfinder = series.chart.pathfinder,\n                    conns = pathfinder && pathfinder.connections || [];\n                    conns.forEach(function (connection) {\n                        if (connection.fromPoint &&\n                            connection.fromPoint.series === series) {\n                            connection.render();\n                        }\n                    });\n                    if (series.pathfinderRemoveRenderEvent) {\n                        series.pathfinderRemoveRenderEvent();\n                        delete series.pathfinderRemoveRenderEvent;\n                    }\n                };\n                if (series.options.animation === false) {\n                    render();\n                }\n                else {\n                    series.pathfinderRemoveRenderEvent = Pathfinder_addEvent(series, 'afterAnimate', render);\n                }\n            });\n        }\n        else {\n            // Go through connections and render them\n            this.connections.forEach(function (connection) {\n                connection.render();\n            });\n        }\n    };\n    /**\n     * Get obstacles for the points in the chart. Does not include connecting\n     * lines from Pathfinder. Applies algorithmMargin to the obstacles.\n     *\n     * @function Highcharts.Pathfinder#getChartObstacles\n     *\n     * @param {Object} options\n     *        Options for the calculation. Currently only\n     *        `options.algorithmMargin`.\n     *\n     * @param {number} options.algorithmMargin\n     *        The algorithm margin to use for the obstacles.\n\n    * @return {Array<object>}\n     *         An array of calculated obstacles. Each obstacle is defined as an\n     *         object with xMin, xMax, yMin and yMax properties.\n     */\n    Pathfinder.prototype.getChartObstacles = function (options) {\n        var series = this.chart.series,\n            margin = Pathfinder_pick(options.algorithmMargin, 0);\n        var obstacles = [],\n            calculatedMargin;\n        for (var i = 0, sLen = series.length; i < sLen; ++i) {\n            if (series[i].visible && !series[i].options.isInternal) {\n                for (var j = 0, pLen = series[i].points.length, bb = void 0, point = void 0; j < pLen; ++j) {\n                    point = series[i].points[j];\n                    if (point.visible) {\n                        bb = Pathfinder_getPointBB(point);\n                        if (bb) {\n                            obstacles.push({\n                                xMin: bb.xMin - margin,\n                                xMax: bb.xMax + margin,\n                                yMin: bb.yMin - margin,\n                                yMax: bb.yMax + margin\n                            });\n                        }\n                    }\n                }\n            }\n        }\n        // Sort obstacles by xMin for optimization\n        obstacles = obstacles.sort(function (a, b) {\n            return a.xMin - b.xMin;\n        });\n        // Add auto-calculated margin if the option is not defined\n        if (!Pathfinder_defined(options.algorithmMargin)) {\n            calculatedMargin =\n                options.algorithmMargin =\n                    calculateObstacleMargin(obstacles);\n            obstacles.forEach(function (obstacle) {\n                obstacle.xMin -= calculatedMargin;\n                obstacle.xMax += calculatedMargin;\n                obstacle.yMin -= calculatedMargin;\n                obstacle.yMax += calculatedMargin;\n            });\n        }\n        return obstacles;\n    };\n    /**\n     * Utility function to get metrics for obstacles:\n     * - Widest obstacle width\n     * - Tallest obstacle height\n     *\n     * @function Highcharts.Pathfinder#getObstacleMetrics\n     *\n     * @param {Array<object>} obstacles\n     *        An array of obstacles to inspect.\n     *\n     * @return {Object}\n     *         The calculated metrics, as an object with maxHeight and maxWidth\n     *         properties.\n     */\n    Pathfinder.prototype.getObstacleMetrics = function (obstacles) {\n        var maxWidth = 0,\n            maxHeight = 0,\n            width,\n            height,\n            i = obstacles.length;\n        while (i--) {\n            width = obstacles[i].xMax - obstacles[i].xMin;\n            height = obstacles[i].yMax - obstacles[i].yMin;\n            if (maxWidth < width) {\n                maxWidth = width;\n            }\n            if (maxHeight < height) {\n                maxHeight = height;\n            }\n        }\n        return {\n            maxHeight: maxHeight,\n            maxWidth: maxWidth\n        };\n    };\n    /**\n     * Utility to get which direction to start the pathfinding algorithm\n     * (X vs Y), calculated from a set of marker options.\n     *\n     * @function Highcharts.Pathfinder#getAlgorithmStartDirection\n     *\n     * @param {Highcharts.ConnectorsMarkerOptions} markerOptions\n     *        Marker options to calculate from.\n     *\n     * @return {boolean}\n     *         Returns true for X, false for Y, and undefined for autocalculate.\n     */\n    Pathfinder.prototype.getAlgorithmStartDirection = function (markerOptions) {\n        var xCenter = markerOptions.align !== 'left' &&\n                markerOptions.align !== 'right', yCenter = markerOptions.verticalAlign !== 'top' &&\n                markerOptions.verticalAlign !== 'bottom';\n        return xCenter ?\n            (yCenter ? void 0 : false) : // When x is centered\n            (yCenter ? true : void 0); // When x is off-center\n    };\n    return Pathfinder;\n}());\n/**\n * @name Highcharts.Pathfinder#algorithms\n * @type {Highcharts.Dictionary<Function>}\n */\nPathfinder.prototype.algorithms = PathfinderAlgorithms;\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Gantt_Pathfinder = (Pathfinder);\n/* *\n *\n *  API Options\n *\n * */\n/**\n * The default pathfinder algorithm to use for a chart. It is possible to define\n * your own algorithms by adding them to the\n * `Highcharts.Pathfinder.prototype.algorithms`\n * object before the chart has been created.\n *\n * The default algorithms are as follows:\n *\n * `straight`:      Draws a straight line between the connecting\n *                  points. Does not avoid other points when drawing.\n *\n * `simpleConnect`: Finds a path between the points using right angles\n *                  only. Takes only starting/ending points into\n *                  account, and will not avoid other points.\n *\n * `fastAvoid`:     Finds a path between the points using right angles\n *                  only. Will attempt to avoid other points, but its\n *                  focus is performance over accuracy. Works well with\n *                  less dense datasets.\n *\n * @typedef {\"fastAvoid\"|\"simpleConnect\"|\"straight\"|string} Highcharts.PathfinderTypeValue\n */\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/masters/modules/pathfinder.src.js\n/**\n * @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\n\n\n\nvar pathfinder_src_G = Core_Globals;\npathfinder_src_G.Pathfinder = pathfinder_src_G.Pathfinder || Gantt_Pathfinder;\nExtensions_ArrowSymbols.compose(pathfinder_src_G.SVGRenderer);\npathfinder_src_G.Pathfinder.compose(pathfinder_src_G.Chart, pathfinder_src_G.Point);\n/* harmony default export */ var pathfinder_src = ((/* unused pure expression or super */ null && (Highcharts)));\n\n;// ./code/es5/es-modules/Extensions/StaticScale.js\n/* *\n *\n *  (c) 2016-2024 Torstein Honsi, Lars Cabrera\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar StaticScale_addEvent = Core_Utilities.addEvent, StaticScale_defined = Core_Utilities.defined, StaticScale_isNumber = Core_Utilities.isNumber, StaticScale_pick = Core_Utilities.pick;\n/* *\n *\n *  Composition\n *\n * */\n/** @private */\nfunction StaticScale_compose(AxisClass, ChartClass) {\n    var chartProto = ChartClass.prototype;\n    if (!chartProto.adjustHeight) {\n        StaticScale_addEvent(AxisClass, 'afterSetOptions', StaticScale_onAxisAfterSetOptions);\n        chartProto.adjustHeight = chartAdjustHeight;\n        StaticScale_addEvent(ChartClass, 'render', chartProto.adjustHeight);\n    }\n}\n/** @private */\nfunction StaticScale_onAxisAfterSetOptions() {\n    var chartOptions = this.chart.options.chart;\n    if (!this.horiz &&\n        StaticScale_isNumber(this.options.staticScale) &&\n        (!chartOptions.height ||\n            (chartOptions.scrollablePlotArea &&\n                chartOptions.scrollablePlotArea.minHeight))) {\n        this.staticScale = this.options.staticScale;\n    }\n}\n/** @private */\nfunction chartAdjustHeight() {\n    var chart = this;\n    if (chart.redrawTrigger !== 'adjustHeight') {\n        var _loop_1 = function (axis) {\n                var chart_1 = axis.chart,\n            animate = !!chart_1.initiatedScale &&\n                    chart_1.options.animation,\n            staticScale = axis.options.staticScale;\n            if (axis.staticScale && StaticScale_defined(axis.min)) {\n                var height = StaticScale_pick(axis.brokenAxis && axis.brokenAxis.unitLength,\n                    axis.max + axis.tickInterval - axis.min) * staticScale;\n                // Minimum height is 1 x staticScale.\n                height = Math.max(height, staticScale);\n                var diff = height - chart_1.plotHeight;\n                if (!chart_1.scrollablePixelsY && Math.abs(diff) >= 1) {\n                    chart_1.plotHeight = height;\n                    chart_1.redrawTrigger = 'adjustHeight';\n                    chart_1.setSize(void 0, chart_1.chartHeight + diff, animate);\n                }\n                // Make sure clip rects have the right height before initial\n                // animation.\n                axis.series.forEach(function (series) {\n                    var clipRect = series.sharedClipKey &&\n                            chart_1.sharedClips[series.sharedClipKey];\n                    if (clipRect) {\n                        clipRect.attr(chart_1.inverted ? {\n                            width: chart_1.plotHeight\n                        } : {\n                            height: chart_1.plotHeight\n                        });\n                    }\n                });\n            }\n        };\n        for (var _i = 0, _a = (chart.axes || []); _i < _a.length; _i++) {\n            var axis = _a[_i];\n            _loop_1(axis);\n        }\n        this.initiatedScale = true;\n    }\n    this.redrawTrigger = null;\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar StaticScale = {\n    compose: StaticScale_compose\n};\n/* harmony default export */ var Extensions_StaticScale = (StaticScale);\n/* *\n *\n *  API Options\n *\n * */\n/**\n * For vertical axes only. Setting the static scale ensures that each tick unit\n * is translated into a fixed pixel height. For example, setting the static\n * scale to 24 results in each Y axis category taking up 24 pixels, and the\n * height of the chart adjusts. Adding or removing items will make the chart\n * resize.\n *\n * @sample gantt/xrange-series/demo/\n *         X-range series with static scale\n *\n * @type      {number}\n * @default   50\n * @since     6.2.0\n * @product   gantt\n * @apioption yAxis.staticScale\n */\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/masters/modules/static-scale.src.js\n/**\n * @license Highcharts Gantt JS v12.1.2 (2025-01-09)\n * @module highcharts/modules/static-scale\n * @requires highcharts\n *\n * StaticScale\n *\n * (c) 2016-2024 Torstein Honsi, Lars A. V. Cabrera\n *\n * License: www.highcharts.com/license\n */\n\n\n\nvar static_scale_src_G = Core_Globals;\nExtensions_StaticScale.compose(static_scale_src_G.Axis, static_scale_src_G.Chart);\n/* harmony default export */ var static_scale_src = ((/* unused pure expression or super */ null && (Highcharts)));\n\n;// ./code/es5/es-modules/Series/XRange/XRangeSeriesDefaults.js\n/* *\n *\n *  X-range series module\n *\n *  (c) 2010-2024 Torstein Honsi, Lars A. V. Cabrera\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar XRangeSeriesDefaults_correctFloat = Core_Utilities.correctFloat, XRangeSeriesDefaults_isNumber = Core_Utilities.isNumber, XRangeSeriesDefaults_isObject = Core_Utilities.isObject;\n/* *\n *\n *  Constants\n *\n * */\n/**\n * The X-range series displays ranges on the X axis, typically time\n * intervals with a start and end date.\n *\n * @sample {highcharts} highcharts/demo/x-range/\n *         X-range\n * @sample {highcharts} highcharts/css/x-range/\n *         Styled mode X-range\n * @sample {highcharts} highcharts/chart/inverted-xrange/\n *         Inverted X-range\n *\n * @extends      plotOptions.column\n * @since        6.0.0\n * @product      highcharts highstock gantt\n * @excluding    boostThreshold, crisp, cropThreshold, depth, edgeColor,\n *               edgeWidth, findNearestPointBy, getExtremesFromAll,\n *               negativeColor, pointInterval, pointIntervalUnit,\n *               pointPlacement, pointRange, pointStart, softThreshold,\n *               stacking, threshold, data, dataSorting, boostBlending\n * @requires     modules/xrange\n * @optionparent plotOptions.xrange\n */\nvar XRangeSeriesDefaults = {\n    /**\n     * A partial fill for each point, typically used to visualize how much\n     * of a task is performed. The partial fill object can be set either on\n     * series or point level.\n     *\n     * @sample {highcharts} highcharts/demo/x-range\n     *         X-range with partial fill\n     *\n     * @product   highcharts highstock gantt\n     * @apioption plotOptions.xrange.partialFill\n     */\n    /**\n     * The fill color to be used for partial fills. Defaults to a darker\n     * shade of the point color.\n     *\n     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @product   highcharts highstock gantt\n     * @apioption plotOptions.xrange.partialFill.fill\n     */\n    /**\n     * A partial fill for each point, typically used to visualize how much\n     * of a task is performed. See [completed](series.gantt.data.completed).\n     *\n     * @sample gantt/demo/progress-indicator\n     *         Gantt with progress indicator\n     *\n     * @product   gantt\n     * @apioption plotOptions.gantt.partialFill\n     */\n    /**\n     * In an X-range series, this option makes all points of the same Y-axis\n     * category the same color.\n     */\n    colorByPoint: true,\n    dataLabels: {\n        formatter: function () {\n            var amount = this.partialFill;\n            if (XRangeSeriesDefaults_isObject(amount)) {\n                amount = amount.amount;\n            }\n            if (XRangeSeriesDefaults_isNumber(amount) && amount > 0) {\n                return XRangeSeriesDefaults_correctFloat(amount * 100) + '%';\n            }\n        },\n        inside: true,\n        verticalAlign: 'middle',\n        style: {\n            whiteSpace: 'nowrap'\n        }\n    },\n    tooltip: {\n        headerFormat: '<span style=\"font-size: 0.8em\">{ucfirst point.x} - {point.x2}</span><br/>',\n        pointFormat: '<span style=\"color:{point.color}\">\\u25CF</span> {series.name}: <b>{point.yCategory}</b><br/>'\n    },\n    borderRadius: 3,\n    pointRange: 0\n};\n/* *\n *\n *  Export Default\n *\n * */\n/* harmony default export */ var XRange_XRangeSeriesDefaults = (XRangeSeriesDefaults);\n/* *\n *\n * API Options\n *\n * */\n/**\n * An `xrange` series. If the [type](#series.xrange.type) option is not\n * specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends   series,plotOptions.xrange\n * @excluding boostThreshold, crisp, cropThreshold, depth, edgeColor, edgeWidth,\n *            findNearestPointBy, getExtremesFromAll, negativeColor,\n *            pointInterval, pointIntervalUnit, pointPlacement, pointRange,\n *            pointStart, softThreshold, stacking, threshold, dataSorting,\n *            boostBlending\n * @product   highcharts highstock gantt\n * @requires  modules/xrange\n * @apioption series.xrange\n */\n/**\n * An array of data points for the series. For the `xrange` series type,\n * points can be given in the following ways:\n *\n * 1. An array of objects with named values. The objects are point configuration\n *    objects as seen below.\n *    ```js\n *    data: [{\n *        x: Date.UTC(2017, 0, 1),\n *        x2: Date.UTC(2017, 0, 3),\n *        name: \"Test\",\n *        y: 0,\n *        color: \"#00FF00\"\n *    }, {\n *        x: Date.UTC(2017, 0, 4),\n *        x2: Date.UTC(2017, 0, 5),\n *        name: \"Deploy\",\n *        y: 1,\n *        color: \"#FF0000\"\n *    }]\n *    ```\n *\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n *         Config objects\n *\n * @declare   Highcharts.XrangePointOptionsObject\n * @type      {Array<*>}\n * @extends   series.line.data\n * @product   highcharts highstock gantt\n * @apioption series.xrange.data\n */\n/**\n * The starting X value of the range point.\n *\n * @sample {highcharts} highcharts/demo/x-range\n *         X-range\n *\n * @type      {number}\n * @product   highcharts highstock gantt\n * @apioption series.xrange.data.x\n */\n/**\n * The ending X value of the range point.\n *\n * @sample {highcharts} highcharts/demo/x-range\n *         X-range\n *\n * @type      {number}\n * @product   highcharts highstock gantt\n * @apioption series.xrange.data.x2\n */\n/**\n * The Y value of the range point.\n *\n * @sample {highcharts} highcharts/demo/x-range\n *         X-range\n *\n * @type      {number}\n * @product   highcharts highstock gantt\n * @apioption series.xrange.data.y\n */\n/**\n * A partial fill for each point, typically used to visualize how much of\n * a task is performed. The partial fill object can be set either on series\n * or point level.\n *\n * @sample {highcharts} highcharts/demo/x-range\n *         X-range with partial fill\n *\n * @declare   Highcharts.XrangePointPartialFillOptionsObject\n * @product   highcharts highstock gantt\n * @apioption series.xrange.data.partialFill\n */\n/**\n * The amount of the X-range point to be filled. Values can be 0-1 and are\n * converted to percentages in the default data label formatter.\n *\n * @type      {number}\n * @product   highcharts highstock gantt\n * @apioption series.xrange.data.partialFill.amount\n */\n/**\n * The fill color to be used for partial fills. Defaults to a darker shade\n * of the point color.\n *\n * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @product   highcharts highstock gantt\n * @apioption series.xrange.data.partialFill.fill\n */\n(''); // Adds doclets above to transpiled file\n\n;// ./code/es5/es-modules/Series/XRange/XRangePoint.js\n/* *\n *\n *  X-range series module\n *\n *  (c) 2010-2024 Torstein Honsi, Lars A. V. Cabrera\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar XRangePoint_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n        p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\nvar ColumnPoint = Series_SeriesRegistry.seriesTypes.column.prototype.pointClass;\n\nvar XRangePoint_extend = Core_Utilities.extend;\n/* *\n *\n *  Class\n *\n * */\nvar XRangePoint = /** @class */ (function (_super) {\n    XRangePoint_extends(XRangePoint, _super);\n    /**\n     * Extend init to have y default to 0.\n     *\n     * @private\n     */\n    function XRangePoint(series, options) {\n        var _this = _super.call(this,\n            series,\n            options) || this;\n        if (!_this.y) {\n            _this.y = 0;\n        }\n        return _this;\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * Return color of a point based on its category.\n     *\n     * @private\n     * @function getColorByCategory\n     *\n     * @param {object} series\n     *        The series which the point belongs to.\n     *\n     * @param {object} point\n     *        The point to calculate its color for.\n     *\n     * @return {object}\n     *         Returns an object containing the properties color and colorIndex.\n     */\n    XRangePoint.getColorByCategory = function (series, point) {\n        var colors = series.options.colors || series.chart.options.colors,\n            colorCount = colors ?\n                colors.length :\n                series.chart.options.chart.colorCount,\n            colorIndex = point.y % colorCount,\n            color = colors && colors[colorIndex];\n        return {\n            colorIndex: colorIndex,\n            color: color\n        };\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    XRangePoint.prototype.resolveColor = function () {\n        var series = this.series;\n        if (series.options.colorByPoint && !this.options.color) {\n            var colorByPoint = XRangePoint.getColorByCategory(series,\n                this);\n            if (!series.chart.styledMode) {\n                this.color = colorByPoint.color;\n            }\n            if (!this.options.colorIndex) {\n                this.colorIndex = colorByPoint.colorIndex;\n            }\n        }\n        else {\n            this.color = this.options.color || series.color;\n        }\n    };\n    /**\n     * Extend applyOptions to handle time strings for x2\n     *\n     * @private\n     */\n    XRangePoint.prototype.applyOptions = function (options, x) {\n        var _a;\n        _super.prototype.applyOptions.call(this, options, x);\n        this.x2 = this.series.chart.time.parse(this.x2);\n        this.isNull = !((_a = this.isValid) === null || _a === void 0 ? void 0 : _a.call(this));\n        return this;\n    };\n    /**\n     * @private\n     */\n    XRangePoint.prototype.setState = function () {\n        _super.prototype.setState.apply(this, arguments);\n        this.series.drawPoint(this, this.series.getAnimationVerb());\n    };\n    /**\n     * @private\n     */\n    XRangePoint.prototype.isValid = function () {\n        return typeof this.x === 'number' &&\n            typeof this.x2 === 'number';\n    };\n    return XRangePoint;\n}(ColumnPoint));\nXRangePoint_extend(XRangePoint.prototype, {\n    ttBelow: false,\n    tooltipDateKeys: ['x', 'x2']\n});\n/* *\n *\n *  Class Namespace\n *\n * */\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var XRange_XRangePoint = (XRangePoint);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * The ending X value of the range point.\n * @name Highcharts.Point#x2\n * @type {number|undefined}\n * @requires modules/xrange\n */\n/**\n * @interface Highcharts.PointOptionsObject in parts/Point.ts\n */ /**\n* The ending X value of the range point.\n* @name Highcharts.PointOptionsObject#x2\n* @type {number|undefined}\n* @requires modules/xrange\n*/\n(''); // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Series/XRange/XRangeSeries.js\n/* *\n *\n *  X-range series module\n *\n *  (c) 2010-2024 Torstein Honsi, Lars A. V. Cabrera\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar XRangeSeries_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n        p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\nvar XRangeSeries_composed = Core_Globals.composed, XRangeSeries_noop = Core_Globals.noop;\n\nvar XRangeSeries_color = Color_Color.parse;\n\nvar XRangeSeries_ColumnSeries = Series_SeriesRegistry.seriesTypes.column;\n\nvar XRangeSeries_addEvent = Core_Utilities.addEvent, XRangeSeries_clamp = Core_Utilities.clamp, XRangeSeries_crisp = Core_Utilities.crisp, XRangeSeries_defined = Core_Utilities.defined, XRangeSeries_extend = Core_Utilities.extend, XRangeSeries_find = Core_Utilities.find, XRangeSeries_isNumber = Core_Utilities.isNumber, XRangeSeries_isObject = Core_Utilities.isObject, XRangeSeries_merge = Core_Utilities.merge, XRangeSeries_pick = Core_Utilities.pick, XRangeSeries_pushUnique = Core_Utilities.pushUnique, XRangeSeries_relativeLength = Core_Utilities.relativeLength;\n\n\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Max x2 should be considered in xAxis extremes\n * @private\n */\nfunction onAxisAfterGetSeriesExtremes() {\n    var dataMax,\n        modMax;\n    if (this.isXAxis) {\n        dataMax = XRangeSeries_pick(this.dataMax, -Number.MAX_VALUE);\n        for (var _i = 0, _a = this.series; _i < _a.length; _i++) {\n            var series = _a[_i];\n            var column = (series.dataTable.getColumn('x2',\n                true) ||\n                    series.dataTable.getColumn('end',\n                true));\n            if (column) {\n                for (var _b = 0, _c = column; _b < _c.length; _b++) {\n                    var val = _c[_b];\n                    if (XRangeSeries_isNumber(val) && val > dataMax) {\n                        dataMax = val;\n                        modMax = true;\n                    }\n                }\n            }\n        }\n        if (modMax) {\n            this.dataMax = dataMax;\n        }\n    }\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * @private\n * @class\n * @name Highcharts.seriesTypes.xrange\n *\n * @augments Highcharts.Series\n */\nvar XRangeSeries = /** @class */ (function (_super) {\n    XRangeSeries_extends(XRangeSeries, _super);\n    function XRangeSeries() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    XRangeSeries.compose = function (AxisClass) {\n        if (XRangeSeries_pushUnique(XRangeSeries_composed, 'Series.XRange')) {\n            XRangeSeries_addEvent(AxisClass, 'afterGetSeriesExtremes', onAxisAfterGetSeriesExtremes);\n        }\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    XRangeSeries.prototype.init = function () {\n        _super.prototype.init.apply(this, arguments);\n        this.options.stacking = void 0; // #13161\n    };\n    /**\n     * Borrow the column series metrics, but with swapped axes. This gives\n     * free access to features like groupPadding, grouping, pointWidth etc.\n     * @private\n     */\n    XRangeSeries.prototype.getColumnMetrics = function () {\n        var _this = this;\n        var swapAxes = function () {\n                for (var _i = 0,\n            _a = _this.chart.series; _i < _a.length; _i++) {\n                    var series = _a[_i];\n                var xAxis = series.xAxis;\n                series.xAxis = series.yAxis;\n                series.yAxis = xAxis;\n            }\n        };\n        swapAxes();\n        var metrics = _super.prototype.getColumnMetrics.call(this);\n        swapAxes();\n        return metrics;\n    };\n    /**\n     * Override cropData to show a point where x or x2 is outside visible range,\n     * but one of them is inside.\n     * @private\n     */\n    XRangeSeries.prototype.cropData = function (table, min, max) {\n        // Replace xData with x2Data to find the appropriate cropStart\n        var xData = table.getColumn('x') || [], x2Data = table.getColumn('x2');\n        table.setColumn('x', x2Data, void 0, { silent: true });\n        var croppedData = _super.prototype.cropData.call(this,\n            table,\n            min,\n            max);\n        // Re-insert the cropped xData\n        table.setColumn('x', xData.slice(croppedData.start, croppedData.end), void 0, { silent: true });\n        return croppedData;\n    };\n    /**\n     * Finds the index of an existing point that matches the given point\n     * options.\n     *\n     * @private\n     *\n     * @param {Highcharts.XRangePointOptions} options\n     *        The options of the point.\n     *\n     * @return {number|undefined}\n     *         Returns index of a matching point, or undefined if no match is\n     *         found.\n     */\n    XRangeSeries.prototype.findPointIndex = function (options) {\n        var _a = this,\n            cropStart = _a.cropStart,\n            points = _a.points;\n        var id = options.id;\n        var pointIndex;\n        if (id) {\n            var point = XRangeSeries_find(points,\n                function (point) { return point.id === id; });\n            pointIndex = point ? point.index : void 0;\n        }\n        if (typeof pointIndex === 'undefined') {\n            var point = XRangeSeries_find(points,\n                function (point) { return (point.x === options.x &&\n                    point.x2 === options.x2 &&\n                    !point.touched); });\n            pointIndex = point ? point.index : void 0;\n        }\n        // Reduce pointIndex if data is cropped\n        if (this.cropped &&\n            XRangeSeries_isNumber(pointIndex) &&\n            XRangeSeries_isNumber(cropStart) &&\n            pointIndex >= cropStart) {\n            pointIndex -= cropStart;\n        }\n        return pointIndex;\n    };\n    XRangeSeries.prototype.alignDataLabel = function (point) {\n        var _a;\n        var oldPlotX = point.plotX;\n        point.plotX = XRangeSeries_pick(point.dlBox && point.dlBox.centerX, point.plotX);\n        if (point.dataLabel && ((_a = point.shapeArgs) === null || _a === void 0 ? void 0 : _a.width)) {\n            point.dataLabel.css({\n                width: \"\" + point.shapeArgs.width + \"px\"\n            });\n        }\n        _super.prototype.alignDataLabel.apply(this, arguments);\n        point.plotX = oldPlotX;\n    };\n    /**\n     * @private\n     */\n    XRangeSeries.prototype.translatePoint = function (point) {\n        var _a,\n            _b;\n        var xAxis = this.xAxis,\n            yAxis = this.yAxis,\n            metrics = this.columnMetrics,\n            options = this.options,\n            minPointLength = options.minPointLength || 0,\n            oldColWidth = (point.shapeArgs && point.shapeArgs.width || 0) / 2,\n            seriesXOffset = this.pointXOffset = metrics.offset,\n            posX = XRangeSeries_pick(point.x2,\n            point.x + (point.len || 0)),\n            borderRadius = options.borderRadius,\n            plotTop = this.chart.plotTop,\n            plotLeft = this.chart.plotLeft;\n        var plotX = point.plotX,\n            plotX2 = xAxis.translate(posX, 0, 0, 0, 1);\n        var length = Math.abs(plotX2 - plotX),\n            inverted = this.chart.inverted,\n            borderWidth = XRangeSeries_pick(options.borderWidth, 1);\n        var widthDifference,\n            partialFill,\n            yOffset = metrics.offset,\n            pointHeight = Math.round(metrics.width),\n            dlLeft,\n            dlRight,\n            dlWidth,\n            clipRectWidth;\n        if (minPointLength) {\n            widthDifference = minPointLength - length;\n            if (widthDifference < 0) {\n                widthDifference = 0;\n            }\n            plotX -= widthDifference / 2;\n            plotX2 += widthDifference / 2;\n        }\n        plotX = Math.max(plotX, -10);\n        plotX2 = XRangeSeries_clamp(plotX2, -10, xAxis.len + 10);\n        // Handle individual pointWidth\n        if (XRangeSeries_defined(point.options.pointWidth)) {\n            yOffset -= ((Math.ceil(point.options.pointWidth) - pointHeight) / 2);\n            pointHeight = Math.ceil(point.options.pointWidth);\n        }\n        // Apply pointPlacement to the Y axis\n        if (options.pointPlacement &&\n            XRangeSeries_isNumber(point.plotY) &&\n            yAxis.categories) {\n            point.plotY = yAxis.translate(point.y, 0, 1, 0, 1, options.pointPlacement);\n        }\n        var x = XRangeSeries_crisp(Math.min(plotX,\n            plotX2),\n            borderWidth),\n            x2 = XRangeSeries_crisp(Math.max(plotX,\n            plotX2),\n            borderWidth),\n            width = x2 - x;\n        var r = Math.min(XRangeSeries_relativeLength((typeof borderRadius === 'object' ?\n                borderRadius.radius :\n                borderRadius || 0),\n            pointHeight),\n            Math.min(width,\n            pointHeight) / 2);\n        var shapeArgs = {\n                x: x,\n                y: XRangeSeries_crisp((point.plotY || 0) + yOffset,\n            borderWidth),\n                width: width,\n                height: pointHeight,\n                r: r\n            };\n        point.shapeArgs = shapeArgs;\n        // Move tooltip to default position\n        if (!inverted) {\n            point.tooltipPos[0] -= oldColWidth +\n                seriesXOffset -\n                shapeArgs.width / 2;\n        }\n        else {\n            point.tooltipPos[1] += seriesXOffset +\n                oldColWidth;\n        }\n        // Align data labels inside the shape and inside the plot area\n        dlLeft = shapeArgs.x;\n        dlRight = dlLeft + shapeArgs.width;\n        if (dlLeft < 0 || dlRight > xAxis.len) {\n            dlLeft = XRangeSeries_clamp(dlLeft, 0, xAxis.len);\n            dlRight = XRangeSeries_clamp(dlRight, 0, xAxis.len);\n            dlWidth = dlRight - dlLeft;\n            point.dlBox = XRangeSeries_merge(shapeArgs, {\n                x: dlLeft,\n                width: dlRight - dlLeft,\n                centerX: dlWidth ? dlWidth / 2 : null\n            });\n        }\n        else {\n            point.dlBox = null;\n        }\n        // Tooltip position\n        var tooltipPos = point.tooltipPos;\n        var xIndex = !inverted ? 0 : 1;\n        var yIndex = !inverted ? 1 : 0;\n        var tooltipYOffset = (this.columnMetrics ?\n                this.columnMetrics.offset :\n                -metrics.width / 2);\n        // Centering tooltip position (#14147)\n        if (inverted) {\n            tooltipPos[xIndex] += shapeArgs.width / 2;\n        }\n        else {\n            tooltipPos[xIndex] = XRangeSeries_clamp(tooltipPos[xIndex] +\n                (xAxis.reversed ? -1 : 0) * shapeArgs.width, xAxis.left - plotLeft, xAxis.left + xAxis.len - plotLeft - 1);\n        }\n        tooltipPos[yIndex] = XRangeSeries_clamp(tooltipPos[yIndex] + ((inverted ? -1 : 1) * tooltipYOffset), yAxis.top - plotTop, yAxis.top + yAxis.len - plotTop - 1);\n        // Add a partShapeArgs to the point, based on the shapeArgs property\n        partialFill = point.partialFill;\n        if (partialFill) {\n            // Get the partial fill amount\n            if (XRangeSeries_isObject(partialFill)) {\n                partialFill = partialFill.amount;\n            }\n            // If it was not a number, assume 0\n            if (!XRangeSeries_isNumber(partialFill)) {\n                partialFill = 0;\n            }\n            point.partShapeArgs = XRangeSeries_merge(shapeArgs);\n            clipRectWidth = Math.max(Math.round(length * partialFill + point.plotX -\n                plotX), 0);\n            point.clipRectArgs = {\n                x: xAxis.reversed ? // #10717\n                    shapeArgs.x + length - clipRectWidth :\n                    shapeArgs.x,\n                y: shapeArgs.y,\n                width: clipRectWidth,\n                height: shapeArgs.height\n            };\n        }\n        // Add formatting keys for tooltip and data labels. Use 'category' as\n        // 'key' to ensure tooltip datetime formatting. Use 'name' only when\n        // 'category' is undefined.\n        point.key = point.category || point.name;\n        point.yCategory = (_a = yAxis.categories) === null || _a === void 0 ? void 0 : _a[(_b = point.y) !== null && _b !== void 0 ? _b : -1];\n    };\n    /**\n     * @private\n     */\n    XRangeSeries.prototype.translate = function () {\n        _super.prototype.translate.apply(this, arguments);\n        for (var _i = 0, _a = this.points; _i < _a.length; _i++) {\n            var point = _a[_i];\n            this.translatePoint(point);\n        }\n    };\n    /**\n     * Draws a single point in the series. Needed for partial fill.\n     *\n     * This override turns point.graphic into a group containing the\n     * original graphic and an overlay displaying the partial fill.\n     *\n     * @private\n     *\n     * @param {Highcharts.Point} point\n     *        An instance of Point in the series.\n     *\n     * @param {\"animate\"|\"attr\"} verb\n     *        'animate' (animates changes) or 'attr' (sets options)\n     */\n    XRangeSeries.prototype.drawPoint = function (point, verb) {\n        var seriesOpts = this.options,\n            renderer = this.chart.renderer,\n            type = point.shapeType,\n            shapeArgs = point.shapeArgs,\n            partShapeArgs = point.partShapeArgs,\n            clipRectArgs = point.clipRectArgs,\n            pointState = point.state,\n            stateOpts = (seriesOpts.states[pointState || 'normal'] ||\n                {}),\n            pointStateVerb = typeof pointState === 'undefined' ?\n                'attr' : verb,\n            pointAttr = this.pointAttribs(point,\n            pointState),\n            animation = XRangeSeries_pick(this.chart.options.chart.animation,\n            stateOpts.animation);\n        var graphic = point.graphic,\n            pfOptions = point.partialFill;\n        if (!point.isNull && point.visible !== false) {\n            // Original graphic\n            if (graphic) { // Update\n                graphic.rect[verb](shapeArgs);\n            }\n            else {\n                point.graphic = graphic = renderer.g('point')\n                    .addClass(point.getClassName())\n                    .add(point.group || this.group);\n                graphic.rect = renderer[type](XRangeSeries_merge(shapeArgs))\n                    .addClass(point.getClassName())\n                    .addClass('highcharts-partfill-original')\n                    .add(graphic);\n            }\n            // Partial fill graphic\n            if (partShapeArgs) {\n                if (graphic.partRect) {\n                    graphic.partRect[verb](XRangeSeries_merge(partShapeArgs));\n                    graphic.partialClipRect[verb](XRangeSeries_merge(clipRectArgs));\n                }\n                else {\n                    graphic.partialClipRect = renderer.clipRect(clipRectArgs.x, clipRectArgs.y, clipRectArgs.width, clipRectArgs.height);\n                    graphic.partRect =\n                        renderer[type](partShapeArgs)\n                            .addClass('highcharts-partfill-overlay')\n                            .add(graphic)\n                            .clip(graphic.partialClipRect);\n                }\n            }\n            // Presentational\n            if (!this.chart.styledMode) {\n                graphic\n                    .rect[verb](pointAttr, animation)\n                    .shadow(seriesOpts.shadow);\n                if (partShapeArgs) {\n                    // Ensure pfOptions is an object\n                    if (!XRangeSeries_isObject(pfOptions)) {\n                        pfOptions = {};\n                    }\n                    if (XRangeSeries_isObject(seriesOpts.partialFill)) {\n                        pfOptions = XRangeSeries_merge(seriesOpts.partialFill, pfOptions);\n                    }\n                    var fill = (pfOptions.fill ||\n                            XRangeSeries_color(pointAttr.fill).brighten(-0.3).get() ||\n                            XRangeSeries_color(point.color || this.color)\n                                .brighten(-0.3).get());\n                    pointAttr.fill = fill;\n                    graphic\n                        .partRect[pointStateVerb](pointAttr, animation)\n                        .shadow(seriesOpts.shadow);\n                }\n            }\n        }\n        else if (graphic) {\n            point.graphic = graphic.destroy(); // #1269\n        }\n    };\n    /**\n     * @private\n     */\n    XRangeSeries.prototype.drawPoints = function () {\n        var verb = this.getAnimationVerb();\n        // Draw the columns\n        for (var _i = 0, _a = this.points; _i < _a.length; _i++) {\n            var point = _a[_i];\n            this.drawPoint(point, verb);\n        }\n    };\n    /**\n     * Returns \"animate\", or \"attr\" if the number of points is above the\n     * animation limit.\n     *\n     * @private\n     */\n    XRangeSeries.prototype.getAnimationVerb = function () {\n        return (this.chart.pointCount < (this.options.animationLimit || 250) ?\n            'animate' :\n            'attr');\n    };\n    /**\n     * @private\n     */\n    XRangeSeries.prototype.isPointInside = function (point) {\n        var shapeArgs = point.shapeArgs,\n            plotX = point.plotX,\n            plotY = point.plotY;\n        if (!shapeArgs) {\n            return _super.prototype.isPointInside.apply(this, arguments);\n        }\n        var isInside = typeof plotX !== 'undefined' &&\n                typeof plotY !== 'undefined' &&\n                plotY >= 0 &&\n                plotY <= this.yAxis.len &&\n                (shapeArgs.x || 0) + (shapeArgs.width || 0) >= 0 &&\n                plotX <= this.xAxis.len;\n        return isInside;\n    };\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    XRangeSeries.defaultOptions = XRangeSeries_merge(XRangeSeries_ColumnSeries.defaultOptions, XRange_XRangeSeriesDefaults);\n    return XRangeSeries;\n}(XRangeSeries_ColumnSeries));\nXRangeSeries_extend(XRangeSeries.prototype, {\n    pointClass: XRange_XRangePoint,\n    pointArrayMap: ['x2', 'y'],\n    getExtremesFromAll: true,\n    keysAffectYAxis: ['y'],\n    parallelArrays: ['x', 'x2', 'y'],\n    requireSorting: false,\n    type: 'xrange',\n    animate: Series_SeriesRegistry.series.prototype.animate,\n    autoIncrement: XRangeSeries_noop,\n    buildKDTree: XRangeSeries_noop\n});\nSeries_SeriesRegistry.registerSeriesType('xrange', XRangeSeries);\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var XRange_XRangeSeries = (XRangeSeries);\n\n;// ./code/es5/es-modules/masters/modules/xrange.src.js\n/**\n * @license Highcharts JS v12.1.2 (2025-01-09)\n * @module highcharts/modules/xrange\n * @requires highcharts\n *\n * X-range series\n *\n * (c) 2010-2024 Torstein Honsi, Lars A. V. Cabrera\n *\n * License: www.highcharts.com/license\n */\n\n\n\nvar xrange_src_G = Core_Globals;\nXRange_XRangeSeries.compose(xrange_src_G.Axis);\n/* harmony default export */ var xrange_src = ((/* unused pure expression or super */ null && (Highcharts)));\n\n;// ./code/es5/es-modules/Series/Gantt/GanttPoint.js\n/* *\n *\n *  (c) 2016-2024 Highsoft AS\n *\n *  Author: Lars A. V. Cabrera\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar GanttPoint_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n        p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\nvar GanttPoint_XRangePoint = Series_SeriesRegistry.seriesTypes.xrange.prototype.pointClass;\n/* *\n *\n *  Class\n *\n * */\nvar GanttPoint = /** @class */ (function (_super) {\n    GanttPoint_extends(GanttPoint, _super);\n    function GanttPoint() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    GanttPoint.setGanttPointAliases = function (options, chart) {\n        var _a,\n            _b,\n            _c;\n        options.x = options.start = chart.time.parse((_a = options.start) !== null && _a !== void 0 ? _a : options.x);\n        options.x2 = options.end = chart.time.parse((_b = options.end) !== null && _b !== void 0 ? _b : options.x2);\n        options.partialFill = options.completed =\n            (_c = options.completed) !== null && _c !== void 0 ? _c : options.partialFill;\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Applies the options containing the x and y data and possible some\n     * extra properties. This is called on point init or from point.update.\n     *\n     * @private\n     * @function Highcharts.Point#applyOptions\n     *\n     * @param {Object} options\n     *        The point options\n     *\n     * @param {number} x\n     *        The x value\n     *\n     * @return {Highcharts.Point}\n     *         The Point instance\n     */\n    GanttPoint.prototype.applyOptions = function (options, x) {\n        var _a;\n        var ganttPoint = _super.prototype.applyOptions.call(this,\n            options,\n            x);\n        GanttPoint.setGanttPointAliases(ganttPoint, ganttPoint.series.chart);\n        this.isNull = !((_a = this.isValid) === null || _a === void 0 ? void 0 : _a.call(this));\n        return ganttPoint;\n    };\n    GanttPoint.prototype.isValid = function () {\n        return ((typeof this.start === 'number' ||\n            typeof this.x === 'number') &&\n            (typeof this.end === 'number' ||\n                typeof this.x2 === 'number' ||\n                this.milestone));\n    };\n    return GanttPoint;\n}(GanttPoint_XRangePoint));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Gantt_GanttPoint = (GanttPoint);\n\n;// ./code/es5/es-modules/Series/Gantt/GanttSeriesDefaults.js\n/* *\n *\n *  (c) 2016-2024 Highsoft AS\n *\n *  Author: Lars A. V. Cabrera\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar GanttSeriesDefaults_isNumber = Core_Utilities.isNumber;\n/* *\n *\n *  API Options\n *\n * */\n/**\n * A `gantt` series. If the [type](#series.gantt.type) option is not specified,\n * it is inherited from [chart.type](#chart.type).\n *\n * @extends      plotOptions.xrange\n * @product      gantt\n * @requires     highcharts-gantt\n * @optionparent plotOptions.gantt\n */\nvar GanttSeriesDefaults = {\n    // Options - default options merged with parent\n    grouping: false,\n    dataLabels: {\n        enabled: true\n    },\n    tooltip: {\n        headerFormat: '<span style=\"font-size: 0.8em\">{series.name}</span><br/>',\n        pointFormat: null,\n        pointFormatter: function () {\n            var point = this,\n                series = point.series,\n                xAxis = series.xAxis,\n                formats = series.tooltipOptions.dateTimeLabelFormats,\n                startOfWeek = xAxis.options.startOfWeek,\n                ttOptions = series.tooltipOptions,\n                milestone = point.options.milestone;\n            var format = ttOptions.xDateFormat,\n                retVal = '<b>' + (point.name || point.yCategory) + '</b>';\n            if (ttOptions.pointFormat) {\n                return point.tooltipFormatter(ttOptions.pointFormat);\n            }\n            if (!format && GanttSeriesDefaults_isNumber(point.start)) {\n                format = series.chart.time.getDateFormat(xAxis.closestPointRange, point.start, startOfWeek, formats || {});\n            }\n            var start = series.chart.time.dateFormat(format,\n                point.start),\n                end = series.chart.time.dateFormat(format,\n                point.end);\n            retVal += '<br/>';\n            if (!milestone) {\n                retVal += 'Start: ' + start + '<br/>';\n                retVal += 'End: ' + end + '<br/>';\n            }\n            else {\n                retVal += start + '<br/>';\n            }\n            return retVal;\n        }\n    },\n    connectors: {\n        type: 'simpleConnect',\n        /**\n         * @declare Highcharts.ConnectorsAnimationOptionsObject\n         */\n        animation: {\n            reversed: true // Dependencies go from child to parent\n        },\n        radius: 0,\n        startMarker: {\n            enabled: true,\n            symbol: 'arrow-filled',\n            radius: 4,\n            fill: '#fa0',\n            align: 'left'\n        },\n        endMarker: {\n            enabled: false, // Only show arrow on the dependent task\n            align: 'right'\n        }\n    }\n};\n/**\n * A `gantt` series.\n *\n * @extends   series,plotOptions.gantt\n * @excluding boostThreshold, dashStyle, findNearestPointBy,\n *            getExtremesFromAll, marker, negativeColor, pointInterval,\n *            pointIntervalUnit, pointPlacement, pointStart\n * @product   gantt\n * @requires  highcharts-gantt\n * @apioption series.gantt\n */\n/**\n * Data for a Gantt series.\n *\n * @declare   Highcharts.GanttPointOptionsObject\n * @type      {Array<*>}\n * @extends   series.xrange.data\n * @excluding className, connect, dataLabels, events,\n *            partialFill, selected, x, x2\n * @product   gantt\n * @apioption series.gantt.data\n */\n/**\n * Whether the grid node belonging to this point should start as collapsed. Used\n * in axes of type treegrid.\n *\n * @sample {gantt} gantt/treegrid-axis/collapsed/\n *         Start as collapsed\n *\n * @type      {boolean}\n * @default   false\n * @product   gantt\n * @apioption series.gantt.data.collapsed\n */\n/**\n * The start time of a task. May be a timestamp or a date string.\n *\n * @type      {number|string}\n * @product   gantt\n * @apioption series.gantt.data.start\n */\n/**\n * The end time of a task. May be a timestamp or a date string.\n *\n * @type      {number|string}\n * @product   gantt\n * @apioption series.gantt.data.end\n */\n/**\n * The Y value of a task.\n *\n * @type      {number}\n * @product   gantt\n * @apioption series.gantt.data.y\n */\n/**\n * The name of a task. If a `treegrid` y-axis is used (default in Gantt charts),\n * this will be picked up automatically, and used to calculate the y-value.\n *\n * @type      {string}\n * @product   gantt\n * @apioption series.gantt.data.name\n */\n/**\n * Progress indicator, how much of the task completed. If it is a number, the\n * `fill` will be applied automatically.\n *\n * @sample {gantt} gantt/demo/progress-indicator\n *         Progress indicator\n *\n * @type      {number|*}\n * @extends   series.xrange.data.partialFill\n * @product   gantt\n * @apioption series.gantt.data.completed\n */\n/**\n * The amount of the progress indicator, ranging from 0 (not started) to 1\n * (finished).\n *\n * @type      {number}\n * @default   0\n * @apioption series.gantt.data.completed.amount\n */\n/**\n * The fill of the progress indicator. Defaults to a darkened variety of the\n * main color.\n *\n * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @apioption series.gantt.data.completed.fill\n */\n/**\n * The ID of the point (task) that this point depends on in Gantt charts.\n * Aliases [connect](series.xrange.data.connect). Can also be an object,\n * specifying further connecting [options](series.gantt.connectors) between the\n * points. Multiple connections can be specified by providing an array.\n *\n * @sample gantt/demo/project-management\n *         Dependencies\n * @sample gantt/pathfinder/demo\n *         Different connection types\n *\n * @type      {string|Array<string|*>|*}\n * @extends   series.xrange.data.connect\n * @since     6.2.0\n * @product   gantt\n * @apioption series.gantt.data.dependency\n */\n/**\n * Whether this point is a milestone. If so, only the `start` option is handled,\n * while `end` is ignored.\n *\n * @sample gantt/gantt/milestones\n *         Milestones\n *\n * @type      {boolean}\n * @since     6.2.0\n * @product   gantt\n * @apioption series.gantt.data.milestone\n */\n/**\n * The ID of the parent point (task) of this point in Gantt charts.\n *\n * @sample gantt/demo/subtasks\n *         Gantt chart with subtasks\n *\n * @type      {string}\n * @since     6.2.0\n * @product   gantt\n * @apioption series.gantt.data.parent\n */\n/**\n * @excluding afterAnimate\n * @apioption series.gantt.events\n */\n''; // Detachs doclets above\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Gantt_GanttSeriesDefaults = (GanttSeriesDefaults);\n\n;// ./code/es5/es-modules/Core/Axis/BrokenAxis.js\n/* *\n *\n *  (c) 2009-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar BrokenAxis_addEvent = Core_Utilities.addEvent, BrokenAxis_find = Core_Utilities.find, BrokenAxis_fireEvent = Core_Utilities.fireEvent, BrokenAxis_isArray = Core_Utilities.isArray, BrokenAxis_isNumber = Core_Utilities.isNumber, BrokenAxis_pick = Core_Utilities.pick;\n/* *\n *\n *  Composition\n *\n * */\n/**\n * Axis with support of broken data rows.\n * @private\n */\nvar BrokenAxis;\n(function (BrokenAxis) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Adds support for broken axes.\n     * @private\n     */\n    function compose(AxisClass, SeriesClass) {\n        if (!AxisClass.keepProps.includes('brokenAxis')) {\n            AxisClass.keepProps.push('brokenAxis');\n            BrokenAxis_addEvent(AxisClass, 'init', onAxisInit);\n            BrokenAxis_addEvent(AxisClass, 'afterInit', onAxisAfterInit);\n            BrokenAxis_addEvent(AxisClass, 'afterSetTickPositions', onAxisAfterSetTickPositions);\n            BrokenAxis_addEvent(AxisClass, 'afterSetOptions', onAxisAfterSetOptions);\n            var seriesProto = SeriesClass.prototype;\n            seriesProto.drawBreaks = seriesDrawBreaks;\n            seriesProto.gappedPath = seriesGappedPath;\n            BrokenAxis_addEvent(SeriesClass, 'afterGeneratePoints', onSeriesAfterGeneratePoints);\n            BrokenAxis_addEvent(SeriesClass, 'afterRender', onSeriesAfterRender);\n        }\n        return AxisClass;\n    }\n    BrokenAxis.compose = compose;\n    /**\n     * @private\n     */\n    function onAxisAfterInit() {\n        if (typeof this.brokenAxis !== 'undefined') {\n            this.brokenAxis.setBreaks(this.options.breaks, false);\n        }\n    }\n    /**\n     * Force Axis to be not-ordinal when breaks are defined.\n     * @private\n     */\n    function onAxisAfterSetOptions() {\n        var _a;\n        var axis = this;\n        if ((_a = axis.brokenAxis) === null || _a === void 0 ? void 0 : _a.hasBreaks) {\n            axis.options.ordinal = false;\n        }\n    }\n    /**\n     * @private\n     */\n    function onAxisAfterSetTickPositions() {\n        var axis = this,\n            brokenAxis = axis.brokenAxis;\n        if (brokenAxis === null || brokenAxis === void 0 ? void 0 : brokenAxis.hasBreaks) {\n            var tickPositions = axis.tickPositions,\n                info = axis.tickPositions.info,\n                newPositions = [];\n            for (var i = 0; i < tickPositions.length; i++) {\n                if (!brokenAxis.isInAnyBreak(tickPositions[i])) {\n                    newPositions.push(tickPositions[i]);\n                }\n            }\n            axis.tickPositions = newPositions;\n            axis.tickPositions.info = info;\n        }\n    }\n    /**\n     * @private\n     */\n    function onAxisInit() {\n        var axis = this;\n        if (!axis.brokenAxis) {\n            axis.brokenAxis = new Additions(axis);\n        }\n    }\n    /**\n     * @private\n     */\n    function onSeriesAfterGeneratePoints() {\n        var _a,\n            _b;\n        var _c = this,\n            isDirty = _c.isDirty,\n            connectNulls = _c.options.connectNulls,\n            points = _c.points,\n            xAxis = _c.xAxis,\n            yAxis = _c.yAxis;\n        // Set, or reset visibility of the points. Axis.setBreaks marks\n        // the series as isDirty\n        if (isDirty) {\n            var i = points.length;\n            while (i--) {\n                var point = points[i];\n                // Respect nulls inside the break (#4275)\n                var nullGap = point.y === null && connectNulls === false;\n                var isPointInBreak = (!nullGap && (((_a = xAxis === null || xAxis === void 0 ? void 0 : xAxis.brokenAxis) === null || _a === void 0 ? void 0 : _a.isInAnyBreak(point.x,\n                    true)) ||\n                        ((_b = yAxis === null || yAxis === void 0 ? void 0 : yAxis.brokenAxis) === null || _b === void 0 ? void 0 : _b.isInAnyBreak(point.y,\n                    true))));\n                // Set point.visible if in any break.\n                // If not in break, reset visible to original value.\n                point.visible = isPointInBreak ?\n                    false :\n                    point.options.visible !== false;\n            }\n        }\n    }\n    /**\n     * @private\n     */\n    function onSeriesAfterRender() {\n        this.drawBreaks(this.xAxis, ['x']);\n        this.drawBreaks(this.yAxis, BrokenAxis_pick(this.pointArrayMap, ['y']));\n    }\n    /**\n     * @private\n     */\n    function seriesDrawBreaks(axis, keys) {\n        var _a;\n        var series = this,\n            points = series.points;\n        var breaks,\n            threshold,\n            y;\n        if ((_a = axis === null || axis === void 0 ? void 0 : axis.brokenAxis) === null || _a === void 0 ? void 0 : _a.hasBreaks) {\n            var brokenAxis_1 = axis.brokenAxis;\n            keys.forEach(function (key) {\n                var _a,\n                    _b;\n                breaks = (brokenAxis_1 === null || brokenAxis_1 === void 0 ? void 0 : brokenAxis_1.breakArray) || [];\n                threshold = axis.isXAxis ?\n                    axis.min :\n                    BrokenAxis_pick(series.options.threshold, axis.min);\n                // Array of breaks that have been \"zoomed-out\" which means that\n                // they were shown previously, but now after zoom, they are not\n                // (#19885).\n                var breaksOutOfRange = (_b = (_a = axis === null || axis === void 0 ? void 0 : axis.options) === null || _a === void 0 ? void 0 : _a.breaks) === null || _b === void 0 ? void 0 : _b.filter(function (brk) {\n                        var isOut = true;\n                    // Iterate to see if \"brk\" is in axis range\n                    for (var i = 0; i < breaks.length; i++) {\n                        var otherBreak = breaks[i];\n                        if (otherBreak.from === brk.from &&\n                            otherBreak.to === brk.to) {\n                            isOut = false;\n                            break;\n                        }\n                    }\n                    return isOut;\n                });\n                points.forEach(function (point) {\n                    y = BrokenAxis_pick(point['stack' + key.toUpperCase()], point[key]);\n                    breaks.forEach(function (brk) {\n                        if (BrokenAxis_isNumber(threshold) && BrokenAxis_isNumber(y)) {\n                            var eventName = '';\n                            if ((threshold < brk.from && y > brk.to) ||\n                                (threshold > brk.from && y < brk.from)) {\n                                eventName = 'pointBreak';\n                            }\n                            else if ((threshold < brk.from &&\n                                y > brk.from &&\n                                y < brk.to) || (threshold > brk.from &&\n                                y > brk.to &&\n                                y < brk.from)) {\n                                eventName = 'pointInBreak';\n                            }\n                            if (eventName) {\n                                BrokenAxis_fireEvent(axis, eventName, { point: point, brk: brk });\n                            }\n                        }\n                    });\n                    breaksOutOfRange === null || breaksOutOfRange === void 0 ? void 0 : breaksOutOfRange.forEach(function (brk) {\n                        BrokenAxis_fireEvent(axis, 'pointOutsideOfBreak', { point: point, brk: brk });\n                    });\n                });\n            });\n        }\n    }\n    /**\n     * Extend getGraphPath by identifying gaps in the data so that we\n     * can draw a gap in the line or area. This was moved from ordinal\n     * axis module to broken axis module as of #5045.\n     *\n     * @private\n     * @function Highcharts.Series#gappedPath\n     *\n     * @return {Highcharts.SVGPathArray}\n     * Gapped path\n     */\n    function seriesGappedPath() {\n        var currentDataGrouping = this.currentDataGrouping,\n            groupingSize = currentDataGrouping === null || currentDataGrouping === void 0 ? void 0 : currentDataGrouping.gapSize,\n            points = this.points.slice(),\n            yAxis = this.yAxis;\n        var gapSize = this.options.gapSize,\n            i = points.length - 1,\n            stack;\n        /**\n         * Defines when to display a gap in the graph, together with the\n         * [gapUnit](plotOptions.series.gapUnit) option.\n         *\n         * In case when `dataGrouping` is enabled, points can be grouped\n         * into a larger time span. This can make the grouped points to\n         * have a greater distance than the absolute value of `gapSize`\n         * property, which will result in disappearing graph completely.\n         * To prevent this situation the mentioned distance between\n         * grouped points is used instead of previously defined\n         * `gapSize`.\n         *\n         * In practice, this option is most often used to visualize gaps\n         * in time series. In a stock chart, intraday data is available\n         * for daytime hours, while gaps will appear in nights and\n         * weekends.\n         *\n         * @see [gapUnit](plotOptions.series.gapUnit)\n         * @see [xAxis.breaks](#xAxis.breaks)\n         *\n         * @sample {highstock} stock/plotoptions/series-gapsize/\n         * Setting the gap size to 2 introduces gaps for weekends in\n         * daily datasets.\n         *\n         * @type      {number}\n         * @default   0\n         * @product   highstock\n         * @requires  modules/broken-axis\n         * @apioption plotOptions.series.gapSize\n         */\n        /**\n         * Together with [gapSize](plotOptions.series.gapSize), this\n         * option defines where to draw gaps in the graph.\n         *\n         * When the `gapUnit` is `\"relative\"` (default), a gap size of 5\n         * means that if the distance between two points is greater than\n         * 5 times that of the two closest points, the graph will be\n         * broken.\n         *\n         * When the `gapUnit` is `\"value\"`, the gap is based on absolute\n         * axis values, which on a datetime axis is milliseconds. This\n         * also applies to the navigator series that inherits gap\n         * options from the base series.\n         *\n         * @see [gapSize](plotOptions.series.gapSize)\n         *\n         * @type       {string}\n         * @default    relative\n         * @since      5.0.13\n         * @product    highstock\n         * @validvalue [\"relative\", \"value\"]\n         * @requires   modules/broken-axis\n         * @apioption  plotOptions.series.gapUnit\n         */\n        if (gapSize && i > 0) { // #5008\n            // Gap unit is relative\n            if (this.options.gapUnit !== 'value') {\n                gapSize *= this.basePointRange;\n            }\n            // Setting a new gapSize in case dataGrouping is enabled\n            // (#7686)\n            if (groupingSize &&\n                groupingSize > gapSize &&\n                // Except when DG is forced (e.g. from other series)\n                // and has lower granularity than actual points (#11351)\n                groupingSize >= this.basePointRange) {\n                gapSize = groupingSize;\n            }\n            // Extension for ordinal breaks\n            var current = void 0,\n                next = void 0;\n            while (i--) {\n                // Reassign next if it is not visible\n                if (!(next && next.visible !== false)) {\n                    next = points[i + 1];\n                }\n                current = points[i];\n                // Skip iteration if one of the points is not visible\n                if (next.visible === false || current.visible === false) {\n                    continue;\n                }\n                if (next.x - current.x > gapSize) {\n                    var xRange = (current.x + next.x) / 2;\n                    points.splice(// Insert after this one\n                    i + 1, 0, {\n                        isNull: true,\n                        x: xRange\n                    });\n                    // For stacked chart generate empty stack items, #6546\n                    if (yAxis.stacking && this.options.stacking) {\n                        stack = yAxis.stacking.stacks[this.stackKey][xRange] = new Stacking_StackItem(yAxis, yAxis.options.stackLabels, false, xRange, this.stack);\n                        stack.total = 0;\n                    }\n                }\n                // Assign current to next for the upcoming iteration\n                next = current;\n            }\n        }\n        // Call base method\n        return this.getGraphPath(points);\n    }\n    /* *\n     *\n     *  Class\n     *\n     * */\n    /**\n     * Provides support for broken axes.\n     * @private\n     * @class\n     */\n    var Additions = /** @class */ (function () {\n            /* *\n             *\n             *  Constructors\n             *\n             * */\n            function Additions(axis) {\n                this.hasBreaks = false;\n            this.axis = axis;\n        }\n        /* *\n         *\n         *  Static Functions\n         *\n         * */\n        /**\n         * @private\n         */\n        Additions.isInBreak = function (brk, val) {\n            var repeat = brk.repeat || Infinity,\n                from = brk.from,\n                length = brk.to - brk.from,\n                test = (val >= from ?\n                    (val - from) % repeat :\n                    repeat - ((from - val) % repeat));\n            var ret;\n            if (!brk.inclusive) {\n                ret = test < length && test !== 0;\n            }\n            else {\n                ret = test <= length;\n            }\n            return ret;\n        };\n        /**\n         * @private\n         */\n        Additions.lin2Val = function (val) {\n            var axis = this;\n            var brokenAxis = axis.brokenAxis;\n            var breakArray = brokenAxis && brokenAxis.breakArray;\n            if (!breakArray || !BrokenAxis_isNumber(val)) {\n                return val;\n            }\n            var nval = val,\n                brk,\n                i;\n            for (i = 0; i < breakArray.length; i++) {\n                brk = breakArray[i];\n                if (brk.from >= nval) {\n                    break;\n                }\n                else if (brk.to < nval) {\n                    nval += brk.len;\n                }\n                else if (Additions.isInBreak(brk, nval)) {\n                    nval += brk.len;\n                }\n            }\n            return nval;\n        };\n        /**\n         * @private\n         */\n        Additions.val2Lin = function (val) {\n            var axis = this;\n            var brokenAxis = axis.brokenAxis;\n            var breakArray = brokenAxis && brokenAxis.breakArray;\n            if (!breakArray || !BrokenAxis_isNumber(val)) {\n                return val;\n            }\n            var nval = val,\n                brk,\n                i;\n            for (i = 0; i < breakArray.length; i++) {\n                brk = breakArray[i];\n                if (brk.to <= val) {\n                    nval -= brk.len;\n                }\n                else if (brk.from >= val) {\n                    break;\n                }\n                else if (Additions.isInBreak(brk, val)) {\n                    nval -= (val - brk.from);\n                    break;\n                }\n            }\n            return nval;\n        };\n        /* *\n         *\n         *  Functions\n         *\n         * */\n        /**\n         * Returns the first break found where the x is larger then break.from\n         * and smaller then break.to.\n         *\n         * @param {number} x\n         * The number which should be within a break.\n         *\n         * @param {Array<Highcharts.XAxisBreaksOptions>} breaks\n         * The array of breaks to search within.\n         *\n         * @return {Highcharts.XAxisBreaksOptions|undefined}\n         * Returns the first break found that matches, returns false if no break\n         * is found.\n         */\n        Additions.prototype.findBreakAt = function (x, breaks) {\n            return BrokenAxis_find(breaks, function (b) {\n                return b.from < x && x < b.to;\n            });\n        };\n        /**\n         * @private\n         */\n        Additions.prototype.isInAnyBreak = function (val, testKeep) {\n            var brokenAxis = this,\n                axis = brokenAxis.axis,\n                breaks = axis.options.breaks || [];\n            var i = breaks.length,\n                inbrk,\n                keep,\n                ret;\n            if (i && BrokenAxis_isNumber(val)) {\n                while (i--) {\n                    if (Additions.isInBreak(breaks[i], val)) {\n                        inbrk = true;\n                        if (!keep) {\n                            keep = BrokenAxis_pick(breaks[i].showPoints, !axis.isXAxis);\n                        }\n                    }\n                }\n                if (inbrk && testKeep) {\n                    ret = inbrk && !keep;\n                }\n                else {\n                    ret = inbrk;\n                }\n            }\n            return ret;\n        };\n        /**\n         * Dynamically set or unset breaks in an axis. This function in lighter\n         * than using Axis.update, and it also preserves animation.\n         *\n         * @private\n         * @function Highcharts.Axis#setBreaks\n         *\n         * @param {Array<Highcharts.XAxisBreaksOptions>} [breaks]\n         * The breaks to add. When `undefined` it removes existing breaks.\n         *\n         * @param {boolean} [redraw=true]\n         * Whether to redraw the chart immediately.\n         */\n        Additions.prototype.setBreaks = function (breaks, redraw) {\n            var brokenAxis = this,\n                axis = brokenAxis.axis,\n                time = axis.chart.time,\n                hasBreaks = BrokenAxis_isArray(breaks) &&\n                    !!breaks.length &&\n                    !!Object.keys(breaks[0]).length; // Check for [{}], #16368.\n                axis.isDirty = brokenAxis.hasBreaks !== hasBreaks;\n            brokenAxis.hasBreaks = hasBreaks;\n            // Compile string dates\n            breaks === null || breaks === void 0 ? void 0 : breaks.forEach(function (brk) {\n                brk.from = time.parse(brk.from) || 0;\n                brk.to = time.parse(brk.to) || 0;\n            });\n            if (breaks !== axis.options.breaks) {\n                axis.options.breaks = axis.userOptions.breaks = breaks;\n            }\n            axis.forceRedraw = true; // Force recalculation in setScale\n            // Recalculate series related to the axis.\n            axis.series.forEach(function (series) {\n                series.isDirty = true;\n            });\n            if (!hasBreaks && axis.val2lin === Additions.val2Lin) {\n                // Revert to prototype functions\n                delete axis.val2lin;\n                delete axis.lin2val;\n            }\n            if (hasBreaks) {\n                axis.userOptions.ordinal = false;\n                axis.lin2val = Additions.lin2Val;\n                axis.val2lin = Additions.val2Lin;\n                axis.setExtremes = function (newMin, newMax, redraw, animation, eventArguments) {\n                    // If trying to set extremes inside a break, extend min to\n                    // after, and max to before the break ( #3857 )\n                    if (brokenAxis.hasBreaks) {\n                        var breaks_1 = (this.options.breaks || []);\n                        var axisBreak = void 0;\n                        while ((axisBreak = brokenAxis.findBreakAt(newMin, breaks_1))) {\n                            newMin = axisBreak.to;\n                        }\n                        while ((axisBreak = brokenAxis.findBreakAt(newMax, breaks_1))) {\n                            newMax = axisBreak.from;\n                        }\n                        // If both min and max is within the same break.\n                        if (newMax < newMin) {\n                            newMax = newMin;\n                        }\n                    }\n                    axis.constructor.prototype.setExtremes.call(this, newMin, newMax, redraw, animation, eventArguments);\n                };\n                axis.setAxisTranslation = function () {\n                    axis.constructor.prototype.setAxisTranslation.call(this);\n                    brokenAxis.unitLength = void 0;\n                    if (brokenAxis.hasBreaks) {\n                        var breaks_2 = axis.options.breaks || [], \n                            // Temporary one:\n                            breakArrayT_1 = [],\n                            breakArray_1 = [],\n                            pointRangePadding = BrokenAxis_pick(axis.pointRangePadding, 0);\n                        var length_1 = 0,\n                            inBrk_1,\n                            repeat_1,\n                            min_1 = axis.userMin || axis.min,\n                            max_1 = axis.userMax || axis.max,\n                            start_1,\n                            i_1;\n                        // Min & max check (#4247)\n                        breaks_2.forEach(function (brk) {\n                            repeat_1 = brk.repeat || Infinity;\n                            if (BrokenAxis_isNumber(min_1) && BrokenAxis_isNumber(max_1)) {\n                                if (Additions.isInBreak(brk, min_1)) {\n                                    min_1 += ((brk.to % repeat_1) -\n                                        (min_1 % repeat_1));\n                                }\n                                if (Additions.isInBreak(brk, max_1)) {\n                                    max_1 -= ((max_1 % repeat_1) -\n                                        (brk.from % repeat_1));\n                                }\n                            }\n                        });\n                        // Construct an array holding all breaks in the axis\n                        breaks_2.forEach(function (brk) {\n                            start_1 = brk.from;\n                            repeat_1 = brk.repeat || Infinity;\n                            if (BrokenAxis_isNumber(min_1) && BrokenAxis_isNumber(max_1)) {\n                                while (start_1 - repeat_1 > min_1) {\n                                    start_1 -= repeat_1;\n                                }\n                                while (start_1 < min_1) {\n                                    start_1 += repeat_1;\n                                }\n                                for (i_1 = start_1; i_1 < max_1; i_1 += repeat_1) {\n                                    breakArrayT_1.push({\n                                        value: i_1,\n                                        move: 'in'\n                                    });\n                                    breakArrayT_1.push({\n                                        value: i_1 + brk.to - brk.from,\n                                        move: 'out',\n                                        size: brk.breakSize\n                                    });\n                                }\n                            }\n                        });\n                        breakArrayT_1.sort(function (a, b) {\n                            return ((a.value === b.value) ?\n                                ((a.move === 'in' ? 0 : 1) -\n                                    (b.move === 'in' ? 0 : 1)) :\n                                a.value - b.value);\n                        });\n                        // Simplify the breaks\n                        inBrk_1 = 0;\n                        start_1 = min_1;\n                        breakArrayT_1.forEach(function (brk) {\n                            inBrk_1 += (brk.move === 'in' ? 1 : -1);\n                            if (inBrk_1 === 1 && brk.move === 'in') {\n                                start_1 = brk.value;\n                            }\n                            if (inBrk_1 === 0 && BrokenAxis_isNumber(start_1)) {\n                                breakArray_1.push({\n                                    from: start_1,\n                                    to: brk.value,\n                                    len: brk.value - start_1 - (brk.size || 0)\n                                });\n                                length_1 += (brk.value -\n                                    start_1 -\n                                    (brk.size || 0));\n                            }\n                        });\n                        brokenAxis.breakArray = breakArray_1;\n                        // Used with staticScale, and below the actual axis\n                        // length, when breaks are subtracted.\n                        if (BrokenAxis_isNumber(min_1) &&\n                            BrokenAxis_isNumber(max_1) &&\n                            BrokenAxis_isNumber(axis.min)) {\n                            brokenAxis.unitLength = max_1 - min_1 - length_1 +\n                                pointRangePadding;\n                            BrokenAxis_fireEvent(axis, 'afterBreaks');\n                            if (axis.staticScale) {\n                                axis.transA = axis.staticScale;\n                            }\n                            else if (brokenAxis.unitLength) {\n                                axis.transA *=\n                                    (max_1 - axis.min + pointRangePadding) /\n                                        brokenAxis.unitLength;\n                            }\n                            if (pointRangePadding) {\n                                axis.minPixelPadding =\n                                    axis.transA * (axis.minPointOffset || 0);\n                            }\n                            axis.min = min_1;\n                            axis.max = max_1;\n                        }\n                    }\n                };\n            }\n            if (BrokenAxis_pick(redraw, true)) {\n                axis.chart.redraw();\n            }\n        };\n        return Additions;\n    }());\n    BrokenAxis.Additions = Additions;\n})(BrokenAxis || (BrokenAxis = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Axis_BrokenAxis = (BrokenAxis);\n\n;// ./code/es5/es-modules/Core/Axis/GridAxis.js\n/* *\n *\n *  (c) 2016 Highsoft AS\n *  Authors: Lars A. V. Cabrera\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar GridAxis_dateFormats = Core_Globals.dateFormats;\n\nvar GridAxis_addEvent = Core_Utilities.addEvent, GridAxis_defined = Core_Utilities.defined, GridAxis_erase = Core_Utilities.erase, GridAxis_find = Core_Utilities.find, GridAxis_isArray = Core_Utilities.isArray, GridAxis_isNumber = Core_Utilities.isNumber, GridAxis_merge = Core_Utilities.merge, GridAxis_pick = Core_Utilities.pick, GridAxis_timeUnits = Core_Utilities.timeUnits, GridAxis_wrap = Core_Utilities.wrap;\n/* *\n *\n *  Enums\n *\n * */\n/**\n * Enum for which side the axis is on. Maps to axis.side.\n * @private\n */\nvar GridAxisSide;\n(function (GridAxisSide) {\n    GridAxisSide[GridAxisSide[\"top\"] = 0] = \"top\";\n    GridAxisSide[GridAxisSide[\"right\"] = 1] = \"right\";\n    GridAxisSide[GridAxisSide[\"bottom\"] = 2] = \"bottom\";\n    GridAxisSide[GridAxisSide[\"left\"] = 3] = \"left\";\n})(GridAxisSide || (GridAxisSide = {}));\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction argsToArray(args) {\n    return Array.prototype.slice.call(args, 1);\n}\n/**\n * @private\n */\nfunction GridAxis_isObject(x) {\n    // Always use strict mode\n    return Core_Utilities.isObject(x, true);\n}\n/**\n * @private\n */\nfunction applyGridOptions(axis) {\n    var options = axis.options;\n    // Center-align by default\n    /*\n    if (!options.labels) {\n        options.labels = {};\n    }\n    */\n    options.labels.align = GridAxis_pick(options.labels.align, 'center');\n    // @todo: Check against tickLabelPlacement between/on etc\n    /* Prevents adding the last tick label if the axis is not a category\n       axis.\n       Since numeric labels are normally placed at starts and ends of a\n       range of value, and this module makes the label point at the value,\n       an \"extra\" label would appear. */\n    if (!axis.categories) {\n        options.showLastLabel = false;\n    }\n    // Prevents rotation of labels when squished, as rotating them would not\n    // help.\n    axis.labelRotation = 0;\n    options.labels.rotation = 0;\n    // Allow putting ticks closer than their data points.\n    options.minTickInterval = 1;\n}\n/**\n * Extends axis class with grid support.\n * @private\n */\nfunction GridAxis_compose(AxisClass, ChartClass, TickClass) {\n    if (!AxisClass.keepProps.includes('grid')) {\n        AxisClass.keepProps.push('grid');\n        AxisClass.prototype.getMaxLabelDimensions = getMaxLabelDimensions;\n        GridAxis_wrap(AxisClass.prototype, 'unsquish', wrapUnsquish);\n        GridAxis_wrap(AxisClass.prototype, 'getOffset', wrapGetOffset);\n        // Add event handlers\n        GridAxis_addEvent(AxisClass, 'init', onInit);\n        GridAxis_addEvent(AxisClass, 'afterGetTitlePosition', onAfterGetTitlePosition);\n        GridAxis_addEvent(AxisClass, 'afterInit', onAfterInit);\n        GridAxis_addEvent(AxisClass, 'afterRender', onAfterRender);\n        GridAxis_addEvent(AxisClass, 'afterSetAxisTranslation', onAfterSetAxisTranslation);\n        GridAxis_addEvent(AxisClass, 'afterSetOptions', onAfterSetOptions);\n        GridAxis_addEvent(AxisClass, 'afterSetOptions', onAfterSetOptions2);\n        GridAxis_addEvent(AxisClass, 'afterSetScale', onAfterSetScale);\n        GridAxis_addEvent(AxisClass, 'afterTickSize', onAfterTickSize);\n        GridAxis_addEvent(AxisClass, 'trimTicks', onTrimTicks);\n        GridAxis_addEvent(AxisClass, 'destroy', onDestroy);\n        GridAxis_addEvent(ChartClass, 'afterSetChartSize', GridAxis_onChartAfterSetChartSize);\n        GridAxis_addEvent(TickClass, 'afterGetLabelPosition', onTickAfterGetLabelPosition);\n        GridAxis_addEvent(TickClass, 'labelFormat', onTickLabelFormat);\n    }\n    return AxisClass;\n}\n/**\n * Get the largest label width and height.\n *\n * @private\n * @function Highcharts.Axis#getMaxLabelDimensions\n *\n * @param {Highcharts.Dictionary<Highcharts.Tick>} ticks\n * All the ticks on one axis.\n *\n * @param {Array<number|string>} tickPositions\n * All the tick positions on one axis.\n *\n * @return {Highcharts.SizeObject}\n * Object containing the properties height and width.\n *\n * @todo Move this to the generic axis implementation, as it is used there.\n */\nfunction getMaxLabelDimensions(ticks, tickPositions) {\n    var dimensions = {\n            width: 0,\n            height: 0\n        };\n    tickPositions.forEach(function (pos) {\n        var tick = ticks[pos];\n        var labelHeight = 0,\n            labelWidth = 0,\n            label;\n        if (GridAxis_isObject(tick)) {\n            label = GridAxis_isObject(tick.label) ? tick.label : {};\n            // Find width and height of label\n            labelHeight = label.getBBox ? label.getBBox().height : 0;\n            if (label.textStr && !GridAxis_isNumber(label.textPxLength)) {\n                label.textPxLength = label.getBBox().width;\n            }\n            labelWidth = GridAxis_isNumber(label.textPxLength) ?\n                // Math.round ensures crisp lines\n                Math.round(label.textPxLength) :\n                0;\n            if (label.textStr) {\n                // Set the tickWidth same as the label width after ellipsis\n                // applied #10281\n                labelWidth = Math.round(label.getBBox().width);\n            }\n            // Update the result if width and/or height are larger\n            dimensions.height = Math.max(labelHeight, dimensions.height);\n            dimensions.width = Math.max(labelWidth, dimensions.width);\n        }\n    });\n    // For tree grid, add indentation\n    if (this.type === 'treegrid' &&\n        this.treeGrid &&\n        this.treeGrid.mapOfPosToGridNode) {\n        var treeDepth = this.treeGrid.mapOfPosToGridNode[-1].height || 0;\n        dimensions.width += (this.options.labels.indentation *\n            (treeDepth - 1));\n    }\n    return dimensions;\n}\n/**\n * Handle columns and getOffset.\n * @private\n */\nfunction wrapGetOffset(proceed) {\n    var grid = this.grid, \n        // On the left side we handle the columns first because the offset is\n        // calculated from the plot area and out\n        columnsFirst = this.side === 3;\n    if (!columnsFirst) {\n        proceed.apply(this);\n    }\n    if (!(grid === null || grid === void 0 ? void 0 : grid.isColumn)) {\n        var columns = (grid === null || grid === void 0 ? void 0 : grid.columns) || [];\n        if (columnsFirst) {\n            columns = columns.slice().reverse();\n        }\n        columns\n            .forEach(function (column) {\n            column.getOffset();\n        });\n    }\n    if (columnsFirst) {\n        proceed.apply(this);\n    }\n}\n/**\n * @private\n */\nfunction onAfterGetTitlePosition(e) {\n    var axis = this;\n    var options = axis.options;\n    var gridOptions = options.grid || {};\n    if (gridOptions.enabled === true) {\n        // Compute anchor points for each of the title align options\n        var axisTitle = axis.axisTitle,\n            axisHeight = axis.height,\n            horiz = axis.horiz,\n            axisLeft = axis.left,\n            offset = axis.offset,\n            opposite = axis.opposite,\n            options_1 = axis.options,\n            axisTop = axis.top,\n            axisWidth = axis.width;\n        var tickSize = axis.tickSize();\n        var titleWidth = axisTitle && axisTitle.getBBox().width;\n        var xOption = options_1.title.x;\n        var yOption = options_1.title.y;\n        var titleMargin = GridAxis_pick(options_1.title.margin,\n            horiz ? 5 : 10);\n        var titleFontSize = axisTitle ? axis.chart.renderer.fontMetrics(axisTitle).f : 0;\n        var crispCorr = tickSize ? tickSize[0] / 2 : 0;\n        // TODO account for alignment\n        // the position in the perpendicular direction of the axis\n        var offAxis = ((horiz ? axisTop + axisHeight : axisLeft) +\n                (horiz ? 1 : -1) * // Horizontal axis reverses the margin\n                    (opposite ? -1 : 1) * // So does opposite axes\n                    crispCorr +\n                (axis.side === GridAxisSide.bottom ? titleFontSize : 0));\n        e.titlePosition.x = horiz ?\n            axisLeft - (titleWidth || 0) / 2 - titleMargin + xOption :\n            offAxis + (opposite ? axisWidth : 0) + offset + xOption;\n        e.titlePosition.y = horiz ?\n            (offAxis -\n                (opposite ? axisHeight : 0) +\n                (opposite ? titleFontSize : -titleFontSize) / 2 +\n                offset +\n                yOption) :\n            axisTop - titleMargin + yOption;\n    }\n}\n/**\n * @private\n */\nfunction onAfterInit() {\n    var axis = this;\n    var chart = axis.chart,\n        _a = axis.options.grid,\n        gridOptions = _a === void 0 ? {} : _a,\n        userOptions = axis.userOptions;\n    if (gridOptions.enabled) {\n        applyGridOptions(axis);\n    }\n    if (gridOptions.columns) {\n        var columns = axis.grid.columns = [];\n        var columnIndex = axis.grid.columnIndex = 0;\n        // Handle columns, each column is a grid axis\n        while (++columnIndex < gridOptions.columns.length) {\n            var columnOptions = GridAxis_merge(userOptions,\n                gridOptions.columns[columnIndex], {\n                    isInternal: true,\n                    linkedTo: 0,\n                    // Disable by default the scrollbar on the grid axis\n                    scrollbar: {\n                        enabled: false\n                    }\n                }, \n                // Avoid recursion\n                {\n                    grid: {\n                        columns: void 0\n                    }\n                });\n            var column = new Axis_Axis(axis.chart,\n                columnOptions, 'yAxis');\n            column.grid.isColumn = true;\n            column.grid.columnIndex = columnIndex;\n            // Remove column axis from chart axes array, and place it\n            // in the columns array.\n            GridAxis_erase(chart.axes, column);\n            GridAxis_erase(chart[axis.coll] || [], column);\n            columns.push(column);\n        }\n    }\n}\n/**\n * Draw an extra line on the far side of the outermost axis,\n * creating floor/roof/wall of a grid. And some padding.\n * ```\n * Make this:\n *             (axis.min) __________________________ (axis.max)\n *                           |    |    |    |    |\n * Into this:\n *             (axis.min) __________________________ (axis.max)\n *                        ___|____|____|____|____|__\n * ```\n * @private\n */\nfunction onAfterRender() {\n    var axis = this,\n        axisTitle = axis.axisTitle,\n        grid = axis.grid,\n        options = axis.options,\n        gridOptions = options.grid || {};\n    if (gridOptions.enabled === true) {\n        var min = axis.min || 0,\n            max = axis.max || 0,\n            firstTick = axis.ticks[axis.tickPositions[0]];\n        // Adjust the title max width to the column width (#19657)\n        if (axisTitle &&\n            !axis.chart.styledMode &&\n            (firstTick === null || firstTick === void 0 ? void 0 : firstTick.slotWidth) &&\n            !axis.options.title.style.width) {\n            axisTitle.css({ width: \"\" + firstTick.slotWidth + \"px\" });\n        }\n        // @todo actual label padding (top, bottom, left, right)\n        axis.maxLabelDimensions = axis.getMaxLabelDimensions(axis.ticks, axis.tickPositions);\n        // Remove right wall before rendering if updating\n        if (axis.rightWall) {\n            axis.rightWall.destroy();\n        }\n        /*\n        Draw an extra axis line on outer axes\n                    >\n        Make this:    |______|______|______|___\n\n                    > _________________________\n        Into this:    |______|______|______|__|\n                                                */\n        if (axis.grid && axis.grid.isOuterAxis() && axis.axisLine) {\n            var lineWidth = options.lineWidth;\n            if (lineWidth) {\n                var linePath = axis.getLinePath(lineWidth),\n                    startPoint = linePath[0],\n                    endPoint = linePath[1], \n                    // Negate distance if top or left axis\n                    // Subtract 1px to draw the line at the end of the tick\n                    tickLength = (axis.tickSize('tick') || [1])[0],\n                    distance = tickLength * ((axis.side === GridAxisSide.top ||\n                        axis.side === GridAxisSide.left) ? -1 : 1);\n                // If axis is horizontal, reposition line path vertically\n                if (startPoint[0] === 'M' && endPoint[0] === 'L') {\n                    if (axis.horiz) {\n                        startPoint[2] += distance;\n                        endPoint[2] += distance;\n                    }\n                    else {\n                        startPoint[1] += distance;\n                        endPoint[1] += distance;\n                    }\n                }\n                // If it doesn't exist, add an upper and lower border\n                // for the vertical grid axis.\n                if (!axis.horiz && axis.chart.marginRight) {\n                    var upperBorderStartPoint = startPoint,\n                        upperBorderEndPoint = [\n                            'L',\n                            axis.left,\n                            startPoint[2] || 0\n                        ],\n                        upperBorderPath = [\n                            upperBorderStartPoint,\n                            upperBorderEndPoint\n                        ],\n                        lowerBorderEndPoint = [\n                            'L',\n                            axis.chart.chartWidth - axis.chart.marginRight,\n                            axis.toPixels(max + axis.tickmarkOffset)\n                        ],\n                        lowerBorderStartPoint = [\n                            'M',\n                            endPoint[1] || 0,\n                            axis.toPixels(max + axis.tickmarkOffset)\n                        ],\n                        lowerBorderPath = [\n                            lowerBorderStartPoint,\n                            lowerBorderEndPoint\n                        ];\n                    if (!axis.grid.upperBorder && min % 1 !== 0) {\n                        axis.grid.upperBorder = axis.grid.renderBorder(upperBorderPath);\n                    }\n                    if (axis.grid.upperBorder) {\n                        axis.grid.upperBorder.attr({\n                            stroke: options.lineColor,\n                            'stroke-width': options.lineWidth\n                        });\n                        axis.grid.upperBorder.animate({\n                            d: upperBorderPath\n                        });\n                    }\n                    if (!axis.grid.lowerBorder && max % 1 !== 0) {\n                        axis.grid.lowerBorder = axis.grid.renderBorder(lowerBorderPath);\n                    }\n                    if (axis.grid.lowerBorder) {\n                        axis.grid.lowerBorder.attr({\n                            stroke: options.lineColor,\n                            'stroke-width': options.lineWidth\n                        });\n                        axis.grid.lowerBorder.animate({\n                            d: lowerBorderPath\n                        });\n                    }\n                }\n                // Render an extra line parallel to the existing axes, to\n                // close the grid.\n                if (!axis.grid.axisLineExtra) {\n                    axis.grid.axisLineExtra = axis.grid.renderBorder(linePath);\n                }\n                else {\n                    axis.grid.axisLineExtra.attr({\n                        stroke: options.lineColor,\n                        'stroke-width': options.lineWidth\n                    });\n                    axis.grid.axisLineExtra.animate({\n                        d: linePath\n                    });\n                }\n                // Show or hide the line depending on options.showEmpty\n                axis.axisLine[axis.showAxis ? 'show' : 'hide']();\n            }\n        }\n        (grid && grid.columns || []).forEach(function (column) { return column.render(); });\n        // Manipulate the tick mark visibility\n        // based on the axis.max- allows smooth scrolling.\n        if (!axis.horiz &&\n            axis.chart.hasRendered &&\n            (axis.scrollbar ||\n                (axis.linkedParent && axis.linkedParent.scrollbar)) &&\n            axis.tickPositions.length) {\n            var tickmarkOffset = axis.tickmarkOffset,\n                lastTick = axis.tickPositions[axis.tickPositions.length - 1],\n                firstTick_1 = axis.tickPositions[0];\n            var label = void 0,\n                tickMark = void 0;\n            while ((label = axis.hiddenLabels.pop()) && label.element) {\n                label.show(); // #15453\n            }\n            while ((tickMark = axis.hiddenMarks.pop()) &&\n                tickMark.element) {\n                tickMark.show(); // #16439\n            }\n            // Hide/show first tick label.\n            label = axis.ticks[firstTick_1].label;\n            if (label) {\n                if (min - firstTick_1 > tickmarkOffset) {\n                    axis.hiddenLabels.push(label.hide());\n                }\n                else {\n                    label.show();\n                }\n            }\n            // Hide/show last tick mark/label.\n            label = axis.ticks[lastTick].label;\n            if (label) {\n                if (lastTick - max > tickmarkOffset) {\n                    axis.hiddenLabels.push(label.hide());\n                }\n                else {\n                    label.show();\n                }\n            }\n            var mark = axis.ticks[lastTick].mark;\n            if (mark &&\n                lastTick - max < tickmarkOffset &&\n                lastTick - max > 0 && axis.ticks[lastTick].isLast) {\n                axis.hiddenMarks.push(mark.hide());\n            }\n        }\n    }\n}\n/**\n * @private\n */\nfunction onAfterSetAxisTranslation() {\n    var axis = this;\n    var tickInfo = axis.tickPositions && axis.tickPositions.info;\n    var options = axis.options;\n    var gridOptions = options.grid || {};\n    var userLabels = axis.userOptions.labels || {};\n    // Fire this only for the Gantt type chart, #14868.\n    if (gridOptions.enabled) {\n        if (axis.horiz) {\n            axis.series.forEach(function (series) {\n                series.options.pointRange = 0;\n            });\n            // Lower level time ticks, like hours or minutes, represent\n            // points in time and not ranges. These should be aligned\n            // left in the grid cell by default. The same applies to\n            // years of higher order.\n            if (tickInfo &&\n                options.dateTimeLabelFormats &&\n                options.labels &&\n                !GridAxis_defined(userLabels.align) &&\n                (options.dateTimeLabelFormats[tickInfo.unitName]\n                    .range === false ||\n                    tickInfo.count > 1 // Years\n                )) {\n                options.labels.align = 'left';\n                if (!GridAxis_defined(userLabels.x)) {\n                    options.labels.x = 3;\n                }\n            }\n        }\n        else {\n            // Don't trim ticks which not in min/max range but\n            // they are still in the min/max plus tickInterval.\n            if (this.type !== 'treegrid' &&\n                axis.grid &&\n                axis.grid.columns) {\n                this.minPointOffset = this.tickInterval;\n            }\n        }\n    }\n}\n/**\n * Creates a left and right wall on horizontal axes:\n * - Places leftmost tick at the start of the axis, to create a left\n *   wall\n * - Ensures that the rightmost tick is at the end of the axis, to\n *   create a right wall.\n * @private\n */\nfunction onAfterSetOptions(e) {\n    var options = this.options,\n        userOptions = e.userOptions,\n        gridOptions = ((options && GridAxis_isObject(options.grid)) ? options.grid : {});\n    var gridAxisOptions;\n    if (gridOptions.enabled === true) {\n        // Merge the user options into default grid axis options so\n        // that when a user option is set, it takes precedence.\n        gridAxisOptions = GridAxis_merge(true, {\n            className: ('highcharts-grid-axis ' + (userOptions.className || '')),\n            dateTimeLabelFormats: {\n                hour: {\n                    list: ['%[HM]', '%[H]']\n                },\n                day: {\n                    list: ['%[AeB]', '%[aeb]', '%[E]']\n                },\n                week: {\n                    list: ['Week %W', 'W%W']\n                },\n                month: {\n                    list: ['%[B]', '%[b]', '%o']\n                }\n            },\n            grid: {\n                borderWidth: 1\n            },\n            labels: {\n                padding: 2,\n                style: {\n                    fontSize: '0.9em'\n                }\n            },\n            margin: 0,\n            title: {\n                text: null,\n                reserveSpace: false,\n                rotation: 0,\n                style: {\n                    textOverflow: 'ellipsis'\n                }\n            },\n            // In a grid axis, only allow one unit of certain types,\n            // for example we shouldn't have one grid cell spanning\n            // two days.\n            units: [[\n                    'millisecond', // Unit name\n                    [1, 10, 100]\n                ], [\n                    'second',\n                    [1, 10]\n                ], [\n                    'minute',\n                    [1, 5, 15]\n                ], [\n                    'hour',\n                    [1, 6]\n                ], [\n                    'day',\n                    [1]\n                ], [\n                    'week',\n                    [1]\n                ], [\n                    'month',\n                    [1]\n                ], [\n                    'year',\n                    null\n                ]]\n        }, userOptions);\n        // X-axis specific options\n        if (this.coll === 'xAxis') {\n            // For linked axes, tickPixelInterval is used only if\n            // the tickPositioner below doesn't run or returns\n            // undefined (like multiple years)\n            if (GridAxis_defined(userOptions.linkedTo) &&\n                !GridAxis_defined(userOptions.tickPixelInterval)) {\n                gridAxisOptions.tickPixelInterval = 350;\n            }\n            // For the secondary grid axis, use the primary axis'\n            // tick intervals and return ticks one level higher.\n            if (\n            // Check for tick pixel interval in options\n            !GridAxis_defined(userOptions.tickPixelInterval) &&\n                // Only for linked axes\n                GridAxis_defined(userOptions.linkedTo) &&\n                !GridAxis_defined(userOptions.tickPositioner) &&\n                !GridAxis_defined(userOptions.tickInterval) &&\n                !GridAxis_defined(userOptions.units)) {\n                gridAxisOptions.tickPositioner = function (min, max) {\n                    var parentInfo = (this.linkedParent &&\n                            this.linkedParent.tickPositions &&\n                            this.linkedParent.tickPositions.info);\n                    if (parentInfo) {\n                        var units = (gridAxisOptions.units || []);\n                        var unitIdx = void 0,\n                            count = 1,\n                            unitName = 'year';\n                        for (var i = 0; i < units.length; i++) {\n                            var unit_1 = units[i];\n                            if (unit_1 && unit_1[0] === parentInfo.unitName) {\n                                unitIdx = i;\n                                break;\n                            }\n                        }\n                        // Get the first allowed count on the next unit.\n                        var unit = (GridAxis_isNumber(unitIdx) && units[unitIdx + 1]);\n                        if (unit) {\n                            unitName = unit[0] || 'year';\n                            var counts = unit[1];\n                            count = counts && counts[0] || 1;\n                            // In case the base X axis shows years, make the\n                            // secondary axis show ten times the years (#11427)\n                        }\n                        else if (parentInfo.unitName === 'year') {\n                            // `unitName` is 'year'\n                            count = parentInfo.count * 10;\n                        }\n                        var unitRange = GridAxis_timeUnits[unitName];\n                        this.tickInterval = unitRange * count;\n                        return this.chart.time.getTimeTicks({ unitRange: unitRange, count: count, unitName: unitName }, min, max, this.options.startOfWeek);\n                    }\n                };\n            }\n        }\n        // Now merge the combined options into the axis options\n        GridAxis_merge(true, this.options, gridAxisOptions);\n        if (this.horiz) {\n            /*               _________________________\n            Make this:    ___|_____|_____|_____|__|\n                            ^                     ^\n                            _________________________\n            Into this:    |_____|_____|_____|_____|\n                                ^                 ^    */\n            options.minPadding = GridAxis_pick(userOptions.minPadding, 0);\n            options.maxPadding = GridAxis_pick(userOptions.maxPadding, 0);\n        }\n        // If borderWidth is set, then use its value for tick and\n        // line width.\n        if (GridAxis_isNumber(options.grid.borderWidth)) {\n            options.tickWidth = options.lineWidth =\n                gridOptions.borderWidth;\n        }\n    }\n}\n/**\n * @private\n */\nfunction onAfterSetOptions2(e) {\n    var axis = this;\n    var userOptions = e.userOptions;\n    var gridOptions = userOptions && userOptions.grid || {};\n    var columns = gridOptions.columns;\n    // Add column options to the parent axis. Children has their column options\n    // set on init in onGridAxisAfterInit.\n    if (gridOptions.enabled && columns) {\n        GridAxis_merge(true, axis.options, columns[0]);\n    }\n}\n/**\n * Handle columns and setScale.\n * @private\n */\nfunction onAfterSetScale() {\n    var axis = this;\n    (axis.grid.columns || []).forEach(function (column) { return column.setScale(); });\n}\n/**\n * Draw vertical axis ticks extra long to create cell floors and roofs.\n * Overrides the tickLength for vertical axes.\n * @private\n */\nfunction onAfterTickSize(e) {\n    var _a = this,\n        horiz = _a.horiz,\n        maxLabelDimensions = _a.maxLabelDimensions,\n        _b = _a.options.grid,\n        gridOptions = _b === void 0 ? {} : _b;\n    if (gridOptions.enabled && maxLabelDimensions) {\n        var labelPadding = this.options.labels.distance * 2;\n        var distance = horiz ?\n                (gridOptions.cellHeight ||\n                    labelPadding + maxLabelDimensions.height) :\n                labelPadding + maxLabelDimensions.width;\n        if (GridAxis_isArray(e.tickSize)) {\n            e.tickSize[0] = distance;\n        }\n        else {\n            e.tickSize = [distance, 0];\n        }\n    }\n}\n/**\n * @private\n */\nfunction GridAxis_onChartAfterSetChartSize() {\n    this.axes.forEach(function (axis) {\n        (axis.grid && axis.grid.columns || []).forEach(function (column) {\n            column.setAxisSize();\n            column.setAxisTranslation();\n        });\n    });\n}\n/**\n * @private\n */\nfunction onDestroy(e) {\n    var grid = this.grid;\n    (grid.columns || []).forEach(function (column) { return column.destroy(e.keepEvents); });\n    grid.columns = void 0;\n}\n/**\n * Wraps axis init to draw cell walls on vertical axes.\n * @private\n */\nfunction onInit(e) {\n    var axis = this;\n    var userOptions = e.userOptions || {};\n    var gridOptions = userOptions.grid || {};\n    if (gridOptions.enabled && GridAxis_defined(gridOptions.borderColor)) {\n        userOptions.tickColor = userOptions.lineColor = (gridOptions.borderColor);\n    }\n    if (!axis.grid) {\n        axis.grid = new GridAxisAdditions(axis);\n    }\n    axis.hiddenLabels = [];\n    axis.hiddenMarks = [];\n}\n/**\n * Center tick labels in cells.\n * @private\n */\nfunction onTickAfterGetLabelPosition(e) {\n    var tick = this,\n        label = tick.label,\n        axis = tick.axis,\n        reversed = axis.reversed,\n        chart = axis.chart,\n        options = axis.options,\n        gridOptions = options.grid || {},\n        labelOpts = axis.options.labels,\n        align = labelOpts.align, \n        // `verticalAlign` is currently not supported for axis.labels.\n        verticalAlign = 'middle', // LabelOpts.verticalAlign,\n        side = GridAxisSide[axis.side],\n        tickmarkOffset = e.tickmarkOffset,\n        tickPositions = axis.tickPositions,\n        tickPos = tick.pos - tickmarkOffset,\n        nextTickPos = (GridAxis_isNumber(tickPositions[e.index + 1]) ?\n            tickPositions[e.index + 1] - tickmarkOffset :\n            (axis.max || 0) + tickmarkOffset),\n        tickSize = axis.tickSize('tick'),\n        tickWidth = tickSize ? tickSize[0] : 0,\n        crispCorr = tickSize ? tickSize[1] / 2 : 0;\n    // Only center tick labels in grid axes\n    if (gridOptions.enabled === true) {\n        var bottom = void 0,\n            top_1,\n            left = void 0,\n            right = void 0;\n        // Calculate top and bottom positions of the cell.\n        if (side === 'top') {\n            bottom = axis.top + axis.offset;\n            top_1 = bottom - tickWidth;\n        }\n        else if (side === 'bottom') {\n            top_1 = chart.chartHeight - axis.bottom + axis.offset;\n            bottom = top_1 + tickWidth;\n        }\n        else {\n            bottom = axis.top + axis.len - (axis.translate(reversed ? nextTickPos : tickPos) || 0);\n            top_1 = axis.top + axis.len - (axis.translate(reversed ? tickPos : nextTickPos) || 0);\n        }\n        // Calculate left and right positions of the cell.\n        if (side === 'right') {\n            left = chart.chartWidth - axis.right + axis.offset;\n            right = left + tickWidth;\n        }\n        else if (side === 'left') {\n            right = axis.left + axis.offset;\n            left = right - tickWidth;\n        }\n        else {\n            left = Math.round(axis.left + (axis.translate(reversed ? nextTickPos : tickPos) || 0)) - crispCorr;\n            right = Math.min(// #15742\n            Math.round(axis.left + (axis.translate(reversed ? tickPos : nextTickPos) || 0)) - crispCorr, axis.left + axis.len);\n        }\n        tick.slotWidth = right - left;\n        // Calculate the positioning of the label based on\n        // alignment.\n        e.pos.x = (align === 'left' ?\n            left :\n            align === 'right' ?\n                right :\n                left + ((right - left) / 2) // Default to center\n        );\n        e.pos.y = (verticalAlign === 'top' ?\n            top_1 :\n            verticalAlign === 'bottom' ?\n                bottom :\n                top_1 + ((bottom - top_1) / 2) // Default to middle\n        );\n        if (label) {\n            var lblMetrics = chart.renderer.fontMetrics(label),\n                labelHeight = label.getBBox().height;\n            // Adjustment to y position to align the label correctly.\n            // Would be better to have a setter or similar for this.\n            if (!labelOpts.useHTML) {\n                var lines = Math.round(labelHeight / lblMetrics.h);\n                e.pos.y += (\n                // Center the label\n                // TODO: why does this actually center the label?\n                ((lblMetrics.b - (lblMetrics.h - lblMetrics.f)) / 2) +\n                    // Adjust for height of additional lines.\n                    -(((lines - 1) * lblMetrics.h) / 2));\n            }\n            else {\n                e.pos.y += (\n                // Readjust yCorr in htmlUpdateTransform\n                lblMetrics.b +\n                    // Adjust for height of html label\n                    -(labelHeight / 2));\n            }\n        }\n        e.pos.x += (axis.horiz && labelOpts.x) || 0;\n    }\n}\n/**\n * @private\n */\nfunction onTickLabelFormat(ctx) {\n    var axis = ctx.axis,\n        value = ctx.value;\n    if (axis.options.grid &&\n        axis.options.grid.enabled) {\n        var tickPos = axis.tickPositions;\n        var series = (axis.linkedParent || axis).series[0];\n        var isFirst = value === tickPos[0];\n        var isLast = value === tickPos[tickPos.length - 1];\n        var point = series && GridAxis_find(series.options.data,\n            function (p) {\n                return p[axis.isXAxis ? 'x' : 'y'] === value;\n        });\n        var pointCopy = void 0;\n        if (point && series.is('gantt')) {\n            // For the Gantt set point aliases to the pointCopy\n            // to do not change the original point\n            pointCopy = GridAxis_merge(point);\n            Core_Globals.seriesTypes.gantt.prototype.pointClass\n                .setGanttPointAliases(pointCopy, axis.chart);\n        }\n        // Make additional properties available for the\n        // formatter\n        ctx.isFirst = isFirst;\n        ctx.isLast = isLast;\n        ctx.point = pointCopy;\n    }\n}\n/**\n * Makes tick labels which are usually ignored in a linked axis\n * displayed if they are within range of linkedParent.min.\n * ```\n *                        _____________________________\n *                        |   |       |       |       |\n * Make this:             |   |   2   |   3   |   4   |\n *                        |___|_______|_______|_______|\n *                          ^\n *                        _____________________________\n *                        |   |       |       |       |\n * Into this:             | 1 |   2   |   3   |   4   |\n *                        |___|_______|_______|_______|\n *                          ^\n * ```\n * @private\n * @todo Does this function do what the drawing says? Seems to affect\n *       ticks and not the labels directly?\n */\nfunction onTrimTicks() {\n    var axis = this,\n        options = axis.options,\n        gridOptions = options.grid || {},\n        categoryAxis = axis.categories,\n        tickPositions = axis.tickPositions,\n        firstPos = tickPositions[0],\n        secondPos = tickPositions[1],\n        lastPos = tickPositions[tickPositions.length - 1],\n        beforeLastPos = tickPositions[tickPositions.length - 2],\n        linkedMin = axis.linkedParent && axis.linkedParent.min,\n        linkedMax = axis.linkedParent && axis.linkedParent.max,\n        min = linkedMin || axis.min,\n        max = linkedMax || axis.max,\n        tickInterval = axis.tickInterval,\n        startLessThanMin = ( // #19845\n        GridAxis_isNumber(min) &&\n            min >= firstPos + tickInterval &&\n            min < secondPos),\n        endMoreThanMin = (GridAxis_isNumber(min) &&\n            firstPos < min &&\n            firstPos + tickInterval > min),\n        startLessThanMax = (GridAxis_isNumber(max) &&\n            lastPos > max &&\n            lastPos - tickInterval < max),\n        endMoreThanMax = (GridAxis_isNumber(max) &&\n            max <= lastPos - tickInterval &&\n            max > beforeLastPos);\n    if (gridOptions.enabled === true &&\n        !categoryAxis &&\n        (axis.isXAxis || axis.isLinked)) {\n        if ((endMoreThanMin || startLessThanMin) && !options.startOnTick) {\n            tickPositions[0] = min;\n        }\n        if ((startLessThanMax || endMoreThanMax) && !options.endOnTick) {\n            tickPositions[tickPositions.length - 1] = max;\n        }\n    }\n}\n/**\n * Avoid altering tickInterval when reserving space.\n * @private\n */\nfunction wrapUnsquish(proceed) {\n    var axis = this;\n    var _a = axis.options.grid,\n        gridOptions = _a === void 0 ? {} : _a;\n    if (gridOptions.enabled === true && axis.categories) {\n        return axis.tickInterval;\n    }\n    return proceed.apply(axis, argsToArray(arguments));\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * Additions for grid axes.\n * @private\n * @class\n */\nvar GridAxisAdditions = /** @class */ (function () {\n    /* *\n    *\n    *  Constructors\n    *\n    * */\n    function GridAxisAdditions(axis) {\n        this.axis = axis;\n    }\n    /* *\n    *\n    *  Functions\n    *\n    * */\n    /**\n     * Checks if an axis is the outer axis in its dimension. Since\n     * axes are placed outwards in order, the axis with the highest\n     * index is the outermost axis.\n     *\n     * Example: If there are multiple x-axes at the top of the chart,\n     * this function returns true if the axis supplied is the last\n     * of the x-axes.\n     *\n     * @private\n     *\n     * @return {boolean}\n     * True if the axis is the outermost axis in its dimension; false if\n     * not.\n     */\n    GridAxisAdditions.prototype.isOuterAxis = function () {\n        var _a;\n        var axis = this.axis;\n        var chart = axis.chart;\n        var columnIndex = axis.grid.columnIndex;\n        var columns = (((_a = axis.linkedParent) === null || _a === void 0 ? void 0 : _a.grid.columns) ||\n                axis.grid.columns ||\n                []);\n        var parentAxis = columnIndex ? axis.linkedParent : axis;\n        var thisIndex = -1,\n            lastIndex = 0;\n        // On the left side, when we have columns (not only multiple axes), the\n        // main axis is to the left\n        if (axis.side === 3 && !chart.inverted && columns.length) {\n            return !axis.linkedParent;\n        }\n        (chart[axis.coll] || []).forEach(function (otherAxis, index) {\n            if (otherAxis.side === axis.side &&\n                !otherAxis.options.isInternal) {\n                lastIndex = index;\n                if (otherAxis === parentAxis) {\n                    // Get the index of the axis in question\n                    thisIndex = index;\n                }\n            }\n        });\n        return (lastIndex === thisIndex &&\n            (GridAxis_isNumber(columnIndex) ?\n                columns.length === columnIndex :\n                true));\n    };\n    /**\n     * Add extra border based on the provided path.\n     * @private\n     * @param {SVGPath} path\n     * The path of the border.\n     * @return {Highcharts.SVGElement}\n     * Border\n     */\n    GridAxisAdditions.prototype.renderBorder = function (path) {\n        var axis = this.axis,\n            renderer = axis.chart.renderer,\n            options = axis.options,\n            extraBorderLine = renderer.path(path)\n                .addClass('highcharts-axis-line')\n                .add(axis.axisGroup);\n        if (!renderer.styledMode) {\n            extraBorderLine.attr({\n                stroke: options.lineColor,\n                'stroke-width': options.lineWidth,\n                zIndex: 7\n            });\n        }\n        return extraBorderLine;\n    };\n    return GridAxisAdditions;\n}());\n/* *\n *\n *  Registry\n *\n * */\n// First letter of the day of the week, e.g. 'M' for 'Monday'.\nGridAxis_dateFormats.E = function (timestamp) {\n    return this.dateFormat('%a', timestamp, true).charAt(0);\n};\n// Adds week date format\nGridAxis_dateFormats.W = function (timestamp) {\n    var d = this.toParts(timestamp),\n        firstDay = (d[7] + 6) % 7,\n        thursday = d.slice(0);\n    thursday[2] = d[2] - firstDay + 3;\n    var firstThursday = this.toParts(this.makeTime(thursday[0], 0, 1));\n    if (firstThursday[7] !== 4) {\n        d[1] = 0; // Set month to January\n        d[2] = 1 + (11 - firstThursday[7]) % 7;\n    }\n    var thursdayTS = this.makeTime(thursday[0],\n        thursday[1],\n        thursday[2]),\n        firstThursdayTS = this.makeTime(firstThursday[0],\n        firstThursday[1],\n        firstThursday[2]);\n    return (1 +\n        Math.floor((thursdayTS - firstThursdayTS) / 604800000)).toString();\n};\n/* *\n *\n *  Default Export\n *\n * */\nvar GridAxis = {\n    compose: GridAxis_compose\n};\n/* harmony default export */ var Axis_GridAxis = (GridAxis);\n/* *\n *\n *  API Options\n *\n * */\n/**\n * @productdesc {gantt}\n * For grid axes (like in Gantt charts),\n * it is possible to declare as a list to provide different\n * formats depending on available space.\n *\n * Defaults to:\n * ```js\n * {\n *     hour: { list: ['%H:%M', '%H'] },\n *     day: { list: ['%A, %e. %B', '%a, %e. %b', '%E'] },\n *     week: { list: ['Week %W', 'W%W'] },\n *     month: { list: ['%B', '%b', '%o'] }\n * }\n * ```\n *\n * @sample {gantt} gantt/grid-axis/date-time-label-formats\n *         Gantt chart with custom axis date format.\n *\n * @apioption xAxis.dateTimeLabelFormats\n */\n/**\n * Set grid options for the axis labels. Requires Highcharts Gantt.\n *\n * @since     6.2.0\n * @product   gantt\n * @apioption xAxis.grid\n */\n/**\n * Enable grid on the axis labels. Defaults to true for Gantt charts.\n *\n * @type      {boolean}\n * @default   true\n * @since     6.2.0\n * @product   gantt\n * @apioption xAxis.grid.enabled\n */\n/**\n * Set specific options for each column (or row for horizontal axes) in the\n * grid. Each extra column/row is its own axis, and the axis options can be set\n * here.\n *\n * @sample gantt/demo/left-axis-table\n *         Left axis as a table\n * @sample gantt/demo/treegrid-columns\n *         Collapsible tree grid with columns\n *\n * @type      {Array<Highcharts.XAxisOptions>}\n * @apioption xAxis.grid.columns\n */\n/**\n * Set border color for the label grid lines.\n *\n * @type      {Highcharts.ColorString}\n * @default   #e6e6e6\n * @apioption xAxis.grid.borderColor\n */\n/**\n * Set border width of the label grid lines.\n *\n * @type      {number}\n * @default   1\n * @apioption xAxis.grid.borderWidth\n */\n/**\n * Set cell height for grid axis labels. By default this is calculated from font\n * size. This option only applies to horizontal axes. For vertical axes, check\n * the [#yAxis.staticScale](yAxis.staticScale) option.\n *\n * @sample gantt/grid-axis/cellheight\n *         Gant chart with custom cell height\n * @type      {number}\n * @apioption xAxis.grid.cellHeight\n */\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Gantt/Tree.js\n/* *\n *\n *  (c) 2016-2024 Highsoft AS\n *\n *  Authors: Jon Arild Nygard\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar __rest = (undefined && undefined.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\n/* *\n *\n *  Imports\n *\n * */\n\nvar Tree_extend = Core_Utilities.extend, Tree_isNumber = Core_Utilities.isNumber, Tree_pick = Core_Utilities.pick;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Creates an object map from parent id to children's index.\n *\n * @private\n * @function Highcharts.Tree#getListOfParents\n *\n * @param {Array<*>} data\n *        List of points set in options. `Array.parent` is parent id of point.\n *\n * @return {Highcharts.Dictionary<Array<*>>}\n * Map from parent id to children index in data\n */\nfunction getListOfParents(data) {\n    var root = '',\n        ids = [],\n        listOfParents = data.reduce(function (prev,\n        curr) {\n            var _a = curr.parent,\n        parent = _a === void 0 ? '' : _a,\n        id = curr.id;\n        if (typeof prev[parent] === 'undefined') {\n            prev[parent] = [];\n        }\n        prev[parent].push(curr);\n        if (id) {\n            ids.push(id);\n        }\n        return prev;\n    }, {});\n    Object.keys(listOfParents).forEach(function (node) {\n        var _a;\n        if ((node !== root) && (ids.indexOf(node) === -1)) {\n            var adoptedByRoot = listOfParents[node].map(function (orphan) {\n                    var parentExcluded = __rest(orphan,\n                []); // #15196\n                    return parentExcluded;\n            });\n            (_a = listOfParents[root]).push.apply(_a, adoptedByRoot);\n            delete listOfParents[node];\n        }\n    });\n    return listOfParents;\n}\n/** @private */\nfunction getNode(id, parent, level, data, mapOfIdToChildren, options) {\n    var after = options && options.after,\n        before = options && options.before,\n        node = {\n            data: data,\n            depth: level - 1,\n            id: id,\n            level: level,\n            parent: (parent || '')\n        };\n    var descendants = 0,\n        height = 0,\n        start,\n        end;\n    // Allow custom logic before the children has been created.\n    if (typeof before === 'function') {\n        before(node, options);\n    }\n    // Call getNode recursively on the children. Calculate the height of the\n    // node, and the number of descendants.\n    var children = ((mapOfIdToChildren[id] || [])).map(function (child) {\n            var node = getNode(child.id,\n        id, (level + 1),\n        child,\n        mapOfIdToChildren,\n        options),\n        childStart = child.start || NaN,\n        childEnd = (child.milestone === true ?\n                childStart :\n                child.end ||\n                    NaN);\n        // Start should be the lowest child.start.\n        start = ((!Tree_isNumber(start) || childStart < start) ?\n            childStart :\n            start);\n        // End should be the largest child.end.\n        // If child is milestone, then use start as end.\n        end = ((!Tree_isNumber(end) || childEnd > end) ?\n            childEnd :\n            end);\n        descendants = descendants + 1 + node.descendants;\n        height = Math.max(node.height + 1, height);\n        return node;\n    });\n    // Calculate start and end for point if it is not already explicitly set.\n    if (data) {\n        data.start = Tree_pick(data.start, start);\n        data.end = Tree_pick(data.end, end);\n    }\n    Tree_extend(node, {\n        children: children,\n        descendants: descendants,\n        height: height\n    });\n    // Allow custom logic after the children has been created.\n    if (typeof after === 'function') {\n        after(node, options);\n    }\n    return node;\n}\n/** @private */\nfunction getTree(data, options) {\n    return getNode('', null, 1, null, getListOfParents(data), options);\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar Tree = {\n    getNode: getNode,\n    getTree: getTree\n};\n/* harmony default export */ var Gantt_Tree = (Tree);\n\n;// ./code/es5/es-modules/Core/Axis/TreeGrid/TreeGridTick.js\n/* *\n *\n *  (c) 2016 Highsoft AS\n *  Authors: Jon Arild Nygard\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar TreeGridTick_addEvent = Core_Utilities.addEvent, TreeGridTick_removeEvent = Core_Utilities.removeEvent, TreeGridTick_isObject = Core_Utilities.isObject, TreeGridTick_isNumber = Core_Utilities.isNumber, TreeGridTick_pick = Core_Utilities.pick, TreeGridTick_wrap = Core_Utilities.wrap;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction onTickInit() {\n    var tick = this;\n    if (!tick.treeGrid) {\n        tick.treeGrid = new TreeGridTickAdditions(tick);\n    }\n}\n/**\n * @private\n */\nfunction onTickHover(label) {\n    label.addClass('highcharts-treegrid-node-active');\n    if (!label.renderer.styledMode) {\n        label.css({\n            textDecoration: 'underline'\n        });\n    }\n}\n/**\n * @private\n */\nfunction onTickHoverExit(label, options) {\n    var css = TreeGridTick_isObject(options.style) ? options.style : {};\n    label.removeClass('highcharts-treegrid-node-active');\n    if (!label.renderer.styledMode) {\n        label.css({ textDecoration: (css.textDecoration || 'none') });\n    }\n}\n/**\n * @private\n */\nfunction renderLabelIcon(tick, params) {\n    var _a;\n    var treeGrid = tick.treeGrid,\n        isNew = !treeGrid.labelIcon,\n        renderer = params.renderer,\n        labelBox = params.xy,\n        options = params.options,\n        width = options.width || 0,\n        height = options.height || 0,\n        padding = ((_a = options.padding) !== null && _a !== void 0 ? _a : tick.axis.linkedParent) ? 0 : 5,\n        iconCenter = {\n            x: labelBox.x - (width / 2) - padding,\n            y: labelBox.y - (height / 2)\n        },\n        rotation = params.collapsed ? 90 : 180,\n        shouldRender = params.show && TreeGridTick_isNumber(iconCenter.y);\n    var icon = treeGrid.labelIcon;\n    if (!icon) {\n        treeGrid.labelIcon = icon = renderer\n            .path(renderer.symbols[options.type](options.x || 0, options.y || 0, width, height))\n            .addClass('highcharts-label-icon')\n            .add(params.group);\n    }\n    // Set the new position, and show or hide\n    icon[shouldRender ? 'show' : 'hide'](); // #14904, #1338\n    // Presentational attributes\n    if (!renderer.styledMode) {\n        icon\n            .attr({\n            cursor: 'pointer',\n            'fill': TreeGridTick_pick(params.color, \"#666666\" /* Palette.neutralColor60 */),\n            'stroke-width': 1,\n            stroke: options.lineColor,\n            strokeWidth: options.lineWidth || 0\n        });\n    }\n    // Update the icon positions\n    icon[isNew ? 'attr' : 'animate']({\n        translateX: iconCenter.x,\n        translateY: iconCenter.y,\n        rotation: rotation\n    });\n}\n/**\n * @private\n */\nfunction wrapGetLabelPosition(proceed, x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {\n    var tick = this,\n        lbOptions = TreeGridTick_pick(tick.options && tick.options.labels,\n        labelOptions),\n        pos = tick.pos,\n        axis = tick.axis,\n        isTreeGrid = axis.type === 'treegrid',\n        result = proceed.apply(tick,\n        [x,\n        y,\n        label,\n        horiz,\n        lbOptions,\n        tickmarkOffset,\n        index,\n        step]);\n    var mapOfPosToGridNode,\n        node,\n        level;\n    if (isTreeGrid) {\n        var _a = (lbOptions && TreeGridTick_isObject(lbOptions.symbol,\n            true) ?\n                lbOptions.symbol :\n                {}),\n            _b = _a.width,\n            width = _b === void 0 ? 0 : _b,\n            _c = _a.padding,\n            padding = _c === void 0 ? axis.linkedParent ? 0 : 5 : _c,\n            indentation = (lbOptions && TreeGridTick_isNumber(lbOptions.indentation) ?\n                lbOptions.indentation :\n                0);\n        mapOfPosToGridNode = axis.treeGrid.mapOfPosToGridNode;\n        node = mapOfPosToGridNode && mapOfPosToGridNode[pos];\n        level = (node && node.depth) || 1;\n        result.x += (\n        // Add space for symbols\n        (width + (padding * 2)) +\n            // Apply indentation\n            ((level - 1) * indentation));\n    }\n    return result;\n}\n/**\n * @private\n */\nfunction wrapRenderLabel(proceed) {\n    var tick = this, pos = tick.pos, axis = tick.axis, label = tick.label, tickGrid = tick.treeGrid, tickOptions = tick.options, icon = tickGrid === null || tickGrid === void 0 ? void 0 : tickGrid.labelIcon, labelElement = label === null || label === void 0 ? void 0 : label.element, axisGrid = axis.treeGrid, axisOptions = axis.options, chart = axis.chart, tickPositions = axis.tickPositions, mapOfPosToGridNode = axisGrid.mapOfPosToGridNode, labelOptions = TreeGridTick_pick(tickOptions === null || tickOptions === void 0 ? void 0 : tickOptions.labels, axisOptions === null || axisOptions === void 0 ? void 0 : axisOptions.labels), symbolOptions = (labelOptions && TreeGridTick_isObject(labelOptions.symbol, true) ?\n            labelOptions.symbol :\n            {}), node = mapOfPosToGridNode && mapOfPosToGridNode[pos], _a = node || {}, descendants = _a.descendants, depth = _a.depth, hasDescendants = node && descendants && descendants > 0, level = depth, isTreeGridElement = (axis.type === 'treegrid') && labelElement, shouldRender = tickPositions.indexOf(pos) > -1, prefixClassName = 'highcharts-treegrid-node-', prefixLevelClass = prefixClassName + 'level-', styledMode = chart.styledMode;\n    var collapsed,\n        addClassName,\n        removeClassName;\n    if (isTreeGridElement && node) {\n        // Add class name for hierarchical styling.\n        label\n            .removeClass(new RegExp(prefixLevelClass + '.*'))\n            .addClass(prefixLevelClass + level);\n    }\n    proceed.apply(tick, Array.prototype.slice.call(arguments, 1));\n    if (isTreeGridElement && hasDescendants) {\n        collapsed = axisGrid.isCollapsed(node);\n        renderLabelIcon(tick, {\n            color: (!styledMode &&\n                label.styles.color ||\n                ''),\n            collapsed: collapsed,\n            group: label.parentGroup,\n            options: symbolOptions,\n            renderer: label.renderer,\n            show: shouldRender,\n            xy: label.xy\n        });\n        // Add class name for the node.\n        addClassName = prefixClassName +\n            (collapsed ? 'collapsed' : 'expanded');\n        removeClassName = prefixClassName +\n            (collapsed ? 'expanded' : 'collapsed');\n        label\n            .addClass(addClassName)\n            .removeClass(removeClassName);\n        if (!styledMode) {\n            label.css({\n                cursor: 'pointer'\n            });\n        }\n        // Add events to both label text and icon\n        [label, icon].forEach(function (object) {\n            if (object && !object.attachedTreeGridEvents) {\n                // On hover\n                TreeGridTick_addEvent(object.element, 'mouseover', function () {\n                    onTickHover(label);\n                });\n                // On hover out\n                TreeGridTick_addEvent(object.element, 'mouseout', function () {\n                    onTickHoverExit(label, labelOptions);\n                });\n                TreeGridTick_addEvent(object.element, 'click', function () {\n                    tickGrid.toggleCollapse();\n                });\n                object.attachedTreeGridEvents = true;\n            }\n        });\n    }\n    else if (icon) {\n        TreeGridTick_removeEvent(labelElement);\n        label === null || label === void 0 ? void 0 : label.css({ cursor: 'default' });\n        icon.destroy();\n    }\n}\n/* *\n *\n *  Classes\n *\n * */\n/**\n * @private\n * @class\n */\nvar TreeGridTickAdditions = /** @class */ (function () {\n    /* *\n     *\n     *  Constructors\n     *\n     * */\n    /**\n     * @private\n     */\n    function TreeGridTickAdditions(tick) {\n        this.tick = tick;\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    TreeGridTickAdditions.compose = function (TickClass) {\n        var tickProto = TickClass.prototype;\n        if (!tickProto.toggleCollapse) {\n            TreeGridTick_addEvent(TickClass, 'init', onTickInit);\n            TreeGridTick_wrap(tickProto, 'getLabelPosition', wrapGetLabelPosition);\n            TreeGridTick_wrap(tickProto, 'renderLabel', wrapRenderLabel);\n            // Backwards compatibility\n            tickProto.collapse = function (redraw) {\n                this.treeGrid.collapse(redraw);\n            };\n            tickProto.expand = function (redraw) {\n                this.treeGrid.expand(redraw);\n            };\n            tickProto.toggleCollapse = function (redraw) {\n                this.treeGrid.toggleCollapse(redraw);\n            };\n        }\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Collapse the grid cell. Used when axis is of type treegrid.\n     *\n     * @see gantt/treegrid-axis/collapsed-dynamically/demo.js\n     *\n     * @private\n     * @function Highcharts.Tick#collapse\n     *\n     * @param {boolean} [redraw=true]\n     * Whether to redraw the chart or wait for an explicit call to\n     * {@link Highcharts.Chart#redraw}\n     */\n    TreeGridTickAdditions.prototype.collapse = function (redraw) {\n        var tick = this.tick,\n            axis = tick.axis,\n            brokenAxis = axis.brokenAxis;\n        if (brokenAxis &&\n            axis.treeGrid.mapOfPosToGridNode) {\n            var pos = tick.pos,\n                node = axis.treeGrid.mapOfPosToGridNode[pos],\n                breaks = axis.treeGrid.collapse(node);\n            brokenAxis.setBreaks(breaks, TreeGridTick_pick(redraw, true));\n        }\n    };\n    /**\n     * Destroy remaining labelIcon if exist.\n     *\n     * @private\n     * @function Highcharts.Tick#destroy\n     */\n    TreeGridTickAdditions.prototype.destroy = function () {\n        if (this.labelIcon) {\n            this.labelIcon.destroy();\n        }\n    };\n    /**\n     * Expand the grid cell. Used when axis is of type treegrid.\n     *\n     * @see gantt/treegrid-axis/collapsed-dynamically/demo.js\n     *\n     * @private\n     * @function Highcharts.Tick#expand\n     *\n     * @param {boolean} [redraw=true]\n     * Whether to redraw the chart or wait for an explicit call to\n     * {@link Highcharts.Chart#redraw}\n     */\n    TreeGridTickAdditions.prototype.expand = function (redraw) {\n        var _a = this.tick,\n            pos = _a.pos,\n            axis = _a.axis,\n            treeGrid = axis.treeGrid,\n            brokenAxis = axis.brokenAxis,\n            posMappedNodes = treeGrid.mapOfPosToGridNode;\n        if (brokenAxis && posMappedNodes) {\n            var node = posMappedNodes[pos],\n                breaks = treeGrid.expand(node);\n            brokenAxis.setBreaks(breaks, TreeGridTick_pick(redraw, true));\n        }\n    };\n    /**\n     * Toggle the collapse/expand state of the grid cell. Used when axis is\n     * of type treegrid.\n     *\n     * @see gantt/treegrid-axis/collapsed-dynamically/demo.js\n     *\n     * @private\n     * @function Highcharts.Tick#toggleCollapse\n     *\n     * @param {boolean} [redraw=true]\n     * Whether to redraw the chart or wait for an explicit call to\n     * {@link Highcharts.Chart#redraw}\n     */\n    TreeGridTickAdditions.prototype.toggleCollapse = function (redraw) {\n        var tick = this.tick,\n            axis = tick.axis,\n            brokenAxis = axis.brokenAxis;\n        if (brokenAxis &&\n            axis.treeGrid.mapOfPosToGridNode) {\n            var pos = tick.pos,\n                node = axis.treeGrid.mapOfPosToGridNode[pos],\n                breaks = axis.treeGrid.toggleCollapse(node);\n            brokenAxis.setBreaks(breaks, TreeGridTick_pick(redraw, true));\n        }\n    };\n    return TreeGridTickAdditions;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var TreeGridTick = (TreeGridTickAdditions);\n\n;// ./code/es5/es-modules/Series/TreeUtilities.js\n/* *\n *\n *  (c) 2014-2024 Highsoft AS\n *\n *  Authors: Jon Arild Nygard / Oystein Moseng\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar TreeUtilities_extend = Core_Utilities.extend, TreeUtilities_isArray = Core_Utilities.isArray, TreeUtilities_isNumber = Core_Utilities.isNumber, TreeUtilities_isObject = Core_Utilities.isObject, TreeUtilities_merge = Core_Utilities.merge, TreeUtilities_pick = Core_Utilities.pick, TreeUtilities_relativeLength = Core_Utilities.relativeLength;\n/* *\n *\n *  Functions\n *\n * */\n/* eslint-disable valid-jsdoc */\n/**\n * @private\n */\nfunction getColor(node, options) {\n    var index = options.index,\n        mapOptionsToLevel = options.mapOptionsToLevel,\n        parentColor = options.parentColor,\n        parentColorIndex = options.parentColorIndex,\n        series = options.series,\n        colors = options.colors,\n        siblings = options.siblings,\n        points = series.points,\n        chartOptionsChart = series.chart.options.chart;\n    var getColorByPoint,\n        point,\n        level,\n        colorByPoint,\n        colorIndexByPoint,\n        color,\n        colorIndex;\n    /**\n     * @private\n     */\n    var variateColor = function (color) {\n            var colorVariation = level && level.colorVariation;\n        if (colorVariation &&\n            colorVariation.key === 'brightness' &&\n            index &&\n            siblings) {\n            return Color_Color.parse(color).brighten(colorVariation.to * (index / siblings)).get();\n        }\n        return color;\n    };\n    if (node) {\n        point = points[node.i];\n        level = mapOptionsToLevel[node.level] || {};\n        getColorByPoint = point && level.colorByPoint;\n        if (getColorByPoint) {\n            colorIndexByPoint = point.index % (colors ?\n                colors.length :\n                chartOptionsChart.colorCount);\n            colorByPoint = colors && colors[colorIndexByPoint];\n        }\n        // Select either point color, level color or inherited color.\n        if (!series.chart.styledMode) {\n            color = TreeUtilities_pick(point && point.options.color, level && level.color, colorByPoint, parentColor && variateColor(parentColor), series.color);\n        }\n        colorIndex = TreeUtilities_pick(point && point.options.colorIndex, level && level.colorIndex, colorIndexByPoint, parentColorIndex, options.colorIndex);\n    }\n    return {\n        color: color,\n        colorIndex: colorIndex\n    };\n}\n/**\n * Creates a map from level number to its given options.\n *\n * @private\n *\n * @param {Object} params\n * Object containing parameters.\n * - `defaults` Object containing default options. The default options are\n *   merged with the userOptions to get the final options for a specific\n *   level.\n * - `from` The lowest level number.\n * - `levels` User options from series.levels.\n * - `to` The highest level number.\n *\n * @return {Highcharts.Dictionary<object>|null}\n * Returns a map from level number to its given options.\n */\nfunction getLevelOptions(params) {\n    var result = {};\n    var defaults,\n        converted,\n        i,\n        from,\n        to,\n        levels;\n    if (TreeUtilities_isObject(params)) {\n        from = TreeUtilities_isNumber(params.from) ? params.from : 1;\n        levels = params.levels;\n        converted = {};\n        defaults = TreeUtilities_isObject(params.defaults) ? params.defaults : {};\n        if (TreeUtilities_isArray(levels)) {\n            converted = levels.reduce(function (obj, item) {\n                var level,\n                    levelIsConstant,\n                    options;\n                if (TreeUtilities_isObject(item) && TreeUtilities_isNumber(item.level)) {\n                    options = TreeUtilities_merge({}, item);\n                    levelIsConstant = TreeUtilities_pick(options.levelIsConstant, defaults.levelIsConstant);\n                    // Delete redundant properties.\n                    delete options.levelIsConstant;\n                    delete options.level;\n                    // Calculate which level these options apply to.\n                    level = item.level + (levelIsConstant ? 0 : from - 1);\n                    if (TreeUtilities_isObject(obj[level])) {\n                        TreeUtilities_merge(true, obj[level], options); // #16329\n                    }\n                    else {\n                        obj[level] = options;\n                    }\n                }\n                return obj;\n            }, {});\n        }\n        to = TreeUtilities_isNumber(params.to) ? params.to : 1;\n        for (i = 0; i <= to; i++) {\n            result[i] = TreeUtilities_merge({}, defaults, TreeUtilities_isObject(converted[i]) ? converted[i] : {});\n        }\n    }\n    return result;\n}\n/**\n * @private\n * @todo Combine buildTree and buildNode with setTreeValues\n * @todo Remove logic from Treemap and make it utilize this mixin.\n */\nfunction setTreeValues(tree, options) {\n    var before = options.before,\n        idRoot = options.idRoot,\n        mapIdToNode = options.mapIdToNode,\n        nodeRoot = mapIdToNode[idRoot],\n        levelIsConstant = (options.levelIsConstant !== false),\n        points = options.points,\n        point = points[tree.i],\n        optionsPoint = point && point.options || {},\n        children = [];\n    var childrenTotal = 0;\n    tree.levelDynamic = tree.level - (levelIsConstant ? 0 : nodeRoot.level);\n    tree.name = TreeUtilities_pick(point && point.name, '');\n    tree.visible = (idRoot === tree.id ||\n        options.visible === true);\n    if (typeof before === 'function') {\n        tree = before(tree, options);\n    }\n    // First give the children some values\n    tree.children.forEach(function (child, i) {\n        var newOptions = TreeUtilities_extend({},\n            options);\n        TreeUtilities_extend(newOptions, {\n            index: i,\n            siblings: tree.children.length,\n            visible: tree.visible\n        });\n        child = setTreeValues(child, newOptions);\n        children.push(child);\n        if (child.visible) {\n            childrenTotal += child.val;\n        }\n    });\n    // Set the values\n    var value = TreeUtilities_pick(optionsPoint.value,\n        childrenTotal);\n    tree.visible = value >= 0 && (childrenTotal > 0 || tree.visible);\n    tree.children = children;\n    tree.childrenTotal = childrenTotal;\n    tree.isLeaf = tree.visible && !childrenTotal;\n    tree.val = value;\n    return tree;\n}\n/**\n * Update the rootId property on the series. Also makes sure that it is\n * accessible to exporting.\n *\n * @private\n *\n * @param {Object} series\n * The series to operate on.\n *\n * @return {string}\n * Returns the resulting rootId after update.\n */\nfunction updateRootId(series) {\n    var rootId,\n        options;\n    if (TreeUtilities_isObject(series)) {\n        // Get the series options.\n        options = TreeUtilities_isObject(series.options) ? series.options : {};\n        // Calculate the rootId.\n        rootId = TreeUtilities_pick(series.rootNode, options.rootId, '');\n        // Set rootId on series.userOptions to pick it up in exporting.\n        if (TreeUtilities_isObject(series.userOptions)) {\n            series.userOptions.rootId = rootId;\n        }\n        // Set rootId on series to pick it up on next update.\n        series.rootNode = rootId;\n    }\n    return rootId;\n}\n/**\n * Get the node width, which relies on the plot width and the nodeDistance\n * option.\n *\n * @private\n */\nfunction getNodeWidth(series, columnCount) {\n    var chart = series.chart,\n        options = series.options,\n        _a = options.nodeDistance,\n        nodeDistance = _a === void 0 ? 0 : _a,\n        _b = options.nodeWidth,\n        nodeWidth = _b === void 0 ? 0 : _b,\n        _c = chart.plotSizeX,\n        plotSizeX = _c === void 0 ? 1 : _c;\n    // Node width auto means they are evenly distributed along the width of\n    // the plot area\n    if (nodeWidth === 'auto') {\n        if (typeof nodeDistance === 'string' && /%$/.test(nodeDistance)) {\n            var fraction = parseFloat(nodeDistance) / 100,\n                total = columnCount + fraction * (columnCount - 1);\n            return plotSizeX / total;\n        }\n        var nDistance = Number(nodeDistance);\n        return ((plotSizeX + nDistance) /\n            (columnCount || 1)) - nDistance;\n    }\n    return TreeUtilities_relativeLength(nodeWidth, plotSizeX);\n}\n/* *\n *\n *  Default Export\n *\n * */\nvar TreeUtilities = {\n    getColor: getColor,\n    getLevelOptions: getLevelOptions,\n    getNodeWidth: getNodeWidth,\n    setTreeValues: setTreeValues,\n    updateRootId: updateRootId\n};\n/* harmony default export */ var Series_TreeUtilities = (TreeUtilities);\n\n;// ./code/es5/es-modules/Core/Axis/TreeGrid/TreeGridAxis.js\n/* *\n *\n *  (c) 2016 Highsoft AS\n *  Authors: Jon Arild Nygard\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\n\n\n\nvar TreeGridAxis_getLevelOptions = Series_TreeUtilities.getLevelOptions;\n\nvar TreeGridAxis_addEvent = Core_Utilities.addEvent, TreeGridAxis_isArray = Core_Utilities.isArray, TreeGridAxis_splat = Core_Utilities.splat, TreeGridAxis_find = Core_Utilities.find, TreeGridAxis_fireEvent = Core_Utilities.fireEvent, TreeGridAxis_isObject = Core_Utilities.isObject, TreeGridAxis_isString = Core_Utilities.isString, TreeGridAxis_merge = Core_Utilities.merge, TreeGridAxis_pick = Core_Utilities.pick, TreeGridAxis_removeEvent = Core_Utilities.removeEvent, TreeGridAxis_wrap = Core_Utilities.wrap;\n/* *\n *\n *  Variables\n *\n * */\nvar TickConstructor;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction getBreakFromNode(node, max) {\n    var to = node.collapseEnd || 0;\n    var from = node.collapseStart || 0;\n    // In broken-axis, the axis.max is minimized until it is not within a\n    // break. Therefore, if break.to is larger than axis.max, the axis.to\n    // should not add the 0.5 axis.tickMarkOffset, to avoid adding a break\n    // larger than axis.max.\n    // TODO consider simplifying broken-axis and this might solve itself\n    if (to >= max) {\n        from -= 0.5;\n    }\n    return {\n        from: from,\n        to: to,\n        showPoints: false\n    };\n}\n/**\n * Creates a tree structure of the data, and the treegrid. Calculates\n * categories, and y-values of points based on the tree.\n *\n * @private\n * @function getTreeGridFromData\n *\n * @param {Array<Highcharts.GanttPointOptions>} data\n * All the data points to display in the axis.\n *\n * @param {boolean} uniqueNames\n * Whether or not the data node with the same name should share grid cell. If\n * true they do share cell. False by default.\n *\n * @param {number} numberOfSeries\n *\n * @return {Object}\n * Returns an object containing categories, mapOfIdToNode,\n * mapOfPosToGridNode, and tree.\n *\n * @todo There should be only one point per line.\n * @todo It should be optional to have one category per point, or merge\n *       cells\n * @todo Add unit-tests.\n */\nfunction getTreeGridFromData(data, uniqueNames, numberOfSeries) {\n    var categories = [],\n        collapsedNodes = [],\n        mapOfIdToNode = {},\n        uniqueNamesEnabled = uniqueNames || false;\n    var mapOfPosToGridNode = {},\n        posIterator = -1;\n    // Build the tree from the series data.\n    var treeParams = {\n            // After the children has been created.\n            after: function (node) {\n                var gridNode = mapOfPosToGridNode[node.pos];\n            var height = 0,\n                descendants = 0;\n            gridNode.children.forEach(function (child) {\n                descendants += (child.descendants || 0) + 1;\n                height = Math.max((child.height || 0) + 1, height);\n            });\n            gridNode.descendants = descendants;\n            gridNode.height = height;\n            if (gridNode.collapsed) {\n                collapsedNodes.push(gridNode);\n            }\n        },\n        // Before the children has been created.\n        before: function (node) {\n            var data = TreeGridAxis_isObject(node.data,\n                true) ?\n                    node.data :\n                    {},\n                name = TreeGridAxis_isString(data.name) ? data.name : '',\n                parentNode = mapOfIdToNode[node.parent],\n                parentGridNode = (TreeGridAxis_isObject(parentNode,\n                true) ?\n                    mapOfPosToGridNode[parentNode.pos] :\n                    null),\n                hasSameName = function (x) {\n                    return x.name === name;\n            };\n            var gridNode,\n                pos;\n            // If not unique names, look for sibling node with the same name\n            if (uniqueNamesEnabled &&\n                TreeGridAxis_isObject(parentGridNode, true) &&\n                !!(gridNode = TreeGridAxis_find(parentGridNode.children, hasSameName))) {\n                // If there is a gridNode with the same name, reuse position\n                pos = gridNode.pos;\n                // Add data node to list of nodes in the grid node.\n                gridNode.nodes.push(node);\n            }\n            else {\n                // If it is a new grid node, increment position.\n                pos = posIterator++;\n            }\n            // Add new grid node to map.\n            if (!mapOfPosToGridNode[pos]) {\n                mapOfPosToGridNode[pos] = gridNode = {\n                    depth: parentGridNode ? parentGridNode.depth + 1 : 0,\n                    name: name,\n                    id: data.id,\n                    nodes: [node],\n                    children: [],\n                    pos: pos\n                };\n                // If not root, then add name to categories.\n                if (pos !== -1) {\n                    categories.push(name);\n                }\n                // Add name to list of children.\n                if (TreeGridAxis_isObject(parentGridNode, true)) {\n                    parentGridNode.children.push(gridNode);\n                }\n            }\n            // Add data node to map\n            if (TreeGridAxis_isString(node.id)) {\n                mapOfIdToNode[node.id] = node;\n            }\n            // If one of the points are collapsed, then start the grid node\n            // in collapsed state.\n            if (gridNode &&\n                data.collapsed === true) {\n                gridNode.collapsed = true;\n            }\n            // Assign pos to data node\n            node.pos = pos;\n        }\n    };\n    var updateYValuesAndTickPos = function (map,\n        numberOfSeries) {\n            var setValues = function (gridNode,\n        start,\n        result) {\n                var nodes = gridNode.nodes,\n        padding = 0.5;\n            var end = start + (start === -1 ? 0 : numberOfSeries - 1);\n            var diff = (end - start) / 2,\n                pos = start + diff;\n            nodes.forEach(function (node) {\n                var data = node.data;\n                if (TreeGridAxis_isObject(data, true)) {\n                    // Update point\n                    data.y = start + (data.seriesIndex || 0);\n                    // Remove the property once used\n                    delete data.seriesIndex;\n                }\n                node.pos = pos;\n            });\n            result[pos] = gridNode;\n            gridNode.pos = pos;\n            gridNode.tickmarkOffset = diff + padding;\n            gridNode.collapseStart = end + padding;\n            gridNode.children.forEach(function (child) {\n                setValues(child, end + 1, result);\n                end = (child.collapseEnd || 0) - padding;\n            });\n            // Set collapseEnd to the end of the last child node.\n            gridNode.collapseEnd = end + padding;\n            return result;\n        };\n        return setValues(map['-1'], -1, {});\n    };\n    // Create tree from data\n    var tree = Gantt_Tree.getTree(data,\n        treeParams);\n    // Update y values of data, and set calculate tick positions.\n    mapOfPosToGridNode = updateYValuesAndTickPos(mapOfPosToGridNode, numberOfSeries);\n    // Return the resulting data.\n    return {\n        categories: categories,\n        mapOfIdToNode: mapOfIdToNode,\n        mapOfPosToGridNode: mapOfPosToGridNode,\n        collapsedNodes: collapsedNodes,\n        tree: tree\n    };\n}\n/**\n * Builds the tree of categories and calculates its positions.\n * @private\n * @param {Object} e Event object\n * @param {Object} e.target The chart instance which the event was fired on.\n * @param {object[]} e.target.axes The axes of the chart.\n */\nfunction onBeforeRender(e) {\n    var chart = e.target,\n        axes = chart.axes;\n    axes.filter(function (axis) { return axis.type === 'treegrid'; }).forEach(function (axis) {\n        var options = axis.options || {},\n            labelOptions = options.labels,\n            uniqueNames = axis.uniqueNames,\n            max = chart.time.parse(options.max), \n            // Check whether any of series is rendering for the first\n            // time, visibility has changed, or its data is dirty, and\n            // only then update. #10570, #10580. Also check if\n            // mapOfPosToGridNode exists. #10887\n            isDirty = (!axis.treeGrid.mapOfPosToGridNode ||\n                axis.series.some(function (series) {\n                    return !series.hasRendered ||\n                        series.isDirtyData ||\n                        series.isDirty;\n            }));\n        var numberOfSeries = 0,\n            data,\n            treeGrid;\n        if (isDirty) {\n            var seriesHasPrimitivePoints_1 = [];\n            // Concatenate data from all series assigned to this axis.\n            data = axis.series.reduce(function (arr, s) {\n                var seriesData = (s.options.data || []),\n                    firstPoint = seriesData[0], \n                    // Check if the first point is a simple array of values.\n                    // If so we assume that this is the case for all points.\n                    foundPrimitivePoint = (Array.isArray(firstPoint) &&\n                        !firstPoint.find(function (value) { return (typeof value === 'object'); }));\n                seriesHasPrimitivePoints_1.push(foundPrimitivePoint);\n                if (s.visible) {\n                    // Push all data to array\n                    seriesData.forEach(function (pointOptions) {\n                        // For using keys, or when using primitive points,\n                        // rebuild the data structure\n                        if (foundPrimitivePoint ||\n                            (s.options.keys && s.options.keys.length)) {\n                            pointOptions = s.pointClass.prototype\n                                .optionsToObject\n                                .call({ series: s }, pointOptions);\n                            s.pointClass.setGanttPointAliases(pointOptions, chart);\n                        }\n                        if (TreeGridAxis_isObject(pointOptions, true)) {\n                            // Set series index on data. Removed again\n                            // after use.\n                            pointOptions.seriesIndex = (numberOfSeries);\n                            arr.push(pointOptions);\n                        }\n                    });\n                    // Increment series index\n                    if (uniqueNames === true) {\n                        numberOfSeries++;\n                    }\n                }\n                return arr;\n            }, []);\n            // If max is higher than set data - add a\n            // dummy data to render categories #10779\n            if (max && data.length < max) {\n                for (var i = data.length; i <= max; i++) {\n                    data.push({\n                        // Use the zero-width character\n                        // to avoid conflict with uniqueNames\n                        name: i + '\\u200B'\n                    });\n                }\n            }\n            // `setScale` is fired after all the series is initialized,\n            // which is an ideal time to update the axis.categories.\n            treeGrid = getTreeGridFromData(data, uniqueNames || false, (uniqueNames === true) ? numberOfSeries : 1);\n            // Assign values to the axis.\n            axis.categories = treeGrid.categories;\n            axis.treeGrid.mapOfPosToGridNode = (treeGrid.mapOfPosToGridNode);\n            axis.hasNames = true;\n            axis.treeGrid.tree = treeGrid.tree;\n            // Update yData now that we have calculated the y values\n            axis.series.forEach(function (series, index) {\n                var axisData = (series.options.data || []).map(function (d) {\n                        if (seriesHasPrimitivePoints_1[index] ||\n                            (TreeGridAxis_isArray(d) &&\n                                series.options.keys &&\n                                series.options.keys.length)) {\n                            // Get the axisData from the data array used to\n                            // build the treeGrid where has been modified\n                            data.forEach(function (point) {\n                                var toArray = TreeGridAxis_splat(d);\n                            if (toArray.indexOf(point.x || 0) >= 0 &&\n                                toArray.indexOf(point.x2 || 0) >= 0) {\n                                d = point;\n                            }\n                        });\n                    }\n                    return TreeGridAxis_isObject(d, true) ? TreeGridAxis_merge(d) : d;\n                });\n                // Avoid destroying points when series is not visible\n                if (series.visible) {\n                    series.setData(axisData, false);\n                }\n            });\n            // Calculate the label options for each level in the tree.\n            axis.treeGrid.mapOptionsToLevel =\n                TreeGridAxis_getLevelOptions({\n                    defaults: labelOptions,\n                    from: 1,\n                    levels: labelOptions && labelOptions.levels,\n                    to: axis.treeGrid.tree && axis.treeGrid.tree.height\n                });\n            // Setting initial collapsed nodes\n            if (e.type === 'beforeRender') {\n                axis.treeGrid.collapsedNodes = treeGrid.collapsedNodes;\n            }\n        }\n    });\n}\n/**\n * Generates a tick for initial positioning.\n *\n * @private\n * @function Highcharts.GridAxis#generateTick\n *\n * @param {Function} proceed\n * The original generateTick function.\n *\n * @param {number} pos\n * The tick position in axis values.\n */\nfunction wrapGenerateTick(proceed, pos) {\n    var axis = this,\n        mapOptionsToLevel = axis.treeGrid.mapOptionsToLevel || {},\n        isTreeGrid = axis.type === 'treegrid',\n        ticks = axis.ticks;\n    var tick = ticks[pos],\n        levelOptions,\n        options,\n        gridNode;\n    if (isTreeGrid &&\n        axis.treeGrid.mapOfPosToGridNode) {\n        gridNode = axis.treeGrid.mapOfPosToGridNode[pos];\n        levelOptions = mapOptionsToLevel[gridNode.depth];\n        if (levelOptions) {\n            options = {\n                labels: levelOptions\n            };\n        }\n        if (!tick &&\n            TickConstructor) {\n            ticks[pos] = tick =\n                new TickConstructor(axis, pos, void 0, void 0, {\n                    category: gridNode.name,\n                    tickmarkOffset: gridNode.tickmarkOffset,\n                    options: options\n                });\n        }\n        else {\n            // Update labels depending on tick interval\n            tick.parameters.category = gridNode.name;\n            tick.options = options;\n            tick.addLabel();\n        }\n    }\n    else {\n        proceed.apply(axis, Array.prototype.slice.call(arguments, 1));\n    }\n}\n/**\n * @private\n */\nfunction wrapInit(proceed, chart, userOptions, coll) {\n    var axis = this,\n        isTreeGrid = userOptions.type === 'treegrid';\n    if (!axis.treeGrid) {\n        axis.treeGrid = new TreeGridAxisAdditions(axis);\n    }\n    // Set default and forced options for TreeGrid\n    if (isTreeGrid) {\n        // Add event for updating the categories of a treegrid.\n        // NOTE Preferably these events should be set on the axis.\n        TreeGridAxis_addEvent(chart, 'beforeRender', onBeforeRender);\n        TreeGridAxis_addEvent(chart, 'beforeRedraw', onBeforeRender);\n        // Add new collapsed nodes on addseries\n        TreeGridAxis_addEvent(chart, 'addSeries', function (e) {\n            if (e.options.data) {\n                var treeGrid = getTreeGridFromData(e.options.data,\n                    userOptions.uniqueNames || false, 1);\n                axis.treeGrid.collapsedNodes = (axis.treeGrid.collapsedNodes || []).concat(treeGrid.collapsedNodes);\n            }\n        });\n        // Collapse all nodes in axis.treegrid.collapsednodes\n        // where collapsed equals true.\n        TreeGridAxis_addEvent(axis, 'foundExtremes', function () {\n            if (axis.treeGrid.collapsedNodes) {\n                axis.treeGrid.collapsedNodes.forEach(function (node) {\n                    var breaks = axis.treeGrid.collapse(node);\n                    if (axis.brokenAxis) {\n                        axis.brokenAxis.setBreaks(breaks, false);\n                        // Remove the node from the axis collapsedNodes\n                        if (axis.treeGrid.collapsedNodes) {\n                            axis.treeGrid.collapsedNodes = axis.treeGrid\n                                .collapsedNodes\n                                .filter(function (n) { return ((node.collapseStart !==\n                                n.collapseStart) ||\n                                node.collapseEnd !== n.collapseEnd); });\n                        }\n                    }\n                });\n            }\n        });\n        // If staticScale is not defined on the yAxis\n        // and chart height is set, set axis.isDirty\n        // to ensure collapsing works (#12012)\n        TreeGridAxis_addEvent(axis, 'afterBreaks', function () {\n            if (axis.coll === 'yAxis' &&\n                !axis.staticScale &&\n                axis.chart.options.chart.height) {\n                axis.isDirty = true;\n            }\n        });\n        userOptions = TreeGridAxis_merge({\n            // Default options\n            grid: {\n                enabled: true\n            },\n            // TODO: add support for align in treegrid.\n            labels: {\n                align: 'left',\n                /**\n                * Set options on specific levels in a tree grid axis. Takes\n                * precedence over labels options.\n                *\n                * @sample {gantt} gantt/treegrid-axis/labels-levels\n                *         Levels on TreeGrid Labels\n                *\n                * @type      {Array<*>}\n                * @product   gantt\n                * @apioption yAxis.labels.levels\n                *\n                * @private\n                */\n                levels: [{\n                        /**\n                        * Specify the level which the options within this object\n                        * applies to.\n                        *\n                        * @type      {number}\n                        * @product   gantt\n                        * @apioption yAxis.labels.levels.level\n                        *\n                        * @private\n                        */\n                        level: void 0\n                    }, {\n                        level: 1,\n                        /**\n                         * @type      {Highcharts.CSSObject}\n                         * @product   gantt\n                         * @apioption yAxis.labels.levels.style\n                         *\n                         * @private\n                         */\n                        style: {\n                            /** @ignore-option */\n                            fontWeight: 'bold'\n                        }\n                    }],\n                /**\n                 * The symbol for the collapse and expand icon in a\n                 * treegrid.\n                 *\n                 * @product      gantt\n                 * @optionparent yAxis.labels.symbol\n                 *\n                 * @private\n                 */\n                symbol: {\n                    /**\n                     * The symbol type. Points to a definition function in\n                     * the `Highcharts.Renderer.symbols` collection.\n                     *\n                     * @type {Highcharts.SymbolKeyValue}\n                     *\n                     * @private\n                     */\n                    type: 'triangle',\n                    x: -5,\n                    y: -5,\n                    height: 10,\n                    width: 10\n                }\n            },\n            uniqueNames: false\n        }, userOptions, {\n            // Forced options\n            reversed: true\n        });\n    }\n    // Now apply the original function with the original arguments, which are\n    // sliced off this function's arguments\n    proceed.apply(axis, [chart, userOptions, coll]);\n    if (isTreeGrid) {\n        axis.hasNames = true;\n        axis.options.showLastLabel = true;\n    }\n}\n/**\n * Set the tick positions, tickInterval, axis min and max.\n *\n * @private\n * @function Highcharts.GridAxis#setTickInterval\n *\n * @param {Function} proceed\n * The original setTickInterval function.\n */\nfunction wrapSetTickInterval(proceed) {\n    var _a,\n        _b,\n        _c,\n        _d,\n        _e;\n    var axis = this,\n        options = axis.options,\n        time = axis.chart.time,\n        linkedParent = typeof options.linkedTo === 'number' ?\n            (_a = this.chart[axis.coll]) === null || _a === void 0 ? void 0 : _a[options.linkedTo] :\n            void 0,\n        isTreeGrid = axis.type === 'treegrid';\n    if (isTreeGrid) {\n        axis.min = (_c = (_b = axis.userMin) !== null && _b !== void 0 ? _b : time.parse(options.min)) !== null && _c !== void 0 ? _c : axis.dataMin;\n        axis.max = (_e = (_d = axis.userMax) !== null && _d !== void 0 ? _d : time.parse(options.max)) !== null && _e !== void 0 ? _e : axis.dataMax;\n        TreeGridAxis_fireEvent(axis, 'foundExtremes');\n        // `setAxisTranslation` modifies the min and max according to axis\n        // breaks.\n        axis.setAxisTranslation();\n        axis.tickInterval = 1;\n        axis.tickmarkOffset = 0.5;\n        axis.tickPositions = axis.treeGrid.mapOfPosToGridNode ?\n            axis.treeGrid.getTickPositions() :\n            [];\n        if (linkedParent) {\n            var linkedParentExtremes = linkedParent.getExtremes();\n            axis.min = TreeGridAxis_pick(linkedParentExtremes.min, linkedParentExtremes.dataMin);\n            axis.max = TreeGridAxis_pick(linkedParentExtremes.max, linkedParentExtremes.dataMax);\n            axis.tickPositions = linkedParent.tickPositions;\n        }\n        axis.linkedParent = linkedParent;\n    }\n    else {\n        proceed.apply(axis, Array.prototype.slice.call(arguments, 1));\n    }\n}\n/**\n * Wrap axis redraw to remove TreeGrid events from ticks\n *\n * @private\n * @function Highcharts.GridAxis#redraw\n *\n * @param {Function} proceed\n * The original setTickInterval function.\n */\nfunction wrapRedraw(proceed) {\n    var axis = this,\n        isTreeGrid = this.type === 'treegrid';\n    if (isTreeGrid && axis.visible) {\n        axis.tickPositions.forEach(function (pos) {\n            var tick = axis.ticks[pos];\n            if (tick.label && tick.label.attachedTreeGridEvents) {\n                TreeGridAxis_removeEvent(tick.label.element);\n                tick.label.attachedTreeGridEvents = false;\n            }\n        });\n    }\n    proceed.apply(axis, Array.prototype.slice.call(arguments, 1));\n}\n/* *\n *\n *  Classes\n *\n * */\n/**\n * @private\n * @class\n */\nvar TreeGridAxisAdditions = /** @class */ (function () {\n    /* *\n     *\n     *  Constructors\n     *\n     * */\n    /**\n     * @private\n     */\n    function TreeGridAxisAdditions(axis) {\n        this.axis = axis;\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    TreeGridAxisAdditions.compose = function (AxisClass, ChartClass, SeriesClass, TickClass) {\n        if (!AxisClass.keepProps.includes('treeGrid')) {\n            var axisProps = AxisClass.prototype;\n            AxisClass.keepProps.push('treeGrid');\n            TreeGridAxis_wrap(axisProps, 'generateTick', wrapGenerateTick);\n            TreeGridAxis_wrap(axisProps, 'init', wrapInit);\n            TreeGridAxis_wrap(axisProps, 'setTickInterval', wrapSetTickInterval);\n            TreeGridAxis_wrap(axisProps, 'redraw', wrapRedraw);\n            // Make utility functions available for testing.\n            axisProps.utils = {\n                getNode: Gantt_Tree.getNode\n            };\n            if (!TickConstructor) {\n                TickConstructor = TickClass;\n            }\n        }\n        Axis_GridAxis.compose(AxisClass, ChartClass, TickClass);\n        Axis_BrokenAxis.compose(AxisClass, SeriesClass);\n        TreeGridTick.compose(TickClass);\n        return AxisClass;\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Set the collapse status.\n     *\n     * @private\n     *\n     * @param {Highcharts.Axis} axis\n     * The axis to check against.\n     *\n     * @param {Highcharts.GridNode} node\n     * The node to collapse.\n     */\n    TreeGridAxisAdditions.prototype.setCollapsedStatus = function (node) {\n        var axis = this.axis,\n            chart = axis.chart;\n        axis.series.forEach(function (series) {\n            var data = series.options.data;\n            if (node.id && data) {\n                var point = chart.get(node.id),\n                    dataPoint = data[series.data.indexOf(point)];\n                if (point && dataPoint) {\n                    point.collapsed = node.collapsed;\n                    dataPoint.collapsed = node.collapsed;\n                }\n            }\n        });\n    };\n    /**\n     * Calculates the new axis breaks to collapse a node.\n     *\n     * @private\n     *\n     * @param {Highcharts.Axis} axis\n     * The axis to check against.\n     *\n     * @param {Highcharts.GridNode} node\n     * The node to collapse.\n     *\n     * @param {number} pos\n     * The tick position to collapse.\n     *\n     * @return {Array<object>}\n     * Returns an array of the new breaks for the axis.\n     */\n    TreeGridAxisAdditions.prototype.collapse = function (node) {\n        var axis = this.axis,\n            breaks = (axis.options.breaks || []),\n            obj = getBreakFromNode(node,\n            axis.max);\n        breaks.push(obj);\n        // Change the collapsed flag #13838\n        node.collapsed = true;\n        axis.treeGrid.setCollapsedStatus(node);\n        return breaks;\n    };\n    /**\n     * Calculates the new axis breaks to expand a node.\n     *\n     * @private\n     *\n     * @param {Highcharts.Axis} axis\n     * The axis to check against.\n     *\n     * @param {Highcharts.GridNode} node\n     * The node to expand.\n     *\n     * @param {number} pos\n     * The tick position to expand.\n     *\n     * @return {Array<object>}\n     * Returns an array of the new breaks for the axis.\n     */\n    TreeGridAxisAdditions.prototype.expand = function (node) {\n        var axis = this.axis,\n            breaks = (axis.options.breaks || []),\n            obj = getBreakFromNode(node,\n            axis.max);\n        // Change the collapsed flag #13838\n        node.collapsed = false;\n        axis.treeGrid.setCollapsedStatus(node);\n        // Remove the break from the axis breaks array.\n        return breaks.reduce(function (arr, b) {\n            if (b.to !== obj.to || b.from !== obj.from) {\n                arr.push(b);\n            }\n            return arr;\n        }, []);\n    };\n    /**\n     * Creates a list of positions for the ticks on the axis. Filters out\n     * positions that are outside min and max, or is inside an axis break.\n     *\n     * @private\n     *\n     * @return {Array<number>}\n     * List of positions.\n     */\n    TreeGridAxisAdditions.prototype.getTickPositions = function () {\n        var axis = this.axis, roundedMin = Math.floor(axis.min / axis.tickInterval) * axis.tickInterval, roundedMax = Math.ceil(axis.max / axis.tickInterval) * axis.tickInterval;\n        return Object.keys(axis.treeGrid.mapOfPosToGridNode || {}).reduce(function (arr, key) {\n            var pos = +key;\n            if (pos >= roundedMin &&\n                pos <= roundedMax &&\n                !(axis.brokenAxis && axis.brokenAxis.isInAnyBreak(pos))) {\n                arr.push(pos);\n            }\n            return arr;\n        }, []);\n    };\n    /**\n     * Check if a node is collapsed.\n     *\n     * @private\n     *\n     * @param {Highcharts.Axis} axis\n     * The axis to check against.\n     *\n     * @param {Object} node\n     * The node to check if is collapsed.\n     *\n     * @param {number} pos\n     * The tick position to collapse.\n     *\n     * @return {boolean}\n     * Returns true if collapsed, false if expanded.\n     */\n    TreeGridAxisAdditions.prototype.isCollapsed = function (node) {\n        var axis = this.axis,\n            breaks = (axis.options.breaks || []),\n            obj = getBreakFromNode(node,\n            axis.max);\n        return breaks.some(function (b) {\n            return b.from === obj.from && b.to === obj.to;\n        });\n    };\n    /**\n     * Calculates the new axis breaks after toggling the collapse/expand\n     * state of a node. If it is collapsed it will be expanded, and if it is\n     * expanded it will be collapsed.\n     *\n     * @private\n     *\n     * @param {Highcharts.Axis} axis\n     * The axis to check against.\n     *\n     * @param {Highcharts.GridNode} node\n     * The node to toggle.\n     *\n     * @return {Array<object>}\n     * Returns an array of the new breaks for the axis.\n     */\n    TreeGridAxisAdditions.prototype.toggleCollapse = function (node) {\n        return (this.isCollapsed(node) ?\n            this.expand(node) :\n            this.collapse(node));\n    };\n    return TreeGridAxisAdditions;\n}());\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var TreeGridAxis = (TreeGridAxisAdditions);\n\n;// ./code/es5/es-modules/Series/Gantt/GanttSeries.js\n/* *\n *\n *  (c) 2016-2024 Highsoft AS\n *\n *  Author: Lars A. V. Cabrera\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar GanttSeries_extends = (undefined && undefined.__extends) || (function () {\n    var extendStatics = function (d,\n        b) {\n            extendStatics = Object.setPrototypeOf ||\n                ({ __proto__: [] } instanceof Array && function (d,\n        b) { d.__proto__ = b; }) ||\n                function (d,\n        b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n        p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        if (typeof b !== \"function\" && b !== null)\n            throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n\n\nvar GanttSeries_Series = Series_SeriesRegistry.series, GanttSeries_XRangeSeries = Series_SeriesRegistry.seriesTypes.xrange;\n\n\n\nvar GanttSeries_extend = Core_Utilities.extend, GanttSeries_isNumber = Core_Utilities.isNumber, GanttSeries_merge = Core_Utilities.merge;\n/* *\n *\n *  Class\n *\n * */\n/**\n * @private\n * @class\n * @name Highcharts.seriesTypes.gantt\n *\n * @augments Highcharts.Series\n */\nvar GanttSeries = /** @class */ (function (_super) {\n    GanttSeries_extends(GanttSeries, _super);\n    function GanttSeries() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    GanttSeries.compose = function (AxisClass, ChartClass, SeriesClass, TickClass) {\n        GanttSeries_XRangeSeries.compose(AxisClass);\n        if (!ChartClass) {\n            return;\n        }\n        Extensions_StaticScale.compose(AxisClass, ChartClass);\n        if (!SeriesClass) {\n            return;\n        }\n        Gantt_Pathfinder.compose(ChartClass, SeriesClass.prototype.pointClass);\n        if (!TickClass) {\n            return;\n        }\n        TreeGridAxis.compose(AxisClass, ChartClass, SeriesClass, TickClass);\n    };\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Draws a single point in the series.\n     *\n     * This override draws the point as a diamond if point.options.milestone\n     * is true, and uses the original drawPoint() if it is false or not set.\n     *\n     * @requires highcharts-gantt\n     *\n     * @private\n     * @function Highcharts.seriesTypes.gantt#drawPoint\n     *\n     * @param {Highcharts.Point} point\n     *        An instance of Point in the series\n     *\n     * @param {\"animate\"|\"attr\"} verb\n     *        'animate' (animates changes) or 'attr' (sets options)\n     */\n    GanttSeries.prototype.drawPoint = function (point, verb) {\n        var series = this,\n            seriesOpts = series.options,\n            renderer = series.chart.renderer,\n            shapeArgs = point.shapeArgs,\n            plotY = point.plotY,\n            state = point.selected && 'select',\n            cutOff = seriesOpts.stacking && !seriesOpts.borderRadius;\n        var graphic = point.graphic,\n            diamondShape;\n        if (point.options.milestone) {\n            if (GanttSeries_isNumber(plotY) &&\n                point.y !== null &&\n                point.visible !== false) {\n                diamondShape = renderer.symbols.diamond(shapeArgs.x || 0, shapeArgs.y || 0, shapeArgs.width || 0, shapeArgs.height || 0);\n                if (graphic) {\n                    graphic[verb]({\n                        d: diamondShape\n                    });\n                }\n                else {\n                    point.graphic = graphic = renderer.path(diamondShape)\n                        .addClass(point.getClassName(), true)\n                        .add(point.group || series.group);\n                }\n                // Presentational\n                if (!series.chart.styledMode) {\n                    point.graphic\n                        .attr(series.pointAttribs(point, state))\n                        .shadow(seriesOpts.shadow, null, cutOff);\n                }\n            }\n            else if (graphic) {\n                point.graphic = graphic.destroy(); // #1269\n            }\n        }\n        else {\n            _super.prototype.drawPoint.call(this, point, verb);\n        }\n    };\n    /**\n     * Handle milestones, as they have no x2.\n     * @private\n     */\n    GanttSeries.prototype.translatePoint = function (point) {\n        var shapeArgs,\n            size;\n        _super.prototype.translatePoint.call(this, point);\n        if (point.options.milestone) {\n            shapeArgs = point.shapeArgs;\n            size = shapeArgs.height || 0;\n            point.shapeArgs = {\n                x: (shapeArgs.x || 0) - (size / 2),\n                y: shapeArgs.y,\n                width: size,\n                height: size\n            };\n        }\n    };\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    GanttSeries.defaultOptions = GanttSeries_merge(GanttSeries_XRangeSeries.defaultOptions, Gantt_GanttSeriesDefaults);\n    return GanttSeries;\n}(GanttSeries_XRangeSeries));\nGanttSeries_extend(GanttSeries.prototype, {\n    pointArrayMap: ['start', 'end', 'y'],\n    pointClass: Gantt_GanttPoint,\n    setData: GanttSeries_Series.prototype.setData\n});\nSeries_SeriesRegistry.registerSeriesType('gantt', GanttSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ var Gantt_GanttSeries = (GanttSeries);\n\n;// ./code/es5/es-modules/masters/modules/gantt.src.js\n/**\n * @license Highcharts Gantt JS v12.1.2 (2025-01-09)\n * @module highcharts/modules/gantt\n * @requires highcharts\n *\n * Gantt series\n *\n * (c) 2016-2024 Lars A. V. Cabrera\n *\n * License: www.highcharts.com/license\n */\n\n\n\n\n\n\n\n\n\n\n\n// Series\n\n\nvar gantt_src_G = Core_Globals;\n// Classes\ngantt_src_G.Connection = gantt_src_G.Connection || Gantt_Connection;\ngantt_src_G.GanttChart = gantt_src_G.GanttChart || Chart_GanttChart;\ngantt_src_G.Navigator = gantt_src_G.Navigator || Navigator_Navigator;\ngantt_src_G.RangeSelector = gantt_src_G.RangeSelector || RangeSelector_RangeSelector;\ngantt_src_G.Scrollbar = gantt_src_G.Scrollbar || Scrollbar_Scrollbar;\n// Functions\ngantt_src_G.ganttChart = gantt_src_G.GanttChart.ganttChart;\n// Compositions\nExtensions_ArrowSymbols.compose(gantt_src_G.SVGRenderer);\nExtensions_CurrentDateIndication.compose(gantt_src_G.Axis, gantt_src_G.PlotLineOrBand);\nGantt_GanttSeries.compose(gantt_src_G.Axis, gantt_src_G.Chart, gantt_src_G.Series, gantt_src_G.Tick);\ngantt_src_G.Navigator.compose(gantt_src_G.Chart, gantt_src_G.Axis, gantt_src_G.Series);\ngantt_src_G.RangeSelector.compose(gantt_src_G.Axis, gantt_src_G.Chart);\ngantt_src_G.Scrollbar.compose(gantt_src_G.Axis);\n/* harmony default export */ var gantt_src = ((/* unused pure expression or super */ null && (Highcharts)));\n\n;// ./code/es5/es-modules/masters/highcharts-gantt.src.js\n/**\n * @license Highcharts Gantt JS v12.1.2 (2025-01-09)\n * @module highcharts/highcharts-gantt\n *\n * (c) 2017-2024 Lars Cabrera, Torstein Honsi, Jon Arild Nygard & Oystein Moseng\n *\n * License: www.highcharts.com/license\n */\n\n\n\nhighcharts_src.product = 'Highcharts Gantt';\n/* harmony default export */ var highcharts_gantt_src = (highcharts_src);\n\n__webpack_exports__ = __webpack_exports__[\"default\"];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});"],"names":["root","factory","exports","module","define","amd","error","Globals","_a","_b","hash","id","RendererRegistry","defaultRenderer","extendStatics","AxisDefaults","Tooltip","Pointer","Legend","CenteredUtilities","GeometryUtilities","GanttChart","GridAxisSide","serialMode","RendererUtilities","hasInternalReferenceBug","Foundation","DateTimeAxis","LogarithmicAxis","PlotLineOrBandAxis","LegendSymbol","SeriesRegistry","StackingAxis","DataLabel","ColumnDataLabel","PieDataLabel_ColumnDataLabel","Responsive","NavigatorConstructor","ScrollbarAxis","RangeSelectorConstructor","OrdinalAxis","ConnectionComposition","BrokenAxis","TickConstructor","__webpack_require__","d","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","__webpack_exports__","highcharts_gantt_src","SVG_NS","product","version","win","window","doc","document","svg","createElementNS","createSVGRect","pageLang","documentElement","closest","lang","userAgent","navigator","isChrome","chrome","isFirefox","indexOf","isMS","test","opera","isSafari","isTouchDevice","isWebKit","deg2rad","Math","PI","marginNames","noop","supportsPassiveEvents","supportsPassive","opts","addEventListener","removeEventListener","charts","composed","dateFormats","seriesTypes","symbolSizes","chartCount","Core_Globals","__spreadArray","to","from","pack","arguments","length","ar","i","l","Array","slice","concat","code","stop","chart","params","severity","isCode","isNumber","message","toString","additionalMessages_1","objectEach","value","encodeURI","fireEvent","Error","console","messages","warn","push","pInt","s","mag","parseInt","isString","isArray","str","isObject","strict","isDOMElement","nodeType","isClass","c","constructor","name","n","isNaN","Infinity","defined","attr","elem","keyOrAttribs","ret","isGetter","attrSingle","setAttribute","getAttribute","removeAttribute","splat","extend","a","b","pick","args","arg","css","el","styles","style","getMagnitude","num","pow","floor","log","LN10","correctFloat","prec","parseFloat","toPrecision","easeInOutSine","pos","cos","find","arr","callback","fn","ctx","removeEvent","type","removeOneEvent","removeAllEvents","eventCollection","types","len","nodeName","_val","owner","events","hcEvents","typeEvents","filter","eventArguments","defaultFunction","createEvent","dispatchEvent","e","initEvent","target","preventDefault","defaultPrevented","object","multilevel","unshift","apply","getPrototypeOf","sort","order","forEach","uniqueKey","random","substring","jQuery","highcharts","shift","Utilities","addEvent","options","Point","series","runTrackerClick","passive","capture","eventObject","arrayMax","data","max","arrayMin","min","clamp","clearTimeout","createElement","tag","attribs","parent","nopad","padding","border","margin","appendChild","crisp","lineWidth","inverted","mod","inverter","round","destroyObjectProperties","except","destructablesOnly","val","destroy","diffObjects","newer","older","keepOlder","collectionsWithUpdate","diff","depth","keeper","newerVal","keys","discardElement","element","parentElement","removeChild","erase","item","splice","extendClass","members","getAlignFactor","align","center","right","middle","bottom","getClosestDistance","arrays","onError","loopLength","distance","allowNegative","xData","getNestedProperty","path","pathElements","split","pathElement","thisProp","child","replace","getStyle","toInt","offsetWidth","scrollWidth","boundingClientRectWidth","getBoundingClientRect","width","offsetHeight","scrollHeight","getComputedStyle","getPropertyValue","insertItem","collection","indexOption","index","isInternal","_i","isFunction","merge","extendOrSource","sources","doCopy","copy","original","normalizeTickInterval","interval","multiples","magnitude","allowDecimals","hasTickAmount","retInterval","normalized","offset","docElem","box","parentNode","top","left","height","pageYOffset","scrollTop","clientTop","pageXOffset","scrollLeft","clientLeft","pad","number","padder","String","join","pushUnique","array","relativeLength","base","replaceNested","text","previous","replacement","replacements","replacements_1","stableSort","sortFunction","sortValue","safeI","syncTimeout","delay","context","setTimeout","timeUnits","millisecond","second","minute","hour","day","week","month","year","ucfirst","toUpperCase","useSerialIds","mode","wrap","method","func","proceed","outerArgs","scope","Time_win","Time_defined","Core_Utilities","Time_error","Time_extend","Time_isNumber","Time_isObject","Time_isString","Time_merge","Time_objectEach","Time_pad","Time_splat","Time_timeUnits","Time_ucfirst","hasOldSafariBug","Intl","DateTimeFormat","formatRange","spanishWeekdayIndex","weekday","Time","timezone","variableTimezone","Date","update","_this","dTLCache","timezoneOffset","useUTC","isMonth","isShort","timeZone","map","position","dateFormat","toParts","timestamp","dateTimeFormat","dayOfMonth","Number","locale","cacheKey","JSON","stringify","str2dtf","dTL","format","dtf","mapping","L","fractionalSecondDigits","S","M","H","k","E","A","B","m","y","Y","makeTime","date","hours","minutes","seconds","milliseconds","UTC","getTimezoneOffset","newOffset","parse","hasTimezone","isYYYYMMDD","ts","timeZoneName","upperCaseFirst","defaultOptions","invalidDate","localeAwareRegex","match","exec","time_1","fullYear","langWeekdays","weekdays","shortWeekdays","months","shortMonths","substr","w","I","p","P","tzHours","_c","prefix","_d","suffix","resolveDTLFormat","f","main","getTimeTicks","normalizedInterval","startOfWeek","variableDayLength","time","tickPositions","higherRanks","count","unitRange","weekdayNo","t","info","totalRange","getDateFormat","range","dateTimeLabelFormats","dateStr","blank","strpos","lastN","Defaults_fireEvent","Defaults_merge","colors","symbols","loading","numericSymbols","resetZoom","resetZoomTitle","global","buttonTheme","fill","r","stroke","color","cursor","fontSize","fontWeight","states","hover","select","disabled","alignThresholds","panning","enabled","styledMode","borderRadius","colorCount","allowMutatingData","ignoreHiddenSeries","spacing","resetZoomButton","theme","reflow","zooming","singleTouch","resetButton","zIndex","x","borderColor","backgroundColor","plotBorderColor","title","minScale","subtitle","caption","verticalAlign","plotOptions","legend","alignColumns","className","layout","itemMarginBottom","itemMarginTop","labelFormatter","navigation","activeColor","inactiveColor","itemStyle","textDecoration","textOverflow","itemHoverStyle","itemHiddenStyle","shadow","itemCheckboxStyle","squareSymbol","symbolPadding","labelStyle","opacity","textAlign","tooltip","animation","duration","easing","sqrt","footerFormat","headerShape","hideDelay","shape","shared","snap","headerFormat","pointFormat","borderWidth","stickOnContact","useHTML","credits","href","defaultTime","Color_isNumber","Color_merge","Color_pInt","Color_defined","Color","input","rgba","NaN","result","parser","GlobalColor","stops","names","toLowerCase","parsers","regex","None","ret_1","brighten","alpha","setOpacity","tweenTo","fromRgba","toRgba","hasAlpha","channel","white","black","Color_Color","Fx_win","Fx_isNumber","Fx_objectEach","Fx","dSetter","paths","start","end","now","startSeg","endSeg","tweenSeg","j","startItem","endItem","toD","step","unit","run","self","timer","gotoEnd","stopped","requestAnimationFrame","timers","startTime","curAnim","complete","done","initPath","fromD","fullLength","reverse","startX","endX","isArea","positionFactor","disableAnimation","hasStackedCliffs","prepend","other","moveSegment","otherSegment","z","pop","append","segmentToAdd","lowerSegmentToAdd","fillSetter","strokeSetter","AnimationUtilities_defined","AnimationUtilities_getStyle","AnimationUtilities_isArray","AnimationUtilities_isNumber","AnimationUtilities_isObject","AnimationUtilities_merge","AnimationUtilities_objectEach","AnimationUtilities_pick","animObject","defer","Animation_Fx","opt","fx","pathArray","labelAnimation","seriesAnim","renderer","forExport","globalAnimation","AST_win","AST_attr","AST_createElement","AST_css","AST_error","AST_isFunction","AST_isString","AST_objectEach","AST_splat","trustedTypes","trustedTypesPolicy","createPolicy","createHTML","emptyHTML","AST","source","nodes","parseMarkup","filterUserAttributes","attributes","valid","allowedAttributes","allowedReferences","some","ref","parseStyle","reduce","line","pair","trim","g","setElementHTML","html","innerHTML","ast","addToDOM","recurse","subtree","subParent","node","tagName","textNode","textContent","createTextNode","bypassHTMLFiltering","allowedTags","NS","namespaceURI","attributes_1","children","markup","DOMParser","parseFromString","body","appendChildNodes","addTo","astNode","parsedAttributes","attributes_2","attrib","childNodes","children_1","childNode","Templating_pageLang","Templating_extend","Templating_getNestedProperty","Templating_isArray","Templating_isNumber","Templating_isObject","Templating_isString","Templating_pick","helpers","add","divide","eq","each","ge","gt","condition","le","lt","multiply","ne","subtract","unless","numberFormatCache","isQuotedString","currentMatch","hasSub","subRegex","matches","floatRegex","decRegex","Templating_defaultOptions","numberFormatter","numberFormat","resolveProperty","mainMatch","subMatch","isBlock","expression","charAt","startInner","startingElseSection","elseBody","parts","startChar","char","valueAndFormat","segment","decimals","decimalPoint","thousandsSep","lastIndex","fractionDigits","mantissa","exp","origDec","firstDecimals","toExponential","toFixed","minimumFractionDigits","maximumFractionDigits","useGrouping","hasSeparators","nf","NumberFormat","Core_Templating","Templating_defaultTime","rendererTypes","getRendererType","rendererType","registerRendererType","rendererClass","setAsDefault","Renderer","Renderer_RendererRegistry","RendererUtilities_clamp","RendererUtilities_pick","RendererUtilities_pushUnique","RendererUtilities_stableSort","distribute","boxes","maxDistance","equalRank","origBoxes","reducedLen","sortByTarget","restBoxes","boxesLength","forDeletion","overlapping","total","size","rank","targets","posInCompositeBox","abs","Renderer_RendererUtilities","SVGElement_doc","SVGElement_SVG_NS","SVGElement_win","SVGElement_addEvent","SVGElement_attr","SVGElement_createElement","SVGElement_crisp","SVGElement_css","SVGElement_defined","SVGElement_erase","SVGElement_extend","SVGElement_fireEvent","SVGElement_getAlignFactor","SVGElement_isArray","SVGElement_isFunction","SVGElement_isNumber","SVGElement_isObject","SVGElement_isString","SVGElement_merge","SVGElement_objectEach","SVGElement_pick","SVGElement_pInt","SVGElement_pushUnique","SVGElement_replaceNested","SVGElement_syncTimeout","SVGElement_uniqueKey","SVGElement","onEvents","_defaultGetter","_defaultSetter","inserted","parentGroup","textStr","buildText","added","handleZ","zIndexSetter","onAdd","addClass","currentClassName","newClassName","afterSetters","doTransform","updateTransform","alignOptions","alignByTranslate","alignTo","redraw","alignedObjects","initialAlignment","Boolean","alignToKey","alignToBox","placed","alignAttr","alignSetter","convert","alignValue","animate","animOptions","SVGElement_animObject","deferTime","hidden","SVGElement_animate","applyTextOutline","textOutline","getContrast","strokeWidth","fakeTS","digit","removeTextOutline","outline_1","parentElem","querySelector","clone","cloneNode","totalHeight_1","querySelectorAll","br","dy","insertBefore","firstChild","continueAnimation","hasSetSymbolSize","skipAttr","symbolCustomAttribs","SVGElement_stop","symbolName","symbolAttr","rotation","setter","clip","clipElem","clipPath","defs","url","rect","x1","y1","x2","y2","x2Crisp","y2Crisp","complexColor","colorOptions","colorObject","gradName","gradAttr","radAttr","gradients","stopColor","stopOpacity","radialReference","radialGradient","linearGradient","gradientUnits","getRadialAttr","gradientObject_1","stopObject","gradient","textWidth","oldStyles","newStyles","hasNew","stylesToApply_1","dashstyleSetter","v","grandParent","wrapper","ownerSVGElement","parentToClean","onclick","onmouseout","onmouseover","onmousemove","point","clipPath_1","connector","safeRemoveChild","div","pathToSegments","acc","seg","hrefSetter","setAttributeNS","getBBox","reload","rot","bBox","toggleTextShadowShim","cache","cacheKeys","isSVG","rootFontSize","lineClamp","polygon","display","outline","htmlGetBBox","getRotatedBox","boxX","boxY","translateY","rotationOriginX","rotationOriginY","alignFactor","baseline","rad","rad90","cosRad","sinRad","sin","wCosRad","wSinRad","cosRad90","sinRad90","rotOrigin","_e","xOriginCosRad","xOriginSinRad","_f","yOriginCosRad","aX","pX","bX","cX","dX","aY","pY","bY","cY","dY","boxWidth","boxHeight","hasClass","hide","visibility","on","eventType","handler","opacitySetter","reAlign","removeClass","RegExp","setRadialReference","coordinates","existingGradient","shadowOptions","offsetX","offsetY","shadowDefinition","show","inherit","tempElement","textSetter","textPxLength","titleSetter","titleNode","getElementsByTagName","toFront","translate","translateX","matrix","scaleX","scaleY","transform","textPath","visibilitySetter","xGetter","otherElement","otherZIndex","undefinedOtherZIndex","parentWrapper","svgParent","yGetter","matrixSetter","rotationOriginXSetter","rotationOriginYSetter","rotationSetter","scaleXSetter","scaleYSetter","translateXSetter","translateYSetter","verticalAlignSetter","__extends","setPrototypeOf","__proto__","__","create","SVGLabel_defined","SVGLabel_extend","SVGLabel_getAlignFactor","SVGLabel_isNumber","SVGLabel_merge","SVGLabel_pick","SVGLabel_removeEvent","SVGLabel","_super","anchorX","anchorY","hasBGImage","paddingLeftSetter","paddingSetter","paddingRightSetter","doUpdate","symbolKey","emptyBBox","baselineOffset","needsBox","deferredAttr","xSetting","anchorXSetter","boxAttr","getCrispAdjust","anchorYSetter","ySetting","textStyles_1","textProps","updateTextPadding","updateBoxSize","SVG_SVGElement","paddingLeft","heightSetter","heightSetting","rSetter","crispAdjust","widthSetting","getPaddedWidth","metrics","fontMetrics","firstLineMetrics","h","symbol","textY","textX","widthSetter","paddingRight","xSetter","ySetter","Symbols_defined","Symbols_isNumber","Symbols_pick","arc","cx","cy","rx","ry","proximity","fullCircle","innerRadius","innerR","open_1","open","cosStart","sinStart","cosEnd","sinEnd","longArc","arcSegment","clockwise","roundedRect","SVG_Symbols","callout","safeDistance","isTopCorner","cornerY","sliceStart","circle","diamond","square","triangle","TextBuilder_doc","TextBuilder_SVG_NS","TextBuilder_win","TextBuilder_attr","TextBuilder_extend","TextBuilder_fireEvent","TextBuilder_isString","TextBuilder_objectEach","TextBuilder_pick","stringWithEllipsis","currentIndex","TextBuilder","svgElement","textStyles","textLineHeight","lineHeight","ellipsis","noWrap","whiteSpace","buildSVG","hasMarkup","tempParent","textCache","actualWidth","regexMatchBreaks","modifyTree","modifyDOM","unescapeEntities","nextSibling","previousSibling","getLineHeight","modifyTextNode","words","hasWhiteSpace","ellipsisWidth","lineNo","startAt","lines","precedingSiblings","truncate","modifyChildren","Node","TEXT_NODE","baseVal","modifyChild","fontStyle","nextNode","getString","lengths","minIndex","maxIndex","getSubStringLength","charEnd","concatenatedEnd","ceil","inputStr","escapes","SVGRenderer_spreadArray","SVGRenderer_charts","SVGRenderer_deg2rad","SVGRenderer_doc","SVGRenderer_isFirefox","SVGRenderer_SVG_NS","SVGRenderer_win","SVGRenderer_addEvent","SVGRenderer_attr","SVGRenderer_createElement","SVGRenderer_crisp","SVGRenderer_css","SVGRenderer_defined","SVGRenderer_destroyObjectProperties","SVGRenderer_extend","SVGRenderer_isArray","SVGRenderer_isNumber","SVGRenderer_isObject","SVGRenderer_isString","SVGRenderer_merge","SVGRenderer_pick","SVGRenderer_pInt","SVGRenderer_replaceNested","SVGRenderer_uniqueKey","SVGRenderer","container","allowHTML","subPixelFix","boxWrapper","getReferenceURL","desc","imgCount","setSize","unSubPixelFix","def","hitElement","elementFromPoint","location","fontFamily","setStyle","isHidden","rendererDefs","Element","chartIndex","filterUnits","getShadowFilterContent","dx","stdDeviation","b8","button","hoverState","selectState","disabledState","label","curState","SVGRenderer_defaultOptions","normalStyle","stateAttribs","HTML_AST","stateStyles","stateName","setState","state","css_1","pointerEvents","stopPropagation","crispLine","points","_key","rGetter","viewBox","alignElements","image","onload","preserveAspectRatio","elemWrapper","onDummyLoad","dummy","Image","src","imageSrc","centerImage","ren","imageRegex","isImage","sym","symbolFn","img_1","imgwidth","imgheight","imgSize","scale","backgroundSize","isImg","symbolUrl","hasLoaded","clipRect","tspans","parentVal","tspan","rotCorr","alterY","commandLength","C","Q","T","V","draw","HTMLElement_extends","TypeError","__assign","assign","HTMLElement_attr","HTMLElement_css","HTMLElement_createElement","HTMLElement_defined","HTMLElement_extend","HTMLElement_getAlignFactor","HTMLElement_isNumber","HTMLElement_pInt","HTMLElement_pushUnique","commonSetter","decorateSVGGroup","cssProto_1","div_1","classSetter","HTMLElement","compose","SVGRendererClass","getSpanCorrection","alignCorrection","xCorr","yCorr","isSettingWidth","overflow","WebkitLineClamp","WebkitBoxOrient","offsetLeft","offsetTop","alignOnAdd","_g","_h","marginLeft","marginTop","currentTextTransform","parentPadding","oldTextWidth","textWidthNum","innerText","cTT","oldRotation","oldAlign","setSpanRotation","_k","_j","_l","rotOriginX","rotOriginY","styles_1","transformOrigin","originX","originY","parents","svgGroup","proto","xAxis","alignTicks","panningEnabled","zoomEnabled","endOnTick","gridLineDashStyle","gridZIndex","labels","autoRotationLimit","indentation","reserveSpace","staggerLines","maxPadding","minorGridLineDashStyle","minorTickLength","minorTickPosition","minorTicksPerMajor","minPadding","reversed","reversedStacks","showEmpty","showFirstLabel","showLastLabel","startOnTick","tickLength","tickPixelInterval","tickmarkPlacement","tickPosition","visible","minorGridLineColor","minorGridLineWidth","minorTickColor","lineColor","gridLineColor","gridLineWidth","tickColor","yAxis","stackLabels","allowOverlap","crop","formatter","axis","Axis_AxisDefaults","Foundation_addEvent","Foundation_isFunction","Foundation_objectEach","Foundation_removeEvent","registerEventOptions","component","eventOptions","event","Core_Foundation","Tick_deg2rad","Tick_clamp","Tick_correctFloat","Tick_defined","Tick_destroyObjectProperties","Tick_extend","Tick_fireEvent","Tick_getAlignFactor","Tick_isNumber","Tick_merge","Tick_objectEach","Tick_pick","Tick","noLabel","parameters","isNew","isNewLabel","tickmarkOffset","addLabel","dateTimeLabelFormat","tick","categories","logarithmic","labelOptions","isFirst","isLast","animateLabels","tickInterval","tickPositionInfo","category","lin2log","dateTime","grid","unitName","getXDateFormat","defaultLabelFormatter","list","shortenLabel","getSlotWidth","_addedPlotLB","moveLabel","movedLabel","createLabel","xy","labelGroup","getPosition","horiz","tickPos","old","cHeight","oldChartHeight","chartHeight","transB","opposite","oldChartWidth","chartWidth","getLabelPosition","yOffset","transA","isLinked","linkedParent","tickRotCorr","labelOffsetCorrection","reserveSpaceDefault","labelOffset","labelAlign","side","getLabelSize","getMarkPath","tickWidth","handleOverflow","leftPos","rightPos","pxPos","leftBound","labelLeft","rightBound","labelRight","isRadial","factor","labelWidth","slotWidth","modifiedSlotWidth","goRight","xCorrection","autoRotation","labelPos","moved","ticks","currentTick","render","axisStart","axisEnd","polar","labelOpacity","newOpacity","isActive","renderGridLine","renderMark","renderLabel","gridLinePath","gridLine","dashStyle","dashstyle","gridGroup","getPlotLinePath","force","acrossPanes","tickSize","isXAxis","mark","isNewMark","axisGroup","replaceMovedLabel","isDirty","Axis_deg2rad","Axis_arrayMax","Axis_arrayMin","Axis_clamp","Axis_correctFloat","Axis_defined","Axis_destroyObjectProperties","Axis_erase","Axis_error","Axis_extend","Axis_fireEvent","Axis_getClosestDistance","Axis_insertItem","Axis_isArray","Axis_isNumber","Axis_isString","Axis_merge","Axis_normalizeTickInterval","Axis_objectEach","Axis_pick","Axis_relativeLength","Axis_removeEvent","Axis_splat","Axis_syncTimeout","getNormalizedTickInterval","tickAmount","Axis","userOptions","coll","init","isZAxis","setOptions","labelsOptions","uniqueNames","minPixelPadding","hasNames","plotLinesAndBandsGroups","positiveValuesOnly","linkedTo","labelEdge","minorTicks","plotLinesAndBands","alternateBands","minRange","userMinRange","maxZoom","crosshair","crosshairs","axes","orderItems","labelRotation","sideSpecific","Axis_defaultOptions","multi","numSymMagnitude","numericSymbolMagnitude","numericSymbolDetector","getSeriesExtremes","xExtremes","hasVisibleSeries","dataMin","dataMax","threshold","softThreshold","seriesOptions","seriesDataMin","seriesDataMax","getColumn","getXExtremes","dataExtremes","applyExtremes","backwards","cvsCoord","handleLog","pointPlacement","localMin","doPostTranslate","isOrdinal","brokenAxis","hasBreaks","lin2val","sign","cvsOffset","localA","returnValue","sector","val2lin","toPixels","paneCoordinates","toValue","pixel","skip","axisLeft","axisTop","cWidth","translatedValue","between","evt","scrollablePixelsY","scrollablePixelsX","getLinearTickPositions","lastPos","precision","roundedMin","roundedMax","single","getMinorTickInterval","minorTickInterval","getMinorTickPositions","pointRangePadding","unitLength","minorTickPositions","logarithmic_1","paddedTicks","_pos","getLogTickPositions","normalizeTimeTickInterval","trimTicks","adjustForMinRange","zoomOffset","spaceAvailable","minArgs","maxArgs","ceiling","closestDataRange","xIncrement","log2lin","getClosest","closestSingleDistance","closestDistance","singleXs_1","seriesClosest","closestPointRange","sorted","nameToX","explicitCategories","nameX","requireSorting","autoIncrement","updateNames","isDirtyData","dataTable","rowCount","processData","generatePoints","setColumn","setAxisTranslation","ordinalCorrection","hasCategories","pointRange","axisPointRange","minPointOffset","seriesPointRange","isPointPlacementAxis","is","ordinal","slope","translationSlope","staticScale","minFromRange","setTickInterval","secondPass","linkedParentExtremes","thresholdMin","thresholdMax","hardMin","hardMax","softMax","softMin","tickPixelIntervalOption","tickIntervalOption","getTickAmount","userMin","userMax","getExtremes","stacking","usePercentage","numThreshold","hasExtremesChanged_1","forceCrop","forceCropping","hasExtremesChanged","minTickInterval","unsquish","setTickPositions","tickPositionerResult","tickPositionsOption","tickPositioner","minorTickIntervalOption","allowEndOnTick","isPanning","positions","units","startingTickInterval","adjustedTickInterval","adjustTickAmount","alignToOthers","hasOther","alignedAxes","chartOptions","thresholdAlignments","thresholdAlignment","getKey_1","pane","thisKey_1","otherAxis","threshAlign","getThresholdAlignment","thresholdAlignment_1","sum","callerAxis","finalTickAmt","thresholdTickIndex","currentTickAmount","hasData","adjustExtremes","setScale","isXAxisDirty","setAxisSize","isDirtyAxisLength","forceRedraw","buildStacks","cleanStacks","allExtremes","setExtremes","serie","kdTree","eventArgs","offsets","plotWidth","plotHeight","plotTop","plotLeft","getThreshold","realMin","realMax","autoLabelAlign","angle","labelMetrics","slotSize","rotationOption","getStep","spaceNeeded","newTickInterval","bestScore","MAX_VALUE","score","autoRotation_1","slotCount","cssWidth","renderUnsquish","commonWidth","labelStyleOptions","innerWidth","lineClampOption","maxLabelLength","widthOption","addTitle","axisTitleOptions","axisTitle","low","high","generateTick","createGroups","axisParent","createGroup","getOffset","showAxis","titleOffsetOption","labelOffsetPadded","lineHeightCorrection","invertedSide","hasCrossing","crossing","axisOffset","clipOffset","directionFactor","titleOffset","titleMargin","renderLine","axisTitleMargin","getMaxLabelDimensions","maxLabelDimensions","axisLine","getLinePath","lineLeft","lineTop","getTitlePosition","axisLength","xOption","yOption","textHeightOvershoot","alongAxis","offAxis","titlePosition","renderMinorTick","slideIn","renderTick","isColumn","stackLabelOptions","alternateGridColor","Axis_animObject","overlap","px","slideInTicks_1","hasRendered","PlotLineOrBand","plotLines","plotBands","plotLineOptions","addPlotBandOrLine","forDestruction","isPlaced","renderStackTotals","plotLine","getKeepProps","keepProps","keepEvents","plotGroup","drawCrosshair","categorized","crossOptions","graphic","cross","crosshairPos","plotX","plotY","chartX","chartY","stackY","isCrosshair","hideCrosshair","isDirtyBox","remove","axisSeries","setTitle","titleOptions","setCategories","DateTimeAxis_addEvent","DateTimeAxis_getMagnitude","DateTimeAxis_normalizeTickInterval","DateTimeAxis_timeUnits","onAfterSetType","Additions","AxisClass","includes","axisProto","unitsOption","Axis_DateTimeAxis","LogarithmicAxis_addEvent","LogarithmicAxis_normalizeTickInterval","LogarithmicAxis_pick","onAfterInit","minor","minorAutoInterval","intermediate","break2","totalPixelLength","Axis_LogarithmicAxis","PlotLineOrBandAxis_erase","PlotLineOrBandAxis_extend","PlotLineOrBandAxis_isNumber","PlotLineOrBandClass","addPlotBand","updatedOptions","addPlotLine","getPlotBandPath","isFlat","toPath","outside","plus","pathStart","pathEnd","toPathStart","toPathEnd","removePlotBand","removePlotBandOrLine","i_1","removePlotLine","PlotLineOrBandType","PlotLineOrBand_PlotLineOrBandAxis","PlotLineOrBand_assign","PlotLineOrBand_addEvent","PlotLineOrBand_arrayMax","PlotLineOrBand_arrayMin","PlotLineOrBand_defined","PlotLineOrBand_destroyObjectProperties","PlotLineOrBand_erase","PlotLineOrBand_fireEvent","PlotLineOrBand_merge","PlotLineOrBand_objectEach","PlotLineOrBand_pick","ChartClass","labelCollectors","group","groupAttribs","optionsLabel","svgElem","isBand","isLine","groupName","eventsAdded","inside","getLabelText","xBounds","yBounds","bBoxWidth","Tooltip_format","Tooltip_composed","Tooltip_doc","Tooltip_addEvent","Tooltip_clamp","Tooltip_css","Tooltip_discardElement","Tooltip_extend","Tooltip_fireEvent","Tooltip_isArray","Tooltip_isNumber","Tooltip_isObject","Tooltip_isString","Tooltip_merge","Tooltip_pick","Tooltip_pushUnique","Tooltip_splat","Tooltip_syncTimeout","pointer","allowShared","isSticky","bodyFormatter","tooltipOptions","formatPrefix","tooltipFormatter","cleanSplit","tt","defaultFormatter","hoverPoints","headerFooterFormatter","hideTimer","getAnchor","mouseEvent","followPointer","normalize","tooltipPos","chartX_1","chartY_1","getClassName","isSplit","isHeader","colorIndex","getLabel","doSplit","wasSplit","chartStyle","renderTo","shouldStickOnContact","label_1","getPlayingField","clientWidth","clientHeight","swapped","outerHeight","outerWidth","chartPosition","getChartPosition","buildDimensionArray","dim","isX","first","flipped","negative","hoverSeries","preferFarSide","ttBelow","firstDimension","outerSize","innerSize","scaledInnerSize","scaledDist","scaleDiff","roomLeft","roomRight","alignedLeft","alignedRight","secondDimension","swap","pointerEvent","inClass","move","Tooltip_animObject","skipAnchor","drawTracker","refresh","pointOrPoints","formatString","wasShared","noSharedTooltip","anchor","applyInactiveState","currentSeries","renderSplit","checkX_1","checkY_1","isDirectTouch","shouldShowTooltip","spacingBox","updatePosition","positioner","scrollablePlotArea","scrollingContainer","bounds","tooltipLabel","headerTop","chartLeft","chartTop","distributionBoxTop","headerHeight","adjustedPlotHeight","defaultPositioner","updatePartialTooltip","partialTooltip","ignoreX","boxPosition","boxStart","boxExtremes","tracker","hoverPoint","anchorPos","labelBBox","styledModeFormat","isFooter","xDateFormat","format_1","tooltipDateKeys","PointerClass","Core_Tooltip","Point_format","Point_addEvent","Point_crisp","Point_erase","Point_extend","Point_fireEvent","Point_getNestedProperty","Point_isArray","Point_isFunction","Point_isNumber","Point_isObject","Point_merge","Point_pick","Point_syncTimeout","Point_removeEvent","Point_uniqueKey","applyOptions","resolveColor","pointCount","animateBeforeDestroy","animateParams","startXPos","graphicalProps","getGraphicalProps","singular","isDataLabel","startYPos","plural","pointValKey","optionsToObject","dataLabels","selected","relativeXValue","isNull","isValid","destroyed","point_1","dataSorting","Point_animObject","destroyPoint","graphics","dataLabel","destroyElements","legendItem","destroyItem","onMouseOut","kinds","props","firePointEvent","manageEvent","allowPointSelect","ctrlKey","metaKey","shiftKey","zone","getZone","zones","zoneAxis","nonZonedColor","hasNewShapeType","oldShapeType","shapeType","firstItemType","pointArrayMap","valueCount","setNestedProperty","hasDataLabels","marker","_hasPointMarkers","chartCoordinates","posX","posY","optionsChart","colorByPoint","colorCounter","nestedKeys","isLastKey","shouldDraw","valueDecimals","valuePrefix","valueSuffix","runEvent","hasMockGraphic","shouldDestroyGraphic","row","dataColumnKeys","setRow","fixedBox","hasCartesianSeries","legendType","isDirtyLegend","removePoint","accumulate","selectedStaging","getSelectedPoints","loopPoint","loopSeries","inactiveOtherPoints","onMouseOver","getChartCoordinatesFromPoint","runPointActions","userEvent","importedUserEvent","markerAttribs","pointAttribs","pointAttribsAnimation","newSymbol","previousState","stateOptions","markerOptions","Point_defaultOptions","normalDisabled","markerStateOptions","stateDisabled","pointMarker","hasMarkers","halo","stateMarkerGraphic","opacity_1","currentSymbol","markerGroup","isInside","haloOptions","markerGraphic","markerVisibility","isCluster","haloPath","Pointer_assign","Pointer_color","Pointer_charts","Pointer_composed","Pointer_isTouchDevice","Pointer_addEvent","Pointer_attr","Pointer_css","Pointer_extend","Pointer_find","Pointer_fireEvent","Pointer_isNumber","Pointer_isObject","Pointer_objectEach","Pointer_offset","Pointer_pick","Pointer_pushUnique","Pointer_splat","hasDragged","pointerCaptureEventsToUnbind","eventsToUnbind","runChartClick","click","pinchDown","setDOMEvents","activeSeries","linkedSeries","navigatorSeries","inactiveSeries","setAllPointsToState","unbind","unbindDocumentMouseUp","unbindDocumentTouchEnd","clearInterval","tooltipTimeout","getSelectionMarkerAttrs","attrs","zoomHor","zoomVert","mouseDownX","mouseDownY","drag","clickedInside","panKey","selectionMarkerFill","panKeyPressed","selectionMarker","touch","isInsidePlot","visiblePlotOnly","mapView","hasZoom","pan","dragStart","mouseIsDown","cancelClick","getSelectionBox","drop","boosted","zoomX","zoomY","selection","originalEvent","_cursor","findNearestKDPoint","p1","isCloserX","isCloser","isAbove","compareX","findNearestPointBy","searchPoint","distX","p2","dist","shapeArgs","clientX","isNode","getCoordinates","getHoverData","existingHoverPoint","existingHoverSeries","searchSeries","directTouch","enableMouseTracking","notSticky","stickyTracking","useExisting","boost","getPoint","getPointFromEvent","onTrackerMouseOut","relatedTarget","elemClassName","touches","ePos","changedTouches","pageX","pageY","onContainerClick","pEvt","onContainerMouseDown","isPrimaryButton","buttons","onContainerMouseMove","zoomOption","onContainerMouseLeave","hoverChartIndex","reset","onContainerMouseEnter","setHoverChartIndex","touchSelect","openMenu","onDocumentTouchEnd","onDocumentMouseUp","onContainerTouchMove","onContainerTouchStart","onDocumentMouseMove","ownerDocument","pinch","lastTouches","touchesLength","fireClickEvent","followTouchMove","initiated","cancelable","res","boxFromTouches","finger0","finger1","trigger","allowMove","tooltipPoints","isCartesian","unDocMouseMove","hoverData","useSharedTooltip","ownerDoc","onmousedown","bind","setPointerCapture","shouldHave","hasPointerCapture","pointerId","releasePointerCapture","hoverChart","relatedTargetObj","hasMoved","zoomType","pinchType","Core_Pointer","DataTableCore_fireEvent","DataTableCore_isArray","DataTableCore_objectEach","DataTableCore_uniqueKey","DataTableCore","autoId","columns","modified","versionTag","column","columnName","applyRowCount","asReference","getColumns","columnNames","getRow","rowIndex","eventDetail","setColumns","silent","insert","indexRowCount","cellValue","addColumns","LegendSymbol_spreadArray","LegendSymbol_extend","LegendSymbol_merge","LegendSymbol_pick","lineMarker","hasArea","legendSymbol","symbolWidth","symbolHeight","generalRadius","legendItemGroup","verticalCenter","lineSizer","linecap","area","radius","isMarker","areaMarker","rectangle","symbolRadius","Legend_LegendSymbol","SeriesDefaults","showCheckbox","enabledThreshold","normal","radiusPlus","lineWidthPlus","fillColor","cropThreshold","inactive","turboThreshold","SeriesRegistry_extends","SeriesRegistry_extend","SeriesRegistry_extendClass","SeriesRegistry_merge","registerSeriesType","seriesType","SeriesClass","defaultPlotOptions","SeriesRegistry_defaultOptions","seriesProto","pointClass","pointProto","PointClass","Series_SeriesRegistry","Series_assign","Series_spreadArray","Series_registerEventOptions","Series_svg","Series_win","Series_arrayMax","Series_arrayMin","Series_clamp","Series_correctFloat","Series_crisp","Series_defined","Series_destroyObjectProperties","Series_diffObjects","Series_erase","Series_error","Series_extend","Series_find","Series_fireEvent","Series_getClosestDistance","Series_getNestedProperty","Series_insertItem","Series_isArray","Series_isNumber","Series_isString","Series_merge","Series_objectEach","Series_pick","Series_removeEvent","Series_syncTimeout","Series","lastSeries","chartSeries","bindAxes","getColor","getSymbol","setDataSortingOptions","setData","axisOptions","axisTypes","optionalAxis","hasMarkerChanged","oldOptions","oldMarker","pointInterval","pointIntervalUnit","pointStart","enabledDataSorting","allowDG","itemOptions","seriesUserOptions","typeOptions","userPlotOptions","userPlotOptionsSeries","defaultPlotOptionsType","Series_defaultOptions","userPlotOptionsType","negativeColor","negativeFillColor","getName","getCyclic","defaults","setting","indexName","counterName","getPointsCollection","hasGroupedData","seriesMarkerOption","findPointIndex","optionsObject","fromIndex","matchingPoint","matchedById","pointIndex","oldData","matcher","oldPoint","touched","matchByName","cropped","cropStart","updateData","hasUpdatedByKey","pointsToAdd","equalLength","succeeded","pointOptions","hasDerivedData","addPoint","updatePoints","updatedData","copiedData","oldDataLength","table","indexOfX","indexOfY","dataLength","sortData","runTurbo","firstPoint","getFirstValidPoint","lastPoint","isShortArray","valueData","data_1","autoX","colArray_1","pt","data_2","data_3","dataColumnKeys_1","sortKey","getPointOptionsObject","sortedData","aValue","bValue","seriesData","getProcessedData","forceExtremesFromAll","croppedData","getExtremesFromAll","updatingNames","cropData","processedData","basePointRange","pOptions","dataOptions","processedDataLength","groupCropStartIndex","dataGrouping","groupAll","dataGroup","groupMap","yData","customData","stackedYData","yAxisData","keysAffectYAxis","activeYData","shoulder","doAll","xMin","xMax","yAxisData_1","values","increment","lastPlotX","stackIndicator","pointPlacementToXValue","dynamicallyPlaced","stackThreshold","startFromThreshold","closestPointRangePx","limitedRange","xValue","stackItem","stackValues","yValue","lowValue","stacks","negStacks","stackKey","getStackIndicator","stackTotal","percentage","irregularWidths","setOffset","pointXOffset","barW","yBottom","dataModify","modifyValue","isPointInside","getValidPoints","insideOnly","allowNull","asNull","getClipBox","clipBox","plotSizeX","plotSizeY","invertible","getSharedClipKey","sharedClipKey","setClip","sharedClips","Series_animObject","animationClipKey","animationClipRect","markerAnimationClipRect","markerClipBox","finalBox","step_1","afterAnimate","finishedAnimating","drawPoints","verb","pointMarkerOptions","hasPointMarker","colorAxis","seriesMarkerOptions","specialGroup","globallyEnabled","hasImage","pointAttr","seriesStateOptions","pointStateOptions","pointColorOption","pointColor","zoneColor","keepEventsForUpdate","issue134","removeEvents","AXIS","animationTimeout","survive","applyZones","graph","halfWidth","avoidClose","translated","lineClip","axisMax_1","invertPath_1","showLine","points_1","zoneBelow","lastLineClip_1","lastTranslated_1","simpleClip","simplePath","adaptivePath","getPlotBox","horAxis","vertAxis","chartSeriesGroup","seriesGroup","animDuration","drawGraph","drawDataLabels","redrawPoints","wasDirty","searchKDTree","buildKDTree","buildingKdTree","dimensions","kdtree","median","kdAxisArray","kdNow","suppliedPointEvaluator","suppliedBSideCheckEvaluator","kdX","kdY","kdComparer","kdDimensions","useRadius","isBubble","pointEvaluator","comparisonProp","bSideCheckEvaluator","doSearch","search","tree","p1kdX","p2kdX","p1kdY","p2kdY","flip","tdist","sideA","sideB","trackByArea","trackerPath","areaPath","graphPath","TRACKER_FILL","dataLabelsGroup","withEvent","isInTheMiddle","Series_setAnimation","linkSeries","initialType","initialSeriesProto","preserve","newType","keepPoints","joinBy","mapData","optionsToCheck","option","hasOptionChanged","parallelArrays","groups","casting","propFromSeries","ownEvents","missingModuleFor","showInLegend","setSortedData","setName","optionName","oldOption","plotOptionsOption","mouseOver","mouseOut","stateAnimation","graphElement","labelBySeries","setVisible","vis","oldVisibility","showOrHide","colorizeItem","otherSeries","checkbox","checked","drawLegendSymbol","registerType","Legend_registerEventOptions","Legend_composed","Legend_distribute","Legend_format","Legend_addEvent","Legend_createElement","Legend_css","Legend_defined","Legend_discardElement","Legend_find","Legend_fireEvent","Legend_isNumber","Legend_merge","Legend_pick","Legend_pushUnique","Legend_relativeLength","Legend_stableSort","Legend_syncTimeout","allItems","initialItemY","itemHeight","itemX","itemY","lastItemY","lastLineHeight","legendHeight","legendWidth","maxItemWidth","maxLegendWidth","pages","titleHeight","totalItemWidth","positionCheckboxes","proximate","proximatePositions","positionItems","originalColor","legendSymbolColor","hiddenColor_1","fillOpacity","colorizeHidden","positionItem","isResizing","ltr","rtl","getAllItems","clipHeight","scrollOffset","checkboxOffset","renderTitle","contentGroup","setText","labelFormat","renderItem","horizontal","itemDistance","isSeries","createCheckboxForItem","itemClassName","itemExtraWidth","scrollGroup","setItemEvents","itemWidth","fontMetricsH","labelHeight","layoutItem","getAlignment","floating","adjustMargins","alignment","alignments","alignLeft","useFirstPoint","allowedWidth","legendGroup","legendIndex","lastY","optionsY","alignTop","maxHeight","navOptions","arrowSize","clipToHeight","addTracker","nav","spaceHeight","currentPage","fullHeight","pageIx","up","scroll","pager","down","scrollBy","pageCount","Legend_setAnimation","upTracker","downTracker","Legend_animObject","legendLabel","isPoint","activeClass","legendElements","setOtherItemsState","otherItem","legendElements_1","defaultItemClick","browserEvent","defaultChecked","Legend_Legend","Chart_assign","Chart_spreadArray","Chart_numberFormat","Chart_registerEventOptions","Chart_charts","Chart_doc","Chart_marginNames","Chart_svg","Chart_win","Chart_seriesTypes","Chart_addEvent","Chart_attr","Chart_createElement","Chart_css","Chart_defined","Chart_diffObjects","Chart_discardElement","Chart_erase","Chart_error","Chart_extend","Chart_find","Chart_fireEvent","Chart_getAlignFactor","Chart_getStyle","Chart_isArray","Chart_isNumber","Chart_isObject","Chart_isString","Chart_merge","Chart_objectEach","Chart_pick","Chart_pInt","Chart_relativeLength","Chart_removeEvent","Chart_splat","Chart_syncTimeout","Chart_uniqueKey","Chart","setZoomOptions","zoomKey","zoomBySingleTouch","getElementById","showAxes","symbolCounter","firstRender","initSeries","getSeriesOrderByLinks","optionsArray","userOptionsArray","iEnd","plotBox","scrollablePlotBox","ignoreY","hasDirtyStacks","hasStackedSeries","legendUserOptions","isHiddenChart","afterRedraw","redrawLegend","setResponsive","Chart_setAnimation","temporaryDisplay","layOutTitles","centerInCategory","updateTotals","getStacks","getMargins","extKey","drawChartBox","itemById","createAxes","arr_1","getSelectedSeries","subtitleOptions","applyDescription","explicitOptions","updateOptions","isStock","descOptions","topAligned","uncappedScale","offset_1","requiresDirtyBox","getContainerBox","nonContainers","getChartSize","heightOption","containerBox","enableDefaultHeight","revert","tempStyle","hcOrigStyle","hcOrigDetached","contains","hcOricDetached","setProperty","setClassName","getContainer","containerStyle","indexAttrName","containerId","oldChartIndex","skipClone","userSelect","exporting","skipAxes","resetMargins","marginBottom","getAxisMargins","setChartSize","getOptions","oldBox","isPrinting","reflowTimeout","setReflow","runReflow","ResizeObserver","observe","Chart_animObject","clipRoundFunc","marginRight","plotBorderWidth","sideName","chartBorderWidth","mgn","bgAttr","plotBGImage","chartBackgroundColor","plotBackgroundColor","plotBackgroundImage","chartBackground","plotBackground","plotBorder","plotShadow","klass","isUpdating","renderSeries","redoVertical","axisLayoutRuns","renderAxes","expectedSpace","redoHorizontal","axes_1","mockTick","tempWidth","tempHeight","axes_2","seriesGroupShadow","addCredits","creds","mapCredits","scroller","serieOptions","callbacks","warnIfA11yModuleNotLoaded","accessibility","role","addSeries","addAxis","createAxis","addColorAxis","showLoading","loadingOptions","setLoadingSize","loadingDiv","loadingSpan","loadingShown","Chart_animate","showDuration","hideLoading","hideDuration","oneToOne","updateAllAxes","updateAllSeries","runSetSize","adders","isResponsiveOptions","itemsForRemoval","propsRequireUpdateSeries","propsRequireDirtyBox","propsRequireReflow","newOptions","hasId","collectionsWithInit","newWidth","newHeight","setSubtitle","setCaption","showResetZoom","Chart_defaultOptions","btnOptions","relativeTo","zoomOut","resetSelection","panningOptions","displayButton","isAnyAxisPanning","hasZoomed","axes_3","wh","toLength","fromLength","fromCenter","toCenter","pointRangeDirection","newMin","newMax","minPx","seriesExtremes","_m","optionsMin","optionsMax","safeDataMin","safeDataMax","padRange","paddedMin","paddedMax","allowZoomOutside","overscroll","ScrollablePlotArea_composed","ScrollablePlotArea_addEvent","ScrollablePlotArea_createElement","ScrollablePlotArea_css","ScrollablePlotArea_defined","ScrollablePlotArea_erase","ScrollablePlotArea_merge","ScrollablePlotArea_pushUnique","onChartRender","ScrollablePlotArea","applyFixed","markDirty","lastHoverPoint","scrollableOptions","moveFixedElements","WebkitOverflowScrolling","overflowX","overflowY","parentDiv","innerContainer","fixedDiv","fixedRenderer","mask","afterSetSize","recalculateHoriz","minWidth","minHeight","hasParallelCoordinates","scrollPositionX","scrollPositionY","scrollableWidth","scrollableHeight","ScrollablePlotArea_stop","maskTop","maskLeft","maskBottom","maskRight","maskPlotRight","maskPlotBottom","redrawTrigger","axisClass","fixedSelectors","classBase","fixedSelectors_1","StackItem_format","StackItem_Series","StackItem_destroyObjectProperties","StackItem_fireEvent","StackItem_getAlignFactor","StackItem_isNumber","StackItem_pick","StackItem","negativeValue","stackOption","isNegative","cumulative","hasValidPoints","stack","leftCliff","rightCliff","formatOption","labelrank","xOffset","boxBottom","boxTop","defaultX","stackBox","getStackBox","labelBox","isJustify","adjustStackPosition","justifyDataLabel","stackBoxProps","totalStackValue","neg","StackingAxis_addEvent","StackingAxis_correctFloat","StackingAxis_defined","StackingAxis_destroyObjectProperties","StackingAxis_fireEvent","StackingAxis_isNumber","StackingAxis_objectEach","StackingAxis_pick","chartGetStacks","oldStacks","xAxisOptions","onAxisDestroy","stacks_1","stackTotalGroup","onAxisInit","AxisAdditions","seriesGetStackIndicator","seriesModifyStacks","processedXData","stacker","pointExtremes","seriesPercentStacker","totalFactor","seriesSetGroupedPoints","setStackedPoints","resetStacks","seriesSetStackedPoints","stackingParam","pointKey","yDataLength","negKey","stacksTouched","yNumber","singleStacks","actualSeries","setGroupedPoints","modifyStacks","animationConfig","StackingAxis_getDeferredAnimation","stackLabelsAnim","chartProto","percentStacker","Stacking_StackingAxis","LineSeries_extends","LineSeries_spreadArray","LineSeries_defined","LineSeries_merge","LineSeries_isObject","LineSeries","gappedPath","getGraphPath","preventGraphAnimation","xMap","fillGraph","nullsAsZeroes","connectCliffs","gap","connectNulls","pathToPoint","getPointSpline","Series_Series","Area_AreaSeriesDefaults","AreaSeries_extends","AreaSeries_spreadArray","AreaSeries_LineSeries","AreaSeries_extend","AreaSeries_merge","AreaSeries_objectEach","AreaSeries_pick","AreaSeries","shiftUnit","bottomPoints","graphPoints","seriesIndex","translatedThreshold","addDummyPoints","otherI","stackedValues","nullVal","cliffVal","isCliff","doCurve","getStackPoints","leftNull","rightNull","rectPlotX","topPath","bottomPath","firstBottomPoint","pointMap","yAxisSeries","seriesLength","upOrDown","stackX","visibleSeries_1","idx","stackPoint","direction","nullName","otherStack","cliff","si","SplineSeries_extends","SplineSeries_LineSeries","SplineSeries_merge","SplineSeries_pick","SplineSeries","leftContX","leftContY","rightContX","rightContY","nextPoint","otherPoint","lastX","nextX","nextY","correction","smoothing","controlPoints","AreaSplineSeries_extends","AreaSplineSeries_AreaSeries","areaProto","AreaSplineSeries_extend","AreaSplineSeries_merge","AreaSplineSeries","Spline_SplineSeries","Column_ColumnSeriesDefaults","groupPadding","pointPadding","minPointLength","brightness","ColumnSeries_extends","ColumnSeries_color","ColumnSeries_noop","ColumnSeries_clamp","ColumnSeries_crisp","ColumnSeries_defined","ColumnSeries_extend","ColumnSeries_fireEvent","ColumnSeries_isArray","ColumnSeries_isNumber","ColumnSeries_merge","ColumnSeries_pick","ColumnSeries_objectEach","ColumnSeries","translateStart","yAxisPos","translateProp","ColumnSeries_animObject","getColumnMetrics","reverseStacks","stackGroups","columnCount","grouping","columnIndex","otherYAxis","otherOptions","categoryWidth","pointOffsetWidth","groupWidth","pointWidth","maxPointWidth","colIndex","columnMetrics","paddedWidth","crispCol","adjustForMissingColumns","indexInCategory_1","totalInCategory_1","pointValues","yStackMap","baseIndex_1","seriesIndexes","yStack","dense","seriesPointWidth","seriesXOffset","seriesBarW","barY","barH","barX","p2o","pointAttrToOptions","strokeOption","strokeWidthOption","animationLimit","hasGraphic","allowShadow","_hasTracking","trackerGroups","DataLabel_format","DataLabel_defined","DataLabel_extend","DataLabel_fireEvent","DataLabel_getAlignFactor","DataLabel_isArray","DataLabel_isString","DataLabel_merge","DataLabel_objectEach","DataLabel_pick","DataLabel_pInt","DataLabel_splat","mergedDataLabelOptions","alignDataLabel","justify","forceDL","unrotatedbBox","setDataLabelStartPos","initDataLabelsGroup","initDataLabels","contrastColor","seriesDlOptions","DataLabel_getDeferredAnimation","mergeArrays","dlOptions","labelText","labelBgColor","labelEnabled","dataLabelOnHidden","dataLabelOnNull","applyFilter","op","operator","property","off","justified","horizontalAxis","horizontalAxisShift","verticalAxis","verticalAxisShift","one","two","labelCenter","Series_DataLabel","ColumnDataLabel_composed","ColumnDataLabel_Series","ColumnDataLabel_merge","ColumnDataLabel_pick","ColumnDataLabel_pushUnique","xLen","yLen","dlBox","below","overshoot","ColumnSeriesClass","Column_ColumnDataLabel","BarSeries_extends","BarSeries_extend","BarSeries_merge","BarSeries","Column_ColumnSeries","Scatter_ScatterSeriesDefaults","jitter","ScatterSeries_extends","ScatterSeries_a","ScatterSeries_ColumnSeries","ScatterSeries_LineSeries","ScatterSeries_addEvent","ScatterSeries_extend","ScatterSeries_merge","ScatterSeries","applyJitter","plotProp","translatedJitter","rand","CenteredUtilities_deg2rad","CenteredUtilities_fireEvent","CenteredUtilities_isNumber","CenteredUtilities_pick","CenteredUtilities_relativeLength","getCenter","handleSlicingRoom","slicingRoom","slicedOffset","centerOption","smallestSize","thickness","angular","getStartAndEndRadians","startAngle","endAngle","Series_CenteredUtilities","PiePoint_extends","PiePoint_assign","PiePoint_addEvent","PiePoint_defined","PiePoint_extend","PiePoint_isNumber","PiePoint_pick","PiePoint_relativeLength","PiePoint","half","toggleSlice","getConnectorPath","labelPosition","dataLabelPosition","connectorShape","shapeFunc","connectorShapes","computed","connectorPosition","getTranslate","sliced","slicedTranslation","PiePoint_setAnimation","fixedOffset","breakAt","touchingSliceAt","lineSegment","softConnector","straight","crookedLine","diameter","leftAligned","crookX","crookDistance","tan","Pie_PieSeriesDefaults","connectorPadding","ignoreHiddenPoint","PieSeries_extends","PieSeries_noop","PieSeries_clamp","PieSeries_extend","PieSeries_fireEvent","PieSeries_merge","PieSeries_pick","PieSeries","startAngleRad","startR","drawEmpty","centerX","centerY","endAngleRad","delayedRendering","getX","radii","asin","groupTranslation","animateTo","sortByAngle","radiusX","radiusY","radians","circ","PieDataLabel_composed","PieDataLabel_noop","PieDataLabel_distribute","PieDataLabel_Series","PieDataLabel_arrayMax","PieDataLabel_clamp","PieDataLabel_defined","PieDataLabel_pick","PieDataLabel_pushUnique","PieDataLabel_relativeLength","dataLabelPositioners","radialDistributionY","distributeBox","radialDistributionX","naturalY","seriesCenter","alignToPlotEdges","dataLabelWidth","alignToConnectors","maxDataLabelWidth","getDataLabelPosition","halfPI","cosAngle","sinAngle","finalConnectorOffset","natural","maxWidth","halves","maxLabelDistance","shortened","dataLabelOptions","halfIdx","distributionLength","topOffset","posAttribs","sideOverflow","verifyDataLabelOverflow","placeDataLabels","connectorColor","connectorWidth","minSize","newSize","PieSeriesClass","pieProto","PieDataLabel","getCenterOfPoints","getDistanceBetweenPoints","getAngleBetweenPoints","atan2","pointInPolygon","Geometry_GeometryUtilities","OverlappingDataLabels_addEvent","OverlappingDataLabels_fireEvent","OverlappingDataLabels_objectEach","OverlappingDataLabels_pick","chartHideOverlappingLabels","label1","label2","box1","box2","isLabelAffected","oldOpacity","absoluteBox","getAbsoluteBox","box1Poly","toHide","box2Poly","isPolygonOverlap","box1Poly_1","overlappingLabel","labels_1","hideOrShow","isOld","OverlappingDataLabels_onChartRender","collector","_loop_1","hideOverlappingLabels","Extensions_OverlappingDataLabels","BorderRadius_spreadArray","BorderRadius_noop","BorderRadius_addEvent","BorderRadius_extend","BorderRadius_isObject","BorderRadius_merge","BorderRadius_relativeLength","defaultBorderRadiusOptions","where","oldArc","oldRoundedRect","BorderRadius_arc","sinHalfAlpha","innerBorderRadius","applyBorderRadius","fromLineToArc","bigR","relativeR","angleOfBorderRadius","angleOffset","distanceBigCenterToStartArc","seriesOnAfterColumnTranslate","is3d","percent","seriesDefault","BorderRadius_defaultOptions","brBoxY","brBoxHeight","stackEnd","seriesBROptions","pieSeriesOnAfterTranslate","BorderRadius_roundedRect","brOffsetTop","brOffsetBtm","rTop","rBtm","cutTop","cutBtm","applyPythagoras","altitude","Responsive_diffObjects","Responsive_extend","Responsive_find","Responsive_merge","Responsive_pick","Responsive_uniqueKey","matchResponsiveRule","rule","_id","undoOptions","responsive","currentResponsive","ruleIds","rules","mergedOptions","ruleId","currentRuleIds","updatingResponsive","Core_Responsive","arrow","arrowHalf","triangleLeft","triangleLeftHalf","G","OverlappingDataLabels","Templating","Chart_Chart","getDeferredAnimation","setAnimation","Extensions_BorderRadius","SVGElementClass","pie","HTML_HTMLElement","PlotLineOrBand_PlotLineOrBand","Extensions_ScrollablePlotArea","Connection_defined","Connection_error","Connection_merge","Connection_objectEach","Connection_deg2rad","Connection","fromPoint","toPoint","pathfinder","renderPath","anim","pathGraphic","connection","addMarker","markerVector","pathVector","getPathfinderAnchorPoint","getRadiansToVector","getMarkerVector","getPath","algorithm","algorithms","chartObstacles","obstacles","requiresObstacles","getChartObstacles","connectors","algorithmMargin","chartObstacleMetrics","getObstacleMetrics","startMarker","endMarker","lineObstacles","obstacleMetrics","hardBounds","yMin","yMax","obstacleOptions","startDirectionX","getAlgorithmStartDirection","pathResult","CurrentDateIndication_composed","CurrentDateIndication_addEvent","CurrentDateIndication_merge","CurrentDateIndication_pushUnique","CurrentDateIndication_wrap","CurrentDateIndication_defaultOptions","onAxisAfterSetOptions","cdiOptions","currentDateIndicator","onPlotLineOrBandRender","wrapPlotLineOrBandGetLabelText","defaultMethod","defaultLabelOptions","GanttChart_extends","GanttChart_isArray","GanttChart_merge","GanttChart_splat","defaultLinkedTo","yAxisOptions","isGantt","GanttChart_defaultOptions","ganttChart","Chart_GanttChart","ChartNavigatorComposition_isTouchDevice","ChartNavigatorComposition_addEvent","ChartNavigatorComposition_merge","ChartNavigatorComposition_pick","composedMembers","onChartAfterAddSeries","setBaseSeries","onChartAfterSetChartSize","legendOptions","scrollbarHeight","scrollButtonSize","navigatorOptions","scrollbar","rangeSelector","extraBottomMargin","getHeight","onChartAfterUpdate","onChartBeforeRender","onChartBeforeShowResetZoom","onChartCallback","extremes","onChartUpdate","scrollbarOptions","NavigatorClass","NavigatorAxisComposition_isTouchDevice","NavigatorAxisComposition_addEvent","NavigatorAxisComposition_correctFloat","NavigatorAxisComposition_defined","NavigatorAxisComposition_isNumber","NavigatorAxisComposition_pick","NavigatorAxisComposition_onAxisInit","navigatorAxis","NavigatorAxisAdditions","onAxisSetExtremes","zoomed","previousZoom","toFixedRange","pxMin","pxMax","fixedMin","fixedMax","halfPointRange","NavigatorDefaults_color","NavigatorDefaults_seriesTypes","NavigatorDefaults","maskInside","handles","maskFill","outlineColor","outlineWidth","areaspline","compare","sonification","approximation","groupPixelWidth","firstAnchor","lastAnchor","NavigatorSymbols_spreadArray","NavigatorSymbols_relativeLength","Navigator_NavigatorSymbols","_x","_y","markerPosition","StockUtilities_defined","NavigatorComposition_composed","NavigatorComposition_setFixedRange","Utilities_StockUtilities","setFixedRange","fixedRange","NavigatorComposition_addEvent","NavigatorComposition_extend","NavigatorComposition_pushUnique","onSeriesAfterUpdate","NavigatorAxisComposition","NavigatorComposition_setOptions","ScrollbarAxis_composed","ScrollbarAxis_addEvent","ScrollbarAxis_defined","ScrollbarAxis_pick","ScrollbarAxis_pushUnique","Scrollbar","axisMin","axisMax","scrollMin","scrollMax","onAxisAfterGetOffset","scrollbarsOffsets","onAxisAfterInit","vertical","unitedMin","unitedMax","shouldUpdateExtremes","DOMType","setRange","onAxisAfterRender","offsetsIndex","axisMargin","xPosition","ScrollbarClass","Axis_ScrollbarAxis","Scrollbar_ScrollbarDefaults","barBorderRadius","buttonBorderRadius","buttonsEnabled","liveRedraw","barBackgroundColor","barBorderWidth","barBorderColor","buttonArrowColor","buttonBackgroundColor","buttonBorderColor","buttonBorderWidth","rifleColor","trackBackgroundColor","trackBorderColor","trackBorderRadius","trackBorderWidth","Scrollbar_addEvent","Scrollbar_correctFloat","Scrollbar_crisp","Scrollbar_defined","Scrollbar_destroyObjectProperties","Scrollbar_fireEvent","Scrollbar_merge","Scrollbar_pick","Scrollbar_removeEvent","_events","scrollbarButtons","scrollbarLeft","scrollbarStrokeWidth","scrollbarTop","swapXY","temp","addEvents","buttonsOrder","bar","scrollbarGroup","track","mouseDownHandler","mouseMoveHandler","mouseUpHandler","buttonToMinClick","buttonToMaxClick","trackClick","DOMEvent","cursorToScrollbarPosition","normalizedEvent","minWidthDifference","calculatedWidth","barWidth","drawScrollbarButton","Scrollbar_defaultOptions","mousePosition","initPositions","grabbedCenter","change","rendered","scrollbarRifles","fromPX","fullWidth","toPX","newPos","newRiflesPos","showFull","Navigator_assign","Navigator_isTouchDevice","SVG_SVGRenderer","Navigator_addEvent","Navigator_clamp","Navigator_correctFloat","Navigator_defined","Navigator_destroyObjectProperties","Navigator_erase","Navigator_extend","Navigator_find","Navigator_fireEvent","Navigator_isArray","Navigator_isNumber","Navigator_merge","Navigator_pick","Navigator_removeEvent","Navigator_splat","numExt","extreme","numbers","Navigator","Navigator_ChartNavigatorComposition","Navigator_NavigatorComposition","drawHandle","drawOutline","zoomedMin","zoomedMax","verticalMin","halfOutline","outlineCorrection","navigatorSize","navigatorTop","lineBtm","drawMasks","navigatorHeight","shades","shade","renderElements","mouseCursor","navigatorGroup","hasMask","handlesOptions_1","height_1","width_1","addMouseEvents","invertedUpdate","setOpposite","navigatorEnabled","adaptToUpdatedData","baseSeries","updatedDataHandler","getXAxisOffsets","navigatorWidth","scrollbarXAxis","fake","maxRange","currentRange","grabbedLeft","grabbedRight","fixedWidth","onMouseMove","onMouseUp","getPartsEvents","modifyNavigatorAxisExtremes","eventName","navigatorItem","shadesMousedown","ext","navigatorPosition","dragOffset","reversedExtremes","getUnionExtremes","handlesMousedown","baseXAxis","otherHandlePos","fixedExtreme","unionExtremes","triggerOp","removeBaseSeriesEvents","modifyBaseAxisExtremes","scrollbarEnabled","xAxisIndex","yAxisIndex","baseXaxis","breaks","keepOrdinalPadding","updateNavigatorSeries","unbindRedraw","scrollTrackWidth","valueRange","addBaseSeriesEvents","addChartEvents","returnFalseOnNoBaseSeries","baseAxis","navAxis","navAxisOptions","baseAxisOptions","baseSeriesOptions","showInNavigator","baseOptions","mergedNavSeriesOptions","baseNavigatorOptions","navSeriesMixin","padXAxis","navSeries","chartNavigatorSeriesOptions","linkedNavSeries","userNavOptions","Navigator_defaultOptions","navigatorSeriesData","hasNavigatorData","userSeriesOptions","getBaseSeriesMin","currentSeriesMin","baseExtremes","baseMin","baseMax","baseDataMin","baseDataMax","stickToMin","stickToMax","convertOverscroll","hasSetExtremes","shouldStickToMax","shouldStickToMin","xDataMin","marginName","RangeSelector_RangeSelectorDefaults","rangeSelectorZoom","rangeSelectorFrom","rangeSelectorTo","allButtonsEnabled","buttonSpacing","dropdown","inputBoxBorderColor","inputBoxHeight","inputBoxWidth","inputDateFormat","inputDateParser","inputEditDateFormat","inputEnabled","inputPosition","inputSpacing","buttonPosition","inputStyle","RangeSelectorComposition_composed","RangeSelectorComposition_addEvent","RangeSelectorComposition_defined","RangeSelectorComposition_extend","RangeSelectorComposition_isNumber","RangeSelectorComposition_merge","RangeSelectorComposition_pick","RangeSelectorComposition_pushUnique","chartDestroyEvents","axisMinFromRange","rangeOptions","getTrueRange","MIN_VALUE","_offsetMin","updateRangeSelectorButtons","redrawElements","createRangeSelector","RangeSelectorComposition_onChartBeforeRender","deferredYTDClick","clickButton","extraTopMargin","redrawRangeSelector","onChartDestroy","onChartGetMargins","rangeSelectorHeight","RangeSelectorComposition_onChartUpdate","optionsRangeSelector","extraBottomMarginWas","extraTopMarginWas","RangeSelectorClass","RangeSelectorComposition_defaultOptions","OrdinalAxis_assign","OrdinalAxis_addEvent","OrdinalAxis_correctFloat","OrdinalAxis_css","OrdinalAxis_defined","OrdinalAxis_error","OrdinalAxis_isNumber","OrdinalAxis_pick","OrdinalAxis_timeUnits","OrdinalAxis_isString","findHigherRanks","segmentPositions","hasCrossedHigherRank","outsideMax","segmentStarts","groupPositions","lastGroupPosition","posLength","length_1","translatedArr","distances","itemToRemove","lastTranslated","medianDistance","index2val","ordinalPositions","getExtendedPositions","pixelVal","getIndexOfPoint","leftNeighbour","rightNeighbour","getIndexInArray","findIndexOf","onAxisFoundExtremes","originalOrdinalRange","onAxisAfterSetScale","onAxisInitialAxisTranslation","beforeSetTickPositions","postProcessTickInterval","onChartPan","runBase","overscrollPointsRange","movedUnits","extendedOrdinalPositions","extendedAxis","index2val_1","val2lin_1","trimmedRange","onSeriesUpdatedData","toIndex","ordinalIndex","ordinalLength","length_2","originalPositionsReference","approximateIndexOffset","ordinal2lin","uniqueOrdinalPositions","useOrdinal","adjustOrdinalExtremesPoints","isBoosted","distanceBetweenPoint_1","takeOrdinalPosition","forceOrdinal","getOverscrollPositions","groupIntervalFactor","sortedArray","indirectSearch","withOverscroll","fakeAxis","currentDataGrouping","fakeSeries","applyGrouping","getGroupPixelWidth","getGroupIntervalFactor","destroyGroupedData","forced","ordinalArray","minX","indexOfMin","extraRange","ordinalSlope","calculateOverscroll","overscrollPercentage","overscrollValue","pixelToPercent","limitedOverscrollValue","Axis_OrdinalAxis","RangeSelector_addEvent","RangeSelector_createElement","RangeSelector_css","RangeSelector_defined","RangeSelector_destroyObjectProperties","RangeSelector_diffObjects","RangeSelector_discardElement","RangeSelector_extend","RangeSelector_fireEvent","RangeSelector_isNumber","RangeSelector_isString","RangeSelector_merge","RangeSelector_objectEach","RangeSelector_pick","RangeSelector_splat","preferredInputType","hasTimeKey","dateStyle","timeStyle","RangeSelector","buttonOptions","defaultButtons","initialButtonGroupWidth","maxButtonWidth","buttonWidth","RangeSelector_RangeSelectorComposition","baseXAxisOptions","rangeMin","ytdExtremes","_range","addOffsetMin","setSelected","forcedDataGrouping","Axis_Axis","setDataGrouping","frozenStates","preserveDataGrouping","getYTDExtremes","_offsetMax","selectedIndex","rangeSelectorButton","axisRangeUpdateEvent_1","selectedOption","blurInputs","minInput","maxInput","blur","computeButtonRange","createElements","updateButtonStates","dropdownLabel","actualRange","hasNoData","ytdMin","ytdMax","buttonStates","selectedExists","isSelectedTooGreat","offsetRange","isSelected","isTooGreatRange","isTooSmallRange","isYTDButNotSelected","isSameRange","prevOrdinalPosition","nextOrdinalPosition","disable","RangeSelector_defaultOptions","bbox","fixedTimes","offsetMin","offsetMax","getInputValue","defaultInputDateParser","setInputValue","inputTime","dateBox","minDateBox","maxDateBox","hcTimeAttr","updatedTime","previousTime","inputTypeFormats","setInputExtremes","showInput","inputGroup","isTextInput","hideInput","inputDate","drawInput","isMin","updateExtremes","chartAxis","currentExtreme","focus","boxShadow","onfocus","onblur","activeElement","keyDown","onchange","onkeypress","keyCode","onkeydown","onkeyup","buttonTop","inputTop","inputsZIndex","renderButtons","createInputs","minElems","minLabel","maxElems","maxLabel","x_1","zoomText","buttonGroup","userButtonTheme","createButtons","createButton","callDefaultEvent","buttonEvents","navButtonOptions","getXOffsetForExportButton","rightAligned","titleCollision","positionButtons","xOffsetForExportButton_1","alignButtonGroup","xOffsetForExportButton","handleCollision","alignTranslateY","groupHeight","isCollapsed","newButtonsOptions","btnLength","btn","dropdownTranslateX","hasVisibleDropdown","buttonLeft","moveInputsDown","collapseButtons","expandButtons","showDropdown","hideDropdown","rangeSelectorGroup","yPosition","buttonPositionY","inputPositionY","minPosition","rSelector","prevSeg","nextSeg","directionX","directionY","PathfinderAlgorithms_pick","PathfinderAlgorithms_min","PathfinderAlgorithms_max","findLastObstacleBefore","startIx","cmp","findObstacleFromPoint","obstacle","pathFromSegments","segments","limitObstacleToBounds","simpleConnect","endSegment","startObstacle","waypoint","useMax","endPoint","startObstacleIx","endObstacleIx","dir","copyFromPoint","fromKey","toKey","getMeOut","prevWaypoint","waypoint2","Series_PathUtilities","fastAvoid","dirIsX","extractedEndPoint","endSegments","softMinX","softMaxX","softMinY","softMaxY","forceObstacleBreak","pivotPoint","directionIsX","highestPoint","lowestPoint","searchDirection","getDodgeDirection","softBounds","soft","hard","toPointMax","toPointMin","maxOutOfSoftBounds","minOutOfSoftBounds","maxOutOfHardBounds","minOutOfHardBounds","minDistance","minPivot","maxPivot","clearPathTo","pivot","waypointUseMax","envelopingObstacle","secondEnvelopingObstacle","envelopWaypoint","obstacleMargin","ConnectorsDefaults","PathfinderComposition_defined","PathfinderComposition_error","PathfinderComposition_merge","getPointBB","bb","pointGetPathfinderAnchorPoint","pointGetRadiansToVector","v1","v2","pointGetMarkerVector","markerRadius","twoPI","rectWidth","rectHeight","rAtan","rectHalfWidth","rectHalfHeight","rectHorizontalCenter","rectVerticalCenter","edgePoint","theta","tanTheta","leftOrRightRegion","xFactor","yFactor","PathfinderClass","PathfinderComposition_setOptions","PathfinderComposition","Pathfinder_addEvent","Pathfinder_defined","Pathfinder_pick","Pathfinder_splat","Pathfinder_max","Pathfinder_min","Pathfinder","connections","deferRender","oldConnections","ganttPointOptions","dependency","connect","connects","toId","found","lenOld","lenNew","oldCon","newCon","renderConnections","conns","pathfinderRemoveRenderEvent","calculatedMargin","sLen","pLen","Pathfinder_getPointBB","calculateObstacleMargin","onstacleDistance","calculateObstacleDistance","bbMargin","yOverlap","xOverlap","xDistance","yDistance","xCenter","yCenter","pathfinder_src_G","Extensions_ArrowSymbols","StaticScale_addEvent","StaticScale_defined","StaticScale_isNumber","StaticScale_pick","StaticScale_onAxisAfterSetOptions","chartAdjustHeight","chart_1","initiatedScale","adjustHeight","Extensions_StaticScale","static_scale_src_G","XRangeSeriesDefaults_correctFloat","XRangeSeriesDefaults_isNumber","XRangeSeriesDefaults_isObject","XRange_XRangeSeriesDefaults","amount","partialFill","XRangePoint_extends","ColumnPoint","XRangePoint_extend","XRangePoint","getColorByCategory","drawPoint","getAnimationVerb","XRangeSeries_extends","XRangeSeries_composed","XRangeSeries_noop","XRangeSeries_color","XRangeSeries_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","swapAxes","x2Data","oldPlotX","translatePoint","widthDifference","dlLeft","dlRight","dlWidth","clipRectWidth","oldColWidth","plotX2","pointHeight","xIndex","yIndex","tooltipYOffset","partShapeArgs","clipRectArgs","yCategory","seriesOpts","pointState","stateOpts","pointStateVerb","pfOptions","partRect","partialClipRect","XRange_XRangeSeries","xrange_src_G","GanttPoint_extends","GanttPoint","setGanttPointAliases","completed","ganttPoint","milestone","xrange","GanttSeriesDefaults_isNumber","Gantt_GanttSeriesDefaults","pointFormatter","formats","ttOptions","retVal","BrokenAxis_addEvent","BrokenAxis_find","BrokenAxis_fireEvent","BrokenAxis_isArray","BrokenAxis_isNumber","BrokenAxis_pick","setBreaks","onAxisAfterSetTickPositions","newPositions","isInAnyBreak","onSeriesAfterGeneratePoints","isPointInBreak","onSeriesAfterRender","drawBreaks","seriesDrawBreaks","brokenAxis_1","breakArray","breaksOutOfRange","brk","isOut","otherBreak","seriesGappedPath","groupingSize","gapSize","gapUnit","current","next","xRange","isInBreak","repeat","inclusive","lin2Val","nval","val2Lin","findBreakAt","testKeep","inbrk","keep","showPoints","breaks_1","axisBreak","inBrk_1","repeat_1","start_1","breaks_2","breakArrayT_1","breakArray_1","min_1","max_1","breakSize","Axis_BrokenAxis","GridAxis_dateFormats","GridAxis_addEvent","GridAxis_defined","GridAxis_erase","GridAxis_find","GridAxis_isArray","GridAxis_isNumber","GridAxis_merge","GridAxis_pick","GridAxis_timeUnits","GridAxis_wrap","GridAxis_isObject","treeGrid","mapOfPosToGridNode","treeDepth","wrapGetOffset","columnsFirst","onAfterGetTitlePosition","gridOptions","axisHeight","options_1","axisWidth","titleWidth","titleFontSize","columnOptions","onAfterRender","firstTick","rightWall","isOuterAxis","linePath","startPoint","upperBorderEndPoint","upperBorderPath","lowerBorderEndPoint","lowerBorderPath","upperBorder","renderBorder","lowerBorder","axisLineExtra","lastTick","firstTick_1","tickMark","hiddenLabels","hiddenMarks","onAfterSetAxisTranslation","tickInfo","userLabels","onAfterSetOptions","gridAxisOptions","parentInfo","unitIdx","unit_1","counts","onAfterSetOptions2","onAfterSetScale","onAfterTickSize","labelPadding","cellHeight","GridAxis_onChartAfterSetChartSize","onDestroy","onInit","GridAxisAdditions","onTickAfterGetLabelPosition","labelOpts","nextTickPos","crispCorr","top_1","lblMetrics","onTickLabelFormat","pointCopy","gantt","onTrimTicks","categoryAxis","firstPos","secondPos","beforeLastPos","linkedMin","linkedMax","startLessThanMin","endMoreThanMin","startLessThanMax","endMoreThanMax","wrapUnsquish","parentAxis","thisIndex","extraBorderLine","W","firstDay","thursday","firstThursday","thursdayTS","__rest","getOwnPropertySymbols","propertyIsEnumerable","Tree_extend","Tree_isNumber","Tree_pick","getNode","level","mapOfIdToChildren","after","before","descendants","childStart","childEnd","Gantt_Tree","getTree","ids","listOfParents","prev","curr","adoptedByRoot","orphan","TreeGridTick_addEvent","TreeGridTick_removeEvent","TreeGridTick_isObject","TreeGridTick_isNumber","TreeGridTick_pick","TreeGridTick_wrap","onTickInit","TreeGridTickAdditions","wrapGetLabelPosition","lbOptions","isTreeGrid","wrapRenderLabel","iconCenter","shouldRender","icon","collapsed","addClassName","removeClassName","tickGrid","tickOptions","labelIcon","labelElement","axisGrid","symbolOptions","hasDescendants","isTreeGridElement","prefixClassName","prefixLevelClass","attachedTreeGridEvents","toggleCollapse","TickClass","tickProto","collapse","expand","posMappedNodes","TreeUtilities_isArray","TreeUtilities_isNumber","TreeUtilities_isObject","TreeUtilities_merge","TreeUtilities_pick","TreeGridAxis_getLevelOptions","converted","levels","levelIsConstant","TreeGridAxis_addEvent","TreeGridAxis_isArray","TreeGridAxis_splat","TreeGridAxis_find","TreeGridAxis_fireEvent","TreeGridAxis_isObject","TreeGridAxis_isString","TreeGridAxis_merge","TreeGridAxis_pick","TreeGridAxis_removeEvent","TreeGridAxis_wrap","getBreakFromNode","collapseEnd","collapseStart","getTreeGridFromData","numberOfSeries","setValues","collapsedNodes","mapOfIdToNode","uniqueNamesEnabled","posIterator","gridNode","parentGridNode","onBeforeRender","seriesHasPrimitivePoints_1","foundPrimitivePoint","axisData","toArray","mapOptionsToLevel","wrapGenerateTick","levelOptions","wrapInit","TreeGridAxisAdditions","wrapSetTickInterval","getTickPositions","wrapRedraw","axisProps","utils","TreeGridTick","setCollapsedStatus","dataPoint","GanttSeries_extends","GanttSeries_Series","GanttSeries_XRangeSeries","GanttSeries_extend","GanttSeries_isNumber","GanttSeries_merge","GanttSeries","Gantt_Pathfinder","TreeGridAxis","diamondShape","cutOff","gantt_src_G","Extensions_CurrentDateIndication","Gantt_GanttSeries","highcharts_src"],"mappings":"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B,OAAO,CAACpK,IAAI,CAAC0rB,EAAkB,SAAUE,CAAM,EAC1CA,AAAgB,eAAhBA,EAAOjmB,IAAI,CACX8lB,EAAQtkB,KAAK,CAAG4hB,EAAIW,UAAU,CAACkC,EAAOvnB,KAAK,EAG3CsnB,CAAY,CAACC,EAAOjmB,IAAI,CAAC,CAAGimB,EAAOvnB,KAAK,AAEhD,GACAonB,EAAQrC,UAAU,CAAGuC,CACzB,CAEA,GAAInB,EAAKqB,UAAU,CAAC1oB,MAAM,CAAE,CACxB,IAAI2oB,EAAa,EAAE,CACnB,EAAE,CAAC1hB,OAAO,CAACpK,IAAI,CAACwqB,EAAKqB,UAAU,CAAE,SAAUE,CAAS,EAChDR,EAAiBQ,EAAWD,EAChC,GACIA,EAAW3oB,MAAM,EACjBsoB,CAAAA,EAAQP,QAAQ,CAAGY,CAAS,CAEpC,CACAN,EAAM5mB,IAAI,CAAC6mB,EACf,EAEA,MADA,EAAE,CAACrhB,OAAO,CAACpK,IAAI,CAACQ,EAAI8qB,IAAI,CAACO,UAAU,CAAE,SAAUE,CAAS,EAAI,OAAOR,EAAiBQ,EAAW9C,EAAQ,GAChGA,CACX,EAqBAF,EAAIO,iBAAiB,CAAG,CACpB,MACA,gBACA,mBACA,gBACA,gBACA,cACA,aACA,kBACA,YACA,eACA,gBACA,uBACA,gBACA,QACA,YACA,QACA,UACA,KACA,KACA,IACA,KACA,KACA,WACA,OACA,cACA,cACA,gBACA,SACA,OACA,KACA,KACA,MACA,eACA,cACA,SACA,UACA,WACA,SACA,UACA,cACA,eACA,eACA,IACA,SACA,OACA,OACA,OACA,QACA,QACA,MACA,cACA,eACA,SACA,iBACA,eACA,QACA,cACA,SACA,UACA,UACA,SACA,WACA,aACA,cACA,aACA,aACA,QACA,OACA,SACA,QACA,IACA,KACA,KACA,aACA,IACA,KACA,KACA,SACH,CAgBDP,EAAIQ,iBAAiB,CAAG,CACpB,WACA,UACA,UACA,IACA,MACA,KACA,IACH,CAeDR,EAAI+B,WAAW,CAAG,CACd,IACA,OACA,IACA,KACA,SACA,UACA,SACA,WACA,OACA,KACA,OACA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"}

Hacked By AnonymousFox1.0, Coded By AnonymousFox