Hacked By AnonymousFox

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

{"version":3,"sources":["<anon>"],"sourcesContent":["/**\n * @license Highcharts JS v12.1.2 (2025-01-09)\n * @module highcharts/highcharts-more\n * @requires highcharts\n *\n * (c) 2009-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(root[\"_Highcharts\"], root[\"_Highcharts\"][\"SeriesRegistry\"], root[\"_Highcharts\"][\"Series\"], root[\"_Highcharts\"][\"Series\"][\"types\"][\"column\"], root[\"_Highcharts\"][\"Color\"], root[\"_Highcharts\"][\"Templating\"], root[\"_Highcharts\"][\"Point\"], root[\"_Highcharts\"][\"Chart\"], root[\"_Highcharts\"][\"SVGElement\"], root[\"_Highcharts\"][\"StackItem\"]);\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"highcharts/highcharts-more\", [\"highcharts/highcharts\"], function (amd1) {return factory(amd1,amd1[\"SeriesRegistry\"],amd1[\"Series\"],amd1[\"Series\"],[\"types\"],[\"column\"],amd1[\"Color\"],amd1[\"Templating\"],amd1[\"Point\"],amd1[\"Chart\"],amd1[\"SVGElement\"],amd1[\"StackItem\"]);});\n\telse if(typeof exports === 'object')\n\t\texports[\"highcharts/highcharts-more\"] = factory(root[\"_Highcharts\"], root[\"_Highcharts\"][\"SeriesRegistry\"], root[\"_Highcharts\"][\"Series\"], root[\"_Highcharts\"][\"Series\"][\"types\"][\"column\"], root[\"_Highcharts\"][\"Color\"], root[\"_Highcharts\"][\"Templating\"], root[\"_Highcharts\"][\"Point\"], root[\"_Highcharts\"][\"Chart\"], root[\"_Highcharts\"][\"SVGElement\"], root[\"_Highcharts\"][\"StackItem\"]);\n\telse\n\t\troot[\"Highcharts\"] = factory(root[\"Highcharts\"], root[\"Highcharts\"][\"SeriesRegistry\"], root[\"Highcharts\"][\"Series\"], root[\"Highcharts\"][\"Series\"][\"types\"][\"column\"], root[\"Highcharts\"][\"Color\"], root[\"Highcharts\"][\"Templating\"], root[\"Highcharts\"][\"Point\"], root[\"Highcharts\"][\"Chart\"], root[\"Highcharts\"][\"SVGElement\"], root[\"Highcharts\"][\"StackItem\"]);\n})(typeof window === 'undefined' ? this : window, (__WEBPACK_EXTERNAL_MODULE__944__, __WEBPACK_EXTERNAL_MODULE__512__, __WEBPACK_EXTERNAL_MODULE__820__, __WEBPACK_EXTERNAL_MODULE__448__, __WEBPACK_EXTERNAL_MODULE__620__, __WEBPACK_EXTERNAL_MODULE__984__, __WEBPACK_EXTERNAL_MODULE__260__, __WEBPACK_EXTERNAL_MODULE__960__, __WEBPACK_EXTERNAL_MODULE__28__, __WEBPACK_EXTERNAL_MODULE__184__) => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 960:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__960__;\n\n/***/ }),\n\n/***/ 620:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__620__;\n\n/***/ }),\n\n/***/ 260:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__260__;\n\n/***/ }),\n\n/***/ 28:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__28__;\n\n/***/ }),\n\n/***/ 448:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__448__;\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/***/ 184:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__184__;\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 */ highcharts_more_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// 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// 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/Series/CenteredUtilities.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { deg2rad } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\nconst { fireEvent, isNumber, pick, relativeLength } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/**\n * @private\n */\nvar CenteredUtilities;\n(function (CenteredUtilities) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * Get the center of the pie based on the size and center options relative\n     * to the plot area. Borrowed by the polar and gauge series types.\n     *\n     * @private\n     * @function Highcharts.CenteredSeriesMixin.getCenter\n     */\n    function getCenter() {\n        const options = this.options, chart = this.chart, slicingRoom = 2 * (options.slicedOffset || 0), plotWidth = chart.plotWidth - 2 * slicingRoom, plotHeight = chart.plotHeight - 2 * slicingRoom, centerOption = options.center, smallestSize = Math.min(plotWidth, plotHeight), thickness = options.thickness;\n        let handleSlicingRoom, size = options.size, innerSize = options.innerSize || 0, i, value;\n        if (typeof size === 'string') {\n            size = parseFloat(size);\n        }\n        if (typeof innerSize === 'string') {\n            innerSize = parseFloat(innerSize);\n        }\n        const positions = [\n            pick(centerOption?.[0], '50%'),\n            pick(centerOption?.[1], '50%'),\n            // Prevent from negative values\n            pick(size && size < 0 ? void 0 : options.size, '100%'),\n            pick(innerSize && innerSize < 0 ? void 0 : options.innerSize || 0, '0%')\n        ];\n        // No need for inner size in angular (gauges) series but still required\n        // for pie series\n        if (chart.angular && !(this instanceof (highcharts_Series_commonjs_highcharts_Series_commonjs2_highcharts_Series_root_Highcharts_Series_default()))) {\n            positions[3] = 0;\n        }\n        for (i = 0; i < 4; ++i) {\n            value = positions[i];\n            handleSlicingRoom = i < 2 || (i === 2 && /%$/.test(value));\n            // I == 0: centerX, relative to width\n            // i == 1: centerY, relative to height\n            // i == 2: size, relative to smallestSize\n            // i == 3: innerSize, relative to size\n            positions[i] = relativeLength(value, [plotWidth, plotHeight, smallestSize, positions[2]][i]) + (handleSlicingRoom ? slicingRoom : 0);\n        }\n        // Inner size cannot be larger than size (#3632)\n        if (positions[3] > positions[2]) {\n            positions[3] = positions[2];\n        }\n        // Thickness overrides innerSize, need to be less than pie size (#6647)\n        if (isNumber(thickness) &&\n            thickness * 2 < positions[2] && thickness > 0) {\n            positions[3] = positions[2] - thickness * 2;\n        }\n        fireEvent(this, 'afterGetCenter', { positions });\n        return positions;\n    }\n    CenteredUtilities.getCenter = getCenter;\n    /**\n     * GetStartAndEndRadians - Calculates start and end angles in radians.\n     * Used in series types such as pie and sunburst.\n     *\n     * @private\n     * @function Highcharts.CenteredSeriesMixin.getStartAndEndRadians\n     *\n     * @param {number} [start]\n     *        Start angle in degrees.\n     *\n     * @param {number} [end]\n     *        Start angle in degrees.\n     *\n     * @return {Highcharts.RadianAngles}\n     *         Returns an object containing start and end angles as radians.\n     */\n    function getStartAndEndRadians(start, end) {\n        const startAngle = isNumber(start) ? start : 0, // Must be a number\n        endAngle = ((isNumber(end) && // Must be a number\n            end > startAngle && // Must be larger than the start angle\n            // difference must be less than 360 degrees\n            (end - startAngle) < 360) ?\n            end :\n            startAngle + 360), correction = -90;\n        return {\n            start: deg2rad * (startAngle + correction),\n            end: deg2rad * (endAngle + correction)\n        };\n    }\n    CenteredUtilities.getStartAndEndRadians = getStartAndEndRadians;\n})(CenteredUtilities || (CenteredUtilities = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Series_CenteredUtilities = (CenteredUtilities);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * @private\n * @interface Highcharts.RadianAngles\n */ /**\n* @name Highcharts.RadianAngles#end\n* @type {number}\n*/ /**\n* @name Highcharts.RadianAngles#start\n* @type {number}\n*/\n''; // Keeps doclets above in JS file\n\n;// ./code/es-modules/Extensions/Pane/PaneComposition.js\n/* *\n *\n *  Imports\n *\n * */\n\nconst { addEvent, correctFloat, defined, pick: PaneComposition_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/** @private */\nfunction chartGetHoverPane(eventArgs) {\n    const chart = this;\n    let hoverPane;\n    if (eventArgs) {\n        chart.pane.forEach((pane) => {\n            const x = eventArgs.chartX - chart.plotLeft, y = eventArgs.chartY - chart.plotTop;\n            if (isInsidePane(x, y, pane.center)) {\n                hoverPane = pane;\n            }\n        });\n    }\n    return hoverPane;\n}\n/** @private */\nfunction compose(ChartClass, PointerClass) {\n    const chartProto = ChartClass.prototype;\n    if (!chartProto.getHoverPane) {\n        chartProto.collectionsWithUpdate.push('pane');\n        chartProto.getHoverPane = chartGetHoverPane;\n        addEvent(ChartClass, 'afterIsInsidePlot', onChartAfterIsInsiderPlot);\n        addEvent(PointerClass, 'afterGetHoverData', onPointerAfterGetHoverData);\n        addEvent(PointerClass, 'beforeGetHoverData', onPointerBeforeGetHoverData);\n    }\n}\n/**\n * Check whether element is inside or outside pane.\n * @private\n * @param  {number} x\n * Element's x coordinate\n * @param  {number} y\n * Element's y coordinate\n * @param  {Array<number>} center\n * Pane's center (x, y) and diameter\n * @param  {number} startAngle\n * Pane's normalized start angle in radians (<-PI, PI>)\n * @param  {number} endAngle\n * Pane's normalized end angle in radians (<-PI, PI>)\n */\nfunction isInsidePane(x, y, center, startAngle, endAngle) {\n    let insideSlice = true;\n    const cx = center[0], cy = center[1];\n    const distance = Math.sqrt(Math.pow(x - cx, 2) + Math.pow(y - cy, 2));\n    if (defined(startAngle) && defined(endAngle)) {\n        // Round angle to N-decimals to avoid numeric errors\n        const angle = Math.atan2(correctFloat(y - cy, 8), correctFloat(x - cx, 8));\n        // Ignore full circle panes:\n        if (endAngle !== startAngle) {\n            // If normalized start angle is bigger than normalized end,\n            // it means angles have different signs. In such situation we\n            // check the <-PI, startAngle> and <endAngle, PI> ranges.\n            if (startAngle > endAngle) {\n                insideSlice = (angle >= startAngle &&\n                    angle <= Math.PI) || (angle <= endAngle &&\n                    angle >= -Math.PI);\n            }\n            else {\n                // In this case, we simple check if angle is within the\n                // <startAngle, endAngle> range\n                insideSlice = angle >= startAngle &&\n                    angle <= correctFloat(endAngle, 8);\n            }\n        }\n    }\n    // Round up radius because x and y values are rounded\n    return distance <= Math.ceil(center[2] / 2) && insideSlice;\n}\n/**\n * Check if (x, y) position is within pane for polar.\n * @private\n */\nfunction onChartAfterIsInsiderPlot(e) {\n    const chart = this;\n    if (chart.polar) {\n        if (e.options.inverted) {\n            [e.x, e.y] = [e.y, e.x];\n        }\n        e.isInsidePlot = chart.pane.some((pane) => isInsidePane(e.x, e.y, pane.center, pane.axis && pane.axis.normalizedStartAngleRad, pane.axis && pane.axis.normalizedEndAngleRad));\n    }\n}\n/**\n *\n */\nfunction onPointerAfterGetHoverData(eventArgs) {\n    const chart = this.chart;\n    if (eventArgs.hoverPoint &&\n        eventArgs.hoverPoint.plotX &&\n        eventArgs.hoverPoint.plotY &&\n        chart.hoverPane &&\n        !isInsidePane(eventArgs.hoverPoint.plotX, eventArgs.hoverPoint.plotY, chart.hoverPane.center)) {\n        eventArgs.hoverPoint = void 0;\n    }\n}\n/** @private */\nfunction onPointerBeforeGetHoverData(eventArgs) {\n    const chart = this.chart;\n    if (chart.polar) {\n        // Find pane we are currently hovering over.\n        chart.hoverPane = chart.getHoverPane(eventArgs);\n        // Edit filter method to handle polar\n        eventArgs.filter = function (s) {\n            return (s.visible &&\n                !(!eventArgs.shared && s.directTouch) && // #3821\n                PaneComposition_pick(s.options.enableMouseTracking, true) &&\n                (!chart.hoverPane || s.xAxis.pane === chart.hoverPane));\n        };\n    }\n    else {\n        chart.hoverPane = void 0;\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst PaneComposition = {\n    compose\n};\n/* harmony default export */ const Pane_PaneComposition = (PaneComposition);\n\n;// ./code/es-modules/Extensions/Pane/PaneDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  API Options\n *\n * */\n/**\n * An array of background items for the pane.\n *\n * @sample {highcharts} highcharts/demo/gauge-speedometer/\n *         Speedometer gauge with multiple backgrounds\n *\n * @type         {Array<*>}\n * @optionparent pane.background\n */\nconst background = {\n    /**\n     * The class name for this background.\n     *\n     * @sample {highcharts} highcharts/css/pane/\n     *         Panes styled by CSS\n     * @sample {highstock} highcharts/css/pane/\n     *         Panes styled by CSS\n     * @sample {highmaps} highcharts/css/pane/\n     *         Panes styled by CSS\n     *\n     * @type      {string}\n     * @default   highcharts-pane\n     * @since     5.0.0\n     * @apioption pane.background.className\n     */\n    /**\n     * The shape of the pane background. When `solid`, the background\n     * is circular. When `arc`, the background extends only from the min\n     * to the max of the value axis.\n     *\n     * @type    {Highcharts.PaneBackgroundShapeValue}\n     * @since   2.3.0\n     * @product highcharts\n     */\n    shape: 'circle',\n    /**\n     * The border radius of the pane background when the shape is `arc`. Can be\n     * a number (pixels) or a percentage string.\n     *\n     * @since 11.4.2\n     * @sample  highcharts/series-solidgauge/pane-borderradius\n     *          Circular gauge and pane with equal border radius\n     * @product highcharts\n     * @type    {number|string}\n     */\n    borderRadius: 0,\n    /**\n     * The pixel border width of the pane background.\n     *\n     * @since 2.3.0\n     * @product highcharts\n     */\n    borderWidth: 1,\n    /**\n     * The pane background border color.\n     *\n     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @since   2.3.0\n     * @product highcharts\n     */\n    borderColor: \"#cccccc\" /* Palette.neutralColor20 */,\n    /**\n     * The background color or gradient for the pane.\n     *\n     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @default { linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, stops: [[0, #ffffff], [1, #e6e6e6]] }\n     * @since   2.3.0\n     * @product highcharts\n     */\n    backgroundColor: {\n        /** @ignore-option */\n        linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },\n        /** @ignore-option */\n        stops: [\n            [0, \"#ffffff\" /* Palette.backgroundColor */],\n            [1, \"#e6e6e6\" /* Palette.neutralColor10 */]\n        ]\n    },\n    /** @ignore-option */\n    from: -Number.MAX_VALUE, // Corrected to axis min\n    /**\n     * The inner radius of the pane background. Can be either numeric\n     * (pixels) or a percentage string.\n     *\n     * @type    {number|string}\n     * @since   2.3.0\n     * @product highcharts\n     */\n    innerRadius: 0,\n    /** @ignore-option */\n    to: Number.MAX_VALUE, // Corrected to axis max\n    /**\n     * The outer radius of the circular pane background. Can be either\n     * numeric (pixels) or a percentage string.\n     *\n     * @type     {number|string}\n     * @since    2.3.0\n     * @product  highcharts\n     */\n    outerRadius: '105%'\n};\n/**\n * The pane serves as a container for axes and backgrounds for circular\n * gauges and polar charts.\n *\n * @type         {*|Array<*>}\n * @since        2.3.0\n * @product      highcharts\n * @requires     highcharts-more\n * @optionparent pane\n */\nconst pane = {\n    /**\n     * The end angle of the polar X axis or gauge value axis, given in\n     * degrees where 0 is north. Defaults to [startAngle](#pane.startAngle)\n     * + 360.\n     *\n     * @sample {highcharts} highcharts/demo/gauge-vu-meter/\n     *         VU-meter with custom start and end angle\n     *\n     * @type      {number}\n     * @since     2.3.0\n     * @product   highcharts\n     * @apioption pane.endAngle\n     */\n    /**\n     * The center of a polar chart or angular gauge, given as an array\n     * of [x, y] positions. Positions can be given as integers that\n     * transform to pixels, or as percentages of the plot area size.\n     *\n     * @sample {highcharts} highcharts/demo/gauge-vu-meter/\n     *         Two gauges with different center\n     *\n     * @type    {Array<string|number>}\n     * @default [\"50%\", \"50%\"]\n     * @since   2.3.0\n     * @product highcharts\n     */\n    center: ['50%', '50%'],\n    /**\n     * The size of the pane, either as a number defining pixels, or a\n     * percentage defining a percentage of the available plot area (the\n     * smallest of the plot height or plot width).\n     *\n     * @sample {highcharts} highcharts/demo/gauge-vu-meter/\n     *         Smaller size\n     *\n     * @type    {number|string}\n     * @product highcharts\n     */\n    size: '85%',\n    /**\n     * The inner size of the pane, either as a number defining pixels, or a\n     * percentage defining a percentage of the pane's size.\n     *\n     * @sample {highcharts} highcharts/series-polar/column-inverted-inner\n     *         The inner size set to 20%\n     *\n     * @type    {number|string}\n     * @product highcharts\n     */\n    innerSize: '0%',\n    /**\n     * The start angle of the polar X axis or gauge axis, given in degrees\n     * where 0 is north. Defaults to 0.\n     *\n     * @sample {highcharts} highcharts/demo/gauge-vu-meter/\n     *         VU-meter with custom start and end angle\n     *\n     * @since   2.3.0\n     * @product highcharts\n     */\n    startAngle: 0\n};\n/* *\n *\n *  Default Export\n *\n * */\nconst PaneDefaults = {\n    pane,\n    background\n};\n/* harmony default export */ const Pane_PaneDefaults = (PaneDefaults);\n\n;// ./code/es-modules/Extensions/Pane/Pane.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\n\n\nconst { extend, merge, splat } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Class\n *\n * */\n/**\n * The Pane object allows options that are common to a set of X and Y axes.\n *\n * In the future, this can be extended to basic Highcharts and Highcharts Stock.\n *\n * @private\n * @class\n * @name Highcharts.Pane\n * @param {Highcharts.PaneOptions} options\n * @param {Highcharts.Chart} chart\n */\nclass Pane {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(options, chart) {\n        this.coll = 'pane'; // Member of chart.pane\n        this.init(options, chart);\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Initialize the Pane object\n     *\n     * @private\n     * @function Highcharts.Pane#init\n     *\n     * @param {Highcharts.PaneOptions} options\n     *\n     * @param {Highcharts.Chart} chart\n     */\n    init(options, chart) {\n        this.chart = chart;\n        this.background = [];\n        chart.pane.push(this);\n        this.setOptions(options);\n    }\n    /**\n     * @private\n     * @function Highcharts.Pane#setOptions\n     *\n     * @param {Highcharts.PaneOptions} options\n     */\n    setOptions(options) {\n        // Set options. Angular charts have a default background (#3318)\n        this.options = options = merge(Pane_PaneDefaults.pane, this.chart.angular ? { background: {} } : void 0, options);\n    }\n    /**\n     * Render the pane with its backgrounds.\n     *\n     * @private\n     * @function Highcharts.Pane#render\n     */\n    render() {\n        const options = this.options, renderer = this.chart.renderer;\n        if (!this.group) {\n            this.group = renderer.g('pane-group')\n                .attr({ zIndex: options.zIndex || 0 })\n                .add();\n        }\n        this.updateCenter();\n        let backgroundOption = this.options.background;\n        // Render the backgrounds\n        if (backgroundOption) {\n            backgroundOption = splat(backgroundOption);\n            const len = Math.max(backgroundOption.length, this.background.length || 0);\n            for (let i = 0; i < len; i++) {\n                // #6641 - if axis exists, chart is circular and apply\n                // background\n                if (backgroundOption[i] && this.axis) {\n                    this.renderBackground(merge(Pane_PaneDefaults.background, backgroundOption[i]), i);\n                }\n                else if (this.background[i]) {\n                    this.background[i] = this.background[i].destroy();\n                    this.background.splice(i, 1);\n                }\n            }\n        }\n    }\n    /**\n     * Render an individual pane background.\n     *\n     * @private\n     * @function Highcharts.Pane#renderBackground\n     *\n     * @param {Highcharts.PaneBackgroundOptions} backgroundOptions\n     *        Background options\n     *\n     * @param {number} i\n     *        The index of the background in this.backgrounds\n     */\n    renderBackground(backgroundOptions, i) {\n        const attribs = {\n            'class': 'highcharts-pane ' + (backgroundOptions.className || '')\n        };\n        let method = 'animate';\n        if (!this.chart.styledMode) {\n            extend(attribs, {\n                'fill': backgroundOptions.backgroundColor,\n                'stroke': backgroundOptions.borderColor,\n                'stroke-width': backgroundOptions.borderWidth\n            });\n        }\n        if (!this.background[i]) {\n            this.background[i] = this.chart.renderer\n                .path()\n                .add(this.group);\n            method = 'attr';\n        }\n        this.background[i][method]({\n            'd': this.axis.getPlotBandPath(backgroundOptions.from, backgroundOptions.to, backgroundOptions)\n        }).attr(attribs);\n    }\n    /**\n     * Gets the center for the pane and its axis.\n     *\n     * @private\n     * @function Highcharts.Pane#updateCenter\n     * @param {Highcharts.Axis} [axis]\n     */\n    updateCenter(axis) {\n        this.center = (axis ||\n            this.axis ||\n            {}).center = Series_CenteredUtilities.getCenter.call(this);\n    }\n    /**\n     * Destroy the pane item\n     *\n     * @ignore\n     * @private\n     * @function Highcharts.Pane#destroy\n     * /\n    destroy: function () {\n        erase(this.chart.pane, this);\n        this.background.forEach(function (background) {\n            background.destroy();\n        });\n        this.background.length = 0;\n        this.group = this.group.destroy();\n    },\n    */\n    /**\n     * Update the pane item with new options\n     *\n     * @private\n     * @function Highcharts.Pane#update\n     * @param {Highcharts.PaneOptions} options\n     *        New pane options\n     * @param {boolean} [redraw]\n     */\n    update(options, redraw) {\n        merge(true, this.options, options);\n        this.setOptions(this.options);\n        this.render();\n        this.chart.axes.forEach(function (axis) {\n            if (axis.pane === this) {\n                axis.pane = null;\n                axis.update({}, redraw);\n            }\n        }, this);\n    }\n}\n/* *\n *\n *  Static Properties\n *\n * */\nPane.compose = Pane_PaneComposition.compose;\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Pane_Pane = (Pane);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * @typedef {\"arc\"|\"circle\"|\"solid\"} Highcharts.PaneBackgroundShapeValue\n */\n''; // Keeps doclets above in JS file\n\n;// ./code/es-modules/Series/AreaRange/AreaRangePoint.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 { area: { prototype: { pointClass: AreaPoint, pointClass: { prototype: areaProto } } } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes;\n\nconst { defined: AreaRangePoint_defined, isNumber: AreaRangePoint_isNumber } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Class\n *\n * */\nclass AreaRangePoint extends AreaPoint {\n    /**\n     * Range series only. The high or maximum value for each data point.\n     * @name Highcharts.Point#high\n     * @type {number|undefined}\n     */\n    /**\n     * Range series only. The low or minimum value for each data point.\n     * @name Highcharts.Point#low\n     * @type {number|undefined}\n     */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    setState() {\n        const prevState = this.state, series = this.series, isPolar = series.chart.polar;\n        if (!AreaRangePoint_defined(this.plotHigh)) {\n            // Boost doesn't calculate plotHigh\n            this.plotHigh = series.yAxis.toPixels(this.high, true);\n        }\n        if (!AreaRangePoint_defined(this.plotLow)) {\n            // Boost doesn't calculate plotLow\n            this.plotLow = this.plotY = series.yAxis.toPixels(this.low, true);\n        }\n        series.lowerStateMarkerGraphic = series.stateMarkerGraphic;\n        series.stateMarkerGraphic = series.upperStateMarkerGraphic;\n        // Change state also for the top marker\n        this.graphic = this.graphics && this.graphics[1];\n        this.plotY = this.plotHigh;\n        if (isPolar && AreaRangePoint_isNumber(this.plotHighX)) {\n            this.plotX = this.plotHighX;\n        }\n        // Top state:\n        areaProto.setState.apply(this, arguments);\n        this.state = prevState;\n        // Now restore defaults\n        this.plotY = this.plotLow;\n        this.graphic = this.graphics && this.graphics[0];\n        if (isPolar && AreaRangePoint_isNumber(this.plotLowX)) {\n            this.plotX = this.plotLowX;\n        }\n        series.upperStateMarkerGraphic = series.stateMarkerGraphic;\n        series.stateMarkerGraphic = series.lowerStateMarkerGraphic;\n        // Lower marker is stored at stateMarkerGraphic\n        // to avoid reference duplication (#7021)\n        series.lowerStateMarkerGraphic = void 0;\n        const originalSettings = series.modifyMarkerSettings();\n        // Bottom state\n        areaProto.setState.apply(this, arguments);\n        // Restore previous state\n        series.restoreMarkerSettings(originalSettings);\n    }\n    haloPath() {\n        const isPolar = this.series.chart.polar;\n        let path = [];\n        // Bottom halo\n        this.plotY = this.plotLow;\n        if (isPolar && AreaRangePoint_isNumber(this.plotLowX)) {\n            this.plotX = this.plotLowX;\n        }\n        if (this.isInside) {\n            path = areaProto.haloPath.apply(this, arguments);\n        }\n        // Top halo\n        this.plotY = this.plotHigh;\n        if (isPolar && AreaRangePoint_isNumber(this.plotHighX)) {\n            this.plotX = this.plotHighX;\n        }\n        if (this.isTopInside) {\n            path = path.concat(areaProto.haloPath.apply(this, arguments));\n        }\n        return path;\n    }\n    isValid() {\n        return AreaRangePoint_isNumber(this.low) && AreaRangePoint_isNumber(this.high);\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const AreaRange_AreaRangePoint = (AreaRangePoint);\n\n;// ./code/es-modules/Series/AreaRange/AreaRangeSeries.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 { noop } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { area: AreaSeries, area: { prototype: AreaRangeSeries_areaProto }, column: { prototype: columnProto } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes;\n\nconst { addEvent: AreaRangeSeries_addEvent, defined: AreaRangeSeries_defined, extend: AreaRangeSeries_extend, isArray, isNumber: AreaRangeSeries_isNumber, pick: AreaRangeSeries_pick, merge: AreaRangeSeries_merge } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Constants\n *\n * */\n/**\n * The area range series is a carteseian series with higher and lower values for\n * each point along an X axis, where the area between the values is shaded.\n *\n * @sample {highcharts} highcharts/demo/arearange/\n *         Area range chart\n * @sample {highstock} stock/demo/arearange/\n *         Area range chart\n *\n * @extends      plotOptions.area\n * @product      highcharts highstock\n * @excluding    stack, stacking\n * @requires     highcharts-more\n * @optionparent plotOptions.arearange\n *\n * @private\n */\nconst areaRangeSeriesOptions = {\n    /**\n     * @see [fillColor](#plotOptions.arearange.fillColor)\n     * @see [fillOpacity](#plotOptions.arearange.fillOpacity)\n     *\n     * @apioption plotOptions.arearange.color\n     */\n    /**\n     * @default   low\n     * @apioption plotOptions.arearange.colorKey\n     */\n    /**\n     * @see [color](#plotOptions.arearange.color)\n     * @see [fillOpacity](#plotOptions.arearange.fillOpacity)\n     *\n     * @apioption plotOptions.arearange.fillColor\n     */\n    /**\n     * @see [color](#plotOptions.arearange.color)\n     * @see [fillColor](#plotOptions.arearange.fillColor)\n     *\n     * @default   {highcharts} 0.75\n     * @default   {highstock} 0.75\n     * @apioption plotOptions.arearange.fillOpacity\n     */\n    /**\n     * Whether to apply a drop shadow to the graph line. Since 2.3 the\n     * shadow can be an object configuration containing `color`, `offsetX`,\n     * `offsetY`, `opacity` and `width`.\n     *\n     * @type      {boolean|Highcharts.ShadowOptionsObject}\n     * @product   highcharts\n     * @apioption plotOptions.arearange.shadow\n     */\n    /**\n     * Pixel width of the arearange graph line.\n     *\n     * @since 2.3.0\n     *\n     * @private\n     */\n    lineWidth: 1,\n    /**\n     * @type {number|null}\n     */\n    threshold: null,\n    tooltip: {\n        pointFormat: '<span style=\"color:{series.color}\">\\u25CF</span> ' +\n            '{series.name}: <b>{point.low}</b> - <b>{point.high}</b><br/>'\n    },\n    /**\n     * Whether the whole area or just the line should respond to mouseover\n     * tooltips and other mouse or touch events.\n     *\n     * @since 2.3.0\n     *\n     * @private\n     */\n    trackByArea: true,\n    /**\n     * Extended data labels for range series types. Range series data\n     * labels use no `x` and `y` options. Instead, they have `xLow`,\n     * `xHigh`, `yLow` and `yHigh` options to allow the higher and lower\n     * data label sets individually.\n     *\n     * @declare Highcharts.SeriesAreaRangeDataLabelsOptionsObject\n     * @exclude x, y\n     * @since   2.3.0\n     * @product highcharts highstock\n     *\n     * @private\n     */\n    dataLabels: {\n        align: void 0,\n        verticalAlign: void 0,\n        /**\n         * X offset of the lower data labels relative to the point value.\n         *\n         * @sample highcharts/plotoptions/arearange-datalabels/\n         *         Data labels on range series\n         * @sample highcharts/plotoptions/arearange-datalabels/\n         *         Data labels on range series\n         */\n        xLow: 0,\n        /**\n         * X offset of the higher data labels relative to the point value.\n         *\n         * @sample highcharts/plotoptions/arearange-datalabels/\n         *         Data labels on range series\n         */\n        xHigh: 0,\n        /**\n         * Y offset of the lower data labels relative to the point value.\n         *\n         * @sample highcharts/plotoptions/arearange-datalabels/\n         *         Data labels on range series\n         */\n        yLow: 0,\n        /**\n         * Y offset of the higher data labels relative to the point value.\n         *\n         * @sample highcharts/plotoptions/arearange-datalabels/\n         *         Data labels on range series\n         */\n        yHigh: 0\n    }\n};\n/* *\n *\n *  Class\n *\n * */\n/**\n * The AreaRange series type.\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.arearange\n *\n * @augments Highcharts.Series\n */\nclass AreaRangeSeries extends AreaSeries {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    toYData(point) {\n        return [point.low, point.high];\n    }\n    /**\n     * Translate a point's plotHigh from the internal angle and radius measures\n     * to true plotHigh coordinates. This is an addition of the toXY method\n     * found in Polar.js, because it runs too early for arearanges to be\n     * considered (#3419).\n     * @private\n     */\n    highToXY(point) {\n        // Find the polar plotX and plotY\n        const chart = this.chart, xy = this.xAxis.postTranslate(point.rectPlotX || 0, this.yAxis.len - (point.plotHigh || 0));\n        point.plotHighX = xy.x - chart.plotLeft;\n        point.plotHigh = xy.y - chart.plotTop;\n        point.plotLowX = point.plotX;\n    }\n    /**\n     * Extend the line series' getSegmentPath method by applying the segment\n     * path to both lower and higher values of the range.\n     * @private\n     */\n    getGraphPath(points) {\n        const highPoints = [], highAreaPoints = [], getGraphPath = AreaRangeSeries_areaProto.getGraphPath, options = this.options, polar = this.chart.polar, connectEnds = polar && options.connectEnds !== false, connectNulls = options.connectNulls;\n        let i, point, pointShim, step = options.step;\n        points = points || this.points;\n        // Create the top line and the top part of the area fill. The area fill\n        // compensates for null points by drawing down to the lower graph,\n        // moving across the null gap and starting again at the lower graph.\n        i = points.length;\n        while (i--) {\n            point = points[i];\n            // Support for polar\n            const highAreaPoint = polar ? {\n                plotX: point.rectPlotX,\n                plotY: point.yBottom,\n                doCurve: false // #5186, gaps in areasplinerange fill\n            } : {\n                plotX: point.plotX,\n                plotY: point.plotY,\n                doCurve: false // #5186, gaps in areasplinerange fill\n            };\n            if (!point.isNull &&\n                !connectEnds &&\n                !connectNulls &&\n                (!points[i + 1] || points[i + 1].isNull)) {\n                highAreaPoints.push(highAreaPoint);\n            }\n            pointShim = {\n                polarPlotY: point.polarPlotY,\n                rectPlotX: point.rectPlotX,\n                yBottom: point.yBottom,\n                // `plotHighX` is for polar charts\n                plotX: AreaRangeSeries_pick(point.plotHighX, point.plotX),\n                plotY: point.plotHigh,\n                isNull: point.isNull\n            };\n            highAreaPoints.push(pointShim);\n            highPoints.push(pointShim);\n            if (!point.isNull &&\n                !connectEnds &&\n                !connectNulls &&\n                (!points[i - 1] || points[i - 1].isNull)) {\n                highAreaPoints.push(highAreaPoint);\n            }\n        }\n        // Get the paths\n        const lowerPath = getGraphPath.call(this, points);\n        if (step) {\n            if (step === true) {\n                step = 'left';\n            }\n            options.step = {\n                left: 'right',\n                center: 'center',\n                right: 'left'\n            }[step]; // Swap for reading in getGraphPath\n        }\n        const higherPath = getGraphPath.call(this, highPoints);\n        const higherAreaPath = getGraphPath.call(this, highAreaPoints);\n        options.step = step;\n        // Create a line on both top and bottom of the range\n        const linePath = [].concat(lowerPath, higherPath);\n        // For the area path, we need to change the 'move' statement into\n        // 'lineTo'\n        if (!this.chart.polar &&\n            higherAreaPath[0] &&\n            higherAreaPath[0][0] === 'M') {\n            // This probably doesn't work for spline\n            higherAreaPath[0] = [\n                'L',\n                higherAreaPath[0][1],\n                higherAreaPath[0][2]\n            ];\n        }\n        this.graphPath = linePath;\n        this.areaPath = lowerPath.concat(higherAreaPath);\n        // Prepare for sideways animation\n        linePath.isArea = true;\n        linePath.xMap = lowerPath.xMap;\n        this.areaPath.xMap = lowerPath.xMap;\n        return linePath;\n    }\n    /**\n     * Extend the basic drawDataLabels method by running it for both lower and\n     * higher values.\n     * @private\n     */\n    drawDataLabels() {\n        const data = this.points, length = data.length, originalDataLabels = [], dataLabelOptions = this.options.dataLabels, inverted = this.chart.inverted;\n        let i, point, up, upperDataLabelOptions, lowerDataLabelOptions;\n        if (dataLabelOptions) {\n            // Split into upper and lower options. If data labels is an array,\n            // the first element is the upper label, the second is the lower.\n            //\n            // TODO: We want to change this and allow multiple labels for both\n            // upper and lower values in the future - introducing some options\n            // for which point value to use as Y for the dataLabel, so that this\n            // could be handled in Series.drawDataLabels. This would also\n            // improve performance since we now have to loop over all the points\n            // multiple times to work around the data label logic.\n            if (isArray(dataLabelOptions)) {\n                upperDataLabelOptions = dataLabelOptions[0] || {\n                    enabled: false\n                };\n                lowerDataLabelOptions = dataLabelOptions[1] || {\n                    enabled: false\n                };\n            }\n            else {\n                // Make copies\n                upperDataLabelOptions = AreaRangeSeries_extend({}, dataLabelOptions);\n                upperDataLabelOptions.x = dataLabelOptions.xHigh;\n                upperDataLabelOptions.y = dataLabelOptions.yHigh;\n                lowerDataLabelOptions = AreaRangeSeries_extend({}, dataLabelOptions);\n                lowerDataLabelOptions.x = dataLabelOptions.xLow;\n                lowerDataLabelOptions.y = dataLabelOptions.yLow;\n            }\n            // Draw upper labels\n            if (upperDataLabelOptions.enabled || this.hasDataLabels?.()) {\n                // Set preliminary values for plotY and dataLabel\n                // and draw the upper labels\n                i = length;\n                while (i--) {\n                    point = data[i];\n                    if (point) {\n                        const { plotHigh = 0, plotLow = 0 } = point;\n                        up = upperDataLabelOptions.inside ?\n                            plotHigh < plotLow :\n                            plotHigh > plotLow;\n                        point.y = point.high;\n                        point._plotY = point.plotY;\n                        point.plotY = plotHigh;\n                        // Store original data labels and set preliminary label\n                        // objects to be picked up in the uber method\n                        originalDataLabels[i] = point.dataLabel;\n                        point.dataLabel = point.dataLabelUpper;\n                        // Set the default offset\n                        point.below = up;\n                        if (inverted) {\n                            if (!upperDataLabelOptions.align) {\n                                upperDataLabelOptions.align = up ?\n                                    'right' : 'left';\n                            }\n                        }\n                        else {\n                            if (!upperDataLabelOptions.verticalAlign) {\n                                upperDataLabelOptions.verticalAlign = up ?\n                                    'top' :\n                                    'bottom';\n                            }\n                        }\n                    }\n                }\n                this.options.dataLabels = upperDataLabelOptions;\n                if (AreaRangeSeries_areaProto.drawDataLabels) {\n                    // #1209:\n                    AreaRangeSeries_areaProto.drawDataLabels.apply(this, arguments);\n                }\n                // Reset state after the upper labels were created. Move\n                // it to point.dataLabelUpper and reassign the originals.\n                // We do this here to support not drawing a lower label.\n                i = length;\n                while (i--) {\n                    point = data[i];\n                    if (point) {\n                        point.dataLabelUpper = point.dataLabel;\n                        point.dataLabel = originalDataLabels[i];\n                        delete point.dataLabels;\n                        point.y = point.low;\n                        point.plotY = point._plotY;\n                    }\n                }\n            }\n            // Draw lower labels\n            if (lowerDataLabelOptions.enabled || this.hasDataLabels?.()) {\n                i = length;\n                while (i--) {\n                    point = data[i];\n                    if (point) {\n                        const { plotHigh = 0, plotLow = 0 } = point;\n                        up = lowerDataLabelOptions.inside ?\n                            plotHigh < plotLow :\n                            plotHigh > plotLow;\n                        // Set the default offset\n                        point.below = !up;\n                        if (inverted) {\n                            if (!lowerDataLabelOptions.align) {\n                                lowerDataLabelOptions.align = up ?\n                                    'left' : 'right';\n                            }\n                        }\n                        else {\n                            if (!lowerDataLabelOptions.verticalAlign) {\n                                lowerDataLabelOptions.verticalAlign = up ?\n                                    'bottom' :\n                                    'top';\n                            }\n                        }\n                    }\n                }\n                this.options.dataLabels = lowerDataLabelOptions;\n                if (AreaRangeSeries_areaProto.drawDataLabels) {\n                    AreaRangeSeries_areaProto.drawDataLabels.apply(this, arguments);\n                }\n            }\n            // Merge upper and lower into point.dataLabels for later destroying\n            if (upperDataLabelOptions.enabled) {\n                i = length;\n                while (i--) {\n                    point = data[i];\n                    if (point) {\n                        point.dataLabels = [\n                            point.dataLabelUpper,\n                            point.dataLabel\n                        ].filter(function (label) {\n                            return !!label;\n                        });\n                    }\n                }\n            }\n            // Reset options\n            this.options.dataLabels = dataLabelOptions;\n        }\n    }\n    alignDataLabel() {\n        columnProto.alignDataLabel.apply(this, arguments);\n    }\n    modifyMarkerSettings() {\n        const series = this, originalMarkerSettings = {\n            marker: series.options.marker,\n            symbol: series.symbol\n        };\n        if (series.options.lowMarker) {\n            const { options: { marker, lowMarker } } = series;\n            series.options.marker = AreaRangeSeries_merge(marker, lowMarker);\n            if (lowMarker.symbol) {\n                series.symbol = lowMarker.symbol;\n            }\n        }\n        return originalMarkerSettings;\n    }\n    restoreMarkerSettings(originalSettings) {\n        const series = this;\n        series.options.marker = originalSettings.marker;\n        series.symbol = originalSettings.symbol;\n    }\n    drawPoints() {\n        const series = this, pointLength = series.points.length;\n        let i, point;\n        const originalSettings = series.modifyMarkerSettings();\n        // Draw bottom points\n        AreaRangeSeries_areaProto.drawPoints.apply(series, arguments);\n        // Restore previous state\n        series.restoreMarkerSettings(originalSettings);\n        // Prepare drawing top points\n        i = 0;\n        while (i < pointLength) {\n            point = series.points[i];\n            /**\n             * Array for multiple SVG graphics representing the point in the\n             * chart. Only used in cases where the point can not be represented\n             * by a single graphic.\n             *\n             * @see Highcharts.Point#graphic\n             *\n             * @name Highcharts.Point#graphics\n             * @type {Array<Highcharts.SVGElement>|undefined}\n             */\n            point.graphics = point.graphics || [];\n            // Save original props to be overridden by temporary props for top\n            // points\n            point.origProps = {\n                plotY: point.plotY,\n                plotX: point.plotX,\n                isInside: point.isInside,\n                negative: point.negative,\n                zone: point.zone,\n                y: point.y\n            };\n            if (point.graphic || point.graphics[0]) {\n                point.graphics[0] = point.graphic;\n            }\n            point.graphic = point.graphics[1];\n            point.plotY = point.plotHigh;\n            if (AreaRangeSeries_defined(point.plotHighX)) {\n                point.plotX = point.plotHighX;\n            }\n            point.y = AreaRangeSeries_pick(point.high, point.origProps.y); // #15523\n            point.negative = point.y < (series.options.threshold || 0);\n            if (series.zones.length) {\n                point.zone = point.getZone();\n            }\n            if (!series.chart.polar) {\n                point.isInside = point.isTopInside = (typeof point.plotY !== 'undefined' &&\n                    point.plotY >= 0 &&\n                    point.plotY <= series.yAxis.len && // #3519\n                    point.plotX >= 0 &&\n                    point.plotX <= series.xAxis.len);\n            }\n            i++;\n        }\n        // Draw top points\n        AreaRangeSeries_areaProto.drawPoints.apply(series, arguments);\n        // Reset top points preliminary modifications\n        i = 0;\n        while (i < pointLength) {\n            point = series.points[i];\n            point.graphics = point.graphics || [];\n            if (point.graphic || point.graphics[1]) {\n                point.graphics[1] = point.graphic;\n            }\n            point.graphic = point.graphics[0];\n            if (point.origProps) {\n                AreaRangeSeries_extend(point, point.origProps);\n                delete point.origProps;\n            }\n            i++;\n        }\n    }\n    hasMarkerChanged(options, oldOptions) {\n        const lowMarker = options.lowMarker, oldMarker = oldOptions.lowMarker || {};\n        return (lowMarker && (lowMarker.enabled === false ||\n            oldMarker.symbol !== lowMarker.symbol || // #10870, #15946\n            oldMarker.height !== lowMarker.height || // #16274\n            oldMarker.width !== lowMarker.width // #16274\n        )) || super.hasMarkerChanged(options, oldOptions);\n    }\n}\n/**\n *\n *  Static Properties\n *\n */\nAreaRangeSeries.defaultOptions = AreaRangeSeries_merge(AreaSeries.defaultOptions, areaRangeSeriesOptions);\nAreaRangeSeries_addEvent(AreaRangeSeries, 'afterTranslate', function () {\n    // Set plotLow and plotHigh\n    // Rules out lollipop, but lollipop should not inherit range series in the\n    // first place\n    if (this.pointArrayMap.join(',') === 'low,high') {\n        this.points.forEach((point) => {\n            const high = point.high, plotY = point.plotY;\n            if (point.isNull) {\n                point.plotY = void 0;\n            }\n            else {\n                point.plotLow = plotY;\n                // Calculate plotHigh value based on each yAxis scale (#15752)\n                point.plotHigh = AreaRangeSeries_isNumber(high) ? this.yAxis.translate(this.dataModify ?\n                    this.dataModify.modifyValue(high) : high, false, true, void 0, true) : void 0;\n                if (this.dataModify) {\n                    point.yBottom = point.plotHigh;\n                }\n            }\n        });\n    }\n}, { order: 0 });\nAreaRangeSeries_addEvent(AreaRangeSeries, 'afterTranslate', function () {\n    this.points.forEach((point) => {\n        // Postprocessing after the PolarComposition's afterTranslate\n        if (this.chart.polar) {\n            this.highToXY(point);\n            point.plotLow = point.plotY;\n            point.tooltipPos = [\n                ((point.plotHighX || 0) + (point.plotLowX || 0)) / 2,\n                ((point.plotHigh || 0) + (point.plotLow || 0)) / 2\n            ];\n            // Put the tooltip in the middle of the range\n        }\n        else {\n            const tooltipPos = point.pos(false, point.plotLow), posHigh = point.pos(false, point.plotHigh);\n            if (tooltipPos && posHigh) {\n                tooltipPos[0] = (tooltipPos[0] + posHigh[0]) / 2;\n                tooltipPos[1] = (tooltipPos[1] + posHigh[1]) / 2;\n            }\n            point.tooltipPos = tooltipPos;\n        }\n    });\n}, { order: 3 });\nAreaRangeSeries_extend(AreaRangeSeries.prototype, {\n    deferTranslatePolar: true,\n    pointArrayMap: ['low', 'high'],\n    pointClass: AreaRange_AreaRangePoint,\n    pointValKey: 'low',\n    setStackedPoints: noop\n});\nhighcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default().registerSeriesType('arearange', AreaRangeSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const AreaRange_AreaRangeSeries = (AreaRangeSeries);\n\n;// ./code/es-modules/Series/AreaSplineRange/AreaSplineRangeSeries.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 { spline: { prototype: splineProto } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes;\n\nconst { merge: AreaSplineRangeSeries_merge, extend: AreaSplineRangeSeries_extend } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Class\n *\n * */\n/**\n * The areasplinerange series type.\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.areasplinerange\n *\n * @augments Highcharts.Series\n */\nclass AreaSplineRangeSeries extends AreaRange_AreaRangeSeries {\n}\n/* *\n *\n *  Static Properties\n *\n * */\nAreaSplineRangeSeries.defaultOptions = AreaSplineRangeSeries_merge(AreaRange_AreaRangeSeries.defaultOptions);\nAreaSplineRangeSeries_extend(AreaSplineRangeSeries.prototype, {\n    getPointSpline: splineProto.getPointSpline\n});\nhighcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default().registerSeriesType('areasplinerange', AreaSplineRangeSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const AreaSplineRange_AreaSplineRangeSeries = ((/* unused pure expression or super */ null && (AreaSplineRangeSeries)));\n/* *\n *\n *  API Options\n *\n * */\n/**\n * The area spline range is a cartesian series type with higher and\n * lower Y values along an X axis. The area inside the range is colored, and\n * the graph outlining the area is a smoothed spline.\n *\n * @sample {highstock|highstock} stock/demo/areasplinerange/\n *         Area spline range\n *\n * @extends   plotOptions.arearange\n * @since     2.3.0\n * @excluding step, boostThreshold, boostBlending\n * @product   highcharts highstock\n * @requires  highcharts-more\n * @apioption plotOptions.areasplinerange\n */\n/**\n * @see [fillColor](#plotOptions.areasplinerange.fillColor)\n * @see [fillOpacity](#plotOptions.areasplinerange.fillOpacity)\n *\n * @apioption plotOptions.areasplinerange.color\n */\n/**\n * @see [color](#plotOptions.areasplinerange.color)\n * @see [fillOpacity](#plotOptions.areasplinerange.fillOpacity)\n *\n * @apioption plotOptions.areasplinerange.fillColor\n */\n/**\n * @see [color](#plotOptions.areasplinerange.color)\n * @see [fillColor](#plotOptions.areasplinerange.fillColor)\n *\n * @default   0.75\n * @apioption plotOptions.areasplinerange.fillOpacity\n */\n/**\n * A `areasplinerange` series. If the [type](#series.areasplinerange.type)\n * option is not specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends   series,plotOptions.areasplinerange\n * @excluding dataParser, dataURL, stack, step, boostThreshold, boostBlending\n * @product   highcharts highstock\n * @requires  highcharts-more\n * @apioption series.areasplinerange\n */\n/**\n * @see [fillColor](#series.areasplinerange.fillColor)\n * @see [fillOpacity](#series.areasplinerange.fillOpacity)\n *\n * @apioption series.areasplinerange.color\n */\n/**\n * An array of data points for the series. For the `areasplinerange`\n * series type, points can be given in the following ways:\n *\n * 1. An array of arrays with 3 or 2 values. In this case, the values correspond\n *    to `x,low,high`. If the first value is a string, it is applied as the name\n *    of the point, and the `x` value is inferred. The `x` value can also be\n *    omitted, in which case the inner arrays should be of length 2\\. Then the\n *    `x` value is automatically calculated, either starting at 0 and\n *    incremented by 1, or from `pointStart` and `pointInterval` given in the\n *    series options.\n *    ```js\n *    data: [\n *        [0, 0, 5],\n *        [1, 9, 1],\n *        [2, 5, 2]\n *    ]\n *    ```\n *\n * 2. An array of objects with named values. The following snippet shows only a\n *    few settings, see the complete options set below. If the total number of\n *    data points exceeds the series'\n *    [turboThreshold](#series.areasplinerange.turboThreshold), this option is\n *    not available.\n *    ```js\n *    data: [{\n *        x: 1,\n *        low: 5,\n *        high: 0,\n *        name: \"Point2\",\n *        color: \"#00FF00\"\n *    }, {\n *        x: 1,\n *        low: 4,\n *        high: 1,\n *        name: \"Point1\",\n *        color: \"#FF00FF\"\n *    }]\n *    ```\n *\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n *         Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n *         Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n *         Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n *         Config objects\n *\n * @type      {Array<Array<(number|string),number>|Array<(number|string),number,number>|*>}\n * @extends   series.arearange.data\n * @product   highcharts highstock\n * @apioption series.areasplinerange.data\n */\n/**\n * @see [color](#series.areasplinerange.color)\n * @see [fillOpacity](#series.areasplinerange.fillOpacity)\n *\n * @apioption series.areasplinerange.fillColor\n */\n/**\n * @see [color](#series.areasplinerange.color)\n * @see [fillColor](#series.areasplinerange.fillColor)\n *\n * @default   0.75\n * @apioption series.areasplinerange.fillOpacity\n */\n''; // Adds doclets above to transpiled file\n\n;// ./code/es-modules/Series/BoxPlot/BoxPlotSeriesDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  API Options\n *\n * */\n/**\n * A box plot is a convenient way of depicting groups of data through their\n * five-number summaries: the smallest observation (sample minimum), lower\n * quartile (Q1), median (Q2), upper quartile (Q3), and largest observation\n * (sample maximum).\n *\n * @sample highcharts/demo/box-plot/\n *         Box plot\n * @sample {highcharts} highcharts/css/boxplot/\n *         Box plot in styled mode\n * @sample {highcharts} highcharts/series-scatter/jitter-boxplot\n *         Jittered scatter plot on top of a box plot\n *\n * @extends      plotOptions.column\n * @excluding    borderColor, borderRadius, borderWidth, groupZPadding,\n *               states, boostThreshold, boostBlending\n * @product      highcharts\n * @requires     highcharts-more\n * @optionparent plotOptions.boxplot\n */\nconst BoxPlotSeriesDefaults = {\n    /**\n     * @type {number|null}\n     */\n    threshold: null,\n    tooltip: {\n        pointFormat: '<span style=\"color:{point.color}\">\\u25CF</span> <b>' +\n            '{series.name}</b><br/>' +\n            'Maximum: {point.high}<br/>' +\n            'Upper quartile: {point.q3}<br/>' +\n            'Median: {point.median}<br/>' +\n            'Lower quartile: {point.q1}<br/>' +\n            'Minimum: {point.low}<br/>'\n    },\n    /**\n     * The length of the whiskers, the horizontal lines marking low and\n     * high values. It can be a numerical pixel value, or a percentage\n     * value of the box width. Set `0` to disable whiskers.\n     *\n     * @sample {highcharts} highcharts/plotoptions/box-plot-styling/\n     *         Box plot styling\n     *\n     * @type    {number|string}\n     * @since   3.0\n     * @product highcharts\n     */\n    whiskerLength: '50%',\n    /**\n     * The fill color of the box.\n     *\n     * In styled mode, the fill color can be set with the\n     * `.highcharts-boxplot-box` class.\n     *\n     * @sample {highcharts} highcharts/plotoptions/box-plot-styling/\n     *         Box plot styling\n     *\n     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @default #ffffff\n     * @since   3.0\n     * @product highcharts\n     */\n    fillColor: \"#ffffff\" /* Palette.backgroundColor */,\n    /**\n     * The width of the line surrounding the box. If any of\n     * [stemWidth](#plotOptions.boxplot.stemWidth),\n     * [medianWidth](#plotOptions.boxplot.medianWidth)\n     * or [whiskerWidth](#plotOptions.boxplot.whiskerWidth) are `null`,\n     * the lineWidth also applies to these lines.\n     *\n     * @sample {highcharts} highcharts/plotoptions/box-plot-styling/\n     *         Box plot styling\n     * @sample {highcharts} highcharts/plotoptions/error-bar-styling/\n     *         Error bar styling\n     *\n     * @since   3.0\n     * @product highcharts\n     */\n    lineWidth: 1,\n    /**\n     * The color of the median line. If `undefined`, the general series\n     * color applies.\n     *\n     * In styled mode, the median stroke width can be set with the\n     * `.highcharts-boxplot-median` class.\n     *\n     * @sample {highcharts} highcharts/plotoptions/box-plot-styling/\n     *         Box plot styling\n     * @sample {highcharts} highcharts/css/boxplot/\n     *         Box plot in styled mode\n     * @sample {highcharts} highcharts/plotoptions/error-bar-styling/\n     *         Error bar styling\n     *\n     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject}\n     * @since     3.0\n     * @product   highcharts\n     * @apioption plotOptions.boxplot.medianColor\n     */\n    /**\n     * The pixel width of the median line. If `null`, the\n     * [lineWidth](#plotOptions.boxplot.lineWidth) is used.\n     *\n     * In styled mode, the median stroke width can be set with the\n     * `.highcharts-boxplot-median` class.\n     *\n     * @sample {highcharts} highcharts/plotoptions/box-plot-styling/\n     *         Box plot styling\n     * @sample {highcharts} highcharts/css/boxplot/\n     *         Box plot in styled mode\n     *\n     * @type    {number|null}\n     * @since   3.0\n     * @product highcharts\n     */\n    medianWidth: 2,\n    /*\n    // States are not working and are removed from docs.\n    // Refer to: #2340\n    states: {\n        hover: {\n            brightness: -0.3\n        }\n    },\n    */\n    /**\n     * The color of the stem, the vertical line extending from the box to\n     * the whiskers. If `undefined`, the series color is used.\n     *\n     * In styled mode, the stem stroke can be set with the\n     * `.highcharts-boxplot-stem` class.\n     *\n     * @sample {highcharts} highcharts/plotoptions/box-plot-styling/\n     *         Box plot styling\n     * @sample {highcharts} highcharts/css/boxplot/\n     *         Box plot in styled mode\n     * @sample {highcharts} highcharts/plotoptions/error-bar-styling/\n     *         Error bar styling\n     *\n     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @since     3.0\n     * @product   highcharts\n     * @apioption plotOptions.boxplot.stemColor\n     */\n    /**\n     * The dash style of the box.\n     *\n     * @sample {highcharts} highcharts/plotoptions/box-plot-styling/\n     *         Box plot styling\n     * @sample {highcharts} highcharts/css/boxplot/\n     *         Box plot in styled mode\n     *\n     * @type      {Highcharts.DashStyleValue}\n     * @default   Solid\n     * @since 8.1.0\n     * @product   highcharts\n     * @apioption plotOptions.boxplot.boxDashStyle\n     */\n    /**\n     * The dash style of the median.\n     *\n     * @sample {highcharts} highcharts/plotoptions/box-plot-styling/\n     *         Box plot styling\n     * @sample {highcharts} highcharts/css/boxplot/\n     *         Box plot in styled mode\n     *\n     * @type      {Highcharts.DashStyleValue}\n     * @default   Solid\n     * @since 8.1.0\n     * @product   highcharts\n     * @apioption plotOptions.boxplot.medianDashStyle\n     */\n    /**\n     * The dash style of the stem, the vertical line extending from the\n     * box to the whiskers.\n     *\n     * @sample {highcharts} highcharts/plotoptions/box-plot-styling/\n     *         Box plot styling\n     * @sample {highcharts} highcharts/css/boxplot/\n     *         Box plot in styled mode\n     * @sample {highcharts} highcharts/plotoptions/error-bar-styling/\n     *         Error bar styling\n     *\n     * @type      {Highcharts.DashStyleValue}\n     * @default   Solid\n     * @since     3.0\n     * @product   highcharts\n     * @apioption plotOptions.boxplot.stemDashStyle\n     */\n    /**\n     * The dash style of the whiskers.\n     *\n     * @sample {highcharts} highcharts/plotoptions/box-plot-styling/\n     *         Box plot styling\n     * @sample {highcharts} highcharts/css/boxplot/\n     *         Box plot in styled mode\n     *\n     * @type      {Highcharts.DashStyleValue}\n     * @default   Solid\n     * @since 8.1.0\n     * @product   highcharts\n     * @apioption plotOptions.boxplot.whiskerDashStyle\n     */\n    /**\n     * The width of the stem, the vertical line extending from the box to\n     * the whiskers. If `undefined`, the width is inherited from the\n     * [lineWidth](#plotOptions.boxplot.lineWidth) option.\n     *\n     * In styled mode, the stem stroke width can be set with the\n     * `.highcharts-boxplot-stem` class.\n     *\n     * @sample {highcharts} highcharts/plotoptions/box-plot-styling/\n     *         Box plot styling\n     * @sample {highcharts} highcharts/css/boxplot/\n     *         Box plot in styled mode\n     * @sample {highcharts} highcharts/plotoptions/error-bar-styling/\n     *         Error bar styling\n     *\n     * @type      {number}\n     * @since     3.0\n     * @product   highcharts\n     * @apioption plotOptions.boxplot.stemWidth\n     */\n    /**\n     * @default   high\n     * @apioption plotOptions.boxplot.colorKey\n     */\n    /**\n     * The color of the whiskers, the horizontal lines marking low and high\n     * values. When `undefined`, the general series color is used.\n     *\n     * In styled mode, the whisker stroke can be set with the\n     * `.highcharts-boxplot-whisker` class .\n     *\n     * @sample {highcharts} highcharts/plotoptions/box-plot-styling/\n     *         Box plot styling\n     * @sample {highcharts} highcharts/css/boxplot/\n     *         Box plot in styled mode\n     *\n     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @since     3.0\n     * @product   highcharts\n     * @apioption plotOptions.boxplot.whiskerColor\n     */\n    /**\n     * The line width of the whiskers, the horizontal lines marking low and\n     * high values. When `undefined`, the general\n     * [lineWidth](#plotOptions.boxplot.lineWidth) applies.\n     *\n     * In styled mode, the whisker stroke width can be set with the\n     * `.highcharts-boxplot-whisker` class.\n     *\n     * @sample {highcharts} highcharts/plotoptions/box-plot-styling/\n     *         Box plot styling\n     * @sample {highcharts} highcharts/css/boxplot/\n     *         Box plot in styled mode\n     *\n     * @since   3.0\n     * @product highcharts\n     */\n    whiskerWidth: 2\n};\n/**\n * A `boxplot` series. If the [type](#series.boxplot.type) option is\n * not specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends   series,plotOptions.boxplot\n * @excluding dataParser, dataURL, marker, stack, stacking, states,\n *            boostThreshold, boostBlending\n * @product   highcharts\n * @requires  highcharts-more\n * @apioption series.boxplot\n */\n/**\n * An array of data points for the series. For the `boxplot` series\n * type, points can be given in the following ways:\n *\n * 1. An array of arrays with 6 or 5 values. In this case, the values correspond\n *    to `x,low,q1,median,q3,high`. If the first value is a string, it is\n *    applied as the name of the point, and the `x` value is inferred. The `x`\n *    value can also be omitted, in which case the inner arrays should be of\n *    length 5. Then the `x` value is automatically calculated, either starting\n *    at 0 and incremented by 1, or from `pointStart` and `pointInterval` given\n *    in the series options.\n *    ```js\n *    data: [\n *        [0, 3, 0, 10, 3, 5],\n *        [1, 7, 8, 7, 2, 9],\n *        [2, 6, 9, 5, 1, 3]\n *    ]\n *    ```\n *\n * 2. An array of objects with named values. The following snippet shows only a\n *    few settings, see the complete options set below. If the total number of\n *    data points exceeds the series'\n *    [turboThreshold](#series.boxplot.turboThreshold), this option is not\n *    available.\n *    ```js\n *    data: [{\n *        x: 1,\n *        low: 4,\n *        q1: 9,\n *        median: 9,\n *        q3: 1,\n *        high: 10,\n *        name: \"Point2\",\n *        color: \"#00FF00\"\n *    }, {\n *        x: 1,\n *        low: 5,\n *        q1: 7,\n *        median: 3,\n *        q3: 6,\n *        high: 2,\n *        name: \"Point1\",\n *        color: \"#FF00FF\"\n *    }]\n *    ```\n *\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n *         Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n *         Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n *         Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n *         Config objects\n *\n * @type      {Array<Array<(number|string),number,number,number,number>|Array<(number|string),number,number,number,number,number>|*>}\n * @extends   series.line.data\n * @excluding marker\n * @product   highcharts\n * @apioption series.boxplot.data\n */\n/**\n * The `high` value for each data point, signifying the highest value\n * in the sample set. The top whisker is drawn here.\n *\n * @type      {number}\n * @product   highcharts\n * @apioption series.boxplot.data.high\n */\n/**\n * The `low` value for each data point, signifying the lowest value\n * in the sample set. The bottom whisker is drawn here.\n *\n * @type      {number}\n * @product   highcharts\n * @apioption series.boxplot.data.low\n */\n/**\n * The median for each data point. This is drawn as a line through the\n * middle area of the box.\n *\n * @type      {number}\n * @product   highcharts\n * @apioption series.boxplot.data.median\n */\n/**\n * The lower quartile for each data point. This is the bottom of the\n * box.\n *\n * @type      {number}\n * @product   highcharts\n * @apioption series.boxplot.data.q1\n */\n/**\n * The higher quartile for each data point. This is the top of the box.\n *\n * @type      {number}\n * @product   highcharts\n * @apioption series.boxplot.data.q3\n */\n/**\n * The dash style of the box.\n *\n * @sample {highcharts} highcharts/plotoptions/box-plot-styling/\n *         Box plot styling\n * @sample {highcharts} highcharts/css/boxplot/\n *         Box plot in styled mode\n *\n * @type      {Highcharts.DashStyleValue}\n * @default   Solid\n * @since 8.1.0\n * @product   highcharts\n * @apioption series.boxplot.data.boxDashStyle\n */\n/**\n * The dash style of the median.\n *\n * @sample {highcharts} highcharts/plotoptions/box-plot-styling/\n *         Box plot styling\n * @sample {highcharts} highcharts/css/boxplot/\n *         Box plot in styled mode\n *\n * @type      {Highcharts.DashStyleValue}\n * @default   Solid\n * @since 8.1.0\n * @product   highcharts\n * @apioption series.boxplot.data.medianDashStyle\n */\n/**\n * The dash style of the stem.\n *\n * @sample {highcharts} highcharts/plotoptions/box-plot-styling/\n *         Box plot styling\n * @sample {highcharts} highcharts/css/boxplot/\n *         Box plot in styled mode\n *\n * @type      {Highcharts.DashStyleValue}\n * @default   Solid\n * @since 8.1.0\n * @product   highcharts\n * @apioption series.boxplot.data.stemDashStyle\n */\n/**\n * The dash style of the whiskers.\n *\n * @sample {highcharts} highcharts/plotoptions/box-plot-styling/\n *         Box plot styling\n * @sample {highcharts} highcharts/css/boxplot/\n *         Box plot in styled mode\n *\n * @type      {Highcharts.DashStyleValue}\n * @default   Solid\n * @since 8.1.0\n * @product   highcharts\n * @apioption series.boxplot.data.whiskerDashStyle\n */\n''; // Keeps doclets above separate\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const BoxPlot_BoxPlotSeriesDefaults = (BoxPlotSeriesDefaults);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Series\",\"types\",\"column\"],\"commonjs\":[\"highcharts\",\"Series\",\"types\",\"column\"],\"commonjs2\":[\"highcharts\",\"Series\",\"types\",\"column\"],\"root\":[\"Highcharts\",\"Series\",\"types\",\"column\"]}\nvar highcharts_Series_types_column_commonjs_highcharts_Series_types_column_commonjs2_highcharts_Series_types_column_root_Highcharts_Series_types_column_ = __webpack_require__(448);\nvar highcharts_Series_types_column_commonjs_highcharts_Series_types_column_commonjs2_highcharts_Series_types_column_root_Highcharts_Series_types_column_default = /*#__PURE__*/__webpack_require__.n(highcharts_Series_types_column_commonjs_highcharts_Series_types_column_commonjs2_highcharts_Series_types_column_root_Highcharts_Series_types_column_);\n;// ./code/es-modules/Series/BoxPlot/BoxPlotSeries.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 { noop: BoxPlotSeries_noop } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\nconst { crisp, extend: BoxPlotSeries_extend, merge: BoxPlotSeries_merge, pick: BoxPlotSeries_pick, relativeLength: BoxPlotSeries_relativeLength } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Class\n *\n * */\n/**\n * The boxplot series type.\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes#boxplot\n *\n * @augments Highcharts.Series\n */\nclass BoxPlotSeries extends (highcharts_Series_types_column_commonjs_highcharts_Series_types_column_commonjs2_highcharts_Series_types_column_root_Highcharts_Series_types_column_default()) {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    // Get presentational attributes\n    pointAttribs() {\n        // No attributes should be set on point.graphic which is the group\n        return {};\n    }\n    // Get an SVGPath object for both whiskers\n    getWhiskerPair(halfWidth, stemX, upperWhiskerLength, lowerWhiskerLength, point) {\n        const strokeWidth = point.whiskers.strokeWidth(), getWhisker = (xLen, yPos) => {\n            const halfLen = BoxPlotSeries_relativeLength(xLen, 2 * halfWidth) / 2, crispedYPos = crisp(yPos, strokeWidth);\n            return [\n                [\n                    'M',\n                    crisp(stemX - halfLen),\n                    crispedYPos\n                ],\n                [\n                    'L',\n                    crisp(stemX + halfLen),\n                    crispedYPos\n                ]\n            ];\n        };\n        return [\n            ...getWhisker(upperWhiskerLength, point.highPlot),\n            ...getWhisker(lowerWhiskerLength, point.lowPlot)\n        ];\n    }\n    // Translate data points from raw values x and y to plotX and plotY\n    translate() {\n        const series = this, yAxis = series.yAxis, pointArrayMap = series.pointArrayMap;\n        super.translate.apply(series);\n        // Do the translation on each point dimension\n        series.points.forEach(function (point) {\n            pointArrayMap.forEach(function (key) {\n                if (point[key] !== null) {\n                    point[key + 'Plot'] = yAxis.translate(point[key], 0, 1, 0, 1);\n                }\n            });\n            point.plotHigh = point.highPlot; // For data label validation\n        });\n    }\n    /**\n     * Draw the data points\n     * @private\n     */\n    drawPoints() {\n        const series = this, points = series.points, options = series.options, chart = series.chart, renderer = chart.renderer, \n        // Error bar inherits this series type but doesn't do quartiles\n        doQuartiles = series.doQuartiles !== false, whiskerLength = series.options.whiskerLength;\n        let q1Plot, q3Plot, highPlot, lowPlot, medianPlot, medianPath, boxPath, graphic, width, x, right;\n        for (const point of points) {\n            graphic = point.graphic;\n            const verb = graphic ? 'animate' : 'attr', shapeArgs = point.shapeArgs, boxAttr = {}, stemAttr = {}, whiskersAttr = {}, medianAttr = {}, color = point.color || series.color, pointWhiskerLength = (point.options.whiskerLength ||\n                whiskerLength);\n            if (typeof point.plotY !== 'undefined') {\n                // Vector coordinates\n                width = shapeArgs.width;\n                x = shapeArgs.x;\n                right = x + width;\n                q1Plot = doQuartiles ? point.q1Plot : point.lowPlot;\n                q3Plot = doQuartiles ? point.q3Plot : point.lowPlot;\n                highPlot = point.highPlot;\n                lowPlot = point.lowPlot;\n                if (!graphic) {\n                    point.graphic = graphic = renderer.g('point')\n                        .add(series.group);\n                    point.stem = renderer.path()\n                        .addClass('highcharts-boxplot-stem')\n                        .add(graphic);\n                    if (whiskerLength) {\n                        point.whiskers = renderer.path()\n                            .addClass('highcharts-boxplot-whisker')\n                            .add(graphic);\n                    }\n                    if (doQuartiles) {\n                        point.box = renderer.path(boxPath)\n                            .addClass('highcharts-boxplot-box')\n                            .add(graphic);\n                    }\n                    point.medianShape = renderer.path(medianPath)\n                        .addClass('highcharts-boxplot-median')\n                        .add(graphic);\n                }\n                if (!chart.styledMode) {\n                    // Stem attributes\n                    stemAttr.stroke =\n                        point.stemColor || options.stemColor || color;\n                    stemAttr['stroke-width'] = BoxPlotSeries_pick(point.stemWidth, options.stemWidth, options.lineWidth);\n                    stemAttr.dashstyle = (point.stemDashStyle ||\n                        options.stemDashStyle ||\n                        options.dashStyle);\n                    point.stem.attr(stemAttr);\n                    // Whiskers attributes\n                    if (pointWhiskerLength) {\n                        whiskersAttr.stroke = (point.whiskerColor ||\n                            options.whiskerColor ||\n                            color);\n                        whiskersAttr['stroke-width'] = BoxPlotSeries_pick(point.whiskerWidth, options.whiskerWidth, options.lineWidth);\n                        whiskersAttr.dashstyle = (point.whiskerDashStyle ||\n                            options.whiskerDashStyle ||\n                            options.dashStyle);\n                        point.whiskers.attr(whiskersAttr);\n                    }\n                    if (doQuartiles) {\n                        boxAttr.fill = (point.fillColor ||\n                            options.fillColor ||\n                            color);\n                        boxAttr.stroke = options.lineColor || color;\n                        boxAttr['stroke-width'] = options.lineWidth || 0;\n                        boxAttr.dashstyle = (point.boxDashStyle ||\n                            options.boxDashStyle ||\n                            options.dashStyle);\n                        point.box.attr(boxAttr);\n                    }\n                    // Median attributes\n                    medianAttr.stroke = (point.medianColor ||\n                        options.medianColor ||\n                        color);\n                    medianAttr['stroke-width'] = BoxPlotSeries_pick(point.medianWidth, options.medianWidth, options.lineWidth);\n                    medianAttr.dashstyle = (point.medianDashStyle ||\n                        options.medianDashStyle ||\n                        options.dashStyle);\n                    point.medianShape.attr(medianAttr);\n                }\n                let d;\n                // The stem\n                const stemX = crisp((point.plotX || 0) + (series.pointXOffset || 0) +\n                    ((series.barW || 0) / 2), point.stem.strokeWidth());\n                d = [\n                    // Stem up\n                    ['M', stemX, q3Plot],\n                    ['L', stemX, highPlot],\n                    // Stem down\n                    ['M', stemX, q1Plot],\n                    ['L', stemX, lowPlot]\n                ];\n                point.stem[verb]({ d });\n                // The box\n                if (doQuartiles) {\n                    const boxStrokeWidth = point.box.strokeWidth();\n                    q1Plot = crisp(q1Plot, boxStrokeWidth);\n                    q3Plot = crisp(q3Plot, boxStrokeWidth);\n                    x = crisp(x, boxStrokeWidth);\n                    right = crisp(right, boxStrokeWidth);\n                    d = [\n                        ['M', x, q3Plot],\n                        ['L', x, q1Plot],\n                        ['L', right, q1Plot],\n                        ['L', right, q3Plot],\n                        ['L', x, q3Plot],\n                        ['Z']\n                    ];\n                    point.box[verb]({ d });\n                }\n                // The whiskers\n                if (pointWhiskerLength) {\n                    const halfWidth = width / 2, whiskers = this.getWhiskerPair(halfWidth, stemX, (point.upperWhiskerLength ??\n                        options.upperWhiskerLength ??\n                        pointWhiskerLength), (point.lowerWhiskerLength ??\n                        options.lowerWhiskerLength ??\n                        pointWhiskerLength), point);\n                    point.whiskers[verb]({ d: whiskers });\n                }\n                // The median\n                medianPlot = crisp(point.medianPlot, point.medianShape.strokeWidth());\n                d = [\n                    ['M', x, medianPlot],\n                    ['L', right, medianPlot]\n                ];\n                point.medianShape[verb]({ d });\n            }\n        }\n    }\n    // Return a plain array for speedy calculation\n    toYData(point) {\n        return [point.low, point.q1, point.median, point.q3, point.high];\n    }\n}\n/* *\n *\n *  Static Properties\n *\n * */\nBoxPlotSeries.defaultOptions = BoxPlotSeries_merge((highcharts_Series_types_column_commonjs_highcharts_Series_types_column_commonjs2_highcharts_Series_types_column_root_Highcharts_Series_types_column_default()).defaultOptions, BoxPlot_BoxPlotSeriesDefaults);\nBoxPlotSeries_extend(BoxPlotSeries.prototype, {\n    // Array point configs are mapped to this\n    pointArrayMap: ['low', 'q1', 'median', 'q3', 'high'],\n    // Defines the top of the tracker\n    pointValKey: 'high',\n    // Disable data labels for box plot\n    drawDataLabels: BoxPlotSeries_noop,\n    setStackedPoints: BoxPlotSeries_noop // #3890\n});\nhighcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default().registerSeriesType('boxplot', BoxPlotSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const BoxPlot_BoxPlotSeries = (BoxPlotSeries);\n\n;// ./code/es-modules/Series/Bubble/BubbleLegendDefaults.js\n/* *\n *\n *  (c) 2010-2024 Highsoft AS\n *\n *  Author: Paweł Potaczek\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Constants\n *\n * */\n/**\n * The bubble legend is an additional element in legend which\n * presents the scale of the bubble series. Individual bubble ranges\n * can be defined by user or calculated from series. In the case of\n * automatically calculated ranges, a 1px margin of error is\n * permitted.\n *\n * @since        7.0.0\n * @product      highcharts highstock highmaps\n * @requires     highcharts-more\n * @optionparent legend.bubbleLegend\n */\nconst BubbleLegendDefaults = {\n    /**\n     * The color of the ranges borders, can be also defined for an\n     * individual range.\n     *\n     * @sample highcharts/bubble-legend/similartoseries/\n     *         Similar look to the bubble series\n     * @sample highcharts/bubble-legend/bordercolor/\n     *         Individual bubble border color\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    borderColor: void 0,\n    /**\n     * The width of the ranges borders in pixels, can be also\n     * defined for an individual range.\n     */\n    borderWidth: 2,\n    /**\n     * An additional class name to apply to the bubble legend'\n     * circle graphical elements. This option does not replace\n     * default class names of the graphical element.\n     *\n     * @sample {highcharts} highcharts/css/bubble-legend/\n     *         Styling by CSS\n     *\n     * @type {string}\n     */\n    className: void 0,\n    /**\n     * The main color of the bubble legend. Applies to ranges, if\n     * individual color is not defined.\n     *\n     * @sample highcharts/bubble-legend/similartoseries/\n     *         Similar look to the bubble series\n     * @sample highcharts/bubble-legend/color/\n     *         Individual bubble color\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    color: void 0,\n    /**\n     * An additional class name to apply to the bubble legend's\n     * connector graphical elements. This option does not replace\n     * default class names of the graphical element.\n     *\n     * @sample {highcharts} highcharts/css/bubble-legend/\n     *         Styling by CSS\n     *\n     * @type {string}\n     */\n    connectorClassName: void 0,\n    /**\n     * The color of the connector, can be also defined\n     * for an individual range.\n     *\n     * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     */\n    connectorColor: void 0,\n    /**\n     * The length of the connectors in pixels. If labels are\n     * centered, the distance is reduced to 0.\n     *\n     * @sample highcharts/bubble-legend/connectorandlabels/\n     *         Increased connector length\n     */\n    connectorDistance: 60,\n    /**\n     * The width of the connectors in pixels.\n     *\n     * @sample highcharts/bubble-legend/connectorandlabels/\n     *         Increased connector width\n     */\n    connectorWidth: 1,\n    /**\n     * Enable or disable the bubble legend.\n     */\n    enabled: false,\n    /**\n     * Options for the bubble legend labels.\n     */\n    labels: {\n        /**\n         * An additional class name to apply to the bubble legend\n         * label graphical elements. This option does not replace\n         * default class names of the graphical element.\n         *\n         * @sample {highcharts} highcharts/css/bubble-legend/\n         *         Styling by CSS\n         *\n         * @type {string}\n         */\n        className: void 0,\n        /**\n         * Whether to allow data labels to overlap.\n         */\n        allowOverlap: false,\n        /**\n         * A format string for the bubble legend labels. Available\n         * variables are the same as for `formatter`.\n         *\n         * @sample highcharts/bubble-legend/format/\n         *         Add a unit\n         *\n         * @type {string}\n         */\n        format: '',\n        /**\n         * Available `this` properties are:\n         *\n         * - `this.value`: The bubble value.\n         *\n         * - `this.radius`: The radius of the bubble range.\n         *\n         * - `this.center`: The center y position of the range.\n         *\n         * @type {Highcharts.FormatterCallbackFunction<Highcharts.BubbleLegendFormatterContextObject>}\n         */\n        formatter: void 0,\n        /**\n         * The alignment of the labels compared to the bubble\n         * legend. Can be one of `left`, `center` or `right`.\n         *\n         * @sample highcharts/bubble-legend/connectorandlabels/\n         *         Labels on left\n         *\n         * @type {Highcharts.AlignValue}\n         */\n        align: 'right',\n        /**\n         * CSS styles for the labels.\n         *\n         * @type {Highcharts.CSSObject}\n         */\n        style: {\n            /** @ignore-option */\n            fontSize: '0.9em',\n            /** @ignore-option */\n            color: \"#000000\" /* Palette.neutralColor100 */\n        },\n        /**\n         * The x position offset of the label relative to the\n         * connector.\n         */\n        x: 0,\n        /**\n         * The y position offset of the label relative to the\n         * connector.\n         */\n        y: 0\n    },\n    /**\n     * Maximum bubble legend range size. If values for ranges are\n     * not specified, the `minSize` and the `maxSize` are calculated\n     * from bubble series.\n     */\n    maxSize: 60, // Number\n    /**\n     * Minimum bubble legend range size. If values for ranges are\n     * not specified, the `minSize` and the `maxSize` are calculated\n     * from bubble series.\n     */\n    minSize: 10, // Number\n    /**\n     * The position of the bubble legend in the legend.\n     * @sample highcharts/bubble-legend/connectorandlabels/\n     *         Bubble legend as last item in legend\n     */\n    legendIndex: 0, // Number\n    /**\n     * Options for specific range. One range consists of bubble,\n     * label and connector.\n     *\n     * @sample highcharts/bubble-legend/ranges/\n     *         Manually defined ranges\n     * @sample highcharts/bubble-legend/autoranges/\n     *         Auto calculated ranges\n     *\n     * @type {Array<*>}\n     */\n    ranges: {\n        /**\n         * Range size value, similar to bubble Z data.\n         * @type {number}\n         */\n        value: void 0,\n        /**\n         * The color of the border for individual range.\n         * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         */\n        borderColor: void 0,\n        /**\n         * The color of the bubble for individual range.\n         * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         */\n        color: void 0,\n        /**\n         * The color of the connector for individual range.\n         * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         */\n        connectorColor: void 0\n    },\n    /**\n     * Whether the bubble legend range value should be represented\n     * by the area or the width of the bubble. The default, area,\n     * corresponds best to the human perception of the size of each\n     * bubble.\n     *\n     * @sample highcharts/bubble-legend/ranges/\n     *         Size by width\n     *\n     * @type {Highcharts.BubbleSizeByValue}\n     */\n    sizeBy: 'area',\n    /**\n     * When this is true, the absolute value of z determines the\n     * size of the bubble. This means that with the default\n     * zThreshold of 0, a bubble of value -1 will have the same size\n     * as a bubble of value 1, while a bubble of value 0 will have a\n     * smaller size according to minSize.\n     */\n    sizeByAbsoluteValue: false,\n    /**\n     * Define the visual z index of the bubble legend.\n     */\n    zIndex: 1,\n    /**\n     * Ranges with lower value than zThreshold are skipped.\n     */\n    zThreshold: 0\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Bubble_BubbleLegendDefaults = (BubbleLegendDefaults);\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\",\"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/Series/Bubble/BubbleLegendItem.js\n/* *\n *\n *  (c) 2010-2024 Highsoft AS\n *\n *  Author: Paweł Potaczek\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\n\nconst { noop: BubbleLegendItem_noop } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { arrayMax, arrayMin, isNumber: BubbleLegendItem_isNumber, merge: BubbleLegendItem_merge, pick: BubbleLegendItem_pick, stableSort } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Class\n *\n * */\n/**\n * BubbleLegend class.\n *\n * @private\n * @class\n * @name Highcharts.BubbleLegend\n * @param {Highcharts.LegendBubbleLegendOptions} options\n * Options of BubbleLegendItem.\n *\n * @param {Highcharts.Legend} legend\n * Legend of item.\n */\nclass BubbleLegendItem {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(options, legend) {\n        this.setState = BubbleLegendItem_noop;\n        this.init(options, legend);\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Create basic bubbleLegend properties similar to item in legend.\n     * @private\n     */\n    init(options, legend) {\n        this.options = options;\n        this.visible = true;\n        this.chart = legend.chart;\n        this.legend = legend;\n    }\n    /**\n     * Depending on the position option, add bubbleLegend to legend items.\n     *\n     * @private\n     *\n     * @param {Array<(Highcharts.Point|Highcharts.Series)>} items\n     *        All legend items\n     */\n    addToLegend(items) {\n        // Insert bubbleLegend into legend items\n        items.splice(this.options.legendIndex, 0, this);\n    }\n    /**\n     * Calculate ranges, sizes and call the next steps of bubbleLegend\n     * creation.\n     *\n     * @private\n     *\n     * @param {Highcharts.Legend} legend\n     *        Legend instance\n     */\n    drawLegendSymbol(legend) {\n        const itemDistance = BubbleLegendItem_pick(legend.options.itemDistance, 20), legendItem = this.legendItem || {}, options = this.options, ranges = options.ranges, connectorDistance = options.connectorDistance;\n        let connectorSpace;\n        // Do not create bubbleLegend now if ranges or ranges values are not\n        // specified or if are empty array.\n        if (!ranges || !ranges.length || !BubbleLegendItem_isNumber(ranges[0].value)) {\n            legend.options.bubbleLegend.autoRanges = true;\n            return;\n        }\n        // Sort ranges to right render order\n        stableSort(ranges, function (a, b) {\n            return b.value - a.value;\n        });\n        this.ranges = ranges;\n        this.setOptions();\n        this.render();\n        // Get max label size\n        const maxLabel = this.getMaxLabelSize(), radius = this.ranges[0].radius, size = radius * 2;\n        // Space for connectors and labels.\n        connectorSpace =\n            connectorDistance - radius + maxLabel.width;\n        connectorSpace = connectorSpace > 0 ? connectorSpace : 0;\n        this.maxLabel = maxLabel;\n        this.movementX = options.labels.align === 'left' ?\n            connectorSpace : 0;\n        legendItem.labelWidth = size + connectorSpace + itemDistance;\n        legendItem.labelHeight = size + maxLabel.height / 2;\n    }\n    /**\n     * Set style options for each bubbleLegend range.\n     * @private\n     */\n    setOptions() {\n        const ranges = this.ranges, options = this.options, series = this.chart.series[options.seriesIndex], baseline = this.legend.baseline, bubbleAttribs = {\n            zIndex: options.zIndex,\n            'stroke-width': options.borderWidth\n        }, connectorAttribs = {\n            zIndex: options.zIndex,\n            'stroke-width': options.connectorWidth\n        }, labelAttribs = {\n            align: (this.legend.options.rtl ||\n                options.labels.align === 'left') ? 'right' : 'left',\n            zIndex: options.zIndex\n        }, fillOpacity = series.options.marker.fillOpacity, styledMode = this.chart.styledMode;\n        // Allow to parts of styles be used individually for range\n        ranges.forEach(function (range, i) {\n            if (!styledMode) {\n                bubbleAttribs.stroke = BubbleLegendItem_pick(range.borderColor, options.borderColor, series.color);\n                bubbleAttribs.fill = BubbleLegendItem_pick(range.color, options.color, fillOpacity !== 1 ?\n                    color(series.color).setOpacity(fillOpacity)\n                        .get('rgba') :\n                    series.color);\n                connectorAttribs.stroke = BubbleLegendItem_pick(range.connectorColor, options.connectorColor, series.color);\n            }\n            // Set options needed for rendering each range\n            ranges[i].radius = this.getRangeRadius(range.value);\n            ranges[i] = BubbleLegendItem_merge(ranges[i], {\n                center: (ranges[0].radius - ranges[i].radius +\n                    baseline)\n            });\n            if (!styledMode) {\n                BubbleLegendItem_merge(true, ranges[i], {\n                    bubbleAttribs: BubbleLegendItem_merge(bubbleAttribs),\n                    connectorAttribs: BubbleLegendItem_merge(connectorAttribs),\n                    labelAttribs: labelAttribs\n                });\n            }\n        }, this);\n    }\n    /**\n     * Calculate radius for each bubble range,\n     * used code from BubbleSeries.js 'getRadius' method.\n     *\n     * @private\n     *\n     * @param {number} value\n     *        Range value\n     *\n     * @return {number|null}\n     *         Radius for one range\n     */\n    getRangeRadius(value) {\n        const options = this.options, seriesIndex = this.options.seriesIndex, bubbleSeries = this.chart.series[seriesIndex], zMax = options.ranges[0].value, zMin = options.ranges[options.ranges.length - 1].value, minSize = options.minSize, maxSize = options.maxSize;\n        return bubbleSeries.getRadius.call(this, zMin, zMax, minSize, maxSize, value);\n    }\n    /**\n     * Render the legendItem group.\n     * @private\n     */\n    render() {\n        const legendItem = this.legendItem || {}, renderer = this.chart.renderer, zThreshold = this.options.zThreshold;\n        if (!this.symbols) {\n            this.symbols = {\n                connectors: [],\n                bubbleItems: [],\n                labels: []\n            };\n        }\n        // Nesting SVG groups to enable handleOverflow\n        legendItem.symbol = renderer.g('bubble-legend');\n        legendItem.label = renderer.g('bubble-legend-item')\n            .css(this.legend.itemStyle || {});\n        // To enable default 'hideOverlappingLabels' method\n        legendItem.symbol.translateX = 0;\n        legendItem.symbol.translateY = 0;\n        // To use handleOverflow method\n        legendItem.symbol.add(legendItem.label);\n        legendItem.label.add(legendItem.group);\n        for (const range of this.ranges) {\n            if (range.value >= zThreshold) {\n                this.renderRange(range);\n            }\n        }\n        this.hideOverlappingLabels();\n    }\n    /**\n     * Render one range, consisting of bubble symbol, connector and label.\n     *\n     * @private\n     *\n     * @param {Highcharts.LegendBubbleLegendRangesOptions} range\n     *        Range options\n     */\n    renderRange(range) {\n        const mainRange = this.ranges[0], legend = this.legend, options = this.options, labelsOptions = options.labels, chart = this.chart, bubbleSeries = chart.series[options.seriesIndex], renderer = chart.renderer, symbols = this.symbols, labels = symbols.labels, elementCenter = range.center, absoluteRadius = Math.abs(range.radius), connectorDistance = options.connectorDistance || 0, labelsAlign = labelsOptions.align, rtl = legend.options.rtl, borderWidth = options.borderWidth, connectorWidth = options.connectorWidth, posX = mainRange.radius || 0, posY = elementCenter - absoluteRadius -\n            borderWidth / 2 + connectorWidth / 2, crispMovement = (posY % 1 ? 1 : 0.5) -\n            (connectorWidth % 2 ? 0 : 0.5), styledMode = renderer.styledMode;\n        let connectorLength = rtl || labelsAlign === 'left' ?\n            -connectorDistance : connectorDistance;\n        // Set options for centered labels\n        if (labelsAlign === 'center') {\n            connectorLength = 0; // Do not use connector\n            options.connectorDistance = 0;\n            range.labelAttribs.align = 'center';\n        }\n        // Render bubble symbol\n        symbols.bubbleItems.push(renderer\n            .circle(posX, elementCenter + crispMovement, absoluteRadius)\n            .attr(styledMode ? {} : range.bubbleAttribs)\n            .addClass((styledMode ?\n            'highcharts-color-' +\n                bubbleSeries.colorIndex + ' ' :\n            '') +\n            'highcharts-bubble-legend-symbol ' +\n            (options.className || '')).add(this.legendItem.symbol));\n        // Render connector\n        symbols.connectors.push(renderer\n            .path(renderer.crispLine([\n            ['M', posX, posY],\n            ['L', posX + connectorLength, posY]\n        ], options.connectorWidth))\n            .attr((styledMode ? {} : range.connectorAttribs))\n            .addClass((styledMode ?\n            'highcharts-color-' +\n                this.options.seriesIndex + ' ' : '') +\n            'highcharts-bubble-legend-connectors ' +\n            (options.connectorClassName || '')).add(this.legendItem.symbol));\n        // Render label\n        const label = renderer\n            .text(this.formatLabel(range))\n            .attr((styledMode ? {} : range.labelAttribs))\n            .css(styledMode ? {} : labelsOptions.style)\n            .addClass('highcharts-bubble-legend-labels ' +\n            (options.labels.className || '')).add(this.legendItem.symbol);\n        // Now that the label is added we can read the bounding box and\n        // vertically align\n        const position = {\n            x: posX + connectorLength + options.labels.x,\n            y: posY + options.labels.y + label.getBBox().height * 0.4\n        };\n        label.attr(position);\n        labels.push(label);\n        // To enable default 'hideOverlappingLabels' method\n        label.placed = true;\n        label.alignAttr = position;\n    }\n    /**\n     * Get the label which takes up the most space.\n     * @private\n     */\n    getMaxLabelSize() {\n        const labels = this.symbols.labels;\n        let maxLabel, labelSize;\n        labels.forEach(function (label) {\n            labelSize = label.getBBox(true);\n            if (maxLabel) {\n                maxLabel = labelSize.width > maxLabel.width ?\n                    labelSize : maxLabel;\n            }\n            else {\n                maxLabel = labelSize;\n            }\n        });\n        return maxLabel || {};\n    }\n    /**\n     * Get formatted label for range.\n     *\n     * @private\n     *\n     * @param {Highcharts.LegendBubbleLegendRangesOptions} range\n     *        Range options\n     *\n     * @return {string}\n     *         Range label text\n     */\n    formatLabel(range) {\n        const options = this.options, formatter = options.labels.formatter, format = options.labels.format;\n        const { numberFormatter } = this.chart;\n        return format ? highcharts_Templating_commonjs_highcharts_Templating_commonjs2_highcharts_Templating_root_Highcharts_Templating_default().format(format, range, this.chart) :\n            formatter ? formatter.call(range) :\n                numberFormatter(range.value, 1);\n    }\n    /**\n     * By using default chart 'hideOverlappingLabels' method, hide or show\n     * labels and connectors.\n     * @private\n     */\n    hideOverlappingLabels() {\n        const chart = this.chart, allowOverlap = this.options.labels.allowOverlap, symbols = this.symbols;\n        if (!allowOverlap && symbols) {\n            chart.hideOverlappingLabels(symbols.labels);\n            // Hide or show connectors\n            symbols.labels.forEach(function (label, index) {\n                if (!label.newOpacity) {\n                    symbols.connectors[index].hide();\n                }\n                else if (label.newOpacity !== label.oldOpacity) {\n                    symbols.connectors[index].show();\n                }\n            });\n        }\n    }\n    /**\n     * Calculate ranges from created series.\n     *\n     * @private\n     *\n     * @return {Array<Highcharts.LegendBubbleLegendRangesOptions>}\n     *         Array of range objects\n     */\n    getRanges() {\n        const bubbleLegend = this.legend.bubbleLegend, series = bubbleLegend.chart.series, rangesOptions = bubbleLegend.options.ranges;\n        let ranges, zData, minZ = Number.MAX_VALUE, maxZ = -Number.MAX_VALUE;\n        series.forEach(function (s) {\n            // Find the min and max Z, like in bubble series\n            if (s.isBubble && !s.ignoreSeries) {\n                zData = s.getColumn('z').filter(BubbleLegendItem_isNumber);\n                if (zData.length) {\n                    minZ = BubbleLegendItem_pick(s.options.zMin, Math.min(minZ, Math.max(arrayMin(zData), s.options.displayNegative === false ?\n                        s.options.zThreshold :\n                        -Number.MAX_VALUE)));\n                    maxZ = BubbleLegendItem_pick(s.options.zMax, Math.max(maxZ, arrayMax(zData)));\n                }\n            }\n        });\n        // Set values for ranges\n        if (minZ === maxZ) {\n            // Only one range if min and max values are the same.\n            ranges = [{ value: maxZ }];\n        }\n        else {\n            ranges = [\n                { value: minZ },\n                { value: (minZ + maxZ) / 2 },\n                { value: maxZ, autoRanges: true }\n            ];\n        }\n        // Prevent reverse order of ranges after redraw\n        if (rangesOptions.length && rangesOptions[0].radius) {\n            ranges.reverse();\n        }\n        // Merge ranges values with user options\n        ranges.forEach(function (range, i) {\n            if (rangesOptions && rangesOptions[i]) {\n                ranges[i] = BubbleLegendItem_merge(rangesOptions[i], range);\n            }\n        });\n        return ranges;\n    }\n    /**\n     * Calculate bubble legend sizes from rendered series.\n     *\n     * @private\n     *\n     * @return {Array<number,number>}\n     *         Calculated min and max bubble sizes\n     */\n    predictBubbleSizes() {\n        const chart = this.chart, legendOptions = chart.legend.options, floating = legendOptions.floating, horizontal = legendOptions.layout === 'horizontal', lastLineHeight = horizontal ? chart.legend.lastLineHeight : 0, plotSizeX = chart.plotSizeX, plotSizeY = chart.plotSizeY, bubbleSeries = chart.series[this.options.seriesIndex], pxSizes = bubbleSeries.getPxExtremes(), minSize = Math.ceil(pxSizes.minPxSize), maxPxSize = Math.ceil(pxSizes.maxPxSize), plotSize = Math.min(plotSizeY, plotSizeX);\n        let calculatedSize, maxSize = bubbleSeries.options.maxSize;\n        // Calculate predicted max size of bubble\n        if (floating || !(/%$/.test(maxSize))) {\n            calculatedSize = maxPxSize;\n        }\n        else {\n            maxSize = parseFloat(maxSize);\n            calculatedSize = ((plotSize + lastLineHeight) * maxSize / 100) /\n                (maxSize / 100 + 1);\n            // Get maxPxSize from bubble series if calculated bubble legend\n            // size will not affect to bubbles series.\n            if ((horizontal && plotSizeY - calculatedSize >=\n                plotSizeX) || (!horizontal && plotSizeX -\n                calculatedSize >= plotSizeY)) {\n                calculatedSize = maxPxSize;\n            }\n        }\n        return [minSize, Math.ceil(calculatedSize)];\n    }\n    /**\n     * Correct ranges with calculated sizes.\n     * @private\n     */\n    updateRanges(min, max) {\n        const bubbleLegendOptions = this.legend.options.bubbleLegend;\n        bubbleLegendOptions.minSize = min;\n        bubbleLegendOptions.maxSize = max;\n        bubbleLegendOptions.ranges = this.getRanges();\n    }\n    /**\n     * Because of the possibility of creating another legend line, predicted\n     * bubble legend sizes may differ by a few pixels, so it is necessary to\n     * correct them.\n     * @private\n     */\n    correctSizes() {\n        const legend = this.legend, chart = this.chart, bubbleSeries = chart.series[this.options.seriesIndex], pxSizes = bubbleSeries.getPxExtremes(), bubbleSeriesSize = pxSizes.maxPxSize, bubbleLegendSize = this.options.maxSize;\n        if (Math.abs(Math.ceil(bubbleSeriesSize) - bubbleLegendSize) >\n            1) {\n            this.updateRanges(this.options.minSize, pxSizes.maxPxSize);\n            legend.render();\n        }\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Bubble_BubbleLegendItem = (BubbleLegendItem);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * @interface Highcharts.BubbleLegendFormatterContextObject\n */ /**\n* The center y position of the range.\n* @name Highcharts.BubbleLegendFormatterContextObject#center\n* @type {number}\n*/ /**\n* The radius of the bubble range.\n* @name Highcharts.BubbleLegendFormatterContextObject#radius\n* @type {number}\n*/ /**\n* The bubble value.\n* @name Highcharts.BubbleLegendFormatterContextObject#value\n* @type {number}\n*/\n''; // Detach doclets above\n\n;// ./code/es-modules/Series/Bubble/BubbleLegendComposition.js\n/* *\n *\n *  (c) 2010-2024 Highsoft AS\n *\n *  Author: Paweł Potaczek\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 { setOptions } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: BubbleLegendComposition_addEvent, objectEach, pushUnique, wrap } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * If ranges are not specified, determine ranges from rendered bubble series\n * and render legend again.\n */\nfunction chartDrawChartBox(proceed, options, callback) {\n    const chart = this, legend = chart.legend, bubbleSeries = getVisibleBubbleSeriesIndex(chart) >= 0;\n    let bubbleLegendOptions, bubbleSizes, legendItem;\n    if (legend && legend.options.enabled && legend.bubbleLegend &&\n        legend.options.bubbleLegend.autoRanges && bubbleSeries) {\n        bubbleLegendOptions = legend.bubbleLegend.options;\n        bubbleSizes = legend.bubbleLegend.predictBubbleSizes();\n        legend.bubbleLegend.updateRanges(bubbleSizes[0], bubbleSizes[1]);\n        // Disable animation on init\n        if (!bubbleLegendOptions.placed) {\n            legend.group.placed = false;\n            legend.allItems.forEach((item) => {\n                legendItem = item.legendItem || {};\n                if (legendItem.group) {\n                    legendItem.group.translateY = void 0;\n                }\n            });\n        }\n        // Create legend with bubbleLegend\n        legend.render();\n        // Calculate margins after first rendering the bubble legend\n        if (!bubbleLegendOptions.placed) {\n            chart.getMargins();\n            chart.axes.forEach((axis) => {\n                axis.setScale();\n                axis.updateNames();\n                // Disable axis animation on init\n                objectEach(axis.ticks, function (tick) {\n                    tick.isNew = true;\n                    tick.isNewLabel = true;\n                });\n            });\n            chart.getMargins();\n        }\n        bubbleLegendOptions.placed = true;\n        // Call default 'drawChartBox' method.\n        proceed.call(chart, options, callback);\n        // Check bubble legend sizes and correct them if necessary.\n        legend.bubbleLegend.correctSizes();\n        // Correct items positions with different dimensions in legend.\n        retranslateItems(legend, getLinesHeights(legend));\n    }\n    else {\n        proceed.call(chart, options, callback);\n        // Allow color change on static bubble legend after click on legend\n        if (legend && legend.options.enabled && legend.bubbleLegend) {\n            legend.render();\n            retranslateItems(legend, getLinesHeights(legend));\n        }\n    }\n}\n/**\n * Compose classes for use with Bubble series.\n * @private\n *\n * @param {Highcharts.Chart} ChartClass\n * Core chart class to use with Bubble series.\n *\n * @param {Highcharts.Legend} LegendClass\n * Core legend class to use with Bubble series.\n */\nfunction BubbleLegendComposition_compose(ChartClass, LegendClass) {\n    if (pushUnique(composed, 'Series.BubbleLegend')) {\n        setOptions({\n            // Set default bubble legend options\n            legend: {\n                bubbleLegend: Bubble_BubbleLegendDefaults\n            }\n        });\n        wrap(ChartClass.prototype, 'drawChartBox', chartDrawChartBox);\n        BubbleLegendComposition_addEvent(LegendClass, 'afterGetAllItems', onLegendAfterGetAllItems);\n        BubbleLegendComposition_addEvent(LegendClass, 'itemClick', onLegendItemClick);\n    }\n}\n/**\n * Check if there is at least one visible bubble series.\n *\n * @private\n * @function getVisibleBubbleSeriesIndex\n * @param {Highcharts.Chart} chart\n * Chart to check.\n * @return {number}\n * First visible bubble series index\n */\nfunction getVisibleBubbleSeriesIndex(chart) {\n    const series = chart.series;\n    let i = 0;\n    while (i < series.length) {\n        if (series[i] &&\n            series[i].isBubble &&\n            series[i].visible &&\n            series[i].dataTable.rowCount) {\n            return i;\n        }\n        i++;\n    }\n    return -1;\n}\n/**\n * Calculate height for each row in legend.\n *\n * @private\n * @function getLinesHeights\n *\n * @param {Highcharts.Legend} legend\n * Legend to calculate from.\n *\n * @return {Array<Highcharts.Dictionary<number>>}\n * Informations about line height and items amount\n */\nfunction getLinesHeights(legend) {\n    const items = legend.allItems, lines = [], length = items.length;\n    let lastLine, legendItem, legendItem2, i = 0, j = 0;\n    for (i = 0; i < length; i++) {\n        legendItem = items[i].legendItem || {};\n        legendItem2 = (items[i + 1] || {}).legendItem || {};\n        if (legendItem.labelHeight) {\n            // For bubbleLegend\n            items[i].itemHeight = legendItem.labelHeight;\n        }\n        if ( // Line break\n        items[i] === items[length - 1] ||\n            legendItem.y !== legendItem2.y) {\n            lines.push({ height: 0 });\n            lastLine = lines[lines.length - 1];\n            // Find the highest item in line\n            for (j; j <= i; j++) {\n                if (items[j].itemHeight > lastLine.height) {\n                    lastLine.height = items[j].itemHeight;\n                }\n            }\n            lastLine.step = i;\n        }\n    }\n    return lines;\n}\n/**\n * Start the bubble legend creation process.\n */\nfunction onLegendAfterGetAllItems(e) {\n    const legend = this, bubbleLegend = legend.bubbleLegend, legendOptions = legend.options, options = legendOptions.bubbleLegend, bubbleSeriesIndex = getVisibleBubbleSeriesIndex(legend.chart);\n    // Remove unnecessary element\n    if (bubbleLegend && bubbleLegend.ranges && bubbleLegend.ranges.length) {\n        // Allow change the way of calculating ranges in update\n        if (options.ranges.length) {\n            options.autoRanges =\n                !!options.ranges[0].autoRanges;\n        }\n        // Update bubbleLegend dimensions in each redraw\n        legend.destroyItem(bubbleLegend);\n    }\n    // Create bubble legend\n    if (bubbleSeriesIndex >= 0 &&\n        legendOptions.enabled &&\n        options.enabled) {\n        options.seriesIndex = bubbleSeriesIndex;\n        legend.bubbleLegend = new Bubble_BubbleLegendItem(options, legend);\n        legend.bubbleLegend.addToLegend(e.allItems);\n    }\n}\n/**\n * Toggle bubble legend depending on the visible status of bubble series.\n */\nfunction onLegendItemClick(e) {\n    // #14080 don't fire this code if click function is prevented\n    if (e.defaultPrevented) {\n        return false;\n    }\n    const legend = this, series = e.legendItem, chart = legend.chart, visible = series.visible;\n    let status;\n    if (legend && legend.bubbleLegend) {\n        // Temporary correct 'visible' property\n        series.visible = !visible;\n        // Save future status for getRanges method\n        series.ignoreSeries = visible;\n        // Check if at lest one bubble series is visible\n        status = getVisibleBubbleSeriesIndex(chart) >= 0;\n        // Hide bubble legend if all bubble series are disabled\n        if (legend.bubbleLegend.visible !== status) {\n            // Show or hide bubble legend\n            legend.update({\n                bubbleLegend: { enabled: status }\n            });\n            legend.bubbleLegend.visible = status; // Restore default status\n        }\n        series.visible = visible;\n    }\n}\n/**\n * Correct legend items translation in case of different elements heights.\n *\n * @private\n * @function Highcharts.Legend#retranslateItems\n *\n * @param {Highcharts.Legend} legend\n * Legend to translate in.\n *\n * @param {Array<Highcharts.Dictionary<number>>} lines\n * Informations about line height and items amount\n */\nfunction retranslateItems(legend, lines) {\n    const items = legend.allItems, rtl = legend.options.rtl;\n    let orgTranslateX, orgTranslateY, movementX, legendItem, actualLine = 0;\n    items.forEach((item, index) => {\n        legendItem = item.legendItem || {};\n        if (!legendItem.group) {\n            return;\n        }\n        orgTranslateX = legendItem.group.translateX || 0;\n        orgTranslateY = legendItem.y || 0;\n        movementX = item.movementX;\n        if (movementX || (rtl && item.ranges)) {\n            movementX = rtl ?\n                orgTranslateX - item.options.maxSize / 2 :\n                orgTranslateX + movementX;\n            legendItem.group.attr({ translateX: movementX });\n        }\n        if (index > lines[actualLine].step) {\n            actualLine++;\n        }\n        legendItem.group.attr({\n            translateY: Math.round(orgTranslateY + lines[actualLine].height / 2)\n        });\n        legendItem.y = orgTranslateY + lines[actualLine].height / 2;\n    });\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst BubbleLegendComposition = {\n    compose: BubbleLegendComposition_compose\n};\n/* harmony default export */ const Bubble_BubbleLegendComposition = (BubbleLegendComposition);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Point\"],\"commonjs\":[\"highcharts\",\"Point\"],\"commonjs2\":[\"highcharts\",\"Point\"],\"root\":[\"Highcharts\",\"Point\"]}\nvar highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_ = __webpack_require__(260);\nvar highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default = /*#__PURE__*/__webpack_require__.n(highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_);\n;// ./code/es-modules/Series/Bubble/BubblePoint.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 { seriesTypes: { scatter: { prototype: { pointClass: ScatterPoint } } } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default());\n\nconst { extend: BubblePoint_extend } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Class\n *\n * */\nclass BubblePoint extends ScatterPoint {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * @private\n     */\n    haloPath(size) {\n        const computedSize = (size && this.marker ?\n            this.marker.radius ||\n                0 :\n            0) + size;\n        if (this.series.chart.inverted) {\n            const pos = this.pos() || [0, 0], { xAxis, yAxis, chart } = this.series;\n            return chart.renderer.symbols.circle(xAxis.len - pos[1] - computedSize, yAxis.len - pos[0] - computedSize, computedSize * 2, computedSize * 2);\n        }\n        return highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default().prototype.haloPath.call(this, \n        // #6067\n        computedSize);\n    }\n}\n/* *\n *\n *  Class Prototype\n *\n * */\nBubblePoint_extend(BubblePoint.prototype, {\n    ttBelow: false\n});\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Bubble_BubblePoint = (BubblePoint);\n\n;// ./code/es-modules/Series/Bubble/BubbleSeries.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 { parse: BubbleSeries_color } = (highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default());\n\nconst { composed: BubbleSeries_composed, noop: BubbleSeries_noop } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { series: Series, seriesTypes: { column: { prototype: BubbleSeries_columnProto }, scatter: ScatterSeries } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default());\n\nconst { addEvent: BubbleSeries_addEvent, arrayMax: BubbleSeries_arrayMax, arrayMin: BubbleSeries_arrayMin, clamp, extend: BubbleSeries_extend, isNumber: BubbleSeries_isNumber, merge: BubbleSeries_merge, pick: BubbleSeries_pick, pushUnique: BubbleSeries_pushUnique } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Add logic to pad each axis with the amount of pixels necessary to avoid the\n * bubbles to overflow.\n */\nfunction onAxisFoundExtremes() {\n    const axisLength = this.len, { coll, isXAxis, min } = this, range = (this.max || 0) - (min || 0);\n    let pxMin = 0, pxMax = axisLength, transA = axisLength / range, hasActiveSeries;\n    if (coll !== 'xAxis' && coll !== 'yAxis') {\n        return;\n    }\n    // Handle padding on the second pass, or on redraw\n    this.series.forEach((series) => {\n        if (series.bubblePadding && series.reserveSpace()) {\n            // Correction for #1673\n            this.allowZoomOutside = true;\n            hasActiveSeries = true;\n            const data = series.getColumn(isXAxis ? 'x' : 'y');\n            if (isXAxis) {\n                (series.onPoint || series).getRadii(0, 0, series);\n                if (series.onPoint) {\n                    series.radii = series.onPoint.radii;\n                }\n            }\n            if (range > 0) {\n                let i = data.length;\n                while (i--) {\n                    if (BubbleSeries_isNumber(data[i]) &&\n                        this.dataMin <= data[i] &&\n                        data[i] <= this.max) {\n                        const radius = series.radii && series.radii[i] || 0;\n                        pxMin = Math.min(((data[i] - min) * transA) - radius, pxMin);\n                        pxMax = Math.max(((data[i] - min) * transA) + radius, pxMax);\n                    }\n                }\n            }\n        }\n    });\n    // Apply the padding to the min and max properties\n    if (hasActiveSeries && range > 0 && !this.logarithmic) {\n        pxMax -= axisLength;\n        transA *= (axisLength +\n            Math.max(0, pxMin) - // #8901\n            Math.min(pxMax, axisLength)) / axisLength;\n        [\n            ['min', 'userMin', pxMin],\n            ['max', 'userMax', pxMax]\n        ].forEach((keys) => {\n            if (typeof BubbleSeries_pick(this.options[keys[0]], this[keys[1]]) === 'undefined') {\n                this[keys[0]] += keys[2] / transA;\n            }\n        });\n    }\n}\n/**\n * If a user has defined categories, it is necessary to retroactively hide any\n * ticks added by the 'onAxisFoundExtremes' function above (#21672).\n *\n * Otherwise they can show up on the axis, alongside user-defined categories.\n */\nfunction onAxisAfterRender() {\n    const { ticks, tickPositions, dataMin = 0, dataMax = 0, categories } = this, type = this.options.type;\n    if ((categories?.length || type === 'category') &&\n        this.series.find((s) => s.bubblePadding)) {\n        let tickCount = tickPositions.length;\n        while (tickCount--) {\n            const tick = ticks[tickPositions[tickCount]], pos = tick.pos || 0;\n            if (pos > dataMax || pos < dataMin) {\n                tick.label?.hide();\n            }\n        }\n    }\n}\n/* *\n *\n *  Class\n *\n * */\nclass BubbleSeries extends ScatterSeries {\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    static compose(AxisClass, ChartClass, LegendClass) {\n        Bubble_BubbleLegendComposition.compose(ChartClass, LegendClass);\n        if (BubbleSeries_pushUnique(BubbleSeries_composed, 'Series.Bubble')) {\n            BubbleSeries_addEvent(AxisClass, 'foundExtremes', onAxisFoundExtremes);\n            BubbleSeries_addEvent(AxisClass, 'afterRender', onAxisAfterRender);\n        }\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Perform animation on the bubbles\n     * @private\n     */\n    animate(init) {\n        if (!init &&\n            this.points.length < this.options.animationLimit // #8099\n        ) {\n            this.points.forEach(function (point) {\n                const { graphic, plotX = 0, plotY = 0 } = point;\n                if (graphic && graphic.width) { // URL symbols don't have width\n                    // Start values\n                    if (!this.hasRendered) {\n                        graphic.attr({\n                            x: plotX,\n                            y: plotY,\n                            width: 1,\n                            height: 1\n                        });\n                    }\n                    graphic.animate(this.markerAttribs(point), this.options.animation);\n                }\n            }, this);\n        }\n    }\n    /**\n     * Get the radius for each point based on the minSize, maxSize and each\n     * point's Z value. This must be done prior to Series.translate because\n     * the axis needs to add padding in accordance with the point sizes.\n     * @private\n     */\n    getRadii() {\n        const zData = this.getColumn('z'), yData = this.getColumn('y'), radii = [];\n        let len, i, value, zExtremes = this.chart.bubbleZExtremes;\n        const { minPxSize, maxPxSize } = this.getPxExtremes();\n        // Get the collective Z extremes of all bubblish series. The chart-level\n        // `bubbleZExtremes` are only computed once, and reset on `updatedData`\n        // in any member series.\n        if (!zExtremes) {\n            let zMin = Number.MAX_VALUE;\n            let zMax = -Number.MAX_VALUE;\n            let valid;\n            this.chart.series.forEach((otherSeries) => {\n                if (otherSeries.bubblePadding && otherSeries.reserveSpace()) {\n                    const zExtremes = (otherSeries.onPoint || otherSeries).getZExtremes();\n                    if (zExtremes) {\n                        // Changed '||' to 'pick' because min or max can be 0.\n                        // #17280\n                        zMin = Math.min(BubbleSeries_pick(zMin, zExtremes.zMin), zExtremes.zMin);\n                        zMax = Math.max(BubbleSeries_pick(zMax, zExtremes.zMax), zExtremes.zMax);\n                        valid = true;\n                    }\n                }\n            });\n            if (valid) {\n                zExtremes = { zMin, zMax };\n                this.chart.bubbleZExtremes = zExtremes;\n            }\n            else {\n                zExtremes = { zMin: 0, zMax: 0 };\n            }\n        }\n        // Set the shape type and arguments to be picked up in drawPoints\n        for (i = 0, len = zData.length; i < len; i++) {\n            value = zData[i];\n            // Separate method to get individual radius for bubbleLegend\n            radii.push(this.getRadius(zExtremes.zMin, zExtremes.zMax, minPxSize, maxPxSize, value, yData && yData[i]));\n        }\n        this.radii = radii;\n    }\n    /**\n     * Get the individual radius for one point.\n     * @private\n     */\n    getRadius(zMin, zMax, minSize, maxSize, value, yValue) {\n        const options = this.options, sizeByArea = options.sizeBy !== 'width', zThreshold = options.zThreshold;\n        let zRange = zMax - zMin, pos = 0.5;\n        // #8608 - bubble should be visible when z is undefined\n        if (yValue === null || value === null) {\n            return null;\n        }\n        if (BubbleSeries_isNumber(value)) {\n            // When sizing by threshold, the absolute value of z determines\n            // the size of the bubble.\n            if (options.sizeByAbsoluteValue) {\n                value = Math.abs(value - zThreshold);\n                zMax = zRange = Math.max(zMax - zThreshold, Math.abs(zMin - zThreshold));\n                zMin = 0;\n            }\n            // Issue #4419 - if value is less than zMin, push a radius that's\n            // always smaller than the minimum size\n            if (value < zMin) {\n                return minSize / 2 - 1;\n            }\n            // Relative size, a number between 0 and 1\n            if (zRange > 0) {\n                pos = (value - zMin) / zRange;\n            }\n        }\n        if (sizeByArea && pos >= 0) {\n            pos = Math.sqrt(pos);\n        }\n        return Math.ceil(minSize + pos * (maxSize - minSize)) / 2;\n    }\n    /**\n     * Define hasData function for non-cartesian series.\n     * Returns true if the series has points at all.\n     * @private\n     */\n    hasData() {\n        return !!this.dataTable.rowCount;\n    }\n    /**\n     * @private\n     */\n    markerAttribs(point, state) {\n        const attr = super.markerAttribs(point, state), { height = 0, width = 0 } = attr;\n        // Bubble needs a specific `markerAttribs` override because the markers\n        // are rendered into the potentially inverted `series.group`. Unlike\n        // regular markers, which are rendered into the `markerGroup` (#21125).\n        return this.chart.inverted ? BubbleSeries_extend(attr, {\n            x: (point.plotX || 0) - width / 2,\n            y: (point.plotY || 0) - height / 2\n        }) : attr;\n    }\n    /**\n     * @private\n     */\n    pointAttribs(point, state) {\n        const markerOptions = this.options.marker, fillOpacity = markerOptions.fillOpacity, attr = Series.prototype.pointAttribs.call(this, point, state);\n        if (fillOpacity !== 1) {\n            attr.fill = BubbleSeries_color(attr.fill)\n                .setOpacity(fillOpacity)\n                .get('rgba');\n        }\n        return attr;\n    }\n    /**\n     * Extend the base translate method to handle bubble size\n     * @private\n     */\n    translate() {\n        // Run the parent method\n        super.translate.call(this);\n        this.getRadii();\n        this.translateBubble();\n    }\n    translateBubble() {\n        const { data, options, radii } = this, { minPxSize } = this.getPxExtremes();\n        // Set the shape type and arguments to be picked up in drawPoints\n        let i = data.length;\n        while (i--) {\n            const point = data[i], radius = radii ? radii[i] : 0; // #1737\n            // Negative points means negative z values (#9728)\n            if (this.zoneAxis === 'z') {\n                point.negative = (point.z || 0) < (options.zThreshold || 0);\n            }\n            if (BubbleSeries_isNumber(radius) && radius >= minPxSize / 2) {\n                // Shape arguments\n                point.marker = BubbleSeries_extend(point.marker, {\n                    radius,\n                    width: 2 * radius,\n                    height: 2 * radius\n                });\n                // Alignment box for the data label\n                point.dlBox = {\n                    x: point.plotX - radius,\n                    y: point.plotY - radius,\n                    width: 2 * radius,\n                    height: 2 * radius\n                };\n            }\n            else { // Below zThreshold\n                // #1691\n                point.shapeArgs = point.plotY = point.dlBox = void 0;\n                point.isInside = false; // #17281\n            }\n        }\n    }\n    getPxExtremes() {\n        const smallestSize = Math.min(this.chart.plotWidth, this.chart.plotHeight);\n        const getPxSize = (length) => {\n            let isPercent;\n            if (typeof length === 'string') {\n                isPercent = /%$/.test(length);\n                length = parseInt(length, 10);\n            }\n            return isPercent ? smallestSize * length / 100 : length;\n        };\n        const minPxSize = getPxSize(BubbleSeries_pick(this.options.minSize, 8));\n        // Prioritize min size if conflict to make sure bubbles are\n        // always visible. #5873\n        const maxPxSize = Math.max(getPxSize(BubbleSeries_pick(this.options.maxSize, '20%')), minPxSize);\n        return { minPxSize, maxPxSize };\n    }\n    getZExtremes() {\n        const options = this.options, zData = this.getColumn('z').filter(BubbleSeries_isNumber);\n        if (zData.length) {\n            const zMin = BubbleSeries_pick(options.zMin, clamp(BubbleSeries_arrayMin(zData), options.displayNegative === false ?\n                (options.zThreshold || 0) :\n                -Number.MAX_VALUE, Number.MAX_VALUE));\n            const zMax = BubbleSeries_pick(options.zMax, BubbleSeries_arrayMax(zData));\n            if (BubbleSeries_isNumber(zMin) && BubbleSeries_isNumber(zMax)) {\n                return { zMin, zMax };\n            }\n        }\n    }\n    /**\n     * @private\n     * @function Highcharts.Series#searchKDTree\n     */\n    searchKDTree(point, compareX, e, suppliedPointEvaluator = BubbleSeries_noop, suppliedBSideCheckEvaluator = BubbleSeries_noop) {\n        suppliedPointEvaluator = (p1, p2, comparisonProp) => {\n            const p1Dist = p1[comparisonProp] || 0;\n            const p2Dist = p2[comparisonProp] || 0;\n            let ret, flip = false;\n            if (p1Dist < 0 && p2Dist < 0) {\n                ret = (p1Dist - (p1.marker?.radius || 0) >=\n                    p2Dist - (p2.marker?.radius || 0)) ?\n                    p1 :\n                    p2;\n                flip = true;\n            }\n            else {\n                ret = p1Dist < p2Dist ? p1 : p2;\n            }\n            return [ret, flip];\n        };\n        suppliedBSideCheckEvaluator = (a, b, flip) => !flip && (a > b) || (a < b);\n        return super.searchKDTree(point, compareX, e, suppliedPointEvaluator, suppliedBSideCheckEvaluator);\n    }\n}\n/* *\n *\n *  Static Properties\n *\n * */\n/**\n * A bubble series is a three dimensional series type where each point\n * renders an X, Y and Z value. Each points is drawn as a bubble where the\n * position along the X and Y axes mark the X and Y values, and the size of\n * the bubble relates to the Z value.\n *\n * @sample {highcharts} highcharts/demo/bubble/\n *         Bubble chart\n *\n * @extends      plotOptions.scatter\n * @excluding    cluster\n * @product      highcharts highstock\n * @requires     highcharts-more\n * @optionparent plotOptions.bubble\n */\nBubbleSeries.defaultOptions = BubbleSeries_merge(ScatterSeries.defaultOptions, {\n    dataLabels: {\n        formatter: function () {\n            const { numberFormatter } = this.series.chart;\n            const { z } = this.point;\n            return BubbleSeries_isNumber(z) ? numberFormatter(z, -1) : '';\n        },\n        inside: true,\n        verticalAlign: 'middle'\n    },\n    /**\n     * If there are more points in the series than the `animationLimit`, the\n     * animation won't run. Animation affects overall performance and\n     * doesn't work well with heavy data series.\n     *\n     * @since 6.1.0\n     */\n    animationLimit: 250,\n    /**\n     * Whether to display negative sized bubbles. The threshold is given\n     * by the [zThreshold](#plotOptions.bubble.zThreshold) option, and negative\n     * bubbles can be visualized by setting\n     * [negativeColor](#plotOptions.bubble.negativeColor).\n     *\n     * @sample {highcharts} highcharts/plotoptions/bubble-negative/\n     *         Negative bubbles\n     *\n     * @type      {boolean}\n     * @default   true\n     * @since     3.0\n     * @apioption plotOptions.bubble.displayNegative\n     */\n    /**\n     * @extends   plotOptions.series.marker\n     * @excluding enabled, enabledThreshold, height, radius, width\n     */\n    marker: {\n        lineColor: null, // Inherit from series.color\n        lineWidth: 1,\n        /**\n         * The fill opacity of the bubble markers.\n         */\n        fillOpacity: 0.5,\n        /**\n         * In bubble charts, the radius is overridden and determined based\n         * on the point's data value.\n         *\n         * @ignore-option\n         */\n        radius: null,\n        states: {\n            hover: {\n                radiusPlus: 0\n            }\n        },\n        /**\n         * A predefined shape or symbol for the marker. Possible values are\n         * \"circle\", \"square\", \"diamond\", \"triangle\" and \"triangle-down\".\n         *\n         * Additionally, the URL to a graphic can be given on the form\n         * `url(graphic.png)`. Note that for the image to be applied to\n         * exported charts, its URL needs to be accessible by the export\n         * server.\n         *\n         * Custom callbacks for symbol path generation can also be added to\n         * `Highcharts.SVGRenderer.prototype.symbols`. The callback is then\n         * used by its method name, as shown in the demo.\n         *\n         * @sample {highcharts} highcharts/plotoptions/bubble-symbol/\n         *         Bubble chart with various symbols\n         * @sample {highcharts} highcharts/plotoptions/series-marker-symbol/\n         *         General chart with predefined, graphic and custom markers\n         *\n         * @type  {Highcharts.SymbolKeyValue|string}\n         * @since 5.0.11\n         */\n        symbol: 'circle'\n    },\n    /**\n     * Minimum bubble size. Bubbles will automatically size between the\n     * `minSize` and `maxSize` to reflect the `z` value of each bubble.\n     * Can be either pixels (when no unit is given), or a percentage of\n     * the smallest one of the plot width and height.\n     *\n     * @sample {highcharts} highcharts/plotoptions/bubble-size/\n     *         Bubble size\n     *\n     * @type    {number|string}\n     * @since   3.0\n     * @product highcharts highstock\n     */\n    minSize: 8,\n    /**\n     * Maximum bubble size. Bubbles will automatically size between the\n     * `minSize` and `maxSize` to reflect the `z` value of each bubble.\n     * Can be either pixels (when no unit is given), or a percentage of\n     * the smallest one of the plot width and height.\n     *\n     * @sample {highcharts} highcharts/plotoptions/bubble-size/\n     *         Bubble size\n     *\n     * @type    {number|string}\n     * @since   3.0\n     * @product highcharts highstock\n     */\n    maxSize: '20%',\n    /**\n     * When a point's Z value is below the\n     * [zThreshold](#plotOptions.bubble.zThreshold)\n     * setting, this color is used.\n     *\n     * @sample {highcharts} highcharts/plotoptions/bubble-negative/\n     *         Negative bubbles\n     *\n     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @since     3.0\n     * @product   highcharts\n     * @apioption plotOptions.bubble.negativeColor\n     */\n    /**\n     * Whether the bubble's value should be represented by the area or the\n     * width of the bubble. The default, `area`, corresponds best to the\n     * human perception of the size of each bubble.\n     *\n     * @sample {highcharts} highcharts/plotoptions/bubble-sizeby/\n     *         Comparison of area and size\n     *\n     * @type       {Highcharts.BubbleSizeByValue}\n     * @default    area\n     * @since      3.0.7\n     * @apioption  plotOptions.bubble.sizeBy\n     */\n    /**\n     * When this is true, the absolute value of z determines the size of\n     * the bubble. This means that with the default `zThreshold` of 0, a\n     * bubble of value -1 will have the same size as a bubble of value 1,\n     * while a bubble of value 0 will have a smaller size according to\n     * `minSize`.\n     *\n     * @sample    {highcharts} highcharts/plotoptions/bubble-sizebyabsolutevalue/\n     *            Size by absolute value, various thresholds\n     *\n     * @type      {boolean}\n     * @default   false\n     * @since     4.1.9\n     * @product   highcharts\n     * @apioption plotOptions.bubble.sizeByAbsoluteValue\n     */\n    /**\n     * When this is true, the series will not cause the Y axis to cross\n     * the zero plane (or [threshold](#plotOptions.series.threshold) option)\n     * unless the data actually crosses the plane.\n     *\n     * For example, if `softThreshold` is `false`, a series of 0, 1, 2,\n     * 3 will make the Y axis show negative values according to the\n     * `minPadding` option. If `softThreshold` is `true`, the Y axis starts\n     * at 0.\n     *\n     * @since   4.1.9\n     * @product highcharts\n     */\n    softThreshold: false,\n    states: {\n        hover: {\n            halo: {\n                size: 5\n            }\n        }\n    },\n    tooltip: {\n        pointFormat: '({point.x}, {point.y}), Size: {point.z}'\n    },\n    turboThreshold: 0,\n    /**\n     * The minimum for the Z value range. Defaults to the highest Z value\n     * in the data.\n     *\n     * @see [zMin](#plotOptions.bubble.zMin)\n     *\n     * @sample {highcharts} highcharts/plotoptions/bubble-zmin-zmax/\n     *         Z has a possible range of 0-100\n     *\n     * @type      {number}\n     * @since     4.0.3\n     * @product   highcharts\n     * @apioption plotOptions.bubble.zMax\n     */\n    /**\n     * @default   z\n     * @apioption plotOptions.bubble.colorKey\n     */\n    /**\n     * The minimum for the Z value range. Defaults to the lowest Z value\n     * in the data.\n     *\n     * @see [zMax](#plotOptions.bubble.zMax)\n     *\n     * @sample {highcharts} highcharts/plotoptions/bubble-zmin-zmax/\n     *         Z has a possible range of 0-100\n     *\n     * @type      {number}\n     * @since     4.0.3\n     * @product   highcharts\n     * @apioption plotOptions.bubble.zMin\n     */\n    /**\n     * When [displayNegative](#plotOptions.bubble.displayNegative) is `false`,\n     * bubbles with lower Z values are skipped. When `displayNegative`\n     * is `true` and a [negativeColor](#plotOptions.bubble.negativeColor)\n     * is given, points with lower Z is colored.\n     *\n     * @sample {highcharts} highcharts/plotoptions/bubble-negative/\n     *         Negative bubbles\n     *\n     * @since   3.0\n     * @product highcharts\n     */\n    zThreshold: 0,\n    zoneAxis: 'z'\n});\nBubbleSeries_extend(BubbleSeries.prototype, {\n    alignDataLabel: BubbleSeries_columnProto.alignDataLabel,\n    applyZones: BubbleSeries_noop,\n    bubblePadding: true,\n    isBubble: true,\n    keysAffectYAxis: ['y'],\n    pointArrayMap: ['y', 'z'],\n    pointClass: Bubble_BubblePoint,\n    parallelArrays: ['x', 'y', 'z'],\n    trackerGroups: ['group', 'dataLabelsGroup'],\n    specialGroup: 'group', // To allow clipping (#6296)\n    zoneAxis: 'z'\n});\n// On updated data in any series, delete the chart-level Z extremes cache\nBubbleSeries_addEvent(BubbleSeries, 'updatedData', (e) => {\n    delete e.target.chart.bubbleZExtremes;\n});\n// After removing series, delete the chart-level Z extremes cache, #17502.\nBubbleSeries_addEvent(BubbleSeries, 'remove', (e) => {\n    delete e.target.chart.bubbleZExtremes;\n});\nhighcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default().registerSeriesType('bubble', BubbleSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Bubble_BubbleSeries = (BubbleSeries);\n/* *\n *\n *  API Declarations\n *\n * */\n/**\n * @typedef {\"area\"|\"width\"} Highcharts.BubbleSizeByValue\n */\n''; // Detach doclets above\n/* *\n *\n *  API Options\n *\n * */\n/**\n * A `bubble` series. If the [type](#series.bubble.type) option is\n * not specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends   series,plotOptions.bubble\n * @excluding dataParser, dataURL, legendSymbolColor, stack\n * @product   highcharts highstock\n * @requires  highcharts-more\n * @apioption series.bubble\n */\n/**\n * An array of data points for the series. For the `bubble` series type,\n * points can be given in the following ways:\n *\n * 1. An array of arrays with 3 or 2 values. In this case, the values correspond\n *    to `x,y,z`. If the first value is a string, it is applied as the name of\n *    the point, and the `x` value is inferred. The `x` value can also be\n *    omitted, in which case the inner arrays should be of length 2\\. Then the\n *    `x` value is automatically calculated, either starting at 0 and\n *    incremented by 1, or from `pointStart` and `pointInterval` given in the\n *    series options.\n *    ```js\n *    data: [\n *        [0, 1, 2],\n *        [1, 5, 5],\n *        [2, 0, 2]\n *    ]\n *    ```\n *\n * 2. An array of objects with named values. The following snippet shows only a\n *    few settings, see the complete options set below. If the total number of\n *    data points exceeds the series'\n *    [turboThreshold](#series.bubble.turboThreshold), this option is not\n *    available.\n *    ```js\n *    data: [{\n *        x: 1,\n *        y: 1,\n *        z: 1,\n *        name: \"Point2\",\n *        color: \"#00FF00\"\n *    }, {\n *        x: 1,\n *        y: 5,\n *        z: 4,\n *        name: \"Point1\",\n *        color: \"#FF00FF\"\n *    }]\n *    ```\n *\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n *         Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n *         Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n *         Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n *         Config objects\n *\n * @type      {Array<Array<(number|string),number>|Array<(number|string),number,number>|*>}\n * @extends   series.line.data\n * @product   highcharts\n * @apioption series.bubble.data\n */\n/**\n * @extends     series.line.data.marker\n * @excluding   enabledThreshold, height, radius, width\n * @product     highcharts\n * @apioption   series.bubble.data.marker\n */\n/**\n * The size value for each bubble. The bubbles' diameters are computed\n * based on the `z`, and controlled by series options like `minSize`,\n * `maxSize`, `sizeBy`, `zMin` and `zMax`.\n *\n * @type      {number|null}\n * @product   highcharts\n * @apioption series.bubble.data.z\n */\n/**\n * @excluding enabled, enabledThreshold, height, radius, width\n * @apioption series.bubble.marker\n */\n''; // Adds doclets above to transpiled file\n\n;// ./code/es-modules/Series/ColumnRange/ColumnRangePoint.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 { seriesTypes: { column: { prototype: { pointClass: { prototype: ColumnRangePoint_columnProto } } }, arearange: { prototype: { pointClass: ColumnRangePoint_AreaRangePoint } } } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default());\n\nconst { extend: ColumnRangePoint_extend, isNumber: ColumnRangePoint_isNumber } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Class\n *\n * */\nclass ColumnRangePoint extends ColumnRangePoint_AreaRangePoint {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    isValid() {\n        return ColumnRangePoint_isNumber(this.low);\n    }\n}\nColumnRangePoint_extend(ColumnRangePoint.prototype, {\n    setState: ColumnRangePoint_columnProto.setState\n});\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const ColumnRange_ColumnRangePoint = (ColumnRangePoint);\n\n;// ./code/es-modules/Series/ColumnRange/ColumnRangeSeries.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 { noop: ColumnRangeSeries_noop } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { seriesTypes: { arearange: ColumnRangeSeries_AreaRangeSeries, column: ColumnSeries, column: { prototype: ColumnRangeSeries_columnProto } } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default());\n\nconst { addEvent: ColumnRangeSeries_addEvent, clamp: ColumnRangeSeries_clamp, extend: ColumnRangeSeries_extend, isNumber: ColumnRangeSeries_isNumber, merge: ColumnRangeSeries_merge, pick: ColumnRangeSeries_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Constants\n *\n * */\n/**\n * The column range is a cartesian series type with higher and lower\n * Y values along an X axis. To display horizontal bars, set\n * [chart.inverted](#chart.inverted) to `true`.\n *\n * @sample {highcharts|highstock} highcharts/demo/columnrange/\n *         Inverted column range\n *\n * @extends      plotOptions.column\n * @since        2.3.0\n * @excluding    negativeColor, stacking, softThreshold, threshold\n * @product      highcharts highstock\n * @requires     highcharts-more\n * @optionparent plotOptions.columnrange\n */\nconst columnRangeOptions = {\n    borderRadius: {\n        where: 'all'\n    },\n    /**\n     * Extended data labels for range series types. Range series data labels\n     * have no `x` and `y` options. Instead, they have `xLow`, `xHigh`,\n     * `yLow` and `yHigh` options to allow the higher and lower data label\n     * sets individually.\n     *\n     * @declare   Highcharts.SeriesAreaRangeDataLabelsOptionsObject\n     * @extends   plotOptions.arearange.dataLabels\n     * @since     2.3.0\n     * @product   highcharts highstock\n     * @apioption plotOptions.columnrange.dataLabels\n     */\n    pointRange: null,\n    legendSymbol: 'rectangle',\n    /** @ignore-option */\n    marker: null,\n    states: {\n        hover: {\n            /** @ignore-option */\n            halo: false\n        }\n    }\n};\n/* *\n *\n *  Class\n *\n * */\n/**\n * The ColumnRangeSeries class\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.columnrange\n *\n * @augments Highcharts.Series\n */\nclass ColumnRangeSeries extends ColumnRangeSeries_AreaRangeSeries {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    setOptions() {\n        // #14359 Prevent side-effect from stacking.\n        ColumnRangeSeries_merge(true, arguments[0], { stacking: void 0 });\n        return ColumnRangeSeries_AreaRangeSeries.prototype.setOptions.apply(this, arguments);\n    }\n    // Overrides from modules that may be loaded after this module\n    // @todo move to compositions\n    translate() {\n        return ColumnRangeSeries_columnProto.translate.apply(this);\n    }\n    // Public crispCol(): BBoxObject {\n    //     return columnProto.crispCol.apply(this, arguments as any);\n    // }\n    // public drawPoints(): void {\n    //     return columnProto.drawPoints.apply(this, arguments as any);\n    // }\n    // public drawTracker(): void {\n    //     return columnProto.drawTracker.apply(this, arguments as any);\n    // }\n    // public getColumnMetrics(): ColumnMetricsObject {\n    //     return columnProto.getColumnMetrics.apply(this, arguments as any);\n    // }\n    pointAttribs() {\n        return ColumnRangeSeries_columnProto.pointAttribs.apply(this, arguments);\n    }\n    // Public adjustForMissingColumns(): number {\n    //     return columnProto.adjustForMissingColumns.apply(this, arguments);\n    // }\n    // public animate(): void {\n    //     return columnProto.animate.apply(this, arguments as any);\n    // }\n    translate3dPoints() {\n        return ColumnRangeSeries_columnProto.translate3dPoints.apply(this, arguments);\n    }\n    translate3dShapes() {\n        return ColumnRangeSeries_columnProto.translate3dShapes.apply(this, arguments);\n    }\n    afterColumnTranslate() {\n        /**\n         * Translate data points from raw values x and y to plotX and plotY\n         * @private\n         */\n        const yAxis = this.yAxis, xAxis = this.xAxis, startAngleRad = xAxis.startAngleRad, chart = this.chart, isRadial = this.xAxis.isRadial, safeDistance = Math.max(chart.chartWidth, chart.chartHeight) + 999;\n        let height, heightDifference, start, y;\n        // eslint-disable-next-line valid-jsdoc\n        /**\n         * Don't draw too far outside plot area (#6835)\n         * @private\n         */\n        function safeBounds(pixelPos) {\n            return ColumnRangeSeries_clamp(pixelPos, -safeDistance, safeDistance);\n        }\n        // Set plotLow and plotHigh\n        this.points.forEach((point) => {\n            const shapeArgs = point.shapeArgs || {}, minPointLength = this.options.minPointLength, plotY = point.plotY, plotHigh = yAxis.translate(point.high, 0, 1, 0, 1);\n            if (ColumnRangeSeries_isNumber(plotHigh) && ColumnRangeSeries_isNumber(plotY)) {\n                point.plotHigh = safeBounds(plotHigh);\n                point.plotLow = safeBounds(plotY);\n                // Adjust shape\n                y = point.plotHigh;\n                height = ColumnRangeSeries_pick(point.rectPlotY, point.plotY) - point.plotHigh;\n                // Adjust for minPointLength\n                if (Math.abs(height) < minPointLength) {\n                    heightDifference = (minPointLength - height);\n                    height += heightDifference;\n                    y -= heightDifference / 2;\n                    // Adjust for negative ranges or reversed Y axis (#1457)\n                }\n                else if (height < 0) {\n                    height *= -1;\n                    y -= height;\n                }\n                if (isRadial && this.polar) {\n                    start = point.barX + startAngleRad;\n                    point.shapeType = 'arc';\n                    point.shapeArgs = this.polar.arc(y + height, y, start, start + point.pointWidth);\n                }\n                else {\n                    shapeArgs.height = height;\n                    shapeArgs.y = y;\n                    const { x = 0, width = 0 } = shapeArgs;\n                    // #17912, aligning column range points\n                    // merge if shapeArgs contains more properties e.g. for 3d\n                    point.shapeArgs = ColumnRangeSeries_merge(point.shapeArgs, this.crispCol(x, y, width, height));\n                    point.tooltipPos = chart.inverted ?\n                        [\n                            yAxis.len + yAxis.pos - chart.plotLeft - y -\n                                height / 2,\n                            xAxis.len + xAxis.pos - chart.plotTop - x -\n                                width / 2,\n                            height\n                        ] : [\n                        xAxis.left - chart.plotLeft + x + width / 2,\n                        yAxis.pos - chart.plotTop + y + height / 2,\n                        height\n                    ]; // Don't inherit from column tooltip position - #3372\n                }\n            }\n        });\n    }\n}\n/* *\n *\n *  Static Properties\n *\n * */\nColumnRangeSeries.defaultOptions = ColumnRangeSeries_merge(ColumnSeries.defaultOptions, ColumnRangeSeries_AreaRangeSeries.defaultOptions, columnRangeOptions);\nColumnRangeSeries_addEvent(ColumnRangeSeries, 'afterColumnTranslate', function () {\n    ColumnRangeSeries.prototype.afterColumnTranslate.apply(this);\n}, { order: 5 });\nColumnRangeSeries_extend(ColumnRangeSeries.prototype, {\n    directTouch: true,\n    pointClass: ColumnRange_ColumnRangePoint,\n    trackerGroups: ['group', 'dataLabelsGroup'],\n    adjustForMissingColumns: ColumnRangeSeries_columnProto.adjustForMissingColumns,\n    animate: ColumnRangeSeries_columnProto.animate,\n    crispCol: ColumnRangeSeries_columnProto.crispCol,\n    drawGraph: ColumnRangeSeries_noop,\n    drawPoints: ColumnRangeSeries_columnProto.drawPoints,\n    getSymbol: ColumnRangeSeries_noop,\n    drawTracker: ColumnRangeSeries_columnProto.drawTracker,\n    getColumnMetrics: ColumnRangeSeries_columnProto.getColumnMetrics\n});\nhighcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default().registerSeriesType('columnrange', ColumnRangeSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const ColumnRange_ColumnRangeSeries = ((/* unused pure expression or super */ null && (ColumnRangeSeries)));\n/* *\n *\n *  API Options\n *\n * */\n/**\n * A `columnrange` series. If the [type](#series.columnrange.type)\n * option is not specified, it is inherited from\n * [chart.type](#chart.type).\n *\n * @extends   series,plotOptions.columnrange\n * @excluding dataParser, dataURL, stack, stacking\n * @product   highcharts highstock\n * @requires  highcharts-more\n * @apioption series.columnrange\n */\n/**\n * An array of data points for the series. For the `columnrange` series\n * type, points can be given in the following ways:\n *\n * 1. An array of arrays with 3 or 2 values. In this case, the values correspond\n *    to `x,low,high`. If the first value is a string, it is applied as the name\n *    of the point, and the `x` value is inferred. The `x` value can also be\n *    omitted, in which case the inner arrays should be of length 2\\. Then the\n *    `x` value is automatically calculated, either starting at 0 and\n *    incremented by 1, or from `pointStart` and `pointInterval` given in the\n *    series options.\n *    ```js\n *    data: [\n *        [0, 4, 2],\n *        [1, 2, 1],\n *        [2, 9, 10]\n *    ]\n *    ```\n *\n * 2. An array of objects with named values. The following snippet shows only a\n *    few settings, see the complete options set below. If the total number of\n *    data points exceeds the series'\n *    [turboThreshold](#series.columnrange.turboThreshold), this option is not\n *    available.\n *    ```js\n *    data: [{\n *        x: 1,\n *        low: 0,\n *        high: 4,\n *        name: \"Point2\",\n *        color: \"#00FF00\"\n *    }, {\n *        x: 1,\n *        low: 5,\n *        high: 3,\n *        name: \"Point1\",\n *        color: \"#FF00FF\"\n *    }]\n *    ```\n *\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n *         Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n *         Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n *         Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n *         Config objects\n *\n * @type      {Array<Array<(number|string),number>|Array<(number|string),number,number>|*>}\n * @extends   series.arearange.data\n * @excluding marker\n * @product   highcharts highstock\n * @apioption series.columnrange.data\n */\n/**\n * @extends   series.columnrange.dataLabels\n * @product   highcharts highstock\n * @apioption series.columnrange.data.dataLabels\n */\n/**\n * @excluding halo, lineWidth, lineWidthPlus, marker\n * @product   highcharts highstock\n * @apioption series.columnrange.states.hover\n */\n/**\n * @excluding halo, lineWidth, lineWidthPlus, marker\n * @product   highcharts highstock\n * @apioption series.columnrange.states.select\n */\n''; // Adds doclets above into transpiled\n\n;// ./code/es-modules/Series/ColumnPyramid/ColumnPyramidSeriesDefaults.js\n/* *\n *\n *  (c) 2010-2024 Sebastian Bochan\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  API Options\n *\n * */\n/**\n * Column pyramid series display one pyramid per value along an X axis.\n * To display horizontal pyramids, set [chart.inverted](#chart.inverted) to\n * `true`.\n *\n * @sample {highcharts|highstock} highcharts/demo/column-pyramid/\n *         Column pyramid\n * @sample {highcharts|highstock} highcharts/plotoptions/columnpyramid-stacked/\n *         Column pyramid stacked\n * @sample {highcharts|highstock} highcharts/plotoptions/columnpyramid-inverted/\n *         Column pyramid inverted\n *\n * @extends      plotOptions.column\n * @since        7.0.0\n * @product      highcharts highstock\n * @excluding    boostThreshold, borderRadius, crisp, depth, edgeColor,\n *               edgeWidth, groupZPadding, negativeColor, softThreshold,\n *               threshold, zoneAxis, zones, boostBlending\n * @requires     highcharts-more\n * @optionparent plotOptions.columnpyramid\n */\nconst ColumnPyramidSeriesDefaults = {};\n/**\n * A `columnpyramid` series. If the [type](#series.columnpyramid.type) option is\n * not specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends   series,plotOptions.columnpyramid\n * @excluding connectEnds, connectNulls, dashStyle, dataParser, dataURL,\n *            gapSize, gapUnit, linecap, lineWidth, marker, step,\n *            boostThreshold, boostBlending\n * @product   highcharts highstock\n * @requires  highcharts-more\n * @apioption series.columnpyramid\n */\n/**\n * @excluding halo, lineWidth, lineWidthPlus, marker\n * @product   highcharts highstock\n * @apioption series.columnpyramid.states.hover\n */\n/**\n * @excluding halo, lineWidth, lineWidthPlus, marker\n * @product   highcharts highstock\n * @apioption series.columnpyramid.states.select\n */\n/**\n * An array of data points for the series. For the `columnpyramid` series type,\n * points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n *    interpreted as `y` options. The `x` values will be automatically\n *    calculated, either starting at 0 and incremented by 1, or from\n *    `pointStart` and `pointInterval` given in the series options. If the axis\n *    has categories, these will be used. Example:\n *    ```js\n *    data: [0, 5, 3, 5]\n *    ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n *    `x,y`. If the first value is a string, it is applied as the name of the\n *    point, and the `x` value is inferred.\n *    ```js\n *    data: [\n *        [0, 6],\n *        [1, 2],\n *        [2, 6]\n *    ]\n *    ```\n *\n * 3. An array of objects with named values. The objects are point configuration\n *    objects as seen below. If the total number of data points exceeds the\n *    series' [turboThreshold](#series.columnpyramid.turboThreshold), this\n *    option is not available.\n *    ```js\n *    data: [{\n *        x: 1,\n *        y: 9,\n *        name: \"Point2\",\n *        color: \"#00FF00\"\n *    }, {\n *        x: 1,\n *        y: 6,\n *        name: \"Point1\",\n *        color: \"#FF00FF\"\n *    }]\n *    ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n *         Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n *         Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n *         Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n *         Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n *         Config objects\n *\n * @type      {Array<number|Array<(number|string),(number|null)>|null|*>}\n * @extends   series.line.data\n * @excluding marker\n * @product   highcharts highstock\n * @apioption series.columnpyramid.data\n */\n''; // Keeps doclets above separate\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const ColumnPyramid_ColumnPyramidSeriesDefaults = (ColumnPyramidSeriesDefaults);\n\n;// ./code/es-modules/Series/ColumnPyramid/ColumnPyramidSeries.js\n/* *\n *\n *  (c) 2010-2024 Sebastian Bochan\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { column: ColumnPyramidSeries_ColumnSeries } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes;\n\nconst { clamp: ColumnPyramidSeries_clamp, merge: ColumnPyramidSeries_merge, pick: ColumnPyramidSeries_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Class\n *\n * */\n/**\n * The ColumnPyramidSeries class\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.columnpyramid\n *\n * @augments Highcharts.Series\n */\nclass ColumnPyramidSeries extends ColumnPyramidSeries_ColumnSeries {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Overrides the column translate method\n     * @private\n     */\n    translate() {\n        const series = this, chart = series.chart, options = series.options, dense = series.dense =\n            series.closestPointRange * series.xAxis.transA < 2, borderWidth = series.borderWidth = ColumnPyramidSeries_pick(options.borderWidth, dense ? 0 : 1 // #3635\n        ), yAxis = series.yAxis, threshold = options.threshold, minPointLength = ColumnPyramidSeries_pick(options.minPointLength, 5), metrics = series.getColumnMetrics(), pointWidth = metrics.width, pointXOffset = series.pointXOffset = metrics.offset;\n        let translatedThreshold = series.translatedThreshold =\n            yAxis.getThreshold(threshold), \n        // Postprocessed for border width\n        seriesBarW = series.barW =\n            Math.max(pointWidth, 1 + 2 * borderWidth);\n        if (chart.inverted) {\n            translatedThreshold -= 0.5; // #3355\n        }\n        // When the pointPadding is 0,\n        // we want the pyramids to be packed tightly,\n        // so we allow individual pyramids to have individual sizes.\n        // When pointPadding is greater,\n        // we strive for equal-width columns (#2694).\n        if (options.pointPadding) {\n            seriesBarW = Math.ceil(seriesBarW);\n        }\n        super.translate();\n        // Record the new values\n        for (const point of series.points) {\n            const yBottom = ColumnPyramidSeries_pick(point.yBottom, translatedThreshold), safeDistance = 999 + Math.abs(yBottom), plotY = ColumnPyramidSeries_clamp(point.plotY, -safeDistance, yAxis.len + safeDistance), \n            // Don't draw too far outside plot area\n            // (#1303, #2241, #4264)\n            barW = seriesBarW / 2, barY = Math.min(plotY, yBottom), barH = Math.max(plotY, yBottom) - barY;\n            let barX = point.plotX + pointXOffset, stackTotal, stackHeight, topXwidth, bottomXwidth, invBarPos, x1, x2, x3, x4, y1, y2;\n            // Adjust for null or missing points\n            if (options.centerInCategory) {\n                barX = series.adjustForMissingColumns(barX, pointWidth, point, metrics);\n            }\n            point.barX = barX;\n            point.pointWidth = pointWidth;\n            // Fix the tooltip on center of grouped pyramids\n            // (#1216, #424, #3648)\n            point.tooltipPos = chart.inverted ?\n                [\n                    yAxis.len + yAxis.pos - chart.plotLeft - plotY,\n                    series.xAxis.len - barX - barW,\n                    barH\n                ] :\n                [\n                    barX + barW,\n                    plotY + yAxis.pos - chart.plotTop,\n                    barH\n                ];\n            stackTotal =\n                threshold + (point.total || point.y);\n            // Overwrite stacktotal (always 100 / -100)\n            if (options.stacking === 'percent') {\n                stackTotal =\n                    threshold + (point.y < 0) ?\n                        -100 :\n                        100;\n            }\n            // Get the highest point (if stack, extract from total)\n            const topPointY = yAxis.toPixels((stackTotal), true);\n            // Calculate height of stack (in pixels)\n            stackHeight =\n                chart.plotHeight - topPointY -\n                    (chart.plotHeight - translatedThreshold);\n            // `topXwidth` and `bottomXwidth` = width of lines from the center\n            // calculated from tanges proportion. Cannot be a NaN #12514.\n            topXwidth = stackHeight ?\n                (barW * (barY - topPointY)) / stackHeight : 0;\n            // Like topXwidth, but with height of point\n            bottomXwidth = stackHeight ?\n                (barW * (barY + barH - topPointY)) / stackHeight :\n                0;\n            /*\n                    /\\\n                   /  \\\n            x1,y1,------ x2,y1\n                /       \\\n               -----------\n            x4,y2        x3,y2\n            */\n            x1 = barX - topXwidth + barW;\n            x2 = barX + topXwidth + barW;\n            x3 = barX + bottomXwidth + barW;\n            x4 = barX - bottomXwidth + barW;\n            y1 = barY - minPointLength;\n            y2 = barY + barH;\n            if (point.y < 0) {\n                y1 = barY;\n                y2 = barY + barH + minPointLength;\n            }\n            // Inverted chart\n            if (chart.inverted) {\n                invBarPos = yAxis.width - barY;\n                stackHeight =\n                    topPointY - (yAxis.width - translatedThreshold);\n                // Proportion tanges\n                topXwidth = (barW *\n                    (topPointY - invBarPos)) / stackHeight;\n                bottomXwidth = (barW *\n                    (topPointY - (invBarPos - barH))) / stackHeight;\n                x1 = barX + barW + topXwidth; // Top bottom\n                x2 = x1 - 2 * topXwidth; // Top top\n                x3 = barX - bottomXwidth + barW; // Bottom top\n                x4 = barX + bottomXwidth + barW; // Bottom bottom\n                y1 = barY;\n                y2 = barY + barH - minPointLength;\n                if (point.y < 0) {\n                    y2 = barY + barH + minPointLength;\n                }\n            }\n            // Register shape type and arguments to be used in drawPoints\n            point.shapeType = 'path';\n            point.shapeArgs = {\n                x: x1,\n                y: y1,\n                width: x2 - x1,\n                height: barH,\n                // Path of pyramid\n                d: [\n                    ['M', x1, y1],\n                    ['L', x2, y1],\n                    ['L', x3, y2],\n                    ['L', x4, y2],\n                    ['Z']\n                ]\n            };\n        }\n    }\n}\n/* *\n *\n *  Static properties\n *\n * */\nColumnPyramidSeries.defaultOptions = ColumnPyramidSeries_merge(ColumnPyramidSeries_ColumnSeries.defaultOptions, ColumnPyramid_ColumnPyramidSeriesDefaults);\nhighcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default().registerSeriesType('columnpyramid', ColumnPyramidSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const ColumnPyramid_ColumnPyramidSeries = ((/* unused pure expression or super */ null && (ColumnPyramidSeries)));\n\n;// ./code/es-modules/Series/ErrorBar/ErrorBarSeriesDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  API Options\n *\n * */\n/**\n * Error bars are a graphical representation of the variability of data and\n * are used on graphs to indicate the error, or uncertainty in a reported\n * measurement.\n *\n * @sample highcharts/demo/error-bar/\n *         Error bars on a column series\n * @sample highcharts/series-errorbar/on-scatter/\n *         Error bars on a scatter series\n * @sample highcharts/series-errorbar/datalabels/\n *         Error bars with data labels\n *\n * @extends      plotOptions.boxplot\n * @excluding    boostBlending, boostThreshold\n * @product      highcharts\n * @requires     highcharts-more\n * @optionparent plotOptions.errorbar\n */\nconst ErrorBarSeriesDefaults = {\n    /**\n     * The main color of the bars. This can be overridden by\n     * [stemColor](#plotOptions.errorbar.stemColor) and\n     * [whiskerColor](#plotOptions.errorbar.whiskerColor) individually.\n     *\n     * @sample {highcharts} highcharts/plotoptions/error-bar-styling/\n     *         Error bar styling\n     *\n     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @default #000000\n     * @since   3.0\n     * @product highcharts\n     */\n    color: \"#000000\" /* Palette.neutralColor100 */,\n    grouping: false,\n    /**\n     * The parent series of the error bar. The default value links it to\n     * the previous series. Otherwise, use the id of the parent series.\n     *\n     * @since   3.0\n     * @product highcharts\n     */\n    linkedTo: ':previous',\n    tooltip: {\n        pointFormat: '<span style=\"color:{point.color}\">\\u25CF</span> {series.name}: <b>{point.low}</b> - <b>{point.high}</b><br/>'\n    },\n    /**\n     * The line width of the whiskers, the horizontal lines marking\n     * low and high values. When `null`, the general\n     * [lineWidth](#plotOptions.errorbar.lineWidth) applies.\n     *\n     * @sample {highcharts} highcharts/plotoptions/error-bar-styling/\n     *         Error bar styling\n     *\n     * @type    {number}\n     * @since   3.0\n     * @product highcharts\n     */\n    whiskerWidth: null\n};\n/**\n * A `errorbar` series. If the [type](#series.errorbar.type) option\n * is not specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends   series,plotOptions.errorbar\n * @excluding dataParser, dataURL, stack, stacking, boostThreshold,\n *            boostBlending\n * @product   highcharts\n * @requires  highcharts-more\n * @apioption series.errorbar\n */\n/**\n * An array of data points for the series. For the `errorbar` series\n * type, points can be given in the following ways:\n *\n * 1. An array of arrays with 3 or 2 values. In this case, the values correspond\n *    to `x,low,high`. If the first value is a string, it is applied as the name\n *    of the point, and the `x` value is inferred. The `x` value can also be\n *    omitted, in which case the inner arrays should be of length 2\\. Then the\n *    `x` value is automatically calculated, either starting at 0 and\n *    incremented by 1, or from `pointStart` and `pointInterval` given in the\n *    series options.\n *    ```js\n *    data: [\n *        [0, 10, 2],\n *        [1, 1, 8],\n *        [2, 4, 5]\n *    ]\n *    ```\n *\n * 2. An array of objects with named values. The following snippet shows only a\n *    few settings, see the complete options set below. If the total number of\n *    data points exceeds the series'\n *    [turboThreshold](#series.errorbar.turboThreshold), this option is not\n *    available.\n *    ```js\n *    data: [{\n *        x: 1,\n *        low: 0,\n *        high: 0,\n *        name: \"Point2\",\n *        color: \"#00FF00\"\n *    }, {\n *        x: 1,\n *        low: 5,\n *        high: 5,\n *        name: \"Point1\",\n *        color: \"#FF00FF\"\n *    }]\n *    ```\n *\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n *         Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n *         Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n *         Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n *         Config objects\n *\n * @type      {Array<Array<(number|string),number>|Array<(number|string),number,number>|*>}\n * @extends   series.arearange.data\n * @excluding dataLabels, drilldown, marker, states\n * @product   highcharts\n * @apioption series.errorbar.data\n */\n''; // Adds doclets above to transpiled file\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const ErrorBar_ErrorBarSeriesDefaults = (ErrorBarSeriesDefaults);\n\n;// ./code/es-modules/Series/ErrorBar/ErrorBarSeries.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\n\n\nconst { arearange: ErrorBarSeries_AreaRangeSeries } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes;\n\nconst { addEvent: ErrorBarSeries_addEvent, merge: ErrorBarSeries_merge, extend: ErrorBarSeries_extend } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Class\n *\n * */\n/**\n * Errorbar series type\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.errorbar\n *\n * @augments Highcharts.Series\n */\nclass ErrorBarSeries extends BoxPlot_BoxPlotSeries {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    getColumnMetrics() {\n        const series = this;\n        // Get the width and X offset, either on top of the linked series\n        // column or standalone\n        return ((series.linkedParent && series.linkedParent.columnMetrics) ||\n            highcharts_Series_types_column_commonjs_highcharts_Series_types_column_commonjs2_highcharts_Series_types_column_root_Highcharts_Series_types_column_default().prototype.getColumnMetrics.call(series));\n    }\n    drawDataLabels() {\n        const series = this, valKey = series.pointValKey;\n        if (ErrorBarSeries_AreaRangeSeries) {\n            ErrorBarSeries_AreaRangeSeries.prototype.drawDataLabels.call(series);\n            // Arearange drawDataLabels does not reset point.y to high,\n            // but to low after drawing (#4133)\n            for (const point of series.points) {\n                point.y = point[valKey];\n            }\n        }\n    }\n    toYData(point) {\n        // Return a plain array for speedy calculation\n        return [point.low, point.high];\n    }\n}\n/* *\n *\n *  Static Properties\n *\n * */\nErrorBarSeries.defaultOptions = ErrorBarSeries_merge(BoxPlot_BoxPlotSeries.defaultOptions, ErrorBar_ErrorBarSeriesDefaults);\nErrorBarSeries_addEvent(ErrorBarSeries, 'afterTranslate', function () {\n    for (const point of this.points) {\n        point.plotLow = point.plotY;\n    }\n}, { order: 0 });\nErrorBarSeries_extend(ErrorBarSeries.prototype, {\n    pointArrayMap: ['low', 'high'], // Array point configs are mapped to this\n    pointValKey: 'high', // Defines the top of the tracker\n    doQuartiles: false\n});\nhighcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default().registerSeriesType('errorbar', ErrorBarSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const ErrorBar_ErrorBarSeries = ((/* unused pure expression or super */ null && (ErrorBarSeries)));\n\n;// ./code/es-modules/Series/Gauge/GaugePoint.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 { series: { prototype: { pointClass: Point } } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default());\n/* *\n *\n *  Class\n *\n * */\nclass GaugePoint extends Point {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * Don't do any hover colors or anything\n     * @private\n     */\n    setState(state) {\n        this.state = state;\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Gauge_GaugePoint = (GaugePoint);\n\n;// ./code/es-modules/Series/Gauge/GaugeSeries.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 { noop: GaugeSeries_noop } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { series: GaugeSeries_Series, seriesTypes: { column: GaugeSeries_ColumnSeries } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default());\n\nconst { clamp: GaugeSeries_clamp, isNumber: GaugeSeries_isNumber, extend: GaugeSeries_extend, merge: GaugeSeries_merge, pick: GaugeSeries_pick, pInt, defined: GaugeSeries_defined } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Class\n *\n * */\n/**\n *\n * The `gauge` series type\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.map\n *\n * @augments Highcharts.Series\n */\nclass GaugeSeries extends GaugeSeries_Series {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * Calculate paths etc\n     * @private\n     */\n    translate() {\n        const series = this, yAxis = series.yAxis, options = series.options, center = yAxis.center;\n        series.generatePoints();\n        series.points.forEach((point) => {\n            const dialOptions = GaugeSeries_merge(options.dial, point.dial), radius = (pInt(dialOptions.radius) * center[2]) / 200, baseLength = (pInt(dialOptions.baseLength) * radius) / 100, rearLength = (pInt(dialOptions.rearLength) * radius) / 100, baseWidth = dialOptions.baseWidth, topWidth = dialOptions.topWidth;\n            let overshoot = options.overshoot, rotation = yAxis.startAngleRad + yAxis.translate(point.y, void 0, void 0, void 0, true);\n            // Handle the wrap and overshoot options\n            if (GaugeSeries_isNumber(overshoot) || options.wrap === false) {\n                overshoot = GaugeSeries_isNumber(overshoot) ?\n                    (overshoot / 180 * Math.PI) : 0;\n                rotation = GaugeSeries_clamp(rotation, yAxis.startAngleRad - overshoot, yAxis.endAngleRad + overshoot);\n            }\n            rotation = rotation * 180 / Math.PI;\n            point.shapeType = 'path';\n            const d = dialOptions.path || [\n                ['M', -rearLength, -baseWidth / 2],\n                ['L', baseLength, -baseWidth / 2],\n                ['L', radius, -topWidth / 2],\n                ['L', radius, topWidth / 2],\n                ['L', baseLength, baseWidth / 2],\n                ['L', -rearLength, baseWidth / 2],\n                ['Z']\n            ];\n            point.shapeArgs = {\n                d,\n                translateX: center[0],\n                translateY: center[1],\n                rotation: rotation\n            };\n            // Positions for data label\n            point.plotX = center[0];\n            point.plotY = center[1];\n            if (GaugeSeries_defined(point.y) && yAxis.max - yAxis.min) {\n                point.percentage =\n                    (point.y - yAxis.min) / (yAxis.max - yAxis.min) * 100;\n            }\n        });\n    }\n    /**\n     * Draw the points where each point is one needle\n     * @private\n     */\n    drawPoints() {\n        const series = this, chart = series.chart, center = series.yAxis.center, pivot = series.pivot, options = series.options, pivotOptions = options.pivot, renderer = chart.renderer;\n        series.points.forEach((point) => {\n            const graphic = point.graphic, shapeArgs = point.shapeArgs, d = shapeArgs.d, dialOptions = GaugeSeries_merge(options.dial, point.dial); // #1233\n            if (graphic) {\n                graphic.animate(shapeArgs);\n                shapeArgs.d = d; // Animate alters it\n            }\n            else {\n                point.graphic =\n                    renderer[point.shapeType](shapeArgs)\n                        .addClass('highcharts-dial')\n                        .add(series.group);\n            }\n            // Presentational attributes\n            if (!chart.styledMode) {\n                point.graphic[graphic ? 'animate' : 'attr']({\n                    stroke: dialOptions.borderColor,\n                    'stroke-width': dialOptions.borderWidth,\n                    fill: dialOptions.backgroundColor\n                });\n            }\n        });\n        // Add or move the pivot\n        if (pivot) {\n            pivot.animate({\n                translateX: center[0],\n                translateY: center[1]\n            });\n        }\n        else if (pivotOptions) {\n            series.pivot =\n                renderer.circle(0, 0, pivotOptions.radius)\n                    .attr({\n                    zIndex: 2\n                })\n                    .addClass('highcharts-pivot')\n                    .translate(center[0], center[1])\n                    .add(series.group);\n            // Presentational attributes\n            if (!chart.styledMode) {\n                series.pivot.attr({\n                    fill: pivotOptions.backgroundColor,\n                    stroke: pivotOptions.borderColor,\n                    'stroke-width': pivotOptions.borderWidth\n                });\n            }\n        }\n    }\n    /**\n     * Animate the arrow up from startAngle\n     * @private\n     */\n    animate(init) {\n        const series = this;\n        if (!init) {\n            series.points.forEach((point) => {\n                const graphic = point.graphic;\n                if (graphic) {\n                    // Start value\n                    graphic.attr({\n                        rotation: series.yAxis.startAngleRad * 180 / Math.PI\n                    });\n                    // Animate\n                    graphic.animate({\n                        rotation: point.shapeArgs.rotation\n                    }, series.options.animation);\n                }\n            });\n        }\n    }\n    /**\n     * @private\n     */\n    render() {\n        this.group = this.plotGroup('group', 'series', this.visible ? 'inherit' : 'hidden', this.options.zIndex, this.chart.seriesGroup);\n        GaugeSeries_Series.prototype.render.call(this);\n        this.group.clip(this.chart.clipRect);\n    }\n    /**\n     * Extend the basic setData method by running processData and generatePoints\n     * immediately, in order to access the points from the legend.\n     * @private\n     */\n    setData(data, redraw) {\n        GaugeSeries_Series.prototype.setData.call(this, data, false);\n        this.processData();\n        this.generatePoints();\n        if (GaugeSeries_pick(redraw, true)) {\n            this.chart.redraw();\n        }\n    }\n    /**\n     * Define hasData function for non-cartesian series.\n     * Returns true if the series has points at all.\n     * @private\n     */\n    hasData() {\n        return !!this.points.length; // != 0\n    }\n}\n/* *\n *\n *  Static properties\n *\n * */\n/**\n * Gauges are circular plots displaying one or more values with a dial\n * pointing to values along the perimeter.\n *\n * @sample highcharts/demo/gauge-speedometer/\n *         Gauge chart\n *\n * @extends      plotOptions.line\n * @excluding    animationLimit, boostThreshold, colorAxis, colorKey,\n *               connectEnds, connectNulls, cropThreshold, dashStyle,\n *               dragDrop, findNearestPointBy, getExtremesFromAll, marker,\n *               negativeColor, pointPlacement, shadow, softThreshold,\n *               stacking, states, step, threshold, turboThreshold, xAxis,\n *               zoneAxis, zones, dataSorting, boostBlending\n * @product      highcharts\n * @requires     highcharts-more\n * @optionparent plotOptions.gauge\n */\nGaugeSeries.defaultOptions = GaugeSeries_merge(GaugeSeries_Series.defaultOptions, {\n    /**\n     * When this option is `true`, the dial will wrap around the axes.\n     * For instance, in a full-range gauge going from 0 to 360, a value\n     * of 400 will point to 40\\. When `wrap` is `false`, the dial stops\n     * at 360.\n     *\n     * @see [overshoot](#plotOptions.gauge.overshoot)\n     *\n     * @type      {boolean}\n     * @default   true\n     * @since     3.0\n     * @product   highcharts\n     * @apioption plotOptions.gauge.wrap\n     */\n    /**\n     * Data labels for the gauge. For gauges, the data labels are\n     * enabled by default and shown in a bordered box below the point.\n     *\n     * @since   2.3.0\n     * @product highcharts\n     */\n    dataLabels: {\n        borderColor: \"#cccccc\" /* Palette.neutralColor20 */,\n        borderRadius: 3,\n        borderWidth: 1,\n        crop: false,\n        defer: false,\n        enabled: true,\n        verticalAlign: 'top',\n        y: 15,\n        zIndex: 2\n    },\n    /**\n     * Options for the dial or arrow pointer of the gauge.\n     *\n     * In styled mode, the dial is styled with the\n     * `.highcharts-gauge-series .highcharts-dial` rule.\n     *\n     * @sample {highcharts} highcharts/css/gauge/\n     *         Styled mode\n     *\n     * @type    {*}\n     * @since   2.3.0\n     * @product highcharts\n     */\n    dial: {\n        /**\n         * The background or fill color of the gauge's dial.\n         *\n         * @sample {highcharts} highcharts/plotoptions/gauge-dial/\n         *         Dial options demonstrated\n         *\n         * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         * @default   #000000\n         * @since     2.3.0\n         * @product   highcharts\n         * @apioption plotOptions.gauge.dial.backgroundColor\n         */\n        backgroundColor: \"#000000\" /* Palette.neutralColor100 */,\n        /**\n         * The length of the dial's base part, relative to the total\n         * radius or length of the dial.\n         *\n         * @sample {highcharts} highcharts/plotoptions/gauge-dial/\n         *         Dial options demonstrated\n         *\n         * @type      {string}\n         * @default   70%\n         * @since     2.3.0\n         * @product   highcharts\n         * @apioption plotOptions.gauge.dial.baseLength\n         */\n        baseLength: '70%',\n        /**\n         * The pixel width of the base of the gauge dial. The base is\n         * the part closest to the pivot, defined by baseLength.\n         *\n         * @sample {highcharts} highcharts/plotoptions/gauge-dial/\n         *         Dial options demonstrated\n         *\n         * @type      {number}\n         * @default   3\n         * @since     2.3.0\n         * @product   highcharts\n         * @apioption plotOptions.gauge.dial.baseWidth\n         */\n        baseWidth: 3,\n        /**\n         * The border color or stroke of the gauge's dial. By default,\n         * the borderWidth is 0, so this must be set in addition to a\n         * custom border color.\n         *\n         * @sample {highcharts} highcharts/plotoptions/gauge-dial/\n         *         Dial options demonstrated\n         *\n         * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         * @default   #cccccc\n         * @since     2.3.0\n         * @product   highcharts\n         * @apioption plotOptions.gauge.dial.borderColor\n         */\n        borderColor: \"#cccccc\" /* Palette.neutralColor20 */,\n        /**\n         * The width of the gauge dial border in pixels.\n         *\n         * @sample {highcharts} highcharts/plotoptions/gauge-dial/\n         *         Dial options demonstrated\n         *\n         * @type      {number}\n         * @default   0\n         * @since     2.3.0\n         * @product   highcharts\n         * @apioption plotOptions.gauge.dial.borderWidth\n         */\n        borderWidth: 0,\n        /**\n         * An array with an SVG path for the custom dial.\n         *\n         * @sample {highcharts} highcharts/plotoptions/gauge-path/\n         *         Dial options demonstrated\n         *\n         * @type      {Highcharts.SVGPathArray}\n         * @since 10.2.0\n         * @product   highcharts\n         * @apioption plotOptions.gauge.dial.path\n         */\n        /**\n         * The radius or length of the dial, in percentages relative to\n         * the radius of the gauge itself.\n         *\n         * @sample {highcharts} highcharts/plotoptions/gauge-dial/\n         *         Dial options demonstrated\n         *\n         * @type      {string}\n         * @default   80%\n         * @since     2.3.0\n         * @product   highcharts\n         * @apioption plotOptions.gauge.dial.radius\n         */\n        radius: '80%',\n        /**\n         * The length of the dial's rear end, the part that extends out\n         * on the other side of the pivot. Relative to the dial's\n         * length.\n         *\n         * @sample {highcharts} highcharts/plotoptions/gauge-dial/\n         *         Dial options demonstrated\n         *\n         * @type      {string}\n         * @default   10%\n         * @since     2.3.0\n         * @product   highcharts\n         * @apioption plotOptions.gauge.dial.rearLength\n         */\n        rearLength: '10%',\n        /**\n         * The width of the top of the dial, closest to the perimeter.\n         * The pivot narrows in from the base to the top.\n         *\n         * @sample {highcharts} highcharts/plotoptions/gauge-dial/\n         *         Dial options demonstrated\n         *\n         * @type      {number}\n         * @default   1\n         * @since     2.3.0\n         * @product   highcharts\n         * @apioption plotOptions.gauge.dial.topWidth\n         */\n        topWidth: 1\n    },\n    /**\n     * Allow the dial to overshoot the end of the perimeter axis by\n     * this many degrees. Say if the gauge axis goes from 0 to 60, a\n     * value of 100, or 1000, will show 5 degrees beyond the end of the\n     * axis when this option is set to 5.\n     *\n     * @see [wrap](#plotOptions.gauge.wrap)\n     *\n     * @sample {highcharts} highcharts/plotoptions/gauge-overshoot/\n     *         Allow 5 degrees overshoot\n     *\n     * @type      {number}\n     * @since     3.0.10\n     * @product   highcharts\n     * @apioption plotOptions.gauge.overshoot\n     */\n    /**\n     * Options for the pivot or the center point of the gauge.\n     *\n     * In styled mode, the pivot is styled with the\n     * `.highcharts-gauge-series .highcharts-pivot` rule.\n     *\n     * @sample {highcharts} highcharts/css/gauge/\n     *         Styled mode\n     *\n     * @type    {*}\n     * @since   2.3.0\n     * @product highcharts\n     */\n    pivot: {\n        /**\n         * The pixel radius of the pivot.\n         *\n         * @sample {highcharts} highcharts/plotoptions/gauge-pivot/\n         *         Pivot options demonstrated\n         *\n         * @type      {number}\n         * @default   5\n         * @since     2.3.0\n         * @product   highcharts\n         * @apioption plotOptions.gauge.pivot.radius\n         */\n        radius: 5,\n        /**\n         * The border or stroke width of the pivot.\n         *\n         * @sample {highcharts} highcharts/plotoptions/gauge-pivot/\n         *         Pivot options demonstrated\n         *\n         * @type      {number}\n         * @default   0\n         * @since     2.3.0\n         * @product   highcharts\n         * @apioption plotOptions.gauge.pivot.borderWidth\n         */\n        borderWidth: 0,\n        /**\n         * The border or stroke color of the pivot. In able to change\n         * this, the borderWidth must also be set to something other\n         * than the default 0.\n         *\n         * @sample {highcharts} highcharts/plotoptions/gauge-pivot/\n         *         Pivot options demonstrated\n         *\n         * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         * @default   #cccccc\n         * @since     2.3.0\n         * @product   highcharts\n         * @apioption plotOptions.gauge.pivot.borderColor\n         */\n        borderColor: \"#cccccc\" /* Palette.neutralColor20 */,\n        /**\n         * The background color or fill of the pivot.\n         *\n         * @sample {highcharts} highcharts/plotoptions/gauge-pivot/\n         *         Pivot options demonstrated\n         *\n         * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n         * @default   #000000\n         * @since     2.3.0\n         * @product   highcharts\n         * @apioption plotOptions.gauge.pivot.backgroundColor\n         */\n        backgroundColor: \"#000000\" /* Palette.neutralColor100 */\n    },\n    tooltip: {\n        headerFormat: ''\n    },\n    /**\n     * Whether to display this particular series or series type in the\n     * legend. Defaults to false for gauge series.\n     *\n     * @since   2.3.0\n     * @product highcharts\n     */\n    showInLegend: false\n    // Prototype members\n});\nGaugeSeries_extend(GaugeSeries.prototype, {\n    // `chart.angular` will be set to true when a gauge series is present, and\n    // this will be used on the axes\n    angular: true,\n    directTouch: true, // #5063\n    drawGraph: GaugeSeries_noop,\n    drawTracker: GaugeSeries_ColumnSeries.prototype.drawTracker,\n    fixedBox: true,\n    forceDL: true,\n    noSharedTooltip: true,\n    pointClass: Gauge_GaugePoint,\n    trackerGroups: ['group', 'dataLabelsGroup']\n});\nhighcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default().registerSeriesType('gauge', GaugeSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Gauge_GaugeSeries = ((/* unused pure expression or super */ null && (GaugeSeries)));\n/* *\n *\n *  API options\n *\n * */\n/**\n * A `gauge` series. If the [type](#series.gauge.type) option is not\n * specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends   series,plotOptions.gauge\n * @excluding animationLimit, boostThreshold, connectEnds, connectNulls,\n *            cropThreshold, dashStyle, dataParser, dataURL, findNearestPointBy,\n *            getExtremesFromAll, marker, negativeColor, pointPlacement, shadow,\n *            softThreshold, stack, stacking, states, step, threshold,\n *            turboThreshold, zoneAxis, zones, dataSorting, boostBlending\n * @product   highcharts\n * @requires  highcharts-more\n * @apioption series.gauge\n */\n/**\n * An array of data points for the series. For the `gauge` series type,\n * points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n *    interpreted as `y` options. Example:\n *    ```js\n *    data: [0, 5, 3, 5]\n *    ```\n *\n * 2. An array of objects with named values. The following snippet shows only a\n *    few settings, see the complete options set below. If the total number of\n *    data points exceeds the series'\n *    [turboThreshold](#series.gauge.turboThreshold), this option is not\n *    available.\n *    ```js\n *    data: [{\n *        y: 6,\n *        name: \"Point2\",\n *        color: \"#00FF00\"\n *    }, {\n *        y: 8,\n *        name: \"Point1\",\n *       color: \"#FF00FF\"\n *    }]\n *    ```\n *\n * The typical gauge only contains a single data value.\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n *         Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n *         Config objects\n *\n * @type      {Array<number|null|*>}\n * @extends   series.line.data\n * @excluding drilldown, marker, x\n * @product   highcharts\n * @apioption series.gauge.data\n */\n''; // Adds the doclets above in the transpiled file\n\n;// ./code/es-modules/Series/DragNodesComposition.js\n/* *\n *\n *  Networkgraph series\n *\n *  (c) 2010-2024 Paweł Fus\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { composed: DragNodesComposition_composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: DragNodesComposition_addEvent, pushUnique: DragNodesComposition_pushUnique } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction DragNodesComposition_compose(ChartClass) {\n    if (DragNodesComposition_pushUnique(DragNodesComposition_composed, 'DragNodes')) {\n        DragNodesComposition_addEvent(ChartClass, 'load', onChartLoad);\n    }\n}\n/**\n * Draggable mode:\n * @private\n */\nfunction onChartLoad() {\n    const chart = this;\n    let mousedownUnbinder, mousemoveUnbinder, mouseupUnbinder;\n    if (chart.container) {\n        mousedownUnbinder = DragNodesComposition_addEvent(chart.container, 'mousedown', (event) => {\n            const point = chart.hoverPoint;\n            if (point &&\n                point.series &&\n                point.series.hasDraggableNodes &&\n                point.series.options.draggable) {\n                point.series.onMouseDown(point, event);\n                mousemoveUnbinder = DragNodesComposition_addEvent(chart.container, 'mousemove', (e) => (point &&\n                    point.series &&\n                    point.series.onMouseMove(point, e)));\n                mouseupUnbinder = DragNodesComposition_addEvent(chart.container.ownerDocument, 'mouseup', (e) => {\n                    mousemoveUnbinder();\n                    mouseupUnbinder();\n                    return point &&\n                        point.series &&\n                        point.series.onMouseUp(point, e);\n                });\n            }\n        });\n    }\n    DragNodesComposition_addEvent(chart, 'destroy', function () {\n        mousedownUnbinder();\n    });\n}\n/**\n * Mouse down action, initializing drag&drop mode.\n *\n * @private\n * @param {Highcharts.Point} point\n *        The point that event occurred.\n * @param {Highcharts.PointerEventObject} event\n *        Browser event, before normalization.\n */\nfunction onMouseDown(point, event) {\n    const normalizedEvent = this.chart.pointer?.normalize(event) || event;\n    point.fixedPosition = {\n        chartX: normalizedEvent.chartX,\n        chartY: normalizedEvent.chartY,\n        plotX: point.plotX,\n        plotY: point.plotY\n    };\n    point.inDragMode = true;\n}\n/**\n * Mouse move action during drag&drop.\n *\n * @private\n *\n * @param {Highcharts.Point} point\n *        The point that event occurred.\n * @param {global.Event} event\n *        Browser event, before normalization.\n */\nfunction onMouseMove(point, event) {\n    if (point.fixedPosition && point.inDragMode) {\n        const series = this, chart = series.chart, normalizedEvent = chart.pointer?.normalize(event) || event, diffX = point.fixedPosition.chartX - normalizedEvent.chartX, diffY = point.fixedPosition.chartY - normalizedEvent.chartY, graphLayoutsLookup = chart.graphLayoutsLookup;\n        let newPlotX, newPlotY;\n        // At least 5px to apply change (avoids simple click):\n        if (Math.abs(diffX) > 5 || Math.abs(diffY) > 5) {\n            newPlotX = point.fixedPosition.plotX - diffX;\n            newPlotY = point.fixedPosition.plotY - diffY;\n            if (chart.isInsidePlot(newPlotX, newPlotY)) {\n                point.plotX = newPlotX;\n                point.plotY = newPlotY;\n                point.hasDragged = true;\n                this.redrawHalo(point);\n                graphLayoutsLookup.forEach((layout) => {\n                    layout.restartSimulation();\n                });\n            }\n        }\n    }\n}\n/**\n * Mouse up action, finalizing drag&drop.\n *\n * @private\n * @param {Highcharts.Point} point\n *        The point that event occurred.\n */\nfunction onMouseUp(point) {\n    if (point.fixedPosition) {\n        if (point.hasDragged) {\n            if (this.layout.enableSimulation) {\n                this.layout.start();\n            }\n            else {\n                this.chart.redraw();\n            }\n        }\n        point.inDragMode = point.hasDragged = false;\n        if (!this.options.fixedDraggable) {\n            delete point.fixedPosition;\n        }\n    }\n}\n/**\n * Redraw halo on mousemove during the drag&drop action.\n *\n * @private\n * @param {Highcharts.Point} point\n *        The point that should show halo.\n */\nfunction redrawHalo(point) {\n    if (point && this.halo) {\n        this.halo.attr({\n            d: point.haloPath(this.options.states.hover.halo.size)\n        });\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst DragNodesComposition = {\n    compose: DragNodesComposition_compose,\n    onMouseDown,\n    onMouseMove,\n    onMouseUp,\n    redrawHalo\n};\n/* harmony default export */ const Series_DragNodesComposition = (DragNodesComposition);\n\n;// ./code/es-modules/Series/GraphLayoutComposition.js\n/* *\n *\n *  Networkgraph series\n *\n *  (c) 2010-2024 Paweł Fus\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { setAnimation } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { composed: GraphLayoutComposition_composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: GraphLayoutComposition_addEvent, pushUnique: GraphLayoutComposition_pushUnique } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Constants\n *\n * */\nconst integrations = {};\nconst layouts = {};\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction GraphLayoutComposition_compose(ChartClass) {\n    if (GraphLayoutComposition_pushUnique(GraphLayoutComposition_composed, 'GraphLayout')) {\n        GraphLayoutComposition_addEvent(ChartClass, 'afterPrint', onChartAfterPrint);\n        GraphLayoutComposition_addEvent(ChartClass, 'beforePrint', onChartBeforePrint);\n        GraphLayoutComposition_addEvent(ChartClass, 'predraw', onChartPredraw);\n        GraphLayoutComposition_addEvent(ChartClass, 'render', onChartRender);\n    }\n}\n/**\n * Re-enable simulation after print.\n * @private\n */\nfunction onChartAfterPrint() {\n    if (this.graphLayoutsLookup) {\n        this.graphLayoutsLookup.forEach((layout) => {\n            // Return to default simulation\n            layout.updateSimulation();\n        });\n        this.redraw();\n    }\n}\n/**\n * Disable simulation before print if enabled.\n * @private\n */\nfunction onChartBeforePrint() {\n    if (this.graphLayoutsLookup) {\n        this.graphLayoutsLookup.forEach((layout) => {\n            layout.updateSimulation(false);\n        });\n        this.redraw();\n    }\n}\n/**\n * Clear previous layouts.\n * @private\n */\nfunction onChartPredraw() {\n    if (this.graphLayoutsLookup) {\n        this.graphLayoutsLookup.forEach((layout) => {\n            layout.stop();\n        });\n    }\n}\n/**\n * @private\n */\nfunction onChartRender() {\n    let systemsStable, afterRender = false;\n    const layoutStep = (layout) => {\n        if (layout.maxIterations-- &&\n            isFinite(layout.temperature) &&\n            !layout.isStable() &&\n            !layout.enableSimulation) {\n            // Hook similar to build-in addEvent, but instead of\n            // creating whole events logic, use just a function.\n            // It's faster which is important for rAF code.\n            // Used e.g. in packed-bubble series for bubble radius\n            // calculations\n            if (layout.beforeStep) {\n                layout.beforeStep();\n            }\n            layout.step();\n            systemsStable = false;\n            afterRender = true;\n        }\n    };\n    if (this.graphLayoutsLookup) {\n        setAnimation(false, this);\n        // Start simulation\n        this.graphLayoutsLookup.forEach((layout) => layout.start());\n        // Just one sync step, to run different layouts similar to\n        // async mode.\n        while (!systemsStable) {\n            systemsStable = true;\n            this.graphLayoutsLookup.forEach(layoutStep);\n        }\n        if (afterRender) {\n            this.series.forEach((series) => {\n                if (series && series.layout) {\n                    series.render();\n                }\n            });\n        }\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst GraphLayoutComposition = {\n    compose: GraphLayoutComposition_compose,\n    integrations,\n    layouts\n};\n/* harmony default export */ const Series_GraphLayoutComposition = (GraphLayoutComposition);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Chart\"],\"commonjs\":[\"highcharts\",\"Chart\"],\"commonjs2\":[\"highcharts\",\"Chart\"],\"root\":[\"Highcharts\",\"Chart\"]}\nvar highcharts_Chart_commonjs_highcharts_Chart_commonjs2_highcharts_Chart_root_Highcharts_Chart_ = __webpack_require__(960);\nvar highcharts_Chart_commonjs_highcharts_Chart_commonjs2_highcharts_Chart_root_Highcharts_Chart_default = /*#__PURE__*/__webpack_require__.n(highcharts_Chart_commonjs_highcharts_Chart_commonjs2_highcharts_Chart_root_Highcharts_Chart_);\n;// ./code/es-modules/Series/PackedBubble/PackedBubblePoint.js\n/* *\n *\n *  (c) 2010-2024 Grzegorz Blachlinski, Sebastian Bochan\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: { bubble: { prototype: { pointClass: PackedBubblePoint_BubblePoint } } } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default());\n/* *\n *\n *  Class\n *\n * */\nclass PackedBubblePoint extends PackedBubblePoint_BubblePoint {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * Destroy point.\n     * Then remove point from the layout.\n     * @private\n     */\n    destroy() {\n        if (this.series?.layout) {\n            this.series.layout.removeElementFromCollection(this, this.series.layout.nodes);\n        }\n        return highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default().prototype.destroy.apply(this, arguments);\n    }\n    firePointEvent() {\n        const series = this.series, seriesOptions = series.options;\n        if (this.isParentNode && seriesOptions.parentNode) {\n            const temp = seriesOptions.allowPointSelect;\n            seriesOptions.allowPointSelect = (seriesOptions.parentNode.allowPointSelect);\n            highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default().prototype.firePointEvent.apply(this, arguments);\n            seriesOptions.allowPointSelect = temp;\n        }\n        else {\n            highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default().prototype.firePointEvent.apply(this, arguments);\n        }\n    }\n    select() {\n        const point = this, series = this.series, chart = series.chart;\n        if (point.isParentNode) {\n            chart.getSelectedPoints = chart.getSelectedParentNodes;\n            highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default().prototype.select.apply(this, arguments);\n            chart.getSelectedPoints = (highcharts_Chart_commonjs_highcharts_Chart_commonjs2_highcharts_Chart_root_Highcharts_Chart_default()).prototype.getSelectedPoints;\n        }\n        else {\n            highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default().prototype.select.apply(this, arguments);\n        }\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const PackedBubble_PackedBubblePoint = (PackedBubblePoint);\n\n;// ./code/es-modules/Series/PackedBubble/PackedBubbleSeriesDefaults.js\n/* *\n *\n *  Imports\n *\n * */\n\nconst { isNumber: PackedBubbleSeriesDefaults_isNumber } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Constants\n *\n * */\n/**\n * A packed bubble series is a two dimensional series type, where each point\n * renders a value in X, Y position. Each point is drawn as a bubble\n * where the bubbles don't overlap with each other and the radius\n * of the bubble relates to the value.\n *\n * @sample highcharts/demo/packed-bubble/\n *         Packed bubble chart\n * @sample highcharts/demo/packed-bubble-split/\n *         Split packed bubble chart\n *\n * @extends      plotOptions.bubble\n * @excluding    boostThreshold, boostBlending,connectEnds, connectNulls,\n *               cropThreshold, dataSorting, dragDrop, jitter,\n *               legendSymbolColor, keys, pointPlacement, sizeByAbsoluteValue,\n *               step, xAxis, yAxis, zMax, zMin\n * @product      highcharts\n * @since        7.0.0\n * @requires     highcharts-more\n * @optionparent plotOptions.packedbubble\n *\n * @private\n */\nconst PackedBubbleSeriesDefaults = {\n    /**\n     * Minimum bubble size. Bubbles will automatically size between the\n     * `minSize` and `maxSize` to reflect the value of each bubble.\n     * Can be either pixels (when no unit is given), or a percentage of\n     * the smallest one of the plot width and height, divided by the square\n     * root of total number of points.\n     *\n     * @sample highcharts/plotoptions/bubble-size/\n     *         Bubble size\n     *\n     * @type {number|string}\n     *\n     * @private\n     */\n    minSize: '10%',\n    /**\n     * Maximum bubble size. Bubbles will automatically size between the\n     * `minSize` and `maxSize` to reflect the value of each bubble.\n     * Can be either pixels (when no unit is given), or a percentage of\n     * the smallest one of the plot width and height, divided by the square\n     * root of total number of points.\n     *\n     * @sample highcharts/plotoptions/bubble-size/\n     *         Bubble size\n     *\n     * @type {number|string}\n     *\n     * @private\n     */\n    maxSize: '50%',\n    sizeBy: 'area',\n    zoneAxis: 'y',\n    crisp: false,\n    tooltip: {\n        pointFormat: 'Value: {point.value}'\n    },\n    /**\n     * Flag to determine if nodes are draggable or not. Available for\n     * graph with useSimulation set to true only.\n     *\n     * @since 7.1.0\n     *\n     * @private\n     */\n    draggable: true,\n    /**\n     * An option is giving a possibility to choose between using simulation\n     * for calculating bubble positions. These reflects in both animation\n     * and final position of bubbles. Simulation is also adding options to\n     * the series graph based on used layout. In case of big data sets, with\n     * any performance issues, it is possible to disable animation and pack\n     * bubble in a simple circular way.\n     *\n     * @sample highcharts/series-packedbubble/spiral/\n     *         useSimulation set to false\n     *\n     * @since 7.1.0\n     *\n     * @private\n     */\n    useSimulation: true,\n    /**\n     * Series options for parent nodes.\n     *\n     * @since 8.1.1\n     *\n     * @private\n     */\n    parentNode: {\n        /**\n         * Allow this series' parent nodes to be selected\n         * by clicking on the graph.\n         *\n         * @since 8.1.1\n         */\n        allowPointSelect: false\n    },\n    /**\n     *\n     * @declare Highcharts.SeriesPackedBubbleDataLabelsOptionsObject\n     *\n     * @private\n     */\n    dataLabels: {\n        /**\n         * The\n         * [format string](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting)\n         * specifying what to show for _node_ in the networkgraph. In v7.0\n         * defaults to `{key}`, since v7.1 defaults to `undefined` and\n         * `formatter` is used instead.\n         *\n         * @type      {string}\n         * @since     7.0.0\n         * @apioption plotOptions.packedbubble.dataLabels.format\n         */\n        // eslint-disable-next-line valid-jsdoc\n        /**\n         * Callback JavaScript function to format the data label for a node.\n         * Note that if a `format` is defined, the format takes precedence\n         * and the formatter is ignored.\n         *\n         * @since 7.0.0\n         */\n        formatter: function () {\n            const { numberFormatter } = this.series.chart;\n            const { value } = this.point;\n            return PackedBubbleSeriesDefaults_isNumber(value) ? numberFormatter(value, -1) : '';\n        },\n        /**\n         * @type      {string}\n         * @since     7.1.0\n         * @apioption plotOptions.packedbubble.dataLabels.parentNodeFormat\n         */\n        // eslint-disable-next-line valid-jsdoc\n        /**\n         * @since 7.1.0\n         */\n        parentNodeFormatter: function () {\n            return this.name || '';\n        },\n        /**\n         * @sample {highcharts} highcharts/series-packedbubble/packed-dashboard\n         *         Dashboard with dataLabels on parentNodes\n         *\n         * @declare Highcharts.SeriesPackedBubbleDataLabelsTextPathOptionsObject\n         * @since   7.1.0\n         */\n        parentNodeTextPath: {\n            /**\n             * Presentation attributes for the text path.\n             *\n             * @type      {Highcharts.SVGAttributes}\n             * @since     7.1.0\n             * @apioption plotOptions.packedbubble.dataLabels.attributes\n             */\n            /**\n             * Enable or disable `textPath` option for link's or marker's\n             * data labels.\n             *\n             * @since 7.1.0\n             */\n            enabled: true\n        },\n        /**\n         * Options for a _node_ label text which should follow marker's\n         * shape.\n         *\n         * **Note:** Only SVG-based renderer supports this option.\n         *\n         * @extends   plotOptions.series.dataLabels.textPath\n         * @apioption plotOptions.packedbubble.dataLabels.textPath\n         */\n        padding: 0,\n        style: {\n            transition: 'opacity 2000ms'\n        }\n    },\n    /**\n     * Options for layout algorithm when simulation is enabled. Inside there\n     * are options to change the speed, padding, initial bubbles positions\n     * and more.\n     *\n     * @extends   plotOptions.networkgraph.layoutAlgorithm\n     * @excluding approximation, attractiveForce, repulsiveForce, theta\n     * @since     7.1.0\n     *\n     * @private\n     */\n    layoutAlgorithm: {\n        /**\n         * Initial layout algorithm for positioning nodes. Can be one of\n         * the built-in options (\"circle\", \"random\") or a function where\n         * positions should be set on each node (`this.nodes`) as\n         * `node.plotX` and `node.plotY`.\n         *\n         * @sample highcharts/series-networkgraph/initial-positions/\n         *         Initial positions with callback\n         *\n         * @type {\"circle\"|\"random\"|Function}\n         */\n        initialPositions: 'circle',\n        /**\n         * @sample highcharts/series-packedbubble/initial-radius/\n         *         Initial radius set to 200\n         *\n         * @extends   plotOptions.networkgraph.layoutAlgorithm.initialPositionRadius\n         * @excluding states\n         */\n        initialPositionRadius: 20,\n        /**\n         * The distance between two bubbles, when the algorithm starts to\n         * treat two bubbles as overlapping. The `bubblePadding` is also the\n         * expected distance between all the bubbles on simulation end.\n         */\n        bubblePadding: 5,\n        /**\n         * Whether bubbles should interact with their parentNode to keep\n         * them inside.\n         */\n        parentNodeLimit: false,\n        /**\n         * Whether series should interact with each other or not. When\n         * `parentNodeLimit` is set to true, thi option should be set to\n         * false to avoid sticking points in wrong series parentNode.\n         */\n        seriesInteraction: true,\n        /**\n         * In case of split series, this option allows user to drag and\n         * drop points between series, for changing point related series.\n         *\n         * @sample highcharts/series-packedbubble/packed-dashboard/\n         *         Example of drag'n drop bubbles for bubble kanban\n         */\n        dragBetweenSeries: false,\n        /**\n         * Layout algorithm options for parent nodes.\n         *\n         * @extends   plotOptions.networkgraph.layoutAlgorithm\n         * @excluding approximation, attractiveForce, enableSimulation,\n         *            repulsiveForce, theta\n         */\n        parentNodeOptions: {\n            maxIterations: 400,\n            gravitationalConstant: 0.03,\n            maxSpeed: 50,\n            initialPositionRadius: 100,\n            seriesInteraction: true,\n            /**\n             * Styling options for parentNodes markers. Similar to\n             * line.marker options.\n             *\n             * @sample highcharts/series-packedbubble/parentnode-style/\n             *         Bubble size\n             *\n             * @extends   plotOptions.series.marker\n             * @excluding states\n             */\n            marker: {\n                fillColor: null,\n                fillOpacity: 1,\n                lineWidth: null,\n                lineColor: null,\n                symbol: 'circle'\n            }\n        },\n        enableSimulation: true,\n        /**\n         * Type of the algorithm used when positioning bubbles.\n         * @ignore-option\n         */\n        type: 'packedbubble',\n        /**\n         * Integration type. Integration determines how forces are applied\n         * on particles. The `packedbubble` integration is based on\n         * the networkgraph `verlet` integration, where the new position\n         * is based on a previous position without velocity:\n         * `newPosition += previousPosition - newPosition`.\n         *\n         * @sample highcharts/series-networkgraph/forces/\n         *\n         * @ignore-option\n         */\n        integration: 'packedbubble',\n        maxIterations: 1000,\n        /**\n         * Whether to split series into individual groups or to mix all\n         * series together.\n         *\n         * @since   7.1.0\n         * @default false\n         */\n        splitSeries: false,\n        /**\n         * Max speed that node can get in one iteration. In terms of\n         * simulation, it's a maximum translation (in pixels) that a node\n         * can move (in both, x and y, dimensions). While `friction` is\n         * applied on all nodes, max speed is applied only for nodes that\n         * move very fast, for example small or disconnected ones.\n         *\n         * @see [layoutAlgorithm.integration](#series.networkgraph.layoutAlgorithm.integration)\n         *\n         * @see [layoutAlgorithm.friction](#series.networkgraph.layoutAlgorithm.friction)\n         */\n        maxSpeed: 5,\n        gravitationalConstant: 0.01,\n        friction: -0.981\n    }\n};\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const PackedBubble_PackedBubbleSeriesDefaults = (PackedBubbleSeriesDefaults);\n/* *\n *\n *  API Options\n *\n * */\n/**\n * A `packedbubble` series. If the [type](#series.packedbubble.type) option is\n * not specified, it is inherited from [chart.type](#chart.type).\n *\n * @type      {Object}\n * @extends   series,plotOptions.packedbubble\n * @excluding cropThreshold, dataParser, dataSorting, dataURL, dragDrop, stack,\n *            boostThreshold, boostBlending\n * @product   highcharts\n * @requires  highcharts-more\n * @apioption series.packedbubble\n */\n/**\n * An array of data points for the series. For the `packedbubble` series type,\n * points can be given in the following ways:\n *\n * 1.  An array of `values`.\n *\n *  ```js\n *     data: [5, 1, 20]\n *  ```\n *\n * 2.  An array of objects with named values. The objects are point\n * configuration objects as seen below. If the total number of data points\n * exceeds the series' [turboThreshold](#series.packedbubble.turboThreshold),\n * this option is not available.\n *\n *  ```js\n *     data: [{\n *         value: 1,\n *         name: \"Point2\",\n *         color: \"#00FF00\"\n *     }, {\n *         value: 5,\n *         name: \"Point1\",\n *         color: \"#FF00FF\"\n *     }]\n *  ```\n *\n * @type      {Array<Object|Array>}\n * @extends   series.line.data\n * @excluding marker, x, y\n * @sample    {highcharts} highcharts/series/data-array-of-objects/\n *            Config objects\n * @product   highcharts\n * @apioption series.packedbubble.data\n */\n/**\n * @type      {Highcharts.SeriesPackedBubbleDataLabelsOptionsObject|Array<Highcharts.SeriesPackedBubbleDataLabelsOptionsObject>}\n * @product   highcharts\n * @apioption series.packedbubble.data.dataLabels\n */\n/**\n * @excluding enabled,enabledThreshold,height,radius,width\n * @product   highcharts\n * @apioption series.packedbubble.marker\n */\n''; // Adds doclets above to transpiled file\n\n;// ./code/es-modules/Series/Networkgraph/VerletIntegration.js\n/* *\n *\n *  Networkgraph series\n *\n *  (c) 2010-2024 Paweł Fus\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Attractive force.\n *\n * In Verlet integration, force is applied on a node immediately to it's\n * `plotX` and `plotY` position.\n *\n * @private\n * @param {Highcharts.Point} link\n *        Link that connects two nodes\n * @param {number} force\n *        Force calculated in `repulsiveForceFunction`\n * @param {Highcharts.PositionObject} distanceXY\n *        Distance between two nodes e.g. `{x, y}`\n */\nfunction attractive(link, force, distanceXY) {\n    const massFactor = link.getMass(), translatedX = -distanceXY.x * force * this.diffTemperature, translatedY = -distanceXY.y * force * this.diffTemperature;\n    if (!link.fromNode.fixedPosition) {\n        link.fromNode.plotX -=\n            translatedX * massFactor.fromNode / link.fromNode.degree;\n        link.fromNode.plotY -=\n            translatedY * massFactor.fromNode / link.fromNode.degree;\n    }\n    if (!link.toNode.fixedPosition) {\n        link.toNode.plotX +=\n            translatedX * massFactor.toNode / link.toNode.degree;\n        link.toNode.plotY +=\n            translatedY * massFactor.toNode / link.toNode.degree;\n    }\n}\n/**\n * Attractive force function. Can be replaced by API's\n * `layoutAlgorithm.attractiveForce`\n *\n * @private\n * @param {number} d current distance between two nodes\n * @param {number} k expected distance between two nodes\n * @return {number} force\n */\nfunction attractiveForceFunction(d, k) {\n    // Used in API:\n    return (k - d) / d;\n}\n/**\n * Barycenter force. Calculate and applys barycenter forces on the\n * nodes. Making them closer to the center of their barycenter point.\n *\n * In Verlet integration, force is applied on a node immediately to it's\n * `plotX` and `plotY` position.\n *\n * @private\n */\nfunction barycenter() {\n    const gravitationalConstant = this.options.gravitationalConstant || 0, xFactor = (this.barycenter.xFactor -\n        (this.box.left + this.box.width) / 2) * gravitationalConstant, yFactor = (this.barycenter.yFactor -\n        (this.box.top + this.box.height) / 2) * gravitationalConstant;\n    this.nodes.forEach(function (node) {\n        if (!node.fixedPosition) {\n            node.plotX -=\n                xFactor / node.mass / node.degree;\n            node.plotY -=\n                yFactor / node.mass / node.degree;\n        }\n    });\n}\n/**\n * Estiamte the best possible distance between two nodes, making graph\n * readable.\n * @private\n */\nfunction getK(layout) {\n    return Math.pow(layout.box.width * layout.box.height / layout.nodes.length, 0.5);\n}\n/**\n * Integration method.\n *\n * In Verlet integration, forces are applied on node immediately to it's\n * `plotX` and `plotY` position.\n *\n * Verlet without velocity:\n *\n *    x(n+1) = 2 * x(n) - x(n-1) + A(T) * deltaT ^ 2\n *\n * where:\n *     - x(n+1) - new position\n *     - x(n) - current position\n *     - x(n-1) - previous position\n *\n * Assuming A(t) = 0 (no acceleration) and (deltaT = 1) we get:\n *\n *     x(n+1) = x(n) + (x(n) - x(n-1))\n *\n * where:\n *     - (x(n) - x(n-1)) - position change\n *\n * TO DO:\n * Consider Verlet with velocity to support additional\n * forces. Or even Time-Corrected Verlet by Jonathan\n * \"lonesock\" Dummer\n *\n * @private\n * @param {Highcharts.NetworkgraphLayout} layout layout object\n * @param {Highcharts.Point} node node that should be translated\n */\nfunction integrate(layout, node) {\n    const friction = -layout.options.friction, maxSpeed = layout.options.maxSpeed, prevX = node.prevX, prevY = node.prevY, \n    // Apply friction:\n    frictionX = ((node.plotX + node.dispX -\n        prevX) * friction), frictionY = ((node.plotY + node.dispY -\n        prevY) * friction), abs = Math.abs, signX = abs(frictionX) / (frictionX || 1), // Need to deal with 0\n    signY = abs(frictionY) / (frictionY || 1), \n    // Apply max speed:\n    diffX = signX * Math.min(maxSpeed, Math.abs(frictionX)), diffY = signY * Math.min(maxSpeed, Math.abs(frictionY));\n    // Store for the next iteration:\n    node.prevX = node.plotX + node.dispX;\n    node.prevY = node.plotY + node.dispY;\n    // Update positions:\n    node.plotX += diffX;\n    node.plotY += diffY;\n    node.temperature = layout.vectorLength({\n        x: diffX,\n        y: diffY\n    });\n}\n/**\n * Repulsive force.\n *\n * In Verlet integration, force is applied on a node immediately to it's\n * `plotX` and `plotY` position.\n *\n * @private\n * @param {Highcharts.Point} node\n *        Node that should be translated by force.\n * @param {number} force\n *        Force calculated in `repulsiveForceFunction`\n * @param {Highcharts.PositionObject} distanceXY\n *        Distance between two nodes e.g. `{x, y}`\n */\nfunction repulsive(node, force, distanceXY) {\n    const factor = force * this.diffTemperature / node.mass / node.degree;\n    if (!node.fixedPosition) {\n        node.plotX += distanceXY.x * factor;\n        node.plotY += distanceXY.y * factor;\n    }\n}\n/**\n * Repulsive force function. Can be replaced by API's\n * `layoutAlgorithm.repulsiveForce`\n *\n * @private\n * @param {number} d current distance between two nodes\n * @param {number} k expected distance between two nodes\n * @return {number} force\n */\nfunction repulsiveForceFunction(d, k) {\n    // Used in API:\n    return (k - d) / d * (k > d ? 1 : 0); // Force only for close nodes\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst VerletIntegration = {\n    attractive,\n    attractiveForceFunction,\n    barycenter,\n    getK,\n    integrate,\n    repulsive,\n    repulsiveForceFunction\n};\n/* harmony default export */ const Networkgraph_VerletIntegration = (VerletIntegration);\n\n;// ./code/es-modules/Series/PackedBubble/PackedBubbleIntegration.js\n/* *\n *\n *  (c) 2010-2024 Grzegorz Blachlinski, Sebastian Bochan\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { noop: PackedBubbleIntegration_noop } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction PackedBubbleIntegration_barycenter() {\n    const layout = this, gravitationalConstant = layout.options.gravitationalConstant, box = layout.box, nodes = layout.nodes;\n    let centerX, centerY;\n    for (const node of nodes) {\n        if (layout.options.splitSeries && !node.isParentNode) {\n            centerX = node.series.parentNode.plotX;\n            centerY = node.series.parentNode.plotY;\n        }\n        else {\n            centerX = box.width / 2;\n            centerY = box.height / 2;\n        }\n        if (!node.fixedPosition) {\n            node.plotX -=\n                (node.plotX - centerX) *\n                    gravitationalConstant /\n                    (node.mass * Math.sqrt(nodes.length));\n            node.plotY -=\n                (node.plotY - centerY) *\n                    gravitationalConstant /\n                    (node.mass * Math.sqrt(nodes.length));\n        }\n    }\n}\n/**\n * @private\n */\nfunction PackedBubbleIntegration_repulsive(node, force, distanceXY, repNode) {\n    const factor = (force * this.diffTemperature / node.mass /\n        node.degree), x = distanceXY.x * factor, y = distanceXY.y * factor;\n    if (!node.fixedPosition) {\n        node.plotX += x;\n        node.plotY += y;\n    }\n    if (!repNode.fixedPosition) {\n        repNode.plotX -= x;\n        repNode.plotY -= y;\n    }\n}\n/**\n * @private\n */\nfunction PackedBubbleIntegration_repulsiveForceFunction(d, k, node, repNode) {\n    return Math.min(d, (node.marker.radius +\n        repNode.marker.radius) / 2);\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst PackedBubbleIntegration = {\n    barycenter: PackedBubbleIntegration_barycenter,\n    getK: PackedBubbleIntegration_noop,\n    integrate: Networkgraph_VerletIntegration.integrate,\n    repulsive: PackedBubbleIntegration_repulsive,\n    repulsiveForceFunction: PackedBubbleIntegration_repulsiveForceFunction\n};\n/* harmony default export */ const PackedBubble_PackedBubbleIntegration = (PackedBubbleIntegration);\n\n;// ./code/es-modules/Series/Networkgraph/EulerIntegration.js\n/* *\n *\n *  Networkgraph series\n *\n *  (c) 2010-2024 Paweł Fus\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Attractive force.\n *\n * In Euler integration, force is stored in a node, not changing it's\n * position. Later, in `integrate()` forces are applied on nodes.\n *\n * @private\n * @param {Highcharts.Point} link\n *        Link that connects two nodes\n * @param {number} force\n *        Force calculated in `repulsiveForceFunction`\n * @param {Highcharts.PositionObject} distanceXY\n *        Distance between two nodes e.g. `{x, y}`\n * @param {number} distanceR\n     */\nfunction EulerIntegration_attractive(link, force, distanceXY, distanceR) {\n    const massFactor = link.getMass(), translatedX = (distanceXY.x / distanceR) * force, translatedY = (distanceXY.y / distanceR) * force;\n    if (!link.fromNode.fixedPosition) {\n        link.fromNode.dispX -=\n            translatedX * massFactor.fromNode / link.fromNode.degree;\n        link.fromNode.dispY -=\n            translatedY * massFactor.fromNode / link.fromNode.degree;\n    }\n    if (!link.toNode.fixedPosition) {\n        link.toNode.dispX +=\n            translatedX * massFactor.toNode / link.toNode.degree;\n        link.toNode.dispY +=\n            translatedY * massFactor.toNode / link.toNode.degree;\n    }\n}\n/**\n * Attractive force function. Can be replaced by API's\n * `layoutAlgorithm.attractiveForce`\n *\n * Other forces that can be used:\n *\n * basic, not recommended:\n *    `function (d, k) { return d / k }`\n *\n * @private\n * @param {number} d current distance between two nodes\n * @param {number} k expected distance between two nodes\n * @return {number} force\n */\nfunction EulerIntegration_attractiveForceFunction(d, k) {\n    return d * d / k;\n}\n/**\n * Barycenter force. Calculate and applys barycenter forces on the\n * nodes. Making them closer to the center of their barycenter point.\n *\n * In Euler integration, force is stored in a node, not changing it's\n * position. Later, in `integrate()` forces are applied on nodes.\n *\n * @private\n */\nfunction EulerIntegration_barycenter() {\n    const gravitationalConstant = this.options.gravitationalConstant, xFactor = this.barycenter.xFactor, yFactor = this.barycenter.yFactor;\n    this.nodes.forEach(function (node) {\n        if (!node.fixedPosition) {\n            const degree = node.getDegree(), phi = degree * (1 + degree / 2);\n            node.dispX += ((xFactor - node.plotX) *\n                gravitationalConstant *\n                phi / node.degree);\n            node.dispY += ((yFactor - node.plotY) *\n                gravitationalConstant *\n                phi / node.degree);\n        }\n    });\n}\n/**\n * Estimate the best possible distance between two nodes, making graph\n * readable.\n * @private\n */\nfunction EulerIntegration_getK(layout) {\n    return Math.pow(layout.box.width * layout.box.height / layout.nodes.length, 0.3);\n}\n/**\n * Integration method.\n *\n * In Euler integration, force were stored in a node, not changing it's\n * position. Now, in the integrator method, we apply changes.\n *\n * Euler:\n *\n * Basic form: `x(n+1) = x(n) + v(n)`\n *\n * With Rengoild-Fruchterman we get:\n * `x(n+1) = x(n) + v(n) / length(v(n)) * min(v(n), temperature(n))`\n * where:\n * - `x(n+1)`: next position\n * - `x(n)`: current position\n * - `v(n)`: velocity (comes from net force)\n * - `temperature(n)`: current temperature\n *\n * Known issues:\n * Oscillations when force vector has the same magnitude but opposite\n * direction in the next step. Potentially solved by decreasing force by\n * `v * (1 / node.degree)`\n *\n * Note:\n * Actually `min(v(n), temperature(n))` replaces simulated annealing.\n *\n * @private\n * @param {Highcharts.NetworkgraphLayout} layout\n *        Layout object\n * @param {Highcharts.Point} node\n *        Node that should be translated\n */\nfunction EulerIntegration_integrate(layout, node) {\n    node.dispX +=\n        node.dispX * layout.options.friction;\n    node.dispY +=\n        node.dispY * layout.options.friction;\n    const distanceR = node.temperature = layout.vectorLength({\n        x: node.dispX,\n        y: node.dispY\n    });\n    if (distanceR !== 0) {\n        node.plotX += (node.dispX / distanceR *\n            Math.min(Math.abs(node.dispX), layout.temperature));\n        node.plotY += (node.dispY / distanceR *\n            Math.min(Math.abs(node.dispY), layout.temperature));\n    }\n}\n/**\n * Repulsive force.\n *\n * @private\n * @param {Highcharts.Point} node\n *        Node that should be translated by force.\n * @param {number} force\n *        Force calculated in `repulsiveForceFunction`\n * @param {Highcharts.PositionObject} distanceXY\n *        Distance between two nodes e.g. `{x, y}`\n */\nfunction EulerIntegration_repulsive(node, force, distanceXY, distanceR) {\n    node.dispX +=\n        (distanceXY.x / distanceR) * force / node.degree;\n    node.dispY +=\n        (distanceXY.y / distanceR) * force / node.degree;\n}\n/**\n * Repulsive force function. Can be replaced by API's\n * `layoutAlgorithm.repulsiveForce`.\n *\n * Other forces that can be used:\n *\n * basic, not recommended:\n *    `function (d, k) { return k / d }`\n *\n * standard:\n *    `function (d, k) { return k * k / d }`\n *\n * grid-variant:\n *    `function (d, k) { return k * k / d * (2 * k - d > 0 ? 1 : 0) }`\n *\n * @private\n * @param {number} d current distance between two nodes\n * @param {number} k expected distance between two nodes\n * @return {number} force\n */\nfunction EulerIntegration_repulsiveForceFunction(d, k) {\n    return k * k / d;\n}\n/* *\n *\n *  Default Export\n *\n * */\nconst EulerIntegration = {\n    attractive: EulerIntegration_attractive,\n    attractiveForceFunction: EulerIntegration_attractiveForceFunction,\n    barycenter: EulerIntegration_barycenter,\n    getK: EulerIntegration_getK,\n    integrate: EulerIntegration_integrate,\n    repulsive: EulerIntegration_repulsive,\n    repulsiveForceFunction: EulerIntegration_repulsiveForceFunction\n};\n/* harmony default export */ const Networkgraph_EulerIntegration = (EulerIntegration);\n\n;// ./code/es-modules/Series/Networkgraph/QuadTreeNode.js\n/* *\n *\n *  Networkgraph series\n *\n *  (c) 2010-2024 Paweł Fus\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  Class\n *\n * */\n/**\n * The QuadTree node class. Used in Networkgraph chart as a base for Barnes-Hut\n * approximation.\n *\n * @private\n * @class\n * @name Highcharts.QuadTreeNode\n *\n * @param {Highcharts.Dictionary<number>} box\n *        Available space for the node\n */\nclass QuadTreeNode {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(box) {\n        /* *\n         *\n         *  Properties\n         *\n         * */\n        /**\n         * Read only. If QuadTreeNode is an external node, Point is stored in\n         * `this.body`.\n         *\n         * @name Highcharts.QuadTreeNode#body\n         * @type {boolean|Highcharts.Point}\n         */\n        this.body = false;\n        /**\n         * Read only. Internal nodes when created are empty to reserve the\n         * space. If Point is added to this QuadTreeNode, QuadTreeNode is no\n         * longer empty.\n         *\n         * @name Highcharts.QuadTreeNode#isEmpty\n         * @type {boolean}\n         */\n        this.isEmpty = false;\n        /**\n         * Read only. Flag to determine if QuadTreeNode is internal (and has\n         * subnodes with mass and central position) or external (bound to\n         * Point).\n         *\n         * @name Highcharts.QuadTreeNode#isInternal\n         * @type {boolean}\n         */\n        this.isInternal = false;\n        /**\n         * Read only. Array of subnodes. Empty if QuadTreeNode has just one\n         * Point. When added another Point to this QuadTreeNode, array is\n         * filled with four subnodes.\n         *\n         * @name Highcharts.QuadTreeNode#nodes\n         * @type {Array<Highcharts.QuadTreeNode>}\n         */\n        this.nodes = [];\n        /**\n         * Read only. The available space for node.\n         *\n         * @name Highcharts.QuadTreeNode#box\n         * @type {Highcharts.Dictionary<number>}\n         */\n        this.box = box;\n        /**\n         * Read only. The minium of width and height values.\n         *\n         * @name Highcharts.QuadTreeNode#boxSize\n         * @type {number}\n         */\n        this.boxSize = Math.min(box.width, box.height);\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * When inserting another node into the box, that already hove one node,\n     * divide the available space into another four quadrants.\n     *\n     * Indexes of quadrants are:\n     * ```\n     * -------------               -------------\n     * |           |               |     |     |\n     * |           |               |  0  |  1  |\n     * |           |   divide()    |     |     |\n     * |     1     | ----------->  -------------\n     * |           |               |     |     |\n     * |           |               |  3  |  2  |\n     * |           |               |     |     |\n     * -------------               -------------\n     * ```\n     */\n    divideBox() {\n        const halfWidth = this.box.width / 2, halfHeight = this.box.height / 2;\n        // Top left\n        this.nodes[0] = new QuadTreeNode({\n            left: this.box.left,\n            top: this.box.top,\n            width: halfWidth,\n            height: halfHeight\n        });\n        // Top right\n        this.nodes[1] = new QuadTreeNode({\n            left: this.box.left + halfWidth,\n            top: this.box.top,\n            width: halfWidth,\n            height: halfHeight\n        });\n        // Bottom right\n        this.nodes[2] = new QuadTreeNode({\n            left: this.box.left + halfWidth,\n            top: this.box.top + halfHeight,\n            width: halfWidth,\n            height: halfHeight\n        });\n        // Bottom left\n        this.nodes[3] = new QuadTreeNode({\n            left: this.box.left,\n            top: this.box.top + halfHeight,\n            width: halfWidth,\n            height: halfHeight\n        });\n    }\n    /**\n     * Determine which of the quadrants should be used when placing node in\n     * the QuadTree. Returned index is always in range `< 0 , 3 >`.\n     * @private\n     */\n    getBoxPosition(point) {\n        const left = point.plotX < this.box.left + this.box.width / 2, top = point.plotY < this.box.top + this.box.height / 2;\n        let index;\n        if (left) {\n            if (top) {\n                // Top left\n                index = 0;\n            }\n            else {\n                // Bottom left\n                index = 3;\n            }\n        }\n        else {\n            if (top) {\n                // Top right\n                index = 1;\n            }\n            else {\n                // Bottom right\n                index = 2;\n            }\n        }\n        return index;\n    }\n    /**\n     * Insert recursively point(node) into the QuadTree. If the given\n     * quadrant is already occupied, divide it into smaller quadrants.\n     *\n     * @param {Highcharts.Point} point\n     *        Point/node to be inserted\n     * @param {number} depth\n     *        Max depth of the QuadTree\n     */\n    insert(point, depth) {\n        let newQuadTreeNode;\n        if (this.isInternal) {\n            // Internal node:\n            this.nodes[this.getBoxPosition(point)].insert(point, depth - 1);\n        }\n        else {\n            this.isEmpty = false;\n            if (!this.body) {\n                // First body in a quadrant:\n                this.isInternal = false;\n                this.body = point;\n            }\n            else {\n                if (depth) {\n                    // Every other body in a quadrant:\n                    this.isInternal = true;\n                    this.divideBox();\n                    // Reinsert main body only once:\n                    if (this.body !== true) {\n                        this.nodes[this.getBoxPosition(this.body)]\n                            .insert(this.body, depth - 1);\n                        this.body = true;\n                    }\n                    // Add second body:\n                    this.nodes[this.getBoxPosition(point)]\n                        .insert(point, depth - 1);\n                }\n                else {\n                    // We are below max allowed depth. That means either:\n                    // - really huge number of points\n                    // - falling two points into exactly the same position\n                    // In this case, create another node in the QuadTree.\n                    //\n                    // Alternatively we could add some noise to the\n                    // position, but that could result in different\n                    // rendered chart in exporting.\n                    newQuadTreeNode = new QuadTreeNode({\n                        top: point.plotX || NaN,\n                        left: point.plotY || NaN,\n                        // Width/height below 1px\n                        width: 0.1,\n                        height: 0.1\n                    });\n                    newQuadTreeNode.body = point;\n                    newQuadTreeNode.isInternal = false;\n                    this.nodes.push(newQuadTreeNode);\n                }\n            }\n        }\n    }\n    /**\n     * Each quad node requires it's mass and center position. That mass and\n     * position is used to imitate real node in the layout by approximation.\n     */\n    updateMassAndCenter() {\n        let mass = 0, plotX = 0, plotY = 0;\n        if (this.isInternal) {\n            // Calculate weightened mass of the quad node:\n            for (const pointMass of this.nodes) {\n                if (!pointMass.isEmpty) {\n                    mass += pointMass.mass;\n                    plotX += pointMass.plotX * pointMass.mass;\n                    plotY += pointMass.plotY * pointMass.mass;\n                }\n            }\n            plotX /= mass;\n            plotY /= mass;\n        }\n        else if (this.body) {\n            // Just one node, use coordinates directly:\n            mass = this.body.mass;\n            plotX = this.body.plotX;\n            plotY = this.body.plotY;\n        }\n        // Store details:\n        this.mass = mass;\n        this.plotX = plotX;\n        this.plotY = plotY;\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Networkgraph_QuadTreeNode = (QuadTreeNode);\n\n;// ./code/es-modules/Series/Networkgraph/QuadTree.js\n/* *\n *\n *  Networkgraph series\n *\n *  (c) 2010-2024 Paweł Fus\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 *  Class\n *\n * */\n/**\n * The QuadTree class. Used in Networkgraph chart as a base for Barnes-Hut\n * approximation.\n *\n * @private\n * @class\n * @name Highcharts.QuadTree\n *\n * @param {number} x\n *        Left position of the plotting area\n * @param {number} y\n *        Top position of the plotting area\n * @param {number} width\n *        Width of the plotting area\n * @param {number} height\n *        Height of the plotting area\n */\nclass QuadTree {\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(x, y, width, height) {\n        // Boundary rectangle:\n        this.box = {\n            left: x,\n            top: y,\n            width: width,\n            height: height\n        };\n        this.maxDepth = 25;\n        this.root = new Networkgraph_QuadTreeNode(this.box);\n        this.root.isInternal = true;\n        this.root.isRoot = true;\n        this.root.divideBox();\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * Calculate mass of the each QuadNode in the tree.\n     */\n    calculateMassAndCenter() {\n        this.visitNodeRecursive(null, null, function (node) {\n            node.updateMassAndCenter();\n        });\n    }\n    /**\n     * Insert nodes into the QuadTree\n     *\n     * @param {Array<Highcharts.Point>} points\n     *        Points as nodes\n     */\n    insertNodes(points) {\n        for (const point of points) {\n            this.root.insert(point, this.maxDepth);\n        }\n    }\n    /**\n     * Depth first treversal (DFS). Using `before` and `after` callbacks,\n     * we can get two results: preorder and postorder traversals, reminder:\n     *\n     * ```\n     *     (a)\n     *     / \\\n     *   (b) (c)\n     *   / \\\n     * (d) (e)\n     * ```\n     *\n     * DFS (preorder): `a -> b -> d -> e -> c`\n     *\n     * DFS (postorder): `d -> e -> b -> c -> a`\n     *\n     * @param {Highcharts.QuadTreeNode|null} node\n     *        QuadTree node\n     * @param {Function} [beforeCallback]\n     *        Function to be called before visiting children nodes.\n     * @param {Function} [afterCallback]\n     *        Function to be called after visiting children nodes.\n     */\n    visitNodeRecursive(node, beforeCallback, afterCallback) {\n        let goFurther;\n        if (!node) {\n            node = this.root;\n        }\n        if (node === this.root && beforeCallback) {\n            goFurther = beforeCallback(node);\n        }\n        if (goFurther === false) {\n            return;\n        }\n        for (const qtNode of node.nodes) {\n            if (qtNode.isInternal) {\n                if (beforeCallback) {\n                    goFurther = beforeCallback(qtNode);\n                }\n                if (goFurther === false) {\n                    continue;\n                }\n                this.visitNodeRecursive(qtNode, beforeCallback, afterCallback);\n            }\n            else if (qtNode.body) {\n                if (beforeCallback) {\n                    beforeCallback(qtNode.body);\n                }\n            }\n            if (afterCallback) {\n                afterCallback(qtNode);\n            }\n        }\n        if (node === this.root && afterCallback) {\n            afterCallback(node);\n        }\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Networkgraph_QuadTree = (QuadTree);\n\n;// ./code/es-modules/Series/Networkgraph/ReingoldFruchtermanLayout.js\n/* *\n *\n *  Networkgraph series\n *\n *  (c) 2010-2024 Paweł Fus\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { win } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\nconst { clamp: ReingoldFruchtermanLayout_clamp, defined: ReingoldFruchtermanLayout_defined, isFunction, fireEvent: ReingoldFruchtermanLayout_fireEvent, pick: ReingoldFruchtermanLayout_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n/* *\n *\n *  Class\n *\n * */\n/**\n * Reingold-Fruchterman algorithm from\n * \"Graph Drawing by Force-directed Placement\" paper.\n * @private\n */\nclass ReingoldFruchtermanLayout {\n    constructor() {\n        /* *\n         *\n         *  Static Functions\n         *\n         * */\n        this.box = {};\n        this.currentStep = 0;\n        this.initialRendering = true;\n        this.links = [];\n        this.nodes = [];\n        this.series = [];\n        this.simulation = false;\n    }\n    static compose(ChartClass) {\n        Series_GraphLayoutComposition.compose(ChartClass);\n        Series_GraphLayoutComposition.integrations.euler = Networkgraph_EulerIntegration;\n        Series_GraphLayoutComposition.integrations.verlet = Networkgraph_VerletIntegration;\n        Series_GraphLayoutComposition.layouts['reingold-fruchterman'] =\n            ReingoldFruchtermanLayout;\n    }\n    init(options) {\n        this.options = options;\n        this.nodes = [];\n        this.links = [];\n        this.series = [];\n        this.box = {\n            x: 0,\n            y: 0,\n            width: 0,\n            height: 0\n        };\n        this.setInitialRendering(true);\n        this.integration =\n            Series_GraphLayoutComposition.integrations[options.integration];\n        this.enableSimulation = options.enableSimulation;\n        this.attractiveForce = ReingoldFruchtermanLayout_pick(options.attractiveForce, this.integration.attractiveForceFunction);\n        this.repulsiveForce = ReingoldFruchtermanLayout_pick(options.repulsiveForce, this.integration.repulsiveForceFunction);\n        this.approximation = options.approximation;\n    }\n    updateSimulation(enable) {\n        this.enableSimulation = ReingoldFruchtermanLayout_pick(enable, this.options.enableSimulation);\n    }\n    start() {\n        const layout = this, series = this.series, options = this.options;\n        layout.currentStep = 0;\n        layout.forces = series[0] && series[0].forces || [];\n        layout.chart = series[0] && series[0].chart;\n        if (layout.initialRendering) {\n            layout.initPositions();\n            // Render elements in initial positions:\n            series.forEach(function (s) {\n                s.finishedAnimating = true; // #13169\n                s.render();\n            });\n        }\n        layout.setK();\n        layout.resetSimulation(options);\n        if (layout.enableSimulation) {\n            layout.step();\n        }\n    }\n    step() {\n        const anyLayout = this, allSeries = this.series;\n        // Algorithm:\n        this.currentStep++;\n        if (this.approximation === 'barnes-hut') {\n            this.createQuadTree();\n            this.quadTree.calculateMassAndCenter();\n        }\n        for (const forceName of this.forces || []) {\n            anyLayout[forceName + 'Forces'](this.temperature);\n        }\n        // Limit to the plotting area and cool down:\n        this.applyLimits();\n        // Cool down the system:\n        this.temperature = this.coolDown(this.startTemperature, this.diffTemperature, this.currentStep);\n        this.prevSystemTemperature = this.systemTemperature;\n        this.systemTemperature = this.getSystemTemperature();\n        if (this.enableSimulation) {\n            for (const series of allSeries) {\n                // Chart could be destroyed during the simulation\n                if (series.chart) {\n                    series.render();\n                }\n            }\n            if (this.maxIterations-- &&\n                isFinite(this.temperature) &&\n                !this.isStable()) {\n                if (this.simulation) {\n                    win.cancelAnimationFrame(this.simulation);\n                }\n                this.simulation = win.requestAnimationFrame(() => this.step());\n            }\n            else {\n                this.simulation = false;\n                this.series.forEach((s) => {\n                    ReingoldFruchtermanLayout_fireEvent(s, 'afterSimulation');\n                });\n            }\n        }\n    }\n    stop() {\n        if (this.simulation) {\n            win.cancelAnimationFrame(this.simulation);\n        }\n    }\n    setArea(x, y, w, h) {\n        this.box = {\n            left: x,\n            top: y,\n            width: w,\n            height: h\n        };\n    }\n    setK() {\n        // Optimal distance between nodes,\n        // available space around the node:\n        this.k = this.options.linkLength || this.integration.getK(this);\n    }\n    addElementsToCollection(elements, collection) {\n        for (const element of elements) {\n            if (collection.indexOf(element) === -1) {\n                collection.push(element);\n            }\n        }\n    }\n    removeElementFromCollection(element, collection) {\n        const index = collection.indexOf(element);\n        if (index !== -1) {\n            collection.splice(index, 1);\n        }\n    }\n    clear() {\n        this.nodes.length = 0;\n        this.links.length = 0;\n        this.series.length = 0;\n        this.resetSimulation();\n    }\n    resetSimulation() {\n        this.forcedStop = false;\n        this.systemTemperature = 0;\n        this.setMaxIterations();\n        this.setTemperature();\n        this.setDiffTemperature();\n    }\n    restartSimulation() {\n        if (!this.simulation) {\n            // When dragging nodes, we don't need to calculate\n            // initial positions and rendering nodes:\n            this.setInitialRendering(false);\n            // Start new simulation:\n            if (!this.enableSimulation) {\n                // Run only one iteration to speed things up:\n                this.setMaxIterations(1);\n            }\n            else {\n                this.start();\n            }\n            if (this.chart) {\n                this.chart.redraw();\n            }\n            // Restore defaults:\n            this.setInitialRendering(true);\n        }\n        else {\n            // Extend current simulation:\n            this.resetSimulation();\n        }\n    }\n    setMaxIterations(maxIterations) {\n        this.maxIterations = ReingoldFruchtermanLayout_pick(maxIterations, this.options.maxIterations);\n    }\n    setTemperature() {\n        this.temperature = this.startTemperature =\n            Math.sqrt(this.nodes.length);\n    }\n    setDiffTemperature() {\n        this.diffTemperature = this.startTemperature /\n            (this.options.maxIterations + 1);\n    }\n    setInitialRendering(enable) {\n        this.initialRendering = enable;\n    }\n    createQuadTree() {\n        this.quadTree = new Networkgraph_QuadTree(this.box.left, this.box.top, this.box.width, this.box.height);\n        this.quadTree.insertNodes(this.nodes);\n    }\n    initPositions() {\n        const initialPositions = this.options.initialPositions;\n        if (isFunction(initialPositions)) {\n            initialPositions.call(this);\n            for (const node of this.nodes) {\n                if (!ReingoldFruchtermanLayout_defined(node.prevX)) {\n                    node.prevX = node.plotX;\n                }\n                if (!ReingoldFruchtermanLayout_defined(node.prevY)) {\n                    node.prevY = node.plotY;\n                }\n                node.dispX = 0;\n                node.dispY = 0;\n            }\n        }\n        else if (initialPositions === 'circle') {\n            this.setCircularPositions();\n        }\n        else {\n            this.setRandomPositions();\n        }\n    }\n    setCircularPositions() {\n        const box = this.box, nodes = this.nodes, nodesLength = nodes.length + 1, angle = 2 * Math.PI / nodesLength, rootNodes = nodes.filter(function (node) {\n            return node.linksTo.length === 0;\n        }), visitedNodes = {}, radius = this.options.initialPositionRadius, addToNodes = (node) => {\n            for (const link of node.linksFrom || []) {\n                if (!visitedNodes[link.toNode.id]) {\n                    visitedNodes[link.toNode.id] = true;\n                    sortedNodes.push(link.toNode);\n                    addToNodes(link.toNode);\n                }\n            }\n        };\n        let sortedNodes = [];\n        // Start with identified root nodes an sort the nodes by their\n        // hierarchy. In trees, this ensures that branches don't cross\n        // eachother.\n        for (const rootNode of rootNodes) {\n            sortedNodes.push(rootNode);\n            addToNodes(rootNode);\n        }\n        // Cyclic tree, no root node found\n        if (!sortedNodes.length) {\n            sortedNodes = nodes;\n            // Dangling, cyclic trees\n        }\n        else {\n            for (const node of nodes) {\n                if (sortedNodes.indexOf(node) === -1) {\n                    sortedNodes.push(node);\n                }\n            }\n        }\n        let node;\n        // Initial positions are laid out along a small circle, appearing\n        // as a cluster in the middle\n        for (let i = 0, iEnd = sortedNodes.length; i < iEnd; ++i) {\n            node = sortedNodes[i];\n            node.plotX = node.prevX = ReingoldFruchtermanLayout_pick(node.plotX, box.width / 2 + radius * Math.cos(i * angle));\n            node.plotY = node.prevY = ReingoldFruchtermanLayout_pick(node.plotY, box.height / 2 + radius * Math.sin(i * angle));\n            node.dispX = 0;\n            node.dispY = 0;\n        }\n    }\n    setRandomPositions() {\n        const box = this.box, nodes = this.nodes, nodesLength = nodes.length + 1, \n        /**\n         * Return a repeatable, quasi-random number based on an integer\n         * input. For the initial positions\n         * @private\n         */\n        unrandom = (n) => {\n            let rand = n * n / Math.PI;\n            rand = rand - Math.floor(rand);\n            return rand;\n        };\n        let node;\n        // Initial positions:\n        for (let i = 0, iEnd = nodes.length; i < iEnd; ++i) {\n            node = nodes[i];\n            node.plotX = node.prevX = ReingoldFruchtermanLayout_pick(node.plotX, box.width * unrandom(i));\n            node.plotY = node.prevY = ReingoldFruchtermanLayout_pick(node.plotY, box.height * unrandom(nodesLength + i));\n            node.dispX = 0;\n            node.dispY = 0;\n        }\n    }\n    force(name, ...args) {\n        this.integration[name].apply(this, args);\n    }\n    barycenterForces() {\n        this.getBarycenter();\n        this.force('barycenter');\n    }\n    getBarycenter() {\n        let systemMass = 0, cx = 0, cy = 0;\n        for (const node of this.nodes) {\n            cx += node.plotX * node.mass;\n            cy += node.plotY * node.mass;\n            systemMass += node.mass;\n        }\n        this.barycenter = {\n            x: cx,\n            y: cy,\n            xFactor: cx / systemMass,\n            yFactor: cy / systemMass\n        };\n        return this.barycenter;\n    }\n    barnesHutApproximation(node, quadNode) {\n        const distanceXY = this.getDistXY(node, quadNode), distanceR = this.vectorLength(distanceXY);\n        let goDeeper, force;\n        if (node !== quadNode && distanceR !== 0) {\n            if (quadNode.isInternal) {\n                // Internal node:\n                if (quadNode.boxSize / distanceR <\n                    this.options.theta &&\n                    distanceR !== 0) {\n                    // Treat as an external node:\n                    force = this.repulsiveForce(distanceR, this.k);\n                    this.force('repulsive', node, force * quadNode.mass, distanceXY, distanceR);\n                    goDeeper = false;\n                }\n                else {\n                    // Go deeper:\n                    goDeeper = true;\n                }\n            }\n            else {\n                // External node, direct force:\n                force = this.repulsiveForce(distanceR, this.k);\n                this.force('repulsive', node, force * quadNode.mass, distanceXY, distanceR);\n            }\n        }\n        return goDeeper;\n    }\n    repulsiveForces() {\n        if (this.approximation === 'barnes-hut') {\n            for (const node of this.nodes) {\n                this.quadTree.visitNodeRecursive(null, (quadNode) => (this.barnesHutApproximation(node, quadNode)));\n            }\n        }\n        else {\n            let force, distanceR, distanceXY;\n            for (const node of this.nodes) {\n                for (const repNode of this.nodes) {\n                    if (\n                    // Node cannot repulse itself:\n                    node !== repNode &&\n                        // Only close nodes affect each other:\n                        // layout.getDistR(node, repNode) < 2 * k &&\n                        // Not dragged:\n                        !node.fixedPosition) {\n                        distanceXY = this.getDistXY(node, repNode);\n                        distanceR = this.vectorLength(distanceXY);\n                        if (distanceR !== 0) {\n                            force = this.repulsiveForce(distanceR, this.k);\n                            this.force('repulsive', node, force * repNode.mass, distanceXY, distanceR);\n                        }\n                    }\n                }\n            }\n        }\n    }\n    attractiveForces() {\n        let distanceXY, distanceR, force;\n        for (const link of this.links) {\n            if (link.fromNode && link.toNode) {\n                distanceXY = this.getDistXY(link.fromNode, link.toNode);\n                distanceR = this.vectorLength(distanceXY);\n                if (distanceR !== 0) {\n                    force = this.attractiveForce(distanceR, this.k);\n                    this.force('attractive', link, force, distanceXY, distanceR);\n                }\n            }\n        }\n    }\n    applyLimits() {\n        const nodes = this.nodes;\n        for (const node of nodes) {\n            if (node.fixedPosition) {\n                continue;\n            }\n            this.integration.integrate(this, node);\n            this.applyLimitBox(node, this.box);\n            // Reset displacement:\n            node.dispX = 0;\n            node.dispY = 0;\n        }\n    }\n    /**\n     * External box that nodes should fall. When hitting an edge, node\n     * should stop or bounce.\n     * @private\n     */\n    applyLimitBox(node, box) {\n        const radius = node.radius;\n        /*\n        TO DO: Consider elastic collision instead of stopping.\n        o' means end position when hitting plotting area edge:\n\n        - \"inelastic\":\n        o\n            \\\n        ______\n        |  o'\n        |   \\\n        |    \\\n\n        - \"elastic\"/\"bounced\":\n        o\n            \\\n        ______\n        |  ^\n        | / \\\n        |o'  \\\n\n        Euler sample:\n        if (plotX < 0) {\n            plotX = 0;\n            dispX *= -1;\n        }\n\n        if (plotX > box.width) {\n            plotX = box.width;\n            dispX *= -1;\n        }\n\n        */\n        // Limit X-coordinates:\n        node.plotX = ReingoldFruchtermanLayout_clamp(node.plotX, box.left + radius, box.width - radius);\n        // Limit Y-coordinates:\n        node.plotY = ReingoldFruchtermanLayout_clamp(node.plotY, box.top + radius, box.height - radius);\n    }\n    /**\n     * From \"A comparison of simulated annealing cooling strategies\" by\n     * Nourani and Andresen work.\n     * @private\n     */\n    coolDown(temperature, temperatureStep, currentStep) {\n        // Logarithmic:\n        /*\n        return Math.sqrt(this.nodes.length) -\n            Math.log(\n                currentStep * layout.diffTemperature\n            );\n        */\n        // Exponential:\n        /*\n        let alpha = 0.1;\n        layout.temperature = Math.sqrt(layout.nodes.length) *\n            Math.pow(alpha, layout.diffTemperature);\n        */\n        // Linear:\n        return temperature - temperatureStep * currentStep;\n    }\n    isStable() {\n        return Math.abs(this.systemTemperature -\n            this.prevSystemTemperature) < 0.00001 || this.temperature <= 0;\n    }\n    getSystemTemperature() {\n        let value = 0;\n        for (const node of this.nodes) {\n            value += node.temperature;\n        }\n        return value;\n    }\n    vectorLength(vector) {\n        return Math.sqrt(vector.x * vector.x + vector.y * vector.y);\n    }\n    getDistR(nodeA, nodeB) {\n        const distance = this.getDistXY(nodeA, nodeB);\n        return this.vectorLength(distance);\n    }\n    getDistXY(nodeA, nodeB) {\n        const xDist = nodeA.plotX - nodeB.plotX, yDist = nodeA.plotY - nodeB.plotY;\n        return {\n            x: xDist,\n            y: yDist,\n            absX: Math.abs(xDist),\n            absY: Math.abs(yDist)\n        };\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Networkgraph_ReingoldFruchtermanLayout = (ReingoldFruchtermanLayout);\n\n;// ./code/es-modules/Series/PackedBubble/PackedBubbleLayout.js\n/* *\n *\n *  (c) 2010-2024 Grzegorz Blachlinski, Sebastian Bochan\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\n\n\nconst { addEvent: PackedBubbleLayout_addEvent, pick: PackedBubbleLayout_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction chartGetSelectedParentNodes() {\n    const allSeries = this.series, selectedParentsNodes = [];\n    allSeries.forEach((series) => {\n        if (series.parentNode && series.parentNode.selected) {\n            selectedParentsNodes.push(series.parentNode);\n        }\n    });\n    return selectedParentsNodes;\n}\n/**\n * Remove accumulated data points to redistribute all of them again\n * (i.e after hiding series by legend)\n * @private\n */\nfunction onChartBeforeRedraw() {\n    if (this.allDataPoints) {\n        delete this.allDataPoints;\n    }\n}\n/* *\n *\n *  Class\n *\n * */\nclass PackedBubbleLayout extends Networkgraph_ReingoldFruchtermanLayout {\n    constructor() {\n        /* *\n         *\n         *  Static Functions\n         *\n         * */\n        super(...arguments);\n        this.index = NaN;\n        this.nodes = [];\n        this.series = [];\n    }\n    static compose(ChartClass) {\n        Networkgraph_ReingoldFruchtermanLayout.compose(ChartClass);\n        Series_GraphLayoutComposition.integrations.packedbubble = PackedBubble_PackedBubbleIntegration;\n        Series_GraphLayoutComposition.layouts.packedbubble = PackedBubbleLayout;\n        const chartProto = ChartClass.prototype;\n        if (!chartProto.getSelectedParentNodes) {\n            PackedBubbleLayout_addEvent(ChartClass, 'beforeRedraw', onChartBeforeRedraw);\n            chartProto.getSelectedParentNodes = chartGetSelectedParentNodes;\n        }\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    beforeStep() {\n        if (this.options.marker) {\n            this.series.forEach((series) => {\n                if (series) {\n                    series.calculateParentRadius();\n                }\n            });\n        }\n    }\n    // #14439, new stable check.\n    isStable() {\n        const tempDiff = Math.abs(this.prevSystemTemperature -\n            this.systemTemperature);\n        const upScaledTemperature = 10 * this.systemTemperature /\n            Math.sqrt(this.nodes.length);\n        return Math.abs(upScaledTemperature) < 1 &&\n            tempDiff < 0.00001 ||\n            this.temperature <= 0;\n    }\n    setCircularPositions() {\n        const layout = this, box = layout.box, nodes = layout.nodes, nodesLength = nodes.length + 1, angle = 2 * Math.PI / nodesLength, radius = layout.options.initialPositionRadius;\n        let centerX, centerY, index = 0;\n        for (const node of nodes) {\n            if (layout.options.splitSeries &&\n                !node.isParentNode) {\n                centerX = node.series.parentNode.plotX;\n                centerY = node.series.parentNode.plotY;\n            }\n            else {\n                centerX = box.width / 2;\n                centerY = box.height / 2;\n            }\n            node.plotX = node.prevX = PackedBubbleLayout_pick(node.plotX, centerX +\n                radius * Math.cos(node.index || index * angle));\n            node.plotY = node.prevY = PackedBubbleLayout_pick(node.plotY, centerY +\n                radius * Math.sin(node.index || index * angle));\n            node.dispX = 0;\n            node.dispY = 0;\n            index++;\n        }\n    }\n    repulsiveForces() {\n        const layout = this, bubblePadding = layout.options.bubblePadding, nodes = layout.nodes;\n        let force, distanceR, distanceXY;\n        nodes.forEach((node) => {\n            node.degree = node.mass;\n            node.neighbours = 0;\n            nodes.forEach((repNode) => {\n                force = 0;\n                if (\n                // Node cannot repulse itself:\n                node !== repNode &&\n                    // Only close nodes affect each other:\n                    // Not dragged:\n                    !node.fixedPosition &&\n                    (layout.options.seriesInteraction ||\n                        node.series === repNode.series)) {\n                    distanceXY = layout.getDistXY(node, repNode);\n                    distanceR = (layout.vectorLength(distanceXY) -\n                        (node.marker.radius +\n                            repNode.marker.radius +\n                            bubblePadding));\n                    // TODO padding configurable\n                    if (distanceR < 0) {\n                        node.degree += 0.01;\n                        node.neighbours++;\n                        force = layout.repulsiveForce(-distanceR / Math.sqrt(node.neighbours), layout.k, node, repNode);\n                    }\n                    layout.force('repulsive', node, force * repNode.mass, distanceXY, repNode, distanceR);\n                }\n            });\n        });\n    }\n    applyLimitBox(node, box) {\n        const layout = this, factor = 0.01;\n        let distanceXY, distanceR;\n        // `parentNodeLimit` should be used together with seriesInteraction:\n        // false\n        if (layout.options.splitSeries &&\n            !node.isParentNode &&\n            layout.options.parentNodeLimit) {\n            distanceXY = layout.getDistXY(node, node.series.parentNode);\n            distanceR = (node.series.parentNodeRadius -\n                node.marker.radius -\n                layout.vectorLength(distanceXY));\n            if (distanceR < 0 &&\n                distanceR > -2 * node.marker.radius) {\n                node.plotX -= distanceXY.x * factor;\n                node.plotY -= distanceXY.y * factor;\n            }\n        }\n        super.applyLimitBox(node, box);\n    }\n}\n/* *\n *\n *  Registry\n *\n * */\nSeries_GraphLayoutComposition.layouts.packedbubble = PackedBubbleLayout;\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const PackedBubble_PackedBubbleLayout = (PackedBubbleLayout);\n\n;// ./code/es-modules/Series/SimulationSeriesUtilities.js\n/* *\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { merge: SimulationSeriesUtilities_merge, syncTimeout } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { animObject } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/**\n * Create a setTimeout for the first drawDataLabels()\n * based on the dataLabels.animation.defer value\n * for series which have enabled simulation.\n * @private\n */\nfunction initDataLabelsDefer() {\n    const dlOptions = this.options.dataLabels;\n    // Method drawDataLabels() fires for the first time after\n    // dataLabels.animation.defer time unless\n    // the dataLabels.animation = false or dataLabels.defer = false\n    // or if the simulation is disabled\n    if (!dlOptions?.defer ||\n        !this.options.layoutAlgorithm?.enableSimulation) {\n        this.deferDataLabels = false;\n    }\n    else {\n        syncTimeout(() => {\n            this.deferDataLabels = false;\n        }, dlOptions ? animObject(dlOptions.animation).defer : 0);\n    }\n}\n/**\n * Initialize the SVG group for the DataLabels with correct opacities\n * and correct styles so that the animation for the series that have\n * simulation enabled works fine.\n * @private\n */\nfunction initDataLabels() {\n    const series = this, dlOptions = series.options.dataLabels;\n    if (!series.dataLabelsGroup) {\n        const dataLabelsGroup = this.initDataLabelsGroup();\n        // Apply the dataLabels.style not only to the\n        // individual dataLabels but also to the entire group\n        if (!series.chart.styledMode && dlOptions?.style) {\n            dataLabelsGroup.css(dlOptions.style);\n        }\n        // Initialize the opacity of the group to 0 (start of animation)\n        dataLabelsGroup.attr({ opacity: 0 });\n        if (series.visible) { // #2597, #3023, #3024\n            dataLabelsGroup.show();\n        }\n        return dataLabelsGroup;\n    }\n    // Place it on first and subsequent (redraw) calls\n    series.dataLabelsGroup.attr(SimulationSeriesUtilities_merge({ opacity: 1 }, this.getPlotBox('data-labels')));\n    return series.dataLabelsGroup;\n}\nconst DataLabelsDeferUtils = {\n    initDataLabels,\n    initDataLabelsDefer\n};\n/* harmony default export */ const SimulationSeriesUtilities = (DataLabelsDeferUtils);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"SVGElement\"],\"commonjs\":[\"highcharts\",\"SVGElement\"],\"commonjs2\":[\"highcharts\",\"SVGElement\"],\"root\":[\"Highcharts\",\"SVGElement\"]}\nvar highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_ = __webpack_require__(28);\nvar highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_default = /*#__PURE__*/__webpack_require__.n(highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_);\n;// ./code/es-modules/Extensions/TextPath.js\n/* *\n *\n *  Highcharts module with textPath functionality.\n *\n *  (c) 2009-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { deg2rad: TextPath_deg2rad } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\nconst { addEvent: TextPath_addEvent, merge: TextPath_merge, uniqueKey, defined: TextPath_defined, extend: TextPath_extend } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/**\n * Set a text path for a `text` or `label` element, allowing the text to\n * flow along a path.\n *\n * In order to unset the path for an existing element, call `setTextPath`\n * with `{ enabled: false }` as the second argument.\n *\n * Text path support is not bundled into `highcharts.js`, and requires the\n * `modules/textpath.js` file. However, it is included in the script files of\n * those series types that use it by default\n *\n * @sample highcharts/members/renderer-textpath/ Text path demonstrated\n *\n * @function Highcharts.SVGElement#setTextPath\n *\n * @param {Highcharts.SVGElement|undefined} path\n *        Path to follow. If undefined, it allows changing options for the\n *        existing path.\n *\n * @param {Highcharts.DataLabelsTextPathOptionsObject} textPathOptions\n *        Options.\n *\n * @return {Highcharts.SVGElement} Returns the SVGElement for chaining.\n */\nfunction setTextPath(path, textPathOptions) {\n    // Defaults\n    textPathOptions = TextPath_merge(true, {\n        enabled: true,\n        attributes: {\n            dy: -5,\n            startOffset: '50%',\n            textAnchor: 'middle'\n        }\n    }, textPathOptions);\n    const url = this.renderer.url, textWrapper = this.text || this, textPath = textWrapper.textPath, { attributes, enabled } = textPathOptions;\n    path = path || (textPath && textPath.path);\n    // Remove previously added event\n    if (textPath) {\n        textPath.undo();\n    }\n    if (path && enabled) {\n        const undo = TextPath_addEvent(textWrapper, 'afterModifyTree', (e) => {\n            if (path && enabled) {\n                // Set ID for the path\n                let textPathId = path.attr('id');\n                if (!textPathId) {\n                    path.attr('id', textPathId = uniqueKey());\n                }\n                // Set attributes for the <text>\n                const textAttribs = {\n                    // `dx`/`dy` options must by set on <text> (parent), the\n                    // rest should be set on <textPath>\n                    x: 0,\n                    y: 0\n                };\n                if (TextPath_defined(attributes.dx)) {\n                    textAttribs.dx = attributes.dx;\n                    delete attributes.dx;\n                }\n                if (TextPath_defined(attributes.dy)) {\n                    textAttribs.dy = attributes.dy;\n                    delete attributes.dy;\n                }\n                textWrapper.attr(textAttribs);\n                // Handle label properties\n                this.attr({ transform: '' });\n                if (this.box) {\n                    this.box = this.box.destroy();\n                }\n                // Wrap the nodes in a textPath\n                const children = e.nodes.slice(0);\n                e.nodes.length = 0;\n                e.nodes[0] = {\n                    tagName: 'textPath',\n                    attributes: TextPath_extend(attributes, {\n                        'text-anchor': attributes.textAnchor,\n                        href: `${url}#${textPathId}`\n                    }),\n                    children\n                };\n            }\n        });\n        // Set the reference\n        textWrapper.textPath = { path, undo };\n    }\n    else {\n        textWrapper.attr({ dx: 0, dy: 0 });\n        delete textWrapper.textPath;\n    }\n    if (this.added) {\n        // Rebuild text after added\n        textWrapper.textCache = '';\n        this.renderer.buildText(textWrapper);\n    }\n    return this;\n}\n/**\n * Attach a polygon to a bounding box if the element contains a textPath.\n *\n * @function Highcharts.SVGElement#setPolygon\n *\n * @param {any} event\n *        An event containing a bounding box object\n *\n * @return {Highcharts.BBoxObject} Returns the bounding box object.\n */\nfunction setPolygon(event) {\n    const bBox = event.bBox, tp = this.element?.querySelector('textPath');\n    if (tp) {\n        const polygon = [], { b, h } = this.renderer.fontMetrics(this.element), descender = h - b, lineCleanerRegex = new RegExp('(<tspan>|' +\n            '<tspan(?!\\\\sclass=\"highcharts-br\")[^>]*>|' +\n            '<\\\\/tspan>)', 'g'), lines = tp\n            .innerHTML\n            .replace(lineCleanerRegex, '')\n            .split(/<tspan class=\"highcharts-br\"[^>]*>/), numOfLines = lines.length;\n        // Calculate top and bottom coordinates for\n        // either the start or the end of a single\n        // character, and append it to the polygon.\n        const appendTopAndBottom = (charIndex, positionOfChar) => {\n            const { x, y } = positionOfChar, rotation = (tp.getRotationOfChar(charIndex) - 90) * TextPath_deg2rad, cosRot = Math.cos(rotation), sinRot = Math.sin(rotation);\n            return [\n                [\n                    x - descender * cosRot,\n                    y - descender * sinRot\n                ],\n                [\n                    x + b * cosRot,\n                    y + b * sinRot\n                ]\n            ];\n        };\n        for (let i = 0, lineIndex = 0; lineIndex < numOfLines; lineIndex++) {\n            const line = lines[lineIndex], lineLen = line.length;\n            for (let lineCharIndex = 0; lineCharIndex < lineLen; lineCharIndex += 5) {\n                try {\n                    const srcCharIndex = (i +\n                        lineCharIndex +\n                        lineIndex), [lower, upper] = appendTopAndBottom(srcCharIndex, tp.getStartPositionOfChar(srcCharIndex));\n                    if (lineCharIndex === 0) {\n                        polygon.push(upper);\n                        polygon.push(lower);\n                    }\n                    else {\n                        if (lineIndex === 0) {\n                            polygon.unshift(upper);\n                        }\n                        if (lineIndex === numOfLines - 1) {\n                            polygon.push(lower);\n                        }\n                    }\n                }\n                catch (e) {\n                    // Safari fails on getStartPositionOfChar even if the\n                    // character is within the `textContent.length`\n                    break;\n                }\n            }\n            i += lineLen - 1;\n            try {\n                const srcCharIndex = i + lineIndex, charPos = tp.getEndPositionOfChar(srcCharIndex), [lower, upper] = appendTopAndBottom(srcCharIndex, charPos);\n                polygon.unshift(upper);\n                polygon.unshift(lower);\n            }\n            catch (e) {\n                // Safari fails on getStartPositionOfChar even if the character\n                // is within the `textContent.length`\n                break;\n            }\n        }\n        // Close it\n        if (polygon.length) {\n            polygon.push(polygon[0].slice());\n        }\n        bBox.polygon = polygon;\n    }\n    return bBox;\n}\n/**\n * Draw text along a textPath for a dataLabel.\n *\n * @function Highcharts.SVGElement#setTextPath\n *\n * @param {any} event\n *        An event containing label options\n *\n * @return {void}\n */\nfunction drawTextPath(event) {\n    const labelOptions = event.labelOptions, point = event.point, textPathOptions = (labelOptions[point.formatPrefix + 'TextPath'] ||\n        labelOptions.textPath);\n    if (textPathOptions && !labelOptions.useHTML) {\n        this.setTextPath(point.getDataLabelPath?.(this) || point.graphic, textPathOptions);\n        if (point.dataLabelPath &&\n            !textPathOptions.enabled) {\n            // Clean the DOM\n            point.dataLabelPath = (point.dataLabelPath.destroy());\n        }\n    }\n}\nfunction TextPath_compose(SVGElementClass) {\n    TextPath_addEvent(SVGElementClass, 'afterGetBBox', setPolygon);\n    TextPath_addEvent(SVGElementClass, 'beforeAddingDataLabel', drawTextPath);\n    const svgElementProto = SVGElementClass.prototype;\n    if (!svgElementProto.setTextPath) {\n        svgElementProto.setTextPath = setTextPath;\n    }\n}\nconst TextPath = {\n    compose: TextPath_compose\n};\n/* harmony default export */ const Extensions_TextPath = (TextPath);\n\n;// ./code/es-modules/Series/PackedBubble/PackedBubbleSeries.js\n/* *\n *\n *  (c) 2010-2024 Grzegorz Blachlinski, Sebastian Bochan\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { parse: PackedBubbleSeries_color } = (highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default());\n\n\n\nconst { noop: PackedBubbleSeries_noop } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\n\nconst { series: { prototype: seriesProto }, seriesTypes: { bubble: PackedBubbleSeries_BubbleSeries } } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default());\n\nconst { initDataLabels: PackedBubbleSeries_initDataLabels, initDataLabelsDefer: PackedBubbleSeries_initDataLabelsDefer } = SimulationSeriesUtilities;\n\nconst { addEvent: PackedBubbleSeries_addEvent, clamp: PackedBubbleSeries_clamp, defined: PackedBubbleSeries_defined, extend: PackedBubbleSeries_extend, fireEvent: PackedBubbleSeries_fireEvent, isArray: PackedBubbleSeries_isArray, isNumber: PackedBubbleSeries_isNumber, merge: PackedBubbleSeries_merge, pick: PackedBubbleSeries_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\nExtensions_TextPath.compose((highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_default()));\n/* *\n *\n *  Class\n *\n * */\n/**\n * @private\n * @class\n * @name Highcharts.seriesTypes.packedbubble\n *\n * @extends Highcharts.Series\n */\nclass PackedBubbleSeries extends PackedBubbleSeries_BubbleSeries {\n    constructor() {\n        /* *\n         *\n         *  Static Properties\n         *\n         * */\n        super(...arguments);\n        this.parentNodeMass = 0;\n        this.deferDataLabels = true;\n        /* eslint-enable valid-jsdoc */\n    }\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    static compose(AxisClass, ChartClass, LegendClass) {\n        PackedBubbleSeries_BubbleSeries.compose(AxisClass, ChartClass, LegendClass);\n        Series_DragNodesComposition.compose(ChartClass);\n        PackedBubble_PackedBubbleLayout.compose(ChartClass);\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * Create a single array of all points from all series\n     * @private\n     */\n    accumulateAllPoints() {\n        const chart = this.chart, allDataPoints = [];\n        for (const series of chart.series) {\n            if (series.is('packedbubble') && // #13574\n                series.reserveSpace()) {\n                const valueData = series.getColumn('value');\n                // Add data to array only if series is visible\n                for (let j = 0; j < valueData.length; j++) {\n                    allDataPoints.push([\n                        null, null,\n                        valueData[j],\n                        series.index,\n                        j,\n                        {\n                            id: j,\n                            marker: {\n                                radius: 0\n                            }\n                        }\n                    ]);\n                }\n            }\n        }\n        return allDataPoints;\n    }\n    /**\n     * Adding the basic layout to series points.\n     * @private\n     */\n    addLayout() {\n        const layoutOptions = this.options.layoutAlgorithm =\n            this.options.layoutAlgorithm || {}, layoutType = layoutOptions.type || 'packedbubble', chartOptions = this.chart.options.chart;\n        let graphLayoutsStorage = this.chart.graphLayoutsStorage, graphLayoutsLookup = this.chart.graphLayoutsLookup, layout;\n        if (!graphLayoutsStorage) {\n            this.chart.graphLayoutsStorage = graphLayoutsStorage = {};\n            this.chart.graphLayoutsLookup = graphLayoutsLookup = [];\n        }\n        layout = graphLayoutsStorage[layoutType];\n        if (!layout) {\n            layoutOptions.enableSimulation =\n                !PackedBubbleSeries_defined(chartOptions.forExport) ?\n                    layoutOptions.enableSimulation :\n                    !chartOptions.forExport;\n            graphLayoutsStorage[layoutType] = layout =\n                new Series_GraphLayoutComposition.layouts[layoutType]();\n            layout.init(layoutOptions);\n            graphLayoutsLookup.splice(layout.index, 0, layout);\n        }\n        this.layout = layout;\n        this.points.forEach((node) => {\n            node.mass = 2;\n            node.degree = 1;\n            node.collisionNmb = 1;\n        });\n        layout.setArea(0, 0, this.chart.plotWidth, this.chart.plotHeight);\n        layout.addElementsToCollection([this], layout.series);\n        layout.addElementsToCollection(this.points, layout.nodes);\n    }\n    /**\n     * Function responsible for adding series layout, used for parent nodes.\n     * @private\n     */\n    addSeriesLayout() {\n        const layoutOptions = this.options.layoutAlgorithm =\n            this.options.layoutAlgorithm || {}, layoutType = (layoutOptions.type || 'packedbubble'), graphLayoutsStorage = this.chart.graphLayoutsStorage, graphLayoutsLookup = this.chart.graphLayoutsLookup, parentNodeOptions = PackedBubbleSeries_merge(layoutOptions, layoutOptions.parentNodeOptions, {\n            enableSimulation: this.layout.options.enableSimulation\n        });\n        let seriesLayout = graphLayoutsStorage[layoutType + '-series'];\n        if (!seriesLayout) {\n            graphLayoutsStorage[layoutType + '-series'] = seriesLayout =\n                new Series_GraphLayoutComposition.layouts[layoutType]();\n            seriesLayout.init(parentNodeOptions);\n            graphLayoutsLookup.splice(seriesLayout.index, 0, seriesLayout);\n        }\n        this.parentNodeLayout = seriesLayout;\n        this.createParentNodes();\n    }\n    /**\n     * The function responsible for calculating the parent node radius\n     * based on the total surface of inside-bubbles and the group BBox\n     * @private\n     */\n    calculateParentRadius() {\n        const bBox = this.seriesBox(), parentPadding = 20, minParentRadius = 20;\n        this.parentNodeRadius = PackedBubbleSeries_clamp(Math.sqrt(2 * this.parentNodeMass / Math.PI) + parentPadding, minParentRadius, bBox ?\n            Math.max(Math.sqrt(Math.pow(bBox.width, 2) +\n                Math.pow(bBox.height, 2)) / 2 + parentPadding, minParentRadius) :\n            Math.sqrt(2 * this.parentNodeMass / Math.PI) + parentPadding);\n        if (this.parentNode) {\n            this.parentNode.marker.radius =\n                this.parentNode.radius = this.parentNodeRadius;\n        }\n    }\n    /**\n     * Calculate min and max bubble value for radius calculation.\n     * @private\n     */\n    calculateZExtremes() {\n        const chart = this.chart, allSeries = chart.series;\n        let zMin = this.options.zMin, zMax = this.options.zMax, valMin = Infinity, valMax = -Infinity;\n        if (zMin && zMax) {\n            return [zMin, zMax];\n        }\n        // It is needed to deal with null and undefined values\n        allSeries.forEach((series) => {\n            series.getColumn('value').forEach((y) => {\n                if (PackedBubbleSeries_defined(y)) {\n                    if (y > valMax) {\n                        valMax = y;\n                    }\n                    if (y < valMin) {\n                        valMin = y;\n                    }\n                }\n            });\n        });\n        zMin = PackedBubbleSeries_pick(zMin, valMin);\n        zMax = PackedBubbleSeries_pick(zMax, valMax);\n        return [zMin, zMax];\n    }\n    /**\n     * Check if two bubbles overlaps.\n     * @private\n     */\n    checkOverlap(bubble1, bubble2) {\n        const diffX = bubble1[0] - bubble2[0], // Diff of X center values\n        diffY = bubble1[1] - bubble2[1], // Diff of Y center values\n        sumRad = bubble1[2] + bubble2[2]; // Sum of bubble radius\n        return (Math.sqrt(diffX * diffX + diffY * diffY) -\n            Math.abs(sumRad)) < -0.001;\n    }\n    /**\n     * Creating parent nodes for split series, in which all the bubbles\n     * are rendered.\n     * @private\n     */\n    createParentNodes() {\n        const PackedBubblePoint = this.pointClass, chart = this.chart, parentNodeLayout = this.parentNodeLayout, layoutOptions = this.layout.options;\n        let nodeAdded, parentNode = this.parentNode, parentMarkerOptions = {\n            radius: this.parentNodeRadius,\n            lineColor: this.color,\n            fillColor: PackedBubbleSeries_color(this.color).brighten(0.4).get()\n        };\n        if (layoutOptions.parentNodeOptions) {\n            parentMarkerOptions = PackedBubbleSeries_merge(layoutOptions.parentNodeOptions.marker || {}, parentMarkerOptions);\n        }\n        this.parentNodeMass = 0;\n        this.points.forEach((p) => {\n            this.parentNodeMass +=\n                Math.PI * Math.pow(p.marker.radius, 2);\n        });\n        this.calculateParentRadius();\n        parentNodeLayout.nodes\n            .forEach((node) => {\n            if (node.seriesIndex === this.index) {\n                nodeAdded = true;\n            }\n        });\n        parentNodeLayout.setArea(0, 0, chart.plotWidth, chart.plotHeight);\n        if (!nodeAdded) {\n            if (!parentNode) {\n                parentNode = new PackedBubblePoint(this, {\n                    mass: this.parentNodeRadius / 2,\n                    marker: parentMarkerOptions,\n                    dataLabels: {\n                        inside: false\n                    },\n                    states: {\n                        normal: {\n                            marker: parentMarkerOptions\n                        },\n                        hover: {\n                            marker: parentMarkerOptions\n                        }\n                    },\n                    dataLabelOnNull: true,\n                    degree: this.parentNodeRadius,\n                    isParentNode: true,\n                    seriesIndex: this.index\n                });\n            }\n            if (this.parentNode) {\n                parentNode.plotX = this.parentNode.plotX;\n                parentNode.plotY = this.parentNode.plotY;\n            }\n            this.parentNode = parentNode;\n            parentNodeLayout.addElementsToCollection([this], parentNodeLayout.series);\n            parentNodeLayout.addElementsToCollection([parentNode], parentNodeLayout.nodes);\n        }\n    }\n    /**\n     * Function responsible for adding all the layouts to the chart.\n     * @private\n     */\n    deferLayout() {\n        // TODO split layouts to independent methods\n        const layoutOptions = this.options.layoutAlgorithm;\n        if (!this.visible) {\n            return;\n        }\n        // Layout is using nodes for position calculation\n        this.addLayout();\n        if (layoutOptions.splitSeries) {\n            this.addSeriesLayout();\n        }\n    }\n    destroy() {\n        // Remove the series from all layouts series collections #11469\n        if (this.chart.graphLayoutsLookup) {\n            this.chart.graphLayoutsLookup.forEach((layout) => {\n                layout.removeElementFromCollection(this, layout.series);\n            }, this);\n        }\n        if (this.parentNode &&\n            this.parentNodeLayout) {\n            this.parentNodeLayout.removeElementFromCollection(this.parentNode, this.parentNodeLayout.nodes);\n            if (this.parentNode.dataLabel) {\n                this.parentNode.dataLabel =\n                    this.parentNode.dataLabel.destroy();\n            }\n        }\n        seriesProto.destroy.apply(this, arguments);\n    }\n    /**\n     * Packedbubble has two separate collections of nodes if split, render\n     * dataLabels for both sets:\n     * @private\n     */\n    drawDataLabels() {\n        // We defer drawing the dataLabels\n        // until dataLabels.animation.defer time passes\n        if (this.deferDataLabels) {\n            return;\n        }\n        seriesProto.drawDataLabels.call(this, this.points);\n        // Render parentNode labels:\n        if (this.parentNode) {\n            this.parentNode.formatPrefix = 'parentNode';\n            seriesProto.drawDataLabels.call(this, [this.parentNode]);\n        }\n    }\n    /**\n     * Create Background/Parent Nodes for split series.\n     * @private\n     */\n    drawGraph() {\n        // If the series is not using layout, don't add parent nodes\n        if (!this.layout || !this.layout.options.splitSeries) {\n            return;\n        }\n        const chart = this.chart, nodeMarker = this.layout.options.parentNodeOptions.marker, parentOptions = {\n            fill: (nodeMarker.fillColor ||\n                PackedBubbleSeries_color(this.color).brighten(0.4).get()),\n            opacity: nodeMarker.fillOpacity,\n            stroke: nodeMarker.lineColor || this.color,\n            'stroke-width': PackedBubbleSeries_pick(nodeMarker.lineWidth, this.options.lineWidth)\n        };\n        let parentAttribs = {};\n        // Create the group for parent Nodes if doesn't exist\n        // If exists it will only be adjusted to the updated plot size (#12063)\n        this.parentNodesGroup = this.plotGroup('parentNodesGroup', 'parentNode', this.visible ? 'inherit' : 'hidden', 0.1, chart.seriesGroup);\n        this.group?.attr({\n            zIndex: 2\n        });\n        this.calculateParentRadius();\n        if (this.parentNode &&\n            PackedBubbleSeries_defined(this.parentNode.plotX) &&\n            PackedBubbleSeries_defined(this.parentNode.plotY) &&\n            PackedBubbleSeries_defined(this.parentNodeRadius)) {\n            parentAttribs = PackedBubbleSeries_merge({\n                x: this.parentNode.plotX -\n                    this.parentNodeRadius,\n                y: this.parentNode.plotY -\n                    this.parentNodeRadius,\n                width: this.parentNodeRadius * 2,\n                height: this.parentNodeRadius * 2\n            }, parentOptions);\n            if (!this.parentNode.graphic) {\n                this.graph = this.parentNode.graphic =\n                    chart.renderer.symbol(parentOptions.symbol)\n                        .add(this.parentNodesGroup);\n            }\n            this.parentNode.graphic.attr(parentAttribs);\n        }\n    }\n    drawTracker() {\n        const parentNode = this.parentNode;\n        // Chart = series.chart,\n        // pointer = chart.pointer,\n        // onMouseOver = function (e: PointerEvent): void {\n        //     const point = pointer.getPointFromEvent(e);\n        //     // undefined on graph in scatterchart\n        //     if (typeof point !== 'undefined') {\n        //         pointer.isDirectTouch = true;\n        //         point.onMouseOver(e);\n        //     }\n        // };\n        let dataLabels;\n        super.drawTracker();\n        // Add reference to the point\n        if (parentNode) {\n            dataLabels = (PackedBubbleSeries_isArray(parentNode.dataLabels) ?\n                parentNode.dataLabels :\n                (parentNode.dataLabel ? [parentNode.dataLabel] : []));\n            if (parentNode.graphic) {\n                parentNode.graphic.element.point = parentNode;\n            }\n            dataLabels.forEach((dataLabel) => {\n                (dataLabel.div || dataLabel.element).point = parentNode;\n            });\n        }\n    }\n    /**\n     * Calculate radius of bubbles in series.\n     * @private\n     */\n    getPointRadius() {\n        const chart = this.chart, plotWidth = chart.plotWidth, plotHeight = chart.plotHeight, seriesOptions = this.options, useSimulation = seriesOptions.useSimulation, smallestSize = Math.min(plotWidth, plotHeight), extremes = {}, radii = [], allDataPoints = chart.allDataPoints || [], allDataPointsLength = allDataPoints.length;\n        let minSize, maxSize, value, radius;\n        ['minSize', 'maxSize'].forEach((prop) => {\n            const length = parseInt(seriesOptions[prop], 10), isPercent = /%$/.test(seriesOptions[prop]);\n            extremes[prop] = isPercent ?\n                smallestSize * length / 100 :\n                length * Math.sqrt(allDataPointsLength);\n        });\n        chart.minRadius = minSize = extremes.minSize /\n            Math.sqrt(allDataPointsLength);\n        chart.maxRadius = maxSize = extremes.maxSize /\n            Math.sqrt(allDataPointsLength);\n        const zExtremes = useSimulation ?\n            this.calculateZExtremes() :\n            [minSize, maxSize];\n        allDataPoints.forEach((point, i) => {\n            value = useSimulation ?\n                PackedBubbleSeries_clamp(point[2], zExtremes[0], zExtremes[1]) :\n                point[2];\n            radius = this.getRadius(zExtremes[0], zExtremes[1], minSize, maxSize, value);\n            if (radius === 0) {\n                radius = null;\n            }\n            allDataPoints[i][2] = radius;\n            radii.push(radius);\n        });\n        this.radii = radii;\n    }\n    init() {\n        seriesProto.init.apply(this, arguments);\n        PackedBubbleSeries_initDataLabelsDefer.call(this);\n        /* eslint-disable no-invalid-this */\n        // When one series is modified, the others need to be recomputed\n        this.eventsToUnbind.push(PackedBubbleSeries_addEvent(this, 'updatedData', function () {\n            this.chart.series.forEach((s) => {\n                if (s.type === this.type) {\n                    s.isDirty = true;\n                }\n            }, this);\n        }));\n        /* eslint-enable no-invalid-this */\n        return this;\n    }\n    /**\n     * Mouse up action, finalizing drag&drop.\n     * @private\n     * @param {Highcharts.Point} point The point that event occurred.\n     */\n    onMouseUp(dnPoint) {\n        const point = dnPoint;\n        if (point.fixedPosition && !point.removed) {\n            const layout = this.layout, parentNodeLayout = this.parentNodeLayout;\n            let distanceXY, distanceR;\n            if (parentNodeLayout && layout.options.dragBetweenSeries) {\n                parentNodeLayout.nodes.forEach((node) => {\n                    if (point && point.marker &&\n                        node !== point.series.parentNode) {\n                        distanceXY = layout.getDistXY(point, node);\n                        distanceR = (layout.vectorLength(distanceXY) -\n                            node.marker.radius -\n                            point.marker.radius);\n                        if (distanceR < 0) {\n                            node.series.addPoint(PackedBubbleSeries_merge(point.options, {\n                                plotX: point.plotX,\n                                plotY: point.plotY\n                            }), false);\n                            layout.removeElementFromCollection(point, layout.nodes);\n                            point.remove();\n                        }\n                    }\n                });\n            }\n            Series_DragNodesComposition.onMouseUp.apply(this, arguments);\n        }\n    }\n    /**\n     * This is the main function responsible\n     * for positioning all of the bubbles\n     * allDataPoints - bubble array, in format [pixel x value,\n     * pixel y value, radius,\n     * related series index, related point index]\n     * @private\n     * @param {Array<Highcharts.PackedBubbleData>} allDataPoints All points from all series\n     * @return {Array<Highcharts.PackedBubbleData>} Positions of all bubbles\n     */\n    placeBubbles(allDataPoints) {\n        const checkOverlap = this.checkOverlap, positionBubble = this.positionBubble, bubblePos = [];\n        let stage = 1, j = 0, k = 0, calculatedBubble, arr = [], i;\n        // Sort all points\n        const sortedArr = allDataPoints.sort((a, b) => b[2] - a[2]);\n        if (sortedArr.length) {\n            // Create first bubble in the middle of the chart\n            bubblePos.push([\n                [\n                    0, // Starting in 0,0 coordinates\n                    0,\n                    sortedArr[0][2], // Radius\n                    sortedArr[0][3], // Series index\n                    sortedArr[0][4]\n                ] // Point index\n            ]); // 0 level bubble\n            if (sortedArr.length > 1) {\n                bubblePos.push([\n                    [\n                        0,\n                        (0 - sortedArr[1][2] -\n                            sortedArr[0][2]),\n                        // Move bubble above first one\n                        sortedArr[1][2],\n                        sortedArr[1][3],\n                        sortedArr[1][4]\n                    ]\n                ]); // 1 level 1st bubble\n                // first two already positioned so starting from 2\n                for (i = 2; i < sortedArr.length; i++) {\n                    sortedArr[i][2] = sortedArr[i][2] || 1;\n                    // In case if radius is calculated as 0.\n                    calculatedBubble = positionBubble(bubblePos[stage][j], bubblePos[stage - 1][k], sortedArr[i]); // Calculate initial bubble position\n                    if (checkOverlap(calculatedBubble, bubblePos[stage][0])) {\n                        /* If new bubble is overlapping with first bubble\n                            * in current level (stage)\n                            */\n                        bubblePos.push([]);\n                        k = 0;\n                        /* Reset index of bubble, used for\n                            * positioning the bubbles around it,\n                            * we are starting from first bubble in next\n                            * stage because we are changing level to higher\n                            */\n                        bubblePos[stage + 1].push(positionBubble(bubblePos[stage][j], bubblePos[stage][0], sortedArr[i]));\n                        // (last bubble, 1. from curr stage, new bubble)\n                        stage++; // The new level is created, above current\n                        j = 0; // Set the index of bubble in curr level to 0\n                    }\n                    else if (stage > 1 &&\n                        bubblePos[stage - 1][k + 1] &&\n                        checkOverlap(calculatedBubble, bubblePos[stage - 1][k + 1])) {\n                        /* If new bubble is overlapping with one of the prev\n                            * stage bubbles, it means that - bubble, used for\n                            * positioning the bubbles around it has changed\n                            * so we need to recalculate it\n                            */\n                        k++;\n                        bubblePos[stage].push(positionBubble(bubblePos[stage][j], bubblePos[stage - 1][k], sortedArr[i]));\n                        // (last bubble, prev stage bubble, new bubble)\n                        j++;\n                    }\n                    else { // Simply add calculated bubble\n                        j++;\n                        bubblePos[stage].push(calculatedBubble);\n                    }\n                }\n            }\n            this.chart.stages = bubblePos;\n            // It may not be necessary but adding it just in case -\n            // it is containing all of the bubble levels\n            this.chart.rawPositions =\n                []\n                    .concat.apply([], bubblePos);\n            // Bubble positions merged into one array\n            this.resizeRadius();\n            arr = this.chart.rawPositions;\n        }\n        return arr;\n    }\n    /**\n     * Function that checks for a parentMarker and sets the correct opacity.\n     * @private\n     * @param {Highcharts.Pack} point\n     * Candidate point for opacity correction.\n     * @param {string} [state]\n     * The point state, can be either `hover`, `select` or 'normal'. If\n     * undefined, normal state is assumed.\n     *\n     * @return {Highcharts.SVGAttributes}\n     * The presentational attributes to be set on the point.\n     */\n    pointAttribs(point, state) {\n        const options = this.options, hasParentMarker = point && point.isParentNode;\n        let markerOptions = options.marker;\n        if (hasParentMarker &&\n            options.layoutAlgorithm &&\n            options.layoutAlgorithm.parentNodeOptions) {\n            markerOptions = options.layoutAlgorithm.parentNodeOptions.marker;\n        }\n        const fillOpacity = markerOptions.fillOpacity, attr = seriesProto.pointAttribs.call(this, point, state);\n        if (fillOpacity !== 1) {\n            attr['fill-opacity'] = fillOpacity;\n        }\n        return attr;\n    }\n    /**\n     * Function that is adding one bubble based on positions and sizes of\n     * two other bubbles, lastBubble is the last added bubble, newOrigin is\n     * the bubble for positioning new bubbles. nextBubble is the currently\n     * added bubble for which we are calculating positions\n     * @private\n     * @param {Array<number>} lastBubble The closest last bubble\n     * @param {Array<number>} newOrigin New bubble\n     * @param {Array<number>} nextBubble The closest next bubble\n     * @return {Array<number>} Bubble with correct positions\n     */\n    positionBubble(lastBubble, newOrigin, nextBubble) {\n        const sqrt = Math.sqrt, asin = Math.asin, acos = Math.acos, pow = Math.pow, abs = Math.abs, distance = sqrt(// Dist between lastBubble and newOrigin\n        pow((lastBubble[0] - newOrigin[0]), 2) +\n            pow((lastBubble[1] - newOrigin[1]), 2)), alfa = acos(\n        // From cosinus theorem: alfa is an angle used for\n        // calculating correct position\n        (pow(distance, 2) +\n            pow(nextBubble[2] + newOrigin[2], 2) -\n            pow(nextBubble[2] + lastBubble[2], 2)) / (2 * (nextBubble[2] + newOrigin[2]) * distance)), beta = asin(// From sinus theorem.\n        abs(lastBubble[0] - newOrigin[0]) /\n            distance), \n        // Providing helping variables, related to angle between\n        // lastBubble and newOrigin\n        gamma = (lastBubble[1] - newOrigin[1]) < 0 ? 0 : Math.PI, \n        // If new origin y is smaller than last bubble y value\n        // (2 and 3 quarter),\n        // add Math.PI to final angle\n        delta = (lastBubble[0] - newOrigin[0]) *\n            (lastBubble[1] - newOrigin[1]) < 0 ?\n            1 : -1, // (1st and 3rd quarter)\n        finalAngle = gamma + alfa + beta * delta, cosA = Math.cos(finalAngle), sinA = Math.sin(finalAngle), posX = newOrigin[0] + (newOrigin[2] + nextBubble[2]) * sinA, \n        // Center of new origin + (radius1 + radius2) * sinus A\n        posY = newOrigin[1] - (newOrigin[2] + nextBubble[2]) * cosA;\n        return [\n            posX,\n            posY,\n            nextBubble[2],\n            nextBubble[3],\n            nextBubble[4]\n        ]; // The same as described before\n    }\n    render() {\n        const dataLabels = [];\n        seriesProto.render.apply(this, arguments);\n        // #10823 - dataLabels should stay visible\n        // when enabled allowOverlap.\n        if (!this.options.dataLabels.allowOverlap) {\n            this.data.forEach((point) => {\n                if (PackedBubbleSeries_isArray(point.dataLabels)) {\n                    point.dataLabels.forEach((dataLabel) => {\n                        dataLabels.push(dataLabel);\n                    });\n                }\n            });\n            // Only hide overlapping dataLabels for layouts that\n            // use simulation. Spiral packedbubble don't need\n            // additional dataLabel hiding on every simulation step\n            if (this.options.useSimulation) {\n                this.chart.hideOverlappingLabels(dataLabels);\n            }\n        }\n    }\n    /**\n     * The function responsible for resizing the bubble radius.\n     * In shortcut: it is taking the initially\n     * calculated positions of bubbles. Then it is calculating the min max\n     * of both dimensions, creating something in shape of bBox.\n     * The comparison of bBox and the size of plotArea\n     * (later it may be also the size set by customer) is giving the\n     * value how to recalculate the radius so it will match the size\n     * @private\n     */\n    resizeRadius() {\n        const chart = this.chart, positions = chart.rawPositions, min = Math.min, max = Math.max, plotLeft = chart.plotLeft, plotTop = chart.plotTop, chartHeight = chart.plotHeight, chartWidth = chart.plotWidth;\n        let minX, maxX, minY, maxY, radius;\n        minX = minY = Number.POSITIVE_INFINITY; // Set initial values\n        maxX = maxY = Number.NEGATIVE_INFINITY;\n        for (const position of positions) {\n            radius = position[2];\n            minX = min(minX, position[0] - radius);\n            // (x center-radius) is the min x value used by specific bubble\n            maxX = max(maxX, position[0] + radius);\n            minY = min(minY, position[1] - radius);\n            maxY = max(maxY, position[1] + radius);\n        }\n        const bBox = [maxX - minX, maxY - minY], spaceRatio = [\n            (chartWidth - plotLeft) / bBox[0],\n            (chartHeight - plotTop) / bBox[1]\n        ], smallerDimension = min.apply([], spaceRatio);\n        if (Math.abs(smallerDimension - 1) > 1e-10) {\n            // If bBox is considered not the same width as possible size\n            for (const position of positions) {\n                position[2] *= smallerDimension;\n            }\n            this.placeBubbles(positions);\n        }\n        else {\n            /** If no radius recalculation is needed, we need to position\n             * the whole bubbles in center of chart plotarea\n             * for this, we are adding two parameters,\n             * diffY and diffX, that are related to differences\n             * between the initial center and the bounding box\n             */\n            chart.diffY = chartHeight / 2 +\n                plotTop - minY - (maxY - minY) / 2;\n            chart.diffX = chartWidth / 2 +\n                plotLeft - minX - (maxX - minX) / 2;\n        }\n    }\n    /**\n     * The function responsible for calculating series bubble' s bBox.\n     * Needed because of exporting failure when useSimulation\n     * is set to false\n     * @private\n     */\n    seriesBox() {\n        const chart = this.chart, data = this.data, max = Math.max, min = Math.min, bBox = [\n            chart.plotLeft,\n            chart.plotLeft + chart.plotWidth,\n            chart.plotTop,\n            chart.plotTop + chart.plotHeight\n        ];\n        let radius;\n        data.forEach((p) => {\n            if (PackedBubbleSeries_defined(p.plotX) &&\n                PackedBubbleSeries_defined(p.plotY) &&\n                p.marker.radius) {\n                radius = p.marker.radius;\n                bBox[0] = min(bBox[0], p.plotX - radius);\n                bBox[1] = max(bBox[1], p.plotX + radius);\n                bBox[2] = min(bBox[2], p.plotY - radius);\n                bBox[3] = max(bBox[3], p.plotY + radius);\n            }\n        });\n        return PackedBubbleSeries_isNumber(bBox.width / bBox.height) ?\n            bBox :\n            null;\n    }\n    /**\n     * Needed because of z-indexing issue if point is added in series.group\n     * @private\n     */\n    setVisible() {\n        const series = this;\n        seriesProto.setVisible.apply(series, arguments);\n        if (series.parentNodeLayout && series.graph) {\n            if (series.visible) {\n                series.graph.show();\n                if (series.parentNode.dataLabel) {\n                    series.parentNode.dataLabel.show();\n                }\n            }\n            else {\n                series.graph.hide();\n                series.parentNodeLayout.removeElementFromCollection(series.parentNode, series.parentNodeLayout.nodes);\n                if (series.parentNode.dataLabel) {\n                    series.parentNode.dataLabel.hide();\n                }\n            }\n        }\n        else if (series.layout) {\n            if (series.visible) {\n                series.layout.addElementsToCollection(series.points, series.layout.nodes);\n            }\n            else {\n                series.points.forEach((node) => {\n                    series.layout.removeElementFromCollection(node, series.layout.nodes);\n                });\n            }\n        }\n    }\n    /**\n     * Extend the base translate method to handle bubble size,\n     * and correct positioning them.\n     * @private\n     */\n    translate() {\n        const chart = this.chart, data = this.data, index = this.index, useSimulation = this.options.useSimulation;\n        let point, radius, positions;\n        this.generatePoints();\n        // Merged data is an array with all of the data from all series\n        if (!PackedBubbleSeries_defined(chart.allDataPoints)) {\n            chart.allDataPoints = this.accumulateAllPoints();\n            // Calculate radius for all added data\n            this.getPointRadius();\n        }\n        // After getting initial radius, calculate bubble positions\n        if (useSimulation) {\n            positions = chart.allDataPoints;\n        }\n        else {\n            positions = this.placeBubbles(chart.allDataPoints);\n            this.options.draggable = false;\n        }\n        // Set the shape and arguments to be picked up in drawPoints\n        for (const position of positions) {\n            if (position[3] === index) {\n                // Update the series points with the val from positions\n                // array\n                point = data[position[4]];\n                radius = PackedBubbleSeries_pick(position[2], void 0);\n                if (!useSimulation) {\n                    point.plotX = (position[0] - chart.plotLeft +\n                        chart.diffX);\n                    point.plotY = (position[1] - chart.plotTop +\n                        chart.diffY);\n                }\n                if (PackedBubbleSeries_isNumber(radius)) {\n                    point.marker = PackedBubbleSeries_extend(point.marker, {\n                        radius,\n                        width: 2 * radius,\n                        height: 2 * radius\n                    });\n                    point.radius = radius;\n                }\n            }\n        }\n        if (useSimulation) {\n            this.deferLayout();\n        }\n        PackedBubbleSeries_fireEvent(this, 'afterTranslate');\n    }\n}\nPackedBubbleSeries.defaultOptions = PackedBubbleSeries_merge(PackedBubbleSeries_BubbleSeries.defaultOptions, PackedBubble_PackedBubbleSeriesDefaults);\nPackedBubbleSeries_extend(PackedBubbleSeries.prototype, {\n    pointClass: PackedBubble_PackedBubblePoint,\n    axisTypes: [],\n    directTouch: true,\n    forces: ['barycenter', 'repulsive'],\n    hasDraggableNodes: true,\n    invertible: false,\n    isCartesian: false,\n    noSharedTooltip: true,\n    pointArrayMap: ['value'],\n    pointValKey: 'value',\n    requireSorting: false,\n    trackerGroups: ['group', 'dataLabelsGroup', 'parentNodesGroup'],\n    initDataLabels: PackedBubbleSeries_initDataLabels,\n    alignDataLabel: seriesProto.alignDataLabel,\n    indexateNodes: PackedBubbleSeries_noop,\n    onMouseDown: Series_DragNodesComposition.onMouseDown,\n    onMouseMove: Series_DragNodesComposition.onMouseMove,\n    redrawHalo: Series_DragNodesComposition.redrawHalo,\n    searchPoint: PackedBubbleSeries_noop // Solving #12287\n});\nhighcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default().registerSeriesType('packedbubble', PackedBubbleSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const PackedBubble_PackedBubbleSeries = (PackedBubbleSeries);\n\n;// ./code/es-modules/Series/Polygon/PolygonSeriesDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  API Options\n *\n * */\n/**\n * A polygon series can be used to draw any freeform shape in the cartesian\n * coordinate system. A fill is applied with the `color` option, and\n * stroke is applied through `lineWidth` and `lineColor` options.\n *\n * @sample {highcharts} highcharts/demo/polygon/\n *         Polygon\n * @sample {highstock} highcharts/demo/polygon/\n *         Polygon\n *\n * @extends      plotOptions.scatter\n * @since        4.1.0\n * @excluding    jitter, softThreshold, threshold, cluster, boostThreshold,\n *               boostBlending\n * @product      highcharts highstock\n * @requires     highcharts-more\n * @optionparent plotOptions.polygon\n */\nconst PolygonSeriesDefaults = {\n    marker: {\n        enabled: false,\n        states: {\n            hover: {\n                enabled: false\n            }\n        }\n    },\n    stickyTracking: false,\n    tooltip: {\n        followPointer: true,\n        pointFormat: ''\n    },\n    trackByArea: true,\n    legendSymbol: 'rectangle'\n};\n/**\n * A `polygon` series. If the [type](#series.polygon.type) option is\n * not specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends   series,plotOptions.polygon\n * @excluding dataParser, dataURL, stack, boostThreshold, boostBlending\n * @product   highcharts highstock\n * @requires  highcharts-more\n * @apioption series.polygon\n */\n/**\n * An array of data points for the series. For the `polygon` series\n * type, points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n *    interpreted as `y` options. The `x` values will be automatically\n *    calculated, either starting at 0 and incremented by 1, or from\n *    `pointStart` and `pointInterval` given in the series options. If the axis\n *    has categories, these will be used. Example:\n *    ```js\n *    data: [0, 5, 3, 5]\n *    ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n *    `x,y`. If the first value is a string, it is applied as the name of the\n *    point, and the `x` value is inferred.\n *    ```js\n *    data: [\n *        [0, 10],\n *        [1, 3],\n *        [2, 1]\n *    ]\n *    ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n *    few settings, see the complete options set below. If the total number of\n *    data points exceeds the series'\n *    [turboThreshold](#series.polygon.turboThreshold), this option is not\n *    available.\n *    ```js\n *    data: [{\n *        x: 1,\n *        y: 1,\n *        name: \"Point2\",\n *        color: \"#00FF00\"\n *    }, {\n *        x: 1,\n *        y: 8,\n *        name: \"Point1\",\n *        color: \"#FF00FF\"\n *    }]\n *    ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n *         Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n *         Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n *         Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n *         Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n *         Config objects\n *\n * @type      {Array<number|Array<(number|string),(number|null)>|null|*>}\n * @extends   series.line.data\n * @product   highcharts highstock\n * @apioption series.polygon.data\n */\n''; // Keeps doclets above separate\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Polygon_PolygonSeriesDefaults = (PolygonSeriesDefaults);\n\n;// ./code/es-modules/Series/Polygon/PolygonSeries.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 { noop: PolygonSeries_noop } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\nconst { area: PolygonSeries_AreaSeries, line: LineSeries, scatter: PolygonSeries_ScatterSeries } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes;\n\nconst { extend: PolygonSeries_extend, merge: PolygonSeries_merge } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Class\n *\n * */\nclass PolygonSeries extends PolygonSeries_ScatterSeries {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    getGraphPath() {\n        const graphPath = LineSeries.prototype.getGraphPath.call(this);\n        let i = graphPath.length + 1;\n        // Close all segments\n        while (i--) {\n            if ((i === graphPath.length || graphPath[i][0] === 'M') && i > 0) {\n                graphPath.splice(i, 0, ['Z']);\n            }\n        }\n        this.areaPath = graphPath;\n        return graphPath;\n    }\n    drawGraph() {\n        // Hack into the fill logic in area.drawGraph\n        this.options.fillColor = this.color;\n        PolygonSeries_AreaSeries.prototype.drawGraph.call(this);\n    }\n}\n/* *\n *\n *  Static Properties\n *\n * */\nPolygonSeries.defaultOptions = PolygonSeries_merge(PolygonSeries_ScatterSeries.defaultOptions, Polygon_PolygonSeriesDefaults);\nPolygonSeries_extend(PolygonSeries.prototype, {\n    type: 'polygon',\n    drawTracker: LineSeries.prototype.drawTracker,\n    setStackedPoints: PolygonSeries_noop // No stacking points on polygons (#5310)\n});\nhighcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default().registerSeriesType('polygon', PolygonSeries);\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Polygon_PolygonSeries = ((/* unused pure expression or super */ null && (PolygonSeries)));\n\n;// ./code/es-modules/Core/Axis/RadialAxisDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  Extension for radial axes\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/**\n     * Circular axis around the perimeter of a polar chart.\n     * @private\n     */\nconst defaultCircularOptions = {\n    gridLineWidth: 1, // Spokes\n    labels: {\n        align: void 0, // Auto\n        x: 0,\n        y: void 0 // Auto\n    },\n    maxPadding: 0,\n    minPadding: 0,\n    showLastLabel: false,\n    tickLength: 0\n};\n/**\n * The default options extend defaultYAxisOptions.\n * @private\n */\nconst defaultRadialGaugeOptions = {\n    endOnTick: false,\n    gridLineWidth: 0,\n    labels: {\n        align: 'center',\n        distance: -25,\n        x: 0,\n        y: void 0 // Auto\n    },\n    lineWidth: 1,\n    minorGridLineWidth: 0,\n    minorTickInterval: 'auto',\n    minorTickLength: 10,\n    minorTickPosition: 'inside',\n    minorTickWidth: 1,\n    startOnTick: false,\n    tickLength: 10,\n    tickPixelInterval: 100,\n    tickPosition: 'inside',\n    tickWidth: 2,\n    title: {\n        rotation: 0,\n        text: ''\n    },\n    zIndex: 2 // Behind dials, points in the series group\n};\n/**\n * Radial axis, like a spoke in a polar chart.\n * @private\n */\nconst defaultRadialOptions = {\n    /**\n     * In a polar chart, this is the angle of the Y axis in degrees, where\n     * 0 is up and 90 is right. The angle determines the position of the\n     * axis line and the labels, though the coordinate system is unaffected.\n     * Since v8.0.0 this option is also applicable for X axis (inverted\n     * polar).\n     *\n     * @sample {highcharts} highcharts/xaxis/angle/\n     *         Custom X axis' angle on inverted polar chart\n     * @sample {highcharts} highcharts/yaxis/angle/\n     *         Dual axis polar chart\n     *\n     * @type      {number}\n     * @default   0\n     * @since     4.2.7\n     * @product   highcharts\n     * @apioption xAxis.angle\n     */\n    /**\n     * Polar charts only. Whether the grid lines should draw as a polygon\n     * with straight lines between categories, or as circles. Can be either\n     * `circle` or `polygon`. Since v8.0.0 this option is also applicable\n     * for X axis (inverted polar).\n     *\n     * @sample {highcharts} highcharts/demo/polar-spider/\n     *         Polygon grid lines\n     * @sample {highcharts} highcharts/xaxis/gridlineinterpolation/\n     *         Circle and polygon on inverted polar\n     * @sample {highcharts} highcharts/yaxis/gridlineinterpolation/\n     *         Circle and polygon\n     *\n     * @type       {string}\n     * @product    highcharts\n     * @validvalue [\"circle\", \"polygon\"]\n     * @apioption  xAxis.gridLineInterpolation\n     */\n    gridLineInterpolation: 'circle',\n    gridLineWidth: 1,\n    labels: {\n        align: 'right',\n        padding: 5,\n        x: -3,\n        y: -2\n    },\n    showLastLabel: false,\n    title: {\n        x: 4,\n        text: null,\n        rotation: 90\n    }\n};\n/* *\n *\n *  Default Export\n *\n * */\nconst RadialAxisDefaults = {\n    circular: defaultCircularOptions,\n    radial: defaultRadialOptions,\n    radialGauge: defaultRadialGaugeOptions\n};\n/* harmony default export */ const Axis_RadialAxisDefaults = (RadialAxisDefaults);\n\n;// ./code/es-modules/Core/Axis/RadialAxis.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { defaultOptions } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { composed: RadialAxis_composed, noop: RadialAxis_noop } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: RadialAxis_addEvent, correctFloat: RadialAxis_correctFloat, defined: RadialAxis_defined, extend: RadialAxis_extend, fireEvent: RadialAxis_fireEvent, isObject, merge: RadialAxis_merge, pick: RadialAxis_pick, pushUnique: RadialAxis_pushUnique, relativeLength: RadialAxis_relativeLength, wrap: RadialAxis_wrap } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Composition\n *\n * */\nvar RadialAxis;\n(function (RadialAxis) {\n    /* *\n     *\n     *  Declarations\n     *\n     * */\n    RadialAxis.radialDefaultOptions = RadialAxis_merge(Axis_RadialAxisDefaults);\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /* eslint-disable valid-jsdoc */\n    /**\n     * In case of auto connect, add one closestPointRange to the max value\n     * right before tickPositions are computed, so that ticks will extend\n     * passed the real max.\n     * @private\n     */\n    function beforeSetTickPositions() {\n        // If autoConnect is true, polygonal grid lines are connected, and\n        // one closestPointRange is added to the X axis to prevent the last\n        // point from overlapping the first.\n        this.autoConnect = (this.isCircular &&\n            typeof RadialAxis_pick(this.userMax, this.options.max) === 'undefined' &&\n            RadialAxis_correctFloat(this.endAngleRad - this.startAngleRad) ===\n                RadialAxis_correctFloat(2 * Math.PI));\n        // This will lead to add an extra tick to xAxis in order to display\n        // a correct range on inverted polar\n        if (!this.isCircular && this.chart.inverted) {\n            this.max++;\n        }\n        if (this.autoConnect) {\n            this.max += ((this.categories && 1) ||\n                this.pointRange ||\n                this.closestPointRange ||\n                0); // #1197, #2260\n        }\n    }\n    /**\n     * Augments methods for the value axis.\n     *\n     * @private\n     *\n     * @param {Highcharts.Axis} AxisClass\n     * Axis class to extend.\n     *\n     * @param {Highcharts.Tick} TickClass\n     * Tick class to use.\n     *\n     * @return {Highcharts.Axis}\n     * Axis composition.\n     */\n    function compose(AxisClass, TickClass) {\n        if (RadialAxis_pushUnique(RadialAxis_composed, 'Axis.Radial')) {\n            RadialAxis_addEvent(AxisClass, 'afterInit', onAxisAfterInit);\n            RadialAxis_addEvent(AxisClass, 'autoLabelAlign', onAxisAutoLabelAlign);\n            RadialAxis_addEvent(AxisClass, 'destroy', onAxisDestroy);\n            RadialAxis_addEvent(AxisClass, 'init', onAxisInit);\n            RadialAxis_addEvent(AxisClass, 'initialAxisTranslation', onAxisInitialAxisTranslation);\n            RadialAxis_addEvent(TickClass, 'afterGetLabelPosition', onTickAfterGetLabelPosition);\n            RadialAxis_addEvent(TickClass, 'afterGetPosition', onTickAfterGetPosition);\n            RadialAxis_addEvent((highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()), 'setOptions', onGlobalSetOptions);\n            RadialAxis_wrap(TickClass.prototype, 'getMarkPath', wrapTickGetMarkPath);\n        }\n        return AxisClass;\n    }\n    RadialAxis.compose = compose;\n    /**\n     * Attach and return collecting function for labels in radial axis for\n     * anti-collision.\n     *\n     * @private\n     */\n    function createLabelCollector() {\n        return () => {\n            if (this.isRadial &&\n                this.tickPositions &&\n                // Undocumented option for now, but working\n                this.options.labels &&\n                this.options.labels.allowOverlap !== true) {\n                return this.tickPositions\n                    .map((pos) => this.ticks[pos] && this.ticks[pos].label)\n                    .filter((label) => Boolean(label));\n            }\n        };\n    }\n    /**\n     * Creates an empty collector function.\n     * @private\n     */\n    function createLabelCollectorHidden() {\n        return RadialAxis_noop;\n    }\n    /**\n     * Find the correct end values of crosshair in polar.\n     * @private\n     */\n    function getCrosshairPosition(options, x1, y1) {\n        const center = this.pane.center;\n        let value = options.value, shapeArgs, end, x2, y2;\n        if (this.isCircular) {\n            if (!RadialAxis_defined(value)) {\n                // When the snap is set to false\n                x2 = options.chartX || 0;\n                y2 = options.chartY || 0;\n                value = this.translate(Math.atan2(y2 - y1, x2 - x1) - this.startAngleRad, true);\n            }\n            else if (options.point) {\n                // When the snap is set to true\n                shapeArgs = options.point.shapeArgs || {};\n                if (shapeArgs.start) {\n                    // Find a true value of the point based on the\n                    // angle\n                    value = this.chart.inverted ?\n                        this.translate(options.point.rectPlotY, true) :\n                        options.point.x;\n                }\n            }\n            end = this.getPosition(value);\n            x2 = end.x;\n            y2 = end.y;\n        }\n        else {\n            if (!RadialAxis_defined(value)) {\n                x2 = options.chartX;\n                y2 = options.chartY;\n            }\n            if (RadialAxis_defined(x2) && RadialAxis_defined(y2)) {\n                // Calculate radius of non-circular axis' crosshair\n                y1 = center[1] + this.chart.plotTop;\n                value = this.translate(Math.min(Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)), center[2] / 2) - center[3] / 2, true);\n            }\n        }\n        return [value, x2 || 0, y2 || 0];\n    }\n    /**\n     * Get the path for the axis line. This method is also referenced in the\n     * getPlotLinePath method.\n     *\n     * @private\n     * @param {number} _lineWidth\n     * Line width is not used.\n     * @param {number} [radius]\n     * Radius of radial path.\n     * @param {number} [innerRadius]\n     * Inner radius of radial path.\n     */\n    function getLinePath(_lineWidth, radius, innerRadius) {\n        const center = this.pane.center, chart = this.chart, left = this.left || 0, top = this.top || 0;\n        let end, r = RadialAxis_pick(radius, center[2] / 2 - this.offset), path;\n        if (typeof innerRadius === 'undefined') {\n            innerRadius = this.horiz ? 0 : this.center && -this.center[3] / 2;\n        }\n        // In case when innerSize of pane is set, it must be included\n        if (innerRadius) {\n            r += innerRadius;\n        }\n        if (this.isCircular || typeof radius !== 'undefined') {\n            path = this.chart.renderer.symbols.arc(left + center[0], top + center[1], r, r, {\n                start: this.startAngleRad,\n                end: this.endAngleRad,\n                open: true,\n                innerR: 0\n            });\n            // Bounds used to position the plotLine label next to the line\n            // (#7117)\n            path.xBounds = [left + center[0]];\n            path.yBounds = [top + center[1] - r];\n        }\n        else {\n            end = this.postTranslate(this.angleRad, r);\n            path = [\n                [\n                    'M',\n                    this.center[0] + chart.plotLeft,\n                    this.center[1] + chart.plotTop\n                ],\n                ['L', end.x, end.y]\n            ];\n        }\n        return path;\n    }\n    /**\n     * Wrap the getOffset method to return zero offset for title or labels\n     * in a radial axis.\n     */\n    function getOffset() {\n        const axisProto = this.constructor.prototype;\n        // Call the Axis prototype method (the method we're in now is on the\n        // instance)\n        axisProto.getOffset.call(this);\n        // Title or label offsets are not counted\n        this.chart.axisOffset[this.side] = 0;\n    }\n    /**\n     * Find the path for plot bands along the radial axis.\n     *\n     * @private\n     */\n    function getPlotBandPath(from, to, options) {\n        const chart = this.chart, radiusToPixels = (radius) => {\n            if (typeof radius === 'string') {\n                let r = parseInt(radius, 10);\n                if (percentRegex.test(radius)) {\n                    r = (r * fullRadius) / 100;\n                }\n                return r;\n            }\n            return radius;\n        }, center = this.center, startAngleRad = this.startAngleRad, fullRadius = center[2] / 2, offset = Math.min(this.offset, 0), left = this.left || 0, top = this.top || 0, percentRegex = /%$/, isCircular = this.isCircular; // X axis in a polar chart\n        let start, end, angle, xOnPerimeter, open, path, outerRadius = RadialAxis_pick(radiusToPixels(options.outerRadius), fullRadius), innerRadius = radiusToPixels(options.innerRadius), thickness = RadialAxis_pick(radiusToPixels(options.thickness), 10);\n        // Polygonal plot bands\n        if (this.options.gridLineInterpolation === 'polygon') {\n            path = this.getPlotLinePath({ value: from }).concat(this.getPlotLinePath({ value: to, reverse: true }));\n            // Circular grid bands\n        }\n        else {\n            // Keep within bounds\n            from = Math.max(from, this.min);\n            to = Math.min(to, this.max);\n            const transFrom = this.translate(from), transTo = this.translate(to);\n            // Plot bands on Y axis (radial axis) - inner and outer\n            // radius depend on to and from\n            if (!isCircular) {\n                outerRadius = transFrom || 0;\n                innerRadius = transTo || 0;\n            }\n            // Handle full circle\n            if (options.shape === 'circle' || !isCircular) {\n                start = -Math.PI / 2;\n                end = Math.PI * 1.5;\n                open = true;\n            }\n            else {\n                start = startAngleRad + (transFrom || 0);\n                end = startAngleRad + (transTo || 0);\n            }\n            outerRadius -= offset; // #5283\n            thickness -= offset; // #5283\n            path = chart.renderer.symbols.arc(left + center[0], top + center[1], outerRadius, outerRadius, {\n                // Math is for reversed yAxis (#3606)\n                start: Math.min(start, end),\n                end: Math.max(start, end),\n                innerR: RadialAxis_pick(innerRadius, outerRadius - thickness),\n                open,\n                borderRadius: options.borderRadius\n            });\n            // Provide positioning boxes for the label (#6406)\n            if (isCircular) {\n                angle = (end + start) / 2;\n                xOnPerimeter = (left +\n                    center[0] +\n                    (center[2] / 2) * Math.cos(angle));\n                path.xBounds = angle > -Math.PI / 2 && angle < Math.PI / 2 ?\n                    // Right hemisphere\n                    [xOnPerimeter, chart.plotWidth] :\n                    // Left hemisphere\n                    [0, xOnPerimeter];\n                path.yBounds = [\n                    top + center[1] + (center[2] / 2) * Math.sin(angle)\n                ];\n                // Shift up or down to get the label clear of the perimeter\n                path.yBounds[0] += ((angle > -Math.PI && angle < 0) ||\n                    (angle > Math.PI)) ? -10 : 10;\n            }\n        }\n        return path;\n    }\n    /**\n     * Find the path for plot lines perpendicular to the radial axis.\n     */\n    function getPlotLinePath(options) {\n        const center = this.pane.center, chart = this.chart, inverted = chart.inverted, reverse = options.reverse, background = this.pane.options.background ?\n            (this.pane.options.background[0] ||\n                this.pane.options.background) :\n            {}, innerRadius = background.innerRadius || '0%', outerRadius = background.outerRadius || '100%', x1 = center[0] + chart.plotLeft, y1 = center[1] + chart.plotTop, height = this.height, isCrosshair = options.isCrosshair, paneInnerR = center[3] / 2;\n        let value = options.value, innerRatio, distance, a, b, otherAxis, xy, tickPositions, crossPos, path;\n        const end = this.getPosition(value);\n        let x2 = end.x, y2 = end.y;\n        // Crosshair logic\n        if (isCrosshair) {\n            // Find crosshair's position and perform destructuring\n            // assignment\n            crossPos = this.getCrosshairPosition(options, x1, y1);\n            value = crossPos[0];\n            x2 = crossPos[1];\n            y2 = crossPos[2];\n        }\n        // Spokes\n        if (this.isCircular) {\n            distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\n            a = (typeof innerRadius === 'string') ?\n                RadialAxis_relativeLength(innerRadius, 1) :\n                (innerRadius / distance);\n            b = (typeof outerRadius === 'string') ?\n                RadialAxis_relativeLength(outerRadius, 1) :\n                (outerRadius / distance);\n            // To ensure that gridlines won't be displayed in area\n            // defined by innerSize in case of custom radiuses of pane's\n            // background\n            if (center && paneInnerR) {\n                innerRatio = paneInnerR / distance;\n                if (a < innerRatio) {\n                    a = innerRatio;\n                }\n                if (b < innerRatio) {\n                    b = innerRatio;\n                }\n            }\n            path = [\n                ['M', x1 + a * (x2 - x1), y1 - a * (y1 - y2)],\n                ['L', x2 - (1 - b) * (x2 - x1), y2 + (1 - b) * (y1 - y2)]\n            ];\n            // Concentric circles\n        }\n        else {\n            // Pick the right values depending if it is grid line or\n            // crosshair\n            value = this.translate(value);\n            // This is required in case when xAxis is non-circular to\n            // prevent grid lines (or crosshairs, if enabled) from\n            // rendering above the center after they supposed to be\n            // displayed below the center point\n            if (value) {\n                if (value < 0 || value > height) {\n                    value = 0;\n                }\n            }\n            if (this.options.gridLineInterpolation === 'circle') {\n                // A value of 0 is in the center, so it won't be\n                // visible, but draw it anyway for update and animation\n                // (#2366)\n                path = this.getLinePath(0, value, paneInnerR);\n                // Concentric polygons\n            }\n            else {\n                path = [];\n                // Find the other axis (a circular one) in the same pane\n                chart[inverted ? 'yAxis' : 'xAxis'].forEach((a) => {\n                    if (a.pane === this.pane) {\n                        otherAxis = a;\n                    }\n                });\n                if (otherAxis) {\n                    tickPositions = otherAxis.tickPositions;\n                    if (otherAxis.autoConnect) {\n                        tickPositions =\n                            tickPositions.concat([tickPositions[0]]);\n                    }\n                    // Reverse the positions for concatenation of polygonal\n                    // plot bands\n                    if (reverse) {\n                        tickPositions = tickPositions.slice().reverse();\n                    }\n                    if (value) {\n                        value += paneInnerR;\n                    }\n                    for (let i = 0; i < tickPositions.length; i++) {\n                        xy = otherAxis.getPosition(tickPositions[i], value);\n                        path.push(i ? ['L', xy.x, xy.y] : ['M', xy.x, xy.y]);\n                    }\n                }\n            }\n        }\n        return path;\n    }\n    /**\n     * Returns the x, y coordinate of a point given by a value and a pixel\n     * distance from center.\n     *\n     * @private\n     * @param {number} value\n     * Point value.\n     * @param {number} [length]\n     * Distance from center.\n     */\n    function getPosition(value, length) {\n        const translatedVal = this.translate(value);\n        return this.postTranslate(this.isCircular ? translatedVal : this.angleRad, // #2848\n        // In case when translatedVal is negative, the 0 value must be\n        // used instead, in order to deal with lines and labels that\n        // fall out of the visible range near the center of a pane\n        RadialAxis_pick(this.isCircular ?\n            length :\n            (translatedVal < 0 ? 0 : translatedVal), this.center[2] / 2) - this.offset);\n    }\n    /**\n     * Find the position for the axis title, by default inside the gauge.\n     */\n    function getTitlePosition() {\n        const center = this.center, chart = this.chart, titleOptions = this.options.title;\n        return {\n            x: chart.plotLeft + center[0] + (titleOptions.x || 0),\n            y: (chart.plotTop +\n                center[1] -\n                ({\n                    high: 0.5,\n                    middle: 0.25,\n                    low: 0\n                }[titleOptions.align] *\n                    center[2]) +\n                (titleOptions.y || 0))\n        };\n    }\n    /**\n     * Modify radial axis.\n     * @private\n     *\n     * @param {Highcharts.Axis} radialAxis\n     * Radial axis to modify.\n     */\n    function modify(axis) {\n        axis.beforeSetTickPositions = beforeSetTickPositions;\n        axis.createLabelCollector = createLabelCollector;\n        axis.getCrosshairPosition = getCrosshairPosition;\n        axis.getLinePath = getLinePath;\n        axis.getOffset = getOffset;\n        axis.getPlotBandPath = getPlotBandPath;\n        axis.getPlotLinePath = getPlotLinePath;\n        axis.getPosition = getPosition;\n        axis.getTitlePosition = getTitlePosition;\n        axis.postTranslate = postTranslate;\n        axis.setAxisSize = setAxisSize;\n        axis.setAxisTranslation = setAxisTranslation;\n        axis.setOptions = setOptions;\n    }\n    /**\n     * Modify radial axis as hidden.\n     * @private\n     *\n     * @param {Highcharts.Axis} radialAxis\n     * Radial axis to modify.\n     */\n    function modifyAsHidden(radialAxis) {\n        radialAxis.isHidden = true;\n        radialAxis.createLabelCollector = createLabelCollectorHidden;\n        radialAxis.getOffset = RadialAxis_noop;\n        radialAxis.redraw = renderHidden;\n        radialAxis.render = renderHidden;\n        radialAxis.setScale = RadialAxis_noop;\n        radialAxis.setCategories = RadialAxis_noop;\n        radialAxis.setTitle = RadialAxis_noop;\n    }\n    /**\n     * Finalize modification of axis instance with radial logic.\n     */\n    function onAxisAfterInit() {\n        const chart = this.chart, options = this.options, isHidden = chart.angular && this.isXAxis, pane = this.pane, paneOptions = pane && pane.options;\n        if (!isHidden && pane && (chart.angular || chart.polar)) {\n            const fullCircle = Math.PI * 2, \n            // Start and end angle options are given in degrees relative to\n            // top, while internal computations are in radians relative to\n            // right (like SVG).\n            start = (RadialAxis_pick(paneOptions.startAngle, 0) - 90) * Math.PI / 180, end = (RadialAxis_pick(paneOptions.endAngle, RadialAxis_pick(paneOptions.startAngle, 0) + 360) - 90) * Math.PI / 180;\n            // Y axis in polar charts\n            this.angleRad = (options.angle || 0) * Math.PI / 180;\n            // Gauges\n            this.startAngleRad = start;\n            this.endAngleRad = end;\n            this.offset = options.offset || 0;\n            // Normalize Start and End to <0, 2*PI> range\n            // (in degrees: <0,360>)\n            let normalizedStart = (start % fullCircle + fullCircle) %\n                fullCircle, normalizedEnd = (end % fullCircle + fullCircle) % fullCircle;\n            // Move normalized angles to <-PI, PI> range (<-180, 180>)\n            // to match values returned by Math.atan2()\n            if (normalizedStart > Math.PI) {\n                normalizedStart -= fullCircle;\n            }\n            if (normalizedEnd > Math.PI) {\n                normalizedEnd -= fullCircle;\n            }\n            this.normalizedStartAngleRad = normalizedStart;\n            this.normalizedEndAngleRad = normalizedEnd;\n        }\n    }\n    /**\n     * Wrap auto label align to avoid setting axis-wide rotation on radial axes.\n     * (#4920)\n     */\n    function onAxisAutoLabelAlign(e) {\n        if (this.isRadial) {\n            e.align = void 0;\n            e.preventDefault();\n        }\n    }\n    /**\n     * Remove label collector function on axis remove/update.\n     */\n    function onAxisDestroy() {\n        if (this.chart &&\n            this.chart.labelCollectors) {\n            const index = (this.labelCollector ?\n                this.chart.labelCollectors.indexOf(this.labelCollector) :\n                -1);\n            if (index >= 0) {\n                this.chart.labelCollectors.splice(index, 1);\n            }\n        }\n    }\n    /**\n     * Modify axis instance with radial logic before common axis init.\n     */\n    function onAxisInit(e) {\n        const chart = this.chart, angular = chart.angular, polar = chart.polar, isX = this.isXAxis, coll = this.coll, isHidden = angular && isX, paneIndex = e.userOptions.pane || 0, pane = this.pane = chart.pane && chart.pane[paneIndex];\n        let isCircular;\n        // Prevent changes for colorAxis\n        if (coll === 'colorAxis') {\n            this.isRadial = false;\n            return;\n        }\n        // Before prototype.init\n        if (angular) {\n            if (isHidden) {\n                modifyAsHidden(this);\n            }\n            else {\n                modify(this);\n            }\n            isCircular = !isX;\n        }\n        else if (polar) {\n            modify(this);\n            // Check which axis is circular\n            isCircular = this.horiz;\n        }\n        // Disable certain features on angular and polar axes\n        if (angular || polar) {\n            this.isRadial = true;\n            if (!this.labelCollector) {\n                this.labelCollector = this.createLabelCollector();\n            }\n            if (this.labelCollector) {\n                // Prevent overlapping axis labels (#9761)\n                chart.labelCollectors.push(this.labelCollector);\n            }\n        }\n        else {\n            this.isRadial = false;\n        }\n        // A pointer back to this axis to borrow geometry\n        if (pane && isCircular) {\n            pane.axis = this;\n        }\n        this.isCircular = isCircular;\n    }\n    /**\n     * Prepare axis translation.\n     */\n    function onAxisInitialAxisTranslation() {\n        if (this.isRadial) {\n            this.beforeSetTickPositions();\n        }\n    }\n    /**\n     * Find the center position of the label based on the distance option.\n     */\n    function onTickAfterGetLabelPosition(e) {\n        const label = this.label;\n        if (!label) {\n            return;\n        }\n        const axis = this.axis, labelBBox = label.getBBox(), labelOptions = axis.options.labels, angle = ((axis.translate(this.pos) + axis.startAngleRad +\n            Math.PI / 2) / Math.PI * 180) % 360, correctAngle = Math.round(angle), labelYPosCorrection = !RadialAxis_defined(labelOptions.y) ? -labelBBox.height * 0.3 : 0;\n        let optionsY = labelOptions.y, ret, centerSlot = 20, // 20 degrees to each side at the top and bottom\n        align = labelOptions.align, labelDir = 'end', // Direction of the label 'start' or 'end'\n        reducedAngle1 = correctAngle < 0 ?\n            correctAngle + 360 : correctAngle, reducedAngle2 = reducedAngle1, translateY = 0, translateX = 0;\n        if (axis.isRadial) { // Both X and Y axes in a polar chart\n            ret = axis.getPosition(this.pos, (axis.center[2] / 2) +\n                RadialAxis_relativeLength(RadialAxis_pick(labelOptions.distance, -25), axis.center[2] / 2, -axis.center[2] / 2));\n            // Automatically rotated\n            if (labelOptions.rotation === 'auto') {\n                label.attr({\n                    rotation: angle\n                });\n                // Vertically centered\n            }\n            else if (!RadialAxis_defined(optionsY)) {\n                optionsY = (axis.chart.renderer.fontMetrics(label).b -\n                    labelBBox.height / 2);\n            }\n            // Automatic alignment\n            if (!RadialAxis_defined(align)) {\n                if (axis.isCircular) { // Y axis\n                    if (labelBBox.width >\n                        axis.len * axis.tickInterval / (axis.max - axis.min)) { // #3506\n                        centerSlot = 0;\n                    }\n                    if (angle > centerSlot && angle < 180 - centerSlot) {\n                        align = 'left'; // Right hemisphere\n                    }\n                    else if (angle > 180 + centerSlot &&\n                        angle < 360 - centerSlot) {\n                        align = 'right'; // Left hemisphere\n                    }\n                    else {\n                        align = 'center'; // Top or bottom\n                    }\n                }\n                else {\n                    align = 'center';\n                }\n                label.attr({\n                    align: align\n                });\n            }\n            // Auto alignment for solid-gauges with two labels (#10635)\n            if (align === 'auto' &&\n                axis.tickPositions.length === 2 &&\n                axis.isCircular) {\n                // Angles reduced to 0 - 90 or 180 - 270\n                if (reducedAngle1 > 90 && reducedAngle1 < 180) {\n                    reducedAngle1 = 180 - reducedAngle1;\n                }\n                else if (reducedAngle1 > 270 && reducedAngle1 <= 360) {\n                    reducedAngle1 = 540 - reducedAngle1;\n                }\n                // Angles reduced to 0 - 180\n                if (reducedAngle2 > 180 && reducedAngle2 <= 360) {\n                    reducedAngle2 = 360 - reducedAngle2;\n                }\n                if ((axis.pane.options.startAngle === correctAngle) ||\n                    (axis.pane.options.startAngle === correctAngle + 360) ||\n                    (axis.pane.options.startAngle === correctAngle - 360)) {\n                    labelDir = 'start';\n                }\n                if ((correctAngle >= -90 && correctAngle <= 90) ||\n                    (correctAngle >= -360 && correctAngle <= -270) ||\n                    (correctAngle >= 270 && correctAngle <= 360)) {\n                    align = (labelDir === 'start') ? 'right' : 'left';\n                }\n                else {\n                    align = (labelDir === 'start') ? 'left' : 'right';\n                }\n                // For angles between (90 + n * 180) +- 20\n                if (reducedAngle2 > 70 && reducedAngle2 < 110) {\n                    align = 'center';\n                }\n                // Auto Y translation\n                if (reducedAngle1 < 15 ||\n                    (reducedAngle1 >= 180 && reducedAngle1 < 195)) {\n                    translateY = labelBBox.height * 0.3;\n                }\n                else if (reducedAngle1 >= 15 && reducedAngle1 <= 35) {\n                    translateY = labelDir === 'start' ?\n                        0 : labelBBox.height * 0.75;\n                }\n                else if (reducedAngle1 >= 195 && reducedAngle1 <= 215) {\n                    translateY = labelDir === 'start' ?\n                        labelBBox.height * 0.75 : 0;\n                }\n                else if (reducedAngle1 > 35 && reducedAngle1 <= 90) {\n                    translateY = labelDir === 'start' ?\n                        -labelBBox.height * 0.25 : labelBBox.height;\n                }\n                else if (reducedAngle1 > 215 && reducedAngle1 <= 270) {\n                    translateY = labelDir === 'start' ?\n                        labelBBox.height : -labelBBox.height * 0.25;\n                }\n                // Auto X translation\n                if (reducedAngle2 < 15) {\n                    translateX = labelDir === 'start' ?\n                        -labelBBox.height * 0.15 : labelBBox.height * 0.15;\n                }\n                else if (reducedAngle2 > 165 && reducedAngle2 <= 180) {\n                    translateX = labelDir === 'start' ?\n                        labelBBox.height * 0.15 : -labelBBox.height * 0.15;\n                }\n                label.attr({ align: align });\n                label.translate(translateX, translateY + labelYPosCorrection);\n            }\n            e.pos.x = ret.x + (labelOptions.x || 0);\n            e.pos.y = ret.y + (optionsY || 0);\n        }\n    }\n    /**\n     * Add special cases within the Tick class' methods for radial axes.\n     */\n    function onTickAfterGetPosition(e) {\n        if (this.axis.getPosition) {\n            RadialAxis_extend(e.pos, this.axis.getPosition(this.pos));\n        }\n    }\n    /**\n     * Update default options for radial axes from setOptions method.\n     */\n    function onGlobalSetOptions({ options }) {\n        if (options.xAxis) {\n            RadialAxis_merge(true, RadialAxis.radialDefaultOptions.circular, options.xAxis);\n        }\n        if (options.yAxis) {\n            RadialAxis_merge(true, RadialAxis.radialDefaultOptions.radialGauge, options.yAxis);\n        }\n    }\n    /**\n     * Translate from intermediate plotX (angle), plotY (axis.len - radius)\n     * to final chart coordinates.\n     *\n     * @private\n     * @param {number} angle\n     * Translation angle.\n     * @param {number} radius\n     * Translation radius.\n     */\n    function postTranslate(angle, radius) {\n        const chart = this.chart, center = this.center;\n        angle = this.startAngleRad + angle;\n        return {\n            x: chart.plotLeft + center[0] + Math.cos(angle) * radius,\n            y: chart.plotTop + center[1] + Math.sin(angle) * radius\n        };\n    }\n    /**\n     * Prevent setting Y axis dirty.\n     */\n    function renderHidden() {\n        this.isDirty = false;\n    }\n    /**\n     * Override the setAxisSize method to use the arc's circumference as\n     * length. This allows tickPixelInterval to apply to pixel lengths along\n     * the perimeter.\n     * @private\n     */\n    function setAxisSize() {\n        const axisProto = this.constructor.prototype;\n        let center, start;\n        axisProto.setAxisSize.call(this);\n        if (this.isRadial) {\n            // Set the center array\n            this.pane.updateCenter(this);\n            // In case when the innerSize is set in a polar chart, the axis'\n            // center cannot be a reference to pane's center\n            center = this.center = this.pane.center.slice();\n            // The sector is used in Axis.translate to compute the\n            // translation of reversed axis points (#2570)\n            if (this.isCircular) {\n                this.sector = this.endAngleRad - this.startAngleRad;\n            }\n            else {\n                // When the pane's startAngle or the axis' angle is set then\n                // new x and y values for vertical axis' center must be\n                // calculated\n                start = this.postTranslate(this.angleRad, center[3] / 2);\n                center[0] = start.x - this.chart.plotLeft;\n                center[1] = start.y - this.chart.plotTop;\n            }\n            // Axis len is used to lay out the ticks\n            this.len = this.width = this.height =\n                (center[2] - center[3]) * RadialAxis_pick(this.sector, 1) / 2;\n        }\n    }\n    /**\n     * Override setAxisTranslation by setting the translation to the\n     * difference in rotation. This allows the translate method to return\n     * angle for any given value.\n     *\n     * @private\n     */\n    function setAxisTranslation() {\n        const axisProto = this.constructor.prototype;\n        // Call uber method\n        axisProto.setAxisTranslation.call(this);\n        // Set transA and minPixelPadding\n        if (this.center) { // It's not defined the first time\n            if (this.isCircular) {\n                this.transA = (this.endAngleRad - this.startAngleRad) /\n                    ((this.max - this.min) || 1);\n            }\n            else {\n                // The transA here is the length of the axis, so in case\n                // of inner radius, the length must be decreased by it\n                this.transA = ((this.center[2] - this.center[3]) / 2) /\n                    ((this.max - this.min) || 1);\n            }\n            if (this.isXAxis) {\n                this.minPixelPadding = this.transA * this.minPointOffset;\n            }\n            else {\n                // This is a workaround for regression #2593, but categories\n                // still don't position correctly.\n                this.minPixelPadding = 0;\n            }\n        }\n    }\n    /**\n     * Merge and set options.\n     */\n    function setOptions(userOptions) {\n        const { coll } = this;\n        const { angular, inverted, polar } = this.chart;\n        let defaultPolarOptions = {};\n        if (angular) {\n            if (!this.isXAxis) {\n                defaultPolarOptions = RadialAxis_merge(defaultOptions.yAxis, RadialAxis.radialDefaultOptions.radialGauge);\n            }\n        }\n        else if (polar) {\n            defaultPolarOptions = this.horiz ?\n                RadialAxis_merge(defaultOptions.xAxis, RadialAxis.radialDefaultOptions.circular) :\n                RadialAxis_merge(coll === 'xAxis' ?\n                    defaultOptions.xAxis :\n                    defaultOptions.yAxis, RadialAxis.radialDefaultOptions.radial);\n        }\n        if (inverted && coll === 'yAxis') {\n            defaultPolarOptions.stackLabels = isObject(defaultOptions.yAxis, true) ? defaultOptions.yAxis.stackLabels : {};\n            defaultPolarOptions.reversedStacks = true;\n        }\n        const options = this.options = RadialAxis_merge(defaultPolarOptions, userOptions);\n        // Make sure the plotBands array is instantiated for each Axis\n        // (#2649)\n        if (!options.plotBands) {\n            options.plotBands = [];\n        }\n        RadialAxis_fireEvent(this, 'afterSetOptions');\n    }\n    /**\n     * Wrap the getMarkPath function to return the path of the radial marker.\n     */\n    function wrapTickGetMarkPath(proceed, x, y, tickLength, tickWidth, horiz, renderer) {\n        const axis = this.axis;\n        let endPoint, ret;\n        if (axis.isRadial) {\n            endPoint = axis.getPosition(this.pos, axis.center[2] / 2 + tickLength);\n            ret = [\n                'M',\n                x,\n                y,\n                'L',\n                endPoint.x,\n                endPoint.y\n            ];\n        }\n        else {\n            ret = proceed.call(this, x, y, tickLength, tickWidth, horiz, renderer);\n        }\n        return ret;\n    }\n    /* eslint-enable valid-jsdoc */\n})(RadialAxis || (RadialAxis = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Axis_RadialAxis = (RadialAxis);\n\n;// ./code/es-modules/Series/PolarComposition.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 { animObject: PolarComposition_animObject } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { composed: PolarComposition_composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\n\nconst { addEvent: PolarComposition_addEvent, defined: PolarComposition_defined, find, isNumber: PolarComposition_isNumber, merge: PolarComposition_merge, pick: PolarComposition_pick, pushUnique: PolarComposition_pushUnique, relativeLength: PolarComposition_relativeLength, splat: PolarComposition_splat, uniqueKey: PolarComposition_uniqueKey, wrap: PolarComposition_wrap } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Functions\n *\n * */\n/**\n * @private\n */\nfunction clipCircle(renderer, x, y, r, innerR) {\n    const id = PolarComposition_uniqueKey(), clipPath = renderer.createElement('clipPath').attr({\n        id: id\n    }).add(renderer.defs), wrapper = innerR ?\n        renderer.arc(x, y, r, innerR, 0, 2 * Math.PI).add(clipPath) :\n        renderer.circle(x, y, r).add(clipPath);\n    wrapper.id = id;\n    wrapper.clipPath = clipPath;\n    return wrapper;\n}\n/**\n * Find correct align and vertical align based on an angle in polar chart\n * @private\n */\nfunction findAlignments(angle, options) {\n    let align, verticalAlign;\n    if (options.align === null) {\n        if (angle > 20 && angle < 160) {\n            align = 'left'; // Right hemisphere\n        }\n        else if (angle > 200 && angle < 340) {\n            align = 'right'; // Left hemisphere\n        }\n        else {\n            align = 'center'; // Top or bottom\n        }\n        options.align = align;\n    }\n    if (options.verticalAlign === null) {\n        if (angle < 45 || angle > 315) {\n            verticalAlign = 'bottom'; // Top part\n        }\n        else if (angle > 135 && angle < 225) {\n            verticalAlign = 'top'; // Bottom part\n        }\n        else {\n            verticalAlign = 'middle'; // Left or right\n        }\n        options.verticalAlign = verticalAlign;\n    }\n    return options;\n}\n/**\n * #6212 Calculate connectors for spline series in polar chart.\n * @private\n * @param {boolean} calculateNeighbours\n *        Check if connectors should be calculated for neighbour points as\n *        well allows short recurrence\n */\nfunction getConnectors(segment, index, calculateNeighbours, connectEnds) {\n    const smoothing = 1.5, denom = smoothing + 1, addedNumber = connectEnds ? 1 : 0;\n    let i, leftContX, leftContY, rightContX, rightContY, jointAngle;\n    // Calculate final index of points depending on the initial index value.\n    // Because of calculating neighbours, index may be outside segment\n    // array.\n    if (index >= 0 && index <= segment.length - 1) {\n        i = index;\n    }\n    else if (index < 0) {\n        i = segment.length - 1 + index;\n    }\n    else {\n        i = 0;\n    }\n    // 1 means control points midway between points, 2 means 1/3 from\n    // the point, 3 is 1/4 etc;\n    const prevPointInd = ((i - 1 < 0) ? segment.length - (1 + addedNumber) : i - 1), nextPointInd = (i + 1 > segment.length - 1) ? addedNumber : i + 1, previousPoint = segment[prevPointInd], nextPoint = segment[nextPointInd], previousX = previousPoint.plotX, previousY = previousPoint.plotY, nextX = nextPoint.plotX, nextY = nextPoint.plotY, plotX = segment[i].plotX, // Actual point\n    plotY = segment[i].plotY;\n    leftContX = (smoothing * plotX + previousX) / denom;\n    leftContY = (smoothing * plotY + previousY) / denom;\n    rightContX = (smoothing * plotX + nextX) / denom;\n    rightContY = (smoothing * plotY + nextY) / denom;\n    // Distance left control point\n    const dLControlPoint = Math.sqrt(Math.pow(leftContX - plotX, 2) + Math.pow(leftContY - plotY, 2)), dRControlPoint = Math.sqrt(Math.pow(rightContX - plotX, 2) + Math.pow(rightContY - plotY, 2)), leftContAngle = Math.atan2(leftContY - plotY, leftContX - plotX), rightContAngle = Math.atan2(rightContY - plotY, rightContX - plotX);\n    jointAngle = (Math.PI / 2) + ((leftContAngle + rightContAngle) / 2);\n    // Ensure the right direction, jointAngle should be in the same quadrant\n    // as leftContAngle\n    if (Math.abs(leftContAngle - jointAngle) > Math.PI / 2) {\n        jointAngle -= Math.PI;\n    }\n    // Find the corrected control points for a spline straight through the\n    // point\n    leftContX = plotX + Math.cos(jointAngle) * dLControlPoint;\n    leftContY = plotY + Math.sin(jointAngle) * dLControlPoint;\n    rightContX = plotX + Math.cos(Math.PI + jointAngle) * dRControlPoint;\n    rightContY = plotY + Math.sin(Math.PI + jointAngle) * dRControlPoint;\n    // Push current point's connectors into returned object\n    const ret = {\n        rightContX: rightContX,\n        rightContY: rightContY,\n        leftContX: leftContX,\n        leftContY: leftContY,\n        plotX: plotX,\n        plotY: plotY\n    };\n    // Calculate connectors for previous and next point and push them inside\n    // returned object\n    if (calculateNeighbours) {\n        ret.prevPointCont = getConnectors(segment, prevPointInd, false, connectEnds);\n    }\n    return ret;\n}\n/**\n *\n */\nfunction onChartAfterDrawChartBox() {\n    (this.pane || []).forEach((pane) => {\n        pane.render();\n    });\n}\n/**\n * If polar has polygonal grid lines, force start and endOnTick on radial axis\n * @private\n */\nfunction onChartAfterInit(event) {\n    const xAxis = event.args[0].xAxis, yAxis = event.args[0].yAxis, chart = event.args[0].chart;\n    if (xAxis && yAxis) {\n        if (yAxis.gridLineInterpolation === 'polygon') {\n            xAxis.startOnTick = true;\n            xAxis.endOnTick = true;\n        }\n        else if (xAxis.gridLineInterpolation === 'polygon' &&\n            chart.inverted) {\n            yAxis.startOnTick = true;\n            yAxis.endOnTick = true;\n        }\n    }\n}\n/**\n *\n */\nfunction onChartCreateAxes() {\n    if (!this.pane) {\n        this.pane = [];\n    }\n    this.options.pane = PolarComposition_splat(this.options.pane || {});\n    this.options.pane.forEach((paneOptions) => {\n        new Pane_Pane(// eslint-disable-line no-new\n        paneOptions, this);\n    }, this);\n}\n/**\n * Get selection dimensions\n * @private\n */\nfunction onPointerGetSelectionBox(event) {\n    const marker = event.args.marker, xAxis = this.chart.xAxis[0], yAxis = this.chart.yAxis[0], inverted = this.chart.inverted, radialAxis = inverted ? yAxis : xAxis, linearAxis = inverted ? xAxis : yAxis;\n    if (this.chart.polar) {\n        event.preventDefault();\n        const start = (marker.attr ? marker.attr('start') : marker.start) - radialAxis.startAngleRad, r = (marker.attr ? marker.attr('r') : marker.r), end = (marker.attr ? marker.attr('end') : marker.end) - radialAxis.startAngleRad, innerR = (marker.attr ? marker.attr('innerR') : marker.innerR);\n        event.result.x = start + radialAxis.pos;\n        event.result.width = end - start;\n        // `innerR` goes from pane's center but `toValue` computes values from\n        // top\n        event.result.y = linearAxis.len + linearAxis.pos - r;\n        event.result.height = r - innerR;\n    }\n}\n/**\n * Get attrs for Polar selection marker\n * @private\n */\nfunction onPointerGetSelectionMarkerAttrs(event) {\n    const chart = this.chart;\n    if (chart.polar && chart.hoverPane && chart.hoverPane.axis) {\n        event.preventDefault();\n        const center = chart.hoverPane.center, mouseDownX = chart.mouseDownX || 0, mouseDownY = chart.mouseDownY || 0, chartY = event.args.chartY, chartX = event.args.chartX, fullCircle = Math.PI * 2, startAngleRad = chart.hoverPane.axis.startAngleRad, endAngleRad = chart.hoverPane.axis.endAngleRad, linearAxis = chart.inverted ? chart.xAxis[0] : chart.yAxis[0], attrs = {};\n        let shapeType = 'arc';\n        attrs.x = center[0] + chart.plotLeft;\n        attrs.y = center[1] + chart.plotTop;\n        // Adjust the width of the selection marker\n        if (this.zoomHor) {\n            const paneRadRange = startAngleRad > 0 ?\n                endAngleRad - startAngleRad :\n                Math.abs(startAngleRad) + Math.abs(endAngleRad);\n            let startAngle = Math.atan2(mouseDownY - chart.plotTop - center[1], mouseDownX - chart.plotLeft - center[0]) - startAngleRad, endAngle = Math.atan2(chartY - chart.plotTop - center[1], chartX - chart.plotLeft - center[0]) - startAngleRad;\n            attrs.r = center[2] / 2;\n            attrs.innerR = center[3] / 2;\n            if (startAngle <= 0) {\n                startAngle += fullCircle;\n            }\n            if (endAngle <= 0) {\n                endAngle += fullCircle;\n            }\n            if (endAngle < startAngle) {\n                // Swapping angles\n                endAngle = [startAngle, startAngle = endAngle][0];\n            }\n            // If pane is not a full circle we need to let users zoom to the min\n            // We do this by swapping angles after pointer crosses\n            // middle angle (swapAngle) of the missing slice of the pane\n            if (paneRadRange < fullCircle) {\n                const swapAngle = endAngleRad + (fullCircle - paneRadRange) / 2;\n                if (startAngleRad + endAngle > swapAngle) {\n                    endAngle = startAngle;\n                    startAngle = startAngleRad <= 0 ? startAngleRad : 0;\n                }\n            }\n            const start = attrs.start =\n                Math.max(startAngle + startAngleRad, startAngleRad), end = attrs.end =\n                Math.min(endAngle + startAngleRad, endAngleRad);\n            // Adjust the selection shape for polygon grid lines\n            if (linearAxis.options.gridLineInterpolation === 'polygon') {\n                const radialAxis = chart.hoverPane.axis, min = start - radialAxis.startAngleRad + radialAxis.pos, max = end - start;\n                let path = linearAxis.getPlotLinePath({\n                    value: linearAxis.max\n                }), pathStart = radialAxis.toValue(min), pathEnd = radialAxis.toValue(min + max);\n                if (pathStart < radialAxis.getExtremes().min) {\n                    const { min, max } = radialAxis.getExtremes();\n                    pathStart = max - (min - pathStart);\n                }\n                if (pathEnd < radialAxis.getExtremes().min) {\n                    const { min, max } = radialAxis.getExtremes();\n                    pathEnd = max - (min - pathEnd);\n                }\n                if (pathEnd < pathStart) {\n                    // Swapping angles\n                    pathEnd = [pathStart, pathStart = pathEnd][0];\n                }\n                // Get trimmed path\n                path = trimPath(path, pathStart, pathEnd, radialAxis);\n                // Add center to the path\n                path.push([\n                    'L', center[0] + chart.plotLeft,\n                    chart.plotTop + center[1]\n                ]);\n                attrs.d = path;\n                shapeType = 'path';\n            }\n        }\n        // Adjust the height of the selection marker\n        if (this.zoomVert) {\n            const linearAxis = chart.inverted ? chart.xAxis[0] : chart.yAxis[0];\n            let innerR = Math.sqrt(Math.pow(mouseDownX - chart.plotLeft - center[0], 2) +\n                Math.pow(mouseDownY - chart.plotTop - center[1], 2)), r = Math.sqrt(Math.pow(chartX - chart.plotLeft - center[0], 2) +\n                Math.pow(chartY - chart.plotTop - center[1], 2));\n            if (r < innerR) {\n                // Swapping angles\n                innerR = [r, r = innerR][0];\n            }\n            if (r > center[2] / 2) {\n                r = center[2] / 2;\n            }\n            if (innerR < center[3] / 2) {\n                innerR = center[3] / 2;\n            }\n            if (!this.zoomHor) {\n                attrs.start = startAngleRad;\n                attrs.end = endAngleRad;\n            }\n            attrs.r = r;\n            attrs.innerR = innerR;\n            if (linearAxis.options.gridLineInterpolation === 'polygon') {\n                const end = linearAxis.toValue(linearAxis.len + linearAxis.pos - innerR), start = linearAxis.toValue(linearAxis.len + linearAxis.pos - r), path = linearAxis.getPlotLinePath({\n                    value: start\n                }).concat(linearAxis.getPlotLinePath({\n                    value: end,\n                    reverse: true\n                }));\n                attrs.d = path;\n                shapeType = 'path';\n            }\n        }\n        if (this.zoomHor &&\n            this.zoomVert &&\n            linearAxis.options.gridLineInterpolation === 'polygon') {\n            const radialAxis = chart.hoverPane.axis, start = attrs.start || 0, end = attrs.end || 0, min = start - radialAxis.startAngleRad + radialAxis.pos, max = end - start, pathStart = radialAxis.toValue(min), pathEnd = radialAxis.toValue(min + max);\n            // Trim path\n            if (attrs.d instanceof Array) {\n                let innerPath = attrs.d.slice(0, attrs.d.length / 2), outerPath = attrs.d.slice(attrs.d.length / 2, attrs.d.length);\n                outerPath = [...outerPath].reverse();\n                const radialAxis = chart.hoverPane.axis;\n                innerPath = trimPath(innerPath, pathStart, pathEnd, radialAxis);\n                outerPath = trimPath(outerPath, pathStart, pathEnd, radialAxis);\n                if (outerPath) {\n                    (outerPath[0][0]) = 'L';\n                }\n                outerPath = [...outerPath].reverse();\n                attrs.d = innerPath.concat(outerPath);\n                shapeType = 'path';\n            }\n        }\n        event.attrs = attrs;\n        event.shapeType = shapeType;\n    }\n}\n/**\n * @private\n */\nfunction onSeriesAfterInit() {\n    const chart = this.chart;\n    if (chart.polar) {\n        this.polar = new PolarAdditions(this);\n        // Add flags that identifies radial inverted series\n        if (chart.inverted) {\n            this.isRadialSeries = true;\n            if (this.is('column')) {\n                this.isRadialBar = true;\n            }\n        }\n    }\n}\n/**\n * Extend translate. The plotX and plotY values are computed as if the polar\n * chart were a cartesian plane, where plotX denotes the angle in radians\n * and (yAxis.len - plotY) is the pixel distance from center.\n * @private\n */\nfunction onSeriesAfterTranslate() {\n    if (this.chart.polar && this.xAxis) {\n        const series = this, { xAxis, yAxis } = series, chart = series.chart;\n        // Prepare k-d-tree handling. It searches by angle (clientX) in\n        // case of shared tooltip, and by two dimensional distance in case\n        // of non-shared.\n        series.kdByAngle = chart.tooltip && chart.tooltip.shared;\n        if (series.kdByAngle || chart.inverted) {\n            series.searchPoint = searchPointByAngleOrInverted;\n        }\n        else {\n            series.options.findNearestPointBy = 'xy';\n        }\n        const points = series.points;\n        let i = points.length;\n        while (i--) {\n            // Translate plotX, plotY from angle and radius to true plot\n            // coordinates\n            if (!series.is('column') && !series.is('columnrange')) {\n                series.polar.toXY(points[i]);\n            }\n            // Treat points below Y axis min as null (#10082)\n            if (!chart.hasParallelCoordinates &&\n                !series.yAxis.reversed) {\n                if (PolarComposition_pick(points[i].y, Number.MIN_VALUE) < yAxis.min ||\n                    points[i].x < xAxis.min ||\n                    points[i].x > xAxis.max) {\n                    // Destroy markers\n                    points[i].isNull = true;\n                    // Destroy column's graphic\n                    points[i].plotY = NaN;\n                }\n                else {\n                    // Restore isNull flag\n                    points[i].isNull =\n                        points[i].isValid && !points[i].isValid();\n                }\n            }\n        }\n        // Perform clip after render\n        if (!this.hasClipCircleSetter) {\n            this.hasClipCircleSetter = !!series.eventsToUnbind.push(PolarComposition_addEvent(series, 'afterRender', function () {\n                let circ;\n                if (chart.polar && this.options.clip !== false) {\n                    // For clipping purposes there is a need for\n                    // coordinates from the absolute center\n                    circ = this.yAxis.pane.center;\n                    if (!this.clipCircle) {\n                        this.clipCircle = clipCircle(chart.renderer, circ[0], circ[1], circ[2] / 2, circ[3] / 2);\n                    }\n                    else {\n                        this.clipCircle.animate({\n                            x: circ[0],\n                            y: circ[1],\n                            r: circ[2] / 2,\n                            innerR: circ[3] / 2\n                        });\n                    }\n                    this.group.clip(this.clipCircle);\n                    this.setClip = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).noop;\n                }\n            }));\n        }\n    }\n}\n/**\n * Search a k-d tree by the point angle (used for shared tooltips in polar) or\n * the inverted point.\n * charts\n * @private\n */\nfunction searchPointByAngleOrInverted(e) {\n    const series = this, chart = series.chart, xAxis = series.xAxis, yAxis = series.yAxis, center = xAxis.pane && xAxis.pane.center, plotX = e.chartX - (center && center[0] || 0) - chart.plotLeft, plotY = e.chartY - (center && center[1] || 0) - chart.plotTop;\n    const searchKDTreePoint = chart.inverted ? {\n        clientX: e.chartX - yAxis.pos,\n        plotY: e.chartY - xAxis.pos\n    } : {\n        clientX: 180 + (Math.atan2(plotX, plotY) * (-180 / Math.PI))\n    };\n    return series.searchKDTree(searchKDTreePoint);\n}\n/**\n * Trim polygonal path\n * @private\n */\nfunction trimPath(path, start, end, radialAxis) {\n    const tickInterval = radialAxis.tickInterval, ticks = radialAxis.tickPositions;\n    let lastTick = find(ticks, (tick) => tick >= end), firstTick = find([...ticks].reverse(), (tick) => tick <= start);\n    if (!PolarComposition_defined(lastTick)) {\n        lastTick = ticks[ticks.length - 1];\n    }\n    if (!PolarComposition_defined(firstTick)) {\n        firstTick = ticks[0];\n        lastTick += tickInterval;\n        path[0][0] = 'L';\n        // To do: figure out why -3 or -2\n        path.unshift(path[path.length - 3]);\n    }\n    path = path.slice(ticks.indexOf(firstTick), ticks.indexOf(lastTick) + 1);\n    path[0][0] = 'M';\n    return path;\n}\n/**\n * Extend chart.get to also search in panes. Used internally in\n * responsiveness and chart.update.\n * @private\n */\nfunction wrapChartGet(proceed, id) {\n    return find(this.pane || [], (pane) => (\n    // @todo remove id or define id type:\n    pane.options.id === id)) || proceed.call(this, id);\n}\n/**\n * Align column data labels outside the columns. #1199.\n * @private\n */\nfunction wrapColumnSeriesAlignDataLabel(proceed, point, dataLabel, options, alignTo, isNew) {\n    const chart = this.chart, inside = PolarComposition_pick(options.inside, !!this.options.stacking);\n    let angle, shapeArgs, labelPos;\n    if (chart.polar) {\n        angle = point.rectPlotX / Math.PI * 180;\n        if (!chart.inverted) {\n            // Align nicely outside the perimeter of the columns\n            options = findAlignments(angle, options);\n        }\n        else { // Required corrections for data labels of inverted bars\n            // The plotX and plotY are correctly set therefore they\n            // don't need to be swapped (inverted argument is false)\n            this.forceDL = chart.isInsidePlot(point.plotX, point.plotY);\n            // Checks if labels should be positioned inside\n            if (inside && point.shapeArgs) {\n                shapeArgs = point.shapeArgs;\n                // Calculates pixel positions for a data label to be\n                // inside\n                labelPos =\n                    this.yAxis.postTranslate(\n                    // Angle\n                    ((shapeArgs.start || 0) + (shapeArgs.end || 0)) / 2 -\n                        this\n                            .xAxis.startAngleRad, \n                    // Radius\n                    point.barX +\n                        point.pointWidth / 2);\n                alignTo = PolarComposition_merge(alignTo, {\n                    x: labelPos.x - chart.plotLeft,\n                    y: labelPos.y - chart.plotTop\n                });\n            }\n            else if (point.tooltipPos) {\n                alignTo = PolarComposition_merge(alignTo, {\n                    x: point.tooltipPos[0],\n                    y: point.tooltipPos[1]\n                });\n            }\n            options.align = PolarComposition_pick(options.align, 'center');\n            options.verticalAlign =\n                PolarComposition_pick(options.verticalAlign, 'middle');\n        }\n        highcharts_Series_commonjs_highcharts_Series_commonjs2_highcharts_Series_root_Highcharts_Series_default().prototype.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew);\n        // Hide label of a point (only inverted) that is outside the\n        // visible y range\n        if (this.isRadialBar && point.shapeArgs &&\n            point.shapeArgs.start === point.shapeArgs.end) {\n            dataLabel.hide();\n        }\n        else {\n            dataLabel.show();\n        }\n    }\n    else {\n        proceed.call(this, point, dataLabel, options, alignTo, isNew);\n    }\n}\n/**\n * Extend the column prototype's translate method\n * @private\n */\nfunction onAfterColumnTranslate() {\n    const series = this, options = series.options, stacking = options.stacking, chart = series.chart, xAxis = series.xAxis, yAxis = series.yAxis, reversed = yAxis.reversed, center = yAxis.center, startAngleRad = xAxis.startAngleRad, endAngleRad = xAxis.endAngleRad, visibleRange = endAngleRad - startAngleRad;\n    let threshold = options.threshold, thresholdAngleRad = 0, points, point, i, yMin, yMax, start = 0, end = 0, tooltipPos, pointX, pointY, stackValues, stack, barX, innerR, r;\n    // Postprocess plot coordinates\n    if (xAxis.isRadial) {\n        points = series.points;\n        i = points.length;\n        yMin = yAxis.translate(yAxis.min);\n        yMax = yAxis.translate(yAxis.max);\n        threshold = options.threshold || 0;\n        if (chart.inverted) {\n            // Finding a correct threshold\n            if (PolarComposition_isNumber(threshold)) {\n                thresholdAngleRad = yAxis.translate(threshold);\n                // Checks if threshold is outside the visible range\n                if (PolarComposition_defined(thresholdAngleRad)) {\n                    if (thresholdAngleRad < 0) {\n                        thresholdAngleRad = 0;\n                    }\n                    else if (thresholdAngleRad > visibleRange) {\n                        thresholdAngleRad = visibleRange;\n                    }\n                    // Adding start angle offset\n                    series.translatedThreshold =\n                        thresholdAngleRad + startAngleRad;\n                }\n            }\n        }\n        while (i--) {\n            point = points[i];\n            barX = point.barX;\n            pointX = point.x;\n            pointY = point.y;\n            point.shapeType = 'arc';\n            if (chart.inverted) {\n                point.plotY = yAxis.translate(pointY);\n                if (stacking && yAxis.stacking) {\n                    stack = yAxis.stacking.stacks[(pointY < 0 ? '-' : '') +\n                        series.stackKey];\n                    if (series.visible && stack && stack[pointX]) {\n                        if (!point.isNull) {\n                            stackValues = stack[pointX].points[series.getStackIndicator(void 0, pointX, series.index).key];\n                            // Translating to radial values\n                            start = yAxis.translate(stackValues[0]);\n                            end = yAxis.translate(stackValues[1]);\n                            // If starting point is beyond the\n                            // range, set it to 0\n                            if (PolarComposition_defined(start)) {\n                                start = highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default().clamp(start, 0, visibleRange);\n                            }\n                        }\n                    }\n                }\n                else {\n                    // Initial start and end angles for radial bar\n                    start = thresholdAngleRad;\n                    end = point.plotY;\n                }\n                if (start > end) {\n                    // Swapping start and end\n                    end = [start, start = end][0];\n                }\n                // Prevent from rendering point outside the\n                // acceptable circular range\n                if (!reversed) {\n                    if (start < yMin) {\n                        start = yMin;\n                    }\n                    else if (end > yMax) {\n                        end = yMax;\n                    }\n                    else if (end < yMin || start > yMax) {\n                        start = end = 0;\n                    }\n                }\n                else {\n                    if (end > yMin) {\n                        end = yMin;\n                    }\n                    else if (start < yMax) {\n                        start = yMax;\n                    }\n                    else if (start > yMin || end < yMax) {\n                        start = end = visibleRange;\n                    }\n                }\n                if (yAxis.min > yAxis.max) {\n                    start = end = reversed ? visibleRange : 0;\n                }\n                start += startAngleRad;\n                end += startAngleRad;\n                if (center) {\n                    point.barX = barX += center[3] / 2;\n                }\n                // In case when radius, inner radius or both are negative, a\n                // point is rendered but partially or as a center point\n                innerR = Math.max(barX, 0);\n                r = Math.max(barX + point.pointWidth, 0);\n                // Handle border radius\n                const brOption = options.borderRadius, brValue = typeof brOption === 'object' ?\n                    brOption.radius : brOption, borderRadius = PolarComposition_relativeLength(brValue || 0, r - innerR);\n                point.shapeArgs = {\n                    x: center[0],\n                    y: center[1],\n                    r,\n                    innerR,\n                    start,\n                    end,\n                    borderRadius\n                };\n                // Fade out the points if not inside the polar \"plot area\"\n                point.opacity = start === end ? 0 : void 0;\n                // A correct value for stacked or not fully visible\n                // point\n                point.plotY = (PolarComposition_defined(series.translatedThreshold) &&\n                    (start < series.translatedThreshold ? start : end)) -\n                    startAngleRad;\n                // Non-inverted polar columns\n            }\n            else {\n                start = barX + startAngleRad;\n                point.shapeArgs = series.polar.arc(point.yBottom, point.plotY, start, start + point.pointWidth);\n                // Disallow border radius on polar columns for now. It would\n                // take some refactoring to work with the `scope` and the\n                // `where` options. Those options would require that only\n                // individual corners be rounded, in practice individual calls\n                // to applyBorderRadius from the extended `arc` function. That\n                // would be a viable solution, though it would not be perfect\n                // until we implemented rounding that included the lower points\n                // in the stack, like we have for cartesian column.\n                point.shapeArgs.borderRadius = 0;\n            }\n            // Provided a correct coordinates for the tooltip\n            series.polar.toXY(point);\n            if (chart.inverted) {\n                tooltipPos = yAxis.postTranslate(point.rectPlotY, barX + point.pointWidth / 2);\n                point.tooltipPos = [\n                    tooltipPos.x - chart.plotLeft,\n                    tooltipPos.y - chart.plotTop\n                ];\n            }\n            else {\n                point.tooltipPos = [point.plotX, point.plotY];\n            }\n            if (center) {\n                point.ttBelow = point.plotY > center[1];\n            }\n        }\n    }\n}\n/**\n * Extend getSegmentPath to allow connecting ends across 0 to provide a\n * closed circle in line-like series.\n * @private\n */\nfunction wrapLineSeriesGetGraphPath(proceed, points) {\n    const series = this;\n    let firstValid, popLastPoint;\n    // Connect the path\n    if (this.chart.polar) {\n        points = points || this.points;\n        // Append first valid point in order to connect the ends\n        for (let i = 0; i < points.length; i++) {\n            if (!points[i].isNull) {\n                firstValid = i;\n                break;\n            }\n        }\n        /**\n         * Polar charts only. Whether to connect the ends of a line series\n         * plot across the extremes.\n         *\n         * @sample {highcharts} highcharts/plotoptions/line-connectends-false/\n         *         Do not connect\n         *\n         * @type      {boolean}\n         * @since     2.3.0\n         * @product   highcharts\n         * @apioption plotOptions.series.connectEnds\n         */\n        if (this.options.connectEnds !== false &&\n            typeof firstValid !== 'undefined') {\n            this.connectEnds = true; // Re-used in splines\n            points.splice(points.length, 0, points[firstValid]);\n            popLastPoint = true;\n        }\n        // For area charts, pseudo points are added to the graph, now we\n        // need to translate these\n        points.forEach((point) => {\n            if (typeof point.polarPlotY === 'undefined') {\n                series.polar.toXY(point);\n            }\n        });\n    }\n    // Run uber method\n    const ret = proceed.apply(this, [].slice.call(arguments, 1));\n    // #6212 points.splice method is adding points to an array. In case of\n    // areaspline getGraphPath method is used two times and in both times\n    // points are added to an array. That is why points.pop is used, to get\n    // unmodified points.\n    if (popLastPoint) {\n        points.pop();\n    }\n    return ret;\n}\n/**\n * Extend getCoordinates to prepare for polar axis values\n * @private\n */\nfunction wrapPointerGetCoordinates(proceed, e) {\n    const chart = this.chart;\n    let ret = {\n        xAxis: [],\n        yAxis: []\n    };\n    if (chart.polar) {\n        chart.axes.forEach((axis) => {\n            // Skip colorAxis\n            if (axis.coll === 'colorAxis') {\n                return;\n            }\n            const isXAxis = axis.isXAxis, center = axis.center, x = e.chartX - center[0] - chart.plotLeft, y = e.chartY - center[1] - chart.plotTop;\n            ret[isXAxis ? 'xAxis' : 'yAxis'].push({\n                axis: axis,\n                value: axis.translate(isXAxis ?\n                    Math.PI - Math.atan2(x, y) : // Angle\n                    // distance from center\n                    Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)), true)\n            });\n        });\n    }\n    else {\n        ret = proceed.call(this, e);\n    }\n    return ret;\n}\n/**\n * Prevent zooming on mobile devices\n * @private\n */\nfunction wrapPointerPinch(proceed, e) {\n    if (this.chart.polar) {\n        return;\n    }\n    proceed.call(this, e);\n}\n/**\n * Define the animate method for regular series\n * @private\n */\nfunction wrapSeriesAnimate(proceed, init) {\n    const series = this, chart = this.chart, group = this.group, markerGroup = this.markerGroup, center = this.xAxis && this.xAxis.center, plotLeft = chart.plotLeft, plotTop = chart.plotTop;\n    let animation = this.options.animation, attribs, paneInnerR, graphic, shapeArgs, r, innerR;\n    // Specific animation for polar charts\n    if (chart.polar) {\n        if (series.isRadialBar) {\n            if (!init) {\n                // Run the pie animation for radial bars\n                series.startAngleRad = PolarComposition_pick(series.translatedThreshold, series.xAxis.startAngleRad);\n                highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default().seriesTypes.pie.prototype.animate.call(series, init);\n            }\n        }\n        else {\n            animation = PolarComposition_animObject(animation);\n            // A different animation needed for column like series\n            if (series.is('column')) {\n                if (!init) {\n                    paneInnerR = center[3] / 2;\n                    series.points.forEach((point) => {\n                        graphic = point.graphic;\n                        shapeArgs = point.shapeArgs;\n                        r = shapeArgs && shapeArgs.r;\n                        innerR = shapeArgs && shapeArgs.innerR;\n                        if (graphic && shapeArgs) {\n                            // Start values\n                            graphic.attr({\n                                r: paneInnerR,\n                                innerR: paneInnerR\n                            });\n                            // Animate\n                            graphic.animate({\n                                r: r,\n                                innerR: innerR\n                            }, series.options.animation);\n                        }\n                    });\n                }\n            }\n            else {\n                // Initialize the animation\n                if (init) {\n                    // Scale down the group and place it in the center\n                    attribs = {\n                        translateX: center[0] + plotLeft,\n                        translateY: center[1] + plotTop,\n                        scaleX: 0.001,\n                        scaleY: 0.001\n                    };\n                    group.attr(attribs);\n                    if (markerGroup) {\n                        markerGroup.attr(attribs);\n                    }\n                    // Run the animation\n                }\n                else {\n                    attribs = {\n                        translateX: plotLeft,\n                        translateY: plotTop,\n                        scaleX: 1,\n                        scaleY: 1\n                    };\n                    group.animate(attribs, animation);\n                    if (markerGroup) {\n                        markerGroup.animate(attribs, animation);\n                    }\n                }\n            }\n        }\n        // For non-polar charts, revert to the basic animation\n    }\n    else {\n        proceed.call(this, init);\n    }\n}\n/**\n * Overridden method for calculating a spline from one point to the next\n * @private\n */\nfunction wrapSplineSeriesGetPointSpline(proceed, segment, point, i) {\n    let ret, connectors;\n    if (this.chart.polar) {\n        // `moveTo` or `lineTo`\n        if (!i) {\n            ret = ['M', point.plotX, point.plotY];\n        }\n        else { // Curve from last point to this\n            connectors = getConnectors(segment, i, true, this.connectEnds);\n            const rightContX = connectors.prevPointCont &&\n                connectors.prevPointCont.rightContX;\n            const rightContY = connectors.prevPointCont &&\n                connectors.prevPointCont.rightContY;\n            ret = [\n                'C',\n                PolarComposition_isNumber(rightContX) ? rightContX : connectors.plotX,\n                PolarComposition_isNumber(rightContY) ? rightContY : connectors.plotY,\n                PolarComposition_isNumber(connectors.leftContX) ?\n                    connectors.leftContX :\n                    connectors.plotX,\n                PolarComposition_isNumber(connectors.leftContY) ?\n                    connectors.leftContY :\n                    connectors.plotY,\n                connectors.plotX,\n                connectors.plotY\n            ];\n        }\n    }\n    else {\n        ret = proceed.call(this, segment, point, i);\n    }\n    return ret;\n}\n/**\n * Extend the point pos method to calculate point positions for the polar chart.\n * @private\n */\nfunction wrapPointPos(proceed, chartCoordinates, plotY = this.plotY) {\n    if (!this.destroyed) {\n        const { plotX, series } = this, { chart } = series;\n        if (chart.polar &&\n            PolarComposition_isNumber(plotX) &&\n            PolarComposition_isNumber(plotY)) {\n            return [\n                plotX + (chartCoordinates ? chart.plotLeft : 0),\n                plotY + (chartCoordinates ? chart.plotTop : 0)\n            ];\n        }\n        return proceed.call(this, chartCoordinates, plotY);\n    }\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * Extensions for polar charts. Additionally, much of the geometry required\n * for polar charts is gathered in RadialAxes.js.\n * @private\n */\nclass PolarAdditions {\n    /* *\n     *\n     *  Static Functions\n     *\n     * */\n    static compose(AxisClass, ChartClass, PointerClass, SeriesClass, TickClass, PointClass, AreaSplineRangeSeriesClass, ColumnSeriesClass, LineSeriesClass, SplineSeriesClass) {\n        Pane_Pane.compose(ChartClass, PointerClass);\n        Axis_RadialAxis.compose(AxisClass, TickClass);\n        if (PolarComposition_pushUnique(PolarComposition_composed, 'Polar')) {\n            const chartProto = ChartClass.prototype, pointProto = PointClass.prototype, pointerProto = PointerClass.prototype, seriesProto = SeriesClass.prototype;\n            PolarComposition_addEvent(ChartClass, 'afterDrawChartBox', onChartAfterDrawChartBox);\n            PolarComposition_addEvent(ChartClass, 'createAxes', onChartCreateAxes);\n            PolarComposition_addEvent(ChartClass, 'init', onChartAfterInit);\n            PolarComposition_wrap(chartProto, 'get', wrapChartGet);\n            PolarComposition_wrap(pointerProto, 'getCoordinates', wrapPointerGetCoordinates);\n            PolarComposition_wrap(pointerProto, 'pinch', wrapPointerPinch);\n            PolarComposition_addEvent(PointerClass, 'getSelectionMarkerAttrs', onPointerGetSelectionMarkerAttrs);\n            PolarComposition_addEvent(PointerClass, 'getSelectionBox', onPointerGetSelectionBox);\n            PolarComposition_addEvent(SeriesClass, 'afterInit', onSeriesAfterInit);\n            PolarComposition_addEvent(SeriesClass, 'afterTranslate', onSeriesAfterTranslate, { order: 2 } // Run after translation of ||-coords\n            );\n            PolarComposition_addEvent(SeriesClass, 'afterColumnTranslate', onAfterColumnTranslate, { order: 4 });\n            PolarComposition_wrap(seriesProto, 'animate', wrapSeriesAnimate);\n            PolarComposition_wrap(pointProto, 'pos', wrapPointPos);\n            if (ColumnSeriesClass) {\n                const columnProto = ColumnSeriesClass.prototype;\n                PolarComposition_wrap(columnProto, 'alignDataLabel', wrapColumnSeriesAlignDataLabel);\n                PolarComposition_wrap(columnProto, 'animate', wrapSeriesAnimate);\n            }\n            if (LineSeriesClass) {\n                const lineProto = LineSeriesClass.prototype;\n                PolarComposition_wrap(lineProto, 'getGraphPath', wrapLineSeriesGetGraphPath);\n            }\n            if (SplineSeriesClass) {\n                const splineProto = SplineSeriesClass.prototype;\n                PolarComposition_wrap(splineProto, 'getPointSpline', wrapSplineSeriesGetPointSpline);\n                if (AreaSplineRangeSeriesClass) {\n                    const areaSplineRangeProto = AreaSplineRangeSeriesClass.prototype;\n                    // #6430 Areasplinerange series use unwrapped getPointSpline\n                    // method, so we need to set this method again.\n                    areaSplineRangeProto.getPointSpline =\n                        splineProto.getPointSpline;\n                }\n            }\n        }\n    }\n    /* *\n     *\n     *  Constructor\n     *\n     * */\n    constructor(series) {\n        this.series = series;\n    }\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    arc(low, high, start, end) {\n        const series = this.series, center = series.xAxis.center, len = series.yAxis.len, paneInnerR = center[3] / 2;\n        let r = len - high + paneInnerR, innerR = len - PolarComposition_pick(low, len) + paneInnerR;\n        // Prevent columns from shooting through the pane's center\n        if (series.yAxis.reversed) {\n            if (r < 0) {\n                r = paneInnerR;\n            }\n            if (innerR < 0) {\n                innerR = paneInnerR;\n            }\n        }\n        // Return a new shapeArgs\n        return {\n            x: center[0],\n            y: center[1],\n            r: r,\n            innerR: innerR,\n            start: start,\n            end: end\n        };\n    }\n    /**\n     * Translate a point's plotX and plotY from the internal angle and radius\n     * measures to true plotX, plotY coordinates\n     * @private\n     */\n    toXY(point) {\n        const series = this.series, chart = series.chart, xAxis = series.xAxis, yAxis = series.yAxis, plotX = point.plotX, inverted = chart.inverted, pointY = point.y;\n        let plotY = point.plotY, radius = inverted ? plotX : yAxis.len - plotY, clientX;\n        // Corrected y position of inverted series other than column\n        if (inverted && series && !series.isRadialBar) {\n            point.plotY = plotY =\n                PolarComposition_isNumber(pointY) ? yAxis.translate(pointY) : 0;\n        }\n        // Save rectangular plotX, plotY for later computation\n        point.rectPlotX = plotX;\n        point.rectPlotY = plotY;\n        if (yAxis.center) {\n            radius += yAxis.center[3] / 2;\n        }\n        // Find the polar plotX and plotY. Avoid setting plotX and plotY to NaN\n        // when plotY is undefined (#15438)\n        if (PolarComposition_isNumber(plotY)) {\n            const xy = inverted ? yAxis.postTranslate(plotY, radius) :\n                xAxis.postTranslate(plotX, radius);\n            point.plotX = point.polarPlotX = xy.x - chart.plotLeft;\n            point.plotY = point.polarPlotY = xy.y - chart.plotTop;\n        }\n        // If shared tooltip, record the angle in degrees in order to align X\n        // points. Otherwise, use a standard k-d tree to get the nearest point\n        // in two dimensions.\n        if (series.kdByAngle) {\n            clientX = ((plotX / Math.PI * 180) + xAxis.pane.options.startAngle) % 360;\n            if (clientX < 0) { // #2665\n                clientX += 360;\n            }\n            point.clientX = clientX;\n        }\n        else {\n            point.clientX = point.plotX;\n        }\n    }\n}\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const PolarComposition = (PolarAdditions);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"StackItem\"],\"commonjs\":[\"highcharts\",\"StackItem\"],\"commonjs2\":[\"highcharts\",\"StackItem\"],\"root\":[\"Highcharts\",\"StackItem\"]}\nvar highcharts_StackItem_commonjs_highcharts_StackItem_commonjs2_highcharts_StackItem_root_Highcharts_StackItem_ = __webpack_require__(184);\nvar highcharts_StackItem_commonjs_highcharts_StackItem_commonjs2_highcharts_StackItem_root_Highcharts_StackItem_default = /*#__PURE__*/__webpack_require__.n(highcharts_StackItem_commonjs_highcharts_StackItem_commonjs2_highcharts_StackItem_root_Highcharts_StackItem_);\n;// ./code/es-modules/Core/Axis/WaterfallAxis.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: WaterfallAxis_composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\nconst { addEvent: WaterfallAxis_addEvent, objectEach: WaterfallAxis_objectEach, pushUnique: WaterfallAxis_pushUnique } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Namespace\n *\n * */\nvar WaterfallAxis;\n(function (WaterfallAxis) {\n    /* *\n     *\n     *  Interfaces\n     *\n     * */\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    /**\n     * @private\n     */\n    function compose(AxisClass, ChartClass) {\n        if (WaterfallAxis_pushUnique(WaterfallAxis_composed, 'Axis.Waterfall')) {\n            WaterfallAxis_addEvent(AxisClass, 'init', onAxisInit);\n            WaterfallAxis_addEvent(AxisClass, 'afterBuildStacks', onAxisAfterBuildStacks);\n            WaterfallAxis_addEvent(AxisClass, 'afterRender', onAxisAfterRender);\n            WaterfallAxis_addEvent(ChartClass, 'beforeRedraw', onChartBeforeRedraw);\n        }\n    }\n    WaterfallAxis.compose = compose;\n    /**\n     * @private\n     */\n    function onAxisAfterBuildStacks() {\n        const axis = this, stacks = axis.waterfall.stacks;\n        if (stacks) {\n            stacks.changed = false;\n            delete stacks.alreadyChanged;\n        }\n    }\n    /**\n     * @private\n     */\n    function onAxisAfterRender() {\n        const axis = this, stackLabelOptions = axis.options.stackLabels;\n        if (stackLabelOptions && stackLabelOptions.enabled &&\n            axis.waterfall.stacks) {\n            axis.waterfall.renderStackTotals();\n        }\n    }\n    /**\n     * @private\n     */\n    function onAxisInit() {\n        const axis = this;\n        if (!axis.waterfall) {\n            axis.waterfall = new Composition(axis);\n        }\n    }\n    /**\n     * @private\n     */\n    function onChartBeforeRedraw() {\n        const axes = this.axes, series = this.series;\n        for (const serie of series) {\n            if (serie.options.stacking) {\n                for (const axis of axes) {\n                    if (!axis.isXAxis) {\n                        axis.waterfall.stacks.changed = true;\n                    }\n                }\n                break;\n            }\n        }\n    }\n    /* *\n     *\n     *  Classes\n     *\n     * */\n    class Composition {\n        /* *\n         *\n         *  Constructors\n         *\n         * */\n        constructor(axis) {\n            this.axis = axis;\n            this.stacks = {\n                changed: false\n            };\n        }\n        /* *\n         *\n         *  Functions\n         *\n         * */\n        /**\n         * Calls StackItem.prototype.render function that creates and renders\n         * stack total label for each waterfall stack item.\n         *\n         * @private\n         * @function Highcharts.Axis#renderWaterfallStackTotals\n         */\n        renderStackTotals() {\n            const yAxis = this.axis, waterfallStacks = yAxis.waterfall.stacks, stackTotalGroup = (yAxis.stacking && yAxis.stacking.stackTotalGroup), dummyStackItem = new (highcharts_StackItem_commonjs_highcharts_StackItem_commonjs2_highcharts_StackItem_root_Highcharts_StackItem_default())(yAxis, yAxis.options.stackLabels || {}, false, 0, void 0);\n            this.dummyStackItem = dummyStackItem;\n            // Render each waterfall stack total\n            if (stackTotalGroup) {\n                WaterfallAxis_objectEach(waterfallStacks, (type) => {\n                    WaterfallAxis_objectEach(type, (stackItem, key) => {\n                        dummyStackItem.total = stackItem.stackTotal;\n                        dummyStackItem.x = +key;\n                        if (stackItem.label) {\n                            dummyStackItem.label = stackItem.label;\n                        }\n                        highcharts_StackItem_commonjs_highcharts_StackItem_commonjs2_highcharts_StackItem_root_Highcharts_StackItem_default().prototype.render.call(dummyStackItem, stackTotalGroup);\n                        stackItem.label = dummyStackItem.label;\n                        delete dummyStackItem.label;\n                    });\n                });\n            }\n            dummyStackItem.total = null;\n        }\n    }\n    WaterfallAxis.Composition = Composition;\n})(WaterfallAxis || (WaterfallAxis = {}));\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Axis_WaterfallAxis = (WaterfallAxis);\n\n;// ./code/es-modules/Series/Waterfall/WaterfallPoint.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 { isNumber: WaterfallPoint_isNumber } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n *  Class\n *\n * */\nclass WaterfallPoint extends (highcharts_Series_types_column_commonjs_highcharts_Series_types_column_commonjs2_highcharts_Series_types_column_root_Highcharts_Series_types_column_default()).prototype.pointClass {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    getClassName() {\n        let className = highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default().prototype.getClassName.call(this);\n        if (this.isSum) {\n            className += ' highcharts-sum';\n        }\n        else if (this.isIntermediateSum) {\n            className += ' highcharts-intermediate-sum';\n        }\n        return className;\n    }\n    // Pass the null test in ColumnSeries.translate.\n    isValid() {\n        return (WaterfallPoint_isNumber(this.y) ||\n            this.isSum ||\n            Boolean(this.isIntermediateSum));\n    }\n}\n/* *\n *\n *  Export\n *\n * */\n/* harmony default export */ const Waterfall_WaterfallPoint = (WaterfallPoint);\n\n;// ./code/es-modules/Series/Waterfall/WaterfallSeriesDefaults.js\n/* *\n *\n *  (c) 2010-2024 Torstein Honsi\n *\n *  License: www.highcharts.com/license\n *\n *  !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n *  API Options\n *\n * */\n/**\n * A waterfall chart displays sequentially introduced positive or negative\n * values in cumulative columns.\n *\n * @sample highcharts/demo/waterfall/\n *         Waterfall chart\n * @sample highcharts/plotoptions/waterfall-inverted/\n *         Horizontal (inverted) waterfall\n * @sample highcharts/plotoptions/waterfall-stacked/\n *         Stacked waterfall chart\n *\n * @extends      plotOptions.column\n * @excluding    boostThreshold, boostBlending\n * @product      highcharts\n * @requires     highcharts-more\n * @optionparent plotOptions.waterfall\n */\nconst WaterfallSeriesDefaults = {\n    /**\n     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @apioption plotOptions.waterfall.color\n     */\n    /**\n     * The color used specifically for positive point columns. When not\n     * specified, the general series color is used.\n     *\n     * In styled mode, the waterfall colors can be set with the\n     * `.highcharts-point-negative`, `.highcharts-sum` and\n     * `.highcharts-intermediate-sum` classes.\n     *\n     * @sample {highcharts} highcharts/demo/waterfall/\n     *         Waterfall\n     *\n     * @type      {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @product   highcharts\n     * @apioption plotOptions.waterfall.upColor\n     */\n    dataLabels: {\n        inside: true\n    },\n    /**\n     * The width of the line connecting waterfall columns.\n     *\n     * @product highcharts\n     */\n    lineWidth: 1,\n    /**\n     * The color of the line that connects columns in a waterfall series.\n     *\n     * In styled mode, the stroke can be set with the `.highcharts-graph`\n     * class.\n     *\n     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @since   3.0\n     * @product highcharts\n     */\n    lineColor: \"#333333\" /* Palette.neutralColor80 */,\n    /**\n     * A name for the dash style to use for the line connecting the columns\n     * of the waterfall series. Possible values: Dash, DashDot, Dot,\n     * LongDash, LongDashDot, LongDashDotDot, ShortDash, ShortDashDot,\n     * ShortDashDotDot, ShortDot, Solid\n     *\n     * In styled mode, the stroke dash-array can be set with the\n     * `.highcharts-graph` class.\n     *\n     * @type    {Highcharts.DashStyleValue}\n     * @since   3.0\n     * @product highcharts\n     */\n    dashStyle: 'Dot',\n    /**\n     * The color of the border of each waterfall column.\n     *\n     * In styled mode, the border stroke can be set with the\n     * `.highcharts-point` class.\n     *\n     * @type    {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n     * @since   3.0\n     * @product highcharts\n     */\n    borderColor: \"#333333\" /* Palette.neutralColor80 */,\n    states: {\n        hover: {\n            lineWidthPlus: 0 // #3126\n        }\n    }\n};\n/**\n * A `waterfall` series. If the [type](#series.waterfall.type) option\n * is not specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends   series,plotOptions.waterfall\n * @excluding dataParser, dataURL, boostThreshold, boostBlending\n * @product   highcharts\n * @requires  highcharts-more\n * @apioption series.waterfall\n */\n/**\n * An array of data points for the series. For the `waterfall` series\n * type, points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n *    interpreted as `y` options. The `x` values will be automatically\n *    calculated, either starting at 0 and incremented by 1, or from\n *    `pointStart` and `pointInterval` given in the series options. If the axis\n *    has categories, these will be used. Example:\n *    ```js\n *    data: [0, 5, 3, 5]\n *    ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n *    `x,y`. If the first value is a string, it is applied as the name of the\n *    point, and the `x` value is inferred.\n *    ```js\n *    data: [\n *        [0, 7],\n *        [1, 8],\n *        [2, 3]\n *    ]\n *    ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n *    few settings, see the complete options set below. If the total number of\n *    data points exceeds the series'\n *    [turboThreshold](#series.waterfall.turboThreshold), this option is not\n *    available.\n *    ```js\n *    data: [{\n *        x: 1,\n *        y: 8,\n *        name: \"Point2\",\n *        color: \"#00FF00\"\n *    }, {\n *        x: 1,\n *        y: 8,\n *        name: \"Point1\",\n *        color: \"#FF00FF\"\n *    }]\n *    ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n *         Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n *         Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n *         Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n *         Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n *         Config objects\n *\n * @type      {Array<number|Array<(number|string),(number|null)>|null|*>}\n * @extends   series.line.data\n * @excluding marker\n * @product   highcharts\n * @apioption series.waterfall.data\n */\n/**\n * When this property is true, the points acts as a summary column for\n * the values added or subtracted since the last intermediate sum,\n * or since the start of the series. The `y` value is ignored.\n *\n * @sample {highcharts} highcharts/demo/waterfall/\n *         Waterfall\n *\n * @type      {boolean}\n * @default   false\n * @product   highcharts\n * @apioption series.waterfall.data.isIntermediateSum\n */\n/**\n * When this property is true, the point display the total sum across\n * the entire series. The `y` value is ignored.\n *\n * @sample {highcharts} highcharts/demo/waterfall/\n *         Waterfall\n *\n * @type      {boolean}\n * @default   false\n * @product   highcharts\n * @apioption series.waterfall.data.isSum\n */\n''; // Adds doclets above to transpiled file\n/* *\n *\n *  Default Export\n *\n * */\n/* harmony default export */ const Waterfall_WaterfallSeriesDefaults = (WaterfallSeriesDefaults);\n\n;// ./code/es-modules/Series/Waterfall/WaterfallSeries.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 { column: WaterfallSeries_ColumnSeries, line: WaterfallSeries_LineSeries } = (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes;\n\nconst { addEvent: WaterfallSeries_addEvent, arrayMax: WaterfallSeries_arrayMax, arrayMin: WaterfallSeries_arrayMin, correctFloat: WaterfallSeries_correctFloat, crisp: WaterfallSeries_crisp, extend: WaterfallSeries_extend, isNumber: WaterfallSeries_isNumber, merge: WaterfallSeries_merge, objectEach: WaterfallSeries_objectEach, pick: WaterfallSeries_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\n/* *\n *\n *  Functions\n *\n * */\n/**\n * Returns true if the key is a direct property of the object.\n * @private\n * @param {*} obj\n * Object with property to test\n * @param {string} key\n * Property key to test\n * @return {boolean}\n * Whether it is a direct property\n */\nfunction ownProp(obj, key) {\n    return Object.hasOwnProperty.call(obj, key);\n}\n/* *\n *\n *  Class\n *\n * */\n/**\n * Waterfall series type.\n *\n * @private\n */\nclass WaterfallSeries extends WaterfallSeries_ColumnSeries {\n    /* *\n     *\n     *  Functions\n     *\n     * */\n    // After generating points, set y-values for all sums.\n    generatePoints() {\n        // Parent call:\n        WaterfallSeries_ColumnSeries.prototype.generatePoints.apply(this);\n        const processedYData = this.getColumn('y', true);\n        for (let i = 0, len = this.points.length; i < len; i++) {\n            const point = this.points[i], y = processedYData[i];\n            // Override point value for sums. #3710 Update point does not\n            // propagate to sum\n            if (WaterfallSeries_isNumber(y) && (point.isIntermediateSum || point.isSum)) {\n                point.y = WaterfallSeries_correctFloat(y);\n            }\n        }\n    }\n    // Call default processData then override yData to reflect waterfall's\n    // extremes on yAxis\n    processData(force) {\n        const series = this, options = series.options, yData = series.getColumn('y'), \n        // #3710 Update point does not propagate to sum\n        points = options.data, dataLength = yData.length, threshold = options.threshold || 0;\n        let point, subSum, sum, dataMin, dataMax, y;\n        sum = subSum = dataMin = dataMax = 0;\n        for (let i = 0; i < dataLength; i++) {\n            y = yData[i];\n            point = points?.[i] || {};\n            if (y === 'sum' || point.isSum) {\n                yData[i] = WaterfallSeries_correctFloat(sum);\n            }\n            else if (y === 'intermediateSum' ||\n                point.isIntermediateSum) {\n                yData[i] = WaterfallSeries_correctFloat(subSum);\n                subSum = 0;\n            }\n            else {\n                sum += y;\n                subSum += y;\n            }\n            dataMin = Math.min(sum, dataMin);\n            dataMax = Math.max(sum, dataMax);\n        }\n        super.processData.call(this, force);\n        // Record extremes only if stacking was not set:\n        if (!options.stacking) {\n            series.dataMin = dataMin + threshold;\n            series.dataMax = dataMax;\n        }\n        return;\n    }\n    // Return y value or string if point is sum\n    toYData(pt) {\n        if (pt.isSum) {\n            return 'sum';\n        }\n        if (pt.isIntermediateSum) {\n            return 'intermediateSum';\n        }\n        return pt.y;\n    }\n    // Postprocess mapping between options and SVG attributes\n    pointAttribs(point, state) {\n        const upColor = this.options.upColor;\n        // Set or reset up color (#3710, update to negative)\n        if (upColor && !point.options.color && WaterfallSeries_isNumber(point.y)) {\n            point.color = point.y > 0 ? upColor : void 0;\n        }\n        const attr = WaterfallSeries_ColumnSeries.prototype.pointAttribs.call(this, point, state);\n        // The dashStyle option in waterfall applies to the graph, not\n        // the points\n        delete attr.dashstyle;\n        return attr;\n    }\n    // Return an empty path initially, because we need to know the stroke-width\n    // in order to set the final path.\n    getGraphPath() {\n        return [['M', 0, 0]];\n    }\n    // Draw columns' connector lines\n    getCrispPath() {\n        const // Skip points where Y is not a number (#18636)\n        data = this.data.filter((d) => WaterfallSeries_isNumber(d.y)), yAxis = this.yAxis, length = data.length, graphLineWidth = this.graph?.strokeWidth() || 0, reversedXAxis = this.xAxis.reversed, reversedYAxis = this.yAxis.reversed, stacking = this.options.stacking, path = [];\n        for (let i = 1; i < length; i++) {\n            if (!( // Skip lines that would pass over the null point (#18636)\n            this.options.connectNulls ||\n                WaterfallSeries_isNumber(this.data[data[i].index - 1].y))) {\n                continue;\n            }\n            const box = data[i].box, prevPoint = data[i - 1], prevY = prevPoint.y || 0, prevBox = data[i - 1].box;\n            if (!box || !prevBox) {\n                continue;\n            }\n            const prevStack = yAxis.waterfall.stacks[this.stackKey], isPos = prevY > 0 ? -prevBox.height : 0;\n            if (prevStack && prevBox && box) {\n                const prevStackX = prevStack[i - 1];\n                // Y position of the connector is different when series are\n                // stacked, yAxis is reversed and it also depends on point's\n                // value\n                let yPos;\n                if (stacking) {\n                    const connectorThreshold = prevStackX.connectorThreshold;\n                    yPos = WaterfallSeries_crisp(yAxis.translate(connectorThreshold, false, true, false, true) +\n                        (reversedYAxis ? isPos : 0), graphLineWidth);\n                }\n                else {\n                    yPos = WaterfallSeries_crisp(prevBox.y + (prevPoint.minPointLengthOffset || 0), graphLineWidth);\n                }\n                path.push([\n                    'M',\n                    (prevBox.x || 0) + (reversedXAxis ?\n                        0 :\n                        (prevBox.width || 0)),\n                    yPos\n                ], [\n                    'L',\n                    (box.x || 0) + (reversedXAxis ?\n                        (box.width || 0) :\n                        0),\n                    yPos\n                ]);\n            }\n            if (prevBox &&\n                path.length &&\n                ((!stacking && prevY < 0 && !reversedYAxis) ||\n                    (prevY > 0 && reversedYAxis))) {\n                const nextLast = path[path.length - 2];\n                if (nextLast && typeof nextLast[2] === 'number') {\n                    nextLast[2] += prevBox.height || 0;\n                }\n                const last = path[path.length - 1];\n                if (last && typeof last[2] === 'number') {\n                    last[2] += prevBox.height || 0;\n                }\n            }\n        }\n        return path;\n    }\n    // The graph is initially drawn with an empty definition, then updated with\n    // crisp rendering.\n    drawGraph() {\n        WaterfallSeries_LineSeries.prototype.drawGraph.call(this);\n        if (this.graph) {\n            this.graph.attr({\n                d: this.getCrispPath()\n            });\n        }\n    }\n    // Waterfall has stacking along the x-values too.\n    setStackedPoints(axis) {\n        const series = this, options = series.options, waterfallStacks = axis.waterfall?.stacks, seriesThreshold = options.threshold || 0, stackKey = series.stackKey, xData = series.getColumn('x'), yData = series.getColumn('y'), xLength = xData.length;\n        let stackThreshold = seriesThreshold, interSum = stackThreshold, actualStackX, totalYVal = 0, actualSum = 0, prevSum = 0, statesLen, posTotal, negTotal, xPoint, yVal, x, alreadyChanged, changed;\n        // Function responsible for calculating correct values for stackState\n        // array of each stack item. The arguments are: firstS - the value for\n        // the first state, nextS - the difference between the previous and the\n        // newest state, sInx - counter used in the for that updates each state\n        // when necessary, sOff - offset that must be added to each state when\n        // they need to be updated (if point isn't a total sum)\n        // eslint-disable-next-line require-jsdoc\n        const calculateStackState = (firstS, nextS, sInx, sOff) => {\n            if (actualStackX) {\n                if (!statesLen) {\n                    actualStackX.stackState[0] = firstS;\n                    statesLen = actualStackX.stackState.length;\n                }\n                else {\n                    for (sInx; sInx < statesLen; sInx++) {\n                        actualStackX.stackState[sInx] += sOff;\n                    }\n                }\n                actualStackX.stackState.push(actualStackX.stackState[statesLen - 1] + nextS);\n            }\n        };\n        if (axis.stacking && waterfallStacks) {\n            // Code responsible for creating stacks for waterfall series\n            if (series.reserveSpace()) {\n                changed = waterfallStacks.changed;\n                alreadyChanged = waterfallStacks.alreadyChanged;\n                // In case of a redraw, stack for each x value must be emptied\n                // (only for the first series in a specific stack) and\n                // recalculated once more\n                if (alreadyChanged &&\n                    alreadyChanged.indexOf(stackKey) < 0) {\n                    changed = true;\n                }\n                if (!waterfallStacks[stackKey]) {\n                    waterfallStacks[stackKey] = {};\n                }\n                const actualStack = waterfallStacks[stackKey];\n                if (actualStack) {\n                    for (let i = 0; i < xLength; i++) {\n                        x = xData[i];\n                        if (!actualStack[x] || changed) {\n                            actualStack[x] = {\n                                negTotal: 0,\n                                posTotal: 0,\n                                stackTotal: 0,\n                                threshold: 0,\n                                stateIndex: 0,\n                                stackState: [],\n                                label: ((changed &&\n                                    actualStack[x]) ?\n                                    actualStack[x].label :\n                                    void 0)\n                            };\n                        }\n                        actualStackX = actualStack[x];\n                        yVal = yData[i];\n                        if (yVal >= 0) {\n                            actualStackX.posTotal += yVal;\n                        }\n                        else {\n                            actualStackX.negTotal += yVal;\n                        }\n                        // Points do not exist yet, so raw data is used\n                        xPoint = options.data[i];\n                        posTotal = actualStackX.absolutePos =\n                            actualStackX.posTotal;\n                        negTotal = actualStackX.absoluteNeg =\n                            actualStackX.negTotal;\n                        actualStackX.stackTotal = posTotal + negTotal;\n                        statesLen = actualStackX.stackState.length;\n                        if (xPoint && xPoint.isIntermediateSum) {\n                            calculateStackState(prevSum, actualSum, 0, prevSum);\n                            prevSum = actualSum;\n                            actualSum = seriesThreshold;\n                            // Swapping values\n                            stackThreshold ^= interSum;\n                            interSum ^= stackThreshold;\n                            stackThreshold ^= interSum;\n                        }\n                        else if (xPoint && xPoint.isSum) {\n                            calculateStackState(seriesThreshold, totalYVal, statesLen, 0);\n                            stackThreshold = seriesThreshold;\n                        }\n                        else {\n                            calculateStackState(stackThreshold, yVal, 0, totalYVal);\n                            if (xPoint) {\n                                totalYVal += yVal;\n                                actualSum += yVal;\n                            }\n                        }\n                        actualStackX.stateIndex++;\n                        actualStackX.threshold = stackThreshold;\n                        stackThreshold += actualStackX.stackTotal;\n                    }\n                }\n                waterfallStacks.changed = false;\n                if (!waterfallStacks.alreadyChanged) {\n                    waterfallStacks.alreadyChanged = [];\n                }\n                waterfallStacks.alreadyChanged.push(stackKey);\n            }\n        }\n    }\n    // Extremes for a non-stacked series are recorded in processData.\n    // In case of stacking, use Series.stackedYData to calculate extremes.\n    getExtremes() {\n        const stacking = this.options.stacking;\n        let yAxis, waterfallStacks, stackedYNeg, stackedYPos;\n        if (stacking) {\n            yAxis = this.yAxis;\n            waterfallStacks = yAxis.waterfall.stacks;\n            stackedYNeg = this.stackedYNeg = [];\n            stackedYPos = this.stackedYPos = [];\n            // The visible y range can be different when stacking is set to\n            // overlap and different when it's set to normal\n            if (stacking === 'overlap') {\n                WaterfallSeries_objectEach(waterfallStacks[this.stackKey], function (stackX) {\n                    stackedYNeg.push(WaterfallSeries_arrayMin(stackX.stackState));\n                    stackedYPos.push(WaterfallSeries_arrayMax(stackX.stackState));\n                });\n            }\n            else {\n                WaterfallSeries_objectEach(waterfallStacks[this.stackKey], function (stackX) {\n                    stackedYNeg.push(stackX.negTotal + stackX.threshold);\n                    stackedYPos.push(stackX.posTotal + stackX.threshold);\n                });\n            }\n            return {\n                dataMin: WaterfallSeries_arrayMin(stackedYNeg),\n                dataMax: WaterfallSeries_arrayMax(stackedYPos)\n            };\n        }\n        // When not stacking, data extremes have already been computed in the\n        // processData function.\n        return {\n            dataMin: this.dataMin,\n            dataMax: this.dataMax\n        };\n    }\n}\n/* *\n *\n *  Static Properties\n *\n * */\nWaterfallSeries.defaultOptions = WaterfallSeries_merge(WaterfallSeries_ColumnSeries.defaultOptions, Waterfall_WaterfallSeriesDefaults);\nWaterfallSeries.compose = Axis_WaterfallAxis.compose;\nWaterfallSeries_extend(WaterfallSeries.prototype, {\n    pointValKey: 'y',\n    // Property needed to prevent lines between the columns from disappearing\n    // when negativeColor is used.\n    showLine: true,\n    pointClass: Waterfall_WaterfallPoint\n});\n// Translate data points from raw values\nWaterfallSeries_addEvent(WaterfallSeries, 'afterColumnTranslate', function () {\n    const series = this, { options, points, yAxis } = series, minPointLength = WaterfallSeries_pick(options.minPointLength, 5), halfMinPointLength = minPointLength / 2, threshold = options.threshold || 0, stacking = options.stacking, actualStack = yAxis.waterfall.stacks[series.stackKey], processedYData = series.getColumn('y', true);\n    let previousIntermediate = threshold, previousY = threshold, y, total, yPos, hPos;\n    for (let i = 0; i < points.length; i++) {\n        const point = points[i], yValue = processedYData[i], shapeArgs = point.shapeArgs, box = WaterfallSeries_extend({\n            x: 0,\n            y: 0,\n            width: 0,\n            height: 0\n        }, shapeArgs || {});\n        point.box = box;\n        const range = [0, yValue], pointY = point.y || 0;\n        // Code responsible for correct positions of stacked points\n        // starts here\n        if (stacking) {\n            if (actualStack) {\n                const actualStackX = actualStack[i];\n                if (stacking === 'overlap') {\n                    total =\n                        actualStackX.stackState[actualStackX.stateIndex--];\n                    y = pointY >= 0 ? total : total - pointY;\n                    if (ownProp(actualStackX, 'absolutePos')) {\n                        delete actualStackX.absolutePos;\n                    }\n                    if (ownProp(actualStackX, 'absoluteNeg')) {\n                        delete actualStackX.absoluteNeg;\n                    }\n                }\n                else {\n                    if (pointY >= 0) {\n                        total = actualStackX.threshold +\n                            actualStackX.posTotal;\n                        actualStackX.posTotal -= pointY;\n                        y = total;\n                    }\n                    else {\n                        total = actualStackX.threshold +\n                            actualStackX.negTotal;\n                        actualStackX.negTotal -= pointY;\n                        y = total - pointY;\n                    }\n                    if (!actualStackX.posTotal) {\n                        if (WaterfallSeries_isNumber(actualStackX.absolutePos) &&\n                            ownProp(actualStackX, 'absolutePos')) {\n                            actualStackX.posTotal =\n                                actualStackX.absolutePos;\n                            delete actualStackX.absolutePos;\n                        }\n                    }\n                    if (!actualStackX.negTotal) {\n                        if (WaterfallSeries_isNumber(actualStackX.absoluteNeg) &&\n                            ownProp(actualStackX, 'absoluteNeg')) {\n                            actualStackX.negTotal =\n                                actualStackX.absoluteNeg;\n                            delete actualStackX.absoluteNeg;\n                        }\n                    }\n                }\n                if (!point.isSum) {\n                    // The connectorThreshold property is later used in\n                    // getCrispPath function to draw a connector line in a\n                    // correct place\n                    actualStackX.connectorThreshold =\n                        actualStackX.threshold + actualStackX.stackTotal;\n                }\n                if (yAxis.reversed) {\n                    yPos = (pointY >= 0) ? (y - pointY) : (y + pointY);\n                    hPos = y;\n                }\n                else {\n                    yPos = y;\n                    hPos = y - pointY;\n                }\n                point.below = yPos <= threshold;\n                box.y = yAxis.translate(yPos, false, true, false, true);\n                box.height = Math.abs(box.y -\n                    yAxis.translate(hPos, false, true, false, true));\n                const dummyStackItem = yAxis.waterfall.dummyStackItem;\n                if (dummyStackItem) {\n                    dummyStackItem.x = i;\n                    dummyStackItem.label = actualStack[i].label;\n                    dummyStackItem.setOffset(series.pointXOffset || 0, series.barW || 0, series.stackedYNeg[i], series.stackedYPos[i], void 0, this.xAxis);\n                }\n            }\n        }\n        else {\n            // Up points\n            y = Math.max(previousY, previousY + pointY) + range[0];\n            box.y = yAxis.translate(y, false, true, false, true);\n            // Sum points\n            if (point.isSum) {\n                box.y = yAxis.translate(range[1], false, true, false, true);\n                box.height = Math.min(yAxis.translate(range[0], false, true, false, true), yAxis.len) - box.y; // #4256\n                point.below = range[1] <= threshold;\n            }\n            else if (point.isIntermediateSum) {\n                if (pointY >= 0) {\n                    yPos = range[1] + previousIntermediate;\n                    hPos = previousIntermediate;\n                }\n                else {\n                    yPos = previousIntermediate;\n                    hPos = range[1] + previousIntermediate;\n                }\n                if (yAxis.reversed) {\n                    // Swapping values\n                    yPos ^= hPos;\n                    hPos ^= yPos;\n                    yPos ^= hPos;\n                }\n                box.y = yAxis.translate(yPos, false, true, false, true);\n                box.height = Math.abs(box.y -\n                    Math.min(yAxis.translate(hPos, false, true, false, true), yAxis.len));\n                previousIntermediate += range[1];\n                point.below = yPos <= threshold;\n                // If it's not the sum point, update previous stack end position\n                // and get shape height (#3886)\n            }\n            else {\n                box.height = yValue > 0 ?\n                    yAxis.translate(previousY, false, true, false, true) - box.y :\n                    yAxis.translate(previousY, false, true, false, true) - yAxis.translate(previousY - yValue, false, true, false, true);\n                previousY += yValue;\n                point.below = previousY < threshold;\n            }\n            // #3952 Negative sum or intermediate sum not rendered correctly\n            if (box.height < 0) {\n                box.y += box.height;\n                box.height *= -1;\n            }\n        }\n        point.plotY = box.y;\n        point.yBottom = box.y + box.height;\n        if (box.height <= minPointLength && !point.isNull) {\n            box.height = minPointLength;\n            box.y -= halfMinPointLength;\n            point.yBottom = box.y + box.height;\n            point.plotY = box.y;\n            if (pointY < 0) {\n                point.minPointLengthOffset = -halfMinPointLength;\n            }\n            else {\n                point.minPointLengthOffset = halfMinPointLength;\n            }\n        }\n        else {\n            // #8024, empty gaps in the line for null data\n            if (point.isNull) {\n                box.width = 0;\n            }\n            point.minPointLengthOffset = 0;\n        }\n        // Correct tooltip placement (#3014)\n        const tooltipY = point.plotY + (point.negative ? box.height : 0);\n        if (point.below) { // #15334\n            point.plotY += box.height;\n        }\n        if (point.tooltipPos) {\n            if (series.chart.inverted) {\n                point.tooltipPos[0] = yAxis.len - tooltipY;\n            }\n            else {\n                point.tooltipPos[1] = tooltipY;\n            }\n        }\n        // Check point position after recalculation (#16788)\n        point.isInside = this.isPointInside(point);\n        // Crisp vector coordinates\n        const crispBottom = WaterfallSeries_crisp(point.yBottom, series.borderWidth);\n        box.y = WaterfallSeries_crisp(box.y, series.borderWidth);\n        box.height = crispBottom - box.y;\n        WaterfallSeries_merge(true, point.shapeArgs, box);\n    }\n}, { order: 2 });\nhighcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default().registerSeriesType('waterfall', WaterfallSeries);\n/* *\n *\n * Export\n *\n * */\n/* harmony default export */ const Waterfall_WaterfallSeries = (WaterfallSeries);\n\n;// ./code/es-modules/masters/highcharts-more.src.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst G = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\nG.RadialAxis = Axis_RadialAxis;\nBubble_BubbleSeries.compose(G.Axis, G.Chart, G.Legend);\nPackedBubble_PackedBubbleSeries.compose(G.Axis, G.Chart, G.Legend);\nPane_Pane.compose(G.Chart, G.Pointer);\nPolarComposition.compose(G.Axis, G.Chart, G.Pointer, G.Series, G.Tick, G.Point, (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes.areasplinerange, (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes.column, (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes.line, (highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default()).seriesTypes.spline);\nWaterfall_WaterfallSeries.compose(G.Axis, G.Chart);\n/* harmony default export */ const highcharts_more_src = (G);\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__512__","__WEBPACK_EXTERNAL_MODULE__820__","__WEBPACK_EXTERNAL_MODULE__448__","__WEBPACK_EXTERNAL_MODULE__620__","__WEBPACK_EXTERNAL_MODULE__984__","__WEBPACK_EXTERNAL_MODULE__260__","__WEBPACK_EXTERNAL_MODULE__960__","__WEBPACK_EXTERNAL_MODULE__28__","__WEBPACK_EXTERNAL_MODULE__184__","CenteredUtilities","RadialAxis","WaterfallAxis","__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__","highcharts_more_src","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default","highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_","highcharts_SeriesRegistry_commonjs_highcharts_SeriesRegistry_commonjs2_highcharts_SeriesRegistry_root_Highcharts_SeriesRegistry_default","highcharts_Series_commonjs_highcharts_Series_commonjs2_highcharts_Series_root_Highcharts_Series_","highcharts_Series_commonjs_highcharts_Series_commonjs2_highcharts_Series_root_Highcharts_Series_default","deg2rad","fireEvent","isNumber","pick","relativeLength","getCenter","options","chart","slicingRoom","slicedOffset","plotWidth","plotHeight","centerOption","center","smallestSize","Math","min","thickness","handleSlicingRoom","size","innerSize","i","value","parseFloat","positions","angular","test","getStartAndEndRadians","start","end","startAngle","endAngle","Series_CenteredUtilities","addEvent","correctFloat","defined","PaneComposition_pick","chartGetHoverPane","eventArgs","hoverPane","pane","forEach","isInsidePane","chartX","plotLeft","chartY","plotTop","x","y","insideSlice","cx","cy","distance","sqrt","pow","angle","atan2","PI","ceil","onChartAfterIsInsiderPlot","e","polar","inverted","isInsidePlot","some","axis","normalizedStartAngleRad","normalizedEndAngleRad","onPointerAfterGetHoverData","hoverPoint","plotX","plotY","onPointerBeforeGetHoverData","getHoverPane","filter","s","visible","shared","directTouch","enableMouseTracking","xAxis","Pane_PaneDefaults","background","shape","borderRadius","borderWidth","borderColor","backgroundColor","linearGradient","x1","y1","x2","y2","stops","from","Number","MAX_VALUE","innerRadius","to","outerRadius","extend","merge","splat","Pane","constructor","coll","init","push","setOptions","render","renderer","group","g","attr","zIndex","add","updateCenter","backgroundOption","len","max","length","renderBackground","destroy","splice","backgroundOptions","attribs","className","method","styledMode","path","getPlotBandPath","update","redraw","axes","compose","ChartClass","PointerClass","chartProto","collectionsWithUpdate","area","pointClass","AreaPoint","areaProto","seriesTypes","AreaRangePoint_defined","AreaRangePoint_isNumber","AreaRange_AreaRangePoint","setState","prevState","state","series","isPolar","plotHigh","yAxis","toPixels","high","plotLow","low","lowerStateMarkerGraphic","stateMarkerGraphic","upperStateMarkerGraphic","graphic","graphics","plotHighX","apply","arguments","plotLowX","originalSettings","modifyMarkerSettings","restoreMarkerSettings","haloPath","isInside","isTopInside","concat","isValid","noop","AreaSeries","AreaRangeSeries_areaProto","column","columnProto","AreaRangeSeries_addEvent","AreaRangeSeries_defined","AreaRangeSeries_extend","isArray","AreaRangeSeries_isNumber","AreaRangeSeries_pick","AreaRangeSeries_merge","AreaRangeSeries","toYData","point","highToXY","xy","postTranslate","rectPlotX","getGraphPath","points","highPoints","highAreaPoints","connectEnds","connectNulls","pointShim","step","highAreaPoint","yBottom","doCurve","isNull","polarPlotY","lowerPath","left","right","higherPath","higherAreaPath","linePath","graphPath","areaPath","isArea","xMap","drawDataLabels","up","upperDataLabelOptions","lowerDataLabelOptions","data","originalDataLabels","dataLabelOptions","dataLabels","enabled","xHigh","yHigh","xLow","yLow","hasDataLabels","inside","_plotY","dataLabel","dataLabelUpper","below","align","verticalAlign","label","alignDataLabel","originalMarkerSettings","marker","symbol","lowMarker","drawPoints","pointLength","origProps","negative","zone","threshold","zones","getZone","hasMarkerChanged","oldOptions","oldMarker","height","width","defaultOptions","lineWidth","tooltip","pointFormat","trackByArea","pointArrayMap","join","translate","dataModify","modifyValue","order","tooltipPos","pos","posHigh","deferTranslatePolar","pointValKey","setStackedPoints","registerSeriesType","AreaRange_AreaRangeSeries","spline","splineProto","AreaSplineRangeSeries_merge","AreaSplineRangeSeries_extend","AreaSplineRangeSeries","getPointSpline","highcharts_Series_types_column_commonjs_highcharts_Series_types_column_commonjs2_highcharts_Series_types_column_root_Highcharts_Series_types_column_","highcharts_Series_types_column_commonjs_highcharts_Series_types_column_commonjs2_highcharts_Series_types_column_root_Highcharts_Series_types_column_default","BoxPlotSeries_noop","crisp","BoxPlotSeries_extend","BoxPlotSeries_merge","BoxPlotSeries_pick","BoxPlotSeries_relativeLength","BoxPlotSeries","pointAttribs","getWhiskerPair","halfWidth","stemX","upperWhiskerLength","lowerWhiskerLength","strokeWidth","whiskers","getWhisker","xLen","yPos","halfLen","crispedYPos","highPlot","lowPlot","q1Plot","q3Plot","medianPlot","medianPath","boxPath","doQuartiles","whiskerLength","verb","shapeArgs","boxAttr","stemAttr","whiskersAttr","medianAttr","color","pointWhiskerLength","stem","addClass","box","medianShape","stroke","stemColor","stemWidth","dashstyle","stemDashStyle","dashStyle","whiskerColor","whiskerWidth","whiskerDashStyle","fill","fillColor","lineColor","boxDashStyle","medianColor","medianWidth","medianDashStyle","pointXOffset","barW","boxStrokeWidth","q1","median","q3","BoxPlot_BoxPlotSeries","Bubble_BubbleLegendDefaults","connectorClassName","connectorColor","connectorDistance","connectorWidth","labels","allowOverlap","format","formatter","style","fontSize","maxSize","minSize","legendIndex","ranges","sizeBy","sizeByAbsoluteValue","zThreshold","highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_","highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default","highcharts_Templating_commonjs_highcharts_Templating_commonjs2_highcharts_Templating_root_Highcharts_Templating_","highcharts_Templating_commonjs_highcharts_Templating_commonjs2_highcharts_Templating_root_Highcharts_Templating_default","parse","BubbleLegendItem_noop","arrayMax","arrayMin","BubbleLegendItem_isNumber","BubbleLegendItem_merge","BubbleLegendItem_pick","stableSort","Bubble_BubbleLegendItem","legend","addToLegend","items","drawLegendSymbol","connectorSpace","itemDistance","legendItem","bubbleLegend","autoRanges","b","maxLabel","getMaxLabelSize","radius","movementX","labelWidth","labelHeight","seriesIndex","baseline","bubbleAttribs","connectorAttribs","labelAttribs","rtl","fillOpacity","range","setOpacity","getRangeRadius","bubbleSeries","zMax","zMin","getRadius","symbols","connectors","bubbleItems","css","itemStyle","translateX","translateY","renderRange","hideOverlappingLabels","mainRange","labelsOptions","elementCenter","absoluteRadius","abs","labelsAlign","posX","posY","crispMovement","connectorLength","circle","colorIndex","crispLine","text","formatLabel","position","getBBox","placed","alignAttr","labelSize","numberFormatter","index","newOpacity","oldOpacity","show","hide","getRanges","rangesOptions","zData","minZ","maxZ","isBubble","ignoreSeries","getColumn","displayNegative","reverse","predictBubbleSizes","legendOptions","floating","horizontal","layout","lastLineHeight","plotSizeX","plotSizeY","pxSizes","getPxExtremes","minPxSize","maxPxSize","plotSize","calculatedSize","updateRanges","bubbleLegendOptions","correctSizes","composed","BubbleLegendComposition_addEvent","objectEach","pushUnique","wrap","chartDrawChartBox","proceed","callback","bubbleSizes","getVisibleBubbleSeriesIndex","allItems","item","getMargins","setScale","updateNames","ticks","tick","isNew","isNewLabel","retranslateItems","getLinesHeights","dataTable","rowCount","lines","lastLine","legendItem2","j","itemHeight","onLegendAfterGetAllItems","bubbleSeriesIndex","destroyItem","onLegendItemClick","status","defaultPrevented","orgTranslateX","orgTranslateY","actualLine","round","Bubble_BubbleLegendComposition","LegendClass","highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_","highcharts_Point_commonjs_highcharts_Point_commonjs2_highcharts_Point_root_Highcharts_Point_default","scatter","ScatterPoint","BubblePoint_extend","BubblePoint","computedSize","ttBelow","BubbleSeries_color","BubbleSeries_composed","BubbleSeries_noop","Series","BubbleSeries_columnProto","ScatterSeries","BubbleSeries_addEvent","BubbleSeries_arrayMax","BubbleSeries_arrayMin","clamp","BubbleSeries_extend","BubbleSeries_isNumber","BubbleSeries_merge","BubbleSeries_pick","BubbleSeries_pushUnique","onAxisFoundExtremes","axisLength","isXAxis","pxMin","pxMax","transA","hasActiveSeries","bubblePadding","reserveSpace","allowZoomOutside","onPoint","getRadii","radii","dataMin","logarithmic","keys","onAxisAfterRender","tickPositions","dataMax","categories","type","find","tickCount","BubbleSeries","AxisClass","animate","animationLimit","hasRendered","markerAttribs","animation","yData","zExtremes","bubbleZExtremes","valid","otherSeries","getZExtremes","yValue","sizeByArea","zRange","hasData","markerOptions","translateBubble","zoneAxis","z","dlBox","getPxSize","isPercent","parseInt","searchKDTree","compareX","suppliedPointEvaluator","suppliedBSideCheckEvaluator","p1","p2","comparisonProp","p1Dist","p2Dist","ret","flip","states","hover","radiusPlus","softThreshold","halo","turboThreshold","applyZones","keysAffectYAxis","parallelArrays","trackerGroups","specialGroup","target","ColumnRangePoint_columnProto","arearange","ColumnRangePoint_AreaRangePoint","ColumnRangePoint_extend","ColumnRangePoint_isNumber","ColumnRangePoint","ColumnRangeSeries_noop","ColumnRangeSeries_AreaRangeSeries","ColumnSeries","ColumnRangeSeries_columnProto","ColumnRangeSeries_addEvent","ColumnRangeSeries_clamp","ColumnRangeSeries_extend","ColumnRangeSeries_isNumber","ColumnRangeSeries_merge","ColumnRangeSeries_pick","ColumnRangeSeries","stacking","translate3dPoints","translate3dShapes","afterColumnTranslate","heightDifference","startAngleRad","isRadial","safeDistance","chartWidth","chartHeight","minPointLength","rectPlotY","barX","shapeType","arc","pointWidth","crispCol","where","pointRange","legendSymbol","adjustForMissingColumns","drawGraph","getSymbol","drawTracker","getColumnMetrics","ColumnPyramidSeries_ColumnSeries","ColumnPyramidSeries_clamp","ColumnPyramidSeries_merge","ColumnPyramidSeries_pick","ColumnPyramidSeries","dense","closestPointRange","metrics","offset","translatedThreshold","getThreshold","seriesBarW","pointPadding","barY","barH","stackTotal","stackHeight","topXwidth","bottomXwidth","invBarPos","x3","x4","centerInCategory","total","topPointY","ErrorBarSeries_AreaRangeSeries","ErrorBarSeries_addEvent","ErrorBarSeries_merge","ErrorBarSeries_extend","ErrorBarSeries","linkedParent","columnMetrics","valKey","grouping","linkedTo","Point","GaugeSeries_noop","GaugeSeries_Series","GaugeSeries_ColumnSeries","GaugeSeries_clamp","GaugeSeries_isNumber","GaugeSeries_extend","GaugeSeries_merge","GaugeSeries_pick","pInt","GaugeSeries_defined","GaugeSeries","generatePoints","dialOptions","dial","baseLength","rearLength","baseWidth","topWidth","overshoot","rotation","endAngleRad","percentage","pivot","pivotOptions","plotGroup","seriesGroup","clip","clipRect","setData","processData","crop","defer","headerFormat","showInLegend","fixedBox","forceDL","noSharedTooltip","DragNodesComposition_composed","DragNodesComposition_addEvent","DragNodesComposition_pushUnique","onChartLoad","mousedownUnbinder","mousemoveUnbinder","mouseupUnbinder","container","event","hasDraggableNodes","draggable","onMouseDown","onMouseMove","ownerDocument","onMouseUp","Series_DragNodesComposition","normalizedEvent","pointer","normalize","fixedPosition","inDragMode","newPlotX","newPlotY","diffX","diffY","graphLayoutsLookup","hasDragged","redrawHalo","restartSimulation","enableSimulation","fixedDraggable","setAnimation","GraphLayoutComposition_composed","GraphLayoutComposition_addEvent","GraphLayoutComposition_pushUnique","onChartAfterPrint","updateSimulation","onChartBeforePrint","onChartPredraw","stop","onChartRender","systemsStable","afterRender","layoutStep","maxIterations","isFinite","temperature","isStable","beforeStep","Series_GraphLayoutComposition","integrations","layouts","highcharts_Chart_commonjs_highcharts_Chart_commonjs2_highcharts_Chart_root_Highcharts_Chart_","highcharts_Chart_commonjs_highcharts_Chart_commonjs2_highcharts_Chart_root_Highcharts_Chart_default","bubble","PackedBubblePoint_BubblePoint","PackedBubble_PackedBubblePoint","removeElementFromCollection","nodes","firePointEvent","seriesOptions","isParentNode","parentNode","temp","allowPointSelect","select","getSelectedPoints","getSelectedParentNodes","PackedBubbleSeriesDefaults_isNumber","Networkgraph_VerletIntegration","attractive","link","force","distanceXY","massFactor","getMass","translatedX","diffTemperature","translatedY","fromNode","degree","toNode","attractiveForceFunction","k","barycenter","gravitationalConstant","xFactor","yFactor","top","node","mass","getK","integrate","friction","maxSpeed","prevX","prevY","frictionX","dispX","frictionY","dispY","signX","signY","vectorLength","repulsive","factor","repulsiveForceFunction","PackedBubbleIntegration_noop","PackedBubbleIntegration","centerX","centerY","splitSeries","repNode","Networkgraph_EulerIntegration","distanceR","getDegree","phi","QuadTreeNode","body","isEmpty","isInternal","boxSize","divideBox","halfHeight","getBoxPosition","insert","depth","newQuadTreeNode","NaN","updateMassAndCenter","pointMass","Networkgraph_QuadTree","maxDepth","isRoot","calculateMassAndCenter","visitNodeRecursive","insertNodes","beforeCallback","afterCallback","goFurther","qtNode","win","ReingoldFruchtermanLayout_clamp","ReingoldFruchtermanLayout_defined","isFunction","ReingoldFruchtermanLayout_fireEvent","ReingoldFruchtermanLayout_pick","ReingoldFruchtermanLayout","currentStep","initialRendering","links","simulation","euler","verlet","setInitialRendering","integration","attractiveForce","repulsiveForce","approximation","enable","forces","initPositions","finishedAnimating","setK","resetSimulation","allSeries","forceName","createQuadTree","quadTree","anyLayout","applyLimits","coolDown","startTemperature","prevSystemTemperature","systemTemperature","getSystemTemperature","cancelAnimationFrame","requestAnimationFrame","setArea","w","h","linkLength","addElementsToCollection","elements","collection","element","indexOf","clear","forcedStop","setMaxIterations","setTemperature","setDiffTemperature","initialPositions","setCircularPositions","setRandomPositions","rootNodes","linksTo","visitedNodes","initialPositionRadius","addToNodes","linksFrom","id","sortedNodes","rootNode","iEnd","cos","sin","nodesLength","unrandom","rand","floor","name","args","barycenterForces","getBarycenter","systemMass","barnesHutApproximation","quadNode","goDeeper","getDistXY","theta","repulsiveForces","attractiveForces","applyLimitBox","temperatureStep","vector","getDistR","nodeA","nodeB","xDist","yDist","absX","absY","Networkgraph_ReingoldFruchtermanLayout","PackedBubbleLayout_addEvent","PackedBubbleLayout_pick","chartGetSelectedParentNodes","selectedParentsNodes","selected","onChartBeforeRedraw","allDataPoints","PackedBubbleLayout","packedbubble","calculateParentRadius","tempDiff","neighbours","seriesInteraction","parentNodeLimit","parentNodeRadius","SimulationSeriesUtilities_merge","syncTimeout","animObject","highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_","highcharts_SVGElement_commonjs_highcharts_SVGElement_commonjs2_highcharts_SVGElement_root_Highcharts_SVGElement_default","TextPath_deg2rad","TextPath_addEvent","TextPath_merge","uniqueKey","TextPath_defined","TextPath_extend","setTextPath","textPathOptions","attributes","dy","startOffset","textAnchor","url","textWrapper","textPath","undo","textPathId","textAttribs","dx","transform","children","slice","tagName","href","added","textCache","buildText","setPolygon","bBox","tp","querySelector","polygon","fontMetrics","descender","lineCleanerRegex","RegExp","innerHTML","replace","split","numOfLines","appendTopAndBottom","charIndex","positionOfChar","getRotationOfChar","cosRot","sinRot","lineIndex","lineLen","line","lineCharIndex","srcCharIndex","lower","upper","getStartPositionOfChar","unshift","charPos","getEndPositionOfChar","drawTextPath","labelOptions","formatPrefix","useHTML","getDataLabelPath","dataLabelPath","PackedBubbleSeries_color","PackedBubbleSeries_noop","seriesProto","PackedBubbleSeries_BubbleSeries","initDataLabels","PackedBubbleSeries_initDataLabels","initDataLabelsDefer","PackedBubbleSeries_initDataLabelsDefer","dlOptions","dataLabelsGroup","initDataLabelsGroup","opacity","getPlotBox","layoutAlgorithm","deferDataLabels","PackedBubbleSeries_addEvent","PackedBubbleSeries_clamp","PackedBubbleSeries_defined","PackedBubbleSeries_extend","PackedBubbleSeries_fireEvent","PackedBubbleSeries_isArray","PackedBubbleSeries_isNumber","PackedBubbleSeries_merge","PackedBubbleSeries_pick","Extensions_TextPath","SVGElementClass","svgElementProto","PackedBubbleSeries","parentNodeMass","PackedBubble_PackedBubbleLayout","accumulateAllPoints","is","valueData","addLayout","layoutOptions","layoutType","chartOptions","graphLayoutsStorage","forExport","collisionNmb","addSeriesLayout","parentNodeOptions","seriesLayout","parentNodeLayout","createParentNodes","seriesBox","calculateZExtremes","valMin","Infinity","valMax","checkOverlap","bubble1","bubble2","PackedBubblePoint","nodeAdded","parentMarkerOptions","brighten","p","normal","dataLabelOnNull","deferLayout","nodeMarker","parentOptions","parentAttribs","parentNodesGroup","graph","div","getPointRadius","useSimulation","extremes","allDataPointsLength","minRadius","maxRadius","eventsToUnbind","isDirty","dnPoint","removed","dragBetweenSeries","addPoint","remove","placeBubbles","positionBubble","bubblePos","stage","calculatedBubble","arr","sortedArr","sort","stages","rawPositions","resizeRadius","hasParentMarker","lastBubble","newOrigin","nextBubble","asin","acos","alfa","beta","finalAngle","gamma","cosA","sinA","minX","maxX","minY","maxY","POSITIVE_INFINITY","NEGATIVE_INFINITY","spaceRatio","smallerDimension","setVisible","parentNodeFormatter","parentNodeTextPath","padding","transition","axisTypes","invertible","isCartesian","requireSorting","indexateNodes","searchPoint","PolygonSeries_noop","PolygonSeries_AreaSeries","LineSeries","PolygonSeries_ScatterSeries","PolygonSeries_extend","PolygonSeries_merge","PolygonSeries","stickyTracking","followPointer","Axis_RadialAxisDefaults","circular","gridLineWidth","maxPadding","minPadding","showLastLabel","tickLength","radial","gridLineInterpolation","title","radialGauge","endOnTick","minorGridLineWidth","minorTickInterval","minorTickLength","minorTickPosition","minorTickWidth","startOnTick","tickPixelInterval","tickPosition","tickWidth","RadialAxis_composed","RadialAxis_noop","RadialAxis_addEvent","RadialAxis_correctFloat","RadialAxis_defined","RadialAxis_extend","RadialAxis_fireEvent","isObject","RadialAxis_merge","RadialAxis_pick","RadialAxis_pushUnique","RadialAxis_relativeLength","RadialAxis_wrap","beforeSetTickPositions","autoConnect","isCircular","userMax","createLabelCollector","map","Boolean","createLabelCollectorHidden","getCrosshairPosition","getPosition","getLinePath","_lineWidth","r","horiz","open","innerR","xBounds","yBounds","angleRad","getOffset","axisProto","axisOffset","side","radiusToPixels","percentRegex","fullRadius","xOnPerimeter","getPlotLinePath","transFrom","transTo","isCrosshair","paneInnerR","innerRatio","otherAxis","crossPos","translatedVal","getTitlePosition","titleOptions","middle","modify","setAxisSize","setAxisTranslation","onAxisAfterInit","isHidden","paneOptions","fullCircle","normalizedStart","normalizedEnd","onAxisAutoLabelAlign","preventDefault","onAxisDestroy","labelCollectors","labelCollector","onAxisInit","isX","paneIndex","userOptions","radialAxis","renderHidden","setCategories","setTitle","onAxisInitialAxisTranslation","onTickAfterGetLabelPosition","labelBBox","correctAngle","labelYPosCorrection","optionsY","centerSlot","labelDir","reducedAngle1","reducedAngle2","tickInterval","onTickAfterGetPosition","onGlobalSetOptions","radialDefaultOptions","sector","minPixelPadding","minPointOffset","defaultPolarOptions","stackLabels","reversedStacks","plotBands","wrapTickGetMarkPath","endPoint","TickClass","Axis_RadialAxis","PolarComposition_animObject","PolarComposition_composed","PolarComposition_addEvent","PolarComposition_defined","PolarComposition_isNumber","PolarComposition_merge","PolarComposition_pick","PolarComposition_pushUnique","PolarComposition_relativeLength","PolarComposition_splat","PolarComposition_uniqueKey","PolarComposition_wrap","onChartAfterDrawChartBox","onChartAfterInit","onChartCreateAxes","onPointerGetSelectionBox","linearAxis","result","onPointerGetSelectionMarkerAttrs","mouseDownX","mouseDownY","attrs","zoomHor","paneRadRange","pathStart","toValue","pathEnd","getExtremes","trimPath","zoomVert","Array","innerPath","outerPath","onSeriesAfterInit","PolarAdditions","isRadialSeries","isRadialBar","onSeriesAfterTranslate","kdByAngle","searchPointByAngleOrInverted","findNearestPointBy","toXY","hasParallelCoordinates","reversed","MIN_VALUE","hasClipCircleSetter","circ","clipCircle","clipPath","createElement","defs","wrapper","setClip","searchKDTreePoint","clientX","lastTick","firstTick","wrapChartGet","wrapColumnSeriesAlignDataLabel","alignTo","labelPos","onAfterColumnTranslate","visibleRange","thresholdAngleRad","yMin","yMax","pointX","pointY","stackValues","stack","stacks","stackKey","getStackIndicator","brOption","brValue","wrapLineSeriesGetGraphPath","firstValid","popLastPoint","pop","wrapPointerGetCoordinates","wrapPointerPinch","wrapSeriesAnimate","markerGroup","pie","scaleX","scaleY","wrapSplineSeriesGetPointSpline","segment","rightContX","getConnectors","calculateNeighbours","leftContX","leftContY","rightContY","jointAngle","addedNumber","prevPointInd","nextPointInd","previousPoint","nextPoint","previousX","previousY","nextX","nextY","smoothing","dLControlPoint","dRControlPoint","leftContAngle","prevPointCont","wrapPointPos","chartCoordinates","destroyed","SeriesClass","PointClass","AreaSplineRangeSeriesClass","ColumnSeriesClass","LineSeriesClass","SplineSeriesClass","Pane_Pane","pointProto","pointerProto","areaSplineRangeProto","polarPlotX","highcharts_StackItem_commonjs_highcharts_StackItem_commonjs2_highcharts_StackItem_root_Highcharts_StackItem_","highcharts_StackItem_commonjs_highcharts_StackItem_commonjs2_highcharts_StackItem_root_Highcharts_StackItem_default","WaterfallAxis_composed","WaterfallAxis_addEvent","WaterfallAxis_objectEach","WaterfallAxis_pushUnique","onAxisAfterBuildStacks","waterfall","changed","alreadyChanged","stackLabelOptions","renderStackTotals","Composition","serie","waterfallStacks","stackTotalGroup","dummyStackItem","stackItem","Axis_WaterfallAxis","WaterfallPoint_isNumber","WaterfallPoint","getClassName","isSum","isIntermediateSum","WaterfallSeries_ColumnSeries","WaterfallSeries_LineSeries","WaterfallSeries_addEvent","WaterfallSeries_arrayMax","WaterfallSeries_arrayMin","WaterfallSeries_correctFloat","WaterfallSeries_crisp","WaterfallSeries_extend","WaterfallSeries_isNumber","WaterfallSeries_merge","WaterfallSeries_objectEach","WaterfallSeries_pick","ownProp","WaterfallSeries","processedYData","subSum","sum","dataLength","pt","upColor","getCrispPath","graphLineWidth","reversedXAxis","reversedYAxis","prevPoint","prevBox","prevStack","isPos","prevStackX","connectorThreshold","minPointLengthOffset","nextLast","last","seriesThreshold","xData","xLength","stackThreshold","interSum","actualStackX","totalYVal","actualSum","prevSum","statesLen","posTotal","negTotal","xPoint","yVal","calculateStackState","firstS","nextS","sInx","sOff","stackState","actualStack","stateIndex","absolutePos","absoluteNeg","stackedYNeg","stackedYPos","stackX","lineWidthPlus","showLine","halfMinPointLength","previousIntermediate","hPos","setOffset","tooltipY","isPointInside","crispBottom","G","Bubble_BubbleSeries","Axis","Chart","Legend","PackedBubble_PackedBubbleSeries","Pointer","PolarComposition","Tick","areasplinerange","Waterfall_WaterfallSeries"],"mappings":"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"}

Hacked By AnonymousFox1.0, Coded By AnonymousFox