Hacked By AnonymousFox

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

{"version":3,"sources":["<anon>"],"sourcesContent":["/**\n * @license Highcharts JS v12.1.2 (2025-01-09)\n * @module highcharts/modules/accessibility\n * @requires highcharts\n *\n * Accessibility module\n *\n * (c) 2010-2024 Highsoft AS\n * Author: Oystein Moseng\n *\n * License: www.highcharts.com/license\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(root[\"_Highcharts\"], root[\"_Highcharts\"][\"Templating\"], root[\"_Highcharts\"][\"AST\"], root[\"_Highcharts\"][\"Legend\"], root[\"_Highcharts\"][\"Axis\"], root[\"_Highcharts\"][\"Color\"], root[\"_Highcharts\"][\"SeriesRegistry\"], root[\"_Highcharts\"][\"RendererRegistry\"], root[\"_Highcharts\"][\"SVGRenderer\"], root[\"_Highcharts\"][\"Point\"], root[\"_Highcharts\"][\"Series\"]);\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"highcharts/modules/accessibility\", [\"highcharts/highcharts\"], function (amd1) {return factory(amd1,amd1[\"Templating\"],amd1[\"AST\"],amd1[\"Legend\"],amd1[\"Axis\"],amd1[\"Color\"],amd1[\"SeriesRegistry\"],amd1[\"RendererRegistry\"],amd1[\"SVGRenderer\"],amd1[\"Point\"],amd1[\"Series\"]);});\n\telse if(typeof exports === 'object')\n\t\texports[\"highcharts/modules/accessibility\"] = factory(root[\"_Highcharts\"], root[\"_Highcharts\"][\"Templating\"], root[\"_Highcharts\"][\"AST\"], root[\"_Highcharts\"][\"Legend\"], root[\"_Highcharts\"][\"Axis\"], root[\"_Highcharts\"][\"Color\"], root[\"_Highcharts\"][\"SeriesRegistry\"], root[\"_Highcharts\"][\"RendererRegistry\"], root[\"_Highcharts\"][\"SVGRenderer\"], root[\"_Highcharts\"][\"Point\"], root[\"_Highcharts\"][\"Series\"]);\n\telse\n\t\troot[\"Highcharts\"] = factory(root[\"Highcharts\"], root[\"Highcharts\"][\"Templating\"], root[\"Highcharts\"][\"AST\"], root[\"Highcharts\"][\"Legend\"], root[\"Highcharts\"][\"Axis\"], root[\"Highcharts\"][\"Color\"], root[\"Highcharts\"][\"SeriesRegistry\"], root[\"Highcharts\"][\"RendererRegistry\"], root[\"Highcharts\"][\"SVGRenderer\"], root[\"Highcharts\"][\"Point\"], root[\"Highcharts\"][\"Series\"]);\n})(typeof window === 'undefined' ? this : window, (__WEBPACK_EXTERNAL_MODULE__944__, __WEBPACK_EXTERNAL_MODULE__984__, __WEBPACK_EXTERNAL_MODULE__660__, __WEBPACK_EXTERNAL_MODULE__632__, __WEBPACK_EXTERNAL_MODULE__532__, __WEBPACK_EXTERNAL_MODULE__620__, __WEBPACK_EXTERNAL_MODULE__512__, __WEBPACK_EXTERNAL_MODULE__608__, __WEBPACK_EXTERNAL_MODULE__540__, __WEBPACK_EXTERNAL_MODULE__260__, __WEBPACK_EXTERNAL_MODULE__820__) => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 660:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__660__;\n\n/***/ }),\n\n/***/ 532:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__532__;\n\n/***/ }),\n\n/***/ 620:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__620__;\n\n/***/ }),\n\n/***/ 632:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__632__;\n\n/***/ }),\n\n/***/ 260:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__260__;\n\n/***/ }),\n\n/***/ 608:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__608__;\n\n/***/ }),\n\n/***/ 540:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__540__;\n\n/***/ }),\n\n/***/ 820:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__820__;\n\n/***/ }),\n\n/***/ 512:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__512__;\n\n/***/ }),\n\n/***/ 984:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__984__;\n\n/***/ }),\n\n/***/ 944:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__944__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t(() => {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = (module) => {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\t() => (module['default']) :\n/******/ \t\t\t\t() => (module);\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n  \"default\": () => (/* binding */ accessibility_src)\n});\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\"],\"commonjs\":[\"highcharts\"],\"commonjs2\":[\"highcharts\"],\"root\":[\"Highcharts\"]}\nvar highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_ = __webpack_require__(944);\nvar highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default = /*#__PURE__*/__webpack_require__.n(highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_);\n;// ./code/es-modules/Accessibility/Utils/HTMLUtilities.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Utility functions for accessibility module.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { doc, win } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { css } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Constants\n *\n * */\nconst simulatedEventTarget = win.EventTarget && new win.EventTarget() || 'none';\n/* *\n *\n *  Functions\n *\n * */\n/* eslint-disable valid-jsdoc */\n/**\n * @private\n * @param {Highcharts.HTMLDOMElement} el\n * @param {string} className\n * @return {void}\n */\nfunction addClass(el, className) {\n    if (el.classList) {\n        el.classList.add(className);\n    }\n    else if (el.className.indexOf(className) < 0) {\n        // Note: Dumb check for class name exists, should be fine for practical\n        // use cases, but will return false positives if the element has a class\n        // that contains the className.\n        el.className += ' ' + className;\n    }\n}\n/**\n * @private\n * @param {Highcharts.HTMLDOMElement} el\n * @param {string} className\n * @return {void}\n */\nfunction removeClass(el, className) {\n    if (el.classList) {\n        el.classList.remove(className);\n    }\n    else {\n        // Note: Dumb logic that will break if the element has a class name that\n        // consists of className plus something else.\n        el.className = el.className.replace(new RegExp(className, 'g'), '');\n    }\n}\n/**\n * Utility function to clone a mouse event for re-dispatching.\n * @private\n */\nfunction cloneMouseEvent(e) {\n    if (typeof win.MouseEvent === 'function') {\n        return new win.MouseEvent(e.type, e);\n    }\n    // No MouseEvent support, try using initMouseEvent\n    if (doc.createEvent) {\n        const evt = doc.createEvent('MouseEvent');\n        if (evt.initMouseEvent) {\n            evt.initMouseEvent(e.type, e.bubbles, // #10561, #12161\n            e.cancelable, e.view || win, e.detail, e.screenX, e.screenY, e.clientX, e.clientY, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, e.button, e.relatedTarget);\n            return evt;\n        }\n    }\n    return getFakeMouseEvent(e.type);\n}\n/**\n * Utility function to clone a touch event for re-dispatching.\n * @private\n */\nfunction cloneTouchEvent(e) {\n    const touchListToTouchArray = (l) => {\n        const touchArray = [];\n        for (let i = 0; i < l.length; ++i) {\n            const item = l.item(i);\n            if (item) {\n                touchArray.push(item);\n            }\n        }\n        return touchArray;\n    };\n    if (typeof win.TouchEvent === 'function') {\n        const newEvent = new win.TouchEvent(e.type, {\n            touches: touchListToTouchArray(e.touches),\n            targetTouches: touchListToTouchArray(e.targetTouches),\n            changedTouches: touchListToTouchArray(e.changedTouches),\n            ctrlKey: e.ctrlKey,\n            shiftKey: e.shiftKey,\n            altKey: e.altKey,\n            metaKey: e.metaKey,\n            bubbles: e.bubbles,\n            cancelable: e.cancelable,\n            composed: e.composed,\n            detail: e.detail,\n            view: e.view\n        });\n        if (e.defaultPrevented) {\n            newEvent.preventDefault();\n        }\n        return newEvent;\n    }\n    const fakeEvt = cloneMouseEvent(e);\n    fakeEvt.touches = e.touches;\n    fakeEvt.changedTouches = e.changedTouches;\n    fakeEvt.targetTouches = e.targetTouches;\n    return fakeEvt;\n}\n/**\n * @private\n */\nfunction escapeStringForHTML(str) {\n    return str\n        .replace(/&/g, '&amp;')\n        .replace(/</g, '&lt;')\n        .replace(/>/g, '&gt;')\n        .replace(/\"/g, '&quot;')\n        .replace(/'/g, '&#x27;')\n        .replace(/\\//g, '&#x2F;');\n}\n/**\n * Get an element by ID\n * @private\n */\nfunction getElement(id) {\n    return doc.getElementById(id);\n}\n/**\n * Get a fake mouse event of a given type. If relatedTarget is not given,\n * it will point to simulatedEventTarget, as an indicator that the event\n * is fake.\n * @private\n */\nfunction getFakeMouseEvent(type, position, relatedTarget) {\n    const pos = position || {\n        x: 0,\n        y: 0\n    };\n    if (typeof win.MouseEvent === 'function') {\n        return new win.MouseEvent(type, {\n            bubbles: true,\n            cancelable: true,\n            composed: true,\n            button: 0,\n            buttons: 1,\n            relatedTarget: relatedTarget || simulatedEventTarget,\n            view: win,\n            detail: type === 'click' ? 1 : 0,\n            screenX: pos.x,\n            screenY: pos.y,\n            clientX: pos.x,\n            clientY: pos.y\n        });\n    }\n    // No MouseEvent support, try using initMouseEvent\n    if (doc.createEvent) {\n        const evt = doc.createEvent('MouseEvent');\n        if (evt.initMouseEvent) {\n            evt.initMouseEvent(type, true, // Bubble\n            true, // Cancel\n            win, // View\n            type === 'click' ? 1 : 0, // Detail\n            // Coords\n            pos.x, pos.y, pos.x, pos.y, \n            // Pressed keys\n            false, false, false, false, 0, // Button\n            null // Related target\n            );\n            return evt;\n        }\n    }\n    return { type: type };\n}\n/**\n * Get an appropriate heading level for an element. Corresponds to the\n * heading level below the previous heading in the DOM.\n *\n * Note: Only detects previous headings in the DOM that are siblings,\n * ancestors, or previous siblings of ancestors. Headings that are nested below\n * siblings of ancestors (cousins et.al) are not picked up. This is because it\n * is ambiguous whether or not the nesting is for layout purposes or indicates a\n * separate section.\n *\n * @private\n * @param {Highcharts.HTMLDOMElement} [element]\n * @return {string} The heading tag name (h1, h2 etc).\n * If no nearest heading is found, \"p\" is returned.\n */\nfunction getHeadingTagNameForElement(element) {\n    const getIncreasedHeadingLevel = (tagName) => {\n        const headingLevel = parseInt(tagName.slice(1), 10), newLevel = Math.min(6, headingLevel + 1);\n        return 'h' + newLevel;\n    };\n    const isHeading = (tagName) => /^H[1-6]$/i.test(tagName);\n    const getPreviousSiblingsHeading = (el) => {\n        let sibling = el;\n        while (sibling = sibling.previousSibling) { // eslint-disable-line\n            const tagName = sibling.tagName || '';\n            if (isHeading(tagName)) {\n                return tagName;\n            }\n        }\n        return '';\n    };\n    const getHeadingRecursive = (el) => {\n        const prevSiblingsHeading = getPreviousSiblingsHeading(el);\n        if (prevSiblingsHeading) {\n            return getIncreasedHeadingLevel(prevSiblingsHeading);\n        }\n        // No previous siblings are headings, try parent node\n        const parent = el.parentElement;\n        if (!parent) {\n            return 'h6';\n        }\n        const parentTagName = parent.tagName;\n        if (isHeading(parentTagName)) {\n            return getIncreasedHeadingLevel(parentTagName);\n        }\n        return getHeadingRecursive(parent);\n    };\n    return getHeadingRecursive(element);\n}\n/**\n * Remove an element from the DOM.\n * @private\n * @param {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement} [element]\n * @return {void}\n */\nfunction removeElement(element) {\n    if (element && element.parentNode) {\n        element.parentNode.removeChild(element);\n    }\n}\n/**\n * Remove all child nodes from an element.\n * @private\n * @param {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement} [element]\n * @return {void}\n */\nfunction removeChildNodes(element) {\n    while (element.lastChild) {\n        element.removeChild(element.lastChild);\n    }\n}\n/**\n * Utility function. Reverses child nodes of a DOM element.\n * @private\n */\nfunction reverseChildNodes(node) {\n    let i = node.childNodes.length;\n    while (i--) {\n        node.appendChild(node.childNodes[i]);\n    }\n}\n/**\n * Used for aria-label attributes, painting on a canvas will fail if the\n * text contains tags.\n * @private\n */\nfunction stripHTMLTagsFromString(str, isForExport = false) {\n    return (typeof str === 'string') ?\n        (isForExport ?\n            str.replace(/<\\/?[^>]+(>|$)/g, '') :\n            str.replace(/<\\/?(?!\\s)[^>]+(>|$)/g, '')) : str;\n}\n/**\n * Utility function for hiding an element visually, but still keeping it\n * available to screen reader users.\n * @private\n */\nfunction visuallyHideElement(element) {\n    css(element, {\n        position: 'absolute',\n        width: '1px',\n        height: '1px',\n        overflow: 'hidden',\n        whiteSpace: 'nowrap',\n        clip: 'rect(1px, 1px, 1px, 1px)',\n        marginTop: '-3px',\n        '-ms-filter': 'progid:DXImageTransform.Microsoft.Alpha(Opacity=1)',\n        filter: 'alpha(opacity=1)',\n        opacity: 0.01\n    });\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst HTMLUtilities = {\n    addClass,\n    cloneMouseEvent,\n    cloneTouchEvent,\n    escapeStringForHTML,\n    getElement,\n    getFakeMouseEvent,\n    getHeadingTagNameForElement,\n    removeChildNodes,\n    removeClass,\n    removeElement,\n    reverseChildNodes,\n    simulatedEventTarget,\n    stripHTMLTagsFromString,\n    visuallyHideElement\n};\n/* harmony default export */ const Utils_HTMLUtilities = (HTMLUtilities);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Templating\"],\"commonjs\":[\"highcharts\",\"Templating\"],\"commonjs2\":[\"highcharts\",\"Templating\"],\"root\":[\"Highcharts\",\"Templating\"]}\nvar highcharts_Templating_commonjs_highcharts_Templating_commonjs2_highcharts_Templating_root_Highcharts_Templating_ = __webpack_require__(984);\nvar highcharts_Templating_commonjs_highcharts_Templating_commonjs2_highcharts_Templating_root_Highcharts_Templating_default = /*#__PURE__*/__webpack_require__.n(highcharts_Templating_commonjs_highcharts_Templating_commonjs2_highcharts_Templating_root_Highcharts_Templating_);\n;// ./code/es-modules/Accessibility/A11yI18n.js\n/* *\n *\n *  Accessibility module - internationalization support\n *\n *  (c) 2010-2024 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\nconst { format } = (highcharts_Templating_commonjs_highcharts_Templating_commonjs2_highcharts_Templating_root_Highcharts_Templating_default());\n\nconst { getNestedProperty, pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Composition\n *\n * */\nvar A11yI18nComposition;\n(function (A11yI18nComposition) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    function compose(ChartClass) {\n        const chartProto = ChartClass.prototype;\n        if (!chartProto.langFormat) {\n            chartProto.langFormat = langFormat;\n        }\n    }\n    A11yI18nComposition.compose = compose;\n    /**\n     * I18n utility function.  Format a single array or plural statement in a\n     * format string.  If the statement is not an array or plural statement,\n     * returns the statement within brackets.  Invalid array statements return\n     * an empty string.\n     *\n     * @private\n     * @function formatExtendedStatement\n     * @param {string} statement\n     * @param {Highcharts.Dictionary<*>} ctx\n     * Context to apply to the format string.\n     */\n    function formatExtendedStatement(statement, ctx) {\n        const eachStart = statement.indexOf('#each('), pluralStart = statement.indexOf('#plural('), indexStart = statement.indexOf('['), indexEnd = statement.indexOf(']');\n        let arr, result;\n        // Dealing with an each-function?\n        if (eachStart > -1) {\n            const eachEnd = statement.slice(eachStart).indexOf(')') + eachStart, preEach = statement.substring(0, eachStart), postEach = statement.substring(eachEnd + 1), eachStatement = statement.substring(eachStart + 6, eachEnd), eachArguments = eachStatement.split(',');\n            let lenArg = Number(eachArguments[1]), len;\n            result = '';\n            arr = getNestedProperty(eachArguments[0], ctx);\n            if (arr) {\n                lenArg = isNaN(lenArg) ? arr.length : lenArg;\n                len = lenArg < 0 ?\n                    arr.length + lenArg :\n                    Math.min(lenArg, arr.length); // Overshoot\n                // Run through the array for the specified length\n                for (let i = 0; i < len; ++i) {\n                    result += preEach + arr[i] + postEach;\n                }\n            }\n            return result.length ? result : '';\n        }\n        // Dealing with a plural-function?\n        if (pluralStart > -1) {\n            const pluralEnd = (statement.slice(pluralStart).indexOf(')') + pluralStart), pluralStatement = statement.substring(pluralStart + 8, pluralEnd), pluralArguments = pluralStatement.split(','), num = Number(getNestedProperty(pluralArguments[0], ctx));\n            switch (num) {\n                case 0:\n                    result = pick(pluralArguments[4], pluralArguments[1]);\n                    break;\n                case 1:\n                    result = pick(pluralArguments[2], pluralArguments[1]);\n                    break;\n                case 2:\n                    result = pick(pluralArguments[3], pluralArguments[1]);\n                    break;\n                default:\n                    result = pluralArguments[1];\n            }\n            return result ? stringTrim(result) : '';\n        }\n        // Array index\n        if (indexStart > -1) {\n            const arrayName = statement.substring(0, indexStart), ix = Number(statement.substring(indexStart + 1, indexEnd));\n            let val;\n            arr = getNestedProperty(arrayName, ctx);\n            if (!isNaN(ix) && arr) {\n                if (ix < 0) {\n                    val = arr[arr.length + ix];\n                    // Handle negative overshoot\n                    if (typeof val === 'undefined') {\n                        val = arr[0];\n                    }\n                }\n                else {\n                    val = arr[ix];\n                    // Handle positive overshoot\n                    if (typeof val === 'undefined') {\n                        val = arr[arr.length - 1];\n                    }\n                }\n            }\n            return typeof val !== 'undefined' ? val : '';\n        }\n        // Standard substitution, delegate to format or similar\n        return '{' + statement + '}';\n    }\n    /* eslint-disable max-len */\n    /**\n     * i18n formatting function.  Extends Highcharts.format() functionality by\n     * also handling arrays and plural conditionals.  Arrays can be indexed as\n     * follows:\n     *\n     * - Format: 'This is the first index: {myArray[0]}. The last: {myArray[-1]}.'\n     *\n     * - Context: { myArray: [0, 1, 2, 3, 4, 5] }\n     *\n     * - Result: 'This is the first index: 0. The last: 5.'\n     *\n     *\n     * They can also be iterated using the #each() function.  This will repeat\n     * the contents of the bracket expression for each element.  Example:\n     *\n     * - Format: 'List contains: {#each(myArray)cm }'\n     *\n     * - Context: { myArray: [0, 1, 2] }\n     *\n     * - Result: 'List contains: 0cm 1cm 2cm '\n     *\n     *\n     * The #each() function optionally takes a length parameter.  If positive,\n     * this parameter specifies the max number of elements to iterate through.\n     * If negative, the function will subtract the number from the length of the\n     * array.  Use this to stop iterating before the array ends.  Example:\n     *\n     * - Format: 'List contains: {#each(myArray, -1), }and {myArray[-1]}.'\n     *\n     * - Context: { myArray: [0, 1, 2, 3] }\n     *\n     * - Result: 'List contains: 0, 1, 2, and 3.'\n     *\n     *\n     * Use the #plural() function to pick a string depending on whether or not a\n     * context object is 1.  Arguments are #plural(obj, plural, singular).\n     * Example:\n     *\n     * - Format: 'Has {numPoints} {#plural(numPoints, points, point}.'\n     *\n     * - Context: { numPoints: 5 }\n     *\n     * - Result: 'Has 5 points.'\n     *\n     *\n     * Optionally there are additional parameters for dual and none:\n     * #plural(obj, plural, singular, dual, none).  Example:\n     *\n     * - Format: 'Has {#plural(numPoints, many points, one point, two points,\n     *   none}.'\n     *\n     * - Context: { numPoints: 2 }\n     *\n     * - Result: 'Has two points.'\n     *\n     *\n     * The dual or none parameters will take precedence if they are supplied.\n     *\n     * @requires modules/accessibility\n     *\n     * @function Highcharts.i18nFormat\n     *\n     * @param {string} formatString\n     * The string to format.\n     *\n     * @param {Highcharts.Dictionary<*>} context\n     * Context to apply to the format string.\n     *\n     * @param {Highcharts.Chart} chart\n     * A `Chart` instance with a time object and numberFormatter, passed on to\n     * format().\n     *\n     * @deprecated\n     *\n     * @return {string}\n     * The formatted string.\n     */\n    function i18nFormat(formatString, context, chart) {\n        const getFirstBracketStatement = (sourceStr, offset) => {\n            const str = sourceStr.slice(offset || 0), startBracket = str.indexOf('{'), endBracket = str.indexOf('}');\n            if (startBracket > -1 && endBracket > startBracket) {\n                return {\n                    statement: str.substring(startBracket + 1, endBracket),\n                    begin: offset + startBracket + 1,\n                    end: offset + endBracket\n                };\n            }\n        }, tokens = [];\n        let bracketRes, constRes, cursor = 0;\n        // Tokenize format string into bracket statements and constants\n        do {\n            bracketRes = getFirstBracketStatement(formatString, cursor);\n            constRes = formatString.substring(cursor, bracketRes && bracketRes.begin - 1);\n            // If we have constant content before this bracket statement, add it\n            if (constRes.length) {\n                tokens.push({\n                    value: constRes,\n                    type: 'constant'\n                });\n            }\n            // Add the bracket statement\n            if (bracketRes) {\n                tokens.push({\n                    value: bracketRes.statement,\n                    type: 'statement'\n                });\n            }\n            cursor = bracketRes ? bracketRes.end + 1 : cursor + 1;\n        } while (bracketRes);\n        // Perform the formatting.  The formatArrayStatement function returns\n        // the statement in brackets if it is not an array statement, which\n        // means it gets picked up by format below.\n        tokens.forEach((token) => {\n            if (token.type === 'statement') {\n                token.value = formatExtendedStatement(token.value, context);\n            }\n        });\n        // Join string back together and pass to format to pick up non-array\n        // statements.\n        return format(tokens.reduce((acc, cur) => acc + cur.value, ''), context, chart);\n    }\n    A11yI18nComposition.i18nFormat = i18nFormat;\n    /* eslint-enable max-len */\n    /**\n     * Apply context to a format string from lang options of the chart.\n     *\n     * @requires modules/accessibility\n     *\n     * @function Highcharts.Chart#langFormat\n     *\n     * @param {string} langKey\n     * Key (using dot notation) into lang option structure.\n     *\n     * @param {Highcharts.Dictionary<*>} context\n     * Context to apply to the format string.\n     *\n     * @return {string}\n     * The formatted string.\n     */\n    function langFormat(langKey, context) {\n        const keys = langKey.split('.');\n        let formatString = this.options.lang, i = 0;\n        for (; i < keys.length; ++i) {\n            formatString = formatString && formatString[keys[i]];\n        }\n        return typeof formatString === 'string' ?\n            i18nFormat(formatString, context, this) : '';\n    }\n    /**\n     * @private\n     * @function stringTrim\n     *\n     * @param {string} str\n     * The input string\n     *\n     * @return {string}\n     * The trimmed string\n     */\n    function stringTrim(str) {\n        return str.trim && str.trim() || str.replace(/^\\s+|\\s+$/g, '');\n    }\n})(A11yI18nComposition || (A11yI18nComposition = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const A11yI18n = (A11yI18nComposition);\n\n;// ./code/es-modules/Accessibility/Utils/ChartUtilities.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Utils for dealing with charts.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { doc: ChartUtilities_doc } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { stripHTMLTagsFromString: stripHTMLTags } = Utils_HTMLUtilities;\n\nconst { defined, find, fireEvent } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/* eslint-disable valid-jsdoc */\n/**\n * Fire an event on an element that is either wrapped by Highcharts,\n * or a DOM element.\n * @private\n */\nfunction fireEventOnWrappedOrUnwrappedElement(el, eventObject) {\n    const type = eventObject.type;\n    const hcEvents = el.hcEvents;\n    if (!!ChartUtilities_doc.createEvent &&\n        (el.dispatchEvent || el.fireEvent)) {\n        if (el.dispatchEvent) {\n            el.dispatchEvent(eventObject);\n        }\n        else {\n            el.fireEvent(type, eventObject);\n        }\n    }\n    else if (hcEvents && hcEvents[type]) {\n        fireEvent(el, type, eventObject);\n    }\n    else if (el.element) {\n        fireEventOnWrappedOrUnwrappedElement(el.element, eventObject);\n    }\n}\n/**\n * @private\n */\nfunction getChartTitle(chart) {\n    return stripHTMLTags(chart.options.title.text ||\n        chart.langFormat('accessibility.defaultChartTitle', { chart: chart }), chart.renderer.forExport);\n}\n/**\n * Return string with the axis name/title.\n * @private\n */\nfunction getAxisDescription(axis) {\n    return axis && (axis.options.accessibility?.description ||\n        axis.axisTitle?.textStr ||\n        axis.options.id ||\n        axis.categories && 'categories' ||\n        axis.dateTime && 'Time' ||\n        'values');\n}\n/**\n * Return string with text description of the axis range.\n * @private\n * @param {Highcharts.Axis} axis\n * The axis to get range desc of.\n * @return {string}\n * A string with the range description for the axis.\n */\nfunction getAxisRangeDescription(axis) {\n    const axisOptions = axis.options || {};\n    // Handle overridden range description\n    if (axisOptions.accessibility &&\n        typeof axisOptions.accessibility.rangeDescription !== 'undefined') {\n        return axisOptions.accessibility.rangeDescription;\n    }\n    // Handle category axes\n    if (axis.categories) {\n        return getCategoryAxisRangeDesc(axis);\n    }\n    // Use time range, not from-to?\n    if (axis.dateTime && (axis.min === 0 || axis.dataMin === 0)) {\n        return getAxisTimeLengthDesc(axis);\n    }\n    // Just use from and to.\n    // We have the range and the unit to use, find the desc format\n    return getAxisFromToDescription(axis);\n}\n/**\n * Describe the range of a category axis.\n * @private\n */\nfunction getCategoryAxisRangeDesc(axis) {\n    const chart = axis.chart;\n    if (axis.dataMax && axis.dataMin) {\n        return chart.langFormat('accessibility.axis.rangeCategories', {\n            chart: chart,\n            axis: axis,\n            numCategories: axis.dataMax - axis.dataMin + 1\n        });\n    }\n    return '';\n}\n/**\n * Describe the length of the time window shown on an axis.\n * @private\n */\nfunction getAxisTimeLengthDesc(axis) {\n    const chart = axis.chart, range = {}, min = axis.dataMin || axis.min || 0, max = axis.dataMax || axis.max || 0;\n    let rangeUnit = 'Seconds';\n    range.Seconds = (max - min) / 1000;\n    range.Minutes = range.Seconds / 60;\n    range.Hours = range.Minutes / 60;\n    range.Days = range.Hours / 24;\n    ['Minutes', 'Hours', 'Days'].forEach(function (unit) {\n        if (range[unit] > 2) {\n            rangeUnit = unit;\n        }\n    });\n    const rangeValue = range[rangeUnit].toFixed(rangeUnit !== 'Seconds' &&\n        rangeUnit !== 'Minutes' ? 1 : 0 // Use decimals for days/hours\n    );\n    // We have the range and the unit to use, find the desc format\n    return chart.langFormat('accessibility.axis.timeRange' + rangeUnit, {\n        chart: chart,\n        axis: axis,\n        range: rangeValue.replace('.0', '')\n    });\n}\n/**\n * Describe an axis from-to range.\n * @private\n */\nfunction getAxisFromToDescription(axis) {\n    const chart = axis.chart, options = chart.options, dateRangeFormat = (options &&\n        options.accessibility &&\n        options.accessibility.screenReaderSection.axisRangeDateFormat ||\n        ''), extremes = {\n        min: axis.dataMin || axis.min || 0,\n        max: axis.dataMax || axis.max || 0\n    }, format = function (key) {\n        return axis.dateTime ?\n            chart.time.dateFormat(dateRangeFormat, extremes[key]) :\n            extremes[key].toString();\n    };\n    return chart.langFormat('accessibility.axis.rangeFromTo', {\n        chart: chart,\n        axis: axis,\n        rangeFrom: format('min'),\n        rangeTo: format('max')\n    });\n}\n/**\n * Get the DOM element for the first point in the series.\n * @private\n * @param {Highcharts.Series} series\n * The series to get element for.\n * @return {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement|undefined}\n * The DOM element for the point.\n */\nfunction getSeriesFirstPointElement(series) {\n    if (series.points && series.points.length) {\n        const firstPointWithGraphic = find(series.points, (p) => !!p.graphic);\n        return (firstPointWithGraphic &&\n            firstPointWithGraphic.graphic &&\n            firstPointWithGraphic.graphic.element);\n    }\n}\n/**\n * Get the DOM element for the series that we put accessibility info on.\n * @private\n * @param {Highcharts.Series} series\n * The series to get element for.\n * @return {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement|undefined}\n * The DOM element for the series\n */\nfunction getSeriesA11yElement(series) {\n    const firstPointEl = getSeriesFirstPointElement(series);\n    return (firstPointEl &&\n        firstPointEl.parentNode || series.graph &&\n        series.graph.element || series.group &&\n        series.group.element); // Could be tracker series depending on series type\n}\n/**\n * Remove aria-hidden from element. Also unhides parents of the element, and\n * hides siblings that are not explicitly unhidden.\n * @private\n */\nfunction unhideChartElementFromAT(chart, element) {\n    element.setAttribute('aria-hidden', false);\n    if (element === chart.renderTo ||\n        !element.parentNode ||\n        element.parentNode === ChartUtilities_doc.body // #16126: Full screen printing\n    ) {\n        return;\n    }\n    // Hide siblings unless their hidden state is already explicitly set\n    Array.prototype.forEach.call(element.parentNode.childNodes, function (node) {\n        if (!node.hasAttribute('aria-hidden')) {\n            node.setAttribute('aria-hidden', true);\n        }\n    });\n    // Repeat for parent\n    unhideChartElementFromAT(chart, element.parentNode);\n}\n/**\n * Hide series from screen readers.\n * @private\n */\nfunction hideSeriesFromAT(series) {\n    const seriesEl = getSeriesA11yElement(series);\n    if (seriesEl) {\n        seriesEl.setAttribute('aria-hidden', true);\n    }\n}\n/**\n * Get series objects by series name.\n * @private\n */\nfunction getSeriesFromName(chart, name) {\n    if (!name) {\n        return chart.series;\n    }\n    return (chart.series || []).filter(function (s) {\n        return s.name === name;\n    });\n}\n/**\n * Get point in a series from x/y values.\n * @private\n */\nfunction getPointFromXY(series, x, y) {\n    let i = series.length, res;\n    while (i--) {\n        res = find(series[i].points || [], function (p) {\n            return p.x === x && p.y === y;\n        });\n        if (res) {\n            return res;\n        }\n    }\n}\n/**\n * Get relative position of point on an x/y axis from 0 to 1.\n * @private\n */\nfunction getRelativePointAxisPosition(axis, point) {\n    if (!defined(axis.dataMin) || !defined(axis.dataMax)) {\n        return 0;\n    }\n    const axisStart = axis.toPixels(axis.dataMin), axisEnd = axis.toPixels(axis.dataMax), \n    // We have to use pixel position because of axis breaks, log axis etc.\n    positionProp = axis.coll === 'xAxis' ? 'x' : 'y', pointPos = axis.toPixels(point[positionProp] || 0);\n    return (pointPos - axisStart) / (axisEnd - axisStart);\n}\n/**\n * Get relative position of point on an x/y axis from 0 to 1.\n * @private\n */\nfunction scrollAxisToPoint(point) {\n    const xAxis = point.series.xAxis, yAxis = point.series.yAxis, axis = (xAxis && xAxis.scrollbar ? xAxis : yAxis), scrollbar = (axis && axis.scrollbar);\n    if (scrollbar && defined(scrollbar.to) && defined(scrollbar.from)) {\n        const range = scrollbar.to - scrollbar.from;\n        const pos = getRelativePointAxisPosition(axis, point);\n        scrollbar.updatePosition(pos - range / 2, pos + range / 2);\n        fireEvent(scrollbar, 'changed', {\n            from: scrollbar.from,\n            to: scrollbar.to,\n            trigger: 'scrollbar',\n            DOMEvent: null\n        });\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst ChartUtilities = {\n    fireEventOnWrappedOrUnwrappedElement,\n    getChartTitle,\n    getAxisDescription,\n    getAxisRangeDescription,\n    getPointFromXY,\n    getSeriesFirstPointElement,\n    getSeriesFromName,\n    getSeriesA11yElement,\n    unhideChartElementFromAT,\n    hideSeriesFromAT,\n    scrollAxisToPoint\n};\n/* harmony default export */ const Utils_ChartUtilities = (ChartUtilities);\n\n;// ./code/es-modules/Accessibility/Utils/DOMElementProvider.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Class that can keep track of elements added to DOM and clean them up on\n *  destroy.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { doc: DOMElementProvider_doc } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { removeElement: DOMElementProvider_removeElement } = Utils_HTMLUtilities;\n/* *\n *\n *  Class\n *\n * */\n/**\n * @private\n */\nclass DOMElementProvider {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor() {\n        this.elements = [];\n    }\n    /**\n     * Create an element and keep track of it for later removal.\n     * Same args as document.createElement\n     * @private\n     */\n    createElement() {\n        const el = DOMElementProvider_doc.createElement.apply(DOMElementProvider_doc, arguments);\n        this.elements.push(el);\n        return el;\n    }\n    /**\n     * Destroy created element, removing it from the DOM.\n     * @private\n     */\n    removeElement(element) {\n        DOMElementProvider_removeElement(element);\n        this.elements.splice(this.elements.indexOf(element), 1);\n    }\n    /**\n     * Destroy all created elements, removing them from the DOM.\n     * @private\n     */\n    destroyCreatedElements() {\n        this.elements.forEach(function (element) {\n            DOMElementProvider_removeElement(element);\n        });\n        this.elements = [];\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Utils_DOMElementProvider = (DOMElementProvider);\n\n;// ./code/es-modules/Accessibility/Utils/EventProvider.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Class that can keep track of events added, and clean them up on destroy.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { addEvent } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/**\n * @private\n */\nclass EventProvider {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor() {\n        this.eventRemovers = [];\n    }\n    /**\n     * Add an event to an element and keep track of it for later removal.\n     * Same args as Highcharts.addEvent.\n     * @private\n     */\n    addEvent() {\n        const remover = addEvent.apply((highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()), arguments);\n        this.eventRemovers.push({\n            element: arguments[0], // HTML element\n            remover\n        });\n        return remover;\n    }\n    /**\n     * Remove added event.\n     * @private\n     */\n    removeEvent(event) {\n        const pos = this.eventRemovers.map((e) => e.remover).indexOf(event);\n        this.eventRemovers[pos].remover();\n        this.eventRemovers.splice(pos, 1);\n    }\n    /**\n     * Remove all added events.\n     * @private\n     */\n    removeAddedEvents() {\n        this.eventRemovers.map((e) => e.remover)\n            .forEach((remover) => remover());\n        this.eventRemovers = [];\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Utils_EventProvider = (EventProvider);\n\n;// ./code/es-modules/Accessibility/AccessibilityComponent.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Accessibility component class definition\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { fireEventOnWrappedOrUnwrappedElement: AccessibilityComponent_fireEventOnWrappedOrUnwrappedElement } = Utils_ChartUtilities;\n\n\n\nconst { getFakeMouseEvent: AccessibilityComponent_getFakeMouseEvent } = Utils_HTMLUtilities;\n/* *\n *\n *  Class\n *\n * */\n/**\n * The AccessibilityComponent base class, representing a part of the chart that\n * has accessibility logic connected to it. This class can be inherited from to\n * create a custom accessibility component for a chart.\n *\n * Components should take care to destroy added elements and unregister event\n * handlers on destroy. This is handled automatically if using `this.addEvent`\n * and `this.createElement`.\n *\n * @sample highcharts/accessibility/custom-component\n *         Custom accessibility component\n *\n * @requires modules/accessibility\n * @class\n * @name Highcharts.AccessibilityComponent\n */\nclass AccessibilityComponent {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Called when accessibility is disabled or chart is destroyed.\n     *\n     * @function Highcharts.AccessibilityComponent#destroy\n     */\n    destroy() { }\n    /**\n     * Get keyboard navigation handler for this component.\n     *\n     * @function Highcharts.AccessibilityComponent#getKeyboardNavigation\n     * @return   {Highcharts.KeyboardNavigationHandler|Array<Highcharts.KeyboardNavigationHandler>}\n     *           The keyboard navigation handler(s) for this component.\n     */\n    getKeyboardNavigation() {\n        return [];\n    }\n    /**\n     * Called on component initialization.\n     *\n     * @function Highcharts.AccessibilityComponent#init\n     */\n    init() { }\n    /**\n     * Called on every chart render.\n     *\n     * @function Highcharts.AccessibilityComponent#onChartRender\n     */\n    onChartRender() { }\n    /**\n     * Called on updates to the chart, including options changes.\n     * Note that this is also called on first render of chart.\n     *\n     * @function Highcharts.AccessibilityComponent#onChartUpdate\n     */\n    onChartUpdate() { }\n    /**\n     * Initialize the class\n     * @private\n     * @param {Highcharts.Chart} chart The chart object\n     * @param {Highcharts.ProxyProvider} proxyProvider The proxy provider of the accessibility module\n     */\n    initBase(chart, proxyProvider) {\n        this.chart = chart;\n        this.eventProvider = new Utils_EventProvider();\n        this.domElementProvider = new Utils_DOMElementProvider();\n        this.proxyProvider = proxyProvider;\n        // Key code enum for common keys\n        this.keyCodes = {\n            left: 37,\n            right: 39,\n            up: 38,\n            down: 40,\n            enter: 13,\n            space: 32,\n            esc: 27,\n            tab: 9,\n            pageUp: 33,\n            pageDown: 34,\n            end: 35,\n            home: 36\n        };\n    }\n    /**\n     * Add an event to an element and keep track of it for later removal.\n     * See EventProvider for details.\n     * @private\n     */\n    addEvent(el, type, fn, options) {\n        return this.eventProvider.addEvent(el, type, fn, options);\n    }\n    /**\n     * Create an element and keep track of it for later removal.\n     * See DOMElementProvider for details.\n     * @private\n     */\n    createElement(tagName, options) {\n        return this.domElementProvider.createElement(tagName, options);\n    }\n    /**\n     * Fire a fake click event on an element. It is useful to have this on\n     * AccessibilityComponent for users of custom components.\n     * @private\n     */\n    fakeClickEvent(el) {\n        const fakeEvent = AccessibilityComponent_getFakeMouseEvent('click');\n        AccessibilityComponent_fireEventOnWrappedOrUnwrappedElement(el, fakeEvent);\n    }\n    /**\n     * Remove traces of the component.\n     * @private\n     */\n    destroyBase() {\n        this.domElementProvider.destroyCreatedElements();\n        this.eventProvider.removeAddedEvents();\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Accessibility_AccessibilityComponent = (AccessibilityComponent);\n\n;// ./code/es-modules/Accessibility/KeyboardNavigationHandler.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Keyboard navigation handler base class definition\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { find: KeyboardNavigationHandler_find } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Class\n *\n * */\n/**\n * Define a keyboard navigation handler for use with a\n * Highcharts.AccessibilityComponent instance. This functions as an abstraction\n * layer for keyboard navigation, and defines a map of keyCodes to handler\n * functions.\n *\n * @requires modules/accessibility\n *\n * @sample highcharts/accessibility/custom-component\n *         Custom accessibility component\n *\n * @class\n * @name Highcharts.KeyboardNavigationHandler\n *\n * @param {Highcharts.Chart} chart\n * The chart this module should act on.\n *\n * @param {Highcharts.KeyboardNavigationHandlerOptionsObject} options\n * Options for the keyboard navigation handler.\n */\nclass KeyboardNavigationHandler {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(chart, options) {\n        this.chart = chart;\n        this.keyCodeMap = options.keyCodeMap || [];\n        this.validate = options.validate;\n        this.init = options.init;\n        this.terminate = options.terminate;\n        // Response enum\n        this.response = {\n            success: 1, // Keycode was handled\n            prev: 2, // Move to prev module\n            next: 3, // Move to next module\n            noHandler: 4, // There is no handler for this keycode\n            fail: 5 // Handler failed\n        };\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Find handler function(s) for key code in the keyCodeMap and run it.\n     *\n     * @function KeyboardNavigationHandler#run\n     * @param {global.KeyboardEvent} e\n     * @return {number} Returns a response code indicating whether the run was\n     *      a success/fail/unhandled, or if we should move to next/prev module.\n     */\n    run(e) {\n        const keyCode = e.which || e.keyCode;\n        let response = this.response.noHandler;\n        const handlerCodeSet = KeyboardNavigationHandler_find(this.keyCodeMap, function (codeSet) {\n            return codeSet[0].indexOf(keyCode) > -1;\n        });\n        if (handlerCodeSet) {\n            response = handlerCodeSet[1].call(this, keyCode, e);\n        }\n        else if (keyCode === 9) {\n            // Default tab handler, move to next/prev module\n            response = this.response[e.shiftKey ? 'prev' : 'next'];\n        }\n        return response;\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Accessibility_KeyboardNavigationHandler = (KeyboardNavigationHandler);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * Options for the keyboard navigation handler.\n *\n * @interface Highcharts.KeyboardNavigationHandlerOptionsObject\n */ /**\n* An array containing pairs of an array of keycodes, mapped to a handler\n* function. When the keycode is received, the handler is called with the\n* keycode as parameter.\n* @name Highcharts.KeyboardNavigationHandlerOptionsObject#keyCodeMap\n* @type {Array<Array<Array<number>, Function>>}\n*/ /**\n* Function to run on initialization of module.\n* @name Highcharts.KeyboardNavigationHandlerOptionsObject#init\n* @type {Function}\n*/ /**\n* Function to run before moving to next/prev module. Receives moving direction\n* as parameter: +1 for next, -1 for previous.\n* @name Highcharts.KeyboardNavigationHandlerOptionsObject#terminate\n* @type {Function|undefined}\n*/ /**\n* Function to run to validate module. Should return false if module should not\n* run, true otherwise. Receives chart as parameter.\n* @name Highcharts.KeyboardNavigationHandlerOptionsObject#validate\n* @type {Function|undefined}\n*/\n(''); // Keeps doclets above in JS file\n\n;// ./code/es-modules/Accessibility/Components/ContainerComponent.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Accessibility component for chart container.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\n\nconst { unhideChartElementFromAT: ContainerComponent_unhideChartElementFromAT, getChartTitle: ContainerComponent_getChartTitle } = Utils_ChartUtilities;\n\nconst { doc: ContainerComponent_doc } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { stripHTMLTagsFromString: ContainerComponent_stripHTMLTags } = Utils_HTMLUtilities;\n/**\n * The ContainerComponent class\n *\n * @private\n * @class\n * @name Highcharts.ContainerComponent\n */\nclass ContainerComponent extends Accessibility_AccessibilityComponent {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * Called on first render/updates to the chart, including options changes.\n     */\n    onChartUpdate() {\n        this.handleSVGTitleElement();\n        this.setSVGContainerLabel();\n        this.setGraphicContainerAttrs();\n        this.setRenderToAttrs();\n        this.makeCreditsAccessible();\n    }\n    /**\n     * @private\n     */\n    handleSVGTitleElement() {\n        const chart = this.chart, titleId = 'highcharts-title-' + chart.index, titleContents = ContainerComponent_stripHTMLTags(chart.langFormat('accessibility.svgContainerTitle', {\n            chartTitle: ContainerComponent_getChartTitle(chart)\n        }));\n        if (titleContents.length) {\n            const titleElement = this.svgTitleElement =\n                this.svgTitleElement || ContainerComponent_doc.createElementNS('http://www.w3.org/2000/svg', 'title');\n            titleElement.textContent = titleContents;\n            titleElement.id = titleId;\n            chart.renderTo.insertBefore(titleElement, chart.renderTo.firstChild);\n        }\n    }\n    /**\n     * @private\n     */\n    setSVGContainerLabel() {\n        const chart = this.chart, svgContainerLabel = chart.langFormat('accessibility.svgContainerLabel', {\n            chartTitle: ContainerComponent_getChartTitle(chart)\n        });\n        if (chart.renderer.box && svgContainerLabel.length) {\n            chart.renderer.box.setAttribute('aria-label', svgContainerLabel);\n        }\n    }\n    /**\n     * @private\n     */\n    setGraphicContainerAttrs() {\n        const chart = this.chart, label = chart.langFormat('accessibility.graphicContainerLabel', {\n            chartTitle: ContainerComponent_getChartTitle(chart)\n        });\n        if (label.length) {\n            chart.container.setAttribute('aria-label', label);\n        }\n    }\n    /**\n     * Set attributes on the chart container element.\n     * @private\n     */\n    setRenderToAttrs() {\n        const chart = this.chart, shouldHaveLandmark = chart.options.accessibility\n            .landmarkVerbosity !== 'disabled', containerLabel = chart.langFormat('accessibility.chartContainerLabel', {\n            title: ContainerComponent_getChartTitle(chart),\n            chart: chart\n        });\n        if (containerLabel) {\n            chart.renderTo.setAttribute('role', shouldHaveLandmark ? 'region' : 'group');\n            chart.renderTo.setAttribute('aria-label', containerLabel);\n        }\n    }\n    /**\n     * @private\n     */\n    makeCreditsAccessible() {\n        const chart = this.chart, credits = chart.credits;\n        if (credits) {\n            if (credits.textStr) {\n                credits.element.setAttribute('aria-label', chart.langFormat('accessibility.credits', {\n                    creditsStr: ContainerComponent_stripHTMLTags(credits.textStr, chart.renderer.forExport)\n                }));\n            }\n            ContainerComponent_unhideChartElementFromAT(chart, credits.element);\n        }\n    }\n    /**\n     * Empty handler to just set focus on chart\n     * @private\n     */\n    getKeyboardNavigation() {\n        const chart = this.chart;\n        return new Accessibility_KeyboardNavigationHandler(chart, {\n            keyCodeMap: [],\n            validate: function () {\n                return true;\n            },\n            init: function () {\n                const a11y = chart.accessibility;\n                if (a11y) {\n                    a11y.keyboardNavigation.tabindexContainer.focus();\n                }\n            }\n        });\n    }\n    /**\n     * Accessibility disabled/chart destroyed.\n     */\n    destroy() {\n        this.chart.renderTo.setAttribute('aria-hidden', true);\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Components_ContainerComponent = (ContainerComponent);\n\n;// ./code/es-modules/Accessibility/FocusBorder.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Extend SVG and Chart classes with focus border capabilities.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { addEvent: FocusBorder_addEvent, pick: FocusBorder_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Composition\n *\n * */\nvar FocusBorderComposition;\n(function (FocusBorderComposition) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Constants\n     *\n     * */\n    // Attributes that trigger a focus border update\n    const svgElementBorderUpdateTriggers = [\n        'x', 'y', 'transform', 'width', 'height', 'r', 'd', 'stroke-width'\n    ];\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    function compose(ChartClass, SVGElementClass) {\n        const chartProto = ChartClass.prototype, svgElementProto = SVGElementClass.prototype;\n        if (!chartProto.renderFocusBorder) {\n            chartProto.renderFocusBorder = chartRenderFocusBorder;\n            chartProto.setFocusToElement = chartSetFocusToElement;\n        }\n        if (!svgElementProto.addFocusBorder) {\n            svgElementProto.addFocusBorder = svgElementAddFocusBorder;\n            svgElementProto.removeFocusBorder = svgElementRemoveFocusBorder;\n        }\n    }\n    FocusBorderComposition.compose = compose;\n    /**\n     * Redraws the focus border on the currently focused element.\n     *\n     * @private\n     * @function Highcharts.Chart#renderFocusBorder\n     */\n    function chartRenderFocusBorder() {\n        const focusElement = this.focusElement, focusBorderOptions = this.options.accessibility.keyboardNavigation.focusBorder;\n        if (focusElement) {\n            focusElement.removeFocusBorder();\n            if (focusBorderOptions.enabled) {\n                focusElement.addFocusBorder(focusBorderOptions.margin, {\n                    stroke: focusBorderOptions.style.color,\n                    strokeWidth: focusBorderOptions.style.lineWidth,\n                    r: focusBorderOptions.style.borderRadius\n                });\n            }\n        }\n    }\n    /**\n     * Set chart's focus to an SVGElement. Calls focus() on it, and draws the\n     * focus border. This is used by multiple components.\n     *\n     * @private\n     * @function Highcharts.Chart#setFocusToElement\n     *\n     * @param {Highcharts.SVGElement} svgElement\n     * Element to draw the border around.\n     *\n     * @param {SVGDOMElement|HTMLDOMElement} [focusElement]\n     * If supplied, it draws the border around svgElement and sets the focus to\n     * focusElement.\n     */\n    function chartSetFocusToElement(svgElement, focusElement) {\n        const focusBorderOptions = this.options.accessibility.keyboardNavigation.focusBorder, browserFocusElement = focusElement || svgElement.element;\n        // Set browser focus if possible\n        if (browserFocusElement &&\n            browserFocusElement.focus) {\n            // If there is no focusin-listener, add one to work around Edge\n            // where Narrator is not reading out points despite calling focus().\n            if (!(browserFocusElement.hcEvents &&\n                browserFocusElement.hcEvents.focusin)) {\n                FocusBorder_addEvent(browserFocusElement, 'focusin', function () { });\n            }\n            browserFocusElement.focus();\n            // Hide default focus ring\n            if (focusBorderOptions.hideBrowserFocusOutline) {\n                browserFocusElement.style.outline = 'none';\n            }\n        }\n        if (this.focusElement) {\n            this.focusElement.removeFocusBorder();\n        }\n        this.focusElement = svgElement;\n        this.renderFocusBorder();\n    }\n    /**\n     * Add hook to destroy focus border if SVG element is destroyed, unless\n     * hook already exists.\n     * @private\n     * @param el Element to add destroy hook to\n     */\n    function svgElementAddDestroyFocusBorderHook(el) {\n        if (el.focusBorderDestroyHook) {\n            return;\n        }\n        const origDestroy = el.destroy;\n        el.destroy = function () {\n            if (el.focusBorder && el.focusBorder.destroy) {\n                el.focusBorder.destroy();\n            }\n            return origDestroy.apply(el, arguments);\n        };\n        el.focusBorderDestroyHook = origDestroy;\n    }\n    /**\n     * Add focus border functionality to SVGElements. Draws a new rect on top of\n     * element around its bounding box. This is used by multiple components.\n     *\n     * @private\n     * @function Highcharts.SVGElement#addFocusBorder\n     *\n     * @param {number} margin\n     *\n     * @param {SVGAttributes} attribs\n     */\n    function svgElementAddFocusBorder(margin, attribs) {\n        // Allow updating by just adding new border\n        if (this.focusBorder) {\n            this.removeFocusBorder();\n        }\n        // Add the border rect\n        const bb = this.getBBox(), pad = FocusBorder_pick(margin, 3), parent = this.parentGroup, scaleX = this.scaleX || parent && parent.scaleX, scaleY = this.scaleY || parent && parent.scaleY, oneDefined = scaleX ? !scaleY : scaleY, scaleBoth = oneDefined ? Math.abs(scaleX || scaleY || 1) :\n            (Math.abs(scaleX || 1) + Math.abs(scaleY || 1)) / 2, lineHeight = this.renderer.fontMetrics(this).h;\n        bb.x += this.translateX ? this.translateX : 0;\n        bb.y += this.translateY ? this.translateY : 0;\n        let borderPosX = bb.x - pad, borderPosY = bb.y - pad, borderWidth = bb.width + 2 * pad, borderHeight = bb.height + 2 * pad;\n        /**\n         * For text elements, apply x and y offset, #11397.\n         * @private\n         */\n        function getTextAnchorCorrection(text) {\n            let posXCorrection = 0, posYCorrection = 0;\n            if (text.attr('text-anchor') === 'middle') {\n                posXCorrection = posYCorrection = 0.5;\n            }\n            else if (!text.rotation) {\n                posYCorrection = 0.75;\n            }\n            else {\n                posXCorrection = 0.25;\n            }\n            return {\n                x: posXCorrection,\n                y: posYCorrection\n            };\n        }\n        const isLabel = !!this.text;\n        if (this.element.nodeName === 'text' || isLabel) {\n            const isRotated = !!this.rotation;\n            const correction = !isLabel ? getTextAnchorCorrection(this) :\n                {\n                    x: isRotated ? 1 : 0,\n                    y: 0\n                };\n            const attrX = +this.attr('x');\n            const attrY = +this.attr('y');\n            if (!isNaN(attrX)) {\n                borderPosX = attrX - (bb.width * correction.x) - pad;\n            }\n            if (!isNaN(attrY)) {\n                // Correct by line height if \"text-achor\" == \"start\", #19335.\n                const dim = this.attr('text-anchor') === 'start' ?\n                    lineHeight :\n                    bb.height;\n                borderPosY = attrY - (dim * correction.y) - pad;\n            }\n            if (isLabel && isRotated) {\n                const temp = borderWidth;\n                borderWidth = borderHeight;\n                borderHeight = temp;\n                if (!isNaN(attrX)) {\n                    borderPosX = attrX - (bb.height * correction.x) - pad;\n                }\n                if (!isNaN(attrY)) {\n                    borderPosY = attrY - (bb.width * correction.y) - pad;\n                }\n            }\n        }\n        this.focusBorder = this.renderer.rect(borderPosX, borderPosY, borderWidth, borderHeight, parseInt((attribs && attribs.r || 0).toString(), 10) / scaleBoth)\n            .addClass('highcharts-focus-border')\n            .attr({\n            zIndex: 99\n        })\n            .add(parent);\n        if (!this.renderer.styledMode) {\n            this.focusBorder.attr({\n                stroke: attribs && attribs.stroke,\n                'stroke-width': (attribs && attribs.strokeWidth || 0) / scaleBoth\n            });\n        }\n        avgElementAddUpdateFocusBorderHooks(this, margin, attribs);\n        svgElementAddDestroyFocusBorderHook(this);\n    }\n    /**\n     * Add hooks to update the focus border of an element when the element\n     * size/position is updated, unless already added.\n     * @private\n     * @param el Element to add update hooks to\n     * @param updateParams Parameters to pass through to addFocusBorder when updating.\n     */\n    function avgElementAddUpdateFocusBorderHooks(el, ...updateParams) {\n        if (el.focusBorderUpdateHooks) {\n            return;\n        }\n        el.focusBorderUpdateHooks = {};\n        svgElementBorderUpdateTriggers.forEach((trigger) => {\n            const setterKey = trigger + 'Setter';\n            const origSetter = el[setterKey] || el._defaultSetter;\n            el.focusBorderUpdateHooks[setterKey] = origSetter;\n            el[setterKey] = function () {\n                const ret = origSetter.apply(el, arguments);\n                el.addFocusBorder.apply(el, updateParams);\n                return ret;\n            };\n        });\n    }\n    /**\n     * Remove hook from SVG element added by addDestroyFocusBorderHook, if\n     * existing.\n     * @private\n     * @param el Element to remove destroy hook from\n     */\n    function svgElementRemoveDestroyFocusBorderHook(el) {\n        if (!el.focusBorderDestroyHook) {\n            return;\n        }\n        el.destroy = el.focusBorderDestroyHook;\n        delete el.focusBorderDestroyHook;\n    }\n    /**\n     * Add focus border functionality to SVGElements. Draws a new rect on top of\n     * element around its bounding box. This is used by multiple components.\n     * @private\n     * @function Highcharts.SVGElement#removeFocusBorder\n     */\n    function svgElementRemoveFocusBorder() {\n        svgElementRemoveUpdateFocusBorderHooks(this);\n        svgElementRemoveDestroyFocusBorderHook(this);\n        if (this.focusBorder) {\n            this.focusBorder.destroy();\n            delete this.focusBorder;\n        }\n    }\n    /**\n     * Remove hooks from SVG element added by addUpdateFocusBorderHooks, if\n     * existing.\n     * @private\n     * @param el Element to remove update hooks from\n     */\n    function svgElementRemoveUpdateFocusBorderHooks(el) {\n        if (!el.focusBorderUpdateHooks) {\n            return;\n        }\n        Object.keys(el.focusBorderUpdateHooks).forEach((setterKey) => {\n            const origSetter = el.focusBorderUpdateHooks[setterKey];\n            if (origSetter === el._defaultSetter) {\n                delete el[setterKey];\n            }\n            else {\n                el[setterKey] = origSetter;\n            }\n        });\n        delete el.focusBorderUpdateHooks;\n    }\n})(FocusBorderComposition || (FocusBorderComposition = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const FocusBorder = (FocusBorderComposition);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"AST\"],\"commonjs\":[\"highcharts\",\"AST\"],\"commonjs2\":[\"highcharts\",\"AST\"],\"root\":[\"Highcharts\",\"AST\"]}\nvar highcharts_AST_commonjs_highcharts_AST_commonjs2_highcharts_AST_root_Highcharts_AST_ = __webpack_require__(660);\nvar highcharts_AST_commonjs_highcharts_AST_commonjs2_highcharts_AST_root_Highcharts_AST_default = /*#__PURE__*/__webpack_require__.n(highcharts_AST_commonjs_highcharts_AST_commonjs2_highcharts_AST_root_Highcharts_AST_);\n;// ./code/es-modules/Accessibility/Utils/Announcer.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Create announcer to speak messages to screen readers and other AT.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\n\nconst { doc: Announcer_doc } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addClass: Announcer_addClass, visuallyHideElement: Announcer_visuallyHideElement } = Utils_HTMLUtilities;\n\nconst { attr } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Class\n *\n * */\nclass Announcer {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(chart, type) {\n        this.chart = chart;\n        this.domElementProvider = new Utils_DOMElementProvider();\n        this.announceRegion = this.addAnnounceRegion(type);\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    destroy() {\n        this.domElementProvider.destroyCreatedElements();\n    }\n    announce(message) {\n        highcharts_AST_commonjs_highcharts_AST_commonjs2_highcharts_AST_root_Highcharts_AST_default().setElementHTML(this.announceRegion, message);\n        // Delete contents after a little while to avoid user finding the live\n        // region in the DOM.\n        if (this.clearAnnouncementRegionTimer) {\n            clearTimeout(this.clearAnnouncementRegionTimer);\n        }\n        this.clearAnnouncementRegionTimer = setTimeout(() => {\n            this.announceRegion.innerHTML = (highcharts_AST_commonjs_highcharts_AST_commonjs2_highcharts_AST_root_Highcharts_AST_default()).emptyHTML;\n            delete this.clearAnnouncementRegionTimer;\n        }, 3000);\n    }\n    addAnnounceRegion(type) {\n        const chartContainer = (this.chart.announcerContainer || this.createAnnouncerContainer()), div = this.domElementProvider.createElement('div');\n        attr(div, {\n            'aria-hidden': false,\n            'aria-live': type,\n            'aria-atomic': true\n        });\n        if (this.chart.styledMode) {\n            Announcer_addClass(div, 'highcharts-visually-hidden');\n        }\n        else {\n            Announcer_visuallyHideElement(div);\n        }\n        chartContainer.appendChild(div);\n        return div;\n    }\n    createAnnouncerContainer() {\n        const chart = this.chart, container = Announcer_doc.createElement('div');\n        attr(container, {\n            'aria-hidden': false,\n            'class': 'highcharts-announcer-container'\n        });\n        container.style.position = 'relative';\n        chart.renderTo.insertBefore(container, chart.renderTo.firstChild);\n        chart.announcerContainer = container;\n        return container;\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Utils_Announcer = (Announcer);\n\n;// ./code/es-modules/Accessibility/Components/AnnotationsA11y.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Annotations accessibility code.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { escapeStringForHTML: AnnotationsA11y_escapeStringForHTML, stripHTMLTagsFromString: AnnotationsA11y_stripHTMLTagsFromString } = Utils_HTMLUtilities;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Get list of all annotation labels in the chart.\n *\n * @private\n * @param {Highcharts.Chart} chart The chart to get annotation info on.\n * @return {Array<object>} The labels, or empty array if none.\n */\nfunction getChartAnnotationLabels(chart) {\n    const annotations = chart.annotations || [];\n    return annotations.reduce((acc, cur) => {\n        if (cur.options &&\n            cur.options.visible !== false) {\n            acc = acc.concat(cur.labels);\n        }\n        return acc;\n    }, []);\n}\n/**\n * Get the text of an annotation label.\n *\n * @private\n * @param {Object} label The annotation label object\n * @return {string} The text in the label.\n */\nfunction getLabelText(label) {\n    return ((label.options &&\n        label.options.accessibility &&\n        label.options.accessibility.description) ||\n        (label.graphic &&\n            label.graphic.text &&\n            label.graphic.text.textStr) ||\n        '');\n}\n/**\n * Describe an annotation label.\n *\n * @private\n * @param {Object} label The annotation label object to describe\n * @return {string} The description for the label.\n */\nfunction getAnnotationLabelDescription(label) {\n    const a11yDesc = (label.options &&\n        label.options.accessibility &&\n        label.options.accessibility.description);\n    if (a11yDesc) {\n        return a11yDesc;\n    }\n    const chart = label.chart;\n    const labelText = getLabelText(label);\n    const points = label.points;\n    const getAriaLabel = (point) => (point.graphic &&\n        point.graphic.element &&\n        point.graphic.element.getAttribute('aria-label') ||\n        '');\n    const getValueDesc = (point) => {\n        const valDesc = (point.accessibility &&\n            point.accessibility.valueDescription ||\n            getAriaLabel(point));\n        const seriesName = (point &&\n            point.series.name ||\n            '');\n        return (seriesName ? seriesName + ', ' : '') + 'data point ' + valDesc;\n    };\n    const pointValueDescriptions = points\n        .filter((p) => !!p.graphic) // Filter out mock points\n        .map(getValueDesc)\n        // Filter out points we can't describe\n        .filter((desc) => !!desc);\n    const numPoints = pointValueDescriptions.length;\n    const pointsSelector = numPoints > 1 ?\n        'MultiplePoints' : numPoints ?\n        'SinglePoint' : 'NoPoints';\n    const langFormatStr = ('accessibility.screenReaderSection.annotations.description' +\n        pointsSelector);\n    const context = {\n        annotationText: labelText,\n        annotation: label,\n        numPoints: numPoints,\n        annotationPoint: pointValueDescriptions[0],\n        additionalAnnotationPoints: pointValueDescriptions.slice(1)\n    };\n    return chart.langFormat(langFormatStr, context);\n}\n/**\n * Return array of HTML strings for each annotation label in the chart.\n *\n * @private\n * @param {Highcharts.Chart} chart The chart to get annotation info on.\n * @return {Array<string>} Array of strings with HTML content for each annotation label.\n */\nfunction getAnnotationListItems(chart) {\n    const labels = getChartAnnotationLabels(chart);\n    return labels.map((label) => {\n        const desc = AnnotationsA11y_escapeStringForHTML(AnnotationsA11y_stripHTMLTagsFromString(getAnnotationLabelDescription(label), chart.renderer.forExport));\n        return desc ? `<li>${desc}</li>` : '';\n    });\n}\n/**\n * Return the annotation info for a chart as string.\n *\n * @private\n * @param {Highcharts.Chart} chart The chart to get annotation info on.\n * @return {string} String with HTML content or empty string if no annotations.\n */\nfunction getAnnotationsInfoHTML(chart) {\n    const annotations = chart.annotations;\n    if (!(annotations && annotations.length)) {\n        return '';\n    }\n    const annotationItems = getAnnotationListItems(chart);\n    return `<ul style=\"list-style-type: none\">${annotationItems.join(' ')}</ul>`;\n}\n/**\n * Return the texts for the annotation(s) connected to a point, or empty array\n * if none.\n *\n * @private\n * @param {Highcharts.Point} point The data point to get the annotation info from.\n * @return {Array<string>} Annotation texts\n */\nfunction getPointAnnotationTexts(point) {\n    const labels = getChartAnnotationLabels(point.series.chart);\n    const pointLabels = labels\n        .filter((label) => label.points.indexOf(point) > -1);\n    if (!pointLabels.length) {\n        return [];\n    }\n    return pointLabels.map((label) => `${getLabelText(label)}`);\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst AnnotationsA11y = {\n    getAnnotationsInfoHTML,\n    getAnnotationLabelDescription,\n    getAnnotationListItems,\n    getPointAnnotationTexts\n};\n/* harmony default export */ const Components_AnnotationsA11y = (AnnotationsA11y);\n\n;// ./code/es-modules/Accessibility/Components/InfoRegionsComponent.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Accessibility component for chart info region and table.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\n\n\nconst { getAnnotationsInfoHTML: InfoRegionsComponent_getAnnotationsInfoHTML } = Components_AnnotationsA11y;\n\n\nconst { getAxisDescription: InfoRegionsComponent_getAxisDescription, getAxisRangeDescription: InfoRegionsComponent_getAxisRangeDescription, getChartTitle: InfoRegionsComponent_getChartTitle, unhideChartElementFromAT: InfoRegionsComponent_unhideChartElementFromAT } = Utils_ChartUtilities;\n\nconst { format: InfoRegionsComponent_format } = (highcharts_Templating_commonjs_highcharts_Templating_commonjs2_highcharts_Templating_root_Highcharts_Templating_default());\n\nconst { doc: InfoRegionsComponent_doc } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addClass: InfoRegionsComponent_addClass, getElement: InfoRegionsComponent_getElement, getHeadingTagNameForElement: InfoRegionsComponent_getHeadingTagNameForElement, stripHTMLTagsFromString: InfoRegionsComponent_stripHTMLTagsFromString, visuallyHideElement: InfoRegionsComponent_visuallyHideElement } = Utils_HTMLUtilities;\n\nconst { attr: InfoRegionsComponent_attr, pick: InfoRegionsComponent_pick, replaceNested } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/* eslint-disable valid-jsdoc */\n/**\n * @private\n */\nfunction getTableSummary(chart) {\n    return chart.langFormat('accessibility.table.tableSummary', { chart: chart });\n}\n/**\n * @private\n */\nfunction getTypeDescForMapChart(chart, formatContext) {\n    return formatContext.mapTitle ?\n        chart.langFormat('accessibility.chartTypes.mapTypeDescription', formatContext) :\n        chart.langFormat('accessibility.chartTypes.unknownMap', formatContext);\n}\n/**\n * @private\n */\nfunction getTypeDescForCombinationChart(chart, formatContext) {\n    return chart.langFormat('accessibility.chartTypes.combinationChart', formatContext);\n}\n/**\n * @private\n */\nfunction getTypeDescForEmptyChart(chart, formatContext) {\n    return chart.langFormat('accessibility.chartTypes.emptyChart', formatContext);\n}\n/**\n * @private\n */\nfunction buildTypeDescriptionFromSeries(chart, types, context) {\n    const firstType = types[0], typeExplanation = chart.langFormat('accessibility.seriesTypeDescriptions.' + firstType, context), multi = chart.series && chart.series.length < 2 ? 'Single' : 'Multiple';\n    return (chart.langFormat('accessibility.chartTypes.' + firstType + multi, context) ||\n        chart.langFormat('accessibility.chartTypes.default' + multi, context)) + (typeExplanation ? ' ' + typeExplanation : '');\n}\n/**\n * Return simplified explanation of chart type. Some types will not be\n * familiar to most users, but in those cases we try to add an explanation\n * of the type.\n *\n * @private\n * @function Highcharts.Chart#getTypeDescription\n * @param {Array<string>} types The series types in this chart.\n * @return {string} The text description of the chart type.\n */\nfunction getTypeDescription(chart, types) {\n    const firstType = types[0], firstSeries = chart.series && chart.series[0] || {}, mapTitle = chart.mapView && chart.mapView.geoMap &&\n        chart.mapView.geoMap.title, formatContext = {\n        numSeries: chart.series.length,\n        numPoints: firstSeries.points && firstSeries.points.length,\n        chart,\n        mapTitle\n    };\n    if (!firstType) {\n        return getTypeDescForEmptyChart(chart, formatContext);\n    }\n    if (firstType === 'map' || firstType === 'tiledwebmap') {\n        return getTypeDescForMapChart(chart, formatContext);\n    }\n    if (chart.types.length > 1) {\n        return getTypeDescForCombinationChart(chart, formatContext);\n    }\n    return buildTypeDescriptionFromSeries(chart, types, formatContext);\n}\n/**\n * @private\n */\nfunction stripEmptyHTMLTags(str) {\n    // Scan alert #[71]: Loop for nested patterns\n    return replaceNested(str, [/<([\\w\\-.:!]+)\\b[^<>]*>\\s*<\\/\\1>/g, '']);\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * The InfoRegionsComponent class\n *\n * @private\n * @class\n * @name Highcharts.InfoRegionsComponent\n */\nclass InfoRegionsComponent extends Accessibility_AccessibilityComponent {\n    constructor() {\n        /* *\n         *\n         *  Properties\n         *\n         * */\n        super(...arguments);\n        this.screenReaderSections = {};\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * Init the component\n     * @private\n     */\n    init() {\n        const chart = this.chart;\n        const component = this;\n        this.initRegionsDefinitions();\n        this.addEvent(chart, 'aftergetTableAST', function (e) {\n            component.onDataTableCreated(e);\n        });\n        this.addEvent(chart, 'afterViewData', function (e) {\n            if (e.wasHidden) {\n                component.dataTableDiv = e.element;\n                // Use a small delay to give browsers & AT time to\n                // register the new table.\n                setTimeout(function () {\n                    component.focusDataTable();\n                }, 300);\n            }\n        });\n        this.addEvent(chart, 'afterHideData', function () {\n            if (component.viewDataTableButton) {\n                component.viewDataTableButton\n                    .setAttribute('aria-expanded', 'false');\n            }\n        });\n        if (chart.exporting) {\n            // Needed when print logic in exporting does not trigger\n            // rerendering thus repositioning of screen reader DOM elements\n            // (#21554)\n            this.addEvent(chart, 'afterPrint', function () {\n                component.updateAllScreenReaderSections();\n            });\n        }\n        this.announcer = new Utils_Announcer(chart, 'assertive');\n    }\n    /**\n     * @private\n     */\n    initRegionsDefinitions() {\n        const component = this, accessibilityOptions = this.chart.options.accessibility;\n        this.screenReaderSections = {\n            before: {\n                element: null,\n                buildContent: function (chart) {\n                    const formatter = accessibilityOptions.screenReaderSection\n                        .beforeChartFormatter;\n                    return formatter ? formatter(chart) :\n                        component.defaultBeforeChartFormatter(chart);\n                },\n                insertIntoDOM: function (el, chart) {\n                    chart.renderTo.insertBefore(el, chart.renderTo.firstChild);\n                },\n                afterInserted: function () {\n                    if (typeof component.sonifyButtonId !== 'undefined') {\n                        component.initSonifyButton(component.sonifyButtonId);\n                    }\n                    if (typeof component.dataTableButtonId !== 'undefined') {\n                        component.initDataTableButton(component.dataTableButtonId);\n                    }\n                }\n            },\n            after: {\n                element: null,\n                buildContent: function (chart) {\n                    const formatter = accessibilityOptions.screenReaderSection\n                        .afterChartFormatter;\n                    return formatter ? formatter(chart) :\n                        component.defaultAfterChartFormatter();\n                },\n                insertIntoDOM: function (el, chart) {\n                    chart.renderTo.insertBefore(el, chart.container.nextSibling);\n                },\n                afterInserted: function () {\n                    if (component.chart.accessibility &&\n                        accessibilityOptions.keyboardNavigation.enabled) {\n                        component.chart.accessibility\n                            .keyboardNavigation.updateExitAnchor(); // #15986\n                    }\n                }\n            }\n        };\n    }\n    /**\n     * Called on chart render. Have to update the sections on render, in order\n     * to get a11y info from series.\n     */\n    onChartRender() {\n        this.linkedDescriptionElement = this.getLinkedDescriptionElement();\n        this.setLinkedDescriptionAttrs();\n        this.updateAllScreenReaderSections();\n    }\n    updateAllScreenReaderSections() {\n        const component = this;\n        Object.keys(this.screenReaderSections).forEach(function (regionKey) {\n            component.updateScreenReaderSection(regionKey);\n        });\n    }\n    /**\n     * @private\n     */\n    getLinkedDescriptionElement() {\n        const chartOptions = this.chart.options, linkedDescOption = chartOptions.accessibility.linkedDescription;\n        if (!linkedDescOption) {\n            return;\n        }\n        if (typeof linkedDescOption !== 'string') {\n            return linkedDescOption;\n        }\n        const query = InfoRegionsComponent_format(linkedDescOption, this.chart), queryMatch = InfoRegionsComponent_doc.querySelectorAll(query);\n        if (queryMatch.length === 1) {\n            return queryMatch[0];\n        }\n    }\n    /**\n     * @private\n     */\n    setLinkedDescriptionAttrs() {\n        const el = this.linkedDescriptionElement;\n        if (el) {\n            el.setAttribute('aria-hidden', 'true');\n            InfoRegionsComponent_addClass(el, 'highcharts-linked-description');\n        }\n    }\n    /**\n     * @private\n     * @param {string} regionKey\n     * The name/key of the region to update\n     */\n    updateScreenReaderSection(regionKey) {\n        const chart = this.chart;\n        const region = this.screenReaderSections[regionKey];\n        const content = region.buildContent(chart);\n        const sectionDiv = region.element = (region.element || this.createElement('div'));\n        const hiddenDiv = (sectionDiv.firstChild || this.createElement('div'));\n        if (content) {\n            this.setScreenReaderSectionAttribs(sectionDiv, regionKey);\n            highcharts_AST_commonjs_highcharts_AST_commonjs2_highcharts_AST_root_Highcharts_AST_default().setElementHTML(hiddenDiv, content);\n            sectionDiv.appendChild(hiddenDiv);\n            region.insertIntoDOM(sectionDiv, chart);\n            if (chart.styledMode) {\n                InfoRegionsComponent_addClass(hiddenDiv, 'highcharts-visually-hidden');\n            }\n            else {\n                InfoRegionsComponent_visuallyHideElement(hiddenDiv);\n            }\n            InfoRegionsComponent_unhideChartElementFromAT(chart, hiddenDiv);\n            if (region.afterInserted) {\n                region.afterInserted();\n            }\n        }\n        else {\n            if (sectionDiv.parentNode) {\n                sectionDiv.parentNode.removeChild(sectionDiv);\n            }\n            region.element = null;\n        }\n    }\n    /**\n     * Apply a11y attributes to a screen reader info section\n     * @private\n     * @param {Highcharts.HTMLDOMElement} sectionDiv The section element\n     * @param {string} regionKey Name/key of the region we are setting attrs for\n     */\n    setScreenReaderSectionAttribs(sectionDiv, regionKey) {\n        const chart = this.chart, labelText = chart.langFormat('accessibility.screenReaderSection.' + regionKey +\n            'RegionLabel', { chart: chart, chartTitle: InfoRegionsComponent_getChartTitle(chart) }), sectionId = `highcharts-screen-reader-region-${regionKey}-${chart.index}`;\n        InfoRegionsComponent_attr(sectionDiv, {\n            id: sectionId,\n            'aria-label': labelText || void 0\n        });\n        // Sections are wrapped to be positioned relatively to chart in case\n        // elements inside are tabbed to.\n        sectionDiv.style.position = 'relative';\n        if (labelText) {\n            sectionDiv.setAttribute('role', chart.options.accessibility.landmarkVerbosity === 'all' ?\n                'region' : 'group');\n        }\n    }\n    /**\n     * @private\n     */\n    defaultBeforeChartFormatter() {\n        const chart = this.chart, format = chart.options.accessibility.screenReaderSection\n            .beforeChartFormat;\n        if (!format) {\n            return '';\n        }\n        const axesDesc = this.getAxesDescription(), shouldHaveSonifyBtn = (chart.sonify &&\n            chart.options.sonification &&\n            chart.options.sonification.enabled), sonifyButtonId = 'highcharts-a11y-sonify-data-btn-' +\n            chart.index, dataTableButtonId = 'hc-linkto-highcharts-data-table-' +\n            chart.index, annotationsList = InfoRegionsComponent_getAnnotationsInfoHTML(chart), annotationsTitleStr = chart.langFormat('accessibility.screenReaderSection.annotations.heading', { chart: chart }), context = {\n            headingTagName: InfoRegionsComponent_getHeadingTagNameForElement(chart.renderTo),\n            chartTitle: InfoRegionsComponent_getChartTitle(chart),\n            typeDescription: this.getTypeDescriptionText(),\n            chartSubtitle: this.getSubtitleText(),\n            chartLongdesc: this.getLongdescText(),\n            xAxisDescription: axesDesc.xAxis,\n            yAxisDescription: axesDesc.yAxis,\n            playAsSoundButton: shouldHaveSonifyBtn ?\n                this.getSonifyButtonText(sonifyButtonId) : '',\n            viewTableButton: chart.getCSV ?\n                this.getDataTableButtonText(dataTableButtonId) : '',\n            annotationsTitle: annotationsList ? annotationsTitleStr : '',\n            annotationsList: annotationsList\n        }, formattedString = A11yI18n.i18nFormat(format, context, chart);\n        this.dataTableButtonId = dataTableButtonId;\n        this.sonifyButtonId = sonifyButtonId;\n        return stripEmptyHTMLTags(formattedString);\n    }\n    /**\n     * @private\n     */\n    defaultAfterChartFormatter() {\n        const chart = this.chart;\n        const format = chart.options.accessibility.screenReaderSection\n            .afterChartFormat;\n        if (!format) {\n            return '';\n        }\n        const context = { endOfChartMarker: this.getEndOfChartMarkerText() };\n        const formattedString = A11yI18n.i18nFormat(format, context, chart);\n        return stripEmptyHTMLTags(formattedString);\n    }\n    /**\n     * @private\n     */\n    getLinkedDescription() {\n        const el = this.linkedDescriptionElement, content = el && el.innerHTML || '';\n        return InfoRegionsComponent_stripHTMLTagsFromString(content, this.chart.renderer.forExport);\n    }\n    /**\n     * @private\n     */\n    getLongdescText() {\n        const chartOptions = this.chart.options, captionOptions = chartOptions.caption, captionText = captionOptions && captionOptions.text, linkedDescription = this.getLinkedDescription();\n        return (chartOptions.accessibility.description ||\n            linkedDescription ||\n            captionText ||\n            '');\n    }\n    /**\n     * @private\n     */\n    getTypeDescriptionText() {\n        const chart = this.chart;\n        return chart.types ?\n            chart.options.accessibility.typeDescription ||\n                getTypeDescription(chart, chart.types) : '';\n    }\n    /**\n     * @private\n     */\n    getDataTableButtonText(buttonId) {\n        const chart = this.chart, buttonText = chart.langFormat('accessibility.table.viewAsDataTableButtonText', { chart: chart, chartTitle: InfoRegionsComponent_getChartTitle(chart) });\n        return '<button id=\"' + buttonId + '\">' + buttonText + '</button>';\n    }\n    /**\n     * @private\n     */\n    getSonifyButtonText(buttonId) {\n        const chart = this.chart;\n        if (chart.options.sonification &&\n            chart.options.sonification.enabled === false) {\n            return '';\n        }\n        const buttonText = chart.langFormat('accessibility.sonification.playAsSoundButtonText', { chart: chart, chartTitle: InfoRegionsComponent_getChartTitle(chart) });\n        return '<button id=\"' + buttonId + '\">' + buttonText + '</button>';\n    }\n    /**\n     * @private\n     */\n    getSubtitleText() {\n        const subtitle = (this.chart.options.subtitle);\n        return InfoRegionsComponent_stripHTMLTagsFromString(subtitle && subtitle.text || '', this.chart.renderer.forExport);\n    }\n    /**\n     * @private\n     */\n    getEndOfChartMarkerText() {\n        const endMarkerId = `highcharts-end-of-chart-marker-${this.chart.index}`, endMarker = InfoRegionsComponent_getElement(endMarkerId);\n        if (endMarker) {\n            return endMarker.outerHTML;\n        }\n        const chart = this.chart, markerText = chart.langFormat('accessibility.screenReaderSection.endOfChartMarker', { chart: chart }), id = 'highcharts-end-of-chart-marker-' + chart.index;\n        return '<div id=\"' + id + '\">' + markerText + '</div>';\n    }\n    /**\n     * @private\n     * @param {Highcharts.Dictionary<string>} e\n     */\n    onDataTableCreated(e) {\n        const chart = this.chart;\n        if (chart.options.accessibility.enabled) {\n            if (this.viewDataTableButton) {\n                this.viewDataTableButton.setAttribute('aria-expanded', 'true');\n            }\n            const attributes = e.tree.attributes || {};\n            attributes.tabindex = -1;\n            attributes.summary = getTableSummary(chart);\n            e.tree.attributes = attributes;\n        }\n    }\n    /**\n     * @private\n     */\n    focusDataTable() {\n        const tableDiv = this.dataTableDiv, table = tableDiv && tableDiv.getElementsByTagName('table')[0];\n        if (table && table.focus) {\n            table.focus();\n        }\n    }\n    /**\n     * @private\n     * @param {string} sonifyButtonId\n     */\n    initSonifyButton(sonifyButtonId) {\n        const el = this.sonifyButton = InfoRegionsComponent_getElement(sonifyButtonId);\n        const chart = this.chart;\n        const defaultHandler = (e) => {\n            if (el) {\n                el.setAttribute('aria-hidden', 'true');\n                el.setAttribute('aria-label', '');\n            }\n            e.preventDefault();\n            e.stopPropagation();\n            const announceMsg = chart.langFormat('accessibility.sonification.playAsSoundClickAnnouncement', { chart: chart });\n            this.announcer.announce(announceMsg);\n            setTimeout(() => {\n                if (el) {\n                    el.removeAttribute('aria-hidden');\n                    el.removeAttribute('aria-label');\n                }\n                if (chart.sonify) {\n                    chart.sonify();\n                }\n            }, 1000); // Delay to let screen reader speak the button press\n        };\n        if (el && chart) {\n            el.setAttribute('tabindex', -1);\n            el.onclick = function (e) {\n                const onPlayAsSoundClick = (chart.options.accessibility &&\n                    chart.options.accessibility.screenReaderSection\n                        .onPlayAsSoundClick);\n                (onPlayAsSoundClick || defaultHandler).call(this, e, chart);\n            };\n        }\n    }\n    /**\n     * Set attribs and handlers for default viewAsDataTable button if exists.\n     * @private\n     * @param {string} tableButtonId\n     */\n    initDataTableButton(tableButtonId) {\n        const el = this.viewDataTableButton = InfoRegionsComponent_getElement(tableButtonId), chart = this.chart, tableId = tableButtonId.replace('hc-linkto-', '');\n        if (el) {\n            InfoRegionsComponent_attr(el, {\n                tabindex: -1,\n                'aria-expanded': !!InfoRegionsComponent_getElement(tableId)\n            });\n            el.onclick = chart.options.accessibility\n                .screenReaderSection.onViewDataTableClick ||\n                function () {\n                    chart.viewData();\n                };\n        }\n    }\n    /**\n     * Return object with text description of each of the chart's axes.\n     * @private\n     */\n    getAxesDescription() {\n        const chart = this.chart, shouldDescribeColl = function (collectionKey, defaultCondition) {\n            const axes = chart[collectionKey];\n            return axes.length > 1 || axes[0] &&\n                InfoRegionsComponent_pick(axes[0].options.accessibility &&\n                    axes[0].options.accessibility.enabled, defaultCondition);\n        }, hasNoMap = !!chart.types &&\n            chart.types.indexOf('map') < 0 &&\n            chart.types.indexOf('treemap') < 0 &&\n            chart.types.indexOf('tilemap') < 0, hasCartesian = !!chart.hasCartesianSeries, showXAxes = shouldDescribeColl('xAxis', !chart.angular && hasCartesian && hasNoMap), showYAxes = shouldDescribeColl('yAxis', hasCartesian && hasNoMap), desc = {};\n        if (showXAxes) {\n            desc.xAxis = this.getAxisDescriptionText('xAxis');\n        }\n        if (showYAxes) {\n            desc.yAxis = this.getAxisDescriptionText('yAxis');\n        }\n        return desc;\n    }\n    /**\n     * @private\n     */\n    getAxisDescriptionText(collectionKey) {\n        const chart = this.chart;\n        const axes = chart[collectionKey];\n        return chart.langFormat('accessibility.axis.' + collectionKey + 'Description' + (axes.length > 1 ? 'Plural' : 'Singular'), {\n            chart: chart,\n            names: axes.map(function (axis) {\n                return InfoRegionsComponent_getAxisDescription(axis);\n            }),\n            ranges: axes.map(function (axis) {\n                return InfoRegionsComponent_getAxisRangeDescription(axis);\n            }),\n            numAxes: axes.length\n        });\n    }\n    /**\n     * Remove component traces\n     */\n    destroy() {\n        if (this.announcer) {\n            this.announcer.destroy();\n        }\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Components_InfoRegionsComponent = (InfoRegionsComponent);\n\n;// ./code/es-modules/Accessibility/Components/MenuComponent.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Accessibility component for exporting menu.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { attr: MenuComponent_attr } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\nconst { getChartTitle: MenuComponent_getChartTitle, unhideChartElementFromAT: MenuComponent_unhideChartElementFromAT } = Utils_ChartUtilities;\n\nconst { getFakeMouseEvent: MenuComponent_getFakeMouseEvent } = Utils_HTMLUtilities;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Get the wrapped export button element of a chart.\n * @private\n */\nfunction getExportMenuButtonElement(chart) {\n    return chart.exportSVGElements && chart.exportSVGElements[0];\n}\n/**\n * @private\n */\nfunction exportingShouldHaveA11y(chart) {\n    const exportingOpts = chart.options.exporting, exportButton = getExportMenuButtonElement(chart);\n    return !!(exportingOpts &&\n        exportingOpts.enabled !== false &&\n        exportingOpts.accessibility &&\n        exportingOpts.accessibility.enabled &&\n        exportButton &&\n        exportButton.element);\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * The MenuComponent class\n *\n * @private\n * @class\n * @name Highcharts.MenuComponent\n */\nclass MenuComponent extends Accessibility_AccessibilityComponent {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * Init the component\n     */\n    init() {\n        const chart = this.chart, component = this;\n        this.addEvent(chart, 'exportMenuShown', function () {\n            component.onMenuShown();\n        });\n        this.addEvent(chart, 'exportMenuHidden', function () {\n            component.onMenuHidden();\n        });\n        this.createProxyGroup();\n    }\n    /**\n     * @private\n     */\n    onMenuHidden() {\n        const menu = this.chart.exportContextMenu;\n        if (menu) {\n            menu.setAttribute('aria-hidden', 'true');\n        }\n        this.setExportButtonExpandedState('false');\n    }\n    /**\n     * @private\n     */\n    onMenuShown() {\n        const chart = this.chart, menu = chart.exportContextMenu;\n        if (menu) {\n            this.addAccessibleContextMenuAttribs();\n            MenuComponent_unhideChartElementFromAT(chart, menu);\n        }\n        this.setExportButtonExpandedState('true');\n    }\n    /**\n     * @private\n     * @param {string} stateStr\n     */\n    setExportButtonExpandedState(stateStr) {\n        if (this.exportButtonProxy) {\n            this.exportButtonProxy.innerElement.setAttribute('aria-expanded', stateStr);\n        }\n    }\n    /**\n     * Called on each render of the chart. We need to update positioning of the\n     * proxy overlay.\n     */\n    onChartRender() {\n        const chart = this.chart, focusEl = chart.focusElement, a11y = chart.accessibility;\n        this.proxyProvider.clearGroup('chartMenu');\n        this.proxyMenuButton();\n        if (this.exportButtonProxy &&\n            focusEl &&\n            focusEl === chart.exportingGroup) {\n            if (focusEl.focusBorder) {\n                chart.setFocusToElement(focusEl, this.exportButtonProxy.innerElement);\n            }\n            else if (a11y) {\n                a11y.keyboardNavigation.tabindexContainer.focus();\n            }\n        }\n    }\n    /**\n     * @private\n     */\n    proxyMenuButton() {\n        const chart = this.chart;\n        const proxyProvider = this.proxyProvider;\n        const buttonEl = getExportMenuButtonElement(chart);\n        if (exportingShouldHaveA11y(chart) && buttonEl) {\n            this.exportButtonProxy = proxyProvider.addProxyElement('chartMenu', { click: buttonEl }, 'button', {\n                'aria-label': chart.langFormat('accessibility.exporting.menuButtonLabel', {\n                    chart: chart,\n                    chartTitle: MenuComponent_getChartTitle(chart)\n                }),\n                'aria-expanded': false,\n                title: chart.options.lang.contextButtonTitle || null\n            });\n        }\n    }\n    /**\n     * @private\n     */\n    createProxyGroup() {\n        const chart = this.chart;\n        if (chart && this.proxyProvider) {\n            this.proxyProvider.addGroup('chartMenu');\n        }\n    }\n    /**\n     * @private\n     */\n    addAccessibleContextMenuAttribs() {\n        const chart = this.chart, exportList = chart.exportDivElements;\n        if (exportList && exportList.length) {\n            // Set tabindex on the menu items to allow focusing by script\n            // Set role to give screen readers a chance to pick up the contents\n            exportList.forEach((item) => {\n                if (item) {\n                    if (item.tagName === 'LI' &&\n                        !(item.children && item.children.length)) {\n                        item.setAttribute('tabindex', -1);\n                    }\n                    else {\n                        item.setAttribute('aria-hidden', 'true');\n                    }\n                }\n            });\n            // Set accessibility properties on parent div\n            const parentDiv = (exportList[0] && exportList[0].parentNode);\n            if (parentDiv) {\n                MenuComponent_attr(parentDiv, {\n                    'aria-hidden': void 0,\n                    'aria-label': chart.langFormat('accessibility.exporting.chartMenuLabel', { chart }),\n                    role: 'list' // Needed for webkit/VO\n                });\n            }\n        }\n    }\n    /**\n     * Get keyboard navigation handler for this component.\n     * @private\n     */\n    getKeyboardNavigation() {\n        const keys = this.keyCodes, chart = this.chart, component = this;\n        return new Accessibility_KeyboardNavigationHandler(chart, {\n            keyCodeMap: [\n                // Arrow prev handler\n                [\n                    [keys.left, keys.up],\n                    function () {\n                        return component.onKbdPrevious(this);\n                    }\n                ],\n                // Arrow next handler\n                [\n                    [keys.right, keys.down],\n                    function () {\n                        return component.onKbdNext(this);\n                    }\n                ],\n                // Click handler\n                [\n                    [keys.enter, keys.space],\n                    function () {\n                        return component.onKbdClick(this);\n                    }\n                ]\n            ],\n            // Only run exporting navigation if exporting support exists and is\n            // enabled on chart\n            validate: function () {\n                return !!chart.exporting &&\n                    chart.options.exporting.enabled !== false &&\n                    chart.options.exporting.accessibility.enabled !==\n                        false;\n            },\n            // Focus export menu button\n            init: function () {\n                const proxy = component.exportButtonProxy;\n                const svgEl = component.chart.exportingGroup;\n                if (proxy && svgEl) {\n                    chart.setFocusToElement(svgEl, proxy.innerElement);\n                }\n            },\n            // Hide the menu\n            terminate: function () {\n                chart.hideExportMenu();\n            }\n        });\n    }\n    /**\n     * @private\n     * @param {Highcharts.KeyboardNavigationHandler} keyboardNavigationHandler\n     * @return {number} Response code\n     */\n    onKbdPrevious(keyboardNavigationHandler) {\n        const chart = this.chart;\n        const a11yOptions = chart.options.accessibility;\n        const response = keyboardNavigationHandler.response;\n        // Try to highlight prev item in list. Highlighting e.g.\n        // separators will fail.\n        let i = chart.highlightedExportItemIx || 0;\n        while (i--) {\n            if (chart.highlightExportItem(i)) {\n                return response.success;\n            }\n        }\n        // We failed, so wrap around or move to prev module\n        if (a11yOptions.keyboardNavigation.wrapAround) {\n            chart.highlightLastExportItem();\n            return response.success;\n        }\n        return response.prev;\n    }\n    /**\n     * @private\n     * @param {Highcharts.KeyboardNavigationHandler} keyboardNavigationHandler\n     * @return {number} Response code\n     */\n    onKbdNext(keyboardNavigationHandler) {\n        const chart = this.chart;\n        const a11yOptions = chart.options.accessibility;\n        const response = keyboardNavigationHandler.response;\n        // Try to highlight next item in list. Highlighting e.g.\n        // separators will fail.\n        for (let i = (chart.highlightedExportItemIx || 0) + 1; i < chart.exportDivElements.length; ++i) {\n            if (chart.highlightExportItem(i)) {\n                return response.success;\n            }\n        }\n        // We failed, so wrap around or move to next module\n        if (a11yOptions.keyboardNavigation.wrapAround) {\n            chart.highlightExportItem(0);\n            return response.success;\n        }\n        return response.next;\n    }\n    /**\n     * @private\n     * @param {Highcharts.KeyboardNavigationHandler} keyboardNavigationHandler\n     * @return {number} Response code\n     */\n    onKbdClick(keyboardNavigationHandler) {\n        const chart = this.chart;\n        const curHighlightedItem = chart.exportDivElements[chart.highlightedExportItemIx];\n        const exportButtonElement = getExportMenuButtonElement(chart).element;\n        if (chart.openMenu) {\n            this.fakeClickEvent(curHighlightedItem);\n        }\n        else {\n            this.fakeClickEvent(exportButtonElement);\n            chart.highlightExportItem(0);\n        }\n        return keyboardNavigationHandler.response.success;\n    }\n}\n/* *\n *\n *  Class Namespace\n *\n * */\n(function (MenuComponent) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    function compose(ChartClass) {\n        const chartProto = ChartClass.prototype;\n        if (!chartProto.hideExportMenu) {\n            chartProto.hideExportMenu = chartHideExportMenu;\n            chartProto.highlightExportItem = chartHighlightExportItem;\n            chartProto.highlightLastExportItem = chartHighlightLastExportItem;\n            chartProto.showExportMenu = chartShowExportMenu;\n        }\n    }\n    MenuComponent.compose = compose;\n    /**\n     * Show the export menu and focus the first item (if exists).\n     *\n     * @private\n     * @function Highcharts.Chart#showExportMenu\n     */\n    function chartShowExportMenu() {\n        const exportButton = getExportMenuButtonElement(this);\n        if (exportButton) {\n            const el = exportButton.element;\n            if (el.onclick) {\n                el.onclick(MenuComponent_getFakeMouseEvent('click'));\n            }\n        }\n    }\n    /**\n     * @private\n     * @function Highcharts.Chart#hideExportMenu\n     */\n    function chartHideExportMenu() {\n        const chart = this, exportList = chart.exportDivElements;\n        if (exportList && chart.exportContextMenu && chart.openMenu) {\n            // Reset hover states etc.\n            exportList.forEach((el) => {\n                if (el &&\n                    el.className === 'highcharts-menu-item' &&\n                    el.onmouseout) {\n                    el.onmouseout(MenuComponent_getFakeMouseEvent('mouseout'));\n                }\n            });\n            chart.highlightedExportItemIx = 0;\n            // Hide the menu div\n            chart.exportContextMenu.hideMenu();\n            // Make sure the chart has focus and can capture keyboard events\n            chart.container.focus();\n        }\n    }\n    /**\n     * Highlight export menu item by index.\n     *\n     * @private\n     * @function Highcharts.Chart#highlightExportItem\n     */\n    function chartHighlightExportItem(ix) {\n        const listItem = this.exportDivElements && this.exportDivElements[ix];\n        const curHighlighted = this.exportDivElements &&\n            this.exportDivElements[this.highlightedExportItemIx];\n        if (listItem &&\n            listItem.tagName === 'LI' &&\n            !(listItem.children && listItem.children.length)) {\n            // Test if we have focus support for SVG elements\n            const hasSVGFocusSupport = !!(this.renderTo.getElementsByTagName('g')[0] || {}).focus;\n            // Only focus if we can set focus back to the elements after\n            // destroying the menu (#7422)\n            if (listItem.focus && hasSVGFocusSupport) {\n                listItem.focus();\n            }\n            if (curHighlighted && curHighlighted.onmouseout) {\n                curHighlighted.onmouseout(MenuComponent_getFakeMouseEvent('mouseout'));\n            }\n            if (listItem.onmouseover) {\n                listItem.onmouseover(MenuComponent_getFakeMouseEvent('mouseover'));\n            }\n            this.highlightedExportItemIx = ix;\n            return true;\n        }\n        return false;\n    }\n    /**\n     * Try to highlight the last valid export menu item.\n     *\n     * @private\n     * @function Highcharts.Chart#highlightLastExportItem\n     */\n    function chartHighlightLastExportItem() {\n        const chart = this;\n        if (chart.exportDivElements) {\n            let i = chart.exportDivElements.length;\n            while (i--) {\n                if (chart.highlightExportItem(i)) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n})(MenuComponent || (MenuComponent = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Components_MenuComponent = (MenuComponent);\n\n;// ./code/es-modules/Accessibility/KeyboardNavigation.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Main keyboard navigation handling.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { doc: KeyboardNavigation_doc, win: KeyboardNavigation_win } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\nconst { addEvent: KeyboardNavigation_addEvent, defined: KeyboardNavigation_defined, fireEvent: KeyboardNavigation_fireEvent } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\nconst { getElement: KeyboardNavigation_getElement, simulatedEventTarget: KeyboardNavigation_simulatedEventTarget } = Utils_HTMLUtilities;\n/* *\n *\n *  Class\n *\n * */\n/**\n * The KeyboardNavigation class, containing the overall keyboard navigation\n * logic for the chart.\n *\n * @requires modules/accessibility\n *\n * @private\n * @class\n * @param {Highcharts.Chart} chart\n *        Chart object\n * @param {Object} components\n *        Map of component names to AccessibilityComponent objects.\n * @name Highcharts.KeyboardNavigation\n */\nclass KeyboardNavigation {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(chart, components) {\n        this.currentModuleIx = NaN;\n        this.modules = [];\n        this.init(chart, components);\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Initialize the class\n     * @private\n     * @param {Highcharts.Chart} chart\n     *        Chart object\n     * @param {Object} components\n     *        Map of component names to AccessibilityComponent objects.\n     */\n    init(chart, components) {\n        const ep = this.eventProvider = new Utils_EventProvider();\n        this.chart = chart;\n        this.components = components;\n        this.modules = [];\n        this.currentModuleIx = 0;\n        this.update();\n        ep.addEvent(this.tabindexContainer, 'keydown', (e) => this.onKeydown(e));\n        ep.addEvent(this.tabindexContainer, 'focus', (e) => this.onFocus(e));\n        ['mouseup', 'touchend'].forEach((eventName) => ep.addEvent(KeyboardNavigation_doc, eventName, (e) => this.onMouseUp(e)));\n        ['mousedown', 'touchstart'].forEach((eventName) => ep.addEvent(chart.renderTo, eventName, () => {\n            this.isClickingChart = true;\n        }));\n    }\n    /**\n     * Update the modules for the keyboard navigation.\n     * @param {Array<string>} [order]\n     *        Array specifying the tab order of the components.\n     */\n    update(order) {\n        const a11yOptions = this.chart.options.accessibility, keyboardOptions = a11yOptions && a11yOptions.keyboardNavigation, components = this.components;\n        this.updateContainerTabindex();\n        if (keyboardOptions &&\n            keyboardOptions.enabled &&\n            order &&\n            order.length) {\n            // We (still) have keyboard navigation. Update module list\n            this.modules = order.reduce(function (modules, componentName) {\n                const navModules = components[componentName]\n                    .getKeyboardNavigation();\n                return modules.concat(navModules);\n            }, []);\n            this.updateExitAnchor();\n        }\n        else {\n            this.modules = [];\n            this.currentModuleIx = 0;\n            this.removeExitAnchor();\n        }\n    }\n    /**\n     * We use an exit anchor to move focus out of chart whenever we want, by\n     * setting focus to this div and not preventing the default tab action. We\n     * also use this when users come back into the chart by tabbing back, in\n     * order to navigate from the end of the chart.\n     * @private\n     */\n    updateExitAnchor() {\n        const endMarkerId = `highcharts-end-of-chart-marker-${this.chart.index}`, endMarker = KeyboardNavigation_getElement(endMarkerId);\n        this.removeExitAnchor();\n        if (endMarker) {\n            this.makeElementAnExitAnchor(endMarker);\n            this.exitAnchor = endMarker;\n        }\n        else {\n            this.createExitAnchor();\n        }\n    }\n    /**\n     * Move to prev/next module.\n     * @private\n     * @param {number} direction\n     * Direction to move. +1 for next, -1 for prev.\n     * @return {boolean}\n     * True if there was a valid module in direction.\n     */\n    move(direction) {\n        const curModule = this.modules && this.modules[this.currentModuleIx];\n        if (curModule && curModule.terminate) {\n            curModule.terminate(direction);\n        }\n        // Remove existing focus border if any\n        if (this.chart.focusElement) {\n            this.chart.focusElement.removeFocusBorder();\n        }\n        this.currentModuleIx += direction;\n        const newModule = this.modules && this.modules[this.currentModuleIx];\n        if (newModule) {\n            if (newModule.validate && !newModule.validate()) {\n                return this.move(direction); // Invalid module, recurse\n            }\n            if (newModule.init) {\n                newModule.init(direction); // Valid module, init it\n                return true;\n            }\n        }\n        // No module\n        this.currentModuleIx = 0; // Reset counter\n        // Set focus to chart or exit anchor depending on direction\n        this.exiting = true;\n        if (direction > 0) {\n            this.exitAnchor && this.exitAnchor.focus();\n        }\n        else {\n            this.tabindexContainer.focus();\n        }\n        return false;\n    }\n    /**\n     * Function to run on container focus\n     * @private\n     * @param {global.FocusEvent} e Browser focus event.\n     */\n    onFocus(e) {\n        const chart = this.chart, focusComesFromChart = (e.relatedTarget &&\n            chart.container.contains(e.relatedTarget)), a11yOptions = chart.options.accessibility, keyboardOptions = a11yOptions && a11yOptions.keyboardNavigation, enabled = keyboardOptions && keyboardOptions.enabled;\n        // Init keyboard nav if tabbing into chart\n        if (enabled &&\n            !this.exiting &&\n            !this.tabbingInBackwards &&\n            !this.isClickingChart &&\n            !focusComesFromChart) {\n            const ix = this.getFirstValidModuleIx();\n            if (ix !== null) {\n                this.currentModuleIx = ix;\n                this.modules[ix].init(1);\n            }\n        }\n        this.keyboardReset = false;\n        this.exiting = false;\n    }\n    /**\n     * Reset chart navigation state if we mouse click and it's not already\n     * reset. Reset fully if outside the chart, otherwise just hide focus\n     * indicator.\n     * @private\n     */\n    onMouseUp(e) {\n        delete this.isClickingChart;\n        if (!this.keyboardReset &&\n            e.relatedTarget !== KeyboardNavigation_simulatedEventTarget) {\n            const chart = this.chart;\n            if (!e.target ||\n                !chart.container.contains(e.target)) {\n                const curMod = this.modules &&\n                    this.modules[this.currentModuleIx || 0];\n                if (curMod && curMod.terminate) {\n                    curMod.terminate();\n                }\n                this.currentModuleIx = 0;\n            }\n            if (chart.focusElement) {\n                chart.focusElement.removeFocusBorder();\n                delete chart.focusElement;\n            }\n            this.keyboardReset = true;\n        }\n    }\n    /**\n     * Function to run on keydown\n     * @private\n     * @param {global.KeyboardEvent} ev Browser keydown event.\n     */\n    onKeydown(ev) {\n        const e = ev || KeyboardNavigation_win.event, curNavModule = (this.modules &&\n            this.modules.length &&\n            this.modules[this.currentModuleIx]);\n        let preventDefault;\n        const target = e.target;\n        if (target &&\n            target.nodeName === 'INPUT' &&\n            !target.classList.contains('highcharts-a11y-proxy-element')) {\n            return;\n        }\n        // Used for resetting nav state when clicking outside chart\n        this.keyboardReset = false;\n        // Used for sending focus out of the chart by the modules.\n        this.exiting = false;\n        // If there is a nav module for the current index, run it.\n        // Otherwise, we are outside of the chart in some direction.\n        if (curNavModule) {\n            const response = curNavModule.run(e);\n            if (response === curNavModule.response.success) {\n                preventDefault = true;\n            }\n            else if (response === curNavModule.response.prev) {\n                preventDefault = this.move(-1);\n            }\n            else if (response === curNavModule.response.next) {\n                preventDefault = this.move(1);\n            }\n            if (preventDefault) {\n                e.preventDefault();\n                e.stopPropagation();\n            }\n        }\n    }\n    /**\n     * Chart container should have tabindex if navigation is enabled.\n     * @private\n     */\n    updateContainerTabindex() {\n        const a11yOptions = this.chart.options.accessibility, keyboardOptions = a11yOptions && a11yOptions.keyboardNavigation, shouldHaveTabindex = !(keyboardOptions && keyboardOptions.enabled === false), chart = this.chart, container = chart.container;\n        let tabindexContainer;\n        if (chart.renderTo.hasAttribute('tabindex')) {\n            container.removeAttribute('tabindex');\n            tabindexContainer = chart.renderTo;\n        }\n        else {\n            tabindexContainer = container;\n        }\n        this.tabindexContainer = tabindexContainer;\n        const curTabindex = tabindexContainer.getAttribute('tabindex');\n        if (shouldHaveTabindex && !curTabindex) {\n            tabindexContainer.setAttribute('tabindex', '0');\n        }\n        else if (!shouldHaveTabindex) {\n            chart.container.removeAttribute('tabindex');\n        }\n    }\n    /**\n     * Add new exit anchor to the chart.\n     * @private\n     */\n    createExitAnchor() {\n        const chart = this.chart, exitAnchor = this.exitAnchor = KeyboardNavigation_doc.createElement('div');\n        chart.renderTo.appendChild(exitAnchor);\n        this.makeElementAnExitAnchor(exitAnchor);\n    }\n    /**\n     * Add attributes and events to an element to make it function as an\n     * exit anchor.\n     * @private\n     */\n    makeElementAnExitAnchor(el) {\n        const chartTabindex = this.tabindexContainer.getAttribute('tabindex') || 0;\n        el.setAttribute('class', 'highcharts-exit-anchor');\n        el.setAttribute('tabindex', chartTabindex);\n        el.setAttribute('aria-hidden', false);\n        // Handle focus\n        this.addExitAnchorEventsToEl(el);\n    }\n    /**\n     * Destroy the exit anchor and remove from DOM.\n     * @private\n     */\n    removeExitAnchor() {\n        // Remove event from element and from eventRemovers array to prevent\n        // memory leak (#20329).\n        if (this.exitAnchor) {\n            const el = this.eventProvider.eventRemovers.find((el) => el.element === this.exitAnchor);\n            if (el && KeyboardNavigation_defined(el.remover)) {\n                this.eventProvider.removeEvent(el.remover);\n            }\n            if (this.exitAnchor.parentNode) {\n                this.exitAnchor.parentNode.removeChild(this.exitAnchor);\n            }\n            delete this.exitAnchor;\n        }\n    }\n    /**\n     * Add focus handler to exit anchor element.\n     * @private\n     */\n    addExitAnchorEventsToEl(element) {\n        const chart = this.chart, keyboardNavigation = this;\n        this.eventProvider.addEvent(element, 'focus', function (ev) {\n            const e = ev || KeyboardNavigation_win.event, focusComesFromChart = (e.relatedTarget &&\n                chart.container.contains(e.relatedTarget)), comingInBackwards = !(focusComesFromChart || keyboardNavigation.exiting);\n            if (chart.focusElement) {\n                delete chart.focusElement;\n            }\n            if (comingInBackwards) {\n                // Focus the container instead\n                keyboardNavigation.tabbingInBackwards = true;\n                keyboardNavigation.tabindexContainer.focus();\n                delete keyboardNavigation.tabbingInBackwards;\n                e.preventDefault();\n                // Move to last valid keyboard nav module\n                // Note the we don't run it, just set the index\n                if (keyboardNavigation.modules &&\n                    keyboardNavigation.modules.length) {\n                    keyboardNavigation.currentModuleIx =\n                        keyboardNavigation.modules.length - 1;\n                    const curModule = keyboardNavigation.modules[keyboardNavigation.currentModuleIx];\n                    // Validate the module\n                    if (curModule &&\n                        curModule.validate && !curModule.validate()) {\n                        // Invalid.\n                        // Try moving backwards to find next valid.\n                        keyboardNavigation.move(-1);\n                    }\n                    else if (curModule) {\n                        // We have a valid module, init it\n                        curModule.init(-1);\n                    }\n                }\n            }\n            else {\n                // Don't skip the next focus, we only skip once.\n                keyboardNavigation.exiting = false;\n            }\n        });\n    }\n    /**\n     * Get the ix of the first module that either does not require validation or\n     * validates positively.\n     * @private\n     */\n    getFirstValidModuleIx() {\n        const len = this.modules.length;\n        for (let i = 0; i < len; ++i) {\n            const mod = this.modules[i];\n            if (!mod.validate || mod.validate()) {\n                return i;\n            }\n        }\n        return null;\n    }\n    /**\n     * Remove all traces of keyboard navigation.\n     * @private\n     */\n    destroy() {\n        this.removeExitAnchor();\n        this.eventProvider.removeAddedEvents();\n        this.chart.container.removeAttribute('tabindex');\n    }\n}\n/* *\n *\n *  Class Namespace\n *\n * */\n(function (KeyboardNavigation) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Composition function.\n     * @private\n     */\n    function compose(ChartClass) {\n        Components_MenuComponent.compose(ChartClass);\n        const chartProto = ChartClass.prototype;\n        if (!chartProto.dismissPopupContent) {\n            chartProto.dismissPopupContent = chartDismissPopupContent;\n            KeyboardNavigation_addEvent(KeyboardNavigation_doc, 'keydown', documentOnKeydown);\n        }\n        return ChartClass;\n    }\n    KeyboardNavigation.compose = compose;\n    /**\n     * Dismiss popup content in chart, including export menu and tooltip.\n     * @private\n     */\n    function chartDismissPopupContent() {\n        const chart = this;\n        KeyboardNavigation_fireEvent(this, 'dismissPopupContent', {}, function () {\n            if (chart.tooltip) {\n                chart.tooltip.hide(0);\n            }\n            chart.hideExportMenu();\n        });\n    }\n    /**\n     * Add event listener to document to detect ESC key press and dismiss\n     * hover/popup content.\n     * @private\n     */\n    function documentOnKeydown(e) {\n        const keycode = e.which || e.keyCode;\n        const esc = 27;\n        if (keycode === esc && (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).charts) {\n            highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default().charts.forEach((chart) => {\n                if (chart && chart.dismissPopupContent) {\n                    chart.dismissPopupContent();\n                }\n            });\n        }\n    }\n})(KeyboardNavigation || (KeyboardNavigation = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Accessibility_KeyboardNavigation = (KeyboardNavigation);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Legend\"],\"commonjs\":[\"highcharts\",\"Legend\"],\"commonjs2\":[\"highcharts\",\"Legend\"],\"root\":[\"Highcharts\",\"Legend\"]}\nvar highcharts_Legend_commonjs_highcharts_Legend_commonjs2_highcharts_Legend_root_Highcharts_Legend_ = __webpack_require__(632);\nvar highcharts_Legend_commonjs_highcharts_Legend_commonjs2_highcharts_Legend_root_Highcharts_Legend_default = /*#__PURE__*/__webpack_require__.n(highcharts_Legend_commonjs_highcharts_Legend_commonjs2_highcharts_Legend_root_Highcharts_Legend_);\n;// ./code/es-modules/Accessibility/Components/LegendComponent.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Accessibility component for chart legend.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { animObject } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { doc: LegendComponent_doc } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\nconst { addEvent: LegendComponent_addEvent, fireEvent: LegendComponent_fireEvent, isNumber, pick: LegendComponent_pick, syncTimeout } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\nconst { getChartTitle: LegendComponent_getChartTitle } = Utils_ChartUtilities;\n\nconst { stripHTMLTagsFromString: LegendComponent_stripHTMLTags, addClass: LegendComponent_addClass, removeClass: LegendComponent_removeClass } = Utils_HTMLUtilities;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction scrollLegendToItem(legend, itemIx) {\n    const itemPage = (legend.allItems[itemIx].legendItem || {}).pageIx, curPage = legend.currentPage;\n    if (typeof itemPage !== 'undefined' && itemPage + 1 !== curPage) {\n        legend.scroll(1 + itemPage - curPage);\n    }\n}\n/**\n * @private\n */\nfunction shouldDoLegendA11y(chart) {\n    const items = chart.legend && chart.legend.allItems, legendA11yOptions = (chart.options.legend.accessibility || {}), unsupportedColorAxis = chart.colorAxis && chart.colorAxis.some((c) => !c.dataClasses || !c.dataClasses.length);\n    return !!(items && items.length &&\n        !unsupportedColorAxis &&\n        legendA11yOptions.enabled !== false);\n}\n/**\n * @private\n */\nfunction setLegendItemHoverState(hoverActive, item) {\n    const legendItem = item.legendItem || {};\n    item.setState(hoverActive ? 'hover' : '', true);\n    for (const key of ['group', 'label', 'symbol']) {\n        const svgElement = legendItem[key];\n        const element = svgElement && svgElement.element || svgElement;\n        if (element) {\n            LegendComponent_fireEvent(element, hoverActive ? 'mouseover' : 'mouseout');\n        }\n    }\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * The LegendComponent class\n *\n * @private\n * @class\n * @name Highcharts.LegendComponent\n */\nclass LegendComponent extends Accessibility_AccessibilityComponent {\n    constructor() {\n        /* *\n         *\n         *  Properties\n         *\n         * */\n        super(...arguments);\n        this.highlightedLegendItemIx = NaN;\n        this.proxyGroup = null;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Init the component\n     * @private\n     */\n    init() {\n        const component = this;\n        this.recreateProxies();\n        // Note: Chart could create legend dynamically, so events cannot be\n        // tied to the component's chart's current legend.\n        // @todo 1. attach component to created legends\n        // @todo 2. move listeners to composition and access `this.component`\n        this.addEvent((highcharts_Legend_commonjs_highcharts_Legend_commonjs2_highcharts_Legend_root_Highcharts_Legend_default()), 'afterScroll', function () {\n            if (this.chart === component.chart) {\n                component.proxyProvider.updateGroupProxyElementPositions('legend');\n                component.updateLegendItemProxyVisibility();\n                if (component.highlightedLegendItemIx > -1) {\n                    this.chart.highlightLegendItem(component.highlightedLegendItemIx);\n                }\n            }\n        });\n        this.addEvent((highcharts_Legend_commonjs_highcharts_Legend_commonjs2_highcharts_Legend_root_Highcharts_Legend_default()), 'afterPositionItem', function (e) {\n            if (this.chart === component.chart && this.chart.renderer) {\n                component.updateProxyPositionForItem(e.item);\n            }\n        });\n        this.addEvent((highcharts_Legend_commonjs_highcharts_Legend_commonjs2_highcharts_Legend_root_Highcharts_Legend_default()), 'afterRender', function () {\n            if (this.chart === component.chart &&\n                this.chart.renderer &&\n                component.recreateProxies()) {\n                syncTimeout(() => component.proxyProvider\n                    .updateGroupProxyElementPositions('legend'), animObject(LegendComponent_pick(this.chart.renderer.globalAnimation, true)).duration);\n            }\n        });\n    }\n    /**\n     * Update visibility of legend items when using paged legend\n     * @private\n     */\n    updateLegendItemProxyVisibility() {\n        const chart = this.chart;\n        const legend = chart.legend;\n        const items = legend.allItems || [];\n        const curPage = legend.currentPage || 1;\n        const clipHeight = legend.clipHeight || 0;\n        let legendItem;\n        items.forEach((item) => {\n            if (item.a11yProxyElement) {\n                const hasPages = legend.pages && legend.pages.length;\n                const proxyEl = item.a11yProxyElement.element;\n                let hide = false;\n                legendItem = item.legendItem || {};\n                if (hasPages) {\n                    const itemPage = legendItem.pageIx || 0;\n                    const y = legendItem.y || 0;\n                    const h = legendItem.label ?\n                        Math.round(legendItem.label.getBBox().height) :\n                        0;\n                    hide = y + h - legend.pages[itemPage] > clipHeight ||\n                        itemPage !== curPage - 1;\n                }\n                if (hide) {\n                    if (chart.styledMode) {\n                        LegendComponent_addClass(proxyEl, 'highcharts-a11y-invisible');\n                    }\n                    else {\n                        proxyEl.style.visibility = 'hidden';\n                    }\n                }\n                else {\n                    LegendComponent_removeClass(proxyEl, 'highcharts-a11y-invisible');\n                    proxyEl.style.visibility = '';\n                }\n            }\n        });\n    }\n    /**\n     * @private\n     */\n    onChartRender() {\n        if (!shouldDoLegendA11y(this.chart)) {\n            this.removeProxies();\n        }\n    }\n    /**\n     * @private\n     */\n    highlightAdjacentLegendPage(direction) {\n        const chart = this.chart;\n        const legend = chart.legend;\n        const curPageIx = legend.currentPage || 1;\n        const newPageIx = curPageIx + direction;\n        const pages = legend.pages || [];\n        if (newPageIx > 0 && newPageIx <= pages.length) {\n            let i = 0, res;\n            for (const item of legend.allItems) {\n                if (((item.legendItem || {}).pageIx || 0) + 1 === newPageIx) {\n                    res = chart.highlightLegendItem(i);\n                    if (res) {\n                        this.highlightedLegendItemIx = i;\n                    }\n                }\n                ++i;\n            }\n        }\n    }\n    /**\n     * @private\n     */\n    updateProxyPositionForItem(item) {\n        if (item.a11yProxyElement) {\n            item.a11yProxyElement.refreshPosition();\n        }\n    }\n    /**\n     * Returns false if legend a11y is disabled and proxies were not created,\n     * true otherwise.\n     * @private\n     */\n    recreateProxies() {\n        const focusedElement = LegendComponent_doc.activeElement;\n        const proxyGroup = this.proxyGroup;\n        const shouldRestoreFocus = focusedElement && proxyGroup &&\n            proxyGroup.contains(focusedElement);\n        this.removeProxies();\n        if (shouldDoLegendA11y(this.chart)) {\n            this.addLegendProxyGroup();\n            this.proxyLegendItems();\n            this.updateLegendItemProxyVisibility();\n            this.updateLegendTitle();\n            if (shouldRestoreFocus) {\n                this.chart.highlightLegendItem(this.highlightedLegendItemIx);\n            }\n            return true;\n        }\n        return false;\n    }\n    /**\n     * @private\n     */\n    removeProxies() {\n        this.proxyProvider.removeGroup('legend');\n    }\n    /**\n     * @private\n     */\n    updateLegendTitle() {\n        const chart = this.chart;\n        const legendTitle = LegendComponent_stripHTMLTags((chart.legend &&\n            chart.legend.options.title &&\n            chart.legend.options.title.text ||\n            '').replace(/<br ?\\/?>/g, ' '), chart.renderer.forExport);\n        const legendLabel = chart.langFormat('accessibility.legend.legendLabel' + (legendTitle ? '' : 'NoTitle'), {\n            chart,\n            legendTitle,\n            chartTitle: LegendComponent_getChartTitle(chart)\n        });\n        this.proxyProvider.updateGroupAttrs('legend', {\n            'aria-label': legendLabel\n        });\n    }\n    /**\n     * @private\n     */\n    addLegendProxyGroup() {\n        const a11yOptions = this.chart.options.accessibility;\n        const groupRole = a11yOptions.landmarkVerbosity === 'all' ?\n            'region' : null;\n        this.proxyGroup = this.proxyProvider.addGroup('legend', 'ul', {\n            // Filled by updateLegendTitle, to keep up to date without\n            // recreating group\n            'aria-label': '_placeholder_',\n            role: groupRole\n        });\n    }\n    /**\n     * @private\n     */\n    proxyLegendItems() {\n        const component = this, items = (this.chart.legend || {}).allItems || [];\n        let legendItem;\n        items.forEach((item) => {\n            legendItem = item.legendItem || {};\n            if (legendItem.label && legendItem.label.element) {\n                component.proxyLegendItem(item);\n            }\n        });\n    }\n    /**\n     * @private\n     * @param {Highcharts.BubbleLegendItem|Point|Highcharts.Series} item\n     */\n    proxyLegendItem(item) {\n        const legendItem = item.legendItem || {};\n        if (!legendItem.label || !legendItem.group) {\n            return;\n        }\n        const itemLabel = this.chart.langFormat('accessibility.legend.legendItem', {\n            chart: this.chart,\n            itemName: LegendComponent_stripHTMLTags(item.name, this.chart.renderer.forExport),\n            item\n        });\n        const attribs = {\n            tabindex: -1,\n            'aria-pressed': item.visible,\n            'aria-label': itemLabel\n        };\n        // Considers useHTML\n        const proxyPositioningElement = legendItem.group.div ?\n            legendItem.label :\n            legendItem.group;\n        item.a11yProxyElement = this.proxyProvider.addProxyElement('legend', {\n            click: legendItem.label,\n            visual: proxyPositioningElement.element\n        }, 'button', attribs);\n    }\n    /**\n     * Get keyboard navigation handler for this component.\n     * @private\n     */\n    getKeyboardNavigation() {\n        const keys = this.keyCodes, component = this, chart = this.chart;\n        return new Accessibility_KeyboardNavigationHandler(chart, {\n            keyCodeMap: [\n                [\n                    [keys.left, keys.right, keys.up, keys.down],\n                    function (keyCode) {\n                        return component.onKbdArrowKey(this, keyCode);\n                    }\n                ],\n                [\n                    [keys.enter, keys.space],\n                    function () {\n                        return component.onKbdClick(this);\n                    }\n                ],\n                [\n                    [keys.pageDown, keys.pageUp],\n                    function (keyCode) {\n                        const direction = keyCode === keys.pageDown ? 1 : -1;\n                        component.highlightAdjacentLegendPage(direction);\n                        return this.response.success;\n                    }\n                ]\n            ],\n            validate: function () {\n                return component.shouldHaveLegendNavigation();\n            },\n            init: function () {\n                chart.highlightLegendItem(0);\n                component.highlightedLegendItemIx = 0;\n            },\n            terminate: function () {\n                component.highlightedLegendItemIx = -1;\n                chart.legend.allItems.forEach((item) => setLegendItemHoverState(false, item));\n            }\n        });\n    }\n    /**\n     * Arrow key navigation\n     * @private\n     */\n    onKbdArrowKey(keyboardNavigationHandler, key) {\n        const { keyCodes: { left, up }, highlightedLegendItemIx, chart } = this, numItems = chart.legend.allItems.length, wrapAround = chart.options.accessibility\n            .keyboardNavigation.wrapAround, direction = (key === left || key === up) ? -1 : 1, res = chart.highlightLegendItem(highlightedLegendItemIx + direction);\n        if (res) {\n            this.highlightedLegendItemIx += direction;\n        }\n        else if (wrapAround && numItems > 1) {\n            this.highlightedLegendItemIx = direction > 0 ?\n                0 : numItems - 1;\n            chart.highlightLegendItem(this.highlightedLegendItemIx);\n        }\n        return keyboardNavigationHandler.response.success;\n    }\n    /**\n     * @private\n     * @param {Highcharts.KeyboardNavigationHandler} keyboardNavigationHandler\n     * @return {number} Response code\n     */\n    onKbdClick(keyboardNavigationHandler) {\n        const legendItem = this.chart.legend.allItems[this.highlightedLegendItemIx];\n        if (legendItem && legendItem.a11yProxyElement) {\n            legendItem.a11yProxyElement.click();\n        }\n        return keyboardNavigationHandler.response.success;\n    }\n    /**\n     * @private\n     */\n    shouldHaveLegendNavigation() {\n        if (!shouldDoLegendA11y(this.chart)) {\n            return false;\n        }\n        const chart = this.chart, legendOptions = chart.options.legend || {}, legendA11yOptions = (legendOptions.accessibility || {});\n        return !!(chart.legend.display &&\n            legendA11yOptions.keyboardNavigation &&\n            legendA11yOptions.keyboardNavigation.enabled);\n    }\n    /**\n     * Clean up\n     * @private\n     */\n    destroy() {\n        this.removeProxies();\n    }\n}\n/* *\n *\n *  Class Namespace\n *\n * */\n(function (LegendComponent) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Highlight legend item by index.\n     * @private\n     */\n    function chartHighlightLegendItem(ix) {\n        const items = this.legend.allItems;\n        const oldIx = this.accessibility &&\n            this.accessibility.components.legend.highlightedLegendItemIx;\n        const itemToHighlight = items[ix], legendItem = itemToHighlight?.legendItem || {};\n        if (itemToHighlight) {\n            if (isNumber(oldIx) && items[oldIx]) {\n                setLegendItemHoverState(false, items[oldIx]);\n            }\n            scrollLegendToItem(this.legend, ix);\n            const legendItemProp = legendItem.label;\n            const proxyBtn = itemToHighlight.a11yProxyElement &&\n                itemToHighlight.a11yProxyElement.innerElement;\n            if (legendItemProp && legendItemProp.element && proxyBtn) {\n                this.setFocusToElement(legendItemProp, proxyBtn);\n            }\n            setLegendItemHoverState(true, itemToHighlight);\n            return true;\n        }\n        return false;\n    }\n    /**\n     * @private\n     */\n    function compose(ChartClass, LegendClass) {\n        const chartProto = ChartClass.prototype;\n        if (!chartProto.highlightLegendItem) {\n            chartProto.highlightLegendItem = chartHighlightLegendItem;\n            LegendComponent_addEvent(LegendClass, 'afterColorizeItem', legendOnAfterColorizeItem);\n        }\n    }\n    LegendComponent.compose = compose;\n    /**\n     * Keep track of pressed state for legend items.\n     * @private\n     */\n    function legendOnAfterColorizeItem(e) {\n        const chart = this.chart, a11yOptions = chart.options.accessibility, legendItem = e.item;\n        if (a11yOptions.enabled && legendItem && legendItem.a11yProxyElement) {\n            legendItem.a11yProxyElement.innerElement.setAttribute('aria-pressed', e.visible ? 'true' : 'false');\n        }\n    }\n})(LegendComponent || (LegendComponent = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Components_LegendComponent = (LegendComponent);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Axis\"],\"commonjs\":[\"highcharts\",\"Axis\"],\"commonjs2\":[\"highcharts\",\"Axis\"],\"root\":[\"Highcharts\",\"Axis\"]}\nvar highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_ = __webpack_require__(532);\nvar highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_default = /*#__PURE__*/__webpack_require__.n(highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_);\n;// ./code/es-modules/Stock/Navigator/ChartNavigatorComposition.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { isTouchDevice } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: ChartNavigatorComposition_addEvent, merge, pick: ChartNavigatorComposition_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Constants\n *\n * */\nconst composedMembers = [];\n/* *\n *\n *  Variables\n *\n * */\nlet NavigatorConstructor;\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction compose(ChartClass, NavigatorClass) {\n    if (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default().pushUnique(composedMembers, ChartClass)) {\n        const chartProto = ChartClass.prototype;\n        NavigatorConstructor = NavigatorClass;\n        chartProto.callbacks.push(onChartCallback);\n        ChartNavigatorComposition_addEvent(ChartClass, 'afterAddSeries', onChartAfterAddSeries);\n        ChartNavigatorComposition_addEvent(ChartClass, 'afterSetChartSize', onChartAfterSetChartSize);\n        ChartNavigatorComposition_addEvent(ChartClass, 'afterUpdate', onChartAfterUpdate);\n        ChartNavigatorComposition_addEvent(ChartClass, 'beforeRender', onChartBeforeRender);\n        ChartNavigatorComposition_addEvent(ChartClass, 'beforeShowResetZoom', onChartBeforeShowResetZoom);\n        ChartNavigatorComposition_addEvent(ChartClass, 'update', onChartUpdate);\n    }\n}\n/**\n * Handle adding new series.\n * @private\n */\nfunction onChartAfterAddSeries() {\n    if (this.navigator) {\n        // Recompute which series should be shown in navigator, and add them\n        this.navigator.setBaseSeries(null, false);\n    }\n}\n/**\n * For stock charts, extend the Chart.setChartSize method so that we can set the\n * final top position of the navigator once the height of the chart, including\n * the legend, is determined. #367. We can't use Chart.getMargins, because\n * labels offsets are not calculated yet.\n * @private\n */\nfunction onChartAfterSetChartSize() {\n    const legend = this.legend, navigator = this.navigator;\n    let legendOptions, xAxis, yAxis;\n    if (navigator) {\n        legendOptions = legend && legend.options;\n        xAxis = navigator.xAxis;\n        yAxis = navigator.yAxis;\n        const { scrollbarHeight, scrollButtonSize } = navigator;\n        // Compute the top position\n        if (this.inverted) {\n            navigator.left = navigator.opposite ?\n                this.chartWidth - scrollbarHeight -\n                    navigator.height :\n                this.spacing[3] + scrollbarHeight;\n            navigator.top = this.plotTop + scrollButtonSize;\n        }\n        else {\n            navigator.left = ChartNavigatorComposition_pick(xAxis.left, this.plotLeft + scrollButtonSize);\n            navigator.top = navigator.navigatorOptions.top ||\n                this.chartHeight -\n                    navigator.height -\n                    scrollbarHeight -\n                    (this.scrollbar?.options.margin || 0) -\n                    this.spacing[2] -\n                    (this.rangeSelector && this.extraBottomMargin ?\n                        this.rangeSelector.getHeight() :\n                        0) -\n                    ((legendOptions &&\n                        legendOptions.verticalAlign === 'bottom' &&\n                        legendOptions.layout !== 'proximate' && // #13392\n                        legendOptions.enabled &&\n                        !legendOptions.floating) ?\n                        legend.legendHeight +\n                            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    const options = this.options;\n    if (options.navigator.enabled ||\n        options.scrollbar.enabled) {\n        this.scroller = this.navigator = new NavigatorConstructor(this);\n    }\n}\n/**\n * For Stock charts. For x only zooming, do not to create the zoom button\n * because X axis zooming is already allowed by the Navigator and Range\n * selector. (#9285)\n * @private\n */\nfunction onChartBeforeShowResetZoom() {\n    const chartOptions = this.options, navigator = chartOptions.navigator, rangeSelector = chartOptions.rangeSelector;\n    if (((navigator && navigator.enabled) ||\n        (rangeSelector && rangeSelector.enabled)) &&\n        ((!isTouchDevice &&\n            this.zooming.type === 'x') ||\n            (isTouchDevice && this.zooming.pinchType === 'x'))) {\n        return false;\n    }\n}\n/**\n * @private\n */\nfunction onChartCallback(chart) {\n    const navigator = chart.navigator;\n    // Initialize the navigator\n    if (navigator && chart.xAxis[0]) {\n        const extremes = chart.xAxis[0].getExtremes();\n        navigator.render(extremes.min, extremes.max);\n    }\n}\n/**\n * Merge options, if no scrolling exists yet\n * @private\n */\nfunction onChartUpdate(e) {\n    const navigatorOptions = (e.options.navigator || {}), scrollbarOptions = (e.options.scrollbar || {});\n    if (!this.navigator && !this.scroller &&\n        (navigatorOptions.enabled || scrollbarOptions.enabled)) {\n        merge(true, this.options.navigator, navigatorOptions);\n        merge(true, this.options.scrollbar, scrollbarOptions);\n        delete e.options.navigator;\n        delete e.options.scrollbar;\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst ChartNavigatorComposition = {\n    compose\n};\n/* harmony default export */ const Navigator_ChartNavigatorComposition = (ChartNavigatorComposition);\n\n;// ./code/es-modules/Core/Axis/NavigatorAxisComposition.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { isTouchDevice: NavigatorAxisComposition_isTouchDevice } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: NavigatorAxisComposition_addEvent, correctFloat, defined: NavigatorAxisComposition_defined, isNumber: NavigatorAxisComposition_isNumber, pick: NavigatorAxisComposition_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction onAxisInit() {\n    const axis = this;\n    if (!axis.navigatorAxis) {\n        axis.navigatorAxis = new NavigatorAxisAdditions(axis);\n    }\n}\n/**\n * For Stock charts, override selection zooming with some special features\n * because X axis zooming is already allowed by the Navigator and Range\n * selector.\n * @private\n */\nfunction onAxisSetExtremes(e) {\n    const axis = this, chart = axis.chart, chartOptions = chart.options, navigator = chartOptions.navigator, navigatorAxis = axis.navigatorAxis, pinchType = chart.zooming.pinchType, rangeSelector = chartOptions.rangeSelector, zoomType = chart.zooming.type;\n    let zoomed;\n    if (axis.isXAxis &&\n        (navigator?.enabled || rangeSelector?.enabled)) {\n        // For y only zooming, ignore the X axis completely\n        if (zoomType === 'y' && e.trigger === 'zoom') {\n            zoomed = false;\n            // For xy zooming, record the state of the zoom before zoom selection,\n            // then when the reset button is pressed, revert to this state. This\n            // should apply only if the chart is initialized with a range (#6612),\n            // otherwise zoom all the way out.\n        }\n        else if (((e.trigger === 'zoom' && zoomType === 'xy') ||\n            (NavigatorAxisComposition_isTouchDevice && pinchType === 'xy')) &&\n            axis.options.range) {\n            const previousZoom = navigatorAxis.previousZoom;\n            // Minimum defined, zooming in\n            if (NavigatorAxisComposition_defined(e.min)) {\n                navigatorAxis.previousZoom = [axis.min, axis.max];\n                // Minimum undefined, resetting zoom\n            }\n            else if (previousZoom) {\n                e.min = previousZoom[0];\n                e.max = previousZoom[1];\n                navigatorAxis.previousZoom = void 0;\n            }\n        }\n    }\n    if (typeof zoomed !== 'undefined') {\n        e.preventDefault();\n    }\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * @private\n * @class\n */\nclass NavigatorAxisAdditions {\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    static compose(AxisClass) {\n        if (!AxisClass.keepProps.includes('navigatorAxis')) {\n            AxisClass.keepProps.push('navigatorAxis');\n            NavigatorAxisComposition_addEvent(AxisClass, 'init', onAxisInit);\n            NavigatorAxisComposition_addEvent(AxisClass, 'setExtremes', onAxisSetExtremes);\n        }\n    }\n    /* *\n     *\n     *  Constructors\n     *\n     * */\n    constructor(axis) {\n        this.axis = axis;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    destroy() {\n        this.axis = void 0;\n    }\n    /**\n     * Add logic to normalize the zoomed range in order to preserve the pressed\n     * state of range selector buttons\n     *\n     * @private\n     * @function Highcharts.Axis#toFixedRange\n     */\n    toFixedRange(pxMin, pxMax, fixedMin, fixedMax) {\n        const axis = this.axis, halfPointRange = (axis.pointRange || 0) / 2;\n        let newMin = NavigatorAxisComposition_pick(fixedMin, axis.translate(pxMin, true, !axis.horiz)), newMax = NavigatorAxisComposition_pick(fixedMax, axis.translate(pxMax, true, !axis.horiz));\n        // Add/remove half point range to/from the extremes (#1172)\n        if (!NavigatorAxisComposition_defined(fixedMin)) {\n            newMin = correctFloat(newMin + halfPointRange);\n        }\n        if (!NavigatorAxisComposition_defined(fixedMax)) {\n            newMax = correctFloat(newMax - halfPointRange);\n        }\n        if (!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}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const NavigatorAxisComposition = (NavigatorAxisAdditions);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Color\"],\"commonjs\":[\"highcharts\",\"Color\"],\"commonjs2\":[\"highcharts\",\"Color\"],\"root\":[\"Highcharts\",\"Color\"]}\nvar highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_ = __webpack_require__(620);\nvar highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default = /*#__PURE__*/__webpack_require__.n(highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_);\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"SeriesRegistry\"],\"commonjs\":[\"highcharts\",\"SeriesRegistry\"],\"commonjs2\":[\"highcharts\",\"SeriesRegistry\"],\"root\":[\"Highcharts\",\"SeriesRegistry\"]}\nvar highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_ = __webpack_require__(512);\nvar highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default = /*#__PURE__*/__webpack_require__.n(highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_);\n;// ./code/es-modules/Stock/Navigator/NavigatorDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { parse: color } = (highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default());\n\nconst { seriesTypes } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default());\n/* *\n *\n *  Constants\n *\n * */\n/**\n * The navigator is a small series below the main series, displaying\n * a view of the entire data set. It provides tools to zoom in and\n * out on parts of the data as well as panning across the dataset.\n *\n * @product      highstock gantt\n * @optionparent navigator\n */\nconst NavigatorDefaults = {\n    /**\n     * Whether the navigator and scrollbar should adapt to updated data\n     * in the base X axis. When loading data async, as in the demo below,\n     * this should be `false`. Otherwise new data will trigger navigator\n     * redraw, which will cause unwanted looping. In the demo below, the\n     * data in the navigator is set only once. On navigating, only the main\n     * chart content is updated.\n     *\n     * @sample {highstock} stock/demo/lazy-loading/\n     *         Set to false with async data loading\n     *\n     * @type      {boolean}\n     * @default   true\n     * @apioption navigator.adaptToUpdatedData\n     */\n    /**\n     * An integer identifying the index to use for the base series, or a\n     * string representing the id of the series.\n     *\n     * **Note**: As of Highcharts 5.0, this is now a deprecated option.\n     * Prefer [series.showInNavigator](#plotOptions.series.showInNavigator).\n     *\n     * @see [series.showInNavigator](#plotOptions.series.showInNavigator)\n     *\n     * @deprecated\n     * @type      {number|string}\n     * @default   0\n     * @apioption navigator.baseSeries\n     */\n    /**\n     * Enable or disable the navigator.\n     *\n     * @sample {highstock} stock/navigator/enabled/\n     *         Disable the navigator\n     *\n     * @type      {boolean}\n     * @default   true\n     * @apioption navigator.enabled\n     */\n    /**\n     * When the chart is inverted, whether to draw the navigator on the\n     * opposite side.\n     *\n     * @type      {boolean}\n     * @default   false\n     * @since     5.0.8\n     * @apioption navigator.opposite\n     */\n    /**\n     * The height of the navigator.\n     *\n     * @sample {highstock} stock/navigator/height/\n     *         A higher navigator\n     */\n    height: 40,\n    /**\n     * The distance from the nearest element, the X axis or X axis labels.\n     *\n     * @sample {highstock} stock/navigator/margin/\n     *         A margin of 2 draws the navigator closer to the X axis labels\n     */\n    margin: 25,\n    /**\n     * Whether the mask should be inside the range marking the zoomed\n     * range, or outside. In Highcharts Stock 1.x it was always `false`.\n     *\n     * @sample {highstock} stock/demo/maskinside-false/\n     *         False, mask outside\n     *\n     * @since   2.0\n     */\n    maskInside: true,\n    /**\n     * Options for the handles for dragging the zoomed area.\n     *\n     * @sample {highstock} stock/navigator/handles/\n     *         Colored handles\n     */\n    handles: {\n        /**\n         * Width for handles.\n         *\n         * @sample {highstock} stock/navigator/styled-handles/\n         *         Styled handles\n         *\n         * @since   6.0.0\n         */\n        width: 7,\n        /**\n         * Border radius of the handles.\n         *\n         * @sample {highstock} stock/navigator/handles-border-radius/\n         *      Border radius on the navigator handles.\n         *\n         * @since 11.4.2\n         */\n        borderRadius: 0,\n        /**\n         * Height for handles.\n         *\n         * @sample {highstock} stock/navigator/styled-handles/\n         *         Styled handles\n         *\n         * @since   6.0.0\n         */\n        height: 15,\n        /**\n         * Array to define shapes of handles. 0-index for left, 1-index for\n         * right.\n         *\n         * Additionally, the URL to a graphic can be given on this form:\n         * `url(graphic.png)`. Note that for the image to be applied to\n         * exported charts, its URL needs to be accessible by the export\n         * server.\n         *\n         * Custom callbacks for symbol path generation can also be added to\n         * `Highcharts.SVGRenderer.prototype.symbols`. The callback is then\n         * used by its method name, as shown in the demo.\n         *\n         * @sample {highstock} stock/navigator/styled-handles/\n         *         Styled handles\n         *\n         * @type    {Array<string>}\n         * @default [\"navigator-handle\", \"navigator-handle\"]\n         * @since   6.0.0\n         */\n        symbols: ['navigator-handle', 'navigator-handle'],\n        /**\n         * Allows to enable/disable handles.\n         *\n         * @since   6.0.0\n         */\n        enabled: true,\n        /**\n         * The width for the handle border and the stripes inside.\n         *\n         * @sample {highstock} stock/navigator/styled-handles/\n         *         Styled handles\n         *\n         * @since     6.0.0\n         * @apioption navigator.handles.lineWidth\n         */\n        lineWidth: 1,\n        /**\n         * The fill for the handle.\n         *\n         * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         */\n        backgroundColor: \"#f2f2f2\" /* Palette.neutralColor5 */,\n        /**\n         * The stroke for the handle border and the stripes inside.\n         *\n         * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         */\n        borderColor: \"#999999\" /* Palette.neutralColor40 */\n    },\n    /**\n     * The color of the mask covering the areas of the navigator series\n     * that are currently not visible in the main series. The default\n     * color is bluish with an opacity of 0.3 to see the series below.\n     *\n     * @see In styled mode, the mask is styled with the\n     *      `.highcharts-navigator-mask` and\n     *      `.highcharts-navigator-mask-inside` classes.\n     *\n     * @sample {highstock} stock/navigator/maskfill/\n     *         Blue, semi transparent mask\n     *\n     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @default rgba(102,133,194,0.3)\n     */\n    maskFill: color(\"#667aff\" /* Palette.highlightColor60 */).setOpacity(0.3).get(),\n    /**\n     * The color of the line marking the currently zoomed area in the\n     * navigator.\n     *\n     * @sample {highstock} stock/navigator/outline/\n     *         2px blue outline\n     *\n     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @default #cccccc\n     */\n    outlineColor: \"#999999\" /* Palette.neutralColor40 */,\n    /**\n     * The width of the line marking the currently zoomed area in the\n     * navigator.\n     *\n     * @see In styled mode, the outline stroke width is set with the\n     *      `.highcharts-navigator-outline` class.\n     *\n     * @sample {highstock} stock/navigator/outline/\n     *         2px blue outline\n     *\n     * @type    {number}\n     */\n    outlineWidth: 1,\n    /**\n     * Options for the navigator series. Available options are the same\n     * as any series, documented at [plotOptions](#plotOptions.series)\n     * and [series](#series).\n     *\n     * Unless data is explicitly defined on navigator.series, the data\n     * is borrowed from the first series in the chart.\n     *\n     * Default series options for the navigator series are:\n     * ```js\n     * series: {\n     *     type: 'areaspline',\n     *     fillOpacity: 0.05,\n     *     dataGrouping: {\n     *         smoothed: true\n     *     },\n     *     lineWidth: 1,\n     *     marker: {\n     *         enabled: false\n     *     }\n     * }\n     * ```\n     *\n     * @see In styled mode, the navigator series is styled with the\n     *      `.highcharts-navigator-series` class.\n     *\n     * @sample {highstock} stock/navigator/series-data/\n     *         Using a separate data set for the navigator\n     * @sample {highstock} stock/navigator/series/\n     *         A green navigator series\n     *\n     * @type {*|Array<*>|Highcharts.SeriesOptionsType|Array<Highcharts.SeriesOptionsType>}\n     */\n    series: {\n        /**\n         * The type of the navigator series.\n         *\n         * Heads up:\n         * In column-type navigator, zooming is limited to at least one\n         * point with its `pointRange`.\n         *\n         * @sample {highstock} stock/navigator/column/\n         *         Column type navigator\n         *\n         * @type    {string}\n         * @default {highstock} `areaspline` if defined, otherwise `line`\n         * @default {gantt} gantt\n         */\n        type: (typeof seriesTypes.areaspline === 'undefined' ?\n            'line' :\n            'areaspline'),\n        /**\n         * The fill opacity of the navigator series.\n         */\n        fillOpacity: 0.05,\n        /**\n         * The pixel line width of the navigator series.\n         */\n        lineWidth: 1,\n        /**\n         * @ignore-option\n         */\n        compare: null,\n        /**\n         * @ignore-option\n         */\n        sonification: {\n            enabled: false\n        },\n        /**\n         * Unless data is explicitly defined, the data is borrowed from the\n         * first series in the chart.\n         *\n         * @type      {Array<number|Array<number|string|null>|object|null>}\n         * @product   highstock\n         * @apioption navigator.series.data\n         */\n        /**\n         * Data grouping options for the navigator series.\n         *\n         * @extends plotOptions.series.dataGrouping\n         */\n        dataGrouping: {\n            approximation: 'average',\n            enabled: true,\n            groupPixelWidth: 2,\n            // Replace smoothed property by anchors, #12455.\n            firstAnchor: 'firstPoint',\n            anchor: 'middle',\n            lastAnchor: 'lastPoint',\n            // Day and week differs from plotOptions.series.dataGrouping\n            units: [\n                ['millisecond', [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]],\n                ['second', [1, 2, 5, 10, 15, 30]],\n                ['minute', [1, 2, 5, 10, 15, 30]],\n                ['hour', [1, 2, 3, 4, 6, 8, 12]],\n                ['day', [1, 2, 3, 4]],\n                ['week', [1, 2, 3]],\n                ['month', [1, 3, 6]],\n                ['year', null]\n            ]\n        },\n        /**\n         * Data label options for the navigator series. Data labels are\n         * disabled by default on the navigator series.\n         *\n         * @extends plotOptions.series.dataLabels\n         */\n        dataLabels: {\n            enabled: false,\n            zIndex: 2 // #1839\n        },\n        id: 'highcharts-navigator-series',\n        className: 'highcharts-navigator-series',\n        /**\n         * Sets the fill color of the navigator series.\n         *\n         * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         * @apioption navigator.series.color\n         */\n        /**\n         * Line color for the navigator series. Allows setting the color\n         * while disallowing the default candlestick setting.\n         *\n         * @type {Highcharts.ColorString|null}\n         */\n        lineColor: null, // #4602\n        marker: {\n            enabled: false\n        },\n        /**\n         * Since Highcharts Stock v8, default value is the same as default\n         * `pointRange` defined for a specific type (e.g. `null` for\n         * column type).\n         *\n         * In Highcharts Stock version < 8, defaults to 0.\n         *\n         * @extends plotOptions.series.pointRange\n         * @type {number|null}\n         * @apioption navigator.series.pointRange\n         */\n        /**\n         * The threshold option. Setting it to 0 will make the default\n         * navigator area series draw its area from the 0 value and up.\n         *\n         * @type {number|null}\n         */\n        threshold: null\n    },\n    /**\n     * Enable or disable navigator sticking to right, while adding new\n     * points. If `undefined`, the navigator sticks to the axis maximum only\n     * if it was already at the maximum prior to adding points.\n     *\n     * @type      {boolean}\n     * @default   undefined\n     * @since 10.2.1\n     * @sample {highstock} stock/navigator/sticktomax-false/\n     * stickToMax set to false\n     * @apioption navigator.stickToMax\n     */\n    /**\n     * Options for the navigator X axis. Default series options for the\n     * navigator xAxis are:\n     * ```js\n     * xAxis: {\n     *     tickWidth: 0,\n     *     lineWidth: 0,\n     *     gridLineWidth: 1,\n     *     tickPixelInterval: 200,\n     *     labels: {\n     *            align: 'left',\n     *         style: {\n     *             color: '#888'\n     *         },\n     *         x: 3,\n     *         y: -4\n     *     }\n     * }\n     * ```\n     *\n     * @extends   xAxis\n     * @excluding linkedTo, maxZoom, minRange, opposite, range, scrollbar,\n     *            showEmpty, maxRange\n     */\n    xAxis: {\n        /**\n         * Additional range on the right side of the xAxis. Works similar to\n         * `xAxis.maxPadding`, but the value is set in terms of axis values,\n         * percentage or pixels.\n         *\n         * If it's a number, it is interpreted as axis values, which in a\n         * datetime axis equals milliseconds.\n         *\n         * If it's a percentage string, is interpreted as percentages of the\n         * axis length. An overscroll of 50% will make a 100px axis 50px longer.\n         *\n         * If it's a pixel string, it is interpreted as a fixed pixel value, but\n         * limited to 90% of the axis length.\n         *\n         * If it's undefined, the value is inherited from `xAxis.overscroll`.\n         *\n         * Can be set for both, main xAxis and navigator's xAxis.\n         *\n         * @type    {number | string | undefined}\n         * @since   6.0.0\n         * @apioption navigator.xAxis.overscroll\n         */\n        className: 'highcharts-navigator-xaxis',\n        tickLength: 0,\n        lineWidth: 0,\n        gridLineColor: \"#e6e6e6\" /* Palette.neutralColor10 */,\n        id: 'navigator-x-axis',\n        gridLineWidth: 1,\n        tickPixelInterval: 200,\n        labels: {\n            align: 'left',\n            /**\n             * @type {Highcharts.CSSObject}\n             */\n            style: {\n                /** @ignore */\n                color: \"#000000\" /* Palette.neutralColor100 */,\n                /** @ignore */\n                fontSize: '0.7em',\n                /** @ignore */\n                opacity: 0.6,\n                /** @ignore */\n                textOutline: '2px contrast'\n            },\n            x: 3,\n            y: -4\n        },\n        crosshair: false\n    },\n    /**\n     * Options for the navigator Y axis. Default series options for the\n     * navigator yAxis are:\n     * ```js\n     * yAxis: {\n     *     gridLineWidth: 0,\n     *     startOnTick: false,\n     *     endOnTick: false,\n     *     minPadding: 0.1,\n     *     maxPadding: 0.1,\n     *     labels: {\n     *         enabled: false\n     *     },\n     *     title: {\n     *         text: null\n     *     },\n     *     tickWidth: 0\n     * }\n     * ```\n     *\n     * @extends   yAxis\n     * @excluding height, linkedTo, maxZoom, minRange, ordinal, range,\n     *            showEmpty, scrollbar, top, units, maxRange, minLength,\n     *            maxLength, resize\n     */\n    yAxis: {\n        className: 'highcharts-navigator-yaxis',\n        gridLineWidth: 0,\n        startOnTick: false,\n        endOnTick: false,\n        minPadding: 0.1,\n        id: 'navigator-y-axis',\n        maxPadding: 0.1,\n        labels: {\n            enabled: false\n        },\n        crosshair: false,\n        title: {\n            text: null\n        },\n        tickLength: 0,\n        tickWidth: 0\n    }\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Navigator_NavigatorDefaults = (NavigatorDefaults);\n/* *\n *\n *  API Options\n *\n * */\n/**\n * Maximum range which can be set using the navigator's handles.\n * Opposite of [xAxis.minRange](#xAxis.minRange).\n *\n * @sample {highstock} stock/navigator/maxrange/\n *         Defined max and min range\n *\n * @type      {number}\n * @since     6.0.0\n * @product   highstock gantt\n * @apioption xAxis.maxRange\n */\n(''); // Keeps doclets above in JS file\n\n;// ./code/es-modules/Core/Renderer/SVG/Symbols.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { defined: Symbols_defined, isNumber: Symbols_isNumber, pick: Symbols_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/* eslint-disable require-jsdoc, valid-jsdoc */\n/**\n *\n */\nfunction arc(cx, cy, w, h, options) {\n    const arc = [];\n    if (options) {\n        const start = options.start || 0, rx = Symbols_pick(options.r, w), ry = Symbols_pick(options.r, h || w), \n        // Subtract a small number to prevent cos and sin of start and end\n        // from becoming equal on 360 arcs (#1561). The size of the circle\n        // affects the constant, therefore the division by `rx`. If the\n        // proximity is too small, the arc disappears. If it is too great, a\n        // gap appears. This can be seen in the animation of the official\n        // bubble demo (#20586).\n        proximity = 0.0002 / (options.borderRadius ? 1 : Math.max(rx, 1)), fullCircle = (Math.abs((options.end || 0) - start - 2 * Math.PI) <\n            proximity), end = (options.end || 0) - (fullCircle ? proximity : 0), innerRadius = options.innerR, open = Symbols_pick(options.open, fullCircle), cosStart = Math.cos(start), sinStart = Math.sin(start), cosEnd = Math.cos(end), sinEnd = Math.sin(end), \n        // Proximity takes care of rounding errors around PI (#6971)\n        longArc = Symbols_pick(options.longArc, end - start - Math.PI < proximity ? 0 : 1);\n        let arcSegment = [\n            'A', // ArcTo\n            rx, // X radius\n            ry, // Y radius\n            0, // Slanting\n            longArc, // Long or short arc\n            Symbols_pick(options.clockwise, 1), // Clockwise\n            cx + rx * cosEnd,\n            cy + ry * sinEnd\n        ];\n        arcSegment.params = { start, end, cx, cy }; // Memo for border radius\n        arc.push([\n            'M',\n            cx + rx * cosStart,\n            cy + ry * sinStart\n        ], arcSegment);\n        if (Symbols_defined(innerRadius)) {\n            arcSegment = [\n                'A', // ArcTo\n                innerRadius, // X radius\n                innerRadius, // Y radius\n                0, // Slanting\n                longArc, // Long or short arc\n                // Clockwise - opposite to the outer arc clockwise\n                Symbols_defined(options.clockwise) ? 1 - options.clockwise : 0,\n                cx + innerRadius * cosStart,\n                cy + innerRadius * sinStart\n            ];\n            // Memo for border radius\n            arcSegment.params = {\n                start: end,\n                end: start,\n                cx,\n                cy\n            };\n            arc.push(open ?\n                [\n                    'M',\n                    cx + innerRadius * cosEnd,\n                    cy + innerRadius * sinEnd\n                ] : [\n                'L',\n                cx + innerRadius * cosEnd,\n                cy + innerRadius * sinEnd\n            ], arcSegment);\n        }\n        if (!open) {\n            arc.push(['Z']);\n        }\n    }\n    return arc;\n}\n/**\n * Callout shape used for default tooltips.\n */\nfunction callout(x, y, w, h, options) {\n    const arrowLength = 6, halfDistance = 6, r = Math.min((options && options.r) || 0, w, h), safeDistance = r + halfDistance, anchorX = options && options.anchorX, anchorY = options && options.anchorY || 0;\n    const path = roundedRect(x, y, w, h, { r });\n    if (!Symbols_isNumber(anchorX)) {\n        return path;\n    }\n    // Do not render a connector, if anchor starts inside the label\n    if (anchorX < w && anchorX > 0 && anchorY < h && anchorY > 0) {\n        return path;\n    }\n    // Anchor on right side\n    if (x + anchorX > w - safeDistance) {\n        // Chevron\n        if (anchorY > y + safeDistance &&\n            anchorY < y + h - safeDistance) {\n            path.splice(3, 1, ['L', x + w, anchorY - halfDistance], ['L', x + w + arrowLength, anchorY], ['L', x + w, anchorY + halfDistance], ['L', x + w, y + h - r]);\n            // Simple connector\n        }\n        else {\n            if (anchorX < w) { // Corner connector\n                const isTopCorner = anchorY < y + safeDistance, cornerY = isTopCorner ? y : y + h, sliceStart = isTopCorner ? 2 : 5;\n                path.splice(sliceStart, 0, ['L', anchorX, anchorY], ['L', x + w - r, cornerY]);\n            }\n            else { // Side connector\n                path.splice(3, 1, ['L', x + w, h / 2], ['L', anchorX, anchorY], ['L', x + w, h / 2], ['L', x + w, y + h - r]);\n            }\n        }\n        // Anchor on left side\n    }\n    else if (x + anchorX < safeDistance) {\n        // Chevron\n        if (anchorY > y + safeDistance &&\n            anchorY < y + h - safeDistance) {\n            path.splice(7, 1, ['L', x, anchorY + halfDistance], ['L', x - arrowLength, anchorY], ['L', x, anchorY - halfDistance], ['L', x, y + r]);\n            // Simple connector\n        }\n        else {\n            if (anchorX > 0) { // Corner connector\n                const isTopCorner = anchorY < y + safeDistance, cornerY = isTopCorner ? y : y + h, sliceStart = isTopCorner ? 1 : 6;\n                path.splice(sliceStart, 0, ['L', anchorX, anchorY], ['L', x + r, cornerY]);\n            }\n            else { // Side connector\n                path.splice(7, 1, ['L', x, h / 2], ['L', anchorX, anchorY], ['L', x, h / 2], ['L', x, y + r]);\n            }\n        }\n    }\n    else if ( // Replace bottom\n    anchorY > h &&\n        anchorX < w - safeDistance) {\n        path.splice(5, 1, ['L', anchorX + halfDistance, y + h], ['L', anchorX, y + h + arrowLength], ['L', anchorX - halfDistance, y + h], ['L', x + r, y + h]);\n    }\n    else if ( // Replace top\n    anchorY < 0 &&\n        anchorX > safeDistance) {\n        path.splice(1, 1, ['L', anchorX - halfDistance, y], ['L', anchorX, y - arrowLength], ['L', anchorX + halfDistance, y], ['L', w - r, y]);\n    }\n    return path;\n}\n/**\n *\n */\nfunction circle(x, y, w, h) {\n    // Return a full arc\n    return arc(x + w / 2, y + h / 2, w / 2, h / 2, {\n        start: Math.PI * 0.5,\n        end: Math.PI * 2.5,\n        open: false\n    });\n}\n/**\n *\n */\nfunction diamond(x, y, w, h) {\n    return [\n        ['M', x + w / 2, y],\n        ['L', x + w, y + h / 2],\n        ['L', x + w / 2, y + h],\n        ['L', x, y + h / 2],\n        ['Z']\n    ];\n}\n// #15291\n/**\n *\n */\nfunction rect(x, y, w, h, options) {\n    if (options && options.r) {\n        return roundedRect(x, y, w, h, options);\n    }\n    return [\n        ['M', x, y],\n        ['L', x + w, y],\n        ['L', x + w, y + h],\n        ['L', x, y + h],\n        ['Z']\n    ];\n}\n/**\n *\n */\nfunction roundedRect(x, y, w, h, options) {\n    const r = options?.r || 0;\n    return [\n        ['M', x + r, y],\n        ['L', x + w - r, y], // Top side\n        ['A', r, r, 0, 0, 1, x + w, y + r], // Top-right corner\n        ['L', x + w, y + h - r], // Right side\n        ['A', r, r, 0, 0, 1, x + w - r, y + h], // Bottom-right corner\n        ['L', x + r, y + h], // Bottom side\n        ['A', r, r, 0, 0, 1, x, y + h - r], // Bottom-left corner\n        ['L', x, y + r], // Left side\n        ['A', r, r, 0, 0, 1, x + r, y],\n        ['Z'] // Top-left corner\n    ];\n}\n/**\n *\n */\nfunction triangle(x, y, w, h) {\n    return [\n        ['M', x + w / 2, y],\n        ['L', x + w, y + h],\n        ['L', x, y + h],\n        ['Z']\n    ];\n}\n/**\n *\n */\nfunction triangleDown(x, y, w, h) {\n    return [\n        ['M', x, y],\n        ['L', x + w, y],\n        ['L', x + w / 2, y + h],\n        ['Z']\n    ];\n}\nconst Symbols = {\n    arc,\n    callout,\n    circle,\n    diamond,\n    rect,\n    roundedRect,\n    square: rect,\n    triangle,\n    'triangle-down': triangleDown\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const SVG_Symbols = (Symbols);\n\n;// ./code/es-modules/Stock/Navigator/NavigatorSymbols.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { relativeLength } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Constants\n *\n * */\n/**\n * Draw one of the handles on the side of the zoomed range in the navigator.\n * @private\n */\nfunction navigatorHandle(_x, _y, width, height, options = {}) {\n    const halfWidth = options.width ? options.width / 2 : width, markerPosition = 1.5, r = relativeLength(options.borderRadius || 0, Math.min(halfWidth * 2, height));\n    height = options.height || height;\n    return [\n        ['M', -markerPosition, height / 2 - 3.5],\n        ['L', -markerPosition, height / 2 + 4.5],\n        ['M', markerPosition - 1, height / 2 - 3.5],\n        ['L', markerPosition - 1, height / 2 + 4.5],\n        ...SVG_Symbols.rect(-halfWidth - 1, 0.5, halfWidth * 2 + 1, height, { r })\n    ];\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst NavigatorSymbols = {\n    'navigator-handle': navigatorHandle\n};\n/* harmony default export */ const Navigator_NavigatorSymbols = (NavigatorSymbols);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"RendererRegistry\"],\"commonjs\":[\"highcharts\",\"RendererRegistry\"],\"commonjs2\":[\"highcharts\",\"RendererRegistry\"],\"root\":[\"Highcharts\",\"RendererRegistry\"]}\nvar highcharts_RendererRegistry_commonjs_highcharts_RendererRegistry_commonjs2_highcharts_RendererRegistry_root_Highcharts_RendererRegistry_ = __webpack_require__(608);\nvar highcharts_RendererRegistry_commonjs_highcharts_RendererRegistry_commonjs2_highcharts_RendererRegistry_root_Highcharts_RendererRegistry_default = /*#__PURE__*/__webpack_require__.n(highcharts_RendererRegistry_commonjs_highcharts_RendererRegistry_commonjs2_highcharts_RendererRegistry_root_Highcharts_RendererRegistry_);\n;// ./code/es-modules/Stock/Utilities/StockUtilities.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { defined: StockUtilities_defined } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Sets the chart.fixedRange to the specified value. If the value is larger\n * than actual range, sets it to the maximum possible range. (#20327)\n *\n * @private\n * @function Highcharts.StockChart#setFixedRange\n * @param {number|undefined} range\n *        Range to set in axis units.\n */\nfunction setFixedRange(range) {\n    const xAxis = this.xAxis[0];\n    if (StockUtilities_defined(xAxis.dataMax) &&\n        StockUtilities_defined(xAxis.dataMin) &&\n        range) {\n        this.fixedRange = Math.min(range, xAxis.dataMax - xAxis.dataMin);\n    }\n    else {\n        this.fixedRange = range;\n    }\n}\nconst StockUtilities = {\n    setFixedRange\n};\n/* harmony default export */ const Utilities_StockUtilities = (StockUtilities);\n\n;// ./code/es-modules/Stock/Navigator/NavigatorComposition.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { setOptions } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\n\nconst { getRendererType } = (highcharts_RendererRegistry_commonjs_highcharts_RendererRegistry_commonjs2_highcharts_RendererRegistry_root_Highcharts_RendererRegistry_default());\n\nconst { setFixedRange: NavigatorComposition_setFixedRange } = Utilities_StockUtilities;\n\nconst { addEvent: NavigatorComposition_addEvent, extend, pushUnique } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Variables\n *\n * */\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction NavigatorComposition_compose(ChartClass, AxisClass, SeriesClass) {\n    NavigatorAxisComposition.compose(AxisClass);\n    if (pushUnique(composed, 'Navigator')) {\n        ChartClass.prototype.setFixedRange = NavigatorComposition_setFixedRange;\n        extend(getRendererType().prototype.symbols, Navigator_NavigatorSymbols);\n        NavigatorComposition_addEvent(SeriesClass, 'afterUpdate', onSeriesAfterUpdate);\n        setOptions({ navigator: Navigator_NavigatorDefaults });\n    }\n}\n/**\n * Handle updating series\n * @private\n */\nfunction onSeriesAfterUpdate() {\n    if (this.chart.navigator && !this.options.isInternal) {\n        this.chart.navigator.setBaseSeries(null, false);\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst NavigatorComposition = {\n    compose: NavigatorComposition_compose\n};\n/* harmony default export */ const Navigator_NavigatorComposition = (NavigatorComposition);\n\n;// ./code/es-modules/Core/Axis/ScrollbarAxis.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { composed: ScrollbarAxis_composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: ScrollbarAxis_addEvent, defined: ScrollbarAxis_defined, pick: ScrollbarAxis_pick, pushUnique: ScrollbarAxis_pushUnique } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Composition\n *\n * */\nvar ScrollbarAxis;\n(function (ScrollbarAxis) {\n    /* *\n     *\n     *  Variables\n     *\n     * */\n    let Scrollbar;\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Attaches to axis events to create scrollbars if enabled.\n     *\n     * @private\n     *\n     * @param {Highcharts.Axis} AxisClass\n     * Axis class to extend.\n     *\n     * @param {Highcharts.Scrollbar} ScrollbarClass\n     * Scrollbar class to use.\n     */\n    function compose(AxisClass, ScrollbarClass) {\n        if (ScrollbarAxis_pushUnique(ScrollbarAxis_composed, 'Axis.Scrollbar')) {\n            Scrollbar = ScrollbarClass;\n            ScrollbarAxis_addEvent(AxisClass, 'afterGetOffset', onAxisAfterGetOffset);\n            ScrollbarAxis_addEvent(AxisClass, 'afterInit', onAxisAfterInit);\n            ScrollbarAxis_addEvent(AxisClass, 'afterRender', onAxisAfterRender);\n        }\n    }\n    ScrollbarAxis.compose = compose;\n    /** @private */\n    function getExtremes(axis) {\n        const axisMin = ScrollbarAxis_pick(axis.options && axis.options.min, axis.min);\n        const axisMax = ScrollbarAxis_pick(axis.options && axis.options.max, axis.max);\n        return {\n            axisMin,\n            axisMax,\n            scrollMin: ScrollbarAxis_defined(axis.dataMin) ?\n                Math.min(axisMin, axis.min, axis.dataMin, ScrollbarAxis_pick(axis.threshold, Infinity)) : axisMin,\n            scrollMax: ScrollbarAxis_defined(axis.dataMax) ?\n                Math.max(axisMax, axis.max, axis.dataMax, ScrollbarAxis_pick(axis.threshold, -Infinity)) : axisMax\n        };\n    }\n    /**\n     * Make space for a scrollbar.\n     * @private\n     */\n    function onAxisAfterGetOffset() {\n        const axis = this, scrollbar = axis.scrollbar, opposite = scrollbar && !scrollbar.options.opposite, index = axis.horiz ? 2 : opposite ? 3 : 1;\n        if (scrollbar) {\n            // Reset scrollbars offsets\n            axis.chart.scrollbarsOffsets = [0, 0];\n            axis.chart.axisOffset[index] +=\n                scrollbar.size + (scrollbar.options.margin || 0);\n        }\n    }\n    /**\n     * Wrap axis initialization and create scrollbar if enabled.\n     * @private\n     */\n    function onAxisAfterInit() {\n        const axis = this;\n        if (axis.options &&\n            axis.options.scrollbar &&\n            axis.options.scrollbar.enabled) {\n            // Predefined options:\n            axis.options.scrollbar.vertical = !axis.horiz;\n            axis.options.startOnTick = axis.options.endOnTick = false;\n            axis.scrollbar = new Scrollbar(axis.chart.renderer, axis.options.scrollbar, axis.chart);\n            ScrollbarAxis_addEvent(axis.scrollbar, 'changed', function (e) {\n                const { axisMin, axisMax, scrollMin: unitedMin, scrollMax: unitedMax } = getExtremes(axis), range = unitedMax - unitedMin;\n                let to, from;\n                // #12834, scroll when show/hide series, wrong extremes\n                if (!ScrollbarAxis_defined(axisMin) || !ScrollbarAxis_defined(axisMax)) {\n                    return;\n                }\n                if ((axis.horiz && !axis.reversed) ||\n                    (!axis.horiz && axis.reversed)) {\n                    to = unitedMin + range * this.to;\n                    from = unitedMin + range * this.from;\n                }\n                else {\n                    // Y-values in browser are reversed, but this also\n                    // applies for reversed horizontal axis:\n                    to = unitedMin + range * (1 - this.from);\n                    from = unitedMin + range * (1 - this.to);\n                }\n                if (this.shouldUpdateExtremes(e.DOMType)) {\n                    // #17977, set animation to undefined instead of true\n                    const animate = e.DOMType === 'mousemove' ||\n                        e.DOMType === 'touchmove' ? false : void 0;\n                    axis.setExtremes(from, to, true, animate, e);\n                }\n                else {\n                    // When live redraw is disabled, don't change extremes\n                    // Only change the position of the scrollbar thumb\n                    this.setRange(this.from, this.to);\n                }\n            });\n        }\n    }\n    /**\n     * Wrap rendering axis, and update scrollbar if one is created.\n     * @private\n     */\n    function onAxisAfterRender() {\n        const axis = this, { scrollMin, scrollMax } = getExtremes(axis), scrollbar = axis.scrollbar, offset = (axis.axisTitleMargin + (axis.titleOffset || 0)), scrollbarsOffsets = axis.chart.scrollbarsOffsets, axisMargin = axis.options.margin || 0;\n        let offsetsIndex, from, to;\n        if (scrollbar && scrollbarsOffsets) {\n            if (axis.horiz) {\n                // Reserve space for labels/title\n                if (!axis.opposite) {\n                    scrollbarsOffsets[1] += offset;\n                }\n                scrollbar.position(axis.left, (axis.top +\n                    axis.height +\n                    2 +\n                    scrollbarsOffsets[1] -\n                    (axis.opposite ? axisMargin : 0)), axis.width, axis.height);\n                // Next scrollbar should reserve space for margin (if set)\n                if (!axis.opposite) {\n                    scrollbarsOffsets[1] += axisMargin;\n                }\n                offsetsIndex = 1;\n            }\n            else {\n                // Reserve space for labels/title\n                if (axis.opposite) {\n                    scrollbarsOffsets[0] += offset;\n                }\n                let xPosition;\n                if (!scrollbar.options.opposite) {\n                    xPosition = axis.opposite ? 0 : axisMargin;\n                }\n                else {\n                    xPosition = axis.left +\n                        axis.width +\n                        2 +\n                        scrollbarsOffsets[0] -\n                        (axis.opposite ? 0 : axisMargin);\n                }\n                scrollbar.position(xPosition, axis.top, axis.width, axis.height);\n                // Next scrollbar should reserve space for margin (if set)\n                if (axis.opposite) {\n                    scrollbarsOffsets[0] += axisMargin;\n                }\n                offsetsIndex = 0;\n            }\n            scrollbarsOffsets[offsetsIndex] += scrollbar.size +\n                (scrollbar.options.margin || 0);\n            if (isNaN(scrollMin) ||\n                isNaN(scrollMax) ||\n                !ScrollbarAxis_defined(axis.min) ||\n                !ScrollbarAxis_defined(axis.max) ||\n                axis.dataMin === axis.dataMax // #10733\n            ) {\n                // Default action: when data extremes are the same or there is\n                // not extremes on the axis, but scrollbar exists, make it\n                // full size\n                scrollbar.setRange(0, 1);\n            }\n            else if (axis.min === axis.max) { // #20359\n                // When the extremes are the same, set the scrollbar to a point\n                // within the extremes range. Utilize pointRange to perform the\n                // calculations. (#20359)\n                const interval = axis.pointRange / (axis.dataMax +\n                    1);\n                from = interval * axis.min;\n                to = interval * (axis.max + 1);\n                scrollbar.setRange(from, to);\n            }\n            else {\n                from = ((axis.min - scrollMin) /\n                    (scrollMax - scrollMin));\n                to = ((axis.max - scrollMin) /\n                    (scrollMax - scrollMin));\n                if ((axis.horiz && !axis.reversed) ||\n                    (!axis.horiz && axis.reversed)) {\n                    scrollbar.setRange(from, to);\n                }\n                else {\n                    // Inverse vertical axis\n                    scrollbar.setRange(1 - to, 1 - from);\n                }\n            }\n        }\n    }\n})(ScrollbarAxis || (ScrollbarAxis = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Axis_ScrollbarAxis = (ScrollbarAxis);\n\n;// ./code/es-modules/Stock/Scrollbar/ScrollbarDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Constant\n *\n * */\n/**\n *\n * The scrollbar is a means of panning over the X axis of a stock chart.\n * Scrollbars can also be applied to other types of axes.\n *\n * Another approach to scrollable charts is the [chart.scrollablePlotArea](\n * https://api.highcharts.com/highcharts/chart.scrollablePlotArea) option that\n * is especially suitable for simpler cartesian charts on mobile.\n *\n * In styled mode, all the presentational options for the\n * scrollbar are replaced by the classes `.highcharts-scrollbar-thumb`,\n * `.highcharts-scrollbar-arrow`, `.highcharts-scrollbar-button`,\n * `.highcharts-scrollbar-rifles` and `.highcharts-scrollbar-track`.\n *\n * @sample stock/yaxis/inverted-bar-scrollbar/\n *         A scrollbar on a simple bar chart\n *\n * @product highstock gantt\n * @optionparent scrollbar\n *\n * @private\n */\nconst ScrollbarDefaults = {\n    /**\n     * The height of the scrollbar. If `buttonsEnabled` is true , the height\n     * also applies to the width of the scroll arrows so that they are always\n     * squares.\n     *\n     * @sample stock/scrollbar/style/\n     *         Non-default height\n     *\n     * @type    {number}\n     */\n    height: 10,\n    /**\n     * The border rounding radius of the bar.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    barBorderRadius: 5,\n    /**\n     * The corner radius of the scrollbar buttons.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    buttonBorderRadius: 0,\n    /**\n     * Enable or disable the buttons at the end of the scrollbar.\n     *\n     * @since 11.0.0\n     */\n    buttonsEnabled: false,\n    /**\n     * Enable or disable the scrollbar.\n     *\n     * @sample stock/scrollbar/enabled/\n     *         Disable the scrollbar, only use navigator\n     *\n     * @type      {boolean}\n     * @default   true\n     * @apioption scrollbar.enabled\n     */\n    /**\n     * Whether to redraw the main chart as the scrollbar or the navigator\n     * zoomed window is moved. Defaults to `true` for modern browsers and\n     * `false` for legacy IE browsers as well as mobile devices.\n     *\n     * @sample stock/scrollbar/liveredraw\n     *         Setting live redraw to false\n     *\n     * @type  {boolean}\n     * @since 1.3\n     */\n    liveRedraw: void 0,\n    /**\n     * The margin between the scrollbar and its axis when the scrollbar is\n     * applied directly to an axis, or the navigator in case that is enabled.\n     * Defaults to 10 for axis, 0 for navigator.\n     *\n     * @type {number|undefined}\n     */\n    margin: void 0,\n    /**\n     * The minimum width of the scrollbar.\n     *\n     * @since 1.2.5\n     */\n    minWidth: 6,\n    /** @ignore-option */\n    opposite: true,\n    /**\n     * Whether to show or hide the scrollbar when the scrolled content is\n     * zoomed out to it full extent.\n     *\n     * @type      {boolean}\n     * @default   true\n     * @apioption scrollbar.showFull\n     */\n    step: 0.2,\n    /**\n     * The z index of the scrollbar group.\n     */\n    zIndex: 3,\n    /**\n     * The background color of the scrollbar itself.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    barBackgroundColor: \"#cccccc\" /* Palette.neutralColor20 */,\n    /**\n     * The width of the bar's border.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    barBorderWidth: 0,\n    /**\n     * The color of the scrollbar's border.\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    barBorderColor: \"#cccccc\" /* Palette.neutralColor20 */,\n    /**\n     * The color of the small arrow inside the scrollbar buttons.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    buttonArrowColor: \"#333333\" /* Palette.neutralColor80 */,\n    /**\n     * The color of scrollbar buttons.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    buttonBackgroundColor: \"#e6e6e6\" /* Palette.neutralColor10 */,\n    /**\n     * The color of the border of the scrollbar buttons.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    buttonBorderColor: \"#cccccc\" /* Palette.neutralColor20 */,\n    /**\n     * The border width of the scrollbar buttons.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    buttonBorderWidth: 1,\n    /**\n     * The color of the small rifles in the middle of the scrollbar.\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    rifleColor: 'none',\n    /**\n     * The color of the track background.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    trackBackgroundColor: 'rgba(255, 255, 255, 0.001)', // #18922\n    /**\n     * The color of the border of the scrollbar track.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    trackBorderColor: \"#cccccc\" /* Palette.neutralColor20 */,\n    /**\n     * The corner radius of the border of the scrollbar track.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    trackBorderRadius: 5,\n    /**\n     * The width of the border of the scrollbar track.\n     *\n     * @sample stock/scrollbar/style/\n     *         Scrollbar styling\n     */\n    trackBorderWidth: 1\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Scrollbar_ScrollbarDefaults = (ScrollbarDefaults);\n\n;// ./code/es-modules/Stock/Scrollbar/Scrollbar.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { defaultOptions } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\n\nconst { addEvent: Scrollbar_addEvent, correctFloat: Scrollbar_correctFloat, crisp, defined: Scrollbar_defined, destroyObjectProperties, fireEvent: Scrollbar_fireEvent, merge: Scrollbar_merge, pick: Scrollbar_pick, removeEvent } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Constants\n *\n * */\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/**\n * A reusable scrollbar, internally used in Highcharts Stock's\n * navigator and optionally on individual axes.\n *\n * @private\n * @class\n * @name Highcharts.Scrollbar\n * @param {Highcharts.SVGRenderer} renderer\n * @param {Highcharts.ScrollbarOptions} options\n * @param {Highcharts.Chart} chart\n */\nclass Scrollbar {\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    static compose(AxisClass) {\n        Axis_ScrollbarAxis.compose(AxisClass, Scrollbar);\n    }\n    /**\n     * When we have vertical scrollbar, rifles and arrow in buttons should be\n     * rotated. The same method is used in Navigator's handles, to rotate them.\n     *\n     * @function Highcharts.swapXY\n     *\n     * @param {Highcharts.SVGPathArray} path\n     * Path to be rotated.\n     *\n     * @param {boolean} [vertical]\n     * If vertical scrollbar, swap x-y values.\n     *\n     * @return {Highcharts.SVGPathArray}\n     * Rotated path.\n     *\n     * @requires modules/stock\n     */\n    static swapXY(path, vertical) {\n        if (vertical) {\n            path.forEach((seg) => {\n                const len = seg.length;\n                let temp;\n                for (let i = 0; i < len; i += 2) {\n                    temp = seg[i + 1];\n                    if (typeof temp === 'number') {\n                        seg[i + 1] = seg[i + 2];\n                        seg[i + 2] = temp;\n                    }\n                }\n            });\n        }\n        return path;\n    }\n    /* *\n     *\n     *  Constructors\n     *\n     * */\n    constructor(renderer, options, chart) {\n        /* *\n         *\n         *  Properties\n         *\n         * */\n        this._events = [];\n        this.chartX = 0;\n        this.chartY = 0;\n        this.from = 0;\n        this.scrollbarButtons = [];\n        this.scrollbarLeft = 0;\n        this.scrollbarStrokeWidth = 1;\n        this.scrollbarTop = 0;\n        this.size = 0;\n        this.to = 0;\n        this.trackBorderWidth = 1;\n        this.x = 0;\n        this.y = 0;\n        this.init(renderer, options, chart);\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Set up the mouse and touch events for the Scrollbar\n     *\n     * @private\n     * @function Highcharts.Scrollbar#addEvents\n     */\n    addEvents() {\n        const buttonsOrder = this.options.inverted ? [1, 0] : [0, 1], buttons = this.scrollbarButtons, bar = this.scrollbarGroup.element, track = this.track.element, mouseDownHandler = this.mouseDownHandler.bind(this), mouseMoveHandler = this.mouseMoveHandler.bind(this), mouseUpHandler = this.mouseUpHandler.bind(this);\n        const _events = [\n            // Mouse events\n            [\n                buttons[buttonsOrder[0]].element,\n                'click',\n                this.buttonToMinClick.bind(this)\n            ],\n            [\n                buttons[buttonsOrder[1]].element,\n                'click',\n                this.buttonToMaxClick.bind(this)\n            ],\n            [track, 'click', this.trackClick.bind(this)],\n            [bar, 'mousedown', mouseDownHandler],\n            [bar.ownerDocument, 'mousemove', mouseMoveHandler],\n            [bar.ownerDocument, 'mouseup', mouseUpHandler],\n            // Touch events\n            [bar, 'touchstart', mouseDownHandler],\n            [bar.ownerDocument, 'touchmove', mouseMoveHandler],\n            [bar.ownerDocument, 'touchend', mouseUpHandler]\n        ];\n        // Add them all\n        _events.forEach(function (args) {\n            Scrollbar_addEvent.apply(null, args);\n        });\n        this._events = _events;\n    }\n    buttonToMaxClick(e) {\n        const scroller = this;\n        const range = ((scroller.to - scroller.from) *\n            Scrollbar_pick(scroller.options.step, 0.2));\n        scroller.updatePosition(scroller.from + range, scroller.to + range);\n        Scrollbar_fireEvent(scroller, 'changed', {\n            from: scroller.from,\n            to: scroller.to,\n            trigger: 'scrollbar',\n            DOMEvent: e\n        });\n    }\n    buttonToMinClick(e) {\n        const scroller = this;\n        const range = Scrollbar_correctFloat(scroller.to - scroller.from) *\n            Scrollbar_pick(scroller.options.step, 0.2);\n        scroller.updatePosition(Scrollbar_correctFloat(scroller.from - range), Scrollbar_correctFloat(scroller.to - range));\n        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    cursorToScrollbarPosition(normalizedEvent) {\n        const scroller = this, options = scroller.options, minWidthDifference = options.minWidth > scroller.calculatedWidth ?\n            options.minWidth :\n            0; // `minWidth` distorts translation\n        return {\n            chartX: (normalizedEvent.chartX - scroller.x -\n                scroller.xOffset) /\n                (scroller.barWidth - minWidthDifference),\n            chartY: (normalizedEvent.chartY - scroller.y -\n                scroller.yOffset) /\n                (scroller.barWidth - minWidthDifference)\n        };\n    }\n    /**\n     * Destroys allocated elements.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#destroy\n     */\n    destroy() {\n        const scroller = this, navigator = scroller.chart.scroller;\n        // Disconnect events added in addEvents\n        scroller.removeEvents();\n        // Destroy properties\n        [\n            'track',\n            'scrollbarRifles',\n            'scrollbar',\n            'scrollbarGroup',\n            'group'\n        ].forEach(function (prop) {\n            if (scroller[prop] && scroller[prop].destroy) {\n                scroller[prop] = scroller[prop].destroy();\n            }\n        });\n        // #6421, chart may have more scrollbars\n        if (navigator && scroller === navigator.scrollbar) {\n            navigator.scrollbar = null;\n            // Destroy elements in collection\n            destroyObjectProperties(navigator.scrollbarButtons);\n        }\n    }\n    /**\n     * Draw the scrollbar buttons with arrows\n     *\n     * @private\n     * @function Highcharts.Scrollbar#drawScrollbarButton\n     * @param {number} index\n     *        0 is left, 1 is right\n     */\n    drawScrollbarButton(index) {\n        const scroller = this, renderer = scroller.renderer, scrollbarButtons = scroller.scrollbarButtons, options = scroller.options, size = scroller.size, group = renderer.g().add(scroller.group);\n        scrollbarButtons.push(group);\n        if (options.buttonsEnabled) {\n            // Create a rectangle for the scrollbar button\n            const rect = renderer.rect()\n                .addClass('highcharts-scrollbar-button')\n                .add(group);\n            // Presentational attributes\n            if (!scroller.chart.styledMode) {\n                rect.attr({\n                    stroke: options.buttonBorderColor,\n                    'stroke-width': options.buttonBorderWidth,\n                    fill: options.buttonBackgroundColor\n                });\n            }\n            // Place the rectangle based on the rendered stroke width\n            rect.attr(rect.crisp({\n                x: -0.5,\n                y: -0.5,\n                width: size,\n                height: size,\n                r: options.buttonBorderRadius\n            }, rect.strokeWidth()));\n            // Button arrow\n            const arrow = renderer\n                .path(Scrollbar.swapXY([[\n                    'M',\n                    size / 2 + (index ? -1 : 1),\n                    size / 2 - 3\n                ], [\n                    'L',\n                    size / 2 + (index ? -1 : 1),\n                    size / 2 + 3\n                ], [\n                    'L',\n                    size / 2 + (index ? 2 : -2),\n                    size / 2\n                ]], options.vertical))\n                .addClass('highcharts-scrollbar-arrow')\n                .add(scrollbarButtons[index]);\n            if (!scroller.chart.styledMode) {\n                arrow.attr({\n                    fill: options.buttonArrowColor\n                });\n            }\n        }\n    }\n    /**\n     * @private\n     * @function Highcharts.Scrollbar#init\n     * @param {Highcharts.SVGRenderer} renderer\n     * @param {Highcharts.ScrollbarOptions} options\n     * @param {Highcharts.Chart} chart\n     */\n    init(renderer, options, chart) {\n        const scroller = this;\n        scroller.scrollbarButtons = [];\n        scroller.renderer = renderer;\n        scroller.userOptions = options;\n        scroller.options = Scrollbar_merge(Scrollbar_ScrollbarDefaults, defaultOptions.scrollbar, options);\n        scroller.options.margin = Scrollbar_pick(scroller.options.margin, 10);\n        scroller.chart = chart;\n        // Backward compatibility\n        scroller.size = Scrollbar_pick(scroller.options.size, scroller.options.height);\n        // Init\n        if (options.enabled) {\n            scroller.render();\n            scroller.addEvents();\n        }\n    }\n    mouseDownHandler(e) {\n        const scroller = this, normalizedEvent = scroller.chart.pointer?.normalize(e) || e, mousePosition = scroller.cursorToScrollbarPosition(normalizedEvent);\n        scroller.chartX = mousePosition.chartX;\n        scroller.chartY = mousePosition.chartY;\n        scroller.initPositions = [scroller.from, scroller.to];\n        scroller.grabbedCenter = true;\n    }\n    /**\n     * Event handler for the mouse move event.\n     * @private\n     */\n    mouseMoveHandler(e) {\n        const scroller = this, normalizedEvent = scroller.chart.pointer?.normalize(e) || e, options = scroller.options, direction = options.vertical ?\n            'chartY' : 'chartX', initPositions = scroller.initPositions || [];\n        let scrollPosition, chartPosition, change;\n        // In iOS, a mousemove event with e.pageX === 0 is fired when\n        // holding the finger down in the center of the scrollbar. This\n        // should be ignored.\n        if (scroller.grabbedCenter &&\n            // #4696, scrollbar failed on Android\n            (!e.touches || e.touches[0][direction] !== 0)) {\n            chartPosition = scroller.cursorToScrollbarPosition(normalizedEvent)[direction];\n            scrollPosition = scroller[direction];\n            change = chartPosition - scrollPosition;\n            scroller.hasDragged = true;\n            scroller.updatePosition(initPositions[0] + change, initPositions[1] + change);\n            if (scroller.hasDragged) {\n                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    mouseUpHandler(e) {\n        const 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    position(x, y, width, height) {\n        const scroller = this, options = scroller.options, { buttonsEnabled, margin = 0, vertical } = options, method = scroller.rendered ? 'animate' : 'attr';\n        let xOffset = height, yOffset = 0;\n        // Make the scrollbar visible when it is repositioned, #15763.\n        scroller.group.show();\n        scroller.x = x;\n        scroller.y = y + this.trackBorderWidth;\n        scroller.width = width; // Width with buttons\n        scroller.height = height;\n        scroller.xOffset = xOffset;\n        scroller.yOffset = yOffset;\n        // If Scrollbar is a vertical type, swap options:\n        if (vertical) {\n            scroller.width = scroller.yOffset = width = yOffset = scroller.size;\n            scroller.xOffset = xOffset = 0;\n            scroller.yOffset = yOffset = buttonsEnabled ? scroller.size : 0;\n            // Width without buttons\n            scroller.barWidth = height - (buttonsEnabled ? width * 2 : 0);\n            scroller.x = x = x + margin;\n        }\n        else {\n            scroller.height = height = scroller.size;\n            scroller.xOffset = xOffset = buttonsEnabled ? scroller.size : 0;\n            // Width without buttons\n            scroller.barWidth = width - (buttonsEnabled ? height * 2 : 0);\n            scroller.y = scroller.y + margin;\n        }\n        // Set general position for a group:\n        scroller.group[method]({\n            translateX: x,\n            translateY: scroller.y\n        });\n        // Resize background/track:\n        scroller.track[method]({\n            width: width,\n            height: height\n        });\n        // Move right/bottom button to its place:\n        scroller.scrollbarButtons[1][method]({\n            translateX: vertical ? 0 : width - xOffset,\n            translateY: vertical ? height - yOffset : 0\n        });\n    }\n    /**\n     * Removes the event handlers attached previously with addEvents.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#removeEvents\n     */\n    removeEvents() {\n        this._events.forEach(function (args) {\n            removeEvent.apply(null, args);\n        });\n        this._events.length = 0;\n    }\n    /**\n     * Render scrollbar with all required items.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#render\n     */\n    render() {\n        const scroller = this, renderer = scroller.renderer, options = scroller.options, size = scroller.size, styledMode = scroller.chart.styledMode, group = renderer.g('scrollbar')\n            .attr({\n            zIndex: options.zIndex\n        })\n            .hide() // Initially hide the scrollbar #15863\n            .add();\n        // Draw the scrollbar group\n        scroller.group = group;\n        // Draw the scrollbar track:\n        scroller.track = renderer.rect()\n            .addClass('highcharts-scrollbar-track')\n            .attr({\n            r: options.trackBorderRadius || 0,\n            height: size,\n            width: size\n        }).add(group);\n        if (!styledMode) {\n            scroller.track.attr({\n                fill: options.trackBackgroundColor,\n                stroke: options.trackBorderColor,\n                'stroke-width': options.trackBorderWidth\n            });\n        }\n        const trackBorderWidth = scroller.trackBorderWidth =\n            scroller.track.strokeWidth();\n        scroller.track.attr({\n            x: -crisp(0, trackBorderWidth),\n            y: -crisp(0, trackBorderWidth)\n        });\n        // Draw the scrollbar itself\n        scroller.scrollbarGroup = renderer.g().add(group);\n        scroller.scrollbar = renderer.rect()\n            .addClass('highcharts-scrollbar-thumb')\n            .attr({\n            height: size - trackBorderWidth,\n            width: size - trackBorderWidth,\n            r: options.barBorderRadius || 0\n        }).add(scroller.scrollbarGroup);\n        scroller.scrollbarRifles = renderer\n            .path(Scrollbar.swapXY([\n            ['M', -3, size / 4],\n            ['L', -3, 2 * size / 3],\n            ['M', 0, size / 4],\n            ['L', 0, 2 * size / 3],\n            ['M', 3, size / 4],\n            ['L', 3, 2 * size / 3]\n        ], options.vertical))\n            .addClass('highcharts-scrollbar-rifles')\n            .add(scroller.scrollbarGroup);\n        if (!styledMode) {\n            scroller.scrollbar.attr({\n                fill: options.barBackgroundColor,\n                stroke: options.barBorderColor,\n                'stroke-width': options.barBorderWidth\n            });\n            scroller.scrollbarRifles.attr({\n                stroke: options.rifleColor,\n                'stroke-width': 1\n            });\n        }\n        scroller.scrollbarStrokeWidth = scroller.scrollbar.strokeWidth();\n        scroller.scrollbarGroup.translate(-crisp(0, scroller.scrollbarStrokeWidth), -crisp(0, scroller.scrollbarStrokeWidth));\n        // Draw the buttons:\n        scroller.drawScrollbarButton(0);\n        scroller.drawScrollbarButton(1);\n    }\n    /**\n     * Set scrollbar size, with a given scale.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#setRange\n     * @param {number} from\n     *        scale (0-1) where bar should start\n     * @param {number} to\n     *        scale (0-1) where bar should end\n     */\n    setRange(from, to) {\n        const scroller = this, options = scroller.options, vertical = options.vertical, minWidth = options.minWidth, fullWidth = scroller.barWidth, method = (this.rendered &&\n            !this.hasDragged &&\n            !(this.chart.navigator && this.chart.navigator.hasDragged)) ? 'animate' : 'attr';\n        if (!Scrollbar_defined(fullWidth)) {\n            return;\n        }\n        const toPX = fullWidth * Math.min(to, 1);\n        let fromPX, newSize;\n        from = Math.max(from, 0);\n        fromPX = Math.ceil(fullWidth * from);\n        scroller.calculatedWidth = newSize = Scrollbar_correctFloat(toPX - fromPX);\n        // We need to recalculate position, if minWidth is used\n        if (newSize < minWidth) {\n            fromPX = (fullWidth - minWidth + newSize) * from;\n            newSize = minWidth;\n        }\n        const newPos = Math.floor(fromPX + scroller.xOffset + scroller.yOffset);\n        const newRiflesPos = newSize / 2 - 0.5; // -0.5 -> rifle line width / 2\n        // Store current position:\n        scroller.from = from;\n        scroller.to = to;\n        if (!vertical) {\n            scroller.scrollbarGroup[method]({\n                translateX: newPos\n            });\n            scroller.scrollbar[method]({\n                width: newSize\n            });\n            scroller.scrollbarRifles[method]({\n                translateX: newRiflesPos\n            });\n            scroller.scrollbarLeft = newPos;\n            scroller.scrollbarTop = 0;\n        }\n        else {\n            scroller.scrollbarGroup[method]({\n                translateY: newPos\n            });\n            scroller.scrollbar[method]({\n                height: newSize\n            });\n            scroller.scrollbarRifles[method]({\n                translateY: newRiflesPos\n            });\n            scroller.scrollbarTop = newPos;\n            scroller.scrollbarLeft = 0;\n        }\n        if (newSize <= 12) {\n            scroller.scrollbarRifles.hide();\n        }\n        else {\n            scroller.scrollbarRifles.show();\n        }\n        // Show or hide the scrollbar based on the showFull setting\n        if (options.showFull === false) {\n            if (from <= 0 && to >= 1) {\n                scroller.group.hide();\n            }\n            else {\n                scroller.group.show();\n            }\n        }\n        scroller.rendered = true;\n    }\n    /**\n     * Checks if the extremes should be updated in response to a scrollbar\n     * change event.\n     *\n     * @private\n     * @function Highcharts.Scrollbar#shouldUpdateExtremes\n     */\n    shouldUpdateExtremes(eventType) {\n        return (Scrollbar_pick(this.options.liveRedraw, (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).svg &&\n            !(highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isTouchDevice &&\n            !this.chart.boosted) ||\n            // Mouseup always should change extremes\n            eventType === 'mouseup' ||\n            eventType === 'touchend' ||\n            // Internal events\n            !Scrollbar_defined(eventType));\n    }\n    trackClick(e) {\n        const scroller = this;\n        const normalizedEvent = scroller.chart.pointer?.normalize(e) || e, range = scroller.to - scroller.from, top = scroller.y + scroller.scrollbarTop, left = scroller.x + scroller.scrollbarLeft;\n        if ((scroller.options.vertical && normalizedEvent.chartY > top) ||\n            (!scroller.options.vertical && normalizedEvent.chartX > left)) {\n            // On the top or on the left side of the track:\n            scroller.updatePosition(scroller.from + range, scroller.to + range);\n        }\n        else {\n            // On the bottom or the right side of the track:\n            scroller.updatePosition(scroller.from - range, scroller.to - range);\n        }\n        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    update(options) {\n        this.destroy();\n        this.init(this.chart.renderer, Scrollbar_merge(true, this.options, options), this.chart);\n    }\n    /**\n     * Update position option in the Scrollbar, with normalized 0-1 scale\n     *\n     * @private\n     * @function Highcharts.Scrollbar#updatePosition\n     * @param  {number} from\n     * @param  {number} to\n     */\n    updatePosition(from, to) {\n        if (to > 1) {\n            from = Scrollbar_correctFloat(1 - Scrollbar_correctFloat(to - from));\n            to = 1;\n        }\n        if (from < 0) {\n            to = Scrollbar_correctFloat(to - from);\n            from = 0;\n        }\n        this.from = from;\n        this.to = to;\n    }\n}\n/* *\n *\n *  Static Properties\n *\n * */\nScrollbar.defaultOptions = Scrollbar_ScrollbarDefaults;\n/* *\n *\n *  Registry\n *\n * */\ndefaultOptions.scrollbar = Scrollbar_merge(true, Scrollbar.defaultOptions, defaultOptions.scrollbar);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Scrollbar_Scrollbar = (Scrollbar);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"SVGRenderer\"],\"commonjs\":[\"highcharts\",\"SVGRenderer\"],\"commonjs2\":[\"highcharts\",\"SVGRenderer\"],\"root\":[\"Highcharts\",\"SVGRenderer\"]}\nvar highcharts_SVGRenderer_commonjs_highcharts_SVGRenderer_commonjs2_highcharts_SVGRenderer_root_Highcharts_SVGRenderer_ = __webpack_require__(540);\nvar highcharts_SVGRenderer_commonjs_highcharts_SVGRenderer_commonjs2_highcharts_SVGRenderer_root_Highcharts_SVGRenderer_default = /*#__PURE__*/__webpack_require__.n(highcharts_SVGRenderer_commonjs_highcharts_SVGRenderer_commonjs2_highcharts_SVGRenderer_root_Highcharts_SVGRenderer_);\n;// ./code/es-modules/Stock/Navigator/Navigator.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\n\nconst { defaultOptions: Navigator_defaultOptions } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { isTouchDevice: Navigator_isTouchDevice } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\n\nconst { prototype: { symbols } } = (highcharts_SVGRenderer_commonjs_highcharts_SVGRenderer_commonjs2_highcharts_SVGRenderer_root_Highcharts_SVGRenderer_default());\n\nconst { addEvent: Navigator_addEvent, clamp, correctFloat: Navigator_correctFloat, defined: Navigator_defined, destroyObjectProperties: Navigator_destroyObjectProperties, erase, extend: Navigator_extend, find: Navigator_find, fireEvent: Navigator_fireEvent, isArray, isNumber: Navigator_isNumber, merge: Navigator_merge, pick: Navigator_pick, removeEvent: Navigator_removeEvent, splat } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Finding the min or max of a set of variables where we don't know if they are\n * defined, is a pattern that is repeated several places in Highcharts. Consider\n * making this a global utility method.\n * @private\n */\nfunction numExt(extreme, ...args) {\n    const numbers = [].filter.call(args, Navigator_isNumber);\n    if (numbers.length) {\n        return Math[extreme].apply(0, numbers);\n    }\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * The Navigator class\n *\n * @private\n * @class\n * @name Highcharts.Navigator\n *\n * @param {Highcharts.Chart} chart\n *        Chart object\n */\nclass Navigator {\n    /* *\n     *\n     *  Static Properties\n     *\n     * */\n    static compose(ChartClass, AxisClass, SeriesClass) {\n        Navigator_ChartNavigatorComposition.compose(ChartClass, Navigator);\n        Navigator_NavigatorComposition.compose(ChartClass, AxisClass, SeriesClass);\n    }\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(chart) {\n        this.isDirty = false;\n        this.scrollbarHeight = 0;\n        this.init(chart);\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Draw one of the handles on the side of the zoomed range in the navigator.\n     *\n     * @private\n     * @function Highcharts.Navigator#drawHandle\n     *\n     * @param {number} x\n     *        The x center for the handle\n     *\n     * @param {number} index\n     *        0 for left and 1 for right\n     *\n     * @param {boolean|undefined} inverted\n     *        Flag for chart.inverted\n     *\n     * @param {string} verb\n     *        Use 'animate' or 'attr'\n     */\n    drawHandle(x, index, inverted, verb) {\n        const navigator = this, height = navigator.navigatorOptions.handles.height;\n        // Place it\n        navigator.handles[index][verb](inverted ? {\n            translateX: Math.round(navigator.left + navigator.height / 2),\n            translateY: Math.round(navigator.top + parseInt(x, 10) + 0.5 - height)\n        } : {\n            translateX: Math.round(navigator.left + parseInt(x, 10)),\n            translateY: Math.round(navigator.top + navigator.height / 2 - height / 2 - 1)\n        });\n    }\n    /**\n     * Render outline around the zoomed range\n     *\n     * @private\n     * @function Highcharts.Navigator#drawOutline\n     *\n     * @param {number} zoomedMin\n     *        in pixels position where zoomed range starts\n     *\n     * @param {number} zoomedMax\n     *        in pixels position where zoomed range ends\n     *\n     * @param {boolean|undefined} inverted\n     *        flag if chart is inverted\n     *\n     * @param {string} verb\n     *        use 'animate' or 'attr'\n     */\n    drawOutline(zoomedMin, zoomedMax, inverted, verb) {\n        const navigator = this, maskInside = navigator.navigatorOptions.maskInside, outlineWidth = navigator.outline.strokeWidth(), halfOutline = outlineWidth / 2, outlineCorrection = (outlineWidth % 2) / 2, // #5800\n        scrollButtonSize = navigator.scrollButtonSize, navigatorSize = navigator.size, navigatorTop = navigator.top, height = navigator.height, lineTop = navigatorTop - halfOutline, lineBtm = navigatorTop + height;\n        let left = navigator.left, verticalMin, path;\n        if (inverted) {\n            verticalMin = navigatorTop + zoomedMax + outlineCorrection;\n            zoomedMax = navigatorTop + zoomedMin + outlineCorrection;\n            path = [\n                [\n                    'M',\n                    left + height,\n                    navigatorTop - scrollButtonSize - outlineCorrection\n                ],\n                // Top right of zoomed range\n                ['L', left + height, verticalMin],\n                ['L', left, verticalMin], // Top left of z.r.\n                ['M', left, zoomedMax], // Bottom left of z.r.\n                ['L', left + height, zoomedMax], // Bottom right of z.r.\n                [\n                    'L',\n                    left + height,\n                    navigatorTop + navigatorSize + scrollButtonSize\n                ]\n            ];\n            if (maskInside) {\n                path.push(\n                // Upper left of zoomed range\n                ['M', left + height, verticalMin - halfOutline], \n                // Upper right of z.r.\n                [\n                    'L',\n                    left + height,\n                    zoomedMax + halfOutline\n                ]);\n            }\n        }\n        else {\n            left -= scrollButtonSize;\n            zoomedMin += left + scrollButtonSize - outlineCorrection;\n            zoomedMax += left + scrollButtonSize - outlineCorrection;\n            path = [\n                // Left\n                ['M', left, lineTop],\n                // Upper left of zoomed range\n                ['L', zoomedMin, lineTop],\n                // Lower left of z.r.\n                ['L', zoomedMin, lineBtm],\n                // Lower right of z.r.\n                ['M', zoomedMax, lineBtm],\n                // Upper right of z.r.\n                ['L', zoomedMax, lineTop],\n                // Right\n                [\n                    'L',\n                    left + navigatorSize + scrollButtonSize * 2,\n                    lineTop\n                ]\n            ];\n            if (maskInside) {\n                path.push(\n                // Upper left of zoomed range\n                ['M', zoomedMin - halfOutline, lineTop], \n                // Upper right of z.r.\n                ['L', zoomedMax + halfOutline, lineTop]);\n            }\n        }\n        navigator.outline[verb]({\n            d: path\n        });\n    }\n    /**\n     * Render outline around the zoomed range\n     *\n     * @private\n     * @function Highcharts.Navigator#drawMasks\n     *\n     * @param {number} zoomedMin\n     *        in pixels position where zoomed range starts\n     *\n     * @param {number} zoomedMax\n     *        in pixels position where zoomed range ends\n     *\n     * @param {boolean|undefined} inverted\n     *        flag if chart is inverted\n     *\n     * @param {string} verb\n     *        use 'animate' or 'attr'\n     */\n    drawMasks(zoomedMin, zoomedMax, inverted, verb) {\n        const navigator = this, left = navigator.left, top = navigator.top, navigatorHeight = navigator.height;\n        let height, width, x, y;\n        // Determine rectangle position & size\n        // According to (non)inverted position:\n        if (inverted) {\n            x = [left, left, left];\n            y = [top, top + zoomedMin, top + zoomedMax];\n            width = [navigatorHeight, navigatorHeight, navigatorHeight];\n            height = [\n                zoomedMin,\n                zoomedMax - zoomedMin,\n                navigator.size - zoomedMax\n            ];\n        }\n        else {\n            x = [left, left + zoomedMin, left + zoomedMax];\n            y = [top, top, top];\n            width = [\n                zoomedMin,\n                zoomedMax - zoomedMin,\n                navigator.size - zoomedMax\n            ];\n            height = [navigatorHeight, navigatorHeight, navigatorHeight];\n        }\n        navigator.shades.forEach((shade, i) => {\n            shade[verb]({\n                x: x[i],\n                y: y[i],\n                width: width[i],\n                height: height[i]\n            });\n        });\n    }\n    /**\n     * Generate and update DOM elements for a navigator:\n     *\n     * - main navigator group\n     *\n     * - all shades\n     *\n     * - outline\n     *\n     * - handles\n     *\n     * @private\n     * @function Highcharts.Navigator#renderElements\n     */\n    renderElements() {\n        const navigator = this, navigatorOptions = navigator.navigatorOptions, maskInside = navigatorOptions.maskInside, chart = navigator.chart, inverted = chart.inverted, renderer = chart.renderer, mouseCursor = {\n            cursor: inverted ? 'ns-resize' : 'ew-resize'\n        }, \n        // Create the main navigator group\n        navigatorGroup = navigator.navigatorGroup ??\n            (navigator.navigatorGroup = renderer\n                .g('navigator')\n                .attr({\n                zIndex: 8,\n                visibility: 'hidden'\n            })\n                .add());\n        // Create masks, each mask will get events and fill:\n        [\n            !maskInside,\n            maskInside,\n            !maskInside\n        ].forEach((hasMask, index) => {\n            const shade = navigator.shades[index] ??\n                (navigator.shades[index] = renderer.rect()\n                    .addClass('highcharts-navigator-mask' +\n                    (index === 1 ? '-inside' : '-outside'))\n                    .add(navigatorGroup));\n            if (!chart.styledMode) {\n                shade.attr({\n                    fill: hasMask ? navigatorOptions.maskFill : 'rgba(0,0,0,0)'\n                });\n                if (index === 1) {\n                    shade.css(mouseCursor);\n                }\n            }\n        });\n        // Create the outline:\n        if (!navigator.outline) {\n            navigator.outline = renderer.path()\n                .addClass('highcharts-navigator-outline')\n                .add(navigatorGroup);\n        }\n        if (!chart.styledMode) {\n            navigator.outline.attr({\n                'stroke-width': navigatorOptions.outlineWidth,\n                stroke: navigatorOptions.outlineColor\n            });\n        }\n        // Create the handlers:\n        if (navigatorOptions.handles?.enabled) {\n            const handlesOptions = navigatorOptions.handles, { height, width } = handlesOptions;\n            [0, 1].forEach((index) => {\n                const symbolName = handlesOptions.symbols[index];\n                if (!navigator.handles[index] ||\n                    navigator.handles[index].symbolUrl !== symbolName) {\n                    // Generate symbol from scratch if we're dealing with an URL\n                    navigator.handles[index]?.destroy();\n                    navigator.handles[index] = renderer.symbol(symbolName, -width / 2 - 1, 0, width, height, handlesOptions);\n                    // Z index is 6 for right handle, 7 for left. Can't be 10,\n                    // because of the tooltip in inverted chart (#2908).\n                    navigator.handles[index].attr({ zIndex: 7 - index })\n                        .addClass('highcharts-navigator-handle ' +\n                        'highcharts-navigator-handle-' +\n                        ['left', 'right'][index]).add(navigatorGroup);\n                    navigator.addMouseEvents();\n                    // If the navigator symbol changed, update its path and name\n                }\n                else if (!navigator.handles[index].isImg &&\n                    navigator.handles[index].symbolName !== symbolName) {\n                    const symbolFn = symbols[symbolName], path = symbolFn.call(symbols, -width / 2 - 1, 0, width, height);\n                    navigator.handles[index].attr({\n                        d: path\n                    });\n                    navigator.handles[index].symbolName = symbolName;\n                }\n                if (chart.inverted) {\n                    navigator.handles[index].attr({\n                        rotation: 90,\n                        rotationOriginX: Math.floor(-width / 2),\n                        rotationOriginY: (height + width) / 2\n                    });\n                }\n                if (!chart.styledMode) {\n                    navigator.handles[index]\n                        .attr({\n                        fill: handlesOptions.backgroundColor,\n                        stroke: handlesOptions.borderColor,\n                        'stroke-width': handlesOptions.lineWidth,\n                        width: handlesOptions.width,\n                        height: handlesOptions.height,\n                        x: -width / 2 - 1,\n                        y: 0\n                    })\n                        .css(mouseCursor);\n                }\n            });\n        }\n    }\n    /**\n     * Update navigator\n     *\n     * @private\n     * @function Highcharts.Navigator#update\n     *\n     * @param {Highcharts.NavigatorOptions} options\n     *        Options to merge in when updating navigator\n     */\n    update(options, redraw = false) {\n        const chart = this.chart, invertedUpdate = chart.options.chart.inverted !==\n            chart.scrollbar?.options.vertical;\n        Navigator_merge(true, chart.options.navigator, options);\n        this.navigatorOptions = chart.options.navigator || {};\n        this.setOpposite();\n        // Revert to destroy/init for navigator/scrollbar enabled toggle\n        if (Navigator_defined(options.enabled) || invertedUpdate) {\n            this.destroy();\n            this.navigatorEnabled = options.enabled || this.navigatorEnabled;\n            return this.init(chart);\n        }\n        if (this.navigatorEnabled) {\n            this.isDirty = true;\n            if (options.adaptToUpdatedData === false) {\n                this.baseSeries.forEach((series) => {\n                    Navigator_removeEvent(series, 'updatedData', this.updatedDataHandler);\n                }, this);\n            }\n            if (options.adaptToUpdatedData) {\n                this.baseSeries.forEach((series) => {\n                    series.eventsToUnbind.push(Navigator_addEvent(series, 'updatedData', this.updatedDataHandler));\n                }, this);\n            }\n            // Update navigator series\n            if (options.series || options.baseSeries) {\n                this.setBaseSeries(void 0, false);\n            }\n            // Update navigator axis\n            if (options.height || options.xAxis || options.yAxis) {\n                this.height = options.height ?? this.height;\n                const offsets = this.getXAxisOffsets();\n                this.xAxis.update({\n                    ...options.xAxis,\n                    offsets,\n                    [chart.inverted ? 'width' : 'height']: this.height,\n                    [chart.inverted ? 'height' : 'width']: void 0\n                }, false);\n                this.yAxis.update({\n                    ...options.yAxis,\n                    [chart.inverted ? 'width' : 'height']: this.height\n                }, false);\n            }\n        }\n        if (redraw) {\n            chart.redraw();\n        }\n    }\n    /**\n     * Render the navigator\n     *\n     * @private\n     * @function Highcharts.Navigator#render\n     * @param {number} min\n     *        X axis value minimum\n     * @param {number} max\n     *        X axis value maximum\n     * @param {number} [pxMin]\n     *        Pixel value minimum\n     * @param {number} [pxMax]\n     *        Pixel value maximum\n     */\n    render(min, max, pxMin, pxMax) {\n        const navigator = this, chart = navigator.chart, xAxis = navigator.xAxis, pointRange = xAxis.pointRange || 0, scrollbarXAxis = xAxis.navigatorAxis.fake ? chart.xAxis[0] : xAxis, navigatorEnabled = navigator.navigatorEnabled, rendered = navigator.rendered, inverted = chart.inverted, minRange = chart.xAxis[0].minRange, maxRange = chart.xAxis[0].options.maxRange, scrollButtonSize = navigator.scrollButtonSize;\n        let navigatorWidth, scrollbarLeft, scrollbarTop, scrollbarHeight = navigator.scrollbarHeight, navigatorSize, verb;\n        // Don't redraw while moving the handles (#4703).\n        if (this.hasDragged && !Navigator_defined(pxMin)) {\n            return;\n        }\n        if (this.isDirty) {\n            // Update DOM navigator elements\n            this.renderElements();\n        }\n        min = Navigator_correctFloat(min - pointRange / 2);\n        max = Navigator_correctFloat(max + pointRange / 2);\n        // Don't render the navigator until we have data (#486, #4202, #5172).\n        if (!Navigator_isNumber(min) || !Navigator_isNumber(max)) {\n            // However, if navigator was already rendered, we may need to resize\n            // it. For example hidden series, but visible navigator (#6022).\n            if (rendered) {\n                pxMin = 0;\n                pxMax = Navigator_pick(xAxis.width, scrollbarXAxis.width);\n            }\n            else {\n                return;\n            }\n        }\n        navigator.left = Navigator_pick(xAxis.left, \n        // In case of scrollbar only, without navigator\n        chart.plotLeft + scrollButtonSize +\n            (inverted ? chart.plotWidth : 0));\n        let zoomedMax = navigator.size = navigatorSize = Navigator_pick(xAxis.len, (inverted ? chart.plotHeight : chart.plotWidth) -\n            2 * scrollButtonSize);\n        if (inverted) {\n            navigatorWidth = scrollbarHeight;\n        }\n        else {\n            navigatorWidth = navigatorSize + 2 * scrollButtonSize;\n        }\n        // Get the pixel position of the handles\n        pxMin = Navigator_pick(pxMin, xAxis.toPixels(min, true));\n        pxMax = Navigator_pick(pxMax, xAxis.toPixels(max, true));\n        // Verify (#1851, #2238)\n        if (!Navigator_isNumber(pxMin) || Math.abs(pxMin) === Infinity) {\n            pxMin = 0;\n            pxMax = navigatorWidth;\n        }\n        // Are we below the minRange? (#2618, #6191)\n        const newMin = xAxis.toValue(pxMin, true), newMax = xAxis.toValue(pxMax, true), currentRange = Math.abs(Navigator_correctFloat(newMax - newMin));\n        if (currentRange < minRange) {\n            if (this.grabbedLeft) {\n                pxMin = xAxis.toPixels(newMax - minRange - pointRange, true);\n            }\n            else if (this.grabbedRight) {\n                pxMax = xAxis.toPixels(newMin + minRange + pointRange, true);\n            }\n        }\n        else if (Navigator_defined(maxRange) &&\n            Navigator_correctFloat(currentRange - pointRange) > maxRange) {\n            if (this.grabbedLeft) {\n                pxMin = xAxis.toPixels(newMax - maxRange - pointRange, true);\n            }\n            else if (this.grabbedRight) {\n                pxMax = xAxis.toPixels(newMin + maxRange + pointRange, true);\n            }\n        }\n        // Handles are allowed to cross, but never exceed the plot area\n        navigator.zoomedMax = clamp(Math.max(pxMin, pxMax), 0, zoomedMax);\n        navigator.zoomedMin = clamp(navigator.fixedWidth ?\n            navigator.zoomedMax - navigator.fixedWidth :\n            Math.min(pxMin, pxMax), 0, zoomedMax);\n        navigator.range = navigator.zoomedMax - navigator.zoomedMin;\n        zoomedMax = Math.round(navigator.zoomedMax);\n        const zoomedMin = Math.round(navigator.zoomedMin);\n        if (navigatorEnabled) {\n            navigator.navigatorGroup.attr({\n                visibility: 'inherit'\n            });\n            // Place elements\n            verb = rendered && !navigator.hasDragged ? 'animate' : 'attr';\n            navigator.drawMasks(zoomedMin, zoomedMax, inverted, verb);\n            navigator.drawOutline(zoomedMin, zoomedMax, inverted, verb);\n            if (navigator.navigatorOptions.handles.enabled) {\n                navigator.drawHandle(zoomedMin, 0, inverted, verb);\n                navigator.drawHandle(zoomedMax, 1, inverted, verb);\n            }\n        }\n        if (navigator.scrollbar) {\n            if (inverted) {\n                scrollbarTop = navigator.top - scrollButtonSize;\n                scrollbarLeft = navigator.left - scrollbarHeight +\n                    (navigatorEnabled || !scrollbarXAxis.opposite ? 0 :\n                        // Multiple axes has offsets:\n                        (scrollbarXAxis.titleOffset || 0) +\n                            // Self margin from the axis.title\n                            scrollbarXAxis.axisTitleMargin);\n                scrollbarHeight = navigatorSize + 2 * scrollButtonSize;\n            }\n            else {\n                scrollbarTop = navigator.top + (navigatorEnabled ?\n                    navigator.height :\n                    -scrollbarHeight);\n                scrollbarLeft = navigator.left - scrollButtonSize;\n            }\n            // Reposition scrollbar\n            navigator.scrollbar.position(scrollbarLeft, scrollbarTop, navigatorWidth, scrollbarHeight);\n            // Keep scale 0-1\n            navigator.scrollbar.setRange(\n            // Use real value, not rounded because range can be very small\n            // (#1716)\n            navigator.zoomedMin / (navigatorSize || 1), navigator.zoomedMax / (navigatorSize || 1));\n        }\n        navigator.rendered = true;\n        this.isDirty = false;\n        Navigator_fireEvent(this, 'afterRender');\n    }\n    /**\n     * Set up the mouse and touch events for the navigator\n     *\n     * @private\n     * @function Highcharts.Navigator#addMouseEvents\n     */\n    addMouseEvents() {\n        const navigator = this, chart = navigator.chart, container = chart.container;\n        let eventsToUnbind = [], mouseMoveHandler, mouseUpHandler;\n        /**\n         * Create mouse events' handlers.\n         * Make them as separate functions to enable wrapping them:\n         */\n        navigator.mouseMoveHandler = mouseMoveHandler = function (e) {\n            navigator.onMouseMove(e);\n        };\n        navigator.mouseUpHandler = mouseUpHandler = function (e) {\n            navigator.onMouseUp(e);\n        };\n        // Add shades and handles mousedown events\n        eventsToUnbind = navigator.getPartsEvents('mousedown');\n        eventsToUnbind.push(\n        // Add mouse move and mouseup events. These are bind to doc/div,\n        // because Navigator.grabbedSomething flags are stored in mousedown\n        // events\n        Navigator_addEvent(chart.renderTo, 'mousemove', mouseMoveHandler), Navigator_addEvent(container.ownerDocument, 'mouseup', mouseUpHandler), \n        // Touch events\n        Navigator_addEvent(chart.renderTo, 'touchmove', mouseMoveHandler), Navigator_addEvent(container.ownerDocument, 'touchend', mouseUpHandler));\n        eventsToUnbind.concat(navigator.getPartsEvents('touchstart'));\n        navigator.eventsToUnbind = eventsToUnbind;\n        // Data events\n        if (navigator.series && navigator.series[0]) {\n            eventsToUnbind.push(Navigator_addEvent(navigator.series[0].xAxis, 'foundExtremes', function () {\n                chart.navigator.modifyNavigatorAxisExtremes();\n            }));\n        }\n    }\n    /**\n     * Generate events for handles and masks\n     *\n     * @private\n     * @function Highcharts.Navigator#getPartsEvents\n     *\n     * @param {string} eventName\n     *        Event name handler, 'mousedown' or 'touchstart'\n     *\n     * @return {Array<Function>}\n     *         An array of functions to remove navigator functions from the\n     *         events again.\n     */\n    getPartsEvents(eventName) {\n        const navigator = this, events = [];\n        ['shades', 'handles'].forEach(function (name) {\n            navigator[name].forEach(function (navigatorItem, index) {\n                events.push(Navigator_addEvent(navigatorItem.element, eventName, function (e) {\n                    navigator[name + 'Mousedown'](e, index);\n                }));\n            });\n        });\n        return events;\n    }\n    /**\n     * Mousedown on a shaded mask, either:\n     *\n     * - will be stored for future drag&drop\n     *\n     * - will directly shift to a new range\n     *\n     * @private\n     * @function Highcharts.Navigator#shadesMousedown\n     *\n     * @param {Highcharts.PointerEventObject} e\n     *        Mouse event\n     *\n     * @param {number} index\n     *        Index of a mask in Navigator.shades array\n     */\n    shadesMousedown(e, index) {\n        e = this.chart.pointer?.normalize(e) || e;\n        const navigator = this, chart = navigator.chart, xAxis = navigator.xAxis, zoomedMin = navigator.zoomedMin, navigatorSize = navigator.size, range = navigator.range;\n        let navigatorPosition = navigator.left, chartX = e.chartX, fixedMax, fixedMin, ext, left;\n        // For inverted chart, swap some options:\n        if (chart.inverted) {\n            chartX = e.chartY;\n            navigatorPosition = navigator.top;\n        }\n        if (index === 1) {\n            // Store information for drag&drop\n            navigator.grabbedCenter = chartX;\n            navigator.fixedWidth = range;\n            navigator.dragOffset = chartX - zoomedMin;\n        }\n        else {\n            // Shift the range by clicking on shaded areas\n            left = chartX - navigatorPosition - range / 2;\n            if (index === 0) {\n                left = Math.max(0, left);\n            }\n            else if (index === 2 && left + range >= navigatorSize) {\n                left = navigatorSize - range;\n                if (navigator.reversedExtremes) {\n                    // #7713\n                    left -= range;\n                    fixedMin = navigator.getUnionExtremes().dataMin;\n                }\n                else {\n                    // #2293, #3543\n                    fixedMax = navigator.getUnionExtremes().dataMax;\n                }\n            }\n            if (left !== zoomedMin) { // It has actually moved\n                navigator.fixedWidth = range; // #1370\n                ext = xAxis.navigatorAxis.toFixedRange(left, left + range, fixedMin, fixedMax);\n                if (Navigator_defined(ext.min)) { // #7411\n                    Navigator_fireEvent(this, 'setRange', {\n                        min: Math.min(ext.min, ext.max),\n                        max: Math.max(ext.min, ext.max),\n                        redraw: true,\n                        eventArguments: {\n                            trigger: 'navigator'\n                        }\n                    });\n                }\n            }\n        }\n    }\n    /**\n     * Mousedown on a handle mask.\n     * Will store necessary information for drag&drop.\n     *\n     * @private\n     * @function Highcharts.Navigator#handlesMousedown\n     * @param {Highcharts.PointerEventObject} e\n     *        Mouse event\n     * @param {number} index\n     *        Index of a handle in Navigator.handles array\n     */\n    handlesMousedown(e, index) {\n        e = this.chart.pointer?.normalize(e) || e;\n        const navigator = this, chart = navigator.chart, baseXAxis = chart.xAxis[0], \n        // For reversed axes, min and max are changed,\n        // so the other extreme should be stored\n        reverse = navigator.reversedExtremes;\n        if (index === 0) {\n            // Grab the left handle\n            navigator.grabbedLeft = true;\n            navigator.otherHandlePos = navigator.zoomedMax;\n            navigator.fixedExtreme = reverse ? baseXAxis.min : baseXAxis.max;\n        }\n        else {\n            // Grab the right handle\n            navigator.grabbedRight = true;\n            navigator.otherHandlePos = navigator.zoomedMin;\n            navigator.fixedExtreme = reverse ? baseXAxis.max : baseXAxis.min;\n        }\n        chart.setFixedRange(void 0);\n    }\n    /**\n     * Mouse move event based on x/y mouse position.\n     *\n     * @private\n     * @function Highcharts.Navigator#onMouseMove\n     *\n     * @param {Highcharts.PointerEventObject} e\n     *        Mouse event\n     */\n    onMouseMove(e) {\n        const navigator = this, chart = navigator.chart, navigatorSize = navigator.navigatorSize, range = navigator.range, dragOffset = navigator.dragOffset, inverted = chart.inverted;\n        let left = navigator.left, chartX;\n        // In iOS, a mousemove event with e.pageX === 0 is fired when holding\n        // the finger down in the center of the scrollbar. This should be\n        // ignored.\n        if (!e.touches || e.touches[0].pageX !== 0) { // #4696\n            e = chart.pointer?.normalize(e) || e;\n            chartX = e.chartX;\n            // Swap some options for inverted chart\n            if (inverted) {\n                left = navigator.top;\n                chartX = e.chartY;\n            }\n            // Drag left handle or top handle\n            if (navigator.grabbedLeft) {\n                navigator.hasDragged = true;\n                navigator.render(0, 0, chartX - left, navigator.otherHandlePos);\n                // Drag right handle or bottom handle\n            }\n            else if (navigator.grabbedRight) {\n                navigator.hasDragged = true;\n                navigator.render(0, 0, navigator.otherHandlePos, chartX - left);\n                // Drag scrollbar or open area in navigator\n            }\n            else if (navigator.grabbedCenter) {\n                navigator.hasDragged = true;\n                if (chartX < dragOffset) { // Outside left\n                    chartX = dragOffset;\n                    // Outside right\n                }\n                else if (chartX >\n                    navigatorSize + dragOffset - range) {\n                    chartX = navigatorSize + dragOffset - range;\n                }\n                navigator.render(0, 0, chartX - dragOffset, chartX - dragOffset + range);\n            }\n            if (navigator.hasDragged &&\n                navigator.scrollbar &&\n                Navigator_pick(navigator.scrollbar.options.liveRedraw, \n                // By default, don't run live redraw on touch\n                // devices or if the chart is in boost.\n                !Navigator_isTouchDevice &&\n                    !this.chart.boosted)) {\n                e.DOMType = e.type;\n                setTimeout(function () {\n                    navigator.onMouseUp(e);\n                }, 0);\n            }\n        }\n    }\n    /**\n     * Mouse up event based on x/y mouse position.\n     *\n     * @private\n     * @function Highcharts.Navigator#onMouseUp\n     * @param {Highcharts.PointerEventObject} e\n     *        Mouse event\n     */\n    onMouseUp(e) {\n        const navigator = this, chart = navigator.chart, xAxis = navigator.xAxis, scrollbar = navigator.scrollbar, DOMEvent = e.DOMEvent || e, inverted = chart.inverted, verb = navigator.rendered && !navigator.hasDragged ?\n            'animate' : 'attr';\n        let zoomedMax, zoomedMin, unionExtremes, fixedMin, fixedMax, ext;\n        if (\n        // MouseUp is called for both, navigator and scrollbar (that order),\n        // which causes calling afterSetExtremes twice. Prevent first call\n        // by checking if scrollbar is going to set new extremes (#6334)\n        (navigator.hasDragged && (!scrollbar || !scrollbar.hasDragged)) ||\n            e.trigger === 'scrollbar') {\n            unionExtremes = navigator.getUnionExtremes();\n            // When dragging one handle, make sure the other one doesn't change\n            if (navigator.zoomedMin === navigator.otherHandlePos) {\n                fixedMin = navigator.fixedExtreme;\n            }\n            else if (navigator.zoomedMax === navigator.otherHandlePos) {\n                fixedMax = navigator.fixedExtreme;\n            }\n            // Snap to right edge (#4076)\n            if (navigator.zoomedMax === navigator.size) {\n                fixedMax = navigator.reversedExtremes ?\n                    unionExtremes.dataMin :\n                    unionExtremes.dataMax;\n            }\n            // Snap to left edge (#7576)\n            if (navigator.zoomedMin === 0) {\n                fixedMin = navigator.reversedExtremes ?\n                    unionExtremes.dataMax :\n                    unionExtremes.dataMin;\n            }\n            ext = xAxis.navigatorAxis.toFixedRange(navigator.zoomedMin, navigator.zoomedMax, fixedMin, fixedMax);\n            if (Navigator_defined(ext.min)) {\n                Navigator_fireEvent(this, 'setRange', {\n                    min: Math.min(ext.min, ext.max),\n                    max: Math.max(ext.min, ext.max),\n                    redraw: true,\n                    animation: navigator.hasDragged ? false : null,\n                    eventArguments: {\n                        trigger: 'navigator',\n                        triggerOp: 'navigator-drag',\n                        DOMEvent: DOMEvent // #1838\n                    }\n                });\n            }\n        }\n        if (e.DOMType !== 'mousemove' &&\n            e.DOMType !== 'touchmove') {\n            navigator.grabbedLeft = navigator.grabbedRight =\n                navigator.grabbedCenter = navigator.fixedWidth =\n                    navigator.fixedExtreme = navigator.otherHandlePos =\n                        navigator.hasDragged = navigator.dragOffset = null;\n        }\n        // Update position of navigator shades, outline and handles (#12573)\n        if (navigator.navigatorEnabled &&\n            Navigator_isNumber(navigator.zoomedMin) &&\n            Navigator_isNumber(navigator.zoomedMax)) {\n            zoomedMin = Math.round(navigator.zoomedMin);\n            zoomedMax = Math.round(navigator.zoomedMax);\n            if (navigator.shades) {\n                navigator.drawMasks(zoomedMin, zoomedMax, inverted, verb);\n            }\n            if (navigator.outline) {\n                navigator.drawOutline(zoomedMin, zoomedMax, inverted, verb);\n            }\n            if (navigator.navigatorOptions.handles.enabled &&\n                Object.keys(navigator.handles).length ===\n                    navigator.handles.length) {\n                navigator.drawHandle(zoomedMin, 0, inverted, verb);\n                navigator.drawHandle(zoomedMax, 1, inverted, verb);\n            }\n        }\n    }\n    /**\n     * Removes the event handlers attached previously with addEvents.\n     *\n     * @private\n     * @function Highcharts.Navigator#removeEvents\n     */\n    removeEvents() {\n        if (this.eventsToUnbind) {\n            this.eventsToUnbind.forEach(function (unbind) {\n                unbind();\n            });\n            this.eventsToUnbind = void 0;\n        }\n        this.removeBaseSeriesEvents();\n    }\n    /**\n     * Remove data events.\n     *\n     * @private\n     * @function Highcharts.Navigator#removeBaseSeriesEvents\n     */\n    removeBaseSeriesEvents() {\n        const baseSeries = this.baseSeries || [];\n        if (this.navigatorEnabled && baseSeries[0]) {\n            if (this.navigatorOptions.adaptToUpdatedData !== false) {\n                baseSeries.forEach(function (series) {\n                    Navigator_removeEvent(series, 'updatedData', this.updatedDataHandler);\n                }, this);\n            }\n            // We only listen for extremes-events on the first baseSeries\n            if (baseSeries[0].xAxis) {\n                Navigator_removeEvent(baseSeries[0].xAxis, 'foundExtremes', this.modifyBaseAxisExtremes);\n            }\n        }\n    }\n    /**\n     * Calculate the navigator xAxis offsets\n     *\n     * @private\n     */\n    getXAxisOffsets() {\n        return (this.chart.inverted ?\n            [this.scrollButtonSize, 0, -this.scrollButtonSize, 0] :\n            [0, -this.scrollButtonSize, 0, this.scrollButtonSize]);\n    }\n    /**\n     * Initialize the Navigator object\n     *\n     * @private\n     * @function Highcharts.Navigator#init\n     */\n    init(chart) {\n        const chartOptions = chart.options, navigatorOptions = chartOptions.navigator || {}, navigatorEnabled = navigatorOptions.enabled, scrollbarOptions = chartOptions.scrollbar || {}, scrollbarEnabled = scrollbarOptions.enabled, height = navigatorEnabled && navigatorOptions.height || 0, scrollbarHeight = scrollbarEnabled && scrollbarOptions.height || 0, scrollButtonSize = scrollbarOptions.buttonsEnabled && scrollbarHeight || 0;\n        this.handles = [];\n        this.shades = [];\n        this.chart = chart;\n        this.setBaseSeries();\n        this.height = height;\n        this.scrollbarHeight = scrollbarHeight;\n        this.scrollButtonSize = scrollButtonSize;\n        this.scrollbarEnabled = scrollbarEnabled;\n        this.navigatorEnabled = navigatorEnabled;\n        this.navigatorOptions = navigatorOptions;\n        this.scrollbarOptions = scrollbarOptions;\n        this.setOpposite();\n        const navigator = this, baseSeries = navigator.baseSeries, xAxisIndex = chart.xAxis.length, yAxisIndex = chart.yAxis.length, baseXaxis = baseSeries && baseSeries[0] && baseSeries[0].xAxis ||\n            chart.xAxis[0] || { options: {} };\n        chart.isDirtyBox = true;\n        if (navigator.navigatorEnabled) {\n            const offsets = this.getXAxisOffsets();\n            // An x axis is required for scrollbar also\n            navigator.xAxis = new (highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_default())(chart, Navigator_merge({\n                // Inherit base xAxis' break, ordinal options and overscroll\n                breaks: baseXaxis.options.breaks,\n                ordinal: baseXaxis.options.ordinal,\n                overscroll: baseXaxis.options.overscroll\n            }, navigatorOptions.xAxis, {\n                type: 'datetime',\n                yAxis: navigatorOptions.yAxis?.id,\n                index: xAxisIndex,\n                isInternal: true,\n                offset: 0,\n                keepOrdinalPadding: true, // #2436\n                startOnTick: false,\n                endOnTick: false,\n                // Inherit base xAxis' padding when ordinal is false (#16915).\n                minPadding: baseXaxis.options.ordinal ? 0 :\n                    baseXaxis.options.minPadding,\n                maxPadding: baseXaxis.options.ordinal ? 0 :\n                    baseXaxis.options.maxPadding,\n                zoomEnabled: false\n            }, chart.inverted ? {\n                offsets,\n                width: height\n            } : {\n                offsets,\n                height\n            }), 'xAxis');\n            navigator.yAxis = new (highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_default())(chart, Navigator_merge(navigatorOptions.yAxis, {\n                alignTicks: false,\n                offset: 0,\n                index: yAxisIndex,\n                isInternal: true,\n                reversed: Navigator_pick((navigatorOptions.yAxis &&\n                    navigatorOptions.yAxis.reversed), (chart.yAxis[0] && chart.yAxis[0].reversed), false), // #14060\n                zoomEnabled: false\n            }, chart.inverted ? {\n                width: height\n            } : {\n                height: height\n            }), 'yAxis');\n            // If we have a base series, initialize the navigator series\n            if (baseSeries || navigatorOptions.series.data) {\n                navigator.updateNavigatorSeries(false);\n                // If not, set up an event to listen for added series\n            }\n            else if (chart.series.length === 0) {\n                navigator.unbindRedraw = Navigator_addEvent(chart, 'beforeRedraw', function () {\n                    // We've got one, now add it as base\n                    if (chart.series.length > 0 && !navigator.series) {\n                        navigator.setBaseSeries();\n                        navigator.unbindRedraw(); // Reset\n                    }\n                });\n            }\n            navigator.reversedExtremes = (chart.inverted && !navigator.xAxis.reversed) || (!chart.inverted && navigator.xAxis.reversed);\n            // Render items, so we can bind events to them:\n            navigator.renderElements();\n            // Add mouse events\n            navigator.addMouseEvents();\n            // In case of scrollbar only, fake an x axis to get translation\n        }\n        else {\n            navigator.xAxis = {\n                chart,\n                navigatorAxis: {\n                    fake: true\n                },\n                translate: function (value, reverse) {\n                    const axis = chart.xAxis[0], ext = axis.getExtremes(), scrollTrackWidth = axis.len - 2 * scrollButtonSize, min = numExt('min', axis.options.min, ext.dataMin), valueRange = numExt('max', axis.options.max, ext.dataMax) - min;\n                    return reverse ?\n                        // From pixel to value\n                        (value * valueRange / scrollTrackWidth) + min :\n                        // From value to pixel\n                        scrollTrackWidth * (value - min) / valueRange;\n                },\n                toPixels: function (value) {\n                    return this.translate(value);\n                },\n                toValue: function (value) {\n                    return this.translate(value, true);\n                }\n            };\n            navigator.xAxis.navigatorAxis.axis = navigator.xAxis;\n            navigator.xAxis.navigatorAxis.toFixedRange = (NavigatorAxisComposition.prototype.toFixedRange.bind(navigator.xAxis.navigatorAxis));\n        }\n        // Initialize the scrollbar\n        if (chart.options.scrollbar.enabled) {\n            const options = Navigator_merge(chart.options.scrollbar, { vertical: chart.inverted });\n            if (!Navigator_isNumber(options.margin) && navigator.navigatorEnabled) {\n                options.margin = chart.inverted ? -3 : 3;\n            }\n            chart.scrollbar = navigator.scrollbar = new Scrollbar_Scrollbar(chart.renderer, options, chart);\n            Navigator_addEvent(navigator.scrollbar, 'changed', function (e) {\n                const range = navigator.size, to = range * this.to, from = range * this.from;\n                navigator.hasDragged = navigator.scrollbar.hasDragged;\n                navigator.render(0, 0, from, to);\n                if (this.shouldUpdateExtremes(e.DOMType)) {\n                    setTimeout(function () {\n                        navigator.onMouseUp(e);\n                    });\n                }\n            });\n        }\n        // Add data events\n        navigator.addBaseSeriesEvents();\n        // Add redraw events\n        navigator.addChartEvents();\n    }\n    /**\n     * Set the opposite property on navigator\n     *\n     * @private\n     */\n    setOpposite() {\n        const navigatorOptions = this.navigatorOptions, navigatorEnabled = this.navigatorEnabled, chart = this.chart;\n        this.opposite = Navigator_pick(navigatorOptions.opposite, Boolean(!navigatorEnabled && chart.inverted)); // #6262\n    }\n    /**\n     * Get the union data extremes of the chart - the outer data extremes of the\n     * base X axis and the navigator axis.\n     *\n     * @private\n     * @function Highcharts.Navigator#getUnionExtremes\n     */\n    getUnionExtremes(returnFalseOnNoBaseSeries) {\n        const baseAxis = this.chart.xAxis[0], time = this.chart.time, navAxis = this.xAxis, navAxisOptions = navAxis.options, baseAxisOptions = baseAxis.options;\n        let ret;\n        if (!returnFalseOnNoBaseSeries || baseAxis.dataMin !== null) {\n            ret = {\n                dataMin: Navigator_pick(// #4053\n                time.parse(navAxisOptions?.min), numExt('min', time.parse(baseAxisOptions.min), baseAxis.dataMin, navAxis.dataMin, navAxis.min)),\n                dataMax: Navigator_pick(time.parse(navAxisOptions?.max), numExt('max', time.parse(baseAxisOptions.max), baseAxis.dataMax, navAxis.dataMax, navAxis.max))\n            };\n        }\n        return ret;\n    }\n    /**\n     * Set the base series and update the navigator series from this. With a bit\n     * of modification we should be able to make this an API method to be called\n     * from the outside\n     *\n     * @private\n     * @function Highcharts.Navigator#setBaseSeries\n     * @param {Highcharts.SeriesOptionsType} [baseSeriesOptions]\n     *        Additional series options for a navigator\n     * @param {boolean} [redraw]\n     *        Whether to redraw after update.\n     */\n    setBaseSeries(baseSeriesOptions, redraw) {\n        const chart = this.chart, baseSeries = this.baseSeries = [];\n        baseSeriesOptions = (baseSeriesOptions ||\n            chart.options && chart.options.navigator.baseSeries ||\n            (chart.series.length ?\n                // Find the first non-navigator series (#8430)\n                Navigator_find(chart.series, (s) => (!s.options.isInternal)).index :\n                0));\n        // Iterate through series and add the ones that should be shown in\n        // navigator.\n        (chart.series || []).forEach((series, i) => {\n            if (\n            // Don't include existing nav series\n            !series.options.isInternal &&\n                (series.options.showInNavigator ||\n                    (i === baseSeriesOptions ||\n                        series.options.id === baseSeriesOptions) &&\n                        series.options.showInNavigator !== false)) {\n                baseSeries.push(series);\n            }\n        });\n        // When run after render, this.xAxis already exists\n        if (this.xAxis && !this.xAxis.navigatorAxis.fake) {\n            this.updateNavigatorSeries(true, redraw);\n        }\n    }\n    /**\n     * Update series in the navigator from baseSeries, adding new if does not\n     * exist.\n     *\n     * @private\n     * @function Highcharts.Navigator.updateNavigatorSeries\n     */\n    updateNavigatorSeries(addEvents, redraw) {\n        const navigator = this, chart = navigator.chart, baseSeries = navigator.baseSeries, navSeriesMixin = {\n            enableMouseTracking: false,\n            index: null, // #6162\n            linkedTo: null, // #6734\n            group: 'nav', // For columns\n            padXAxis: false,\n            xAxis: this.navigatorOptions.xAxis?.id,\n            yAxis: this.navigatorOptions.yAxis?.id,\n            showInLegend: false,\n            stacking: void 0, // #4823\n            isInternal: true,\n            states: {\n                inactive: {\n                    opacity: 1\n                }\n            }\n        }, \n        // Remove navigator series that are no longer in the baseSeries\n        navigatorSeries = navigator.series =\n            (navigator.series || []).filter((navSeries) => {\n                const base = navSeries.baseSeries;\n                if (baseSeries.indexOf(base) < 0) { // Not in array\n                    // If there is still a base series connected to this\n                    // series, remove event handler and reference.\n                    if (base) {\n                        Navigator_removeEvent(base, 'updatedData', navigator.updatedDataHandler);\n                        delete base.navigatorSeries;\n                    }\n                    // Kill the nav series. It may already have been\n                    // destroyed (#8715).\n                    if (navSeries.chart) {\n                        navSeries.destroy();\n                    }\n                    return false;\n                }\n                return true;\n            });\n        let baseOptions, mergedNavSeriesOptions, chartNavigatorSeriesOptions = navigator.navigatorOptions.series, baseNavigatorOptions;\n        // Go through each base series and merge the options to create new\n        // series\n        if (baseSeries && baseSeries.length) {\n            baseSeries.forEach((base) => {\n                const linkedNavSeries = base.navigatorSeries, userNavOptions = Navigator_extend(\n                // Grab color and visibility from base as default\n                {\n                    color: base.color,\n                    visible: base.visible\n                }, !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 = splat(userNavOptions.dataLabels);\n                mergedNavSeriesOptions = Navigator_merge(baseOptions, navSeriesMixin, userNavOptions, baseNavigatorOptions);\n                // Once nav series type is resolved, pick correct pointRange\n                mergedNavSeriesOptions.pointRange = Navigator_pick(\n                // Stricte set pointRange in options\n                userNavOptions.pointRange, baseNavigatorOptions.pointRange, \n                // Fallback to default values, e.g. `null` for column\n                Navigator_defaultOptions.plotOptions[mergedNavSeriesOptions.type || 'line'].pointRange);\n                // Merge data separately. Do a slice to avoid mutating the\n                // navigator options from base series (#4923).\n                const navigatorSeriesData = baseNavigatorOptions.data || userNavOptions.data;\n                navigator.hasNavigatorData =\n                    navigator.hasNavigatorData || !!navigatorSeriesData;\n                mergedNavSeriesOptions.data = (navigatorSeriesData ||\n                    baseOptions.data?.slice(0));\n                // Update or add the series\n                if (linkedNavSeries && linkedNavSeries.options) {\n                    linkedNavSeries.update(mergedNavSeriesOptions, redraw);\n                }\n                else {\n                    base.navigatorSeries = chart.initSeries(mergedNavSeriesOptions);\n                    // Set data on initial run with dataSorting enabled (#20318)\n                    chart.setSortedData();\n                    base.navigatorSeries.baseSeries = base; // Store ref\n                    navigatorSeries.push(base.navigatorSeries);\n                }\n            });\n        }\n        // If user has defined data (and no base series) or explicitly defined\n        // navigator.series as an array, we create these series on top of any\n        // base series.\n        if (chartNavigatorSeriesOptions.data &&\n            !(baseSeries && baseSeries.length) ||\n            isArray(chartNavigatorSeriesOptions)) {\n            navigator.hasNavigatorData = false;\n            // Allow navigator.series to be an array\n            chartNavigatorSeriesOptions =\n                splat(chartNavigatorSeriesOptions);\n            chartNavigatorSeriesOptions.forEach((userSeriesOptions, i) => {\n                navSeriesMixin.name =\n                    'Navigator ' + (navigatorSeries.length + 1);\n                mergedNavSeriesOptions = Navigator_merge(Navigator_defaultOptions.navigator.series, {\n                    // Since we don't have a base series to pull color from,\n                    // try to fake it by using color from series with same\n                    // index. Otherwise pull from the colors array. We need\n                    // an explicit color as otherwise updates will increment\n                    // color counter and we'll get a new color for each\n                    // update of the nav series.\n                    color: chart.series[i] &&\n                        !chart.series[i].options.isInternal &&\n                        chart.series[i].color ||\n                        chart.options.colors[i] ||\n                        chart.options.colors[0]\n                }, navSeriesMixin, userSeriesOptions);\n                mergedNavSeriesOptions.data = userSeriesOptions.data;\n                if (mergedNavSeriesOptions.data) {\n                    navigator.hasNavigatorData = true;\n                    navigatorSeries.push(chart.initSeries(mergedNavSeriesOptions));\n                }\n            });\n        }\n        if (addEvents) {\n            this.addBaseSeriesEvents();\n        }\n    }\n    /**\n     * Add data events.\n     * For example when main series is updated we need to recalculate extremes\n     *\n     * @private\n     * @function Highcharts.Navigator#addBaseSeriesEvent\n     */\n    addBaseSeriesEvents() {\n        const navigator = this, baseSeries = navigator.baseSeries || [];\n        // Bind modified extremes event to first base's xAxis only.\n        // In event of > 1 base-xAxes, the navigator will ignore those.\n        // Adding this multiple times to the same axis is no problem, as\n        // duplicates should be discarded by the browser.\n        if (baseSeries[0] && baseSeries[0].xAxis) {\n            baseSeries[0].eventsToUnbind.push(Navigator_addEvent(baseSeries[0].xAxis, 'foundExtremes', this.modifyBaseAxisExtremes));\n        }\n        baseSeries.forEach((base) => {\n            // Link base series show/hide to navigator series visibility\n            base.eventsToUnbind.push(Navigator_addEvent(base, 'show', function () {\n                if (this.navigatorSeries) {\n                    this.navigatorSeries.setVisible(true, false);\n                }\n            }));\n            base.eventsToUnbind.push(Navigator_addEvent(base, 'hide', function () {\n                if (this.navigatorSeries) {\n                    this.navigatorSeries.setVisible(false, false);\n                }\n            }));\n            // Respond to updated data in the base series, unless explicitly\n            // not adapting to data changes.\n            if (this.navigatorOptions.adaptToUpdatedData !== false) {\n                if (base.xAxis) {\n                    base.eventsToUnbind.push(Navigator_addEvent(base, 'updatedData', this.updatedDataHandler));\n                }\n            }\n            // Handle series removal\n            base.eventsToUnbind.push(Navigator_addEvent(base, 'remove', function () {\n                if (baseSeries) {\n                    erase(baseSeries, base); // #21043\n                }\n                if (this.navigatorSeries && navigator.series) {\n                    erase(navigator.series, this.navigatorSeries);\n                    if (Navigator_defined(this.navigatorSeries.options)) {\n                        this.navigatorSeries.remove(false);\n                    }\n                    delete this.navigatorSeries;\n                }\n            }));\n        });\n    }\n    /**\n     * Get minimum from all base series connected to the navigator\n     * @private\n     * @param {number} currentSeriesMin\n     *        Minium from the current series\n     * @return {number}\n     *         Minimum from all series\n     */\n    getBaseSeriesMin(currentSeriesMin) {\n        return this.baseSeries.reduce(function (min, series) {\n            // #10193\n            return Math.min(min, series.getColumn('x')[0] ?? min);\n        }, currentSeriesMin);\n    }\n    /**\n     * Set the navigator x axis extremes to reflect the total. The navigator\n     * extremes should always be the extremes of the union of all series in the\n     * chart as well as the navigator series.\n     *\n     * @private\n     * @function Highcharts.Navigator#modifyNavigatorAxisExtremes\n     */\n    modifyNavigatorAxisExtremes() {\n        const xAxis = this.xAxis;\n        if (typeof xAxis.getExtremes !== 'undefined') {\n            const unionExtremes = this.getUnionExtremes(true);\n            if (unionExtremes &&\n                (unionExtremes.dataMin !== xAxis.min ||\n                    unionExtremes.dataMax !== xAxis.max)) {\n                xAxis.min = unionExtremes.dataMin;\n                xAxis.max = unionExtremes.dataMax;\n            }\n        }\n    }\n    /**\n     * Hook to modify the base axis extremes with information from the Navigator\n     *\n     * @private\n     * @function Highcharts.Navigator#modifyBaseAxisExtremes\n     */\n    modifyBaseAxisExtremes() {\n        const baseXAxis = this, navigator = baseXAxis.chart.navigator, baseExtremes = baseXAxis.getExtremes(), baseMin = baseExtremes.min, baseMax = baseExtremes.max, baseDataMin = baseExtremes.dataMin, baseDataMax = baseExtremes.dataMax, range = baseMax - baseMin, stickToMin = navigator.stickToMin, stickToMax = navigator.stickToMax, overscroll = Navigator_pick(baseXAxis.ordinal?.convertOverscroll(baseXAxis.options.overscroll), 0), navigatorSeries = navigator.series && navigator.series[0], hasSetExtremes = !!baseXAxis.setExtremes, \n        // When the extremes have been set by range selector button, don't\n        // stick to min or max. The range selector buttons will handle the\n        // extremes. (#5489)\n        unmutable = baseXAxis.eventArgs &&\n            baseXAxis.eventArgs.trigger === 'rangeSelectorButton';\n        let newMax, newMin;\n        if (!unmutable) {\n            // If the zoomed range is already at the min, move it to the right\n            // as new data comes in\n            if (stickToMin) {\n                newMin = baseDataMin;\n                newMax = newMin + range;\n            }\n            // If the zoomed range is already at the max, move it to the right\n            // as new data comes in\n            if (stickToMax) {\n                newMax = baseDataMax + overscroll;\n                // If stickToMin is true, the new min value is set above\n                if (!stickToMin) {\n                    newMin = Math.max(baseDataMin, // Don't go below data extremes (#13184)\n                    newMax - range, navigator.getBaseSeriesMin(navigatorSeries && navigatorSeries.xData ?\n                        navigatorSeries.xData[0] :\n                        -Number.MAX_VALUE));\n                }\n            }\n            // Update the extremes\n            if (hasSetExtremes && (stickToMin || stickToMax)) {\n                if (Navigator_isNumber(newMin)) {\n                    baseXAxis.min = baseXAxis.userMin = newMin;\n                    baseXAxis.max = baseXAxis.userMax = newMax;\n                }\n            }\n        }\n        // Reset\n        navigator.stickToMin =\n            navigator.stickToMax = null;\n    }\n    /**\n     * Handler for updated data on the base series. When data is modified, the\n     * navigator series must reflect it. This is called from the Chart.redraw\n     * function before axis and series extremes are computed.\n     *\n     * @private\n     * @function Highcharts.Navigator#updateDataHandler\n     */\n    updatedDataHandler() {\n        const navigator = this.chart.navigator, baseSeries = this, navigatorSeries = this.navigatorSeries, shouldStickToMax = navigator.reversedExtremes ?\n            Math.round(navigator.zoomedMin) === 0 :\n            Math.round(navigator.zoomedMax) >= Math.round(navigator.size);\n        // If the scrollbar is scrolled all the way to the right, keep right as\n        // new data comes in, unless user set navigator.stickToMax to false.\n        navigator.stickToMax = Navigator_pick(this.chart.options.navigator &&\n            this.chart.options.navigator.stickToMax, shouldStickToMax);\n        navigator.stickToMin = navigator.shouldStickToMin(baseSeries, navigator);\n        // Set the navigator series data to the new data of the base series\n        if (navigatorSeries && !navigator.hasNavigatorData) {\n            navigatorSeries.options.pointStart = baseSeries.getColumn('x')[0];\n            navigatorSeries.setData(baseSeries.options.data, false, null, false); // #5414\n        }\n    }\n    /**\n     * Detect if the zoomed area should stick to the minimum, #14742.\n     *\n     * @private\n     * @function Highcharts.Navigator#shouldStickToMin\n     */\n    shouldStickToMin(baseSeries, navigator) {\n        const xDataMin = navigator.getBaseSeriesMin(baseSeries.getColumn('x')[0]), xAxis = baseSeries.xAxis, max = xAxis.max, min = xAxis.min, range = xAxis.options.range;\n        let stickToMin = true;\n        if (Navigator_isNumber(max) && Navigator_isNumber(min)) {\n            // If range declared, stick to the minimum only if the range\n            // is smaller than the data set range.\n            if (range && max - xDataMin > 0) {\n                stickToMin = max - xDataMin < range;\n            }\n            else {\n                // If the current axis minimum falls outside the new\n                // updated dataset, we must adjust.\n                stickToMin = min <= xDataMin;\n            }\n        }\n        else {\n            stickToMin = false; // #15864\n        }\n        return stickToMin;\n    }\n    /**\n     * Add chart events, like redrawing navigator, when chart requires that.\n     *\n     * @private\n     * @function Highcharts.Navigator#addChartEvents\n     */\n    addChartEvents() {\n        if (!this.eventsToUnbind) {\n            this.eventsToUnbind = [];\n        }\n        this.eventsToUnbind.push(\n        // Move the scrollbar after redraw, like after data updata even if\n        // axes don't redraw\n        Navigator_addEvent(this.chart, 'redraw', function () {\n            const navigator = this.navigator, xAxis = navigator && (navigator.baseSeries &&\n                navigator.baseSeries[0] &&\n                navigator.baseSeries[0].xAxis ||\n                this.xAxis[0]); // #5709, #13114\n            if (xAxis) {\n                navigator.render(xAxis.min, xAxis.max);\n            }\n        }), \n        // Make room for the navigator, can be placed around the chart:\n        Navigator_addEvent(this.chart, 'getMargins', function () {\n            const chart = this, navigator = chart.navigator;\n            let marginName = navigator.opposite ?\n                'plotTop' : 'marginBottom';\n            if (chart.inverted) {\n                marginName = navigator.opposite ?\n                    'marginRight' : 'plotLeft';\n            }\n            chart[marginName] =\n                (chart[marginName] || 0) + (navigator.navigatorEnabled || !chart.inverted ?\n                    navigator.height + navigator.scrollbarHeight :\n                    0) + navigator.navigatorOptions.margin;\n        }), Navigator_addEvent(Navigator, 'setRange', function (e) {\n            this.chart.xAxis[0].setExtremes(e.min, e.max, e.redraw, e.animation, e.eventArguments);\n        }));\n    }\n    /**\n     * Destroys allocated elements.\n     *\n     * @private\n     * @function Highcharts.Navigator#destroy\n     */\n    destroy() {\n        // Disconnect events added in addEvents\n        this.removeEvents();\n        if (this.xAxis) {\n            erase(this.chart.xAxis, this.xAxis);\n            erase(this.chart.axes, this.xAxis);\n        }\n        if (this.yAxis) {\n            erase(this.chart.yAxis, this.yAxis);\n            erase(this.chart.axes, this.yAxis);\n        }\n        // Destroy series\n        (this.series || []).forEach((s) => {\n            if (s.destroy) {\n                s.destroy();\n            }\n        });\n        // Destroy properties\n        [\n            'series', 'xAxis', 'yAxis', 'shades', 'outline', 'scrollbarTrack',\n            'scrollbarRifles', 'scrollbarGroup', 'scrollbar', 'navigatorGroup',\n            'rendered'\n        ].forEach((prop) => {\n            if (this[prop] && this[prop].destroy) {\n                this[prop].destroy();\n            }\n            this[prop] = null;\n        });\n        // Destroy elements in collection\n        [this.handles].forEach((coll) => {\n            Navigator_destroyObjectProperties(coll);\n        });\n        this.navigatorEnabled = false;\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Navigator_Navigator = (Navigator);\n\n;// ./code/es-modules/Accessibility/Components/NavigatorComponent.js\n/* *\n *\n *  (c) 2009-2024 Highsoft AS\n *\n *  Accessibility component for the navigator.\n *\n *  Author: Øystein Moseng\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\n\n\n\n\nconst { animObject: NavigatorComponent_animObject } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { format: NavigatorComponent_format } = (highcharts_Templating_commonjs_highcharts_Templating_commonjs2_highcharts_Templating_root_Highcharts_Templating_default());\n\nconst { clamp: NavigatorComponent_clamp, pick: NavigatorComponent_pick, syncTimeout: NavigatorComponent_syncTimeout } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { getFakeMouseEvent: NavigatorComponent_getFakeMouseEvent } = Utils_HTMLUtilities;\n\nconst { getAxisRangeDescription: NavigatorComponent_getAxisRangeDescription, fireEventOnWrappedOrUnwrappedElement: NavigatorComponent_fireEventOnWrappedOrUnwrappedElement } = Utils_ChartUtilities;\n/**\n * The NavigatorComponent class\n *\n * @private\n * @class\n * @name Highcharts.NavigatorComponent\n */\nclass NavigatorComponent extends Accessibility_AccessibilityComponent {\n    /**\n     * Init the component\n     * @private\n     */\n    init() {\n        const chart = this.chart, component = this;\n        this.announcer = new Utils_Announcer(chart, 'polite');\n        // Update positions after render\n        this.addEvent(Navigator_Navigator, 'afterRender', function () {\n            if (this.chart === component.chart &&\n                this.chart.renderer) {\n                NavigatorComponent_syncTimeout(() => {\n                    component.proxyProvider\n                        .updateGroupProxyElementPositions('navigator');\n                    component.updateHandleValues();\n                }, NavigatorComponent_animObject(NavigatorComponent_pick(this.chart.renderer.globalAnimation, true)).duration);\n            }\n        });\n    }\n    /**\n     * Called on updates\n     * @private\n     */\n    onChartUpdate() {\n        const chart = this.chart, options = chart.options, navigator = options.navigator;\n        if (navigator.enabled && navigator.accessibility?.enabled) {\n            const verbosity = options.accessibility.landmarkVerbosity, groupFormatStr = options.lang\n                .accessibility?.navigator.groupLabel;\n            // We just recreate the group for simplicity. Could consider\n            // updating the existing group if the verbosity has not changed.\n            this.proxyProvider.removeGroup('navigator');\n            this.proxyProvider.addGroup('navigator', 'div', {\n                role: verbosity === 'all' ? 'region' : 'group',\n                'aria-label': NavigatorComponent_format(groupFormatStr, { chart }, chart)\n            });\n            const handleFormatStr = options.lang\n                .accessibility?.navigator.handleLabel;\n            [0, 1].forEach((n) => {\n                const handle = this.getHandleByIx(n);\n                if (handle) {\n                    const proxyEl = this.proxyProvider.addProxyElement('navigator', {\n                        click: handle\n                    }, 'input', {\n                        type: 'range',\n                        'aria-label': NavigatorComponent_format(handleFormatStr, { handleIx: n, chart }, chart)\n                    });\n                    this[n ? 'maxHandleProxy' : 'minHandleProxy'] =\n                        proxyEl.innerElement;\n                    proxyEl.innerElement.style.pointerEvents = 'none';\n                    proxyEl.innerElement.oninput =\n                        () => this.updateNavigator();\n                }\n            });\n            this.updateHandleValues();\n        }\n        else {\n            this.proxyProvider.removeGroup('navigator');\n        }\n    }\n    /**\n     * Get navigation for a navigator handle.\n     * @private\n     * @return {Highcharts.KeyboardNavigationHandler} The module object.\n     */\n    getNavigatorHandleNavigation(handleIx) {\n        const component = this, chart = this.chart, proxyEl = handleIx ? this.maxHandleProxy : this.minHandleProxy, keys = this.keyCodes;\n        return new Accessibility_KeyboardNavigationHandler(chart, {\n            keyCodeMap: [[\n                    [keys.left, keys.right, keys.up, keys.down],\n                    function (keyCode) {\n                        if (proxyEl) {\n                            const delta = keyCode === keys.left ||\n                                keyCode === keys.up ? -1 : 1;\n                            proxyEl.value = '' + NavigatorComponent_clamp(parseFloat(proxyEl.value) + delta, 0, 100);\n                            component.updateNavigator(() => {\n                                const handle = component.getHandleByIx(handleIx);\n                                if (handle) {\n                                    chart.setFocusToElement(handle, proxyEl);\n                                }\n                            });\n                        }\n                        return this.response.success;\n                    }\n                ]],\n            init: () => {\n                chart.setFocusToElement(this.getHandleByIx(handleIx), proxyEl);\n            },\n            validate: () => !!(this.getHandleByIx(handleIx) && proxyEl &&\n                chart.options.navigator.accessibility?.enabled)\n        });\n    }\n    /**\n     * Get keyboard navigation handlers for this component.\n     * @return {Array<Highcharts.KeyboardNavigationHandler>}\n     *         List of module objects.\n     */\n    getKeyboardNavigation() {\n        return [\n            this.getNavigatorHandleNavigation(0),\n            this.getNavigatorHandleNavigation(1)\n        ];\n    }\n    /**\n     * Remove component traces\n     */\n    destroy() {\n        if (this.updateNavigatorThrottleTimer) {\n            clearTimeout(this.updateNavigatorThrottleTimer);\n        }\n        this.proxyProvider.removeGroup('navigator');\n        if (this.announcer) {\n            this.announcer.destroy();\n        }\n    }\n    /**\n     * Update the value of the handles to match current navigator pos.\n     * @private\n     */\n    updateHandleValues() {\n        const navigator = this.chart.navigator;\n        if (navigator && this.minHandleProxy && this.maxHandleProxy) {\n            const length = navigator.size;\n            this.minHandleProxy.value =\n                '' + Math.round(navigator.zoomedMin / length * 100);\n            this.maxHandleProxy.value =\n                '' + Math.round(navigator.zoomedMax / length * 100);\n        }\n    }\n    /**\n     * Get a navigator handle by its index\n     * @private\n     */\n    getHandleByIx(ix) {\n        const navigator = this.chart.navigator;\n        return navigator && navigator.handles &&\n            navigator.handles[ix];\n    }\n    /**\n     * Update navigator to match changed proxy values.\n     * @private\n     */\n    updateNavigator(beforeAnnounce) {\n        const performUpdate = (beforeAnnounce) => {\n            const chart = this.chart, { navigator, pointer } = chart;\n            if (navigator &&\n                pointer &&\n                this.minHandleProxy &&\n                this.maxHandleProxy) {\n                const chartPos = pointer.getChartPosition(), minNewX = parseFloat(this.minHandleProxy.value) /\n                    100 * navigator.size, maxNewX = parseFloat(this.maxHandleProxy.value) /\n                    100 * navigator.size;\n                // Fire fake events in order for each handle.\n                [\n                    [0, 'mousedown', navigator.zoomedMin],\n                    [0, 'mousemove', minNewX],\n                    [0, 'mouseup', minNewX],\n                    [1, 'mousedown', navigator.zoomedMax],\n                    [1, 'mousemove', maxNewX],\n                    [1, 'mouseup', maxNewX]\n                ].forEach(([handleIx, type, x]) => {\n                    const handle = this.getHandleByIx(handleIx)?.element;\n                    if (handle) {\n                        NavigatorComponent_fireEventOnWrappedOrUnwrappedElement(handle, NavigatorComponent_getFakeMouseEvent(type, {\n                            x: chartPos.left + navigator.left + x,\n                            y: chartPos.top + navigator.top\n                        }, handle));\n                    }\n                });\n                if (beforeAnnounce) {\n                    beforeAnnounce();\n                }\n                // Announce the update\n                const announceFormatStr = chart.options.lang\n                    .accessibility?.navigator.changeAnnouncement, axisRangeDescription = NavigatorComponent_getAxisRangeDescription(chart.xAxis[0]);\n                this.announcer.announce(NavigatorComponent_format(announceFormatStr, { axisRangeDescription, chart }, chart));\n            }\n        };\n        // Throttle updates so as not to reduce performance with\n        // continuous keypress.\n        if (this.updateNavigatorThrottleTimer) {\n            clearTimeout(this.updateNavigatorThrottleTimer);\n        }\n        this.updateNavigatorThrottleTimer = setTimeout(performUpdate.bind(this, beforeAnnounce), 20);\n    }\n}\n/* *\n *\n *  Export Default\n *\n * */\n/* harmony default export */ const Components_NavigatorComponent = (NavigatorComponent);\n\n;// ./code/es-modules/Accessibility/Components/SeriesComponent/SeriesDescriber.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Place desriptions on a series and its points.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { getPointAnnotationTexts: SeriesDescriber_getPointAnnotationTexts } = Components_AnnotationsA11y;\n\nconst { getAxisDescription: SeriesDescriber_getAxisDescription, getSeriesFirstPointElement: SeriesDescriber_getSeriesFirstPointElement, getSeriesA11yElement: SeriesDescriber_getSeriesA11yElement, unhideChartElementFromAT: SeriesDescriber_unhideChartElementFromAT } = Utils_ChartUtilities;\n\nconst { format: SeriesDescriber_format, numberFormat } = (highcharts_Templating_commonjs_highcharts_Templating_commonjs2_highcharts_Templating_root_Highcharts_Templating_default());\n\nconst { reverseChildNodes: SeriesDescriber_reverseChildNodes, stripHTMLTagsFromString: SeriesDescriber_stripHTMLTags } = Utils_HTMLUtilities;\n\nconst { find: SeriesDescriber_find, isNumber: SeriesDescriber_isNumber, isString, pick: SeriesDescriber_pick, defined: SeriesDescriber_defined } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/* eslint-disable valid-jsdoc */\n/**\n * @private\n */\nfunction findFirstPointWithGraphic(point) {\n    const sourcePointIndex = point.index;\n    if (!point.series || !point.series.data || !SeriesDescriber_defined(sourcePointIndex)) {\n        return null;\n    }\n    return SeriesDescriber_find(point.series.data, function (p) {\n        return !!(p &&\n            typeof p.index !== 'undefined' &&\n            p.index > sourcePointIndex &&\n            p.graphic &&\n            p.graphic.element);\n    }) || null;\n}\n/**\n * Whether or not we should add a mock point element in\n * order to describe a point that has no graphic.\n * @private\n */\nfunction shouldAddMockPoint(point) {\n    // Note: Sunburst series use isNull for hidden points on drilldown.\n    // Ignore these.\n    const series = point.series, chart = series && series.chart, isSunburst = series && series.is('sunburst'), isNull = point.isNull, shouldDescribeNull = chart &&\n        chart\n            .options.accessibility.point.describeNull;\n    return isNull && !isSunburst && shouldDescribeNull;\n}\n/**\n * @private\n */\nfunction makeMockElement(point, pos) {\n    const renderer = point.series.chart.renderer, mock = renderer.rect(pos.x, pos.y, 1, 1);\n    mock.attr({\n        'class': 'highcharts-a11y-mock-point',\n        fill: 'none',\n        opacity: 0,\n        'fill-opacity': 0,\n        'stroke-opacity': 0\n    });\n    return mock;\n}\n/**\n * @private\n */\nfunction addMockPointElement(point) {\n    const series = point.series, firstPointWithGraphic = findFirstPointWithGraphic(point), firstGraphic = firstPointWithGraphic && firstPointWithGraphic.graphic, parentGroup = firstGraphic ?\n        firstGraphic.parentGroup :\n        series.graph || series.group, mockPos = firstPointWithGraphic ? {\n        x: SeriesDescriber_pick(point.plotX, firstPointWithGraphic.plotX, 0),\n        y: SeriesDescriber_pick(point.plotY, firstPointWithGraphic.plotY, 0)\n    } : {\n        x: SeriesDescriber_pick(point.plotX, 0),\n        y: SeriesDescriber_pick(point.plotY, 0)\n    }, mockElement = makeMockElement(point, mockPos);\n    if (parentGroup && parentGroup.element) {\n        point.graphic = mockElement;\n        point.hasMockGraphic = true;\n        mockElement.add(parentGroup);\n        // Move to correct pos in DOM\n        parentGroup.element.insertBefore(mockElement.element, firstGraphic ? firstGraphic.element : null);\n        return mockElement.element;\n    }\n}\n/**\n * @private\n */\nfunction hasMorePointsThanDescriptionThreshold(series) {\n    const chartA11yOptions = series.chart.options.accessibility, threshold = (chartA11yOptions.series.pointDescriptionEnabledThreshold);\n    return !!(threshold !== false &&\n        series.points &&\n        series.points.length >= +threshold);\n}\n/**\n * @private\n */\nfunction shouldSetScreenReaderPropsOnPoints(series) {\n    const seriesA11yOptions = series.options.accessibility || {};\n    return !hasMorePointsThanDescriptionThreshold(series) &&\n        !seriesA11yOptions.exposeAsGroupOnly;\n}\n/**\n * @private\n */\nfunction shouldSetKeyboardNavPropsOnPoints(series) {\n    const chartA11yOptions = series.chart.options.accessibility, seriesNavOptions = chartA11yOptions.keyboardNavigation.seriesNavigation;\n    return !!(series.points && (series.points.length <\n        +seriesNavOptions.pointNavigationEnabledThreshold ||\n        seriesNavOptions.pointNavigationEnabledThreshold === false));\n}\n/**\n * @private\n */\nfunction shouldDescribeSeriesElement(series) {\n    const chart = series.chart, chartOptions = chart.options.chart, chartHas3d = chartOptions.options3d && chartOptions.options3d.enabled, hasMultipleSeries = chart.series.length > 1, describeSingleSeriesOption = chart.options.accessibility.series.describeSingleSeries, exposeAsGroupOnlyOption = (series.options.accessibility || {}).exposeAsGroupOnly, noDescribe3D = chartHas3d && hasMultipleSeries;\n    return !noDescribe3D && (hasMultipleSeries || describeSingleSeriesOption ||\n        exposeAsGroupOnlyOption || hasMorePointsThanDescriptionThreshold(series));\n}\n/**\n * @private\n */\nfunction pointNumberToString(point, value) {\n    const series = point.series, chart = series.chart, a11yPointOptions = chart.options.accessibility.point || {}, seriesA11yPointOptions = series.options.accessibility &&\n        series.options.accessibility.point || {}, tooltipOptions = series.tooltipOptions || {}, lang = chart.options.lang;\n    if (SeriesDescriber_isNumber(value)) {\n        return numberFormat(value, seriesA11yPointOptions.valueDecimals ||\n            a11yPointOptions.valueDecimals ||\n            tooltipOptions.valueDecimals ||\n            -1, lang.decimalPoint, lang.accessibility.thousandsSep || lang.thousandsSep);\n    }\n    return value;\n}\n/**\n * @private\n */\nfunction getSeriesDescriptionText(series) {\n    const seriesA11yOptions = series.options.accessibility || {}, descOpt = seriesA11yOptions.description;\n    return descOpt && series.chart.langFormat('accessibility.series.description', {\n        description: descOpt,\n        series: series\n    }) || '';\n}\n/**\n * @private\n */\nfunction getSeriesAxisDescriptionText(series, axisCollection) {\n    const axis = series[axisCollection];\n    return series.chart.langFormat('accessibility.series.' + axisCollection + 'Description', {\n        name: SeriesDescriber_getAxisDescription(axis),\n        series: series\n    });\n}\n/**\n * Get accessible time description for a point on a datetime axis.\n *\n * @private\n */\nfunction getPointA11yTimeDescription(point) {\n    const series = point.series, chart = series.chart, seriesA11yOptions = series.options.accessibility &&\n        series.options.accessibility.point || {}, a11yOptions = chart.options.accessibility.point || {}, dateXAxis = series.xAxis && series.xAxis.dateTime;\n    if (dateXAxis) {\n        const tooltipDateFormat = dateXAxis.getXDateFormat(point.x || 0, chart.options.tooltip.dateTimeLabelFormats), dateFormat = seriesA11yOptions.dateFormatter &&\n            seriesA11yOptions.dateFormatter(point) ||\n            a11yOptions.dateFormatter && a11yOptions.dateFormatter(point) ||\n            seriesA11yOptions.dateFormat ||\n            a11yOptions.dateFormat ||\n            tooltipDateFormat;\n        return chart.time.dateFormat(dateFormat, point.x || 0, void 0);\n    }\n}\n/**\n * @private\n */\nfunction getPointXDescription(point) {\n    const timeDesc = getPointA11yTimeDescription(point), xAxis = point.series.xAxis || {}, pointCategory = xAxis.categories && SeriesDescriber_defined(point.category) &&\n        ('' + point.category).replace('<br/>', ' '), canUseId = SeriesDescriber_defined(point.id) &&\n        ('' + point.id).indexOf('highcharts-') < 0, fallback = 'x, ' + point.x;\n    return point.name || timeDesc || pointCategory ||\n        (canUseId ? point.id : fallback);\n}\n/**\n * @private\n */\nfunction getPointArrayMapValueDescription(point, prefix, suffix) {\n    const pre = prefix || '', suf = suffix || '', keyToValStr = function (key) {\n        const num = pointNumberToString(point, SeriesDescriber_pick(point[key], point.options[key]));\n        return num !== void 0 ?\n            key + ': ' + pre + num + suf :\n            num;\n    }, pointArrayMap = point.series.pointArrayMap;\n    return pointArrayMap.reduce(function (desc, key) {\n        const propDesc = keyToValStr(key);\n        return propDesc ?\n            (desc + (desc.length ? ', ' : '') + propDesc) :\n            desc;\n    }, '');\n}\n/**\n * @private\n */\nfunction getPointValue(point) {\n    const series = point.series, a11yPointOpts = series.chart.options.accessibility.point || {}, seriesA11yPointOpts = series.chart.options.accessibility &&\n        series.chart.options.accessibility.point || {}, tooltipOptions = series.tooltipOptions || {}, valuePrefix = seriesA11yPointOpts.valuePrefix ||\n        a11yPointOpts.valuePrefix ||\n        tooltipOptions.valuePrefix ||\n        '', valueSuffix = seriesA11yPointOpts.valueSuffix ||\n        a11yPointOpts.valueSuffix ||\n        tooltipOptions.valueSuffix ||\n        '', fallbackKey = (typeof point.value !==\n        'undefined' ?\n        'value' : 'y'), fallbackDesc = pointNumberToString(point, point[fallbackKey]);\n    if (point.isNull) {\n        return series.chart.langFormat('accessibility.series.nullPointValue', {\n            point: point\n        });\n    }\n    if (series.pointArrayMap) {\n        return getPointArrayMapValueDescription(point, valuePrefix, valueSuffix);\n    }\n    return valuePrefix + fallbackDesc + valueSuffix;\n}\n/**\n * Return the description for the annotation(s) connected to a point, or\n * empty string if none.\n *\n * @private\n * @param {Highcharts.Point} point\n * The data point to get the annotation info from.\n * @return {string}\n * Annotation description\n */\nfunction getPointAnnotationDescription(point) {\n    const chart = point.series.chart;\n    const langKey = 'accessibility.series.pointAnnotationsDescription';\n    const annotations = SeriesDescriber_getPointAnnotationTexts(point);\n    const context = { point, annotations };\n    return annotations.length ? chart.langFormat(langKey, context) : '';\n}\n/**\n * Return string with information about point.\n * @private\n */\nfunction getPointValueDescription(point) {\n    const series = point.series, chart = series.chart, seriesA11yOptions = series.options.accessibility, seriesValueDescFormat = seriesA11yOptions && seriesA11yOptions.point &&\n        seriesA11yOptions.point.valueDescriptionFormat, pointValueDescriptionFormat = seriesValueDescFormat ||\n        chart.options.accessibility.point.valueDescriptionFormat, showXDescription = SeriesDescriber_pick(series.xAxis &&\n        series.xAxis.options.accessibility &&\n        series.xAxis.options.accessibility.enabled, !chart.angular && series.type !== 'flowmap'), xDesc = showXDescription ? getPointXDescription(point) : '', context = {\n        point: point,\n        index: SeriesDescriber_defined(point.index) ? (point.index + 1) : '',\n        xDescription: xDesc,\n        value: getPointValue(point),\n        separator: showXDescription ? ', ' : ''\n    };\n    return SeriesDescriber_format(pointValueDescriptionFormat, context, chart);\n}\n/**\n * Return string with information about point.\n * @private\n */\nfunction defaultPointDescriptionFormatter(point) {\n    const series = point.series, shouldExposeSeriesName = series.chart.series.length > 1 ||\n        series.options.name, valText = getPointValueDescription(point), description = point.options && point.options.accessibility &&\n        point.options.accessibility.description, userDescText = description ? ' ' + description : '', seriesNameText = shouldExposeSeriesName ? ' ' + series.name + '.' : '', annotationsDesc = getPointAnnotationDescription(point), pointAnnotationsText = annotationsDesc ? ' ' + annotationsDesc : '';\n    point.accessibility = point.accessibility || {};\n    point.accessibility.valueDescription = valText;\n    return valText + userDescText + seriesNameText + pointAnnotationsText;\n}\n/**\n * Set a11y props on a point element\n * @private\n * @param {Highcharts.Point} point\n * @param {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement} pointElement\n */\nfunction setPointScreenReaderAttribs(point, pointElement) {\n    const series = point.series, seriesPointA11yOptions = series.options.accessibility?.point || {}, a11yPointOptions = series.chart.options.accessibility.point || {}, label = SeriesDescriber_stripHTMLTags((isString(seriesPointA11yOptions.descriptionFormat) &&\n        SeriesDescriber_format(seriesPointA11yOptions.descriptionFormat, point, series.chart)) ||\n        seriesPointA11yOptions.descriptionFormatter?.(point) ||\n        (isString(a11yPointOptions.descriptionFormat) &&\n            SeriesDescriber_format(a11yPointOptions.descriptionFormat, point, series.chart)) ||\n        a11yPointOptions.descriptionFormatter?.(point) ||\n        defaultPointDescriptionFormatter(point), series.chart.renderer.forExport);\n    pointElement.setAttribute('role', 'img');\n    pointElement.setAttribute('aria-label', label);\n}\n/**\n * Add accessible info to individual point elements of a series\n * @private\n * @param {Highcharts.Series} series\n */\nfunction describePointsInSeries(series) {\n    const setScreenReaderProps = shouldSetScreenReaderPropsOnPoints(series), setKeyboardProps = shouldSetKeyboardNavPropsOnPoints(series), shouldDescribeNullPoints = series.chart.options.accessibility\n        .point.describeNull;\n    if (setScreenReaderProps || setKeyboardProps) {\n        series.points.forEach((point) => {\n            const pointEl = point.graphic && point.graphic.element ||\n                shouldAddMockPoint(point) && addMockPointElement(point), pointA11yDisabled = (point.options &&\n                point.options.accessibility &&\n                point.options.accessibility.enabled === false);\n            if (pointEl) {\n                if (point.isNull && !shouldDescribeNullPoints) {\n                    pointEl.setAttribute('aria-hidden', true);\n                    return;\n                }\n                // We always set tabindex, as long as we are setting props.\n                // When setting tabindex, also remove default outline to\n                // avoid ugly border on click.\n                pointEl.setAttribute('tabindex', '-1');\n                if (!series.chart.styledMode) {\n                    pointEl.style.outline = 'none';\n                }\n                if (setScreenReaderProps && !pointA11yDisabled) {\n                    setPointScreenReaderAttribs(point, pointEl);\n                }\n                else {\n                    pointEl.setAttribute('aria-hidden', true);\n                }\n            }\n        });\n    }\n}\n/**\n * Return string with information about series.\n * @private\n */\nfunction defaultSeriesDescriptionFormatter(series) {\n    const chart = series.chart, chartTypes = chart.types || [], description = getSeriesDescriptionText(series), shouldDescribeAxis = function (coll) {\n        return chart[coll] && chart[coll].length > 1 && series[coll];\n    }, seriesNumber = series.index + 1, xAxisInfo = getSeriesAxisDescriptionText(series, 'xAxis'), yAxisInfo = getSeriesAxisDescriptionText(series, 'yAxis'), summaryContext = {\n        seriesNumber,\n        series,\n        chart\n    }, combinationSuffix = chartTypes.length > 1 ? 'Combination' : '', summary = chart.langFormat('accessibility.series.summary.' + series.type + combinationSuffix, summaryContext) || chart.langFormat('accessibility.series.summary.default' + combinationSuffix, summaryContext), axisDescription = (shouldDescribeAxis('yAxis') ? ' ' + yAxisInfo + '.' : '') + (shouldDescribeAxis('xAxis') ? ' ' + xAxisInfo + '.' : ''), formatStr = SeriesDescriber_pick(series.options.accessibility &&\n        series.options.accessibility.descriptionFormat, chart.options.accessibility.series.descriptionFormat, '');\n    return SeriesDescriber_format(formatStr, {\n        seriesDescription: summary,\n        authorDescription: (description ? ' ' + description : ''),\n        axisDescription,\n        series,\n        chart,\n        seriesNumber\n    }, void 0);\n}\n/**\n * Set a11y props on a series element\n * @private\n * @param {Highcharts.Series} series\n * @param {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement} seriesElement\n */\nfunction describeSeriesElement(series, seriesElement) {\n    const seriesA11yOptions = series.options.accessibility || {}, a11yOptions = series.chart.options.accessibility, landmarkVerbosity = a11yOptions.landmarkVerbosity;\n    // Handle role attribute\n    if (seriesA11yOptions.exposeAsGroupOnly) {\n        seriesElement.setAttribute('role', 'img');\n    }\n    else if (landmarkVerbosity === 'all') {\n        seriesElement.setAttribute('role', 'region');\n    }\n    else {\n        seriesElement.setAttribute('role', 'group');\n    }\n    seriesElement.setAttribute('tabindex', '-1');\n    if (!series.chart.styledMode) {\n        // Don't show browser outline on click, despite tabindex\n        seriesElement.style.outline = 'none';\n    }\n    seriesElement.setAttribute('aria-label', SeriesDescriber_stripHTMLTags(a11yOptions.series.descriptionFormatter &&\n        a11yOptions.series.descriptionFormatter(series) ||\n        defaultSeriesDescriptionFormatter(series), series.chart.renderer.forExport));\n}\n/**\n * Put accessible info on series and points of a series.\n * @param {Highcharts.Series} series The series to add info on.\n */\nfunction describeSeries(series) {\n    const chart = series.chart, firstPointEl = SeriesDescriber_getSeriesFirstPointElement(series), seriesEl = SeriesDescriber_getSeriesA11yElement(series), is3d = chart.is3d && chart.is3d();\n    if (seriesEl) {\n        // For some series types the order of elements do not match the\n        // order of points in series. In that case we have to reverse them\n        // in order for AT to read them out in an understandable order.\n        // Due to z-index issues we cannot do this for 3D charts.\n        if (seriesEl.lastChild === firstPointEl && !is3d) {\n            SeriesDescriber_reverseChildNodes(seriesEl);\n        }\n        describePointsInSeries(series);\n        SeriesDescriber_unhideChartElementFromAT(chart, seriesEl);\n        if (shouldDescribeSeriesElement(series)) {\n            describeSeriesElement(series, seriesEl);\n        }\n        else {\n            seriesEl.removeAttribute('aria-label');\n        }\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst SeriesDescriber = {\n    defaultPointDescriptionFormatter,\n    defaultSeriesDescriptionFormatter,\n    describeSeries\n};\n/* harmony default export */ const SeriesComponent_SeriesDescriber = (SeriesDescriber);\n\n;// ./code/es-modules/Accessibility/Components/SeriesComponent/NewDataAnnouncer.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Handle announcing new data for a chart.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { composed: NewDataAnnouncer_composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: NewDataAnnouncer_addEvent, defined: NewDataAnnouncer_defined, pushUnique: NewDataAnnouncer_pushUnique } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\nconst { getChartTitle: NewDataAnnouncer_getChartTitle } = Utils_ChartUtilities;\n\n\nconst { defaultPointDescriptionFormatter: NewDataAnnouncer_defaultPointDescriptionFormatter, defaultSeriesDescriptionFormatter: NewDataAnnouncer_defaultSeriesDescriptionFormatter } = SeriesComponent_SeriesDescriber;\n/* *\n *\n *  Functions\n *\n * */\n/* eslint-disable valid-jsdoc */\n/**\n * @private\n */\nfunction chartHasAnnounceEnabled(chart) {\n    return !!chart.options.accessibility.announceNewData.enabled;\n}\n/**\n * @private\n */\nfunction findPointInDataArray(point) {\n    const candidates = point.series.data.filter((candidate) => (point.x === candidate.x && point.y === candidate.y));\n    return candidates.length === 1 ? candidates[0] : point;\n}\n/**\n * Get array of unique series from two arrays\n * @private\n */\nfunction getUniqueSeries(arrayA, arrayB) {\n    const uniqueSeries = (arrayA || []).concat(arrayB || []).reduce((acc, cur) => {\n        acc[cur.name + cur.index] = cur;\n        return acc;\n    }, {});\n    return Object\n        .keys(uniqueSeries)\n        .map((ix) => uniqueSeries[ix]);\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * @private\n * @class\n */\nclass NewDataAnnouncer {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(chart) {\n        this.dirty = {\n            allSeries: {}\n        };\n        this.lastAnnouncementTime = 0;\n        this.chart = chart;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * Initialize the new data announcer.\n     * @private\n     */\n    init() {\n        const chart = this.chart;\n        const announceOptions = (chart.options.accessibility.announceNewData);\n        const announceType = announceOptions.interruptUser ?\n            'assertive' : 'polite';\n        this.lastAnnouncementTime = 0;\n        this.dirty = {\n            allSeries: {}\n        };\n        this.eventProvider = new Utils_EventProvider();\n        this.announcer = new Utils_Announcer(chart, announceType);\n        this.addEventListeners();\n    }\n    /**\n     * Remove traces of announcer.\n     * @private\n     */\n    destroy() {\n        this.eventProvider.removeAddedEvents();\n        this.announcer.destroy();\n    }\n    /**\n     * Add event listeners for the announcer\n     * @private\n     */\n    addEventListeners() {\n        const announcer = this, chart = this.chart, e = this.eventProvider;\n        e.addEvent(chart, 'afterApplyDrilldown', function () {\n            announcer.lastAnnouncementTime = 0;\n        });\n        e.addEvent(chart, 'afterAddSeries', function (e) {\n            announcer.onSeriesAdded(e.series);\n        });\n        e.addEvent(chart, 'redraw', function () {\n            announcer.announceDirtyData();\n        });\n    }\n    /**\n     * On new data series added, update dirty list.\n     * @private\n     * @param {Highcharts.Series} series\n     */\n    onSeriesAdded(series) {\n        if (chartHasAnnounceEnabled(this.chart)) {\n            this.dirty.hasDirty = true;\n            this.dirty.allSeries[series.name + series.index] = series;\n            // Add it to newSeries storage unless we already have one\n            this.dirty.newSeries = NewDataAnnouncer_defined(this.dirty.newSeries) ?\n                void 0 : series;\n        }\n    }\n    /**\n     * Gather what we know and announce the data to user.\n     * @private\n     */\n    announceDirtyData() {\n        const chart = this.chart, announcer = this;\n        if (chart.options.accessibility.announceNewData &&\n            this.dirty.hasDirty) {\n            let newPoint = this.dirty.newPoint;\n            // If we have a single new point, see if we can find it in the\n            // data array. Otherwise we can only pass through options to\n            // the description builder, and it is a bit sparse in info.\n            if (newPoint) {\n                newPoint = findPointInDataArray(newPoint);\n            }\n            this.queueAnnouncement(Object\n                .keys(this.dirty.allSeries)\n                .map((ix) => announcer.dirty.allSeries[ix]), this.dirty.newSeries, newPoint);\n            // Reset\n            this.dirty = {\n                allSeries: {}\n            };\n        }\n    }\n    /**\n     * Announce to user that there is new data.\n     * @private\n     * @param {Array<Highcharts.Series>} dirtySeries\n     *          Array of series with new data.\n     * @param {Highcharts.Series} [newSeries]\n     *          If a single new series was added, a reference to this series.\n     * @param {Highcharts.Point} [newPoint]\n     *          If a single point was added, a reference to this point.\n     */\n    queueAnnouncement(dirtySeries, newSeries, newPoint) {\n        const chart = this.chart;\n        const annOptions = chart.options.accessibility.announceNewData;\n        if (annOptions.enabled) {\n            const now = +new Date();\n            const dTime = now - this.lastAnnouncementTime;\n            const time = Math.max(0, annOptions.minAnnounceInterval - dTime);\n            // Add series from previously queued announcement.\n            const allSeries = getUniqueSeries(this.queuedAnnouncement && this.queuedAnnouncement.series, dirtySeries);\n            // Build message and announce\n            const message = this.buildAnnouncementMessage(allSeries, newSeries, newPoint);\n            if (message) {\n                // Is there already one queued?\n                if (this.queuedAnnouncement) {\n                    clearTimeout(this.queuedAnnouncementTimer);\n                }\n                // Build the announcement\n                this.queuedAnnouncement = {\n                    time: now,\n                    message: message,\n                    series: allSeries\n                };\n                // Queue the announcement\n                this.queuedAnnouncementTimer = setTimeout(() => {\n                    if (this && this.announcer) {\n                        this.lastAnnouncementTime = +new Date();\n                        this.announcer.announce(this.queuedAnnouncement.message);\n                        delete this.queuedAnnouncement;\n                        delete this.queuedAnnouncementTimer;\n                    }\n                }, time);\n            }\n        }\n    }\n    /**\n     * Get announcement message for new data.\n     * @private\n     * @param {Array<Highcharts.Series>} dirtySeries\n     *          Array of series with new data.\n     * @param {Highcharts.Series} [newSeries]\n     *          If a single new series was added, a reference to this series.\n     * @param {Highcharts.Point} [newPoint]\n     *          If a single point was added, a reference to this point.\n     *\n     * @return {string|null}\n     * The announcement message to give to user.\n     */\n    buildAnnouncementMessage(dirtySeries, newSeries, newPoint) {\n        const chart = this.chart, annOptions = chart.options.accessibility.announceNewData;\n        // User supplied formatter?\n        if (annOptions.announcementFormatter) {\n            const formatterRes = annOptions.announcementFormatter(dirtySeries, newSeries, newPoint);\n            if (formatterRes !== false) {\n                return formatterRes.length ? formatterRes : null;\n            }\n        }\n        // Default formatter - use lang options\n        const multiple = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).charts && (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).charts.length > 1 ?\n            'Multiple' : 'Single', langKey = newSeries ? 'newSeriesAnnounce' + multiple :\n            newPoint ? 'newPointAnnounce' + multiple : 'newDataAnnounce', chartTitle = NewDataAnnouncer_getChartTitle(chart);\n        return chart.langFormat('accessibility.announceNewData.' + langKey, {\n            chartTitle: chartTitle,\n            seriesDesc: newSeries ?\n                NewDataAnnouncer_defaultSeriesDescriptionFormatter(newSeries) :\n                null,\n            pointDesc: newPoint ?\n                NewDataAnnouncer_defaultPointDescriptionFormatter(newPoint) :\n                null,\n            point: newPoint,\n            series: newSeries\n        });\n    }\n}\n/* *\n *\n *  Class Namespace\n *\n * */\n(function (NewDataAnnouncer) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    function compose(SeriesClass) {\n        if (NewDataAnnouncer_pushUnique(NewDataAnnouncer_composed, 'A11y.NDA')) {\n            NewDataAnnouncer_addEvent(SeriesClass, 'addPoint', seriesOnAddPoint);\n            NewDataAnnouncer_addEvent(SeriesClass, 'updatedData', seriesOnUpdatedData);\n        }\n    }\n    NewDataAnnouncer.compose = compose;\n    /**\n     * On new point added, update dirty list.\n     * @private\n     * @param {Highcharts.Point} point\n     */\n    function seriesOnAddPoint(e) {\n        const chart = this.chart, newDataAnnouncer = chart.accessibility?.components\n            .series.newDataAnnouncer;\n        if (newDataAnnouncer &&\n            newDataAnnouncer.chart === chart &&\n            chartHasAnnounceEnabled(chart)) {\n            // Add it to newPoint storage unless we already have one\n            newDataAnnouncer.dirty.newPoint = (NewDataAnnouncer_defined(newDataAnnouncer.dirty.newPoint) ?\n                void 0 :\n                e.point);\n        }\n    }\n    /**\n     * On new data in the series, make sure we add it to the dirty list.\n     * @private\n     * @param {Highcharts.Series} series\n     */\n    function seriesOnUpdatedData() {\n        const chart = this.chart, newDataAnnouncer = chart.accessibility?.components\n            .series.newDataAnnouncer;\n        if (newDataAnnouncer &&\n            newDataAnnouncer.chart === chart &&\n            chartHasAnnounceEnabled(chart)) {\n            newDataAnnouncer.dirty.hasDirty = true;\n            newDataAnnouncer.dirty.allSeries[this.name + this.index] = this;\n        }\n    }\n})(NewDataAnnouncer || (NewDataAnnouncer = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const SeriesComponent_NewDataAnnouncer = (NewDataAnnouncer);\n\n;// ./code/es-modules/Accessibility/ProxyElement.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Proxy elements are used to shadow SVG elements in HTML for assistive\n *  technology, such as screen readers or voice input software.\n *\n *  The ProxyElement class represents such an element, and deals with\n *  overlay positioning and mirroring events for the target.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { doc: ProxyElement_doc } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { attr: ProxyElement_attr, css: ProxyElement_css, merge: ProxyElement_merge } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\nconst { fireEventOnWrappedOrUnwrappedElement: ProxyElement_fireEventOnWrappedOrUnwrappedElement } = Utils_ChartUtilities;\n\nconst { cloneMouseEvent: ProxyElement_cloneMouseEvent, cloneTouchEvent: ProxyElement_cloneTouchEvent, getFakeMouseEvent: ProxyElement_getFakeMouseEvent, removeElement: ProxyElement_removeElement } = Utils_HTMLUtilities;\n/* *\n *\n *  Class\n *\n * */\n/**\n * Represents a proxy element that overlays a target and relays events\n * to its target.\n *\n * @private\n * @class\n */\nclass ProxyElement {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(chart, target, proxyElementType = 'button', wrapperElementType, attributes) {\n        this.chart = chart;\n        this.target = target;\n        this.eventProvider = new Utils_EventProvider();\n        const innerEl = this.innerElement =\n            ProxyElement_doc.createElement(proxyElementType), wrapperEl = this.element = wrapperElementType ?\n            ProxyElement_doc.createElement(wrapperElementType) : innerEl;\n        if (!chart.styledMode) {\n            this.hideElementVisually(innerEl);\n        }\n        if (wrapperElementType) {\n            if (wrapperElementType === 'li' && !chart.styledMode) {\n                wrapperEl.style.listStyle = 'none';\n            }\n            wrapperEl.appendChild(innerEl);\n            this.element = wrapperEl;\n        }\n        this.updateTarget(target, attributes);\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Fake a click event on the target.\n     */\n    click() {\n        const pos = this.getTargetPosition();\n        pos.x += pos.width / 2;\n        pos.y += pos.height / 2;\n        const fakeEventObject = ProxyElement_getFakeMouseEvent('click', pos);\n        ProxyElement_fireEventOnWrappedOrUnwrappedElement(this.target.click, fakeEventObject);\n    }\n    /**\n     * Update the target to be proxied. The position and events are updated to\n     * match the new target.\n     * @param target The new target definition\n     * @param attributes New HTML attributes to apply to the proxy. Set an\n     * attribute to null to remove.\n     */\n    updateTarget(target, attributes) {\n        this.target = target;\n        this.updateCSSClassName();\n        const attrs = attributes || {};\n        Object.keys(attrs).forEach((a) => {\n            if (attrs[a] === null) {\n                delete attrs[a];\n            }\n        });\n        const targetAriaLabel = this.getTargetAttr(target.click, 'aria-label');\n        ProxyElement_attr(this.innerElement, ProxyElement_merge(targetAriaLabel ? {\n            'aria-label': targetAriaLabel\n        } : {}, attrs));\n        this.eventProvider.removeAddedEvents();\n        this.addProxyEventsToElement(this.innerElement, target.click);\n        this.refreshPosition();\n    }\n    /**\n     * Refresh the position of the proxy element to match the current target\n     */\n    refreshPosition() {\n        const bBox = this.getTargetPosition();\n        ProxyElement_css(this.innerElement, {\n            width: (bBox.width || 1) + 'px',\n            height: (bBox.height || 1) + 'px',\n            left: (Math.round(bBox.x) || 0) + 'px',\n            top: (Math.round(bBox.y) || 0) + 'px'\n        });\n    }\n    /**\n     * Remove button from DOM, and clear events.\n     */\n    remove() {\n        this.eventProvider.removeAddedEvents();\n        ProxyElement_removeElement(this.element);\n    }\n    // -------------------------- private ------------------------------------\n    /**\n     * Update the CSS class name to match target\n     */\n    updateCSSClassName() {\n        const stringHasNoTooltip = (s) => (s.indexOf('highcharts-no-tooltip') > -1);\n        const legend = this.chart.legend;\n        const groupDiv = legend.group && legend.group.div;\n        const noTooltipOnGroup = stringHasNoTooltip(groupDiv && groupDiv.className || '');\n        const targetClassName = this.getTargetAttr(this.target.click, 'class') || '';\n        const noTooltipOnTarget = stringHasNoTooltip(targetClassName);\n        this.innerElement.className = noTooltipOnGroup || noTooltipOnTarget ?\n            'highcharts-a11y-proxy-element highcharts-no-tooltip' :\n            'highcharts-a11y-proxy-element';\n    }\n    /**\n     * Mirror events for a proxy element to a target\n     */\n    addProxyEventsToElement(element, target) {\n        [\n            'click', 'touchstart', 'touchend', 'touchcancel', 'touchmove',\n            'mouseover', 'mouseenter', 'mouseleave', 'mouseout'\n        ].forEach((evtType) => {\n            const isTouchEvent = evtType.indexOf('touch') === 0;\n            this.eventProvider.addEvent(element, evtType, (e) => {\n                const clonedEvent = isTouchEvent ?\n                    ProxyElement_cloneTouchEvent(e) :\n                    ProxyElement_cloneMouseEvent(e);\n                if (target) {\n                    ProxyElement_fireEventOnWrappedOrUnwrappedElement(target, clonedEvent);\n                }\n                e.stopPropagation();\n                // #9682, #15318: Touch scrolling didn't work when touching\n                // proxy\n                if (!isTouchEvent) {\n                    e.preventDefault();\n                }\n            }, { passive: false });\n        });\n    }\n    /**\n     * Set visually hidden style on a proxy element\n     */\n    hideElementVisually(el) {\n        ProxyElement_css(el, {\n            borderWidth: 0,\n            backgroundColor: 'transparent',\n            cursor: 'pointer',\n            outline: 'none',\n            opacity: 0.001,\n            filter: 'alpha(opacity=1)',\n            zIndex: 999,\n            overflow: 'hidden',\n            padding: 0,\n            margin: 0,\n            display: 'block',\n            position: 'absolute',\n            '-ms-filter': 'progid:DXImageTransform.Microsoft.Alpha(Opacity=1)'\n        });\n    }\n    /**\n     * Get the position relative to chart container for the target\n     */\n    getTargetPosition() {\n        const clickTarget = this.target.click;\n        // We accept both DOM elements and wrapped elements as click targets.\n        const clickTargetElement = clickTarget.element ?\n            clickTarget.element :\n            clickTarget;\n        const posElement = this.target.visual || clickTargetElement;\n        const chartDiv = this.chart.renderTo, pointer = this.chart.pointer;\n        if (chartDiv && posElement?.getBoundingClientRect && pointer) {\n            const rectEl = posElement.getBoundingClientRect(), chartPos = pointer.getChartPosition();\n            return {\n                x: (rectEl.left - chartPos.left) / chartPos.scaleX,\n                y: (rectEl.top - chartPos.top) / chartPos.scaleY,\n                width: rectEl.right / chartPos.scaleX -\n                    rectEl.left / chartPos.scaleX,\n                height: rectEl.bottom / chartPos.scaleY -\n                    rectEl.top / chartPos.scaleY\n            };\n        }\n        return { x: 0, y: 0, width: 1, height: 1 };\n    }\n    /**\n     * Get an attribute value of a target\n     */\n    getTargetAttr(target, key) {\n        if (target.element) {\n            return target.element.getAttribute(key);\n        }\n        return target.getAttribute(key);\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Accessibility_ProxyElement = (ProxyElement);\n\n;// ./code/es-modules/Accessibility/ProxyProvider.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Proxy elements are used to shadow SVG elements in HTML for assistive\n *  technology, such as screen readers or voice input software.\n *\n *  The ProxyProvider keeps track of all proxy elements of the a11y module,\n *  and updating their order and positioning.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { doc: ProxyProvider_doc } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { attr: ProxyProvider_attr, css: ProxyProvider_css } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { unhideChartElementFromAT: ProxyProvider_unhideChartElementFromAT } = Utils_ChartUtilities;\n\n\nconst { removeChildNodes: ProxyProvider_removeChildNodes } = Utils_HTMLUtilities;\n\n/* *\n *\n *  Class\n *\n * */\n/**\n * Keeps track of all proxy elements and proxy groups.\n *\n * @private\n * @class\n */\nclass ProxyProvider {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(chart) {\n        this.chart = chart;\n        this.domElementProvider = new Utils_DOMElementProvider();\n        this.groups = {};\n        this.groupOrder = [];\n        this.beforeChartProxyPosContainer = this.createProxyPosContainer('before');\n        this.afterChartProxyPosContainer = this.createProxyPosContainer('after');\n        this.update();\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable */\n    /**\n     * Add a new proxy element to a group, proxying a target control.\n     */\n    addProxyElement(groupKey, target, proxyElementType = 'button', attributes) {\n        const group = this.groups[groupKey];\n        if (!group) {\n            throw new Error('ProxyProvider.addProxyElement: Invalid group key ' + groupKey);\n        }\n        const wrapperElementType = group.type === 'ul' || group.type === 'ol' ?\n            'li' : void 0, proxy = new Accessibility_ProxyElement(this.chart, target, proxyElementType, wrapperElementType, attributes);\n        group.proxyContainerElement.appendChild(proxy.element);\n        group.proxyElements.push(proxy);\n        return proxy;\n    }\n    /**\n     * Create a group that will contain proxy elements. The group order is\n     * automatically updated according to the last group order keys.\n     *\n     * Returns the added group.\n     */\n    addGroup(groupKey, groupElementType = 'div', attributes) {\n        const existingGroup = this.groups[groupKey];\n        if (existingGroup) {\n            return existingGroup.groupElement;\n        }\n        const proxyContainer = this.domElementProvider\n            .createElement(groupElementType);\n        // If we want to add a role to the group, and still use e.g.\n        // a list group, we need a wrapper div around the proxyContainer.\n        // Used for setting region role on legend.\n        let groupElement;\n        if (attributes && attributes.role && groupElementType !== 'div') {\n            groupElement = this.domElementProvider.createElement('div');\n            groupElement.appendChild(proxyContainer);\n        }\n        else {\n            groupElement = proxyContainer;\n        }\n        groupElement.className = 'highcharts-a11y-proxy-group highcharts-a11y-proxy-group-' +\n            groupKey.replace(/\\W/g, '-');\n        this.groups[groupKey] = {\n            proxyContainerElement: proxyContainer,\n            groupElement,\n            type: groupElementType,\n            proxyElements: []\n        };\n        ProxyProvider_attr(groupElement, attributes || {});\n        if (groupElementType === 'ul') {\n            proxyContainer.setAttribute('role', 'list'); // Needed for webkit\n        }\n        // Add the group to the end by default, and perhaps then we\n        // won't have to reorder the whole set of groups.\n        this.afterChartProxyPosContainer.appendChild(groupElement);\n        this.updateGroupOrder(this.groupOrder);\n        return groupElement;\n    }\n    /**\n     * Update HTML attributes of a group.\n     */\n    updateGroupAttrs(groupKey, attributes) {\n        const group = this.groups[groupKey];\n        if (!group) {\n            throw new Error('ProxyProvider.updateGroupAttrs: Invalid group key ' + groupKey);\n        }\n        ProxyProvider_attr(group.groupElement, attributes);\n    }\n    /**\n     * Reorder the proxy groups.\n     *\n     * The group key \"series\" refers to the chart's data points / <svg> element.\n     * This is so that the keyboardNavigation.order option can be used to\n     * determine the proxy group order.\n     */\n    updateGroupOrder(groupKeys) {\n        // Store so that we can update order when a new group is created\n        this.groupOrder = groupKeys.slice();\n        // Don't unnecessarily reorder, because keyboard focus is lost\n        if (this.isDOMOrderGroupOrder()) {\n            return;\n        }\n        const seriesIx = groupKeys.indexOf('series');\n        const beforeKeys = seriesIx > -1 ? groupKeys.slice(0, seriesIx) : groupKeys;\n        const afterKeys = seriesIx > -1 ? groupKeys.slice(seriesIx + 1) : [];\n        // Store focused element since it will be lost when reordering\n        const activeElement = ProxyProvider_doc.activeElement;\n        // Add groups to correct container\n        ['before', 'after'].forEach((pos) => {\n            const posContainer = this[pos === 'before' ?\n                'beforeChartProxyPosContainer' :\n                'afterChartProxyPosContainer'];\n            const keys = pos === 'before' ? beforeKeys : afterKeys;\n            ProxyProvider_removeChildNodes(posContainer);\n            keys.forEach((groupKey) => {\n                const group = this.groups[groupKey];\n                if (group) {\n                    posContainer.appendChild(group.groupElement);\n                }\n            });\n        });\n        // Attempt to restore focus after reordering, but note that this may\n        // cause screen readers re-announcing the button.\n        if ((this.beforeChartProxyPosContainer.contains(activeElement) ||\n            this.afterChartProxyPosContainer.contains(activeElement)) &&\n            activeElement && activeElement.focus) {\n            activeElement.focus();\n        }\n    }\n    /**\n     * Remove all proxy elements in a group\n     */\n    clearGroup(groupKey) {\n        const group = this.groups[groupKey];\n        if (!group) {\n            throw new Error('ProxyProvider.clearGroup: Invalid group key ' + groupKey);\n        }\n        ProxyProvider_removeChildNodes(group.proxyContainerElement);\n    }\n    /**\n     * Remove a group from the DOM and from the proxy provider's group list.\n     * All child elements are removed.\n     * If the group does not exist, nothing happens.\n     */\n    removeGroup(groupKey) {\n        const group = this.groups[groupKey];\n        if (group) {\n            // Remove detached HTML elements to prevent memory leak (#20329).\n            this.domElementProvider.removeElement(group.groupElement);\n            // Sometimes groupElement is a wrapper around the proxyContainer, so\n            // the real one proxyContainer needs to be removed also.\n            if (group.groupElement !== group.proxyContainerElement) {\n                this.domElementProvider.removeElement(group.proxyContainerElement);\n            }\n            delete this.groups[groupKey];\n        }\n    }\n    /**\n     * Update the position and order of all proxy groups and elements\n     */\n    update() {\n        this.updatePosContainerPositions();\n        this.updateGroupOrder(this.groupOrder);\n        this.updateProxyElementPositions();\n    }\n    /**\n     * Update all proxy element positions\n     */\n    updateProxyElementPositions() {\n        Object.keys(this.groups).forEach(this.updateGroupProxyElementPositions.bind(this));\n    }\n    /**\n     * Update a group's proxy elements' positions.\n     * If the group does not exist, nothing happens.\n     */\n    updateGroupProxyElementPositions(groupKey) {\n        const group = this.groups[groupKey];\n        if (group) {\n            group.proxyElements.forEach((el) => el.refreshPosition());\n        }\n    }\n    /**\n     * Remove all added elements\n     */\n    destroy() {\n        this.domElementProvider.destroyCreatedElements();\n    }\n    // -------------------------- private ------------------------------------\n    /**\n     * Create and return a pos container element (the overall containers for\n     * the proxy groups).\n     */\n    createProxyPosContainer(classNamePostfix) {\n        const el = this.domElementProvider.createElement('div');\n        el.setAttribute('aria-hidden', 'false');\n        el.className = 'highcharts-a11y-proxy-container' + (classNamePostfix ? '-' + classNamePostfix : '');\n        ProxyProvider_css(el, {\n            top: '0',\n            left: '0'\n        });\n        if (!this.chart.styledMode) {\n            el.style.whiteSpace = 'nowrap';\n            el.style.position = 'absolute';\n        }\n        return el;\n    }\n    /**\n     * Get an array of group keys that corresponds to the current group order\n     * in the DOM.\n     */\n    getCurrentGroupOrderInDOM() {\n        const getGroupKeyFromElement = (el) => {\n            const allGroups = Object.keys(this.groups);\n            let i = allGroups.length;\n            while (i--) {\n                const groupKey = allGroups[i];\n                const group = this.groups[groupKey];\n                if (group && el === group.groupElement) {\n                    return groupKey;\n                }\n            }\n        };\n        const getChildrenGroupOrder = (el) => {\n            const childrenOrder = [];\n            const children = el.children;\n            for (let i = 0; i < children.length; ++i) {\n                const groupKey = getGroupKeyFromElement(children[i]);\n                if (groupKey) {\n                    childrenOrder.push(groupKey);\n                }\n            }\n            return childrenOrder;\n        };\n        const before = getChildrenGroupOrder(this.beforeChartProxyPosContainer);\n        const after = getChildrenGroupOrder(this.afterChartProxyPosContainer);\n        before.push('series');\n        return before.concat(after);\n    }\n    /**\n     * Check if the current DOM order matches the current group order, so that\n     * a reordering/update is unnecessary.\n     */\n    isDOMOrderGroupOrder() {\n        const domOrder = this.getCurrentGroupOrderInDOM();\n        const groupOrderWithGroups = this.groupOrder.filter((x) => x === 'series' || !!this.groups[x]);\n        let i = domOrder.length;\n        if (i !== groupOrderWithGroups.length) {\n            return false;\n        }\n        while (i--) {\n            if (domOrder[i] !== groupOrderWithGroups[i]) {\n                return false;\n            }\n        }\n        return true;\n    }\n    /**\n     * Update the DOM positions of the before/after proxy\n     * positioning containers for the groups.\n     */\n    updatePosContainerPositions() {\n        const chart = this.chart;\n        // If exporting, don't add these containers to the DOM.\n        if (chart.renderer.forExport) {\n            return;\n        }\n        const rendererSVGEl = chart.renderer.box;\n        chart.container.insertBefore(this.afterChartProxyPosContainer, rendererSVGEl.nextSibling);\n        chart.container.insertBefore(this.beforeChartProxyPosContainer, rendererSVGEl);\n        ProxyProvider_unhideChartElementFromAT(this.chart, this.afterChartProxyPosContainer);\n        ProxyProvider_unhideChartElementFromAT(this.chart, this.beforeChartProxyPosContainer);\n    }\n}\n/* *\n *\n *  Export Default\n *\n * */\n/* harmony default export */ const Accessibility_ProxyProvider = (ProxyProvider);\n\n;// ./code/es-modules/Accessibility/Components/RangeSelectorComponent.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Accessibility component for the range selector.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\n\nconst { unhideChartElementFromAT: RangeSelectorComponent_unhideChartElementFromAT, getAxisRangeDescription: RangeSelectorComponent_getAxisRangeDescription } = Utils_ChartUtilities;\n\n\nconst { addEvent: RangeSelectorComponent_addEvent, attr: RangeSelectorComponent_attr } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Do we want date input navigation\n * @private\n */\nfunction shouldRunInputNavigation(chart) {\n    return Boolean(chart.rangeSelector &&\n        chart.rangeSelector.inputGroup &&\n        chart.rangeSelector.inputGroup.element.style.visibility !== 'hidden' &&\n        chart.options.rangeSelector.inputEnabled !== false &&\n        chart.rangeSelector.minInput &&\n        chart.rangeSelector.maxInput);\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * The RangeSelectorComponent class\n *\n * @private\n * @class\n * @name Highcharts.RangeSelectorComponent\n */\nclass RangeSelectorComponent extends Accessibility_AccessibilityComponent {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * Init the component\n     * @private\n     */\n    init() {\n        const chart = this.chart;\n        this.announcer = new Utils_Announcer(chart, 'polite');\n    }\n    /**\n     * Called on first render/updates to the chart, including options changes.\n     */\n    onChartUpdate() {\n        const chart = this.chart, component = this, rangeSelector = chart.rangeSelector;\n        if (!rangeSelector) {\n            return;\n        }\n        this.updateSelectorVisibility();\n        this.setDropdownAttrs();\n        if (rangeSelector.buttons &&\n            rangeSelector.buttons.length) {\n            rangeSelector.buttons.forEach((button) => {\n                component.setRangeButtonAttrs(button);\n            });\n        }\n        // Make sure input boxes are accessible and focusable\n        if (rangeSelector.maxInput && rangeSelector.minInput) {\n            ['minInput', 'maxInput'].forEach(function (key, i) {\n                const input = rangeSelector[key];\n                if (input) {\n                    RangeSelectorComponent_unhideChartElementFromAT(chart, input);\n                    component.setRangeInputAttrs(input, 'accessibility.rangeSelector.' + (i ? 'max' : 'min') +\n                        'InputLabel');\n                }\n            });\n        }\n    }\n    /**\n     * Hide buttons from AT when showing dropdown, and vice versa.\n     * @private\n     */\n    updateSelectorVisibility() {\n        const chart = this.chart;\n        const rangeSelector = chart.rangeSelector;\n        const dropdown = (rangeSelector &&\n            rangeSelector.dropdown);\n        const buttons = (rangeSelector &&\n            rangeSelector.buttons ||\n            []);\n        const hideFromAT = (el) => el.setAttribute('aria-hidden', true);\n        if (rangeSelector &&\n            rangeSelector.hasVisibleDropdown &&\n            dropdown) {\n            RangeSelectorComponent_unhideChartElementFromAT(chart, dropdown);\n            buttons.forEach((btn) => hideFromAT(btn.element));\n        }\n        else {\n            if (dropdown) {\n                hideFromAT(dropdown);\n            }\n            buttons.forEach((btn) => RangeSelectorComponent_unhideChartElementFromAT(chart, btn.element));\n        }\n    }\n    /**\n     * Set accessibility related attributes on dropdown element.\n     * @private\n     */\n    setDropdownAttrs() {\n        const chart = this.chart;\n        const dropdown = (chart.rangeSelector &&\n            chart.rangeSelector.dropdown);\n        if (dropdown) {\n            const label = chart.langFormat('accessibility.rangeSelector.dropdownLabel', { rangeTitle: chart.options.lang.rangeSelectorZoom });\n            dropdown.setAttribute('aria-label', label);\n            dropdown.setAttribute('tabindex', -1);\n        }\n    }\n    /**\n     * Set attrs for a range button\n     * @private\n     */\n    setRangeButtonAttrs(button) {\n        RangeSelectorComponent_attr(button.element, {\n            tabindex: -1,\n            role: 'button'\n        });\n    }\n    /**\n     * Set attrs for a date input\n     * @private\n     */\n    setRangeInputAttrs(input, langKey) {\n        const chart = this.chart;\n        RangeSelectorComponent_attr(input, {\n            tabindex: -1,\n            'aria-label': chart.langFormat(langKey, { chart: chart })\n        });\n    }\n    /**\n     * Handle arrow key nav\n     * @private\n     */\n    onButtonNavKbdArrowKey(keyboardNavigationHandler, keyCode) {\n        const response = keyboardNavigationHandler.response, keys = this.keyCodes, chart = this.chart, wrapAround = chart.options.accessibility\n            .keyboardNavigation.wrapAround, direction = (keyCode === keys.left || keyCode === keys.up) ? -1 : 1, didHighlight = chart.highlightRangeSelectorButton(chart.highlightedRangeSelectorItemIx + direction);\n        if (!didHighlight) {\n            if (wrapAround) {\n                keyboardNavigationHandler.init(direction);\n                return response.success;\n            }\n            return response[direction > 0 ? 'next' : 'prev'];\n        }\n        return response.success;\n    }\n    /**\n     * Handle keyboard click\n     * @private\n     */\n    onButtonNavKbdClick(keyboardNavigationHandler) {\n        const response = keyboardNavigationHandler.response, chart = this.chart, wasDisabled = chart.oldRangeSelectorItemState === 3;\n        if (!wasDisabled) {\n            this.fakeClickEvent(chart.rangeSelector.buttons[chart.highlightedRangeSelectorItemIx].element);\n        }\n        return response.success;\n    }\n    /**\n     * Called whenever a range selector button has been clicked, either by\n     * mouse, touch, or kbd/voice/other.\n     * @private\n     */\n    onAfterBtnClick() {\n        const chart = this.chart;\n        const axisRangeDescription = RangeSelectorComponent_getAxisRangeDescription(chart.xAxis[0]);\n        const announcement = chart.langFormat('accessibility.rangeSelector.clickButtonAnnouncement', { chart, axisRangeDescription });\n        if (announcement) {\n            this.announcer.announce(announcement);\n        }\n    }\n    /**\n     * Handle move between input elements with Tab key\n     * @private\n     */\n    onInputKbdMove(direction) {\n        const chart = this.chart;\n        const rangeSel = chart.rangeSelector;\n        const newIx = chart.highlightedInputRangeIx = (chart.highlightedInputRangeIx || 0) + direction;\n        const newIxOutOfRange = newIx > 1 || newIx < 0;\n        if (newIxOutOfRange) {\n            if (chart.accessibility) {\n                // Ignore focus\n                chart.accessibility.keyboardNavigation.exiting = true;\n                chart.accessibility.keyboardNavigation.tabindexContainer\n                    .focus();\n                return chart.accessibility.keyboardNavigation.move(direction);\n            }\n        }\n        else if (rangeSel) {\n            const svgEl = rangeSel[newIx ? 'maxDateBox' : 'minDateBox'];\n            const inputEl = rangeSel[newIx ? 'maxInput' : 'minInput'];\n            if (svgEl && inputEl) {\n                chart.setFocusToElement(svgEl, inputEl);\n            }\n        }\n        return true;\n    }\n    /**\n     * Init date input navigation\n     * @private\n     */\n    onInputNavInit(direction) {\n        const component = this;\n        const chart = this.chart;\n        const buttonIxToHighlight = direction > 0 ? 0 : 1;\n        const rangeSel = chart.rangeSelector;\n        const svgEl = (rangeSel &&\n            rangeSel[buttonIxToHighlight ? 'maxDateBox' : 'minDateBox']);\n        const minInput = (rangeSel && rangeSel.minInput);\n        const maxInput = (rangeSel && rangeSel.maxInput);\n        const inputEl = buttonIxToHighlight ? maxInput : minInput;\n        chart.highlightedInputRangeIx = buttonIxToHighlight;\n        if (svgEl && minInput && maxInput) {\n            chart.setFocusToElement(svgEl, inputEl);\n            // Tab-press with the input focused does not propagate to chart\n            // automatically, so we manually catch and handle it when relevant.\n            if (this.removeInputKeydownHandler) {\n                this.removeInputKeydownHandler();\n            }\n            const keydownHandler = (e) => {\n                const isTab = (e.which || e.keyCode) === this.keyCodes.tab;\n                if (isTab &&\n                    component.onInputKbdMove(e.shiftKey ? -1 : 1)) {\n                    e.preventDefault();\n                    e.stopPropagation();\n                }\n            };\n            const minRemover = RangeSelectorComponent_addEvent(minInput, 'keydown', keydownHandler);\n            const maxRemover = RangeSelectorComponent_addEvent(maxInput, 'keydown', keydownHandler);\n            this.removeInputKeydownHandler = () => {\n                minRemover();\n                maxRemover();\n            };\n        }\n    }\n    /**\n     * Terminate date input nav\n     * @private\n     */\n    onInputNavTerminate() {\n        const rangeSel = (this.chart.rangeSelector || {});\n        if (rangeSel.maxInput) {\n            rangeSel.hideInput('max');\n        }\n        if (rangeSel.minInput) {\n            rangeSel.hideInput('min');\n        }\n        if (this.removeInputKeydownHandler) {\n            this.removeInputKeydownHandler();\n            delete this.removeInputKeydownHandler;\n        }\n    }\n    /**\n     * Init range selector dropdown nav\n     * @private\n     */\n    initDropdownNav() {\n        const chart = this.chart;\n        const rangeSelector = chart.rangeSelector;\n        const dropdown = (rangeSelector && rangeSelector.dropdown);\n        if (rangeSelector && dropdown) {\n            chart.setFocusToElement(rangeSelector.buttonGroup, dropdown);\n            if (this.removeDropdownKeydownHandler) {\n                this.removeDropdownKeydownHandler();\n            }\n            // Tab-press with dropdown focused does not propagate to chart\n            // automatically, so we manually catch and handle it when relevant.\n            this.removeDropdownKeydownHandler = RangeSelectorComponent_addEvent(dropdown, 'keydown', (e) => {\n                const isTab = (e.which || e.keyCode) === this.keyCodes.tab, a11y = chart.accessibility;\n                if (isTab) {\n                    e.preventDefault();\n                    e.stopPropagation();\n                    if (a11y) {\n                        a11y.keyboardNavigation.move(e.shiftKey ? -1 : 1);\n                    }\n                }\n            });\n        }\n    }\n    /**\n     * Get navigation for the range selector buttons.\n     * @private\n     * @return {Highcharts.KeyboardNavigationHandler} The module object.\n     */\n    getRangeSelectorButtonNavigation() {\n        const chart = this.chart;\n        const keys = this.keyCodes;\n        const component = this;\n        return new Accessibility_KeyboardNavigationHandler(chart, {\n            keyCodeMap: [\n                [\n                    [keys.left, keys.right, keys.up, keys.down],\n                    function (keyCode) {\n                        return component.onButtonNavKbdArrowKey(this, keyCode);\n                    }\n                ],\n                [\n                    [keys.enter, keys.space],\n                    function () {\n                        return component.onButtonNavKbdClick(this);\n                    }\n                ]\n            ],\n            validate: function () {\n                return !!(chart.rangeSelector &&\n                    chart.rangeSelector.buttons &&\n                    chart.rangeSelector.buttons.length);\n            },\n            init: function (direction) {\n                const rangeSelector = chart.rangeSelector;\n                if (rangeSelector && rangeSelector.hasVisibleDropdown) {\n                    component.initDropdownNav();\n                }\n                else if (rangeSelector) {\n                    const lastButtonIx = rangeSelector.buttons.length - 1;\n                    chart.highlightRangeSelectorButton(direction > 0 ? 0 : lastButtonIx);\n                }\n            },\n            terminate: function () {\n                if (component.removeDropdownKeydownHandler) {\n                    component.removeDropdownKeydownHandler();\n                    delete component.removeDropdownKeydownHandler;\n                }\n            }\n        });\n    }\n    /**\n     * Get navigation for the range selector input boxes.\n     * @private\n     * @return {Highcharts.KeyboardNavigationHandler}\n     *         The module object.\n     */\n    getRangeSelectorInputNavigation() {\n        const chart = this.chart;\n        const component = this;\n        return new Accessibility_KeyboardNavigationHandler(chart, {\n            keyCodeMap: [],\n            validate: function () {\n                return shouldRunInputNavigation(chart);\n            },\n            init: function (direction) {\n                component.onInputNavInit(direction);\n            },\n            terminate: function () {\n                component.onInputNavTerminate();\n            }\n        });\n    }\n    /**\n     * Get keyboard navigation handlers for this component.\n     * @return {Array<Highcharts.KeyboardNavigationHandler>}\n     *         List of module objects.\n     */\n    getKeyboardNavigation() {\n        return [\n            this.getRangeSelectorButtonNavigation(),\n            this.getRangeSelectorInputNavigation()\n        ];\n    }\n    /**\n     * Remove component traces\n     */\n    destroy() {\n        if (this.removeDropdownKeydownHandler) {\n            this.removeDropdownKeydownHandler();\n        }\n        if (this.removeInputKeydownHandler) {\n            this.removeInputKeydownHandler();\n        }\n        if (this.announcer) {\n            this.announcer.destroy();\n        }\n    }\n}\n/* *\n *\n *  Class Namespace\n *\n * */\n(function (RangeSelectorComponent) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Highlight range selector button by index.\n     *\n     * @private\n     * @function Highcharts.Chart#highlightRangeSelectorButton\n     */\n    function chartHighlightRangeSelectorButton(ix) {\n        const buttons = (this.rangeSelector &&\n            this.rangeSelector.buttons ||\n            []);\n        const curHighlightedIx = this.highlightedRangeSelectorItemIx;\n        const curSelectedIx = (this.rangeSelector &&\n            this.rangeSelector.selected);\n        // Deselect old\n        if (typeof curHighlightedIx !== 'undefined' &&\n            buttons[curHighlightedIx] &&\n            curHighlightedIx !== curSelectedIx) {\n            buttons[curHighlightedIx].setState(this.oldRangeSelectorItemState || 0);\n        }\n        // Select new\n        this.highlightedRangeSelectorItemIx = ix;\n        if (buttons[ix]) {\n            this.setFocusToElement(buttons[ix].box, buttons[ix].element);\n            if (ix !== curSelectedIx) {\n                this.oldRangeSelectorItemState = buttons[ix].state;\n                buttons[ix].setState(1);\n            }\n            return true;\n        }\n        return false;\n    }\n    /**\n     * Build compositions\n     * @private\n     */\n    function compose(ChartClass, RangeSelectorClass) {\n        const chartProto = ChartClass.prototype;\n        if (!chartProto.highlightRangeSelectorButton) {\n            chartProto.highlightRangeSelectorButton = (chartHighlightRangeSelectorButton);\n            RangeSelectorComponent_addEvent(RangeSelectorClass, 'afterBtnClick', rangeSelectorAfterBtnClick);\n        }\n    }\n    RangeSelectorComponent.compose = compose;\n    /**\n     * Range selector does not have destroy-setup for class instance events - so\n     * we set it on the class and call the component from here.\n     * @private\n     */\n    function rangeSelectorAfterBtnClick() {\n        const a11y = this.chart.accessibility;\n        if (a11y && a11y.components.rangeSelector) {\n            return a11y.components.rangeSelector.onAfterBtnClick();\n        }\n    }\n})(RangeSelectorComponent || (RangeSelectorComponent = {}));\n/* *\n *\n *  Export Default\n *\n * */\n/* harmony default export */ const Components_RangeSelectorComponent = (RangeSelectorComponent);\n\n;// ./code/es-modules/Accessibility/Components/SeriesComponent/ForcedMarkers.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Handle forcing series markers.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { composed: ForcedMarkers_composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: ForcedMarkers_addEvent, merge: ForcedMarkers_merge, pushUnique: ForcedMarkers_pushUnique } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Composition\n *\n * */\nvar ForcedMarkersComposition;\n(function (ForcedMarkersComposition) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    function compose(SeriesClass) {\n        if (ForcedMarkers_pushUnique(ForcedMarkers_composed, 'A11y.FM')) {\n            ForcedMarkers_addEvent(SeriesClass, 'afterSetOptions', seriesOnAfterSetOptions);\n            ForcedMarkers_addEvent(SeriesClass, 'render', seriesOnRender);\n            ForcedMarkers_addEvent(SeriesClass, 'afterRender', seriesOnAfterRender);\n            ForcedMarkers_addEvent(SeriesClass, 'renderCanvas', seriesOnRenderCanvas);\n        }\n    }\n    ForcedMarkersComposition.compose = compose;\n    /**\n     * @private\n     */\n    function forceZeroOpacityMarkerOptions(options) {\n        ForcedMarkers_merge(true, options, {\n            marker: {\n                enabled: true,\n                states: {\n                    normal: {\n                        opacity: 0\n                    }\n                }\n            }\n        });\n    }\n    /**\n     * @private\n     */\n    function getPointMarkerOpacity(pointOptions) {\n        return pointOptions.marker.states &&\n            pointOptions.marker.states.normal &&\n            pointOptions.marker.states.normal.opacity;\n    }\n    /**\n     * @private\n     */\n    function handleForcePointMarkers(series) {\n        let i = series.points.length;\n        while (i--) {\n            const point = series.points[i];\n            const pointOptions = point.options;\n            const hadForcedMarker = point.hasForcedA11yMarker;\n            delete point.hasForcedA11yMarker;\n            if (pointOptions.marker) {\n                const isStillForcedMarker = hadForcedMarker &&\n                    getPointMarkerOpacity(pointOptions) === 0;\n                if (pointOptions.marker.enabled && !isStillForcedMarker) {\n                    unforcePointMarkerOptions(pointOptions);\n                    point.hasForcedA11yMarker = false;\n                }\n                else if (pointOptions.marker.enabled === false) {\n                    forceZeroOpacityMarkerOptions(pointOptions);\n                    point.hasForcedA11yMarker = true;\n                }\n            }\n        }\n    }\n    /**\n     * @private\n     */\n    function hasIndividualPointMarkerOptions(series) {\n        return !!(series._hasPointMarkers &&\n            series.points &&\n            series.points.length);\n    }\n    /**\n     * @private\n     */\n    function isWithinDescriptionThreshold(series) {\n        const a11yOptions = series.chart.options.accessibility;\n        return series.points.length <\n            a11yOptions.series.pointDescriptionEnabledThreshold ||\n            a11yOptions.series\n                .pointDescriptionEnabledThreshold === false;\n    }\n    /**\n     * Process marker graphics after render\n     * @private\n     */\n    function seriesOnAfterRender() {\n        const series = this;\n        // For styled mode the rendered graphic does not reflect the style\n        // options, and we need to add/remove classes to achieve the same.\n        if (series.chart.styledMode) {\n            if (series.markerGroup) {\n                series.markerGroup[series.a11yMarkersForced ? 'addClass' : 'removeClass']('highcharts-a11y-markers-hidden');\n            }\n            // Do we need to handle individual points?\n            if (hasIndividualPointMarkerOptions(series)) {\n                series.points.forEach((point) => {\n                    if (point.graphic) {\n                        point.graphic[point.hasForcedA11yMarker ?\n                            'addClass' : 'removeClass']('highcharts-a11y-marker-hidden');\n                        point.graphic[point.hasForcedA11yMarker === false ?\n                            'addClass' :\n                            'removeClass']('highcharts-a11y-marker-visible');\n                    }\n                });\n            }\n        }\n    }\n    /**\n     * Keep track of options to reset markers to if no longer forced.\n     * @private\n     */\n    function seriesOnAfterSetOptions(e) {\n        this.resetA11yMarkerOptions = ForcedMarkers_merge(e.options.marker || {}, this.userOptions.marker || {});\n    }\n    /**\n     * Keep track of forcing markers.\n     * @private\n     */\n    function seriesOnRender() {\n        const series = this, options = series.options;\n        if (shouldForceMarkers(series)) {\n            if (options.marker && options.marker.enabled === false) {\n                series.a11yMarkersForced = true;\n                forceZeroOpacityMarkerOptions(series.options);\n            }\n            if (hasIndividualPointMarkerOptions(series)) {\n                handleForcePointMarkers(series);\n            }\n        }\n        else if (series.a11yMarkersForced) {\n            delete series.a11yMarkersForced;\n            unforceSeriesMarkerOptions(series);\n            delete series.resetA11yMarkerOptions;\n        }\n    }\n    /**\n     * @private\n     */\n    function shouldForceMarkers(series) {\n        const chart = series.chart, chartA11yEnabled = chart.options.accessibility.enabled, seriesA11yEnabled = (series.options.accessibility &&\n            series.options.accessibility.enabled) !== false;\n        return (chartA11yEnabled &&\n            seriesA11yEnabled &&\n            isWithinDescriptionThreshold(series));\n    }\n    /**\n     * @private\n     */\n    function unforcePointMarkerOptions(pointOptions) {\n        ForcedMarkers_merge(true, pointOptions.marker, {\n            states: {\n                normal: {\n                    opacity: getPointMarkerOpacity(pointOptions) || 1\n                }\n            }\n        });\n    }\n    /**\n     * Reset markers to normal\n     * @private\n     */\n    function unforceSeriesMarkerOptions(series) {\n        const resetMarkerOptions = series.resetA11yMarkerOptions;\n        if (resetMarkerOptions) {\n            const originalOpacity = resetMarkerOptions.states &&\n                resetMarkerOptions.states.normal &&\n                resetMarkerOptions.states.normal.opacity;\n            // Temporarily set the old marker options to enabled in order to\n            // trigger destruction of the markers in Series.update.\n            if (series.userOptions && series.userOptions.marker) {\n                series.userOptions.marker.enabled = true;\n            }\n            series.update({\n                marker: {\n                    enabled: resetMarkerOptions.enabled,\n                    states: {\n                        normal: { opacity: originalOpacity }\n                    }\n                }\n            });\n        }\n    }\n    /**\n     * Reset markers if series is boosted and had forced markers (#17320).\n     * @private\n     */\n    function seriesOnRenderCanvas() {\n        if (this.boosted && this.a11yMarkersForced) {\n            ForcedMarkers_merge(true, this.options, {\n                marker: {\n                    enabled: false\n                }\n            });\n            delete this.a11yMarkersForced;\n        }\n    }\n})(ForcedMarkersComposition || (ForcedMarkersComposition = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const ForcedMarkers = (ForcedMarkersComposition);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Point\"],\"commonjs\":[\"highcharts\",\"Point\"],\"commonjs2\":[\"highcharts\",\"Point\"],\"root\":[\"Highcharts\",\"Point\"]}\nvar highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_ = __webpack_require__(260);\nvar highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default = /*#__PURE__*/__webpack_require__.n(highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_);\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Series\"],\"commonjs\":[\"highcharts\",\"Series\"],\"commonjs2\":[\"highcharts\",\"Series\"],\"root\":[\"Highcharts\",\"Series\"]}\nvar highcharts_Series_commonjs_highcharts_Series_commonjs2_highcharts_Series_root_Highcharts_Series_ = __webpack_require__(820);\nvar highcharts_Series_commonjs_highcharts_Series_commonjs2_highcharts_Series_root_Highcharts_Series_default = /*#__PURE__*/__webpack_require__.n(highcharts_Series_commonjs_highcharts_Series_commonjs2_highcharts_Series_root_Highcharts_Series_);\n;// ./code/es-modules/Accessibility/Components/SeriesComponent/SeriesKeyboardNavigation.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Handle keyboard navigation for series.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\n\nconst { seriesTypes: SeriesKeyboardNavigation_seriesTypes } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default());\n\nconst { doc: SeriesKeyboardNavigation_doc } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { defined: SeriesKeyboardNavigation_defined, fireEvent: SeriesKeyboardNavigation_fireEvent } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\nconst { getPointFromXY: SeriesKeyboardNavigation_getPointFromXY, getSeriesFromName: SeriesKeyboardNavigation_getSeriesFromName, scrollAxisToPoint: SeriesKeyboardNavigation_scrollAxisToPoint } = Utils_ChartUtilities;\n/* *\n *\n *  Functions\n *\n * */\n/* eslint-disable valid-jsdoc */\n/**\n * Get the index of a point in a series. This is needed when using e.g. data\n * grouping.\n *\n * @private\n * @function getPointIndex\n * @param {Highcharts.AccessibilityPoint} point\n * The point to find index of.\n * @return {number|undefined}\n * The index in the series.points array of the point.\n */\nfunction getPointIndex(point) {\n    const index = point.index, points = point.series.points;\n    let i = points.length;\n    if (points[index] !== point) {\n        while (i--) {\n            if (points[i] === point) {\n                return i;\n            }\n        }\n    }\n    else {\n        return index;\n    }\n}\n/**\n * Determine if series navigation should be skipped\n * @private\n */\nfunction isSkipSeries(series) {\n    const a11yOptions = series.chart.options.accessibility, seriesNavOptions = a11yOptions.keyboardNavigation.seriesNavigation, seriesA11yOptions = series.options.accessibility || {}, seriesKbdNavOptions = seriesA11yOptions.keyboardNavigation;\n    return seriesKbdNavOptions && seriesKbdNavOptions.enabled === false ||\n        seriesA11yOptions.enabled === false ||\n        series.options.enableMouseTracking === false || // #8440\n        !series.visible ||\n        // Skip all points in a series where pointNavigationEnabledThreshold is\n        // reached\n        (seriesNavOptions.pointNavigationEnabledThreshold &&\n            +seriesNavOptions.pointNavigationEnabledThreshold <=\n                series.points.length);\n}\n/**\n * Determine if navigation for a point should be skipped\n * @private\n */\nfunction isSkipPoint(point) {\n    const a11yOptions = point.series.chart.options.accessibility;\n    const pointA11yDisabled = (point.options.accessibility &&\n        point.options.accessibility.enabled === false);\n    return point.isNull &&\n        a11yOptions.keyboardNavigation.seriesNavigation.skipNullPoints ||\n        point.visible === false ||\n        point.isInside === false ||\n        pointA11yDisabled ||\n        isSkipSeries(point.series);\n}\n/**\n * Get the first point that is not a skip point in this series.\n * @private\n */\nfunction getFirstValidPointInSeries(series) {\n    const points = series.points || [], len = points.length;\n    for (let i = 0; i < len; ++i) {\n        if (!isSkipPoint(points[i])) {\n            return points[i];\n        }\n    }\n    return null;\n}\n/**\n * Get the first point that is not a skip point in this chart.\n * @private\n */\nfunction getFirstValidPointInChart(chart) {\n    const series = chart.series || [], len = series.length;\n    for (let i = 0; i < len; ++i) {\n        if (!isSkipSeries(series[i])) {\n            const point = getFirstValidPointInSeries(series[i]);\n            if (point) {\n                return point;\n            }\n        }\n    }\n    return null;\n}\n/**\n * @private\n */\nfunction highlightLastValidPointInChart(chart) {\n    const numSeries = chart.series.length;\n    let i = numSeries, res = false;\n    while (i--) {\n        chart.highlightedPoint = chart.series[i].points[chart.series[i].points.length - 1];\n        // Highlight first valid point in the series will also\n        // look backwards. It always starts from currently\n        // highlighted point.\n        res = chart.series[i].highlightNextValidPoint();\n        if (res) {\n            break;\n        }\n    }\n    return res;\n}\n/**\n * After drilling down/up, we need to set focus to the first point for\n * screen readers and keyboard nav.\n * @private\n */\nfunction updateChartFocusAfterDrilling(chart) {\n    const point = getFirstValidPointInChart(chart);\n    if (point) {\n        point.highlight(false); // Do not visually highlight\n    }\n}\n/**\n * Highlight the first point in chart that is not a skip point\n * @private\n */\nfunction highlightFirstValidPointInChart(chart) {\n    delete chart.highlightedPoint;\n    const point = getFirstValidPointInChart(chart);\n    return point ? point.highlight() : false;\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * @private\n * @class\n * @name Highcharts.SeriesKeyboardNavigation\n */\nclass SeriesKeyboardNavigation {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(chart, keyCodes) {\n        this.keyCodes = keyCodes;\n        this.chart = chart;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * Init the keyboard navigation\n     */\n    init() {\n        const keyboardNavigation = this, chart = this.chart, e = this.eventProvider = new Utils_EventProvider();\n        e.addEvent((highcharts_Series_commonjs_highcharts_Series_commonjs2_highcharts_Series_root_Highcharts_Series_default()), 'destroy', function () {\n            return keyboardNavigation.onSeriesDestroy(this);\n        });\n        e.addEvent(chart, 'afterApplyDrilldown', function () {\n            updateChartFocusAfterDrilling(this);\n        });\n        e.addEvent(chart, 'drilldown', function (e) {\n            const point = e.point, series = point.series;\n            keyboardNavigation.lastDrilledDownPoint = {\n                x: point.x,\n                y: point.y,\n                seriesName: series ? series.name : ''\n            };\n        });\n        e.addEvent(chart, 'drillupall', function () {\n            setTimeout(function () {\n                keyboardNavigation.onDrillupAll();\n            }, 10);\n        });\n        // Heatmaps et al. alter z-index in setState, causing elements\n        // to lose focus\n        e.addEvent((highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default()), 'afterSetState', function () {\n            const point = this;\n            const pointEl = point.graphic && point.graphic.element;\n            const focusedElement = SeriesKeyboardNavigation_doc.activeElement;\n            // VO brings focus with it to container, causing series nav to run.\n            // If then navigating with virtual cursor, it is possible to leave\n            // keyboard nav module state on the data points and still activate\n            // proxy buttons.\n            const focusedElClassName = (focusedElement && focusedElement.getAttribute('class'));\n            const isProxyFocused = focusedElClassName &&\n                focusedElClassName.indexOf('highcharts-a11y-proxy-element') > -1;\n            if (chart.highlightedPoint === point &&\n                focusedElement !== pointEl &&\n                !isProxyFocused &&\n                pointEl &&\n                pointEl.focus) {\n                pointEl.focus();\n            }\n        });\n    }\n    /**\n     * After drillup we want to find the point that was drilled down to and\n     * highlight it.\n     * @private\n     */\n    onDrillupAll() {\n        const last = this.lastDrilledDownPoint, chart = this.chart, series = last && SeriesKeyboardNavigation_getSeriesFromName(chart, last.seriesName);\n        let point;\n        if (last && series && SeriesKeyboardNavigation_defined(last.x) && SeriesKeyboardNavigation_defined(last.y)) {\n            point = SeriesKeyboardNavigation_getPointFromXY(series, last.x, last.y);\n        }\n        point = point || getFirstValidPointInChart(chart);\n        // Container focus can be lost on drillup due to deleted elements.\n        if (chart.container) {\n            chart.container.focus();\n        }\n        if (point && point.highlight) {\n            point.highlight(false); // Do not visually highlight\n        }\n    }\n    /**\n     * @private\n     */\n    getKeyboardNavigationHandler() {\n        const keyboardNavigation = this, keys = this.keyCodes, chart = this.chart, inverted = chart.inverted;\n        return new Accessibility_KeyboardNavigationHandler(chart, {\n            keyCodeMap: [\n                [\n                    inverted ? [keys.up, keys.down] : [keys.left, keys.right],\n                    function (keyCode) {\n                        return keyboardNavigation.onKbdSideways(this, keyCode);\n                    }\n                ],\n                [\n                    inverted ? [keys.left, keys.right] : [keys.up, keys.down],\n                    function (keyCode) {\n                        return keyboardNavigation.onKbdVertical(this, keyCode);\n                    }\n                ],\n                [\n                    [keys.enter, keys.space],\n                    function (keyCode, event) {\n                        const point = chart.highlightedPoint;\n                        if (point) {\n                            const { plotLeft, plotTop } = this.chart, { plotX = 0, plotY = 0 } = point;\n                            event = {\n                                ...event,\n                                chartX: plotLeft + plotX,\n                                chartY: plotTop + plotY,\n                                point: point,\n                                target: point.graphic?.element || event.target\n                            };\n                            SeriesKeyboardNavigation_fireEvent(point.series, 'click', event);\n                            point.firePointEvent('click', event);\n                        }\n                        return this.response.success;\n                    }\n                ],\n                [\n                    [keys.home],\n                    function () {\n                        highlightFirstValidPointInChart(chart);\n                        return this.response.success;\n                    }\n                ],\n                [\n                    [keys.end],\n                    function () {\n                        highlightLastValidPointInChart(chart);\n                        return this.response.success;\n                    }\n                ],\n                [\n                    [keys.pageDown, keys.pageUp],\n                    function (keyCode) {\n                        chart.highlightAdjacentSeries(keyCode === keys.pageDown);\n                        return this.response.success;\n                    }\n                ]\n            ],\n            init: function () {\n                return keyboardNavigation.onHandlerInit(this);\n            },\n            validate: function () {\n                return !!getFirstValidPointInChart(chart);\n            },\n            terminate: function () {\n                return keyboardNavigation.onHandlerTerminate();\n            }\n        });\n    }\n    /**\n     * @private\n     * @param {Highcharts.KeyboardNavigationHandler} handler\n     * @param {number} keyCode\n     * @return {number}\n     * response\n     */\n    onKbdSideways(handler, keyCode) {\n        const keys = this.keyCodes, isNext = keyCode === keys.right || keyCode === keys.down;\n        return this.attemptHighlightAdjacentPoint(handler, isNext);\n    }\n    /**\n     * When keyboard navigation inits.\n     * @private\n     * @param {Highcharts.KeyboardNavigationHandler} handler The handler object\n     * @return {number}\n     * response\n     */\n    onHandlerInit(handler) {\n        const chart = this.chart, kbdNavOptions = chart.options.accessibility.keyboardNavigation;\n        if (kbdNavOptions.seriesNavigation.rememberPointFocus &&\n            chart.highlightedPoint) {\n            chart.highlightedPoint.highlight();\n        }\n        else {\n            highlightFirstValidPointInChart(chart);\n        }\n        return handler.response.success;\n    }\n    /**\n     * @private\n     * @param {Highcharts.KeyboardNavigationHandler} handler\n     * @param {number} keyCode\n     * @return {number}\n     * response\n     */\n    onKbdVertical(handler, keyCode) {\n        const chart = this.chart, keys = this.keyCodes, isNext = keyCode === keys.down || keyCode === keys.right, navOptions = chart.options.accessibility.keyboardNavigation\n            .seriesNavigation;\n        // Handle serialized mode, act like left/right\n        if (navOptions.mode && navOptions.mode === 'serialize') {\n            return this.attemptHighlightAdjacentPoint(handler, isNext);\n        }\n        // Normal mode, move between series\n        const highlightMethod = (chart.highlightedPoint &&\n            chart.highlightedPoint.series.keyboardMoveVertical) ?\n            'highlightAdjacentPointVertical' :\n            'highlightAdjacentSeries';\n        chart[highlightMethod](isNext);\n        return handler.response.success;\n    }\n    /**\n     * @private\n     */\n    onHandlerTerminate() {\n        const chart = this.chart, kbdNavOptions = chart.options.accessibility.keyboardNavigation;\n        if (chart.tooltip) {\n            chart.tooltip.hide(0);\n        }\n        const hoverSeries = (chart.highlightedPoint && chart.highlightedPoint.series);\n        if (hoverSeries && hoverSeries.onMouseOut) {\n            hoverSeries.onMouseOut();\n        }\n        if (chart.highlightedPoint && chart.highlightedPoint.onMouseOut) {\n            chart.highlightedPoint.onMouseOut();\n        }\n        if (!kbdNavOptions.seriesNavigation.rememberPointFocus) {\n            delete chart.highlightedPoint;\n        }\n    }\n    /**\n     * Function that attempts to highlight next/prev point. Handles wrap around.\n     * @private\n     */\n    attemptHighlightAdjacentPoint(handler, directionIsNext) {\n        const chart = this.chart, wrapAround = chart.options.accessibility.keyboardNavigation\n            .wrapAround, highlightSuccessful = chart.highlightAdjacentPoint(directionIsNext);\n        if (!highlightSuccessful) {\n            if (wrapAround && (directionIsNext ?\n                highlightFirstValidPointInChart(chart) :\n                highlightLastValidPointInChart(chart))) {\n                return handler.response.success;\n            }\n            return handler.response[directionIsNext ? 'next' : 'prev'];\n        }\n        return handler.response.success;\n    }\n    /**\n     * @private\n     */\n    onSeriesDestroy(series) {\n        const chart = this.chart, currentHighlightedPointDestroyed = chart.highlightedPoint &&\n            chart.highlightedPoint.series === series;\n        if (currentHighlightedPointDestroyed) {\n            delete chart.highlightedPoint;\n            if (chart.focusElement) {\n                chart.focusElement.removeFocusBorder();\n            }\n        }\n    }\n    /**\n     * @private\n     */\n    destroy() {\n        this.eventProvider.removeAddedEvents();\n    }\n}\n/* *\n *\n *  Class Namespace\n *\n * */\n(function (SeriesKeyboardNavigation) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Function to highlight next/previous point in chart.\n     *\n     * @private\n     * @function Highcharts.Chart#highlightAdjacentPoint\n     *\n     * @param {boolean} next\n     * Flag for the direction.\n     *\n     * @return {Highcharts.Point|boolean}\n     * Returns highlighted point on success, false on failure (no adjacent point\n     * to highlight in chosen direction).\n     */\n    function chartHighlightAdjacentPoint(next) {\n        const chart = this, series = chart.series, curPoint = chart.highlightedPoint, curPointIndex = curPoint && getPointIndex(curPoint) || 0, curPoints = curPoint && curPoint.series.points || [], lastSeries = chart.series && chart.series[chart.series.length - 1], lastPoint = lastSeries &&\n            lastSeries.points &&\n            lastSeries.points[lastSeries.points.length - 1];\n        let newSeries, newPoint;\n        // If no points, return false\n        if (!series[0] || !series[0].points) {\n            return false;\n        }\n        if (!curPoint) {\n            // No point is highlighted yet. Try first/last point depending on\n            // move direction\n            newPoint = next ? series[0].points[0] : lastPoint;\n        }\n        else {\n            // We have a highlighted point. Grab next/prev point & series.\n            newSeries = series[curPoint.series.index + (next ? 1 : -1)];\n            newPoint = curPoints[curPointIndex + (next ? 1 : -1)];\n            if (!newPoint && newSeries) {\n                // Done with this series, try next one\n                newPoint = newSeries.points[next ? 0 : newSeries.points.length - 1];\n            }\n            // If there is no adjacent point, we return false\n            if (!newPoint) {\n                return false;\n            }\n        }\n        // Recursively skip points\n        if (isSkipPoint(newPoint)) {\n            // If we skip this whole series, move to the end of the series\n            // before we recurse, just to optimize\n            newSeries = newPoint.series;\n            if (isSkipSeries(newSeries)) {\n                chart.highlightedPoint = next ?\n                    newSeries.points[newSeries.points.length - 1] :\n                    newSeries.points[0];\n            }\n            else {\n                // Otherwise, just move one point\n                chart.highlightedPoint = newPoint;\n            }\n            // Retry\n            return chart.highlightAdjacentPoint(next);\n        }\n        // There is an adjacent point, highlight it\n        return newPoint.highlight();\n    }\n    /**\n     * Highlight the closest point vertically.\n     * @private\n     */\n    function chartHighlightAdjacentPointVertical(down) {\n        const curPoint = this.highlightedPoint;\n        let minDistance = Infinity, bestPoint;\n        if (!SeriesKeyboardNavigation_defined(curPoint.plotX) || !SeriesKeyboardNavigation_defined(curPoint.plotY)) {\n            return false;\n        }\n        this.series.forEach((series) => {\n            if (isSkipSeries(series)) {\n                return;\n            }\n            series.points.forEach((point) => {\n                if (!SeriesKeyboardNavigation_defined(point.plotY) || !SeriesKeyboardNavigation_defined(point.plotX) ||\n                    point === curPoint) {\n                    return;\n                }\n                let yDistance = point.plotY - curPoint.plotY;\n                const width = Math.abs(point.plotX - curPoint.plotX), distance = Math.abs(yDistance) * Math.abs(yDistance) +\n                    width * width * 4; // Weigh horizontal distance highly\n                // Reverse distance number if axis is reversed\n                if (series.yAxis && series.yAxis.reversed) {\n                    yDistance *= -1;\n                }\n                if (yDistance <= 0 && down || yDistance >= 0 && !down ||\n                    distance < 5 || // Points in same spot => infinite loop\n                    isSkipPoint(point)) {\n                    return;\n                }\n                if (distance < minDistance) {\n                    minDistance = distance;\n                    bestPoint = point;\n                }\n            });\n        });\n        return bestPoint ? bestPoint.highlight() : false;\n    }\n    /**\n     * Highlight next/previous series in chart. Returns false if no adjacent\n     * series in the direction, otherwise returns new highlighted point.\n     * @private\n     */\n    function chartHighlightAdjacentSeries(down) {\n        const chart = this, curPoint = chart.highlightedPoint, lastSeries = chart.series && chart.series[chart.series.length - 1], lastPoint = lastSeries && lastSeries.points &&\n            lastSeries.points[lastSeries.points.length - 1];\n        let newSeries, newPoint, adjacentNewPoint;\n        // If no point is highlighted, highlight the first/last point\n        if (!chart.highlightedPoint) {\n            newSeries = down ? (chart.series && chart.series[0]) : lastSeries;\n            newPoint = down ?\n                (newSeries && newSeries.points && newSeries.points[0]) :\n                lastPoint;\n            return newPoint ? newPoint.highlight() : false;\n        }\n        newSeries = (chart.series[curPoint.series.index + (down ? -1 : 1)]);\n        if (!newSeries) {\n            return false;\n        }\n        // We have a new series in this direction, find the right point\n        // Weigh xDistance as counting much higher than Y distance\n        newPoint = getClosestPoint(curPoint, newSeries, 4);\n        if (!newPoint) {\n            return false;\n        }\n        // New series and point exists, but we might want to skip it\n        if (isSkipSeries(newSeries)) {\n            // Skip the series\n            newPoint.highlight();\n            // Try recurse\n            adjacentNewPoint = chart.highlightAdjacentSeries(down);\n            if (!adjacentNewPoint) {\n                // Recurse failed\n                curPoint.highlight();\n                return false;\n            }\n            // Recurse succeeded\n            return adjacentNewPoint;\n        }\n        // Highlight the new point or any first valid point back or forwards\n        // from it\n        newPoint.highlight();\n        return newPoint.series.highlightNextValidPoint();\n    }\n    /**\n     * @private\n     */\n    function compose(ChartClass, PointClass, SeriesClass) {\n        const chartProto = ChartClass.prototype, pointProto = PointClass.prototype, seriesProto = SeriesClass.prototype;\n        if (!chartProto.highlightAdjacentPoint) {\n            chartProto.highlightAdjacentPoint = chartHighlightAdjacentPoint;\n            chartProto.highlightAdjacentPointVertical = (chartHighlightAdjacentPointVertical);\n            chartProto.highlightAdjacentSeries = chartHighlightAdjacentSeries;\n            pointProto.highlight = pointHighlight;\n            /**\n             * Set for which series types it makes sense to move to the closest\n             * point with up/down arrows, and which series types should just\n             * move to next series.\n             * @private\n             */\n            seriesProto.keyboardMoveVertical = true;\n            [\n                'column',\n                'gantt',\n                'pie'\n            ].forEach((type) => {\n                if (SeriesKeyboardNavigation_seriesTypes[type]) {\n                    SeriesKeyboardNavigation_seriesTypes[type].prototype.keyboardMoveVertical = false;\n                }\n            });\n            seriesProto.highlightNextValidPoint = (seriesHighlightNextValidPoint);\n        }\n    }\n    SeriesKeyboardNavigation.compose = compose;\n    /**\n     * Get the point in a series that is closest (in pixel distance) to a\n     * reference point. Optionally supply weight factors for x and y directions.\n     * @private\n     */\n    function getClosestPoint(point, series, xWeight, yWeight) {\n        let minDistance = Infinity, dPoint, minIx, distance, i = series.points.length;\n        const hasUndefinedPosition = (point) => (!(SeriesKeyboardNavigation_defined(point.plotX) && SeriesKeyboardNavigation_defined(point.plotY)));\n        if (hasUndefinedPosition(point)) {\n            return;\n        }\n        while (i--) {\n            dPoint = series.points[i];\n            if (hasUndefinedPosition(dPoint)) {\n                continue;\n            }\n            distance = (point.plotX - dPoint.plotX) *\n                (point.plotX - dPoint.plotX) *\n                (xWeight || 1) +\n                (point.plotY - dPoint.plotY) *\n                    (point.plotY - dPoint.plotY) *\n                    (yWeight || 1);\n            if (distance < minDistance) {\n                minDistance = distance;\n                minIx = i;\n            }\n        }\n        return SeriesKeyboardNavigation_defined(minIx) ? series.points[minIx] : void 0;\n    }\n    /**\n     * Highlights a point (show tooltip, display hover state, focus element).\n     *\n     * @private\n     * @function Highcharts.Point#highlight\n     *\n     * @return {Highcharts.Point}\n     *         This highlighted point.\n     */\n    function pointHighlight(highlightVisually = true) {\n        const chart = this.series.chart, tooltipElement = chart.tooltip?.label?.element;\n        if (!this.isNull && highlightVisually) {\n            this.onMouseOver(); // Show the hover marker and tooltip\n        }\n        else {\n            if (chart.tooltip) {\n                chart.tooltip.hide(0);\n            }\n            // Do not call blur on the element, as it messes up the focus of the\n            // div element of the chart\n        }\n        SeriesKeyboardNavigation_scrollAxisToPoint(this);\n        // We focus only after calling onMouseOver because the state change can\n        // change z-index and mess up the element.\n        if (this.graphic) {\n            chart.setFocusToElement(this.graphic);\n            if (!highlightVisually && chart.focusElement) {\n                chart.focusElement.removeFocusBorder();\n            }\n        }\n        chart.highlightedPoint = this;\n        // Get position of the tooltip.\n        const tooltipTop = tooltipElement?.getBoundingClientRect().top;\n        if (tooltipElement && tooltipTop && tooltipTop < 0) {\n            // Calculate scroll position.\n            const scrollTop = window.scrollY, newScrollTop = scrollTop + tooltipTop;\n            // Scroll window to new position.\n            window.scrollTo({\n                behavior: 'smooth',\n                top: newScrollTop\n            });\n        }\n        return this;\n    }\n    /**\n     * Highlight first valid point in a series. Returns the point if\n     * successfully highlighted, otherwise false. If there is a highlighted\n     * point in the series, use that as starting point.\n     *\n     * @private\n     * @function Highcharts.Series#highlightNextValidPoint\n     */\n    function seriesHighlightNextValidPoint() {\n        const curPoint = this.chart.highlightedPoint, start = (curPoint && curPoint.series) === this ?\n            getPointIndex(curPoint) :\n            0, points = this.points, len = points.length;\n        if (points && len) {\n            for (let i = start; i < len; ++i) {\n                if (!isSkipPoint(points[i])) {\n                    return points[i].highlight();\n                }\n            }\n            for (let j = start; j >= 0; --j) {\n                if (!isSkipPoint(points[j])) {\n                    return points[j].highlight();\n                }\n            }\n        }\n        return false;\n    }\n})(SeriesKeyboardNavigation || (SeriesKeyboardNavigation = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const SeriesComponent_SeriesKeyboardNavigation = (SeriesKeyboardNavigation);\n\n;// ./code/es-modules/Accessibility/Components/SeriesComponent/SeriesComponent.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Accessibility component for series and points.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { hideSeriesFromAT: SeriesComponent_hideSeriesFromAT } = Utils_ChartUtilities;\n\n\n\nconst { describeSeries: SeriesComponent_describeSeries } = SeriesComponent_SeriesDescriber;\n\n/* *\n *\n *  Class\n *\n * */\n/**\n * The SeriesComponent class\n *\n * @private\n * @class\n * @name Highcharts.SeriesComponent\n */\nclass SeriesComponent extends Accessibility_AccessibilityComponent {\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * @private\n     */\n    static compose(ChartClass, PointClass, SeriesClass) {\n        SeriesComponent_NewDataAnnouncer.compose(SeriesClass);\n        ForcedMarkers.compose(SeriesClass);\n        SeriesComponent_SeriesKeyboardNavigation.compose(ChartClass, PointClass, SeriesClass);\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Init the component.\n     */\n    init() {\n        this.newDataAnnouncer = new SeriesComponent_NewDataAnnouncer(this.chart);\n        this.newDataAnnouncer.init();\n        this.keyboardNavigation = new SeriesComponent_SeriesKeyboardNavigation(this.chart, this.keyCodes);\n        this.keyboardNavigation.init();\n        this.hideTooltipFromATWhenShown();\n        this.hideSeriesLabelsFromATWhenShown();\n    }\n    /**\n     * @private\n     */\n    hideTooltipFromATWhenShown() {\n        const component = this;\n        if (this.chart.tooltip) {\n            this.addEvent(this.chart.tooltip.constructor, 'refresh', function () {\n                if (this.chart === component.chart &&\n                    this.label &&\n                    this.label.element) {\n                    this.label.element.setAttribute('aria-hidden', true);\n                }\n            });\n        }\n    }\n    /**\n     * @private\n     */\n    hideSeriesLabelsFromATWhenShown() {\n        this.addEvent(this.chart, 'afterDrawSeriesLabels', function () {\n            this.series.forEach(function (series) {\n                if (series.labelBySeries) {\n                    series.labelBySeries.attr('aria-hidden', true);\n                }\n            });\n        });\n    }\n    /**\n     * Called on chart render. It is necessary to do this for render in case\n     * markers change on zoom/pixel density.\n     */\n    onChartRender() {\n        const chart = this.chart;\n        chart.series.forEach(function (series) {\n            const shouldDescribeSeries = (series.options.accessibility &&\n                series.options.accessibility.enabled) !== false &&\n                series.visible && series.getPointsCollection().length !== 0;\n            if (shouldDescribeSeries) {\n                SeriesComponent_describeSeries(series);\n            }\n            else {\n                SeriesComponent_hideSeriesFromAT(series);\n            }\n        });\n    }\n    /**\n     * Get keyboard navigation handler for this component.\n     * @private\n     */\n    getKeyboardNavigation() {\n        return this.keyboardNavigation.getKeyboardNavigationHandler();\n    }\n    /**\n     * Remove traces\n     * @private\n     */\n    destroy() {\n        this.newDataAnnouncer.destroy();\n        this.keyboardNavigation.destroy();\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const SeriesComponent_SeriesComponent = (SeriesComponent);\n\n;// ./code/es-modules/Accessibility/Components/ZoomComponent.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Accessibility component for chart zoom.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { unhideChartElementFromAT: ZoomComponent_unhideChartElementFromAT } = Utils_ChartUtilities;\n\nconst { getFakeMouseEvent: ZoomComponent_getFakeMouseEvent } = Utils_HTMLUtilities;\n\n\nconst { attr: ZoomComponent_attr, pick: ZoomComponent_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction chartHasMapZoom(chart) {\n    return !!((chart.mapView) &&\n        chart.mapNavigation &&\n        chart.mapNavigation.navButtons.length);\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * The ZoomComponent class\n *\n * @private\n * @class\n * @name Highcharts.ZoomComponent\n */\nclass ZoomComponent extends Accessibility_AccessibilityComponent {\n    constructor() {\n        /* *\n         *\n         *  Properties\n         *\n         * */\n        super(...arguments);\n        this.focusedMapNavButtonIx = -1;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Initialize the component\n     */\n    init() {\n        const component = this, chart = this.chart;\n        this.proxyProvider.addGroup('zoom', 'div');\n        [\n            'afterShowResetZoom', 'afterApplyDrilldown', 'drillupall'\n        ].forEach((eventType) => {\n            component.addEvent(chart, eventType, function () {\n                component.updateProxyOverlays();\n            });\n        });\n    }\n    /**\n     * Called when chart is updated\n     */\n    onChartUpdate() {\n        const chart = this.chart, component = this;\n        // Make map zoom buttons accessible\n        if (chart.mapNavigation) {\n            chart.mapNavigation.navButtons.forEach((button, i) => {\n                ZoomComponent_unhideChartElementFromAT(chart, button.element);\n                component.setMapNavButtonAttrs(button.element, 'accessibility.zoom.mapZoom' + (i ? 'Out' : 'In'));\n            });\n        }\n    }\n    /**\n     * @private\n     * @param {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement} button\n     * @param {string} labelFormatKey\n     */\n    setMapNavButtonAttrs(button, labelFormatKey) {\n        const chart = this.chart, label = chart.langFormat(labelFormatKey, { chart: chart });\n        ZoomComponent_attr(button, {\n            tabindex: -1,\n            role: 'button',\n            'aria-label': label\n        });\n    }\n    /**\n     * Update the proxy overlays on every new render to ensure positions are\n     * correct.\n     */\n    onChartRender() {\n        this.updateProxyOverlays();\n    }\n    /**\n     * Update proxy overlays, recreating the buttons.\n     */\n    updateProxyOverlays() {\n        const chart = this.chart;\n        // Always start with a clean slate\n        this.proxyProvider.clearGroup('zoom');\n        if (chart.resetZoomButton) {\n            this.createZoomProxyButton(chart.resetZoomButton, 'resetZoomProxyButton', chart.langFormat('accessibility.zoom.resetZoomButton', { chart: chart }));\n        }\n        if (chart.drillUpButton &&\n            chart.breadcrumbs &&\n            chart.breadcrumbs.list) {\n            const lastBreadcrumb = chart.breadcrumbs.list[chart.breadcrumbs.list.length - 1];\n            this.createZoomProxyButton(chart.drillUpButton, 'drillUpProxyButton', chart.langFormat('accessibility.drillUpButton', {\n                chart: chart,\n                buttonText: chart.breadcrumbs.getButtonText(lastBreadcrumb)\n            }));\n        }\n    }\n    /**\n     * @private\n     * @param {Highcharts.SVGElement} buttonEl\n     * @param {string} buttonProp\n     * @param {string} label\n     */\n    createZoomProxyButton(buttonEl, buttonProp, label) {\n        this[buttonProp] = this.proxyProvider.addProxyElement('zoom', {\n            click: buttonEl\n        }, 'button', {\n            'aria-label': label,\n            tabindex: -1\n        });\n    }\n    /**\n     * Get keyboard navigation handler for map zoom.\n     * @private\n     * @return {Highcharts.KeyboardNavigationHandler} The module object\n     */\n    getMapZoomNavigation() {\n        const keys = this.keyCodes, chart = this.chart, component = this;\n        return new Accessibility_KeyboardNavigationHandler(chart, {\n            keyCodeMap: [\n                [\n                    [keys.up, keys.down, keys.left, keys.right],\n                    function (keyCode) {\n                        return component.onMapKbdArrow(this, keyCode);\n                    }\n                ],\n                [\n                    [keys.tab],\n                    function (_keyCode, e) {\n                        return component.onMapKbdTab(this, e);\n                    }\n                ],\n                [\n                    [keys.space, keys.enter],\n                    function () {\n                        return component.onMapKbdClick(this);\n                    }\n                ]\n            ],\n            validate: function () {\n                return chartHasMapZoom(chart);\n            },\n            init: function (direction) {\n                return component.onMapNavInit(direction);\n            }\n        });\n    }\n    /**\n     * Arrow key panning for maps.\n     * @private\n     * @param {Highcharts.KeyboardNavigationHandler} keyboardNavigationHandler The handler context.\n     * @param {number} keyCode Key pressed.\n     * @return {number} Response code\n     */\n    onMapKbdArrow(keyboardNavigationHandler, keyCode) {\n        const chart = this.chart, keys = this.keyCodes, target = chart.container, isY = keyCode === keys.up || keyCode === keys.down, stepDirection = (keyCode === keys.left || keyCode === keys.up) ?\n            1 : -1, granularity = 10, diff = (isY ? chart.plotHeight : chart.plotWidth) /\n            granularity * stepDirection, \n        // Randomize since same mousedown coords twice is ignored in MapView\n        r = Math.random() * 10, startPos = {\n            x: target.offsetLeft + chart.plotLeft + chart.plotWidth / 2 + r,\n            y: target.offsetTop + chart.plotTop + chart.plotHeight / 2 + r\n        }, endPos = isY ? { x: startPos.x, y: startPos.y + diff } :\n            { x: startPos.x + diff, y: startPos.y };\n        [\n            ZoomComponent_getFakeMouseEvent('mousedown', startPos),\n            ZoomComponent_getFakeMouseEvent('mousemove', endPos),\n            ZoomComponent_getFakeMouseEvent('mouseup', endPos)\n        ].forEach((e) => target.dispatchEvent(e));\n        return keyboardNavigationHandler.response.success;\n    }\n    /**\n     * @private\n     * @param {Highcharts.KeyboardNavigationHandler} keyboardNavigationHandler\n     * @param {global.KeyboardEvent} event\n     * @return {number} Response code\n     */\n    onMapKbdTab(keyboardNavigationHandler, event) {\n        const chart = this.chart;\n        const response = keyboardNavigationHandler.response;\n        const isBackwards = event.shiftKey;\n        const isMoveOutOfRange = isBackwards && !this.focusedMapNavButtonIx ||\n            !isBackwards && this.focusedMapNavButtonIx;\n        // Deselect old\n        chart.mapNavigation.navButtons[this.focusedMapNavButtonIx].setState(0);\n        if (isMoveOutOfRange) {\n            if (chart.mapView) {\n                chart.mapView.zoomBy(); // Reset zoom\n            }\n            return response[isBackwards ? 'prev' : 'next'];\n        }\n        // Select other button\n        this.focusedMapNavButtonIx += isBackwards ? -1 : 1;\n        const button = chart.mapNavigation.navButtons[this.focusedMapNavButtonIx];\n        chart.setFocusToElement(button.box, button.element);\n        button.setState(2);\n        return response.success;\n    }\n    /**\n     * Called on map button click.\n     * @private\n     * @param {Highcharts.KeyboardNavigationHandler} keyboardNavigationHandler The handler context object\n     * @return {number} Response code\n     */\n    onMapKbdClick(keyboardNavigationHandler) {\n        const el = this.chart.mapNavigation.navButtons[this.focusedMapNavButtonIx].element;\n        this.fakeClickEvent(el);\n        return keyboardNavigationHandler.response.success;\n    }\n    /**\n     * @private\n     * @param {number} direction\n     */\n    onMapNavInit(direction) {\n        const chart = this.chart, zoomIn = chart.mapNavigation.navButtons[0], zoomOut = chart.mapNavigation.navButtons[1], initialButton = direction > 0 ? zoomIn : zoomOut;\n        chart.setFocusToElement(initialButton.box, initialButton.element);\n        initialButton.setState(2);\n        this.focusedMapNavButtonIx = direction > 0 ? 0 : 1;\n    }\n    /**\n     * Get keyboard navigation handler for a simple chart button. Provide the\n     * button reference for the chart, and a function to call on click.\n     *\n     * @private\n     * @param {string} buttonProp The property on chart referencing the button.\n     * @return {Highcharts.KeyboardNavigationHandler} The module object\n     */\n    simpleButtonNavigation(buttonProp, proxyProp, onClick) {\n        const keys = this.keyCodes, component = this, chart = this.chart;\n        return new Accessibility_KeyboardNavigationHandler(chart, {\n            keyCodeMap: [\n                [\n                    [keys.tab, keys.up, keys.down, keys.left, keys.right],\n                    function (keyCode, e) {\n                        const isBackwards = (keyCode === keys.tab && e.shiftKey ||\n                            keyCode === keys.left ||\n                            keyCode === keys.up);\n                        // Arrow/tab => just move\n                        return this.response[isBackwards ? 'prev' : 'next'];\n                    }\n                ],\n                [\n                    [keys.space, keys.enter],\n                    function () {\n                        const res = onClick(this, chart);\n                        return ZoomComponent_pick(res, this.response.success);\n                    }\n                ]\n            ],\n            validate: function () {\n                const hasButton = (chart[buttonProp] &&\n                    chart[buttonProp].box &&\n                    component[proxyProp].innerElement);\n                return hasButton;\n            },\n            init: function () {\n                chart.setFocusToElement(chart[buttonProp].box, component[proxyProp].innerElement);\n            }\n        });\n    }\n    /**\n     * Get keyboard navigation handlers for this component.\n     * @return {Array<Highcharts.KeyboardNavigationHandler>}\n     *         List of module objects\n     */\n    getKeyboardNavigation() {\n        return [\n            this.simpleButtonNavigation('resetZoomButton', 'resetZoomProxyButton', function (_handler, chart) {\n                chart.zoomOut();\n            }),\n            this.simpleButtonNavigation('drillUpButton', 'drillUpProxyButton', function (handler, chart) {\n                chart.drillUp();\n                return handler.response.prev;\n            }),\n            this.getMapZoomNavigation()\n        ];\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Components_ZoomComponent = (ZoomComponent);\n\n;// ./code/es-modules/Accessibility/HighContrastMode.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Handling for Windows High Contrast Mode.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { doc: HighContrastMode_doc, isMS, win: HighContrastMode_win } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Detect WHCM in the browser.\n *\n * @function Highcharts#isHighContrastModeActive\n * @private\n * @return {boolean} Returns true if the browser is in High Contrast mode.\n */\nfunction isHighContrastModeActive() {\n    // Use media query on Edge, but not on IE\n    const isEdge = /(Edg)/.test(HighContrastMode_win.navigator.userAgent);\n    if (HighContrastMode_win.matchMedia && isEdge) {\n        return HighContrastMode_win.matchMedia('(-ms-high-contrast: active)').matches;\n    }\n    // Test BG image for IE\n    if (isMS && HighContrastMode_win.getComputedStyle) {\n        const testDiv = HighContrastMode_doc.createElement('div');\n        const imageSrc = 'data:image/gif;base64,' +\n            'R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';\n        testDiv.style.backgroundImage = `url(${imageSrc})`; // #13071\n        HighContrastMode_doc.body.appendChild(testDiv);\n        const bi = (testDiv.currentStyle ||\n            HighContrastMode_win.getComputedStyle(testDiv)).backgroundImage;\n        HighContrastMode_doc.body.removeChild(testDiv);\n        return bi === 'none';\n    }\n    // Other browsers use the forced-colors standard\n    return HighContrastMode_win.matchMedia && HighContrastMode_win.matchMedia('(forced-colors: active)').matches;\n}\n/**\n * Force high contrast theme for the chart. The default theme is defined in\n * a separate file.\n *\n * @function Highcharts#setHighContrastTheme\n * @private\n * @param {Highcharts.AccessibilityChart} chart The chart to set the theme of.\n * @return {void}\n */\nfunction setHighContrastTheme(chart) {\n    // We might want to add additional functionality here in the future for\n    // storing the old state so that we can reset the theme if HC mode is\n    // disabled. For now, the user will have to reload the page.\n    chart.highContrastModeActive = true;\n    // Apply theme to chart\n    const theme = (chart.options.accessibility.highContrastTheme);\n    chart.update(theme, false);\n    const hasCustomColors = theme.colors?.length > 1;\n    // Force series colors (plotOptions is not enough)\n    chart.series.forEach(function (s) {\n        const plotOpts = theme.plotOptions[s.type] || {};\n        const fillColor = hasCustomColors && s.colorIndex !== void 0 ?\n            theme.colors[s.colorIndex] :\n            plotOpts.color || 'window';\n        const seriesOptions = {\n            color: plotOpts.color || 'windowText',\n            colors: hasCustomColors ?\n                theme.colors : [plotOpts.color || 'windowText'],\n            borderColor: plotOpts.borderColor || 'window',\n            fillColor\n        };\n        s.update(seriesOptions, false);\n        if (s.points) {\n            // Force point colors if existing\n            s.points.forEach(function (p) {\n                if (p.options && p.options.color) {\n                    p.update({\n                        color: plotOpts.color || 'windowText',\n                        borderColor: plotOpts.borderColor || 'window'\n                    }, false);\n                }\n            });\n        }\n    });\n    // The redraw for each series and after is required for 3D pie\n    // (workaround)\n    chart.redraw();\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst whcm = {\n    isHighContrastModeActive,\n    setHighContrastTheme\n};\n/* harmony default export */ const HighContrastMode = (whcm);\n\n;// ./code/es-modules/Accessibility/HighContrastTheme.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Default theme for Windows High Contrast Mode.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nconst theme = {\n    chart: {\n        backgroundColor: 'window'\n    },\n    title: {\n        style: {\n            color: 'windowText'\n        }\n    },\n    subtitle: {\n        style: {\n            color: 'windowText'\n        }\n    },\n    colorAxis: {\n        minColor: 'windowText',\n        maxColor: 'windowText',\n        stops: [],\n        dataClasses: []\n    },\n    colors: ['windowText'],\n    xAxis: {\n        gridLineColor: 'windowText',\n        labels: {\n            style: {\n                color: 'windowText'\n            }\n        },\n        lineColor: 'windowText',\n        minorGridLineColor: 'windowText',\n        tickColor: 'windowText',\n        title: {\n            style: {\n                color: 'windowText'\n            }\n        }\n    },\n    yAxis: {\n        gridLineColor: 'windowText',\n        labels: {\n            style: {\n                color: 'windowText'\n            }\n        },\n        lineColor: 'windowText',\n        minorGridLineColor: 'windowText',\n        tickColor: 'windowText',\n        title: {\n            style: {\n                color: 'windowText'\n            }\n        }\n    },\n    tooltip: {\n        backgroundColor: 'window',\n        borderColor: 'windowText',\n        style: {\n            color: 'windowText'\n        }\n    },\n    plotOptions: {\n        series: {\n            lineColor: 'windowText',\n            fillColor: 'window',\n            borderColor: 'windowText',\n            edgeColor: 'windowText',\n            borderWidth: 1,\n            dataLabels: {\n                connectorColor: 'windowText',\n                color: 'windowText',\n                style: {\n                    color: 'windowText',\n                    textOutline: 'none'\n                }\n            },\n            marker: {\n                lineColor: 'windowText',\n                fillColor: 'windowText'\n            }\n        },\n        pie: {\n            color: 'window',\n            colors: ['window'],\n            borderColor: 'windowText',\n            borderWidth: 1\n        },\n        boxplot: {\n            fillColor: 'window'\n        },\n        candlestick: {\n            lineColor: 'windowText',\n            fillColor: 'window'\n        },\n        errorbar: {\n            fillColor: 'window'\n        }\n    },\n    legend: {\n        backgroundColor: 'window',\n        itemStyle: {\n            color: 'windowText'\n        },\n        itemHoverStyle: {\n            color: 'windowText'\n        },\n        itemHiddenStyle: {\n            color: '#555'\n        },\n        title: {\n            style: {\n                color: 'windowText'\n            }\n        }\n    },\n    credits: {\n        style: {\n            color: 'windowText'\n        }\n    },\n    drilldown: {\n        activeAxisLabelStyle: {\n            color: 'windowText'\n        },\n        activeDataLabelStyle: {\n            color: 'windowText'\n        }\n    },\n    navigation: {\n        buttonOptions: {\n            symbolStroke: 'windowText',\n            theme: {\n                fill: 'window'\n            }\n        }\n    },\n    rangeSelector: {\n        buttonTheme: {\n            fill: 'window',\n            stroke: 'windowText',\n            style: {\n                color: 'windowText'\n            },\n            states: {\n                hover: {\n                    fill: 'window',\n                    stroke: 'windowText',\n                    style: {\n                        color: 'windowText'\n                    }\n                },\n                select: {\n                    fill: '#444',\n                    stroke: 'windowText',\n                    style: {\n                        color: 'windowText'\n                    }\n                }\n            }\n        },\n        inputBoxBorderColor: 'windowText',\n        inputStyle: {\n            backgroundColor: 'window',\n            color: 'windowText'\n        },\n        labelStyle: {\n            color: 'windowText'\n        }\n    },\n    navigator: {\n        handles: {\n            backgroundColor: 'window',\n            borderColor: 'windowText'\n        },\n        outlineColor: 'windowText',\n        maskFill: 'transparent',\n        series: {\n            color: 'windowText',\n            lineColor: 'windowText'\n        },\n        xAxis: {\n            gridLineColor: 'windowText'\n        }\n    },\n    scrollbar: {\n        barBackgroundColor: '#444',\n        barBorderColor: 'windowText',\n        buttonArrowColor: 'windowText',\n        buttonBackgroundColor: 'window',\n        buttonBorderColor: 'windowText',\n        rifleColor: 'windowText',\n        trackBackgroundColor: 'window',\n        trackBorderColor: 'windowText'\n    }\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const HighContrastTheme = (theme);\n\n;// ./code/es-modules/Accessibility/Options/A11yDefaults.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Default options for accessibility.\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 * Formatter callback for the accessibility announcement.\n *\n * @callback Highcharts.AccessibilityAnnouncementFormatter\n *\n * @param {Array<Highcharts.Series>} updatedSeries\n * Array of all series that received updates. If an announcement is already\n * queued, the series that received updates for that announcement are also\n * included in this array.\n *\n * @param {Highcharts.Series} [addedSeries]\n * This is provided if {@link Highcharts.Chart#addSeries} was called, and there\n * is a new series. In that case, this argument is a reference to the new\n * series.\n *\n * @param {Highcharts.Point} [addedPoint]\n * This is provided if {@link Highcharts.Series#addPoint} was called, and there\n * is a new point. In that case, this argument is a reference to the new point.\n *\n * @return {false|string}\n * The function should return a string with the text to announce to the user.\n * Return empty string to not announce anything. Return `false` to use the\n * default announcement format.\n */\n/**\n * @interface Highcharts.PointAccessibilityOptionsObject\n */ /**\n* Provide a description of the data point, announced to screen readers.\n* @name Highcharts.PointAccessibilityOptionsObject#description\n* @type {string|undefined}\n* @requires modules/accessibility\n* @since 7.1.0\n*/ /**\n* Enable or disable exposing the point to assistive technology\n* @name Highcharts.PointAccessibilityOptionsObject#enabled\n* @type {boolean|undefined}\n* @requires modules/accessibility\n* @since 9.0.1\n*/\n/* *\n * @interface Highcharts.PointOptionsObject in parts/Point.ts\n */ /**\n* @name Highcharts.PointOptionsObject#accessibility\n* @type {Highcharts.PointAccessibilityOptionsObject|undefined}\n* @requires modules/accessibility\n* @since 7.1.0\n*/\n/**\n * @callback Highcharts.ScreenReaderClickCallbackFunction\n *\n * @param {global.MouseEvent} evt\n *        Mouse click event\n *\n * @return {void}\n */\n/**\n * Creates a formatted string for the screen reader module.\n *\n * @callback Highcharts.ScreenReaderFormatterCallbackFunction<T>\n *\n * @param {T} context\n *        Context to format\n *\n * @return {string}\n *         Formatted string for the screen reader module.\n */\nconst Options = {\n    /**\n     * Options for configuring accessibility for the chart. Requires the\n     * [accessibility module](https://code.highcharts.com/modules/accessibility.js)\n     * to be loaded. For a description of the module and information\n     * on its features, see\n     * [Highcharts Accessibility](https://www.highcharts.com/docs/accessibility/accessibility-module).\n     *\n     * @since        5.0.0\n     * @requires     modules/accessibility\n     * @optionparent accessibility\n     */\n    accessibility: {\n        /**\n         * Enable accessibility functionality for the chart. For more\n         * information on how to include these features, and why this is\n         * recommended, see [Highcharts Accessibility](https://www.highcharts.com/docs/accessibility/accessibility-module).\n         *\n         * Highcharts will by default emit a warning to the console if\n         * the [accessibility module](https://code.highcharts.com/modules/accessibility.js)\n         * is not loaded. Setting this option to `false` will override\n         * and silence the warning.\n         *\n         * Once the module is loaded, setting this option to `false`\n         * will disable the module for this chart.\n         *\n         * @since 5.0.0\n         */\n        enabled: true,\n        /**\n         * Accessibility options for the screen reader information sections\n         * added before and after the chart.\n         *\n         * @since 8.0.0\n         */\n        screenReaderSection: {\n            /**\n             * Function to run upon clicking the \"View as Data Table\" link in\n             * the screen reader region.\n             *\n             * By default Highcharts will insert and set focus to a data table\n             * representation of the chart.\n             *\n             * @type      {Highcharts.ScreenReaderClickCallbackFunction}\n             * @since 8.0.0\n             * @apioption accessibility.screenReaderSection.onViewDataTableClick\n             */\n            /**\n             * Function to run upon clicking the \"Play as sound\" button in\n             * the screen reader region.\n             *\n             * By default Highcharts will call the `chart.sonify` function.\n             *\n             * @type      {Highcharts.ScreenReaderClickCallbackFunction}\n             * @since 8.0.1\n             * @apioption accessibility.screenReaderSection.onPlayAsSoundClick\n             */\n            /**\n             * A formatter function to create the HTML contents of the hidden\n             * screen reader information region before the chart. Receives one\n             * argument, `chart`, referring to the chart object. Should return a\n             * string with the HTML content of the region. By default this\n             * returns an automatic description of the chart based on\n             * [beforeChartFormat](#accessibility.screenReaderSection.beforeChartFormat).\n             *\n             * @type      {Highcharts.ScreenReaderFormatterCallbackFunction<Highcharts.Chart>}\n             * @since 8.0.0\n             * @apioption accessibility.screenReaderSection.beforeChartFormatter\n             */\n            /**\n             * Format for the screen reader information region before the chart.\n             * Supported HTML tags are `<h1-6>`, `<p>`, `<div>`, `<a>`, `<ul>`,\n             * `<ol>`, `<li>`, and `<button>`. Attributes are not supported,\n             * except for id on `<div>`, `<a>`, and `<button>`. Id is required\n             * on `<a>` and `<button>` in the format `<tag id=\"abcd\">`. Numbers,\n             * lower- and uppercase letters, \"-\" and \"#\" are valid characters in\n             * IDs.\n             *\n             * The headingTagName is an auto-detected heading (h1-h6) that\n             * corresponds to the heading level below the previous heading in\n             * the DOM.\n             *\n             * Set to empty string to remove the region altogether.\n             *\n             * @since 8.0.0\n             */\n            beforeChartFormat: '<{headingTagName}>{chartTitle}</{headingTagName}>' +\n                '<div>{typeDescription}</div>' +\n                '<div>{chartSubtitle}</div>' +\n                '<div>{chartLongdesc}</div>' +\n                '<div>{playAsSoundButton}</div>' +\n                '<div>{viewTableButton}</div>' +\n                '<div>{xAxisDescription}</div>' +\n                '<div>{yAxisDescription}</div>' +\n                '<div>{annotationsTitle}{annotationsList}</div>',\n            /**\n             * A formatter function to create the HTML contents of the hidden\n             * screen reader information region after the chart. Analogous to\n             * [beforeChartFormatter](#accessibility.screenReaderSection.beforeChartFormatter).\n             *\n             * @type      {Highcharts.ScreenReaderFormatterCallbackFunction<Highcharts.Chart>}\n             * @since 8.0.0\n             * @apioption accessibility.screenReaderSection.afterChartFormatter\n             */\n            /**\n             * Format for the screen reader information region after the chart.\n             * Analogous to [beforeChartFormat](#accessibility.screenReaderSection.beforeChartFormat).\n             *\n             * @since 8.0.0\n             */\n            afterChartFormat: '{endOfChartMarker}',\n            /**\n             * Date format to use to describe range of datetime axes.\n             *\n             * For an overview of the replacement codes, see\n             * [dateFormat](/class-reference/Highcharts.Time#dateFormat).\n             *\n             * @see [point.dateFormat](#accessibility.point.dateFormat)\n             *\n             * @since 8.0.0\n             */\n            axisRangeDateFormat: '%Y-%m-%d %H:%M:%S'\n        },\n        /**\n         * Accessibility options global to all data series. Individual series\n         * can also have specific [accessibility options](#plotOptions.series.accessibility)\n         * set.\n         *\n         * @since 8.0.0\n         */\n        series: {\n            /**\n             * Formatter function to use instead of the default for series\n             * descriptions. Receives one argument, `series`, referring to the\n             * series to describe. Should return a string with the description\n             * of the series for a screen reader user. If `false` is returned,\n             * the default formatter will be used for that series.\n             *\n             * @see [series.descriptionFormat](#accessibility.series.descriptionFormat)\n             * @see [series.description](#plotOptions.series.description)\n             *\n             * @type      {Highcharts.ScreenReaderFormatterCallbackFunction<Highcharts.Series>}\n             * @since 8.0.0\n             * @apioption accessibility.series.descriptionFormatter\n             */\n            /**\n             * Format to use for describing the data series group to assistive\n             * technology - including screen readers.\n             *\n             * The series context and its subproperties are available under the\n             * variable `{series}`, for example `{series.name}` for the series\n             * name, and `{series.points.length}` for the number of data points.\n             *\n             * The chart context and its subproperties are available under the\n             * variable `{chart}`, for example `{chart.series.length}` for the\n             * number of series in the chart.\n             *\n             * `{seriesDescription}` refers to the automatic description of the\n             * series type and number of points added by Highcharts by default.\n             * `{authorDescription}` refers to the description added in\n             * [series.description](#plotOptions.series.description) if one is\n             * present. `{axisDescription}` refers to the description added if\n             * the chart has multiple X or Y axes.\n             *\n             * Note that if [series.descriptionFormatter](#accessibility.series.descriptionFormatter)\n             * is declared it will take precedence, and this option will be\n             * overridden.\n             *\n             * @sample highcharts/accessibility/advanced-accessible\n             *  Accessible low-medium-high chart\n             *\n             * @type      {string}\n             * @since 10.1.0\n             */\n            descriptionFormat: '{seriesDescription}{authorDescription}{axisDescription}',\n            /**\n             * Whether or not to add series descriptions to charts with a single\n             * series.\n             *\n             * @since 8.0.0\n             */\n            describeSingleSeries: false,\n            /**\n             * When a series contains more points than this, we no longer expose\n             * information about individual points to screen readers.\n             * Note that the keyboard navigation remains functional, but points\n             * won't have accessible descriptions unless handled separately.\n             *\n             * Set to `false` to disable.\n             *\n             * @type  {boolean|number}\n             * @since 8.0.0\n             */\n            pointDescriptionEnabledThreshold: 200\n        },\n        /**\n         * Options for descriptions of individual data points.\n         *\n         * @since 8.0.0\n         */\n        point: {\n            /**\n             * Date format to use for points on datetime axes when describing\n             * them to screen reader users.\n             *\n             * Defaults to the same format as in tooltip.\n             *\n             * For an overview of the replacement codes, see\n             * [dateFormat](/class-reference/Highcharts.Time#dateFormat).\n             *\n             * @see [dateFormatter](#accessibility.point.dateFormatter)\n             *\n             * @type      {string}\n             * @since 8.0.0\n             * @apioption accessibility.point.dateFormat\n             */\n            /**\n             * Formatter function to determine the date/time format used with\n             * points on datetime axes when describing them to screen reader\n             * users. Receives one argument, `point`, referring to the point\n             * to describe. Should return a date format string compatible with\n             * [dateFormat](/class-reference/Highcharts.Time#dateFormat).\n             *\n             * @see [dateFormat](#accessibility.point.dateFormat)\n             *\n             * @type      {Highcharts.ScreenReaderFormatterCallbackFunction<Highcharts.Point>}\n             * @since 8.0.0\n             * @apioption accessibility.point.dateFormatter\n             */\n            /**\n             * Prefix to add to the values in the point descriptions. Uses\n             * [tooltip.valuePrefix](#tooltip.valuePrefix) if not defined.\n             *\n             * @type        {string}\n             * @since 8.0.0\n             * @apioption   accessibility.point.valuePrefix\n             */\n            /**\n             * Suffix to add to the values in the point descriptions. Uses\n             * [tooltip.valueSuffix](#tooltip.valueSuffix) if not defined.\n             *\n             * @type        {string}\n             * @since 8.0.0\n             * @apioption   accessibility.point.valueSuffix\n             */\n            /**\n             * Decimals to use for the values in the point descriptions. Uses\n             * [tooltip.valueDecimals](#tooltip.valueDecimals) if not defined.\n             *\n             * @type        {number}\n             * @since 8.0.0\n             * @apioption   accessibility.point.valueDecimals\n             */\n            /**\n             * A [format string](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting)\n             * to use instead of the default for point descriptions.\n             *\n             * The context of the format string is the point instance.\n             *\n             * As opposed to [accessibility.point.valueDescriptionFormat](#accessibility.point.valueDescriptionFormat),\n             * this option replaces the whole description.\n             *\n             * @type      {string}\n             * @since 11.1.0\n             * @sample highcharts/demo/advanced-accessible\n             *      Description format\n             * @apioption accessibility.point.descriptionFormat\n             */\n            /**\n             * Formatter function to use instead of the default for point\n             * descriptions.\n             *\n             * Receives one argument, `point`, referring to the point to\n             * describe. Should return a string with the description of the\n             * point for a screen reader user. If `false` is returned, the\n             * default formatter will be used for that point.\n             *\n             * Note: Prefer using [accessibility.point.valueDescriptionFormat](#accessibility.point.valueDescriptionFormat)\n             * instead if possible, as default functionality such as describing\n             * annotations will be preserved.\n             *\n             * @see [accessibility.point.valueDescriptionFormat](#accessibility.point.valueDescriptionFormat)\n             * @see [point.accessibility.description](#series.line.data.accessibility.description)\n             *\n             * @type      {Highcharts.ScreenReaderFormatterCallbackFunction<Highcharts.Point>}\n             * @since 8.0.0\n             * @apioption accessibility.point.descriptionFormatter\n             */\n            /**\n             * Format to use for describing the values of data points\n             * to assistive technology - including screen readers.\n             * The point context is available as `{point}`.\n             *\n             * Other available context variables include `{index}`, `{value}`, and `{xDescription}`.\n             *\n             * Additionally, the series name, annotation info, and\n             * description added in `point.accessibility.description`\n             * is added by default if relevant. To override this, use the\n             * [accessibility.point.descriptionFormatter](#accessibility.point.descriptionFormatter)\n             * option.\n             *\n             * @see [point.accessibility.description](#series.line.data.accessibility.description)\n             * @see [accessibility.point.descriptionFormatter](#accessibility.point.descriptionFormatter)\n             *\n             * @type      {string}\n             * @since 8.0.1\n             */\n            valueDescriptionFormat: '{xDescription}{separator}{value}.',\n            /**\n             * Whether or not to describe points with the value `null` to\n             * assistive technology, such as screen readers.\n             *\n             * @sample {highmaps} maps/demo/all-areas-as-null\n             *         Accessible map with null points\n             *\n             * @type      {boolean}\n             * @since 10.1.0\n             */\n            describeNull: true\n        },\n        /**\n         * Amount of landmarks/regions to create for screen reader users. More\n         * landmarks can make navigation with screen readers easier, but can\n         * be distracting if there are lots of charts on the page. Three modes\n         * are available:\n         *  - `all`: Adds regions for all series, legend, information\n         *      region.\n         *  - `one`: Adds a single landmark per chart.\n         *  - `disabled`: No landmarks are added.\n         *\n         * @since 7.1.0\n         * @validvalue [\"all\", \"one\", \"disabled\"]\n         */\n        landmarkVerbosity: 'all',\n        /**\n         * Link the chart to an HTML element describing the contents of the\n         * chart.\n         *\n         * It is always recommended to describe charts using visible text, to\n         * improve SEO as well as accessibility for users with disabilities.\n         * This option lets an HTML element with a description be linked to the\n         * chart, so that screen reader users can connect the two.\n         *\n         * By setting this option to a string, Highcharts runs the string as an\n         * HTML selector query on the entire document. If there is only a single\n         * match, this element is linked to the chart. The content of the linked\n         * element will be included in the chart description for screen reader\n         * users.\n         *\n         * By default, the chart looks for an adjacent sibling element with the\n         * `highcharts-description` class.\n         *\n         * The feature can be disabled by setting the option to an empty string,\n         * or overridden by providing the\n         * [accessibility.description](#accessibility.description) option.\n         * Alternatively, the HTML element to link can be passed in directly as\n         * an HTML node.\n         *\n         * If you need the description to be part of the exported image,\n         * consider using the [caption](#caption) feature.\n         *\n         * If you need the description to be hidden visually, use the\n         * [accessibility.description](#accessibility.description) option.\n         *\n         * @see [caption](#caption)\n         * @see [description](#accessibility.description)\n         * @see [typeDescription](#accessibility.typeDescription)\n         *\n         * @sample highcharts/accessibility/accessible-line\n         *         Accessible line chart\n         *\n         * @type  {string|Highcharts.HTMLDOMElement}\n         * @since 8.0.0\n         */\n        linkedDescription: '*[data-highcharts-chart=\"{index}\"] + .highcharts-description', // eslint-disable-line\n        /**\n         * A hook for adding custom components to the accessibility module.\n         * Should be an object mapping component names to instances of classes\n         * inheriting from the Highcharts.AccessibilityComponent base class.\n         * Remember to add the component to the\n         * [keyboardNavigation.order](#accessibility.keyboardNavigation.order)\n         * for the keyboard navigation to be usable.\n         *\n         * @sample highcharts/accessibility/custom-component\n         *         Custom accessibility component\n         *\n         * @type      {*}\n         * @since     7.1.0\n         * @apioption accessibility.customComponents\n         */\n        /**\n         * Theme to apply to the chart when Windows High Contrast Mode is\n         * detected. By default, a high contrast theme matching the high\n         * contrast system colors is used.\n         *\n         * @type      {*}\n         * @since     7.1.3\n         * @apioption accessibility.highContrastTheme\n         */\n        /**\n         * Controls how [highContrastTheme](#accessibility.highContrastTheme)\n         * is applied.\n         *\n         * The default option is `auto`, which applies the high contrast theme\n         * the user's system has a high contrast theme active.\n         *\n         * @since 11.4.0\n         */\n        highContrastMode: 'auto',\n        /**\n         * A text description of the chart.\n         *\n         * **Note: Prefer using [linkedDescription](#accessibility.linkedDescription)\n         * or [caption](#caption.text) instead.**\n         *\n         * If the Accessibility module is loaded, this option is included by\n         * default as a long description of the chart in the hidden screen\n         * reader information region.\n         *\n         * Note: Since Highcharts now supports captions and linked descriptions,\n         * it is preferred to define the description using those methods, as a\n         * visible caption/description benefits all users. If the\n         * `accessibility.description` option is defined, the linked description\n         * is ignored, and the caption is hidden from screen reader users.\n         *\n         * @see [linkedDescription](#accessibility.linkedDescription)\n         * @see [caption](#caption)\n         * @see [typeDescription](#accessibility.typeDescription)\n         *\n         * @type      {string}\n         * @since     5.0.0\n         * @apioption accessibility.description\n         */\n        /**\n         * A text description of the chart type.\n         *\n         * If the Accessibility module is loaded, this will be included in the\n         * description of the chart in the screen reader information region.\n         *\n         * Highcharts will by default attempt to guess the chart type, but for\n         * more complex charts it is recommended to specify this property for\n         * clarity.\n         *\n         * @type      {string}\n         * @since     5.0.0\n         * @apioption accessibility.typeDescription\n         */\n        /**\n         * Options for keyboard navigation.\n         *\n         * @declare Highcharts.KeyboardNavigationOptionsObject\n         * @since   5.0.0\n         */\n        keyboardNavigation: {\n            /**\n             * Enable keyboard navigation for the chart.\n             *\n             * @since 5.0.0\n             */\n            enabled: true,\n            /**\n             * Options for the focus border drawn around elements while\n             * navigating through them.\n             *\n             * @sample highcharts/accessibility/custom-focus\n             *         Custom focus ring\n             *\n             * @declare Highcharts.KeyboardNavigationFocusBorderOptionsObject\n             * @since   6.0.3\n             */\n            focusBorder: {\n                /**\n                 * Enable/disable focus border for chart.\n                 *\n                 * @since 6.0.3\n                 */\n                enabled: true,\n                /**\n                 * Hide the browser's default focus indicator.\n                 *\n                 * @since 6.0.4\n                 */\n                hideBrowserFocusOutline: true,\n                /**\n                 * Style options for the focus border drawn around elements\n                 * while navigating through them. Note that some browsers in\n                 * addition draw their own borders for focused elements. These\n                 * automatic borders cannot be styled by Highcharts.\n                 *\n                 * In styled mode, the border is given the\n                 * `.highcharts-focus-border` class.\n                 *\n                 * @type    {Highcharts.CSSObject}\n                 * @since   6.0.3\n                 */\n                style: {\n                    /** @internal */\n                    color: \"#334eff\" /* Palette.highlightColor80 */,\n                    /** @internal */\n                    lineWidth: 2,\n                    /** @internal */\n                    borderRadius: 3\n                },\n                /**\n                 * Focus border margin around the elements.\n                 *\n                 * @since 6.0.3\n                 */\n                margin: 2\n            },\n            /**\n             * Order of tab navigation in the chart. Determines which elements\n             * are tabbed to first. Available elements are: `series`, `zoom`,\n             * `rangeSelector`, `navigator`, `chartMenu`, `legend` and `container`.\n             * In addition, any custom components can be added here. Adding\n             * `container` first in order will make the keyboard focus stop on\n             * the chart container first, requiring the user to tab again to\n             * enter the chart.\n             *\n             * @type  {Array<string>}\n             * @since 7.1.0\n             */\n            order: [\n                'series', 'zoom', 'rangeSelector',\n                'navigator', 'legend', 'chartMenu'\n            ],\n            /**\n             * Whether or not to wrap around when reaching the end of arrow-key\n             * navigation for an element in the chart.\n             * @since 7.1.0\n             */\n            wrapAround: true,\n            /**\n             * Options for the keyboard navigation of data points and series.\n             *\n             * @declare Highcharts.KeyboardNavigationSeriesNavigationOptionsObject\n             * @since 8.0.0\n             */\n            seriesNavigation: {\n                /**\n                 * Set the keyboard navigation mode for the chart. Can be\n                 * \"normal\" or \"serialize\". In normal mode, left/right arrow\n                 * keys move between points in a series, while up/down arrow\n                 * keys move between series. Up/down navigation acts\n                 * intelligently to figure out which series makes sense to move\n                 * to from any given point.\n                 *\n                 * In \"serialize\" mode, points are instead navigated as a single\n                 * list. Left/right behaves as in \"normal\" mode. Up/down arrow\n                 * keys will behave like left/right. This can be useful for\n                 * unifying navigation behavior with/without screen readers\n                 * enabled.\n                 *\n                 * @type       {string}\n                 * @default    normal\n                 * @since 8.0.0\n                 * @validvalue [\"normal\", \"serialize\"]\n                 * @apioption  accessibility.keyboardNavigation.seriesNavigation.mode\n                 */\n                /**\n                 * Skip null points when navigating through points with the\n                 * keyboard.\n                 *\n                 * @since 8.0.0\n                 */\n                skipNullPoints: true,\n                /**\n                 * When a series contains more points than this, we no longer\n                 * allow keyboard navigation for it.\n                 *\n                 * Set to `false` to disable.\n                 *\n                 * @type  {boolean|number}\n                 * @since 8.0.0\n                 */\n                pointNavigationEnabledThreshold: false,\n                /**\n                 * Remember which point was focused even after navigating away\n                 * from the series, so that when navigating back to the series\n                 * you start at the last focused point.\n                 *\n                 * @type  {boolean}\n                 * @since 10.1.0\n                 */\n                rememberPointFocus: false\n            }\n        },\n        /**\n         * Options for announcing new data to screen reader users. Useful\n         * for dynamic data applications and drilldown.\n         *\n         * Keep in mind that frequent announcements will not be useful to\n         * users, as they won't have time to explore the new data. For these\n         * applications, consider making snapshots of the data accessible, and\n         * do the announcements in batches.\n         *\n         * @declare Highcharts.AccessibilityAnnounceNewDataOptionsObject\n         * @since   7.1.0\n         */\n        announceNewData: {\n            /**\n             * Optional formatter callback for the announcement. Receives\n             * up to three arguments. The first argument is always an array\n             * of all series that received updates. If an announcement is\n             * already queued, the series that received updates for that\n             * announcement are also included in this array. The second\n             * argument is provided if `chart.addSeries` was called, and\n             * there is a new series. In that case, this argument is a\n             * reference to the new series. The third argument, similarly,\n             * is provided if `series.addPoint` was called, and there is a\n             * new point. In that case, this argument is a reference to the\n             * new point.\n             *\n             * The function should return a string with the text to announce\n             * to the user. Return empty string to not announce anything.\n             * Return `false` to use the default announcement format.\n             *\n             * @sample highcharts/accessibility/custom-dynamic\n             *         High priority live alerts\n             *\n             * @type      {Highcharts.AccessibilityAnnouncementFormatter}\n             * @apioption accessibility.announceNewData.announcementFormatter\n             */\n            /**\n             * Enable announcing new data to screen reader users\n             * @sample highcharts/accessibility/accessible-dynamic\n             *         Dynamic data accessible\n             */\n            enabled: false,\n            /**\n             * Minimum interval between announcements in milliseconds. If\n             * new data arrives before this amount of time has passed, it is\n             * queued for announcement. If another new data event happens\n             * while an announcement is queued, the queued announcement is\n             * dropped, and the latest announcement is queued instead. Set\n             * to 0 to allow all announcements, but be warned that frequent\n             * announcements are disturbing to users.\n             */\n            minAnnounceInterval: 5000,\n            /**\n             * Choose whether or not the announcements should interrupt the\n             * screen reader. If not enabled, the user will be notified once\n             * idle. It is recommended not to enable this setting unless\n             * there is a specific reason to do so.\n             */\n            interruptUser: false\n        }\n    },\n    /**\n     * Accessibility options for a data point.\n     *\n     * @declare   Highcharts.PointAccessibilityOptionsObject\n     * @since     7.1.0\n     * @apioption series.line.data.accessibility\n     */\n    /**\n     * Provide a description of the data point, announced to screen readers.\n     *\n     * @type      {string}\n     * @since     7.1.0\n     * @apioption series.line.data.accessibility.description\n     */\n    /**\n     * Set to false to disable accessibility functionality for a specific point.\n     * The point will not be included in keyboard navigation, and will not be\n     * exposed to assistive technology.\n     *\n     * @type      {boolean}\n     * @since 9.0.1\n     * @apioption series.line.data.accessibility.enabled\n     */\n    /**\n     * Accessibility options for a series.\n     *\n     * @declare    Highcharts.SeriesAccessibilityOptionsObject\n     * @since      7.1.0\n     * @requires   modules/accessibility\n     * @apioption  plotOptions.series.accessibility\n     */\n    /**\n     * Enable/disable accessibility functionality for a specific series.\n     *\n     * @type       {boolean}\n     * @since      7.1.0\n     * @apioption  plotOptions.series.accessibility.enabled\n     */\n    /**\n     * Provide a description of the series, announced to screen readers.\n     *\n     * @type       {string}\n     * @since      7.1.0\n     * @apioption  plotOptions.series.accessibility.description\n     */\n    /**\n     * Format to use for describing the data series group to assistive\n     * technology - including screen readers.\n     *\n     * @see [series.descriptionFormat](#accessibility.series.descriptionFormat)\n     * @type       {string}\n     * @since 11.0.0\n     * @apioption  plotOptions.series.accessibility.descriptionFormat\n     */\n    /**\n     * Expose only the series element to screen readers, not its points.\n     *\n     * @type       {boolean}\n     * @since      7.1.0\n     * @apioption  plotOptions.series.accessibility.exposeAsGroupOnly\n     */\n    /**\n     * Point accessibility options for a series.\n     *\n     * @extends    accessibility.point\n     * @since 9.3.0\n     * @requires   modules/accessibility\n     * @apioption  plotOptions.series.accessibility.point\n     */\n    /**\n     * Formatter function to use instead of the default for point\n     * descriptions. Same as `accessibility.point.descriptionFormatter`, but\n     * applies to a series instead of the whole chart.\n     *\n     * Note: Prefer using [accessibility.point.valueDescriptionFormat](#plotOptions.series.accessibility.point.valueDescriptionFormat)\n     * instead if possible, as default functionality such as describing\n     * annotations will be preserved.\n     *\n     * @see [accessibility.point.valueDescriptionFormat](#plotOptions.series.accessibility.point.valueDescriptionFormat)\n     * @see [point.accessibility.description](#series.line.data.accessibility.description)\n     * @see [accessibility.point.descriptionFormatter](#accessibility.point.descriptionFormatter)\n     *\n     * @type      {Highcharts.ScreenReaderFormatterCallbackFunction<Highcharts.Point>}\n     * @since 9.3.0\n     * @apioption plotOptions.series.accessibility.point.descriptionFormatter\n     */\n    /**\n     * Keyboard navigation for a series\n     *\n     * @declare    Highcharts.SeriesAccessibilityKeyboardNavigationOptionsObject\n     * @since      7.1.0\n     * @apioption  plotOptions.series.accessibility.keyboardNavigation\n     */\n    /**\n     * Enable/disable keyboard navigation support for a specific series.\n     *\n     * @type       {boolean}\n     * @since      7.1.0\n     * @apioption  plotOptions.series.accessibility.keyboardNavigation.enabled\n     */\n    /**\n     * Accessibility options for an annotation label.\n     *\n     * @declare    Highcharts.AnnotationLabelAccessibilityOptionsObject\n     * @since 8.0.1\n     * @requires   modules/accessibility\n     * @apioption  annotations.labelOptions.accessibility\n     */\n    /**\n     * Description of an annotation label for screen readers and other assistive\n     * technology.\n     *\n     * @type       {string}\n     * @since 8.0.1\n     * @apioption  annotations.labelOptions.accessibility.description\n     */\n    /**\n     * Accessibility options for an axis. Requires the accessibility module.\n     *\n     * @declare    Highcharts.AxisAccessibilityOptionsObject\n     * @since      7.1.0\n     * @requires   modules/accessibility\n     * @apioption  xAxis.accessibility\n     */\n    /**\n     * Enable axis accessibility features, including axis information in the\n     * screen reader information region. If this is disabled on the xAxis, the\n     * x values are not exposed to screen readers for the individual data points\n     * by default.\n     *\n     * @type       {boolean}\n     * @since      7.1.0\n     * @apioption  xAxis.accessibility.enabled\n     */\n    /**\n     * Description for an axis to expose to screen reader users.\n     *\n     * @type       {string}\n     * @since      7.1.0\n     * @apioption  xAxis.accessibility.description\n     */\n    /**\n     * Range description for an axis. Overrides the default range description.\n     * Set to empty to disable range description for this axis.\n     *\n     * @type       {string}\n     * @since      7.1.0\n     * @apioption  xAxis.accessibility.rangeDescription\n     */\n    /**\n     * @optionparent legend\n     */\n    legend: {\n        /**\n         * Accessibility options for the legend. Requires the Accessibility\n         * module.\n         *\n         * @since     7.1.0\n         * @requires  modules/accessibility\n         */\n        accessibility: {\n            /**\n             * Enable accessibility support for the legend.\n             *\n             * @since  7.1.0\n             */\n            enabled: true,\n            /**\n             * Options for keyboard navigation for the legend.\n             *\n             * @since     7.1.0\n             * @requires  modules/accessibility\n             */\n            keyboardNavigation: {\n                /**\n                 * Enable keyboard navigation for the legend.\n                 *\n                 * @see [accessibility.keyboardNavigation](#accessibility.keyboardNavigation.enabled)\n                 *\n                 * @since  7.1.0\n                 */\n                enabled: true\n            }\n        }\n    },\n    /**\n     * @optionparent exporting\n     */\n    exporting: {\n        /**\n         * Accessibility options for the exporting menu. Requires the\n         * Accessibility module.\n         *\n         * @since    7.1.0\n         * @requires modules/accessibility\n         */\n        accessibility: {\n            /**\n             * Enable accessibility support for the export menu.\n             *\n             * @since 7.1.0\n             */\n            enabled: true\n        }\n    },\n    /**\n     * @optionparent navigator\n     */\n    navigator: {\n        /**\n         * Accessibility options for the navigator. Requires the\n         * Accessibility module.\n         *\n         * @since 11.2.0\n         * @requires modules/accessibility\n         */\n        accessibility: {\n            /**\n             * Enable accessibility support for the navigator.\n             *\n             * @since 11.2.0\n             */\n            enabled: true\n        }\n    }\n};\n/* harmony default export */ const A11yDefaults = (Options);\n\n;// ./code/es-modules/Accessibility/Options/LangDefaults.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Default lang/i18n options for accessibility.\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 * */\nconst langOptions = {\n    /**\n     * Configure the accessibility strings in the chart. Requires the\n     * [accessibility module](https://code.highcharts.com/modules/accessibility.js)\n     * to be loaded. For a description of the module and information on its\n     * features, see\n     * [Highcharts Accessibility](https://www.highcharts.com/docs/chart-concepts/accessibility).\n     *\n     * The lang options use [Format Strings](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#format-strings)\n     * with variables that are replaced at run time. These variables should be\n     * used when available, to avoid duplicating text that is defined elsewhere.\n     *\n     * For more dynamic control over the accessibility functionality, see\n     * [accessibility.point.descriptionFormatter](#accessibility.point.descriptionFormatter),\n     * [accessibility.series.descriptionFormatter](#accessibility.series.descriptionFormatter),\n     * and\n     * [accessibility.screenReaderSection.beforeChartFormatter](#accessibility.screenReaderSection.beforeChartFormatter).\n     *\n     * @since        6.0.6\n     * @optionparent lang.accessibility\n     */\n    accessibility: {\n        /**\n         * @deprecated 10.2.1\n         * @type       {string}\n         * @apioption  lang.accessibility.resetZoomButton\n         */\n        /**\n         * Default title of the chart for assistive technology, for charts\n         * without a chart title.\n         */\n        defaultChartTitle: 'Chart',\n        /**\n         * Accessible label for the chart container HTML element.\n         * `{title}` refers to the chart title.\n         */\n        chartContainerLabel: '{title}. Highcharts interactive chart.',\n        /**\n         * Accessible label for the chart SVG element.\n         * `{chartTitle}` refers to the chart title.\n         */\n        svgContainerLabel: 'Interactive chart',\n        /**\n         * Accessible label for the drill-up button.\n         * `{buttonText}` refers to the visual text on the button.\n         */\n        drillUpButton: '{buttonText}',\n        /**\n         * Accessible label for the chart credits.\n         * `{creditsStr}` refers to the visual text in the credits.\n         */\n        credits: 'Chart credits: {creditsStr}',\n        /**\n         * Thousands separator to use when formatting numbers for screen\n         * readers. Note that many screen readers will not handle space as a\n         * thousands separator, and will consider \"11 700\" as two numbers.\n         *\n         * Set to `null` to use the separator defined in\n         * [lang.thousandsSep](lang.thousandsSep).\n         *\n         * @since 7.1.0\n         */\n        thousandsSep: ',',\n        /**\n         * Title element text for the chart SVG element. Leave this\n         * empty to disable adding the title element. Browsers will display\n         * this content when hovering over elements in the chart. Assistive\n         * technology may use this element to label the chart.\n         *\n         * @since 6.0.8\n         */\n        svgContainerTitle: '',\n        /**\n         * Set a label on the container wrapping the SVG.\n         *\n         * @see [chartContainerLabel](#lang.accessibility.chartContainerLabel)\n         *\n         * @since 8.0.0\n         */\n        graphicContainerLabel: '',\n        /**\n         * Language options for the screen reader information sections added\n         * before and after the charts.\n         *\n         * @since 8.0.0\n         */\n        screenReaderSection: {\n            beforeRegionLabel: '',\n            afterRegionLabel: '',\n            /**\n             * Language options for annotation descriptions.\n             *\n             * @since 8.0.1\n             */\n            annotations: {\n                heading: 'Chart annotations summary',\n                descriptionSinglePoint: ('{annotationText}. Related to {annotationPoint}'),\n                descriptionMultiplePoints: ('{annotationText}. Related to {annotationPoint}' +\n                    '{#each additionalAnnotationPoints}' +\n                    ', also related to {this}' +\n                    '{/each}'),\n                descriptionNoPoints: '{annotationText}'\n            },\n            /**\n             * Label for the end of the chart. Announced by screen readers.\n             *\n             * @since 8.0.0\n             */\n            endOfChartMarker: 'End of interactive chart.'\n        },\n        /**\n         * Language options for sonification.\n         *\n         * @since 8.0.1\n         */\n        sonification: {\n            playAsSoundButtonText: 'Play as sound, {chartTitle}',\n            playAsSoundClickAnnouncement: 'Play'\n        },\n        /**\n         * Language options for accessibility of the legend.\n         *\n         * @since 8.0.0\n         */\n        legend: {\n            /**\n             * Accessible label for the legend, for charts where there is no\n             * legend title defined.\n             */\n            legendLabelNoTitle: 'Toggle series visibility, {chartTitle}',\n            /**\n             * Accessible label for the legend, for charts where there is a\n             * legend title defined. `{legendTitle}` refers to the visual text\n             * in the legend title.\n             */\n            legendLabel: 'Chart legend: {legendTitle}',\n            /**\n             * Accessible label for individual legend items. `{itemName}` refers\n             * to the visual text in the legend for that item.\n             */\n            legendItem: 'Show {itemName}'\n        },\n        /**\n         * Chart and map zoom accessibility language options.\n         *\n         * @since 8.0.0\n         */\n        zoom: {\n            mapZoomIn: 'Zoom chart',\n            mapZoomOut: 'Zoom out chart',\n            resetZoomButton: 'Reset zoom'\n        },\n        /**\n         * Range selector language options for accessibility.\n         *\n         * @since 8.0.0\n         */\n        rangeSelector: {\n            dropdownLabel: '{rangeTitle}',\n            minInputLabel: 'Select start date.',\n            maxInputLabel: 'Select end date.',\n            clickButtonAnnouncement: 'Viewing {axisRangeDescription}'\n        },\n        /**\n         * Navigator language options for accessibility.\n         *\n         * @since 11.2.0\n         */\n        navigator: {\n            /**\n             * Label for the navigator handles.\n             *\n             * Receives `handleIx` and `chart` as context.\n             * `handleIx` refers to the index of the navigator handle.\n             */\n            handleLabel: '{#eq handleIx 0}Start, percent{else}End, percent{/eq}',\n            /**\n             * Label for the navigator region.\n             *\n             * Receives `chart` as context.\n             */\n            groupLabel: 'Axis zoom',\n            /**\n             * Announcement for assistive technology when navigator values\n             * are changed.\n             *\n             * Receives `axisRangeDescription` and `chart` as context.\n             * `axisRangeDescription` corresponds to the range description\n             * defined in [lang.accessibility.axis](#lang.accessibility.axis)\n             */\n            changeAnnouncement: '{axisRangeDescription}'\n        },\n        /**\n         * Accessibility language options for the data table.\n         *\n         * @since 8.0.0\n         */\n        table: {\n            viewAsDataTableButtonText: 'View as data table, {chartTitle}',\n            tableSummary: 'Table representation of chart.'\n        },\n        /**\n         * Default announcement for new data in charts. If addPoint or\n         * addSeries is used, and only one series/point is added, the\n         * `newPointAnnounce` and `newSeriesAnnounce` strings are used.\n         * The `...Single` versions will be used if there is only one chart\n         * on the page, and the `...Multiple` versions will be used if there\n         * are multiple charts on the page. For all other new data events,\n         * the `newDataAnnounce` string will be used.\n         *\n         * @since 7.1.0\n         */\n        announceNewData: {\n            newDataAnnounce: 'Updated data for chart {chartTitle}',\n            newSeriesAnnounceSingle: 'New data series: {seriesDesc}',\n            newPointAnnounceSingle: 'New data point: {pointDesc}',\n            newSeriesAnnounceMultiple: 'New data series in chart {chartTitle}: {seriesDesc}',\n            newPointAnnounceMultiple: 'New data point in chart {chartTitle}: {pointDesc}'\n        },\n        /**\n         * Descriptions of lesser known series types. The relevant\n         * description is added to the screen reader information region\n         * when these series types are used.\n         *\n         * @since 6.0.6\n         */\n        seriesTypeDescriptions: {\n            boxplot: 'Box plot charts are typically used to display ' +\n                'groups of statistical data. Each data point in the ' +\n                'chart can have up to 5 values: minimum, lower quartile, ' +\n                'median, upper quartile, and maximum.',\n            arearange: 'Arearange charts are line charts displaying a ' +\n                'range between a lower and higher value for each point.',\n            areasplinerange: 'These charts are line charts displaying a ' +\n                'range between a lower and higher value for each point.',\n            bubble: 'Bubble charts are scatter charts where each data ' +\n                'point also has a size value.',\n            columnrange: 'Columnrange charts are column charts ' +\n                'displaying a range between a lower and higher value for ' +\n                'each point.',\n            errorbar: 'Errorbar series are used to display the ' +\n                'variability of the data.',\n            funnel: 'Funnel charts are used to display reduction of data ' +\n                'in stages.',\n            pyramid: 'Pyramid charts consist of a single pyramid with ' +\n                'item heights corresponding to each point value.',\n            waterfall: 'A waterfall chart is a column chart where each ' +\n                'column contributes towards a total end value.'\n        },\n        /**\n         * Chart type description strings. This is added to the chart\n         * information region.\n         *\n         * If there is only a single series type used in the chart, we use\n         * the format string for the series type, or default if missing.\n         * There is one format string for cases where there is only a single\n         * series in the chart, and one for multiple series of the same\n         * type.\n         *\n         * @since 6.0.6\n         */\n        chartTypes: {\n            /* eslint-disable max-len */\n            emptyChart: 'Empty chart',\n            mapTypeDescription: 'Map of {mapTitle} with {numSeries} data series.',\n            unknownMap: 'Map of unspecified region with {numSeries} data series.',\n            combinationChart: 'Combination chart with {numSeries} data series.',\n            defaultSingle: 'Chart with {numPoints} data ' +\n                '{#eq numPoints 1}point{else}points{/eq}.',\n            defaultMultiple: 'Chart with {numSeries} data series.',\n            splineSingle: 'Line chart with {numPoints} data ' +\n                '{#eq numPoints 1}point{else}points{/eq}.',\n            splineMultiple: 'Line chart with {numSeries} lines.',\n            lineSingle: 'Line chart with {numPoints} data ' +\n                '{#eq numPoints 1}point{else}points{/eq}.',\n            lineMultiple: 'Line chart with {numSeries} lines.',\n            columnSingle: 'Bar chart with {numPoints} ' +\n                '{#eq numPoints 1}bar{else}bars{/eq}.',\n            columnMultiple: 'Bar chart with {numSeries} data series.',\n            barSingle: 'Bar chart with {numPoints} ' +\n                '{#eq numPoints 1}bar{else}bars{/eq}.',\n            barMultiple: 'Bar chart with {numSeries} data series.',\n            pieSingle: 'Pie chart with {numPoints} ' +\n                '{#eq numPoints 1}slice{else}slices{/eq}.',\n            pieMultiple: 'Pie chart with {numSeries} pies.',\n            scatterSingle: 'Scatter chart with {numPoints} ' +\n                '{#eq numPoints 1}point{else}points{/eq}.',\n            scatterMultiple: 'Scatter chart with {numSeries} data series.',\n            boxplotSingle: 'Boxplot with {numPoints} ' +\n                '{#eq numPoints 1}box{else}boxes{/eq}.',\n            boxplotMultiple: 'Boxplot with {numSeries} data series.',\n            bubbleSingle: 'Bubble chart with {numPoints} ' +\n                '{#eq numPoints 1}bubbles{else}bubble{/eq}.',\n            bubbleMultiple: 'Bubble chart with {numSeries} data series.'\n        }, /* eslint-enable max-len */\n        /**\n         * Axis description format strings.\n         *\n         * @since 6.0.6\n         */\n        axis: {\n            /* eslint-disable max-len */\n            xAxisDescriptionSingular: 'The chart has 1 X axis displaying {names[0]}. {ranges[0]}',\n            xAxisDescriptionPlural: 'The chart has {numAxes} X axes displaying {#each names}{#unless @first},{/unless}{#if @last} and{/if} {this}{/each}.',\n            yAxisDescriptionSingular: 'The chart has 1 Y axis displaying {names[0]}. {ranges[0]}',\n            yAxisDescriptionPlural: 'The chart has {numAxes} Y axes displaying {#each names}{#unless @first},{/unless}{#if @last} and{/if} {this}{/each}.',\n            timeRangeDays: 'Data range: {range} days.',\n            timeRangeHours: 'Data range: {range} hours.',\n            timeRangeMinutes: 'Data range: {range} minutes.',\n            timeRangeSeconds: 'Data range: {range} seconds.',\n            rangeFromTo: 'Data ranges from {rangeFrom} to {rangeTo}.',\n            rangeCategories: 'Data range: {numCategories} categories.'\n        }, /* eslint-enable max-len */\n        /**\n         * Exporting menu format strings for accessibility module.\n         *\n         * @since 6.0.6\n         */\n        exporting: {\n            chartMenuLabel: 'Chart menu',\n            menuButtonLabel: 'View chart menu, {chartTitle}'\n        },\n        /**\n         * Lang configuration for different series types. For more dynamic\n         * control over the series element descriptions, see\n         * [accessibility.seriesDescriptionFormatter](#accessibility.seriesDescriptionFormatter).\n         *\n         * @since 6.0.6\n         */\n        series: {\n            /**\n             * Lang configuration for the series main summary. Each series\n             * type has two modes:\n             *\n             * 1. This series type is the only series type used in the\n             *    chart\n             *\n             * 2. This is a combination chart with multiple series types\n             *\n             * If a definition does not exist for the specific series type\n             * and mode, the 'default' lang definitions are used.\n             *\n             * Chart and its subproperties can be accessed with the `{chart}` variable.\n             * The series and its subproperties can be accessed with the `{series}` variable.\n             *\n             * The series index (starting from 1) can be accessed with the `{seriesNumber}` variable.\n             *\n             * @since 6.0.6\n             */\n            summary: {\n                /* eslint-disable max-len */\n                'default': '{series.name}, series {seriesNumber} of {chart.series.length} with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.',\n                defaultCombination: '{series.name}, series {seriesNumber} of {chart.series.length} with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.',\n                line: '{series.name}, line {seriesNumber} of {chart.series.length} with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.',\n                lineCombination: '{series.name}, series {seriesNumber} of {chart.series.length}. Line with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.',\n                spline: '{series.name}, line {seriesNumber} of {chart.series.length} with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.',\n                splineCombination: '{series.name}, series {seriesNumber} of {chart.series.length}. Line with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.',\n                column: '{series.name}, bar series {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}bar{else}bars{/eq}.',\n                columnCombination: '{series.name}, series {seriesNumber} of {chart.series.length}. Bar series with {series.points.length} {#eq series.points.length 1}bar{else}bars{/eq}.',\n                bar: '{series.name}, bar series {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}bar{else}bars{/eq}.',\n                barCombination: '{series.name}, series {seriesNumber} of {chart.series.length}. Bar series with {series.points.length} {#eq series.points.length 1}bar{else}bars{/eq}.',\n                pie: '{series.name}, pie {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}slice{else}slices{/eq}.',\n                pieCombination: '{series.name}, series {seriesNumber} of {chart.series.length}. Pie with {series.points.length} {#eq series.points.length 1}slice{else}slices{/eq}.',\n                scatter: '{series.name}, scatter plot {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}point{else}points{/eq}.',\n                scatterCombination: '{series.name}, series {seriesNumber} of {chart.series.length}, scatter plot with {series.points.length} {#eq series.points.length 1}point{else}points{/eq}.',\n                boxplot: '{series.name}, boxplot {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}box{else}boxes{/eq}.',\n                boxplotCombination: '{series.name}, series {seriesNumber} of {chart.series.length}. Boxplot with {series.points.length} {#eq series.points.length 1}box{else}boxes{/eq}.',\n                bubble: '{series.name}, bubble series {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}bubble{else}bubbles{/eq}.',\n                bubbleCombination: '{series.name}, series {seriesNumber} of {chart.series.length}. Bubble series with {series.points.length} {#eq series.points.length 1}bubble{else}bubbles{/eq}.',\n                map: '{series.name}, map {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}area{else}areas{/eq}.',\n                mapCombination: '{series.name}, series {seriesNumber} of {chart.series.length}. Map with {series.points.length} {#eq series.points.length 1}area{else}areas{/eq}.',\n                mapline: '{series.name}, line {seriesNumber} of {chart.series.length} with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.',\n                maplineCombination: '{series.name}, series {seriesNumber} of {chart.series.length}. Line with {series.points.length} data {#eq series.points.length 1}point{else}points{/eq}.',\n                mapbubble: '{series.name}, bubble series {seriesNumber} of {chart.series.length} with {series.points.length} {#eq series.points.length 1}bubble{else}bubbles{/eq}.',\n                mapbubbleCombination: '{series.name}, series {seriesNumber} of {chart.series.length}. Bubble series with {series.points.length} {#eq series.points.length 1}bubble{else}bubbles{/eq}.'\n            }, /* eslint-enable max-len */\n            /**\n             * User supplied description text. This is added in the point\n             * comment description by default if present.\n             *\n             * `{description}` refers to the value given in\n             * [point.accessibility.description](#series.line.data.accessibility.description).\n             *\n             * @since 6.0.6\n             */\n            description: '{description}',\n            /**\n             * X-axis description for series if there are multiple xAxes in\n             * the chart.\n             *\n             * @since 6.0.6\n             */\n            xAxisDescription: 'X axis, {name}',\n            /**\n             * Y-axis description for series if there are multiple yAxes in\n             * the chart.\n             *\n             * @since 6.0.6\n             */\n            yAxisDescription: 'Y axis, {name}',\n            /**\n             * Description for the value of null points.\n             *\n             * @since 8.0.0\n             */\n            nullPointValue: 'No value',\n            /**\n             * Description for annotations on a point, as it is made available\n             * to assistive technology.\n             *\n             * @since 8.0.1\n             */\n            pointAnnotationsDescription: '{#each annotations}' +\n                'Annotation: {this}{/each}'\n        }\n    }\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const LangDefaults = (langOptions);\n\n;// ./code/es-modules/Accessibility/Options/DeprecatedOptions.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Default options for accessibility.\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n/* eslint-disable max-len */\n/*\n *  List of deprecated options:\n *\n *  chart.description -> accessibility.description\n *  chart.typeDescription -> accessibility.typeDescription\n *  series.description -> series.accessibility.description\n *  series.exposeElementToA11y -> series.accessibility.exposeAsGroupOnly\n *  series.pointDescriptionFormatter ->\n *      series.accessibility.pointDescriptionFormatter\n *  series.accessibility.pointDescriptionFormatter ->\n *      series.accessibility.point.descriptionFormatter\n *  series.skipKeyboardNavigation ->\n *      series.accessibility.keyboardNavigation.enabled\n *  point.description -> point.accessibility.description !!!! WARNING: No longer deprecated and handled, removed for HC8.\n *  axis.description -> axis.accessibility.description\n *\n *  accessibility.pointDateFormat -> accessibility.point.dateFormat\n *  accessibility.addTableShortcut -> Handled by screenReaderSection.beforeChartFormat\n *  accessibility.pointDateFormatter -> accessibility.point.dateFormatter\n *  accessibility.pointDescriptionFormatter -> accessibility.point.descriptionFormatter\n *  accessibility.pointDescriptionThreshold -> accessibility.series.pointDescriptionEnabledThreshold\n *  accessibility.pointNavigationThreshold -> accessibility.keyboardNavigation.seriesNavigation.pointNavigationEnabledThreshold\n *  accessibility.pointValueDecimals -> accessibility.point.valueDecimals\n *  accessibility.pointValuePrefix -> accessibility.point.valuePrefix\n *  accessibility.pointValueSuffix -> accessibility.point.valueSuffix\n *  accessibility.screenReaderSectionFormatter -> accessibility.screenReaderSection.beforeChartFormatter\n *  accessibility.describeSingleSeries -> accessibility.series.describeSingleSeries\n *  accessibility.seriesDescriptionFormatter -> accessibility.series.descriptionFormatter\n *  accessibility.onTableAnchorClick -> accessibility.screenReaderSection.onViewDataTableClick\n *  accessibility.axisRangeDateFormat -> accessibility.screenReaderSection.axisRangeDateFormat\n *  accessibility.keyboardNavigation.skipNullPoints -> accessibility.keyboardNavigation.seriesNavigation.skipNullPoints\n *  accessibility.keyboardNavigation.mode -> accessibility.keyboardNavigation.seriesNavigation.mode\n *\n *  lang.accessibility.chartHeading -> no longer used, remove\n *  lang.accessibility.legendItem -> lang.accessibility.legend.legendItem\n *  lang.accessibility.legendLabel -> lang.accessibility.legend.legendLabel\n *  lang.accessibility.mapZoomIn -> lang.accessibility.zoom.mapZoomIn\n *  lang.accessibility.mapZoomOut -> lang.accessibility.zoom.mapZoomOut\n *  lang.accessibility.resetZoomButton -> lang.accessibility.zoom.resetZoomButton\n *  lang.accessibility.screenReaderRegionLabel -> lang.accessibility.screenReaderSection.beforeRegionLabel\n *  lang.accessibility.rangeSelectorButton -> lang.accessibility.rangeSelector.buttonText\n *  lang.accessibility.rangeSelectorMaxInput -> lang.accessibility.rangeSelector.maxInputLabel\n *  lang.accessibility.rangeSelectorMinInput -> lang.accessibility.rangeSelector.minInputLabel\n *  lang.accessibility.svgContainerEnd -> lang.accessibility.screenReaderSection.endOfChartMarker\n *  lang.accessibility.viewAsDataTable -> lang.accessibility.table.viewAsDataTableButtonText\n *  lang.accessibility.tableSummary -> lang.accessibility.table.tableSummary\n *\n */\n/* eslint-enable max-len */\n\n\nconst { error, pick: DeprecatedOptions_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/* eslint-disable valid-jsdoc */\n/**\n * Set a new option on a root prop, where the option is defined as an array of\n * suboptions.\n * @private\n * @param root\n * @param {Array<string>} optionAsArray\n * @param {*} val\n * @return {void}\n */\nfunction traverseSetOption(root, optionAsArray, val) {\n    let opt = root, prop, i = 0;\n    for (; i < optionAsArray.length - 1; ++i) {\n        prop = optionAsArray[i];\n        opt = opt[prop] = DeprecatedOptions_pick(opt[prop], {});\n    }\n    opt[optionAsArray[optionAsArray.length - 1]] = val;\n}\n/**\n * If we have a clear root option node for old and new options and a mapping\n * between, we can use this generic function for the copy and warn logic.\n */\nfunction deprecateFromOptionsMap(chart, rootOldAsArray, rootNewAsArray, mapToNewOptions) {\n    /**\n     * @private\n     */\n    function getChildProp(root, propAsArray) {\n        return propAsArray.reduce(function (acc, cur) {\n            return acc[cur];\n        }, root);\n    }\n    const rootOld = getChildProp(chart.options, rootOldAsArray), rootNew = getChildProp(chart.options, rootNewAsArray);\n    Object.keys(mapToNewOptions).forEach(function (oldOptionKey) {\n        const val = rootOld[oldOptionKey];\n        if (typeof val !== 'undefined') {\n            traverseSetOption(rootNew, mapToNewOptions[oldOptionKey], val);\n            error(32, false, chart, {\n                [rootOldAsArray.join('.') + '.' + oldOptionKey]: (rootNewAsArray.join('.') + '.' +\n                    mapToNewOptions[oldOptionKey].join('.'))\n            });\n        }\n    });\n}\n/**\n * @private\n */\nfunction copyDeprecatedChartOptions(chart) {\n    const chartOptions = chart.options.chart, a11yOptions = chart.options.accessibility || {};\n    ['description', 'typeDescription'].forEach(function (prop) {\n        if (chartOptions[prop]) {\n            a11yOptions[prop] = chartOptions[prop];\n            error(32, false, chart, { [`chart.${prop}`]: `use accessibility.${prop}` });\n        }\n    });\n}\n/**\n * @private\n */\nfunction copyDeprecatedAxisOptions(chart) {\n    chart.axes.forEach(function (axis) {\n        const opts = axis.options;\n        if (opts && opts.description) {\n            opts.accessibility = opts.accessibility || {};\n            opts.accessibility.description = opts.description;\n            error(32, false, chart, {\n                'axis.description': 'use axis.accessibility.description'\n            });\n        }\n    });\n}\n/**\n * @private\n */\nfunction copyDeprecatedSeriesOptions(chart) {\n    // Map of deprecated series options. New options are defined as\n    // arrays of paths under series.options.\n    const oldToNewSeriesOptions = {\n        description: ['accessibility', 'description'],\n        exposeElementToA11y: ['accessibility', 'exposeAsGroupOnly'],\n        pointDescriptionFormatter: [\n            'accessibility', 'point', 'descriptionFormatter'\n        ],\n        skipKeyboardNavigation: [\n            'accessibility', 'keyboardNavigation', 'enabled'\n        ],\n        'accessibility.pointDescriptionFormatter': [\n            'accessibility', 'point', 'descriptionFormatter'\n        ]\n    };\n    chart.series.forEach(function (series) {\n        // Handle series wide options\n        Object.keys(oldToNewSeriesOptions).forEach(function (oldOption) {\n            let optionVal = series.options[oldOption];\n            // Special case\n            if (oldOption === 'accessibility.pointDescriptionFormatter') {\n                optionVal = (series.options.accessibility &&\n                    series.options.accessibility\n                        .pointDescriptionFormatter);\n            }\n            if (typeof optionVal !== 'undefined') {\n                // Set the new option\n                traverseSetOption(series.options, oldToNewSeriesOptions[oldOption], \n                // Note that skipKeyboardNavigation has inverted option\n                // value, since we set enabled rather than disabled\n                oldOption === 'skipKeyboardNavigation' ?\n                    !optionVal : optionVal);\n                error(32, false, chart, {\n                    [`series.${oldOption}`]: ('series.' +\n                        oldToNewSeriesOptions[oldOption].join('.'))\n                });\n            }\n        });\n    });\n}\n/**\n * @private\n */\nfunction copyDeprecatedTopLevelAccessibilityOptions(chart) {\n    deprecateFromOptionsMap(chart, ['accessibility'], ['accessibility'], {\n        pointDateFormat: ['point', 'dateFormat'],\n        pointDateFormatter: ['point', 'dateFormatter'],\n        pointDescriptionFormatter: ['point', 'descriptionFormatter'],\n        pointDescriptionThreshold: [\n            'series',\n            'pointDescriptionEnabledThreshold'\n        ],\n        pointNavigationThreshold: [\n            'keyboardNavigation', 'seriesNavigation',\n            'pointNavigationEnabledThreshold'\n        ],\n        pointValueDecimals: ['point', 'valueDecimals'],\n        pointValuePrefix: ['point', 'valuePrefix'],\n        pointValueSuffix: ['point', 'valueSuffix'],\n        screenReaderSectionFormatter: [\n            'screenReaderSection',\n            'beforeChartFormatter'\n        ],\n        describeSingleSeries: ['series', 'describeSingleSeries'],\n        seriesDescriptionFormatter: ['series', 'descriptionFormatter'],\n        onTableAnchorClick: ['screenReaderSection', 'onViewDataTableClick'],\n        axisRangeDateFormat: ['screenReaderSection', 'axisRangeDateFormat']\n    });\n}\n/**\n * @private\n */\nfunction copyDeprecatedKeyboardNavigationOptions(chart) {\n    deprecateFromOptionsMap(chart, ['accessibility', 'keyboardNavigation'], ['accessibility', 'keyboardNavigation', 'seriesNavigation'], {\n        skipNullPoints: ['skipNullPoints'],\n        mode: ['mode']\n    });\n}\n/**\n * @private\n */\nfunction copyDeprecatedLangOptions(chart) {\n    deprecateFromOptionsMap(chart, ['lang', 'accessibility'], ['lang', 'accessibility'], {\n        legendItem: ['legend', 'legendItem'],\n        legendLabel: ['legend', 'legendLabel'],\n        mapZoomIn: ['zoom', 'mapZoomIn'],\n        mapZoomOut: ['zoom', 'mapZoomOut'],\n        resetZoomButton: ['zoom', 'resetZoomButton'],\n        screenReaderRegionLabel: [\n            'screenReaderSection',\n            'beforeRegionLabel'\n        ],\n        rangeSelectorButton: ['rangeSelector', 'buttonText'],\n        rangeSelectorMaxInput: ['rangeSelector', 'maxInputLabel'],\n        rangeSelectorMinInput: ['rangeSelector', 'minInputLabel'],\n        svgContainerEnd: ['screenReaderSection', 'endOfChartMarker'],\n        viewAsDataTable: ['table', 'viewAsDataTableButtonText'],\n        tableSummary: ['table', 'tableSummary']\n    });\n}\n/**\n * Copy options that are deprecated over to new options. Logs warnings to\n * console if deprecated options are used.\n *\n * @private\n */\nfunction copyDeprecatedOptions(chart) {\n    copyDeprecatedChartOptions(chart);\n    copyDeprecatedAxisOptions(chart);\n    if (chart.series) {\n        copyDeprecatedSeriesOptions(chart);\n    }\n    copyDeprecatedTopLevelAccessibilityOptions(chart);\n    copyDeprecatedKeyboardNavigationOptions(chart);\n    copyDeprecatedLangOptions(chart);\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const DeprecatedOptions = (copyDeprecatedOptions);\n\n;// ./code/es-modules/Accessibility/Accessibility.js\n/* *\n *\n *  (c) 2009-2024 Øystein Moseng\n *\n *  Accessibility module for Highcharts\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { defaultOptions: Accessibility_defaultOptions } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { doc: Accessibility_doc } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: Accessibility_addEvent, extend: Accessibility_extend, fireEvent: Accessibility_fireEvent, merge: Accessibility_merge } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { removeElement: Accessibility_removeElement } = Utils_HTMLUtilities;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* *\n *\n *  Class\n *\n * */\n/**\n * The Accessibility class\n *\n * @private\n * @requires modules/accessibility\n *\n * @class\n * @name Highcharts.Accessibility\n *\n * @param {Highcharts.Chart} chart\n * Chart object\n */\nclass Accessibility {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(chart) {\n        this.init(chart);\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Initialize the accessibility class\n     * @private\n     * @param {Highcharts.Chart} chart\n     *        Chart object\n     */\n    init(chart) {\n        this.chart = chart;\n        // Abort on old browsers\n        if (!Accessibility_doc.addEventListener) {\n            this.zombie = true;\n            this.components = {};\n            chart.renderTo.setAttribute('aria-hidden', true);\n            return;\n        }\n        // Copy over any deprecated options that are used. We could do this on\n        // every update, but it is probably not needed.\n        DeprecatedOptions(chart);\n        this.proxyProvider = new Accessibility_ProxyProvider(this.chart);\n        this.initComponents();\n        this.keyboardNavigation = new Accessibility_KeyboardNavigation(chart, this.components);\n    }\n    /**\n     * @private\n     */\n    initComponents() {\n        const chart = this.chart;\n        const proxyProvider = this.proxyProvider;\n        const a11yOptions = chart.options.accessibility;\n        this.components = {\n            container: new Components_ContainerComponent(),\n            infoRegions: new Components_InfoRegionsComponent(),\n            legend: new Components_LegendComponent(),\n            chartMenu: new Components_MenuComponent(),\n            rangeSelector: new Components_RangeSelectorComponent(),\n            series: new SeriesComponent_SeriesComponent(),\n            zoom: new Components_ZoomComponent(),\n            navigator: new Components_NavigatorComponent()\n        };\n        if (a11yOptions.customComponents) {\n            Accessibility_extend(this.components, a11yOptions.customComponents);\n        }\n        const components = this.components;\n        this.getComponentOrder().forEach(function (componentName) {\n            components[componentName].initBase(chart, proxyProvider);\n            components[componentName].init();\n        });\n    }\n    /**\n     * Get order to update components in.\n     * @private\n     */\n    getComponentOrder() {\n        if (!this.components) {\n            return []; // For zombie accessibility object on old browsers\n        }\n        if (!this.components.series) {\n            return Object.keys(this.components);\n        }\n        const componentsExceptSeries = Object.keys(this.components)\n            .filter((c) => c !== 'series');\n        // Update series first, so that other components can read accessibility\n        // info on points.\n        return ['series'].concat(componentsExceptSeries);\n    }\n    /**\n     * Update all components.\n     */\n    update() {\n        const components = this.components, chart = this.chart, a11yOptions = chart.options.accessibility;\n        Accessibility_fireEvent(chart, 'beforeA11yUpdate');\n        // Update the chart type list as this is used by multiple modules\n        chart.types = this.getChartTypes();\n        // Update proxies. We don't update proxy positions since most likely we\n        // need to recreate the proxies on update.\n        const kbdNavOrder = a11yOptions.keyboardNavigation.order;\n        this.proxyProvider.updateGroupOrder(kbdNavOrder);\n        // Update markup\n        this.getComponentOrder().forEach(function (componentName) {\n            components[componentName].onChartUpdate();\n            Accessibility_fireEvent(chart, 'afterA11yComponentUpdate', {\n                name: componentName,\n                component: components[componentName]\n            });\n        });\n        // Update keyboard navigation\n        this.keyboardNavigation.update(kbdNavOrder);\n        // Handle high contrast mode\n        // Should only be applied once, and not if explicitly disabled\n        if (!chart.highContrastModeActive &&\n            a11yOptions.highContrastMode !== false && (HighContrastMode.isHighContrastModeActive() ||\n            a11yOptions.highContrastMode === true)) {\n            HighContrastMode.setHighContrastTheme(chart);\n        }\n        Accessibility_fireEvent(chart, 'afterA11yUpdate', {\n            accessibility: this\n        });\n    }\n    /**\n     * Destroy all elements.\n     */\n    destroy() {\n        const chart = this.chart || {};\n        // Destroy components\n        const components = this.components;\n        Object.keys(components).forEach(function (componentName) {\n            components[componentName].destroy();\n            components[componentName].destroyBase();\n        });\n        // Destroy proxy provider\n        if (this.proxyProvider) {\n            this.proxyProvider.destroy();\n        }\n        // Remove announcer container\n        if (chart.announcerContainer) {\n            Accessibility_removeElement(chart.announcerContainer);\n        }\n        // Kill keyboard nav\n        if (this.keyboardNavigation) {\n            this.keyboardNavigation.destroy();\n        }\n        // Hide container from screen readers if it exists\n        if (chart.renderTo) {\n            chart.renderTo.setAttribute('aria-hidden', true);\n        }\n        // Remove focus border if it exists\n        if (chart.focusElement) {\n            chart.focusElement.removeFocusBorder();\n        }\n    }\n    /**\n     * Return a list of the types of series we have in the chart.\n     * @private\n     */\n    getChartTypes() {\n        const types = {};\n        this.chart.series.forEach(function (series) {\n            types[series.type] = 1;\n        });\n        return Object.keys(types);\n    }\n}\n/* *\n *\n *  Class Namespace\n *\n * */\n(function (Accessibility) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Constants\n     *\n     * */\n    Accessibility.i18nFormat = A11yI18n.i18nFormat;\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Destroy with chart.\n     * @private\n     */\n    function chartOnDestroy() {\n        if (this.accessibility) {\n            this.accessibility.destroy();\n        }\n    }\n    /**\n     * Handle updates to the module and send render updates to components.\n     * @private\n     */\n    function chartOnRender() {\n        // Update/destroy\n        if (this.a11yDirty && this.renderTo) {\n            delete this.a11yDirty;\n            this.updateA11yEnabled();\n        }\n        const a11y = this.accessibility;\n        if (a11y && !a11y.zombie) {\n            a11y.proxyProvider.updateProxyElementPositions();\n            a11y.getComponentOrder().forEach(function (componentName) {\n                a11y.components[componentName].onChartRender();\n            });\n        }\n    }\n    /**\n     * Update with chart/series/point updates.\n     * @private\n     */\n    function chartOnUpdate(e) {\n        // Merge new options\n        const newOptions = e.options.accessibility;\n        if (newOptions) {\n            // Handle custom component updating specifically\n            if (newOptions.customComponents) {\n                this.options.accessibility.customComponents =\n                    newOptions.customComponents;\n                delete newOptions.customComponents;\n            }\n            Accessibility_merge(true, this.options.accessibility, newOptions);\n            // Recreate from scratch\n            if (this.accessibility && this.accessibility.destroy) {\n                this.accessibility.destroy();\n                delete this.accessibility;\n            }\n        }\n        // Mark dirty for update\n        this.a11yDirty = true;\n    }\n    /**\n     * @private\n     */\n    function chartUpdateA11yEnabled() {\n        let a11y = this.accessibility;\n        const accessibilityOptions = this.options.accessibility, svg = this.renderer.boxWrapper.element, title = this.title;\n        if (accessibilityOptions && accessibilityOptions.enabled) {\n            if (a11y && !a11y.zombie) {\n                a11y.update();\n            }\n            else {\n                this.accessibility = a11y = new Accessibility(this);\n                if (a11y && !a11y.zombie) {\n                    a11y.update();\n                }\n                // If a11y has been disabled, and is now enabled\n                if (svg.getAttribute('role') === 'img') {\n                    svg.removeAttribute('role');\n                }\n            }\n        }\n        else if (a11y) {\n            // Destroy if after update we have a11y and it is disabled\n            if (a11y.destroy) {\n                a11y.destroy();\n            }\n            delete this.accessibility;\n        }\n        else {\n            // If a11y has been disabled dynamically or is disabled\n            this.renderTo.setAttribute('role', 'img');\n            this.renderTo.setAttribute('aria-hidden', false);\n            this.renderTo.setAttribute('aria-label', ((title && title.element.textContent) || '').replace(/</g, '&lt;'));\n            svg.setAttribute('aria-hidden', true);\n            const description = document.getElementsByClassName('highcharts-description')[0];\n            if (description) {\n                description.setAttribute('aria-hidden', false);\n                description.classList.remove('highcharts-linked-description');\n            }\n        }\n    }\n    /**\n     * @private\n     */\n    function compose(ChartClass, LegendClass, PointClass, SeriesClass, SVGElementClass, RangeSelectorClass) {\n        // Ordered:\n        Accessibility_KeyboardNavigation.compose(ChartClass);\n        SeriesComponent_NewDataAnnouncer.compose(SeriesClass);\n        Components_LegendComponent.compose(ChartClass, LegendClass);\n        Components_MenuComponent.compose(ChartClass);\n        SeriesComponent_SeriesComponent.compose(ChartClass, PointClass, SeriesClass);\n        A11yI18n.compose(ChartClass);\n        FocusBorder.compose(ChartClass, SVGElementClass);\n        // RangeSelector\n        if (RangeSelectorClass) {\n            Components_RangeSelectorComponent.compose(ChartClass, RangeSelectorClass);\n        }\n        const chartProto = ChartClass.prototype;\n        if (!chartProto.updateA11yEnabled) {\n            chartProto.updateA11yEnabled = chartUpdateA11yEnabled;\n            Accessibility_addEvent(ChartClass, 'destroy', chartOnDestroy);\n            Accessibility_addEvent(ChartClass, 'render', chartOnRender);\n            Accessibility_addEvent(ChartClass, 'update', chartOnUpdate);\n            // Mark dirty for update\n            ['addSeries', 'init'].forEach((event) => {\n                Accessibility_addEvent(ChartClass, event, function () {\n                    this.a11yDirty = true;\n                });\n            });\n            // Direct updates (events happen after render)\n            ['afterApplyDrilldown', 'drillupall'].forEach((event) => {\n                Accessibility_addEvent(ChartClass, event, function chartOnAfterDrilldown() {\n                    const a11y = this.accessibility;\n                    if (a11y && !a11y.zombie) {\n                        a11y.update();\n                    }\n                });\n            });\n            Accessibility_addEvent(PointClass, 'update', pointOnUpdate);\n            // Mark dirty for update\n            ['update', 'updatedData', 'remove'].forEach((event) => {\n                Accessibility_addEvent(SeriesClass, event, function () {\n                    if (this.chart.accessibility) {\n                        this.chart.a11yDirty = true;\n                    }\n                });\n            });\n        }\n    }\n    Accessibility.compose = compose;\n    /**\n     * Mark dirty for update.\n     * @private\n     */\n    function pointOnUpdate() {\n        if (this.series.chart.accessibility) {\n            this.series.chart.a11yDirty = true;\n        }\n    }\n})(Accessibility || (Accessibility = {}));\n/* *\n *\n *  Registry\n *\n * */\n// Add default options\nAccessibility_merge(true, Accessibility_defaultOptions, A11yDefaults, {\n    accessibility: {\n        highContrastTheme: HighContrastTheme\n    },\n    lang: LangDefaults\n});\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Accessibility_Accessibility = (Accessibility);\n\n;// ./code/es-modules/masters/modules/accessibility.src.js\n\n\n\n\n\n\n\n\n\nconst G = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n// Classes\nG.i18nFormat = Accessibility_Accessibility.i18nFormat;\nG.A11yChartUtilities = Utils_ChartUtilities;\nG.A11yHTMLUtilities = Utils_HTMLUtilities;\nG.AccessibilityComponent = Accessibility_AccessibilityComponent;\nG.KeyboardNavigationHandler = Accessibility_KeyboardNavigationHandler;\nG.SeriesAccessibilityDescriber = SeriesComponent_SeriesDescriber;\n// Compositions\nAccessibility_Accessibility.compose(G.Chart, G.Legend, G.Point, G.Series, G.SVGElement, G.RangeSelector);\n/* harmony default export */ const accessibility_src = ((highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()));\n\n__webpack_exports__ = __webpack_exports__[\"default\"];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});"],"names":["root","factory","exports","module","define","amd","amd1","window","__WEBPACK_EXTERNAL_MODULE__944__","__WEBPACK_EXTERNAL_MODULE__984__","__WEBPACK_EXTERNAL_MODULE__660__","__WEBPACK_EXTERNAL_MODULE__632__","__WEBPACK_EXTERNAL_MODULE__532__","__WEBPACK_EXTERNAL_MODULE__620__","__WEBPACK_EXTERNAL_MODULE__512__","__WEBPACK_EXTERNAL_MODULE__608__","__WEBPACK_EXTERNAL_MODULE__540__","__WEBPACK_EXTERNAL_MODULE__260__","__WEBPACK_EXTERNAL_MODULE__820__","NavigatorConstructor","A11yI18nComposition","FocusBorderComposition","ScrollbarAxis","ForcedMarkersComposition","__webpack_modules__","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","__webpack_exports__","accessibility_src","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default","doc","win","css","simulatedEventTarget","EventTarget","cloneMouseEvent","e","MouseEvent","type","createEvent","evt","initMouseEvent","bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","getFakeMouseEvent","position","pos","x","y","composed","buttons","Utils_HTMLUtilities","addClass","el","className","classList","add","indexOf","cloneTouchEvent","touchListToTouchArray","l","touchArray","i","length","item","push","TouchEvent","newEvent","touches","targetTouches","changedTouches","defaultPrevented","preventDefault","fakeEvt","escapeStringForHTML","str","replace","getElement","id","getElementById","getHeadingTagNameForElement","element","getIncreasedHeadingLevel","tagName","Math","min","headingLevel","parseInt","slice","isHeading","test","getPreviousSiblingsHeading","sibling","previousSibling","getHeadingRecursive","prevSiblingsHeading","parent","parentElement","parentTagName","removeChildNodes","lastChild","removeChild","removeClass","remove","RegExp","removeElement","parentNode","reverseChildNodes","node","childNodes","appendChild","stripHTMLTagsFromString","isForExport","visuallyHideElement","width","height","overflow","whiteSpace","clip","marginTop","filter","opacity","highcharts_Templating_commonjs_highcharts_Templating_commonjs2_highcharts_Templating_root_Highcharts_Templating_","highcharts_Templating_commonjs_highcharts_Templating_commonjs2_highcharts_Templating_root_Highcharts_Templating_default","format","getNestedProperty","pick","i18nFormat","formatString","context","chart","getFirstBracketStatement","sourceStr","offset","startBracket","endBracket","statement","substring","begin","end","tokens","bracketRes","constRes","cursor","value","forEach","token","formatExtendedStatement","ctx","arr","result","eachStart","pluralStart","indexStart","indexEnd","eachEnd","preEach","postEach","eachArguments","eachStatement","split","lenArg","Number","len","isNaN","pluralEnd","pluralArguments","pluralStatement","trim","val","arrayName","ix","reduce","acc","cur","langFormat","langKey","keys","options","lang","compose","ChartClass","chartProto","A11yI18n","ChartUtilities_doc","stripHTMLTags","defined","find","fireEvent","getSeriesFirstPointElement","series","points","firstPointWithGraphic","p","graphic","getSeriesA11yElement","firstPointEl","graph","group","Utils_ChartUtilities","fireEventOnWrappedOrUnwrappedElement","eventObject","hcEvents","dispatchEvent","getChartTitle","title","text","renderer","forExport","getAxisDescription","axis","accessibility","description","axisTitle","textStr","categories","dateTime","getAxisRangeDescription","axisOptions","rangeDescription","getCategoryAxisRangeDesc","dataMax","dataMin","numCategories","getAxisTimeLengthDesc","range","max","rangeUnit","Seconds","Minutes","Hours","Days","unit","rangeValue","toFixed","getAxisFromToDescription","dateRangeFormat","screenReaderSection","axisRangeDateFormat","extremes","time","dateFormat","toString","rangeFrom","rangeTo","getPointFromXY","res","getSeriesFromName","name","s","unhideChartElementFromAT","setAttribute","renderTo","body","Array","hasAttribute","hideSeriesFromAT","seriesEl","scrollAxisToPoint","point","xAxis","yAxis","scrollbar","to","from","getRelativePointAxisPosition","axisStart","toPixels","axisEnd","positionProp","coll","pointPos","updatePosition","trigger","DOMEvent","DOMElementProvider_doc","DOMElementProvider_removeElement","Utils_DOMElementProvider","constructor","elements","createElement","apply","arguments","splice","destroyCreatedElements","addEvent","Utils_EventProvider","eventRemovers","remover","removeEvent","event","map","removeAddedEvents","AccessibilityComponent_fireEventOnWrappedOrUnwrappedElement","AccessibilityComponent_getFakeMouseEvent","Accessibility_AccessibilityComponent","destroy","getKeyboardNavigation","init","onChartRender","onChartUpdate","initBase","proxyProvider","eventProvider","domElementProvider","keyCodes","left","right","up","down","enter","space","esc","tab","pageUp","pageDown","home","fn","fakeClickEvent","destroyBase","KeyboardNavigationHandler_find","Accessibility_KeyboardNavigationHandler","keyCodeMap","validate","terminate","response","success","prev","next","noHandler","fail","run","keyCode","which","handlerCodeSet","codeSet","ContainerComponent_unhideChartElementFromAT","ContainerComponent_getChartTitle","ContainerComponent_doc","ContainerComponent_stripHTMLTags","Components_ContainerComponent","handleSVGTitleElement","setSVGContainerLabel","setGraphicContainerAttrs","setRenderToAttrs","makeCreditsAccessible","titleId","index","titleContents","chartTitle","titleElement","svgTitleElement","createElementNS","textContent","insertBefore","firstChild","svgContainerLabel","box","label","container","shouldHaveLandmark","landmarkVerbosity","containerLabel","credits","creditsStr","a11y","keyboardNavigation","tabindexContainer","focus","FocusBorder_addEvent","FocusBorder_pick","svgElementBorderUpdateTriggers","chartRenderFocusBorder","focusElement","focusBorderOptions","focusBorder","removeFocusBorder","enabled","addFocusBorder","margin","stroke","style","color","strokeWidth","lineWidth","r","borderRadius","chartSetFocusToElement","svgElement","browserFocusElement","focusin","hideBrowserFocusOutline","outline","renderFocusBorder","svgElementAddFocusBorder","attribs","bb","getBBox","pad","parentGroup","scaleX","scaleY","scaleBoth","oneDefined","abs","lineHeight","fontMetrics","h","translateX","translateY","borderPosX","borderPosY","borderWidth","borderHeight","isLabel","nodeName","posXCorrection","posYCorrection","isRotated","rotation","correction","attr","attrX","attrY","dim","temp","rect","zIndex","styledMode","avgElementAddUpdateFocusBorderHooks","updateParams","focusBorderUpdateHooks","setterKey","origSetter","_defaultSetter","ret","svgElementAddDestroyFocusBorderHook","focusBorderDestroyHook","origDestroy","svgElementRemoveFocusBorder","SVGElementClass","svgElementProto","setFocusToElement","FocusBorder","highcharts_AST_commonjs_highcharts_AST_commonjs2_highcharts_AST_root_Highcharts_AST_","highcharts_AST_commonjs_highcharts_AST_commonjs2_highcharts_AST_root_Highcharts_AST_default","Announcer_doc","Announcer_addClass","Announcer_visuallyHideElement","Utils_Announcer","announceRegion","addAnnounceRegion","announce","message","setElementHTML","clearAnnouncementRegionTimer","clearTimeout","setTimeout","innerHTML","emptyHTML","chartContainer","announcerContainer","createAnnouncerContainer","div","AnnotationsA11y_escapeStringForHTML","AnnotationsA11y_stripHTMLTagsFromString","getChartAnnotationLabels","annotations","visible","concat","labels","getLabelText","getAnnotationLabelDescription","a11yDesc","labelText","getAriaLabel","getAttribute","pointValueDescriptions","valDesc","valueDescription","seriesName","desc","numPoints","pointsSelector","annotationText","annotation","annotationPoint","additionalAnnotationPoints","getAnnotationListItems","Components_AnnotationsA11y","getAnnotationsInfoHTML","annotationItems","join","getPointAnnotationTexts","pointLabels","InfoRegionsComponent_getAnnotationsInfoHTML","InfoRegionsComponent_getAxisDescription","InfoRegionsComponent_getAxisRangeDescription","InfoRegionsComponent_getChartTitle","InfoRegionsComponent_unhideChartElementFromAT","InfoRegionsComponent_format","InfoRegionsComponent_doc","InfoRegionsComponent_addClass","InfoRegionsComponent_getElement","InfoRegionsComponent_getHeadingTagNameForElement","InfoRegionsComponent_stripHTMLTagsFromString","InfoRegionsComponent_visuallyHideElement","InfoRegionsComponent_attr","InfoRegionsComponent_pick","replaceNested","stripEmptyHTMLTags","Components_InfoRegionsComponent","screenReaderSections","component","initRegionsDefinitions","onDataTableCreated","wasHidden","dataTableDiv","focusDataTable","viewDataTableButton","exporting","updateAllScreenReaderSections","announcer","accessibilityOptions","before","buildContent","formatter","beforeChartFormatter","defaultBeforeChartFormatter","insertIntoDOM","afterInserted","sonifyButtonId","initSonifyButton","dataTableButtonId","initDataTableButton","after","afterChartFormatter","defaultAfterChartFormatter","nextSibling","updateExitAnchor","linkedDescriptionElement","getLinkedDescriptionElement","setLinkedDescriptionAttrs","regionKey","updateScreenReaderSection","linkedDescOption","chartOptions","linkedDescription","query","queryMatch","querySelectorAll","region","content","sectionDiv","hiddenDiv","setScreenReaderSectionAttribs","beforeChartFormat","axesDesc","getAxesDescription","shouldHaveSonifyBtn","sonify","sonification","annotationsList","annotationsTitleStr","headingTagName","typeDescription","getTypeDescriptionText","chartSubtitle","getSubtitleText","chartLongdesc","getLongdescText","xAxisDescription","yAxisDescription","playAsSoundButton","getSonifyButtonText","viewTableButton","getCSV","getDataTableButtonText","annotationsTitle","formattedString","afterChartFormat","endOfChartMarker","getEndOfChartMarkerText","getLinkedDescription","captionOptions","caption","captionText","types","getTypeDescription","firstType","firstSeries","mapTitle","mapView","geoMap","formatContext","numSeries","buildTypeDescriptionFromSeries","typeExplanation","multi","buttonId","subtitle","endMarker","outerHTML","markerText","attributes","tree","tabindex","summary","tableDiv","table","getElementsByTagName","sonifyButton","defaultHandler","stopPropagation","announceMsg","removeAttribute","onclick","onPlayAsSoundClick","tableButtonId","tableId","onViewDataTableClick","viewData","shouldDescribeColl","collectionKey","defaultCondition","axes","hasNoMap","hasCartesian","hasCartesianSeries","showXAxes","angular","showYAxes","getAxisDescriptionText","names","ranges","numAxes","MenuComponent_attr","MenuComponent_getChartTitle","MenuComponent_unhideChartElementFromAT","MenuComponent_getFakeMouseEvent","getExportMenuButtonElement","exportSVGElements","MenuComponent","onMenuShown","onMenuHidden","createProxyGroup","menu","exportContextMenu","setExportButtonExpandedState","addAccessibleContextMenuAttribs","stateStr","exportButtonProxy","innerElement","focusEl","clearGroup","proxyMenuButton","exportingGroup","buttonEl","exportingShouldHaveA11y","exportingOpts","exportButton","addProxyElement","click","contextButtonTitle","addGroup","exportList","exportDivElements","children","parentDiv","role","onKbdPrevious","onKbdNext","onKbdClick","proxy","svgEl","hideExportMenu","keyboardNavigationHandler","a11yOptions","highlightedExportItemIx","highlightExportItem","wrapAround","highlightLastExportItem","curHighlightedItem","exportButtonElement","openMenu","chartShowExportMenu","chartHideExportMenu","onmouseout","hideMenu","chartHighlightExportItem","listItem","curHighlighted","hasSVGFocusSupport","onmouseover","chartHighlightLastExportItem","showExportMenu","Components_MenuComponent","KeyboardNavigation_doc","KeyboardNavigation_win","KeyboardNavigation_addEvent","KeyboardNavigation_defined","KeyboardNavigation_fireEvent","KeyboardNavigation_getElement","KeyboardNavigation_simulatedEventTarget","KeyboardNavigation","components","currentModuleIx","NaN","modules","ep","update","onKeydown","onFocus","eventName","onMouseUp","isClickingChart","order","keyboardOptions","updateContainerTabindex","componentName","navModules","removeExitAnchor","makeElementAnExitAnchor","exitAnchor","createExitAnchor","move","direction","curModule","newModule","exiting","focusComesFromChart","contains","tabbingInBackwards","getFirstValidModuleIx","keyboardReset","target","curMod","ev","curNavModule","shouldHaveTabindex","curTabindex","chartTabindex","addExitAnchorEventsToEl","comingInBackwards","mod","chartDismissPopupContent","tooltip","hide","documentOnKeydown","charts","dismissPopupContent","Accessibility_KeyboardNavigation","highcharts_Legend_commonjs_highcharts_Legend_commonjs2_highcharts_Legend_root_Highcharts_Legend_","highcharts_Legend_commonjs_highcharts_Legend_commonjs2_highcharts_Legend_root_Highcharts_Legend_default","animObject","LegendComponent_doc","LegendComponent_addEvent","LegendComponent_fireEvent","isNumber","LegendComponent_pick","syncTimeout","LegendComponent_getChartTitle","LegendComponent_stripHTMLTags","LegendComponent_addClass","LegendComponent_removeClass","shouldDoLegendA11y","items","legend","allItems","legendA11yOptions","unsupportedColorAxis","colorAxis","some","c","dataClasses","setLegendItemHoverState","hoverActive","legendItem","setState","LegendComponent","highlightedLegendItemIx","proxyGroup","recreateProxies","updateGroupProxyElementPositions","updateLegendItemProxyVisibility","highlightLegendItem","updateProxyPositionForItem","globalAnimation","duration","curPage","currentPage","clipHeight","a11yProxyElement","hasPages","pages","proxyEl","itemPage","pageIx","round","visibility","removeProxies","highlightAdjacentLegendPage","newPageIx","curPageIx","refreshPosition","focusedElement","activeElement","shouldRestoreFocus","addLegendProxyGroup","proxyLegendItems","updateLegendTitle","removeGroup","legendTitle","legendLabel","updateGroupAttrs","groupRole","proxyLegendItem","itemLabel","itemName","proxyPositioningElement","visual","onKbdArrowKey","shouldHaveLegendNavigation","numItems","legendOptions","display","chartHighlightLegendItem","oldIx","itemToHighlight","scrollLegendToItem","itemIx","scroll","legendItemProp","proxyBtn","legendOnAfterColorizeItem","LegendClass","Components_LegendComponent","highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_","highcharts_Axis_commonjs_highcharts_Axis_commonjs2_highcharts_Axis_root_Highcharts_Axis_default","isTouchDevice","ChartNavigatorComposition_addEvent","merge","ChartNavigatorComposition_pick","composedMembers","onChartAfterAddSeries","navigator","setBaseSeries","onChartAfterSetChartSize","scrollbarHeight","scrollButtonSize","inverted","opposite","chartWidth","spacing","top","plotTop","plotLeft","navigatorOptions","chartHeight","rangeSelector","extraBottomMargin","getHeight","verticalAlign","layout","floating","legendHeight","titleOffset","setAxisSize","onChartAfterUpdate","scroller","redraw","animation","onChartBeforeRender","onChartBeforeShowResetZoom","zooming","pinchType","onChartCallback","getExtremes","render","scrollbarOptions","Navigator_ChartNavigatorComposition","NavigatorClass","pushUnique","callbacks","NavigatorAxisComposition_isTouchDevice","NavigatorAxisComposition_addEvent","correctFloat","NavigatorAxisComposition_defined","NavigatorAxisComposition_isNumber","NavigatorAxisComposition_pick","onAxisInit","navigatorAxis","NavigatorAxisAdditions","onAxisSetExtremes","zoomed","zoomType","isXAxis","previousZoom","AxisClass","keepProps","includes","toFixedRange","pxMin","pxMax","fixedMin","fixedMax","halfPointRange","pointRange","newMin","translate","horiz","newMax","highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_","highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default","highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_","highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default","parse","seriesTypes","NavigatorDefaults","maskInside","handles","symbols","backgroundColor","borderColor","maskFill","setOpacity","outlineColor","outlineWidth","areaspline","fillOpacity","compare","dataGrouping","approximation","groupPixelWidth","firstAnchor","anchor","lastAnchor","units","dataLabels","lineColor","marker","threshold","tickLength","gridLineColor","gridLineWidth","tickPixelInterval","align","fontSize","textOutline","crosshair","startOnTick","endOnTick","minPadding","maxPadding","tickWidth","Symbols_defined","Symbols_isNumber","Symbols_pick","SVG_Symbols","w","roundedRect","relativeLength","Navigator_NavigatorSymbols","_x","_y","halfWidth","markerPosition","highcharts_RendererRegistry_commonjs_highcharts_RendererRegistry_commonjs2_highcharts_RendererRegistry_root_Highcharts_RendererRegistry_","highcharts_RendererRegistry_commonjs_highcharts_RendererRegistry_commonjs2_highcharts_RendererRegistry_root_Highcharts_RendererRegistry_default","StockUtilities_defined","setOptions","getRendererType","setFixedRange","NavigatorComposition_setFixedRange","fixedRange","NavigatorComposition_addEvent","extend","onSeriesAfterUpdate","isInternal","Navigator_NavigatorComposition","SeriesClass","NavigatorAxisComposition","ScrollbarAxis_composed","ScrollbarAxis_addEvent","ScrollbarAxis_defined","ScrollbarAxis_pick","ScrollbarAxis_pushUnique","Scrollbar","axisMin","axisMax","scrollMin","Infinity","scrollMax","onAxisAfterGetOffset","scrollbarsOffsets","axisOffset","size","onAxisAfterInit","vertical","unitedMin","unitedMax","reversed","shouldUpdateExtremes","DOMType","animate","setExtremes","setRange","onAxisAfterRender","offsetsIndex","axisTitleMargin","axisMargin","xPosition","interval","ScrollbarClass","Axis_ScrollbarAxis","Scrollbar_ScrollbarDefaults","barBorderRadius","buttonBorderRadius","buttonsEnabled","liveRedraw","minWidth","step","barBackgroundColor","barBorderWidth","barBorderColor","buttonArrowColor","buttonBackgroundColor","buttonBorderColor","buttonBorderWidth","rifleColor","trackBackgroundColor","trackBorderColor","trackBorderRadius","trackBorderWidth","defaultOptions","Scrollbar_addEvent","Scrollbar_correctFloat","crisp","Scrollbar_defined","destroyObjectProperties","Scrollbar_fireEvent","Scrollbar_merge","Scrollbar_pick","swapXY","path","seg","_events","chartX","chartY","scrollbarButtons","scrollbarLeft","scrollbarStrokeWidth","scrollbarTop","addEvents","buttonsOrder","bar","scrollbarGroup","track","mouseDownHandler","bind","mouseMoveHandler","mouseUpHandler","buttonToMinClick","buttonToMaxClick","trackClick","ownerDocument","args","cursorToScrollbarPosition","normalizedEvent","minWidthDifference","calculatedWidth","xOffset","barWidth","yOffset","removeEvents","drawScrollbarButton","g","fill","arrow","userOptions","pointer","normalize","mousePosition","initPositions","grabbedCenter","change","chartPosition","hasDragged","method","rendered","show","scrollbarRifles","fromPX","newSize","fullWidth","toPX","ceil","newPos","floor","newRiflesPos","showFull","eventType","svg","boosted","highcharts_SVGRenderer_commonjs_highcharts_SVGRenderer_commonjs2_highcharts_SVGRenderer_root_Highcharts_SVGRenderer_","highcharts_SVGRenderer_commonjs_highcharts_SVGRenderer_commonjs2_highcharts_SVGRenderer_root_Highcharts_SVGRenderer_default","Navigator_defaultOptions","Navigator_isTouchDevice","Navigator_addEvent","clamp","Navigator_correctFloat","Navigator_defined","Navigator_destroyObjectProperties","erase","Navigator_extend","Navigator_find","Navigator_fireEvent","isArray","Navigator_isNumber","Navigator_merge","Navigator_pick","Navigator_removeEvent","splat","numExt","extreme","numbers","Navigator","isDirty","drawHandle","verb","drawOutline","zoomedMin","zoomedMax","halfOutline","outlineCorrection","navigatorSize","navigatorTop","lineTop","lineBtm","verticalMin","drawMasks","navigatorHeight","shades","shade","renderElements","mouseCursor","navigatorGroup","hasMask","handlesOptions","symbolName","symbolUrl","isImg","symbolFn","symbol","addMouseEvents","rotationOriginX","rotationOriginY","invertedUpdate","setOpposite","navigatorEnabled","adaptToUpdatedData","baseSeries","updatedDataHandler","eventsToUnbind","offsets","getXAxisOffsets","scrollbarXAxis","fake","minRange","maxRange","navigatorWidth","plotWidth","plotHeight","toValue","currentRange","grabbedLeft","grabbedRight","fixedWidth","onMouseMove","getPartsEvents","modifyNavigatorAxisExtremes","events","navigatorItem","shadesMousedown","navigatorPosition","ext","dragOffset","reversedExtremes","getUnionExtremes","eventArguments","handlesMousedown","baseXAxis","reverse","otherHandlePos","fixedExtreme","pageX","unionExtremes","triggerOp","unbind","removeBaseSeriesEvents","modifyBaseAxisExtremes","scrollbarEnabled","xAxisIndex","yAxisIndex","baseXaxis","isDirtyBox","breaks","ordinal","overscroll","keepOrdinalPadding","zoomEnabled","alignTicks","data","updateNavigatorSeries","unbindRedraw","scrollTrackWidth","valueRange","addBaseSeriesEvents","addChartEvents","Boolean","returnFalseOnNoBaseSeries","baseAxis","navAxis","navAxisOptions","baseAxisOptions","baseSeriesOptions","showInNavigator","navSeriesMixin","enableMouseTracking","linkedTo","padXAxis","showInLegend","stacking","states","inactive","navigatorSeries","navSeries","base","baseOptions","mergedNavSeriesOptions","chartNavigatorSeriesOptions","baseNavigatorOptions","linkedNavSeries","userNavOptions","plotOptions","navigatorSeriesData","hasNavigatorData","initSeries","setSortedData","userSeriesOptions","colors","setVisible","getBaseSeriesMin","currentSeriesMin","getColumn","baseExtremes","baseMin","baseMax","baseDataMin","baseDataMax","stickToMin","stickToMax","convertOverscroll","hasSetExtremes","eventArgs","xData","MAX_VALUE","userMin","userMax","shouldStickToMax","shouldStickToMin","pointStart","setData","xDataMin","marginName","NavigatorComponent_animObject","NavigatorComponent_format","NavigatorComponent_clamp","NavigatorComponent_pick","NavigatorComponent_syncTimeout","NavigatorComponent_getFakeMouseEvent","NavigatorComponent_getAxisRangeDescription","NavigatorComponent_fireEventOnWrappedOrUnwrappedElement","Components_NavigatorComponent","updateHandleValues","verbosity","groupFormatStr","groupLabel","handleFormatStr","handleLabel","handle","getHandleByIx","handleIx","pointerEvents","oninput","updateNavigator","getNavigatorHandleNavigation","maxHandleProxy","minHandleProxy","delta","parseFloat","updateNavigatorThrottleTimer","beforeAnnounce","performUpdate","chartPos","getChartPosition","minNewX","maxNewX","announceFormatStr","changeAnnouncement","axisRangeDescription","SeriesDescriber_getPointAnnotationTexts","SeriesDescriber_getAxisDescription","SeriesDescriber_getSeriesFirstPointElement","SeriesDescriber_getSeriesA11yElement","SeriesDescriber_unhideChartElementFromAT","SeriesDescriber_format","numberFormat","SeriesDescriber_reverseChildNodes","SeriesDescriber_stripHTMLTags","SeriesDescriber_find","SeriesDescriber_isNumber","isString","SeriesDescriber_pick","SeriesDescriber_defined","hasMorePointsThanDescriptionThreshold","chartA11yOptions","pointDescriptionEnabledThreshold","pointNumberToString","a11yPointOptions","seriesA11yPointOptions","tooltipOptions","valueDecimals","decimalPoint","thousandsSep","getSeriesAxisDescriptionText","axisCollection","defaultPointDescriptionFormatter","shouldExposeSeriesName","valText","getPointValueDescription","seriesA11yOptions","pointValueDescriptionFormat","seriesValueDescFormat","valueDescriptionFormat","showXDescription","xDesc","getPointXDescription","timeDesc","getPointA11yTimeDescription","dateXAxis","tooltipDateFormat","getXDateFormat","dateTimeLabelFormats","dateFormatter","pointCategory","category","canUseId","fallback","xDescription","getPointValue","a11yPointOpts","seriesA11yPointOpts","valuePrefix","valueSuffix","fallbackKey","fallbackDesc","isNull","pointArrayMap","getPointArrayMapValueDescription","prefix","suffix","pre","suf","keyToValStr","num","propDesc","separator","seriesNameText","annotationsDesc","getPointAnnotationDescription","defaultSeriesDescriptionFormatter","chartTypes","getSeriesDescriptionText","descOpt","shouldDescribeAxis","seriesNumber","xAxisInfo","yAxisInfo","summaryContext","combinationSuffix","axisDescription","descriptionFormat","seriesDescription","authorDescription","SeriesComponent_SeriesDescriber","describeSeries","is3d","describePointsInSeries","setScreenReaderProps","shouldSetScreenReaderPropsOnPoints","exposeAsGroupOnly","setKeyboardProps","shouldSetKeyboardNavPropsOnPoints","seriesNavOptions","seriesNavigation","pointNavigationEnabledThreshold","shouldDescribeNullPoints","describeNull","pointEl","shouldAddMockPoint","isSunburst","is","shouldDescribeNull","addMockPointElement","findFirstPointWithGraphic","sourcePointIndex","firstGraphic","mockPos","plotX","plotY","mockElement","makeMockElement","mock","hasMockGraphic","pointA11yDisabled","setPointScreenReaderAttribs","pointElement","seriesPointA11yOptions","descriptionFormatter","shouldDescribeSeriesElement","chartHas3d","options3d","hasMultipleSeries","describeSingleSeriesOption","describeSingleSeries","exposeAsGroupOnlyOption","describeSeriesElement","seriesElement","NewDataAnnouncer_composed","NewDataAnnouncer_addEvent","NewDataAnnouncer_defined","NewDataAnnouncer_pushUnique","NewDataAnnouncer_getChartTitle","NewDataAnnouncer_defaultPointDescriptionFormatter","NewDataAnnouncer_defaultSeriesDescriptionFormatter","chartHasAnnounceEnabled","announceNewData","NewDataAnnouncer","dirty","allSeries","lastAnnouncementTime","announceType","announceOptions","interruptUser","addEventListeners","onSeriesAdded","announceDirtyData","hasDirty","newSeries","newPoint","findPointInDataArray","candidates","candidate","queueAnnouncement","dirtySeries","annOptions","now","Date","dTime","minAnnounceInterval","getUniqueSeries","arrayA","arrayB","uniqueSeries","queuedAnnouncement","buildAnnouncementMessage","queuedAnnouncementTimer","announcementFormatter","formatterRes","multiple","seriesDesc","pointDesc","seriesOnAddPoint","newDataAnnouncer","seriesOnUpdatedData","SeriesComponent_NewDataAnnouncer","ProxyElement_doc","ProxyElement_attr","ProxyElement_css","ProxyElement_merge","ProxyElement_fireEventOnWrappedOrUnwrappedElement","ProxyElement_cloneMouseEvent","ProxyElement_cloneTouchEvent","ProxyElement_getFakeMouseEvent","ProxyElement_removeElement","Accessibility_ProxyElement","proxyElementType","wrapperElementType","innerEl","wrapperEl","hideElementVisually","listStyle","updateTarget","getTargetPosition","fakeEventObject","updateCSSClassName","attrs","targetAriaLabel","getTargetAttr","addProxyEventsToElement","bBox","stringHasNoTooltip","groupDiv","noTooltipOnGroup","noTooltipOnTarget","evtType","isTouchEvent","clonedEvent","passive","padding","clickTarget","clickTargetElement","posElement","chartDiv","getBoundingClientRect","rectEl","bottom","ProxyProvider_doc","ProxyProvider_attr","ProxyProvider_css","ProxyProvider_unhideChartElementFromAT","ProxyProvider_removeChildNodes","Accessibility_ProxyProvider","groups","groupOrder","beforeChartProxyPosContainer","createProxyPosContainer","afterChartProxyPosContainer","groupKey","Error","proxyContainerElement","proxyElements","groupElementType","groupElement","existingGroup","proxyContainer","updateGroupOrder","groupKeys","isDOMOrderGroupOrder","seriesIx","beforeKeys","afterKeys","posContainer","updatePosContainerPositions","updateProxyElementPositions","classNamePostfix","getCurrentGroupOrderInDOM","getGroupKeyFromElement","allGroups","getChildrenGroupOrder","childrenOrder","domOrder","groupOrderWithGroups","rendererSVGEl","RangeSelectorComponent_unhideChartElementFromAT","RangeSelectorComponent_getAxisRangeDescription","RangeSelectorComponent_addEvent","RangeSelectorComponent_attr","RangeSelectorComponent","updateSelectorVisibility","setDropdownAttrs","setRangeButtonAttrs","maxInput","minInput","input","setRangeInputAttrs","dropdown","hideFromAT","hasVisibleDropdown","btn","rangeTitle","rangeSelectorZoom","onButtonNavKbdArrowKey","highlightRangeSelectorButton","highlightedRangeSelectorItemIx","onButtonNavKbdClick","oldRangeSelectorItemState","onAfterBtnClick","announcement","onInputKbdMove","rangeSel","newIx","highlightedInputRangeIx","inputEl","onInputNavInit","buttonIxToHighlight","removeInputKeydownHandler","keydownHandler","minRemover","maxRemover","onInputNavTerminate","hideInput","initDropdownNav","buttonGroup","removeDropdownKeydownHandler","isTab","getRangeSelectorButtonNavigation","lastButtonIx","getRangeSelectorInputNavigation","inputGroup","inputEnabled","chartHighlightRangeSelectorButton","curHighlightedIx","curSelectedIx","selected","state","rangeSelectorAfterBtnClick","RangeSelectorClass","Components_RangeSelectorComponent","ForcedMarkers_composed","ForcedMarkers_addEvent","ForcedMarkers_merge","ForcedMarkers_pushUnique","forceZeroOpacityMarkerOptions","normal","getPointMarkerOpacity","pointOptions","hasIndividualPointMarkerOptions","_hasPointMarkers","seriesOnAfterRender","markerGroup","a11yMarkersForced","hasForcedA11yMarker","seriesOnAfterSetOptions","resetA11yMarkerOptions","seriesOnRender","shouldForceMarkers","chartA11yEnabled","seriesA11yEnabled","isWithinDescriptionThreshold","unforceSeriesMarkerOptions","resetMarkerOptions","originalOpacity","handleForcePointMarkers","hadForcedMarker","isStillForcedMarker","seriesOnRenderCanvas","ForcedMarkers","highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_","highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default","highcharts_Series_commonjs_highcharts_Series_commonjs2_highcharts_Series_root_Highcharts_Series_","highcharts_Series_commonjs_highcharts_Series_commonjs2_highcharts_Series_root_Highcharts_Series_default","SeriesKeyboardNavigation_seriesTypes","SeriesKeyboardNavigation_doc","SeriesKeyboardNavigation_defined","SeriesKeyboardNavigation_fireEvent","SeriesKeyboardNavigation_getPointFromXY","SeriesKeyboardNavigation_getSeriesFromName","SeriesKeyboardNavigation_scrollAxisToPoint","getPointIndex","isSkipSeries","seriesKbdNavOptions","isSkipPoint","skipNullPoints","isInside","getFirstValidPointInChart","getFirstValidPointInSeries","highlightLastValidPointInChart","highlightedPoint","highlightNextValidPoint","highlightFirstValidPointInChart","highlight","SeriesKeyboardNavigation","onSeriesDestroy","updateChartFocusAfterDrilling","lastDrilledDownPoint","onDrillupAll","focusedElClassName","isProxyFocused","last","getKeyboardNavigationHandler","onKbdSideways","onKbdVertical","firePointEvent","highlightAdjacentSeries","onHandlerInit","onHandlerTerminate","handler","isNext","attemptHighlightAdjacentPoint","kbdNavOptions","rememberPointFocus","navOptions","mode","highlightMethod","keyboardMoveVertical","hoverSeries","onMouseOut","directionIsNext","highlightAdjacentPoint","chartHighlightAdjacentPoint","curPoint","curPointIndex","curPoints","lastSeries","lastPoint","chartHighlightAdjacentPointVertical","minDistance","bestPoint","yDistance","distance","chartHighlightAdjacentSeries","adjacentNewPoint","getClosestPoint","xWeight","yWeight","dPoint","minIx","hasUndefinedPosition","pointHighlight","highlightVisually","tooltipElement","onMouseOver","tooltipTop","scrollTop","scrollY","scrollTo","behavior","seriesHighlightNextValidPoint","start","j","PointClass","pointProto","seriesProto","highlightAdjacentPointVertical","SeriesComponent_SeriesKeyboardNavigation","SeriesComponent_hideSeriesFromAT","SeriesComponent_describeSeries","SeriesComponent_SeriesComponent","hideTooltipFromATWhenShown","hideSeriesLabelsFromATWhenShown","labelBySeries","getPointsCollection","ZoomComponent_unhideChartElementFromAT","ZoomComponent_getFakeMouseEvent","ZoomComponent_attr","ZoomComponent_pick","Components_ZoomComponent","focusedMapNavButtonIx","updateProxyOverlays","mapNavigation","navButtons","setMapNavButtonAttrs","labelFormatKey","resetZoomButton","createZoomProxyButton","drillUpButton","breadcrumbs","list","lastBreadcrumb","buttonText","getButtonText","buttonProp","getMapZoomNavigation","onMapKbdArrow","_keyCode","onMapKbdTab","onMapKbdClick","onMapNavInit","isY","stepDirection","diff","random","startPos","offsetLeft","offsetTop","endPos","isBackwards","isMoveOutOfRange","zoomBy","zoomIn","zoomOut","initialButton","simpleButtonNavigation","proxyProp","onClick","_handler","drillUp","HighContrastMode_doc","isMS","HighContrastMode_win","HighContrastMode","isHighContrastModeActive","isEdge","userAgent","matchMedia","matches","getComputedStyle","testDiv","backgroundImage","bi","currentStyle","setHighContrastTheme","highContrastModeActive","theme","highContrastTheme","hasCustomColors","plotOpts","fillColor","colorIndex","seriesOptions","error","DeprecatedOptions_pick","traverseSetOption","optionAsArray","opt","deprecateFromOptionsMap","rootOldAsArray","rootNewAsArray","mapToNewOptions","getChildProp","propAsArray","rootOld","rootNew","oldOptionKey","DeprecatedOptions","copyDeprecatedChartOptions","copyDeprecatedAxisOptions","opts","copyDeprecatedSeriesOptions","oldToNewSeriesOptions","exposeElementToA11y","pointDescriptionFormatter","skipKeyboardNavigation","oldOption","optionVal","pointDateFormat","pointDateFormatter","pointDescriptionThreshold","pointNavigationThreshold","pointValueDecimals","pointValuePrefix","pointValueSuffix","screenReaderSectionFormatter","seriesDescriptionFormatter","onTableAnchorClick","mapZoomIn","mapZoomOut","screenReaderRegionLabel","rangeSelectorButton","rangeSelectorMaxInput","rangeSelectorMinInput","svgContainerEnd","viewAsDataTable","tableSummary","Accessibility_defaultOptions","Accessibility_doc","Accessibility_addEvent","Accessibility_extend","Accessibility_fireEvent","Accessibility_merge","Accessibility_removeElement","Accessibility","addEventListener","zombie","initComponents","infoRegions","chartMenu","zoom","customComponents","getComponentOrder","getChartTypes","kbdNavOrder","highContrastMode","chartOnDestroy","chartOnRender","a11yDirty","updateA11yEnabled","chartOnUpdate","newOptions","chartUpdateA11yEnabled","boxWrapper","document","getElementsByClassName","pointOnUpdate","minColor","maxColor","stops","minorGridLineColor","tickColor","edgeColor","connectorColor","pie","boxplot","candlestick","errorbar","itemStyle","itemHoverStyle","itemHiddenStyle","drilldown","activeAxisLabelStyle","activeDataLabelStyle","navigation","buttonOptions","symbolStroke","buttonTheme","hover","select","inputBoxBorderColor","inputStyle","labelStyle","defaultChartTitle","chartContainerLabel","svgContainerTitle","graphicContainerLabel","beforeRegionLabel","afterRegionLabel","heading","descriptionSinglePoint","descriptionMultiplePoints","descriptionNoPoints","playAsSoundButtonText","playAsSoundClickAnnouncement","legendLabelNoTitle","dropdownLabel","minInputLabel","maxInputLabel","clickButtonAnnouncement","viewAsDataTableButtonText","newDataAnnounce","newSeriesAnnounceSingle","newPointAnnounceSingle","newSeriesAnnounceMultiple","newPointAnnounceMultiple","seriesTypeDescriptions","arearange","areasplinerange","bubble","columnrange","funnel","pyramid","waterfall","emptyChart","mapTypeDescription","unknownMap","combinationChart","defaultSingle","defaultMultiple","splineSingle","splineMultiple","lineSingle","lineMultiple","columnSingle","columnMultiple","barSingle","barMultiple","pieSingle","pieMultiple","scatterSingle","scatterMultiple","boxplotSingle","boxplotMultiple","bubbleSingle","bubbleMultiple","xAxisDescriptionSingular","xAxisDescriptionPlural","yAxisDescriptionSingular","yAxisDescriptionPlural","timeRangeDays","timeRangeHours","timeRangeMinutes","timeRangeSeconds","rangeFromTo","rangeCategories","chartMenuLabel","menuButtonLabel","defaultCombination","line","lineCombination","spline","splineCombination","column","columnCombination","barCombination","pieCombination","scatter","scatterCombination","boxplotCombination","bubbleCombination","mapCombination","mapline","maplineCombination","mapbubble","mapbubbleCombination","nullPointValue","pointAnnotationsDescription","Accessibility_Accessibility","G","A11yChartUtilities","A11yHTMLUtilities","AccessibilityComponent","KeyboardNavigationHandler","SeriesAccessibilityDescriber","Chart","Legend","Point","Series","SVGElement","RangeSelector"],"mappings":"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"}

Hacked By AnonymousFox1.0, Coded By AnonymousFox