{"version":3,"sources":[""],"sourcesContent":["/**\n * @license Highcharts JS v11.2.0 (2023-10-30)\n *\n * Highcharts Drilldown module\n *\n * Author: Torstein Honsi\n * License: www.highcharts.com/license\n *\n */\n(function (factory) {\n if (typeof module === 'object' && module.exports) {\n factory['default'] = factory;\n module.exports = factory;\n } else if (typeof define === 'function' && define.amd) {\n define('highcharts/modules/drilldown', ['highcharts'], function (Highcharts) {\n factory(Highcharts);\n factory.Highcharts = Highcharts;\n return factory;\n });\n } else {\n factory(typeof Highcharts !== 'undefined' ? Highcharts : undefined);\n }\n}(function (Highcharts) {\n 'use strict';\n var _modules = Highcharts ? Highcharts._modules : {};\n function _registerModule(obj, path, args, fn) {\n if (!obj.hasOwnProperty(path)) {\n obj[path] = fn.apply(null, args);\n\n if (typeof CustomEvent === 'function') {\n window.dispatchEvent(new CustomEvent(\n 'HighchartsModuleLoaded',\n { detail: { path: path, module: obj[path] } }\n ));\n }\n }\n }\n _registerModule(_modules, 'Extensions/Breadcrumbs/BreadcrumbsDefaults.js', [], function () {\n /* *\n *\n * Highcharts Breadcrumbs module\n *\n * Authors: Grzegorz Blachlinski, Karol Kolodziej\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n /* *\n *\n * Constants\n *\n * */\n /**\n * @optionparent lang\n */\n const lang = {\n /**\n * @since 10.0.0\n * @product highcharts\n *\n * @private\n */\n mainBreadcrumb: 'Main'\n };\n /**\n * Options for breadcrumbs. Breadcrumbs general options are defined in\n * `navigation.breadcrumbs`. Specific options for drilldown are set in\n * `drilldown.breadcrumbs` and for tree-like series traversing, in\n * `plotOptions[series].breadcrumbs`.\n *\n * @since 10.0.0\n * @product highcharts\n * @optionparent navigation.breadcrumbs\n */\n const options = {\n /**\n * A collection of attributes for the buttons. The object takes SVG\n * attributes like `fill`, `stroke`, `stroke-width`, as well as `style`,\n * a collection of CSS properties for the text.\n *\n * The object can also be extended with states, so you can set\n * presentational options for `hover`, `select` or `disabled` button\n * states.\n *\n * @sample {highcharts} highcharts/breadcrumbs/single-button\n * Themed, single button\n *\n * @type {Highcharts.SVGAttributes}\n * @since 10.0.0\n * @product highcharts\n */\n buttonTheme: {\n /** @ignore */\n fill: 'none',\n /** @ignore */\n height: 18,\n /** @ignore */\n padding: 2,\n /** @ignore */\n 'stroke-width': 0,\n /** @ignore */\n zIndex: 7,\n /** @ignore */\n states: {\n select: {\n fill: 'none'\n }\n },\n style: {\n color: \"#334eff\" /* Palette.highlightColor80 */\n }\n },\n /**\n * The default padding for each button and separator in each direction.\n *\n * @type {number}\n * @since 10.0.0\n */\n buttonSpacing: 5,\n /**\n * Fires when clicking on the breadcrumbs button. Two arguments are\n * passed to the function. First breadcrumb button as an SVG element.\n * Second is the breadcrumbs class, containing reference to the chart,\n * series etc.\n *\n * ```js\n * click: function(button, breadcrumbs) {\n * console.log(button);\n * }\n * ```\n *\n * Return false to stop default buttons click action.\n *\n * @type {Highcharts.BreadcrumbsClickCallbackFunction}\n * @since 10.0.0\n * @apioption navigation.breadcrumbs.events.click\n */\n /**\n * When the breadcrumbs are floating, the plot area will not move to\n * make space for it. By default, the chart will not make space for the\n * buttons. This property won't work when positioned in the middle.\n *\n * @sample highcharts/breadcrumbs/single-button\n * Floating button\n *\n * @type {boolean}\n * @since 10.0.0\n */\n floating: false,\n /**\n * A format string for the breadcrumbs button. Variables are enclosed by\n * curly brackets. Available values are passed in the declared point\n * options.\n *\n * @type {string|undefined}\n * @since 10.0.0\n * @default undefined\n * @sample {highcharts} highcharts/breadcrumbs/format Display custom\n * values in breadcrumb button.\n */\n format: void 0,\n /**\n * Callback function to format the breadcrumb text from scratch.\n *\n * @type {Highcharts.BreadcrumbsFormatterCallbackFunction}\n * @since 10.0.0\n * @default undefined\n * @apioption navigation.breadcrumbs.formatter\n */\n /**\n * What box to align the button to. Can be either `plotBox` or\n * `spacingBox`.\n *\n * @type {Highcharts.ButtonRelativeToValue}\n * @default plotBox\n * @since 10.0.0\n * @product highcharts highmaps\n */\n relativeTo: 'plotBox',\n /**\n * Whether to reverse the order of buttons. This is common in Arabic\n * and Hebrew.\n *\n * @sample {highcharts} highcharts/breadcrumbs/rtl\n * Breadcrumbs in RTL\n *\n * @type {boolean}\n * @since 10.2.0\n */\n rtl: false,\n /**\n * Positioning for the button row. The breadcrumbs buttons will be\n * aligned properly for the default chart layout (title, subtitle,\n * legend, range selector) for the custom chart layout set the position\n * properties.\n *\n * @sample {highcharts} highcharts/breadcrumbs/single-button\n * Single, right aligned button\n *\n * @type {Highcharts.BreadcrumbsAlignOptions}\n * @since 10.0.0\n * @product highcharts highmaps\n */\n position: {\n /**\n * Horizontal alignment of the breadcrumbs buttons.\n *\n * @type {Highcharts.AlignValue}\n */\n align: 'left',\n /**\n * Vertical alignment of the breadcrumbs buttons.\n *\n * @type {Highcharts.VerticalAlignValue}\n */\n verticalAlign: 'top',\n /**\n * The X offset of the breadcrumbs button group.\n *\n * @type {number}\n */\n x: 0,\n /**\n * The Y offset of the breadcrumbs button group. When `undefined`,\n * and `floating` is `false`, the `y` position is adapted so that\n * the breadcrumbs are rendered outside the target area.\n *\n * @type {number|undefined}\n */\n y: void 0\n },\n /**\n * Options object for Breadcrumbs separator.\n *\n * @since 10.0.0\n */\n separator: {\n /**\n * @type {string}\n * @since 10.0.0\n * @product highcharts\n */\n text: '/',\n /**\n * CSS styles for the breadcrumbs separator.\n *\n * In styled mode, the breadcrumbs separators are styled by the\n * `.highcharts-separator` rule with its different states.\n * @type {Highcharts.CSSObject}\n * @since 10.0.0\n */\n style: {\n color: \"#666666\" /* Palette.neutralColor60 */,\n fontSize: '0.8em'\n }\n },\n /**\n * Show full path or only a single button.\n *\n * @sample {highcharts} highcharts/breadcrumbs/single-button\n * Single, styled button\n *\n * @type {boolean}\n * @since 10.0.0\n */\n showFullPath: true,\n /**\n * CSS styles for all breadcrumbs.\n *\n * In styled mode, the breadcrumbs buttons are styled by the\n * `.highcharts-breadcrumbs-buttons .highcharts-button` rule with its\n * different states.\n *\n * @type {Highcharts.SVGAttributes}\n * @since 10.0.0\n */\n style: {},\n /**\n * Whether to use HTML to render the breadcrumbs items texts.\n *\n * @type {boolean}\n * @since 10.0.0\n */\n useHTML: false,\n /**\n * The z index of the breadcrumbs group.\n *\n * @type {number}\n * @since 10.0.0\n */\n zIndex: 7\n };\n /* *\n *\n * Default Export\n *\n * */\n const BreadcrumbsDefaults = {\n lang,\n options\n };\n\n return BreadcrumbsDefaults;\n });\n _registerModule(_modules, 'Extensions/Breadcrumbs/Breadcrumbs.js', [_modules['Extensions/Breadcrumbs/BreadcrumbsDefaults.js'], _modules['Core/Chart/Chart.js'], _modules['Core/Templating.js'], _modules['Core/Utilities.js']], function (BreadcrumbsDefaults, Chart, F, U) {\n /* *\n *\n * Highcharts Breadcrumbs module\n *\n * Authors: Grzegorz Blachlinski, Karol Kolodziej\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n const { format } = F;\n const { addEvent, defined, extend, fireEvent, isString, merge, objectEach, pick } = U;\n /* *\n *\n * Constants\n *\n * */\n const composedMembers = [];\n /* *\n *\n * Functions\n *\n * */\n /**\n * Shift the drillUpButton to make the space for resetZoomButton, #8095.\n * @private\n */\n function onChartAfterShowResetZoom() {\n const chart = this;\n if (chart.breadcrumbs) {\n const bbox = chart.resetZoomButton &&\n chart.resetZoomButton.getBBox(), breadcrumbsOptions = chart.breadcrumbs.options;\n if (bbox &&\n breadcrumbsOptions.position.align === 'right' &&\n breadcrumbsOptions.relativeTo === 'plotBox') {\n chart.breadcrumbs.alignBreadcrumbsGroup(-bbox.width - breadcrumbsOptions.buttonSpacing);\n }\n }\n }\n /**\n * Remove resize/afterSetExtremes at chart destroy.\n * @private\n */\n function onChartDestroy() {\n if (this.breadcrumbs) {\n this.breadcrumbs.destroy();\n this.breadcrumbs = void 0;\n }\n }\n /**\n * Logic for making space for the buttons above the plot area\n * @private\n */\n function onChartGetMargins() {\n const breadcrumbs = this.breadcrumbs;\n if (breadcrumbs &&\n !breadcrumbs.options.floating &&\n breadcrumbs.level) {\n const breadcrumbsOptions = breadcrumbs.options, buttonTheme = breadcrumbsOptions.buttonTheme, breadcrumbsHeight = ((buttonTheme.height || 0) +\n 2 * (buttonTheme.padding || 0) +\n breadcrumbsOptions.buttonSpacing), verticalAlign = breadcrumbsOptions.position.verticalAlign;\n if (verticalAlign === 'bottom') {\n this.marginBottom = (this.marginBottom || 0) + breadcrumbsHeight;\n breadcrumbs.yOffset = breadcrumbsHeight;\n }\n else if (verticalAlign !== 'middle') {\n this.plotTop += breadcrumbsHeight;\n breadcrumbs.yOffset = -breadcrumbsHeight;\n }\n else {\n breadcrumbs.yOffset = void 0;\n }\n }\n }\n /**\n * @private\n */\n function onChartRedraw() {\n this.breadcrumbs && this.breadcrumbs.redraw();\n }\n /**\n * After zooming out, shift the drillUpButton to the previous position, #8095.\n * @private\n */\n function onChartSelection(event) {\n if (event.resetSelection === true &&\n this.breadcrumbs) {\n this.breadcrumbs.alignBreadcrumbsGroup();\n }\n }\n /* *\n *\n * Class\n *\n * */\n /**\n * The Breadcrumbs class\n *\n * @private\n * @class\n * @name Highcharts.Breadcrumbs\n *\n * @param {Highcharts.Chart} chart\n * Chart object\n * @param {Highcharts.Options} userOptions\n * User options\n */\n class Breadcrumbs {\n /* *\n *\n * Functions\n *\n * */\n static compose(ChartClass, highchartsDefaultOptions) {\n if (U.pushUnique(composedMembers, ChartClass)) {\n addEvent(Chart, 'destroy', onChartDestroy);\n addEvent(Chart, 'afterShowResetZoom', onChartAfterShowResetZoom);\n addEvent(Chart, 'getMargins', onChartGetMargins);\n addEvent(Chart, 'redraw', onChartRedraw);\n addEvent(Chart, 'selection', onChartSelection);\n }\n if (U.pushUnique(composedMembers, highchartsDefaultOptions)) {\n // Add language support.\n extend(highchartsDefaultOptions.lang, BreadcrumbsDefaults.lang);\n }\n }\n /* *\n *\n * Constructor\n *\n * */\n constructor(chart, userOptions) {\n this.elementList = {};\n this.isDirty = true;\n this.level = 0;\n this.list = [];\n const chartOptions = merge(chart.options.drilldown &&\n chart.options.drilldown.drillUpButton, Breadcrumbs.defaultOptions, chart.options.navigation && chart.options.navigation.breadcrumbs, userOptions);\n this.chart = chart;\n this.options = chartOptions || {};\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Update Breadcrumbs properties, like level and list.\n *\n * @requires modules/breadcrumbs\n *\n * @function Highcharts.Breadcrumbs#updateProperties\n * @param {Highcharts.Breadcrumbs} this\n * Breadcrumbs class.\n */\n updateProperties(list) {\n this.setList(list);\n this.setLevel();\n this.isDirty = true;\n }\n /**\n * Set breadcrumbs list.\n * @function Highcharts.Breadcrumbs#setList\n *\n * @requires modules/breadcrumbs\n *\n * @param {Highcharts.Breadcrumbs} this\n * Breadcrumbs class.\n * @param {Highcharts.BreadcrumbsOptions} list\n * Breadcrumbs list.\n */\n setList(list) {\n this.list = list;\n }\n /**\n * Calcule level on which chart currently is.\n *\n * @requires modules/breadcrumbs\n *\n * @function Highcharts.Breadcrumbs#setLevel\n * @param {Highcharts.Breadcrumbs} this\n * Breadcrumbs class.\n */\n setLevel() {\n this.level = this.list.length && this.list.length - 1;\n }\n /**\n * Get Breadcrumbs level\n *\n * @requires modules/breadcrumbs\n *\n * @function Highcharts.Breadcrumbs#getLevel\n * @param {Highcharts.Breadcrumbs} this\n * Breadcrumbs class.\n */\n getLevel() {\n return this.level;\n }\n /**\n * Default button text formatter.\n *\n * @requires modules/breadcrumbs\n *\n * @function Highcharts.Breadcrumbs#getButtonText\n * @param {Highcharts.Breadcrumbs} this\n * Breadcrumbs class.\n * @param {Highcharts.Breadcrumbs} breadcrumb\n * Breadcrumb.\n * @return {string}\n * Formatted text.\n */\n getButtonText(breadcrumb) {\n const breadcrumbs = this, chart = breadcrumbs.chart, breadcrumbsOptions = breadcrumbs.options, lang = chart.options.lang, textFormat = pick(breadcrumbsOptions.format, breadcrumbsOptions.showFullPath ?\n '{level.name}' : '← {level.name}'), defaultText = lang && pick(lang.drillUpText, lang.mainBreadcrumb);\n let returnText = breadcrumbsOptions.formatter &&\n breadcrumbsOptions.formatter(breadcrumb) ||\n format(textFormat, { level: breadcrumb.levelOptions }, chart) || '';\n if (((isString(returnText) &&\n !returnText.length) ||\n returnText === '← ') &&\n defined(defaultText)) {\n returnText = !breadcrumbsOptions.showFullPath ?\n '← ' + defaultText :\n defaultText;\n }\n return returnText;\n }\n /**\n * Redraw.\n *\n * @requires modules/breadcrums\n *\n * @function Highcharts.Breadcrumbs#redraw\n * @param {Highcharts.Breadcrumbs} this\n * Breadcrumbs class.\n */\n redraw() {\n if (this.isDirty) {\n this.render();\n }\n if (this.group) {\n this.group.align();\n }\n this.isDirty = false;\n }\n /**\n * Create a group, then draw breadcrumbs together with the separators.\n *\n * @requires modules/breadcrumbs\n *\n * @function Highcharts.Breadcrumbs#render\n * @param {Highcharts.Breadcrumbs} this\n * Breadcrumbs class.\n */\n render() {\n const breadcrumbs = this, chart = breadcrumbs.chart, breadcrumbsOptions = breadcrumbs.options;\n // A main group for the breadcrumbs.\n if (!breadcrumbs.group && breadcrumbsOptions) {\n breadcrumbs.group = chart.renderer\n .g('breadcrumbs-group')\n .addClass('highcharts-no-tooltip highcharts-breadcrumbs')\n .attr({\n zIndex: breadcrumbsOptions.zIndex\n })\n .add();\n }\n // Draw breadcrumbs.\n if (breadcrumbsOptions.showFullPath) {\n this.renderFullPathButtons();\n }\n else {\n this.renderSingleButton();\n }\n this.alignBreadcrumbsGroup();\n }\n /**\n * Draw breadcrumbs together with the separators.\n *\n * @requires modules/breadcrumbs\n *\n * @function Highcharts.Breadcrumbs#renderFullPathButtons\n * @param {Highcharts.Breadcrumbs} this\n * Breadcrumbs class.\n */\n renderFullPathButtons() {\n // Make sure that only one type of button is visible.\n this.destroySingleButton();\n this.resetElementListState();\n this.updateListElements();\n this.destroyListElements();\n }\n /**\n * Render Single button - when showFullPath is not used. The button is\n * similar to the old drillUpButton\n *\n * @requires modules/breadcrumbs\n *\n * @function Highcharts.Breadcrumbs#renderSingleButton\n * @param {Highcharts.Breadcrumbs} this Breadcrumbs class.\n */\n renderSingleButton() {\n const breadcrumbs = this, chart = breadcrumbs.chart, list = breadcrumbs.list, breadcrumbsOptions = breadcrumbs.options, buttonSpacing = breadcrumbsOptions.buttonSpacing;\n // Make sure that only one type of button is visible.\n this.destroyListElements();\n // Draw breadcrumbs. Inital position for calculating the breadcrumbs\n // group.\n const posX = breadcrumbs.group ?\n breadcrumbs.group.getBBox().width :\n buttonSpacing, posY = buttonSpacing;\n const previousBreadcrumb = list[list.length - 2];\n if (!chart.drillUpButton && (this.level > 0)) {\n chart.drillUpButton = breadcrumbs.renderButton(previousBreadcrumb, posX, posY);\n }\n else if (chart.drillUpButton) {\n if (this.level > 0) {\n // Update button.\n this.updateSingleButton();\n }\n else {\n this.destroySingleButton();\n }\n }\n }\n /**\n * Update group position based on align and it's width.\n *\n * @requires modules/breadcrumbs\n *\n * @function Highcharts.Breadcrumbs#renderSingleButton\n * @param {Highcharts.Breadcrumbs} this\n * Breadcrumbs class.\n */\n alignBreadcrumbsGroup(xOffset) {\n const breadcrumbs = this;\n if (breadcrumbs.group) {\n const breadcrumbsOptions = breadcrumbs.options, buttonTheme = breadcrumbsOptions.buttonTheme, positionOptions = breadcrumbsOptions.position, alignTo = (breadcrumbsOptions.relativeTo === 'chart' ||\n breadcrumbsOptions.relativeTo === 'spacingBox' ?\n void 0 :\n 'scrollablePlotBox'), bBox = breadcrumbs.group.getBBox(), additionalSpace = 2 * (buttonTheme.padding || 0) +\n breadcrumbsOptions.buttonSpacing;\n // Store positionOptions\n positionOptions.width = bBox.width + additionalSpace;\n positionOptions.height = bBox.height + additionalSpace;\n const newPositions = merge(positionOptions);\n // Add x offset if specified.\n if (xOffset) {\n newPositions.x += xOffset;\n }\n if (breadcrumbs.options.rtl) {\n newPositions.x += positionOptions.width;\n }\n newPositions.y = pick(newPositions.y, this.yOffset, 0);\n breadcrumbs.group.align(newPositions, true, alignTo);\n }\n }\n /**\n * Render a button.\n *\n * @requires modules/breadcrums\n *\n * @function Highcharts.Breadcrumbs#renderButton\n * @param {Highcharts.Breadcrumbs} this\n * Breadcrumbs class.\n * @param {Highcharts.Breadcrumbs} breadcrumb\n * Current breadcrumb\n * @param {Highcharts.Breadcrumbs} posX\n * Initial horizontal position\n * @param {Highcharts.Breadcrumbs} posY\n * Initial vertical position\n * @return {SVGElement|void}\n * Returns the SVG button\n */\n renderButton(breadcrumb, posX, posY) {\n const breadcrumbs = this, chart = this.chart, breadcrumbsOptions = breadcrumbs.options, buttonTheme = merge(breadcrumbsOptions.buttonTheme);\n const button = chart.renderer\n .button(breadcrumbs.getButtonText(breadcrumb), posX, posY, function (e) {\n // Extract events from button object and call\n const buttonEvents = breadcrumbsOptions.events &&\n breadcrumbsOptions.events.click;\n let callDefaultEvent;\n if (buttonEvents) {\n callDefaultEvent = buttonEvents.call(breadcrumbs, e, breadcrumb);\n }\n // (difference in behaviour of showFullPath and drillUp)\n if (callDefaultEvent !== false) {\n // For single button we are not going to the button\n // level, but the one level up\n if (!breadcrumbsOptions.showFullPath) {\n e.newLevel = breadcrumbs.level - 1;\n }\n else {\n e.newLevel = breadcrumb.level;\n }\n fireEvent(breadcrumbs, 'up', e);\n }\n }, buttonTheme)\n .addClass('highcharts-breadcrumbs-button')\n .add(breadcrumbs.group);\n if (!chart.styledMode) {\n button.attr(breadcrumbsOptions.style);\n }\n return button;\n }\n /**\n * Render a separator.\n *\n * @requires modules/breadcrums\n *\n * @function Highcharts.Breadcrumbs#renderSeparator\n * @param {Highcharts.Breadcrumbs} this\n * Breadcrumbs class.\n * @param {Highcharts.Breadcrumbs} posX\n * Initial horizontal position\n * @param {Highcharts.Breadcrumbs} posY\n * Initial vertical position\n * @return {Highcharts.SVGElement}\n * Returns the SVG button\n */\n renderSeparator(posX, posY) {\n const breadcrumbs = this, chart = this.chart, breadcrumbsOptions = breadcrumbs.options, separatorOptions = breadcrumbsOptions.separator;\n const separator = chart.renderer\n .label(separatorOptions.text, posX, posY, void 0, void 0, void 0, false)\n .addClass('highcharts-breadcrumbs-separator')\n .add(breadcrumbs.group);\n if (!chart.styledMode) {\n separator.css(separatorOptions.style);\n }\n return separator;\n }\n /**\n * Update.\n * @function Highcharts.Breadcrumbs#update\n *\n * @requires modules/breadcrumbs\n *\n * @param {Highcharts.Breadcrumbs} this\n * Breadcrumbs class.\n * @param {Highcharts.BreadcrumbsOptions} options\n * Breadcrumbs class.\n * @param {boolean} redraw\n * Redraw flag\n */\n update(options) {\n merge(true, this.options, options);\n this.destroy();\n this.isDirty = true;\n }\n /**\n * Update button text when the showFullPath set to false.\n * @function Highcharts.Breadcrumbs#updateSingleButton\n *\n * @requires modules/breadcrumbs\n *\n * @param {Highcharts.Breadcrumbs} this\n * Breadcrumbs class.\n */\n updateSingleButton() {\n const chart = this.chart, currentBreadcrumb = this.list[this.level - 1];\n if (chart.drillUpButton) {\n chart.drillUpButton.attr({\n text: this.getButtonText(currentBreadcrumb)\n });\n }\n }\n /**\n * Destroy the chosen breadcrumbs group\n *\n * @requires modules/breadcrumbs\n *\n * @function Highcharts.Breadcrumbs#destroy\n * @param {Highcharts.Breadcrumbs} this\n * Breadcrumbs class.\n */\n destroy() {\n this.destroySingleButton();\n // Destroy elements one by one. It's necessary beacause\n // g().destroy() does not remove added HTML\n this.destroyListElements(true);\n // Then, destroy the group itself.\n if (this.group) {\n this.group.destroy();\n }\n this.group = void 0;\n }\n /**\n * Destroy the elements' buttons and separators.\n *\n * @requires modules/breadcrumbs\n *\n * @function Highcharts.Breadcrumbs#destroyListElements\n * @param {Highcharts.Breadcrumbs} this\n * Breadcrumbs class.\n */\n destroyListElements(force) {\n const elementList = this.elementList;\n objectEach(elementList, (element, level) => {\n if (force ||\n !elementList[level].updated) {\n element = elementList[level];\n element.button && element.button.destroy();\n element.separator && element.separator.destroy();\n delete element.button;\n delete element.separator;\n delete elementList[level];\n }\n });\n if (force) {\n this.elementList = {};\n }\n }\n /**\n * Destroy the single button if exists.\n *\n * @requires modules/breadcrumbs\n *\n * @function Highcharts.Breadcrumbs#destroySingleButton\n * @param {Highcharts.Breadcrumbs} this\n * Breadcrumbs class.\n */\n destroySingleButton() {\n if (this.chart.drillUpButton) {\n this.chart.drillUpButton.destroy();\n this.chart.drillUpButton = void 0;\n }\n }\n /**\n * Reset state for all buttons in elementList.\n *\n * @requires modules/breadcrumbs\n *\n * @function Highcharts.Breadcrumbs#resetElementListState\n * @param {Highcharts.Breadcrumbs} this\n * Breadcrumbs class.\n */\n resetElementListState() {\n objectEach(this.elementList, (element) => {\n element.updated = false;\n });\n }\n /**\n * Update rendered elements inside the elementList.\n *\n * @requires modules/breadcrumbs\n *\n * @function Highcharts.Breadcrumbs#updateListElements\n *\n * @param {Highcharts.Breadcrumbs} this\n * Breadcrumbs class.\n */\n updateListElements() {\n const breadcrumbs = this, elementList = breadcrumbs.elementList, buttonSpacing = breadcrumbs.options.buttonSpacing, posY = buttonSpacing, list = breadcrumbs.list, rtl = breadcrumbs.options.rtl, rtlFactor = rtl ? -1 : 1, updateXPosition = function (element, spacing) {\n return rtlFactor * element.getBBox().width +\n rtlFactor * spacing;\n }, adjustToRTL = function (element, posX, posY) {\n element.translate(posX - element.getBBox().width, posY);\n };\n // Inital position for calculating the breadcrumbs group.\n let posX = breadcrumbs.group ?\n updateXPosition(breadcrumbs.group, buttonSpacing) :\n buttonSpacing, currentBreadcrumb, breadcrumb;\n for (let i = 0, iEnd = list.length; i < iEnd; ++i) {\n const isLast = i === iEnd - 1;\n let button, separator;\n breadcrumb = list[i];\n if (elementList[breadcrumb.level]) {\n currentBreadcrumb = elementList[breadcrumb.level];\n button = currentBreadcrumb.button;\n // Render a separator if it was not created before.\n if (!currentBreadcrumb.separator &&\n !isLast) {\n // Add spacing for the next separator\n posX += rtlFactor * buttonSpacing;\n currentBreadcrumb.separator =\n breadcrumbs.renderSeparator(posX, posY);\n if (rtl) {\n adjustToRTL(currentBreadcrumb.separator, posX, posY);\n }\n posX += updateXPosition(currentBreadcrumb.separator, buttonSpacing);\n }\n else if (currentBreadcrumb.separator &&\n isLast) {\n currentBreadcrumb.separator.destroy();\n delete currentBreadcrumb.separator;\n }\n elementList[breadcrumb.level].updated = true;\n }\n else {\n // Render a button.\n button = breadcrumbs.renderButton(breadcrumb, posX, posY);\n if (rtl) {\n adjustToRTL(button, posX, posY);\n }\n posX += updateXPosition(button, buttonSpacing);\n // Render a separator.\n if (!isLast) {\n separator = breadcrumbs.renderSeparator(posX, posY);\n if (rtl) {\n adjustToRTL(separator, posX, posY);\n }\n posX += updateXPosition(separator, buttonSpacing);\n }\n elementList[breadcrumb.level] = {\n button,\n separator,\n updated: true\n };\n }\n if (button) {\n button.setState(isLast ? 2 : 0);\n }\n }\n }\n }\n /* *\n *\n * Static Properties\n *\n * */\n Breadcrumbs.defaultOptions = BreadcrumbsDefaults.options;\n /* *\n *\n * Default Export\n *\n * */\n /* *\n *\n * API Declarations\n *\n * */\n /**\n * Callback function to react on button clicks.\n *\n * @callback Highcharts.BreadcrumbsClickCallbackFunction\n *\n * @param {Highcharts.Event} event\n * Event.\n *\n * @param {Highcharts.BreadcrumbOptions} options\n * Breadcrumb options.\n *\n * @param {global.Event} e\n * Event arguments.\n */\n /**\n * Callback function to format the breadcrumb text from scratch.\n *\n * @callback Highcharts.BreadcrumbsFormatterCallbackFunction\n *\n * @param {Highcharts.Event} event\n * Event.\n *\n * @param {Highcharts.BreadcrumbOptions} options\n * Breadcrumb options.\n *\n * @return {string}\n * Formatted text or false\n */\n /**\n * Options for the one breadcrumb.\n *\n * @interface Highcharts.BreadcrumbOptions\n */\n /**\n * Level connected to a specific breadcrumb.\n * @name Highcharts.BreadcrumbOptions#level\n * @type {number}\n */\n /**\n * Options for series or point connected to a specific breadcrumb.\n * @name Highcharts.BreadcrumbOptions#levelOptions\n * @type {SeriesOptions|PointOptionsObject}\n */\n /**\n * Options for aligning breadcrumbs group.\n *\n * @interface Highcharts.BreadcrumbsAlignOptions\n */\n /**\n * Align of a Breadcrumb group.\n * @default right\n * @name Highcharts.BreadcrumbsAlignOptions#align\n * @type {AlignValue}\n */\n /**\n * Vertical align of a Breadcrumb group.\n * @default top\n * @name Highcharts.BreadcrumbsAlignOptions#verticalAlign\n * @type {VerticalAlignValue}\n */\n /**\n * X offset of a Breadcrumbs group.\n * @name Highcharts.BreadcrumbsAlignOptions#x\n * @type {number}\n */\n /**\n * Y offset of a Breadcrumbs group.\n * @name Highcharts.BreadcrumbsAlignOptions#y\n * @type {number}\n */\n /**\n * Options for all breadcrumbs.\n *\n * @interface Highcharts.BreadcrumbsOptions\n */\n /**\n * Button theme.\n * @name Highcharts.BreadcrumbsOptions#buttonTheme\n * @type { SVGAttributes | undefined }\n */\n (''); // Keeps doclets above in JS file\n\n return Breadcrumbs;\n });\n _registerModule(_modules, 'Extensions/Drilldown/DrilldownDefaults.js', [], function () {\n /* *\n *\n * Highcharts Drilldown module\n *\n * Author: Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n /* *\n *\n * API Options\n *\n * */\n /**\n * Options for drill down, the concept of inspecting increasingly high\n * resolution data through clicking on chart items like columns or pie slices.\n *\n * The drilldown feature requires the drilldown.js file to be loaded,\n * found in the modules directory of the download package, or online at\n * [code.highcharts.com/modules/drilldown.js\n * ](https://code.highcharts.com/modules/drilldown.js).\n *\n * @sample {highcharts} highcharts/series-organization/drilldown\n * Organization chart drilldown\n *\n * @product highcharts highmaps\n * @requires modules/drilldown\n * @optionparent drilldown\n */\n const DrilldownDefaults = {\n /**\n * When this option is false, clicking a single point will drill down\n * all points in the same category, equivalent to clicking the X axis\n * label.\n *\n * @sample {highcharts} highcharts/drilldown/allowpointdrilldown-false/\n * Don't allow point drilldown\n *\n * @type {boolean}\n * @default true\n * @since 4.1.7\n * @product highcharts\n * @apioption drilldown.allowPointDrilldown\n */\n /**\n * Options for the breadcrumbs, the navigation at the top leading the way\n * up through the drilldown levels.\n *\n * @since 10.0.0\n * @product highcharts\n * @extends navigation.breadcrumbs\n * @optionparent drilldown.breadcrumbs\n */\n /**\n * An array of series configurations for the drill down. Each series\n * configuration uses the same syntax as the [series](#series) option set.\n * These drilldown series are hidden by default. The drilldown series is\n * linked to the parent series' point by its `id`.\n *\n * @type {Array}\n * @since 3.0.8\n * @product highcharts highmaps\n * @apioption drilldown.series\n */\n /**\n * Additional styles to apply to the X axis label for a point that\n * has drilldown data. By default it is underlined and blue to invite\n * to interaction.\n *\n * In styled mode, active label styles can be set with the\n * `.highcharts-drilldown-axis-label` class.\n *\n * @sample {highcharts} highcharts/drilldown/labels/\n * Label styles\n *\n * @type {Highcharts.CSSObject}\n * @default { \"cursor\": \"pointer\", \"color\": \"#003399\", \"fontWeight\": \"bold\", \"textDecoration\": \"underline\" }\n * @since 3.0.8\n * @product highcharts highmaps\n */\n activeAxisLabelStyle: {\n /** @ignore-option */\n cursor: 'pointer',\n /** @ignore-option */\n color: \"#0022ff\" /* Palette.highlightColor100 */,\n /** @ignore-option */\n fontWeight: 'bold',\n /** @ignore-option */\n textDecoration: 'underline'\n },\n /**\n * Additional styles to apply to the data label of a point that has\n * drilldown data. By default it is underlined and blue to invite to\n * interaction.\n *\n * In styled mode, active data label styles can be applied with the\n * `.highcharts-drilldown-data-label` class.\n *\n * @sample {highcharts} highcharts/drilldown/labels/\n * Label styles\n *\n * @type {Highcharts.CSSObject}\n * @default { \"cursor\": \"pointer\", \"color\": \"#003399\", \"fontWeight\": \"bold\", \"textDecoration\": \"underline\" }\n * @since 3.0.8\n * @product highcharts highmaps\n */\n activeDataLabelStyle: {\n cursor: 'pointer',\n color: \"#0022ff\" /* Palette.highlightColor100 */,\n fontWeight: 'bold',\n textDecoration: 'underline'\n },\n /**\n * Set the animation for all drilldown animations. Animation of a drilldown\n * occurs when drilling between a column point and a column series,\n * or a pie slice and a full pie series. Drilldown can still be used\n * between series and points of different types, but animation will\n * not occur.\n *\n * The animation can either be set as a boolean or a configuration\n * object. If `true`, it will use the 'swing' jQuery easing and a duration\n * of 500 ms. If used as a configuration object, the following properties\n * are supported:\n *\n * - `duration`: The duration of the animation in milliseconds.\n *\n * - `easing`: A string reference to an easing function set on the `Math`\n * object. See\n * [the easing demo](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/plotoptions/series-animation-easing/).\n *\n * @type {boolean|Highcharts.AnimationOptionsObject}\n * @since 3.0.8\n * @product highcharts highmaps\n */\n animation: {\n /** @ignore-option */\n duration: 500\n },\n /**\n *\n * Options for the drill up button that appears when drilling down on a\n * series. The text for the button is defined in\n * [lang.drillUpText](#lang.drillUpText).\n *\n * This option is deprecated since 9.3.2, use `drilldown.breadcrumbs`\n * instead.\n *\n * @sample highcharts/breadcrumbs/single-button\n * Breadcrumbs set up like a legacy button\n * @sample {highcharts} highcharts/drilldown/drillupbutton/ Drill up button\n * @sample {highmaps} highcharts/drilldown/drillupbutton/ Drill up button\n *\n * @since 3.0.8\n * @product highcharts highmaps\n *\n * @deprecated\n */\n drillUpButton: {\n /**\n * What box to align the button to. Can be either `plotBox` or\n * `spacingBox`.\n *\n * @type {Highcharts.ButtonRelativeToValue}\n * @default plotBox\n * @since 3.0.8\n * @product highcharts highmaps\n * @apioption drilldown.drillUpButton.relativeTo\n */\n /**\n * A collection of attributes for the button. The object takes SVG\n * attributes like `fill`, `stroke`, `stroke-width` or `r`, the border\n * radius. The theme also supports `style`, a collection of CSS\n * properties for the text. Equivalent attributes for the hover state\n * are given in `theme.states.hover`.\n *\n * In styled mode, drill-up button styles can be applied with the\n * `.highcharts-drillup-button` class.\n *\n * @sample {highcharts} highcharts/drilldown/drillupbutton/\n * Button theming\n * @sample {highmaps} highcharts/drilldown/drillupbutton/\n * Button theming\n *\n * @type {Object}\n * @since 3.0.8\n * @product highcharts highmaps\n * @apioption drilldown.drillUpButton.theme\n */\n /**\n * Positioning options for the button within the `relativeTo` box.\n * Available properties are `x`, `y`, `align` and `verticalAlign`.\n *\n * @type {Highcharts.AlignObject}\n * @since 3.0.8\n * @product highcharts highmaps\n */\n position: {\n /**\n * Vertical alignment of the button.\n *\n * @type {Highcharts.VerticalAlignValue}\n * @default top\n * @product highcharts highmaps\n * @apioption drilldown.drillUpButton.position.verticalAlign\n */\n /**\n * Horizontal alignment.\n *\n * @type {Highcharts.AlignValue}\n */\n align: 'right',\n /**\n * The X offset of the button.\n */\n x: -10,\n /**\n * The Y offset of the button.\n */\n y: 10\n }\n },\n /**\n * Enable or disable zooming into a region of clicked map point you want to\n * drill into. If mapZooming is set to false the drilldown/drillup\n * animations only fade in/fade out without zooming to a specific map point.\n *\n * @sample maps/demo/map-drilldown-preloaded/\n * Map drilldown without async maps loading\n *\n * @type {boolean}\n * @default true\n * @since 11.0.0\n * @product highmaps\n * @apioption drilldown.mapZooming\n */\n mapZooming: true\n };\n /**\n * Fires when a drilldown point is clicked, before the new series is added. This\n * event is also utilized for async drilldown, where the seriesOptions are not\n * added by option, but rather loaded async. Note that when clicking a category\n * label to trigger multiple series drilldown, one `drilldown` event is\n * triggered per point in the category.\n *\n * Event arguments:\n *\n * - `category`: If a category label was clicked, which index.\n *\n * - `originalEvent`: The original browser event (usually click) that triggered\n * the drilldown.\n *\n * - `point`: The originating point.\n *\n * - `points`: If a category label was clicked, this array holds all points\n * corresponding to the category.\n *\n * - `seriesOptions`: Options for the new series.\n *\n * @sample {highcharts} highcharts/drilldown/async/\n * Async drilldown\n *\n * @type {Highcharts.DrilldownCallbackFunction}\n * @since 3.0.8\n * @product highcharts highmaps\n * @context Highcharts.Chart\n * @requires modules/drilldown\n * @apioption chart.events.drilldown\n */\n /**\n * Fires when drilling up from a drilldown series.\n *\n * @type {Highcharts.DrillupCallbackFunction}\n * @since 3.0.8\n * @product highcharts highmaps\n * @context Highcharts.Chart\n * @requires modules/drilldown\n * @apioption chart.events.drillup\n */\n /**\n * In a chart with multiple drilldown series, this event fires after all the\n * series have been drilled up.\n *\n * @type {Highcharts.DrillupAllCallbackFunction}\n * @since 4.2.4\n * @product highcharts highmaps\n * @context Highcharts.Chart\n * @requires modules/drilldown\n * @apioption chart.events.drillupall\n */\n /**\n * The `id` of a series in the [drilldown.series](#drilldown.series) array to\n * use for a drilldown for this point.\n *\n * @sample {highcharts} highcharts/drilldown/basic/\n * Basic drilldown\n *\n * @type {string}\n * @since 3.0.8\n * @product highcharts\n * @requires modules/drilldown\n * @apioption series.line.data.drilldown\n */\n /**\n * The text for the button that appears when drilling down, linking back\n * to the parent series. The parent series' name is inserted for\n * `{series.name}`.\n *\n * @deprecated\n * @since 3.0.8\n * @product highcharts highmaps\n * @requires modules/drilldown\n * @apioption lang.drillUpText\n */\n ''; // keep doclets above detached in JS file\n /* *\n *\n * Default Export\n *\n * */\n\n return DrilldownDefaults;\n });\n _registerModule(_modules, 'Extensions/Drilldown/DrilldownSeries.js', [_modules['Core/Animation/AnimationUtilities.js'], _modules['Core/Utilities.js']], function (A, U) {\n /* *\n *\n * Highcharts Drilldown module\n *\n * Author: Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n const { animObject } = A;\n const { addEvent, extend, fireEvent, merge, pick, pushUnique, syncTimeout } = U;\n /* *\n *\n * Constants\n *\n * */\n const composedMembers = [];\n /* *\n *\n * Functions\n *\n * */\n /** @private */\n function applyCursorCSS(element, cursor, addClass, styledMode) {\n element[addClass ? 'addClass' : 'removeClass']('highcharts-drilldown-point');\n if (!styledMode) {\n element.css({ cursor: cursor });\n }\n }\n /** @private */\n function columnAnimateDrilldown(init) {\n const series = this, chart = series.chart, drilldownLevels = chart.drilldownLevels, animationOptions = animObject((chart.options.drilldown || {}).animation), xAxis = this.xAxis, styledMode = chart.styledMode;\n if (!init) {\n let animateFrom;\n (drilldownLevels || []).forEach((level) => {\n if (series.options._ddSeriesId ===\n level.lowerSeriesOptions._ddSeriesId) {\n animateFrom = level.shapeArgs;\n if (!styledMode && animateFrom) {\n // Add the point colors to animate from\n animateFrom.fill = level.color;\n }\n }\n });\n animateFrom.x += pick(xAxis.oldPos, xAxis.pos) - xAxis.pos;\n series.points.forEach((point) => {\n const animateTo = point.shapeArgs;\n if (!styledMode) {\n // Add the point colors to animate to\n animateTo.fill = point.color;\n }\n if (point.graphic) {\n point.graphic\n .attr(animateFrom)\n .animate(extend(point.shapeArgs, { fill: point.color || series.color }), animationOptions);\n }\n });\n if (chart.drilldown) {\n chart.drilldown.fadeInGroup(this.dataLabelsGroup);\n }\n // Reset to prototype\n delete this.animate;\n }\n }\n /**\n * When drilling up, pull out the individual point graphics from the lower\n * series and animate them into the origin point in the upper series.\n *\n * @private\n * @function Highcharts.ColumnSeries#animateDrillupFrom\n * @param {Highcharts.DrilldownLevelObject} level\n * Level container\n * @return {void}\n */\n function columnAnimateDrillupFrom(level) {\n const series = this, animationOptions = animObject((series.chart.options.drilldown || {}).animation);\n // Cancel mouse events on the series group (#2787)\n (series.trackerGroups || []).forEach((key) => {\n // we don't always have dataLabelsGroup\n if (series[key]) {\n series[key].on('mouseover');\n }\n });\n let group = series.group;\n // For 3d column series all columns are added to one group\n // so we should not delete the whole group. #5297\n const removeGroup = group !== series.chart.columnGroup;\n if (removeGroup) {\n delete series.group;\n }\n this.points.forEach((point) => {\n const graphic = point.graphic, animateTo = level.shapeArgs;\n if (graphic && animateTo) {\n const complete = () => {\n graphic.destroy();\n if (group && removeGroup) {\n group = group.destroy();\n }\n };\n delete point.graphic;\n if (!series.chart.styledMode) {\n animateTo.fill = level.color;\n }\n if (animationOptions.duration) {\n graphic.animate(animateTo, merge(animationOptions, { complete: complete }));\n }\n else {\n graphic.attr(animateTo);\n complete();\n }\n }\n });\n }\n /**\n * When drilling up, keep the upper series invisible until the lower series has\n * moved into place.\n *\n * @private\n * @function Highcharts.ColumnSeries#animateDrillupTo\n * @param {boolean} [init=false]\n * Whether to initialize animation\n */\n function columnAnimateDrillupTo(init) {\n const series = this, level = series.drilldownLevel;\n if (!init) {\n // First hide all items before animating in again\n series.points.forEach((point) => {\n const dataLabel = point.dataLabel;\n if (point.graphic) { // #3407\n point.graphic.hide();\n }\n if (dataLabel) {\n // The data label is initially hidden, make sure it is not faded\n // in (#6127)\n dataLabel.hidden = dataLabel.attr('visibility') === 'hidden';\n if (!dataLabel.hidden) {\n dataLabel.hide();\n dataLabel.connector?.hide();\n }\n }\n });\n // Do dummy animation on first point to get to complete\n syncTimeout(() => {\n if (series.points) { // May be destroyed in the meantime, #3389\n // Unable to drillup with nodes, #13711\n let pointsWithNodes = [];\n series.data.forEach((el) => {\n pointsWithNodes.push(el);\n });\n if (series.nodes) {\n pointsWithNodes = pointsWithNodes.concat(series.nodes);\n }\n pointsWithNodes.forEach((point, i) => {\n // Fade in other points\n const verb = i === (level && level.pointIndex) ? 'show' : 'fadeIn', inherit = verb === 'show' ? true : void 0, dataLabel = point.dataLabel;\n if (point.graphic && // #3407\n point.visible // Don't show if invisible (#18303)\n ) {\n point.graphic[verb](inherit);\n }\n if (dataLabel && !dataLabel.hidden) { // #6127\n dataLabel.fadeIn(); // #7384\n dataLabel.connector?.fadeIn();\n }\n });\n }\n }, Math.max(series.chart.options.drilldown.animation.duration - 50, 0));\n // Reset to prototype\n delete this.animate;\n }\n }\n /** @private */\n function compose(SeriesClass, seriesTypes) {\n const { column: ColumnSeriesClass, map: MapSeriesClass, pie: PieSeriesClass } = seriesTypes, PointClass = SeriesClass.prototype.pointClass;\n if (ColumnSeriesClass && pushUnique(composedMembers, ColumnSeriesClass)) {\n const columnProto = ColumnSeriesClass.prototype;\n columnProto.animateDrilldown = columnAnimateDrilldown;\n columnProto.animateDrillupFrom = columnAnimateDrillupFrom;\n columnProto.animateDrillupTo = columnAnimateDrillupTo;\n }\n if (MapSeriesClass && pushUnique(composedMembers, MapSeriesClass)) {\n const mapProto = MapSeriesClass.prototype;\n mapProto.animateDrilldown = mapAnimateDrilldown;\n mapProto.animateDrillupFrom = mapAnimateDrillupFrom;\n mapProto.animateDrillupTo = mapAnimateDrillupTo;\n }\n if (PieSeriesClass && pushUnique(composedMembers, PieSeriesClass)) {\n const pieProto = PieSeriesClass.prototype;\n pieProto.animateDrilldown = pieAnimateDrilldown;\n pieProto.animateDrillupFrom = columnAnimateDrillupFrom;\n pieProto.animateDrillupTo = columnAnimateDrillupTo;\n }\n if (pushUnique(composedMembers, PointClass)) {\n const pointProto = PointClass.prototype;\n addEvent(PointClass, 'afterInit', onPointAfterInit);\n addEvent(PointClass, 'afterSetState', onPointAfterSetState);\n addEvent(PointClass, 'update', onPointUpdate);\n pointProto.doDrilldown = pointDoDrilldown;\n pointProto.runDrilldown = pointRunDrilldown;\n }\n if (pushUnique(composedMembers, SeriesClass)) {\n addEvent(SeriesClass, 'afterDrawDataLabels', onSeriesAfterDrawDataLabels);\n addEvent(SeriesClass, 'afterDrawTracker', onSeriesAfterDrawTracker);\n }\n }\n /**\n * Animate in the new series.\n * @private\n */\n function mapAnimateDrilldown(init) {\n const series = this, chart = series.chart, group = series.group;\n if (chart &&\n group &&\n series.options &&\n chart.options.drilldown &&\n chart.options.drilldown.animation) {\n // Initialize the animation\n if (init && chart.mapView) {\n group.attr({\n opacity: 0.01\n });\n chart.mapView.allowTransformAnimation = false;\n // Stop duplicating and overriding animations\n series.options.inactiveOtherPoints = true;\n series.options.enableMouseTracking = false;\n // Run the animation\n }\n else {\n group.animate({\n opacity: 1\n }, chart.options.drilldown.animation, () => {\n if (series.options) {\n series.options.inactiveOtherPoints = false;\n series.options.enableMouseTracking =\n pick((series.userOptions &&\n series.userOptions.enableMouseTracking), true);\n series.isDirty = true;\n chart.redraw();\n }\n });\n if (chart.drilldown) {\n chart.drilldown.fadeInGroup(this.dataLabelsGroup);\n }\n }\n }\n }\n /**\n * When drilling up, pull out the individual point graphics from the\n * lower series and animate them into the origin point in the upper\n * series.\n * @private\n */\n function mapAnimateDrillupFrom() {\n const series = this, chart = series.chart;\n if (chart && chart.mapView) {\n chart.mapView.allowTransformAnimation = false;\n }\n // stop duplicating and overriding animations\n if (series.options) {\n series.options.inactiveOtherPoints = true;\n }\n }\n /**\n * When drilling up, keep the upper series invisible until the lower\n * series has moved into place.\n * @private\n */\n function mapAnimateDrillupTo(init) {\n const series = this, chart = series.chart, group = series.group;\n if (chart && group) {\n // Initialize the animation\n if (init) {\n group.attr({\n opacity: 0.01\n });\n // stop duplicating and overriding animations\n if (series.options) {\n series.options.inactiveOtherPoints = true;\n }\n // Run the animation\n }\n else {\n group.animate({ opacity: 1 }, (chart.options.drilldown || {}).animation);\n if (chart.drilldown) {\n chart.drilldown.fadeInGroup(series.dataLabelsGroup);\n }\n }\n }\n }\n /**\n * On initialization of each point, identify its label and make it clickable.\n * Also, provide a list of points associated to that label.\n * @private\n */\n function onPointAfterInit() {\n const point = this;\n if (point.drilldown && !point.unbindDrilldownClick) {\n // Add the click event to the point\n point.unbindDrilldownClick = addEvent(point, 'click', onPointClick);\n }\n return point;\n }\n /** @private */\n function onPointAfterSetState() {\n const point = this, series = point.series, styledMode = series.chart.styledMode;\n if (point.drilldown && series.halo && point.state === 'hover') {\n applyCursorCSS(series.halo, 'pointer', true, styledMode);\n }\n else if (series.halo) {\n applyCursorCSS(series.halo, 'auto', false, styledMode);\n }\n }\n /** @private */\n function onPointClick(e) {\n const point = this, series = point.series;\n if (series.xAxis &&\n (series.chart.options.drilldown || {}).allowPointDrilldown ===\n false) {\n // #5822, x changed\n series.xAxis.drilldownCategory(point.x, e);\n }\n else {\n point.runDrilldown(void 0, void 0, e);\n }\n }\n /** @private */\n function onPointUpdate(e) {\n const point = this, options = e.options || {};\n if (options.drilldown && !point.unbindDrilldownClick) {\n // Add the click event to the point\n point.unbindDrilldownClick = addEvent(point, 'click', onPointClick);\n }\n else if (!options.drilldown &&\n options.drilldown !== void 0 &&\n point.unbindDrilldownClick) {\n point.unbindDrilldownClick = point.unbindDrilldownClick();\n }\n }\n /** @private */\n function onSeriesAfterDrawDataLabels() {\n const series = this, chart = series.chart, css = chart.options.drilldown.activeDataLabelStyle, renderer = chart.renderer, styledMode = chart.styledMode;\n for (const point of series.points) {\n const dataLabelsOptions = point.options.dataLabels, pointCSS = pick(point.dlOptions, dataLabelsOptions && dataLabelsOptions.style, {});\n if (point.drilldown && point.dataLabel) {\n if (css.color === 'contrast' && !styledMode) {\n pointCSS.color = renderer.getContrast(point.color || series.color);\n }\n if (dataLabelsOptions && dataLabelsOptions.color) {\n pointCSS.color = dataLabelsOptions.color;\n }\n point.dataLabel\n .addClass('highcharts-drilldown-data-label');\n if (!styledMode) {\n point.dataLabel\n .css(css)\n .css(pointCSS);\n }\n }\n }\n }\n /**\n * Mark the trackers with a pointer.\n * @private\n */\n function onSeriesAfterDrawTracker() {\n const series = this, styledMode = series.chart.styledMode;\n for (const point of series.points) {\n if (point.drilldown && point.graphic) {\n applyCursorCSS(point.graphic, 'pointer', true, styledMode);\n }\n }\n }\n /** @private */\n function pieAnimateDrilldown(init) {\n const series = this, chart = series.chart, points = series.points, level = chart.drilldownLevels[chart.drilldownLevels.length - 1], animationOptions = chart.options.drilldown.animation;\n if (series.is('item')) {\n animationOptions.duration = 0;\n }\n // Unable to drill down in the horizontal item series #13372\n if (series.center) {\n const animateFrom = level.shapeArgs, start = animateFrom.start, angle = animateFrom.end - start, startAngle = angle / series.points.length, styledMode = chart.styledMode;\n if (!init) {\n let animateTo, point;\n for (let i = 0, iEnd = points.length; i < iEnd; ++i) {\n point = points[i];\n animateTo = point.shapeArgs;\n if (!styledMode) {\n animateFrom.fill = level.color;\n animateTo.fill = point.color;\n }\n if (point.graphic) {\n point.graphic.attr(merge(animateFrom, {\n start: start + i * startAngle,\n end: start + (i + 1) * startAngle\n }))[animationOptions ? 'animate' : 'attr'](animateTo, animationOptions);\n }\n }\n if (chart.drilldown) {\n chart.drilldown.fadeInGroup(series.dataLabelsGroup);\n }\n // Reset to prototype\n delete series.animate;\n }\n }\n }\n /**\n * Perform drilldown on a point instance. The [drilldown](https://api.highcharts.com/highcharts/series.line.data.drilldown)\n * property must be set on the point options.\n *\n * To drill down multiple points in the same category, use\n * `Axis.drilldownCategory` instead.\n *\n * @requires modules/drilldown\n *\n * @function Highcharts.Point#doDrilldown\n *\n * @sample {highcharts} highcharts/drilldown/programmatic\n * Programmatic drilldown\n */\n function pointDoDrilldown() {\n this.runDrilldown();\n }\n /** @private */\n function pointRunDrilldown(holdRedraw, category, originalEvent) {\n const point = this, series = point.series, chart = series.chart, drilldown = chart.options.drilldown || {};\n let i = (drilldown.series || []).length, seriesOptions;\n if (!chart.ddDupes) {\n chart.ddDupes = [];\n }\n // Reset the color and symbol counters after every drilldown. (#19134)\n chart.colorCounter = chart.symbolCounter = 0;\n while (i-- && !seriesOptions) {\n if (drilldown.series &&\n drilldown.series[i].id === point.drilldown &&\n point.drilldown &&\n chart.ddDupes.indexOf(point.drilldown) === -1) {\n seriesOptions = drilldown.series[i];\n chart.ddDupes.push(point.drilldown);\n }\n }\n // Fire the event. If seriesOptions is undefined, the implementer can check\n // for seriesOptions, and call addSeriesAsDrilldown async if necessary.\n fireEvent(chart, 'drilldown', {\n point,\n seriesOptions: seriesOptions,\n category: category,\n originalEvent: originalEvent,\n points: (typeof category !== 'undefined' &&\n series.xAxis.getDDPoints(category).slice(0))\n }, (e) => {\n const chart = e.point.series && e.point.series.chart, seriesOptions = e.seriesOptions;\n if (chart && seriesOptions) {\n if (holdRedraw) {\n chart.addSingleSeriesAsDrilldown(e.point, seriesOptions);\n }\n else {\n chart.addSeriesAsDrilldown(e.point, seriesOptions);\n }\n }\n });\n }\n /* *\n *\n * Default Export\n *\n * */\n const DrilldownSeries = {\n compose\n };\n\n return DrilldownSeries;\n });\n _registerModule(_modules, 'Extensions/Drilldown/Drilldown.js', [_modules['Core/Animation/AnimationUtilities.js'], _modules['Extensions/Breadcrumbs/Breadcrumbs.js'], _modules['Core/Color/Color.js'], _modules['Core/Globals.js'], _modules['Extensions/Drilldown/DrilldownDefaults.js'], _modules['Extensions/Drilldown/DrilldownSeries.js'], _modules['Core/Utilities.js']], function (A, Breadcrumbs, Color, H, DrilldownDefaults, DrilldownSeries, U) {\n /* *\n *\n * Highcharts Drilldown module\n *\n * Author: Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n const { animObject } = A;\n const { noop } = H;\n const { addEvent, defined, diffObjects, extend, fireEvent, merge, objectEach, pick, pushUnique, removeEvent, syncTimeout } = U;\n /* *\n *\n * Variables\n *\n * */\n let ddSeriesId = 1;\n /* *\n *\n * Functions\n *\n * */\n /**\n * Drill down to a given category. This is the same as clicking on an axis\n * label. If multiple series with drilldown are present, all will drill down to\n * the given category.\n *\n * See also `Point.doDrilldown` for drilling down on a single point instance.\n *\n * @function Highcharts.Axis#drilldownCategory\n *\n * @sample {highcharts} highcharts/drilldown/programmatic\n * Programmatic drilldown\n *\n * @param {number} x\n * The index of the category\n * @param {global.MouseEvent} [originalEvent]\n * The original event, used internally.\n */\n function axisDrilldownCategory(x, originalEvent) {\n this.getDDPoints(x).forEach(function (point) {\n if (point &&\n point.series &&\n point.series.visible &&\n point.runDrilldown) { // #3197\n point.runDrilldown(true, x, originalEvent);\n }\n });\n this.chart.applyDrilldown();\n }\n /**\n * Return drillable points for this specific X value.\n *\n * @private\n * @function Highcharts.Axis#getDDPoints\n * @param {number} x\n * Tick position\n * @return {Array<(false|Highcharts.Point)>}\n * Drillable points\n */\n function axisGetDDPoints(x) {\n return (this.ddPoints && this.ddPoints[x] || []);\n }\n /**\n * This method creates an array of arrays containing a level number\n * with the corresponding series/point.\n *\n * @requires modules/breadcrumbs\n *\n * @private\n * @param {Highcharts.Chart} chart\n * Highcharts Chart object.\n * @return {Array}\n * List for Highcharts Breadcrumbs.\n */\n function createBreadcrumbsList(chart) {\n const list = [], drilldownLevels = chart.drilldownLevels;\n // The list is based on drilldown levels from the chart object\n if (drilldownLevels && drilldownLevels.length) {\n // Add the initial series as the first element.\n if (!list[0]) {\n list.push({\n level: 0,\n levelOptions: drilldownLevels[0].seriesOptions\n });\n }\n drilldownLevels.forEach(function (level, i) {\n const lastBreadcrumb = list[list.length - 1];\n // If level is already added to breadcrumbs list,\n // don't add it again- drilling categories\n // + 1 because of the wrong levels numeration\n // in drilldownLevels array.\n if (level.levelNumber + 1 > lastBreadcrumb.level) {\n list.push({\n level: level.levelNumber + 1,\n levelOptions: merge({\n name: level.lowerSeries.name\n }, level.pointOptions)\n });\n }\n });\n }\n return list;\n }\n /* *\n *\n * Class\n *\n * */\n /**\n * @private\n */\n class ChartAdditions {\n /* *\n *\n * Constructor\n *\n * */\n constructor(chart) {\n this.chart = chart;\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Add a series to the chart as drilldown from a specific point in the\n * parent series. This method is used for async drilldown, when clicking a\n * point in a series should result in loading and displaying a more\n * high-resolution series. When not async, the setup is simpler using the\n * [drilldown.series](https://api.highcharts.com/highcharts/drilldown.series)\n * options structure.\n *\n * @sample highcharts/drilldown/async/\n * Async drilldown\n *\n * @function Highcharts.Chart#addSeriesAsDrilldown\n *\n * @param {Highcharts.Point} point\n * The point from which the drilldown will start.\n *\n * @param {Highcharts.SeriesOptionsType} options\n * The series options for the new, detailed series.\n */\n addSeriesAsDrilldown(point, options) {\n const chart = (this.chart ||\n this);\n if (chart.mapView) {\n // stop hovering while drilling down\n point.series.isDrilling = true;\n chart.series.forEach((series) => {\n // stop duplicating and overriding animations\n series.options.inactiveOtherPoints = true;\n // hide and disable dataLabels\n series.dataLabelsGroup?.destroy();\n delete series.dataLabelsGroup;\n });\n // #18925 map zooming is not working with geoJSON maps\n if (chart.options.drilldown &&\n !chart.mapView.projection.hasGeoProjection &&\n DrilldownDefaults) {\n const userDrilldown = diffObjects(chart.options.drilldown, DrilldownDefaults);\n // set mapZooming to false if user didn't set any in chart\n // config\n if (!defined(userDrilldown.mapZooming)) {\n chart.options.drilldown.mapZooming = false;\n }\n }\n if (chart.options.drilldown &&\n chart.options.drilldown.animation &&\n chart.options.drilldown.mapZooming) {\n // first zoomTo then crossfade series\n chart.mapView.allowTransformAnimation = true;\n const animOptions = animObject(chart.options.drilldown.animation);\n if (typeof animOptions !== 'boolean') {\n const userComplete = animOptions.complete, drilldownComplete = function (obj) {\n if (obj && obj.applyDrilldown && chart.mapView) {\n chart\n .addSingleSeriesAsDrilldown(point, options);\n chart.applyDrilldown();\n chart.mapView.allowTransformAnimation = false;\n }\n };\n animOptions.complete =\n function () {\n if (userComplete) {\n userComplete.apply(this, arguments);\n }\n drilldownComplete.apply(this, arguments);\n };\n }\n point.zoomTo(animOptions);\n }\n else {\n chart.addSingleSeriesAsDrilldown(point, options);\n chart.applyDrilldown();\n }\n }\n else {\n chart.addSingleSeriesAsDrilldown(point, options);\n chart.applyDrilldown();\n }\n }\n /** @private */\n addSingleSeriesAsDrilldown(point, ddOptions) {\n const chart = (this.chart ||\n this), oldSeries = point.series, xAxis = oldSeries.xAxis, yAxis = oldSeries.yAxis, colorProp = chart.styledMode ?\n { colorIndex: pick(point.colorIndex, oldSeries.colorIndex) } :\n { color: point.color || oldSeries.color }, levelNumber = oldSeries.options._levelNumber || 0, pointIndex = oldSeries.points.indexOf(point);\n if (!chart.drilldownLevels) {\n chart.drilldownLevels = [];\n }\n ddOptions = extend(extend({\n _ddSeriesId: ddSeriesId++\n }, colorProp), ddOptions);\n let levelSeries = [], levelSeriesOptions = [], last;\n // See if we can reuse the registered series from last run\n last = chart.drilldownLevels[chart.drilldownLevels.length - 1];\n if (last && last.levelNumber !== levelNumber) {\n last = void 0;\n }\n // Record options for all current series\n oldSeries.chart.series.forEach((series) => {\n if (series.xAxis === xAxis) {\n series.options._ddSeriesId =\n series.options._ddSeriesId || ddSeriesId++;\n series.options.colorIndex = series.colorIndex;\n series.options._levelNumber =\n series.options._levelNumber || levelNumber; // #3182\n if (last) {\n levelSeries = last.levelSeries;\n levelSeriesOptions = last.levelSeriesOptions;\n }\n else {\n levelSeries.push(series);\n // (#10597)\n series.purgedOptions = merge({\n _ddSeriesId: series.options._ddSeriesId,\n _levelNumber: series.options._levelNumber,\n selected: series.options.selected\n }, series.userOptions);\n levelSeriesOptions.push(series.purgedOptions);\n }\n }\n });\n // Add a record of properties for each drilldown level\n const level = extend({\n levelNumber: levelNumber,\n seriesOptions: oldSeries.options,\n seriesPurgedOptions: oldSeries.purgedOptions,\n levelSeriesOptions: levelSeriesOptions,\n levelSeries: levelSeries,\n shapeArgs: point.shapeArgs,\n // no graphic in line series with markers disabled\n bBox: point.graphic ? point.graphic.getBBox() : {},\n color: point.isNull ?\n Color.parse(colorProp.color).setOpacity(0).get() :\n colorProp.color,\n lowerSeriesOptions: ddOptions,\n pointOptions: oldSeries.options.data[pointIndex],\n pointIndex: pointIndex,\n oldExtremes: {\n xMin: xAxis && xAxis.userMin,\n xMax: xAxis && xAxis.userMax,\n yMin: yAxis && yAxis.userMin,\n yMax: yAxis && yAxis.userMax\n },\n resetZoomButton: last && last.levelNumber === levelNumber ?\n void 0 : chart.resetZoomButton\n }, colorProp);\n // Push it to the lookup array\n chart.drilldownLevels.push(level);\n // Reset names to prevent extending (#6704)\n if (xAxis && xAxis.names) {\n xAxis.names.length = 0;\n }\n const newSeries = level.lowerSeries = chart.addSeries(ddOptions, false);\n newSeries.options._levelNumber = levelNumber + 1;\n if (xAxis) {\n xAxis.oldPos = xAxis.pos;\n xAxis.userMin = xAxis.userMax = null;\n yAxis.userMin = yAxis.userMax = null;\n }\n newSeries.isDrilling = true;\n // Run fancy cross-animation on supported and equal types\n if (oldSeries.type === newSeries.type) {\n newSeries.animate = (newSeries.animateDrilldown || noop);\n newSeries.options.animation = true;\n }\n }\n applyDrilldown() {\n const chart = (this.chart ||\n this), drilldownLevels = chart.drilldownLevels;\n let levelToRemove;\n if (drilldownLevels && drilldownLevels.length > 0) {\n // #3352, async loading\n levelToRemove =\n drilldownLevels[drilldownLevels.length - 1].levelNumber;\n chart.hasCartesianSeries = drilldownLevels.some((level) => level.lowerSeries.isCartesian // #19725\n );\n (chart.drilldownLevels || []).forEach((level) => {\n if (chart.mapView &&\n chart.options.drilldown &&\n chart.options.drilldown.mapZooming) {\n chart.redraw();\n level.lowerSeries.isDrilling = false;\n chart.mapView.fitToBounds(level.lowerSeries.bounds);\n level.lowerSeries.isDrilling = true;\n }\n if (level.levelNumber === levelToRemove) {\n level.levelSeries.forEach((series) => {\n // Not removed, not added as part of a multi-series\n // drilldown\n if (!chart.mapView) {\n if (series.options &&\n series.options._levelNumber === levelToRemove) {\n series.remove(false);\n }\n // Deal with asonchrynous removing of map series\n // after zooming into\n }\n else if (series.options &&\n series.options._levelNumber === levelToRemove &&\n series.group) {\n let animOptions = {};\n if (chart.options.drilldown) {\n animOptions = chart.options.drilldown.animation;\n }\n series.group.animate({\n opacity: 0\n }, animOptions, () => {\n series.remove(false);\n // If it is the last series\n if (!(level.levelSeries.filter((el) => Object.keys(el).length)).length) {\n // We have a reset zoom button. Hide it and\n // detatch it from the chart. It is\n // preserved to the layer config above.\n if (chart.resetZoomButton) {\n chart.resetZoomButton.hide();\n delete chart.resetZoomButton;\n }\n chart.pointer.reset();\n fireEvent(chart, 'afterDrilldown');\n if (chart.mapView) {\n chart.series.forEach((series) => {\n series.isDirtyData = true;\n series.isDrilling = false;\n });\n chart.mapView\n .fitToBounds(void 0, void 0);\n }\n fireEvent(chart, 'afterApplyDrilldown');\n }\n });\n }\n });\n }\n });\n }\n if (!chart.mapView) {\n // We have a reset zoom button. Hide it and detatch it from the\n // chart. It is preserved to the layer config above.\n if (chart.resetZoomButton) {\n chart.resetZoomButton.hide();\n delete chart.resetZoomButton;\n }\n chart.pointer.reset();\n fireEvent(chart, 'afterDrilldown');\n // Axes shouldn't be visible after drilling into non-cartesian\n // (#19725)\n if (!chart.hasCartesianSeries) {\n chart.axes.forEach((axis) => {\n axis.destroy(true);\n axis.init(chart, merge(axis.userOptions, axis.options));\n });\n }\n chart.redraw();\n fireEvent(chart, 'afterApplyDrilldown');\n }\n }\n /**\n * When the chart is drilled down to a child series, calling\n * `chart.drillUp()` will drill up to the parent series.\n *\n * @requires modules/drilldown\n *\n * @function Highcharts.Chart#drillUp\n *\n * @sample {highcharts} highcharts/drilldown/programmatic\n * Programmatic drilldown\n */\n drillUp(isMultipleDrillUp) {\n const chart = (this.chart ||\n this);\n if (!chart.drilldownLevels || chart.drilldownLevels.length === 0) {\n return;\n }\n fireEvent(chart, 'beforeDrillUp');\n const drilldownLevels = chart.drilldownLevels, levelNumber = drilldownLevels[drilldownLevels.length - 1].levelNumber, chartSeries = chart.series, drilldownLevelsNumber = chart.drilldownLevels.length, addSeries = (seriesOptions, oldSeries) => {\n let addedSeries;\n chartSeries.forEach((series) => {\n if (series.options._ddSeriesId ===\n seriesOptions._ddSeriesId) {\n addedSeries = series;\n }\n });\n addedSeries =\n addedSeries || chart.addSeries(seriesOptions, false);\n if (addedSeries.type === oldSeries.type &&\n addedSeries.animateDrillupTo) {\n addedSeries.animate = addedSeries.animateDrillupTo;\n }\n if (seriesOptions === level.seriesPurgedOptions) {\n return addedSeries;\n }\n }, removeSeries = (oldSeries) => {\n oldSeries.remove(false);\n chart.series.forEach((series) => {\n // ensures to redraw series to get correct colors\n if (series.colorAxis) {\n series.isDirtyData = true;\n }\n series.options.inactiveOtherPoints = false;\n });\n chart.redraw();\n };\n let i = drilldownLevels.length, seriesI, level, oldExtremes;\n // Reset symbol and color counters after every drill-up. (#19134)\n chart.symbolCounter = chart.colorCounter = 0;\n while (i--) {\n let oldSeries, newSeries;\n level = drilldownLevels[i];\n if (level.levelNumber === levelNumber) {\n drilldownLevels.pop();\n // Get the lower series by reference or id\n oldSeries = level.lowerSeries;\n if (!oldSeries.chart) { // #2786\n seriesI = chartSeries.length; // #2919\n while (seriesI--) {\n if (chartSeries[seriesI].options.id ===\n level.lowerSeriesOptions.id &&\n chartSeries[seriesI].options._levelNumber ===\n levelNumber + 1) { // #3867\n oldSeries = chartSeries[seriesI];\n break;\n }\n }\n }\n oldSeries.xData = []; // Overcome problems with minRange (#2898)\n // Reset the names to start new series from the beginning.\n // Do it once to preserve names when multiple\n // series are added for the same axis, #16135.\n if (oldSeries.xAxis &&\n oldSeries.xAxis.names &&\n (drilldownLevelsNumber === 0 || i === drilldownLevelsNumber)) {\n oldSeries.xAxis.names.length = 0;\n }\n level.levelSeriesOptions.forEach((el) => {\n const addedSeries = addSeries(el, oldSeries);\n if (addedSeries) {\n newSeries = addedSeries;\n }\n });\n fireEvent(chart, 'drillup', {\n seriesOptions: level.seriesPurgedOptions ||\n level.seriesOptions\n });\n if (newSeries) {\n if (newSeries.type === oldSeries.type) {\n newSeries.drilldownLevel = level;\n newSeries.options.animation =\n chart.options.drilldown.animation;\n // #2919\n if (oldSeries.animateDrillupFrom && oldSeries.chart) {\n oldSeries.animateDrillupFrom(level);\n }\n }\n newSeries.options._levelNumber = levelNumber;\n }\n const seriesToRemove = oldSeries;\n // cannot access variable changed in loop\n if (!chart.mapView) {\n seriesToRemove.remove(false);\n }\n // Reset the zoom level of the upper series\n if (newSeries && newSeries.xAxis) {\n oldExtremes = level.oldExtremes;\n newSeries.xAxis.setExtremes(oldExtremes.xMin, oldExtremes.xMax, false);\n newSeries.yAxis.setExtremes(oldExtremes.yMin, oldExtremes.yMax, false);\n }\n // We have a resetZoomButton tucked away for this level. Attatch\n // it to the chart and show it.\n if (level.resetZoomButton) {\n chart.resetZoomButton = level.resetZoomButton;\n }\n if (!chart.mapView) {\n fireEvent(chart, 'afterDrillUp');\n chart.redraw();\n if (chart.ddDupes) {\n chart.ddDupes.length = 0; // #3315\n } // #8324\n // Fire a once-off event after all series have been drilled\n // up (#5158)\n fireEvent(chart, 'drillupall');\n }\n else {\n const shouldAnimate = level.levelNumber === levelNumber &&\n isMultipleDrillUp, zoomingDrill = chart.options.drilldown &&\n chart.options.drilldown.animation &&\n chart.options.drilldown.mapZooming;\n if (shouldAnimate) {\n oldSeries.remove(false);\n }\n else {\n // hide and disable dataLabels\n if (oldSeries.dataLabelsGroup) {\n oldSeries.dataLabelsGroup.destroy();\n delete oldSeries.dataLabelsGroup;\n }\n if (chart.mapView && newSeries) {\n if (zoomingDrill) {\n // stop hovering while drilling down\n oldSeries.isDrilling = true;\n newSeries.isDrilling = true;\n chart.redraw(false);\n // Fit to previous bounds\n chart.mapView.fitToBounds(oldSeries.bounds, void 0, true, false);\n }\n chart.mapView.allowTransformAnimation = true;\n fireEvent(chart, 'afterDrillUp', {\n seriesOptions: newSeries ? newSeries.userOptions : void 0\n });\n if (zoomingDrill) {\n // Fit to natural bounds\n chart.mapView.setView(void 0, 1, true, {\n complete: function () {\n // fire it only on complete in this\n // place (once)\n if (Object.prototype.hasOwnProperty\n .call(this, 'complete')) {\n removeSeries(oldSeries);\n }\n }\n });\n }\n else {\n // When user don't want to zoom into region only\n // fade out\n chart.mapView.allowTransformAnimation = false;\n if (oldSeries.group) {\n oldSeries.group.animate({\n opacity: 0\n }, chart.options.drilldown.animation, () => {\n removeSeries(oldSeries);\n if (chart.mapView) {\n chart.mapView\n .allowTransformAnimation = true;\n }\n });\n }\n else {\n removeSeries(oldSeries);\n chart.mapView\n .allowTransformAnimation = true;\n }\n }\n newSeries.isDrilling = false;\n if (chart.ddDupes) {\n chart.ddDupes.length = 0; // #3315\n } // #8324\n // Fire a once-off event after all series have been\n // drilled up (#5158)\n fireEvent(chart, 'drillupall');\n }\n }\n }\n }\n }\n }\n /**\n * A function to fade in a group. First, the element is being hidden, then,\n * using `opactiy`, is faded in. Used for example by `dataLabelsGroup` where\n * simple SVGElement.fadeIn() is not enough, because of other features (e.g.\n * InactiveState) using `opacity` to fadeIn/fadeOut.\n *\n * @requires module:modules/drilldown\n *\n * @private\n * @param {SVGElement} [group]\n * The SVG element to be faded in.\n */\n fadeInGroup(group) {\n const chart = this.chart, animationOptions = animObject(chart.options.drilldown.animation);\n if (group) {\n group.hide();\n syncTimeout(() => {\n // Make sure neither group nor chart were destroyed\n if (group && group.added) {\n group.fadeIn();\n }\n }, Math.max(animationOptions.duration - 50, 0));\n }\n }\n /**\n * Update function to be called internally from Chart.update (#7600, #12855)\n * @private\n */\n update(options, redraw) {\n const chart = this.chart;\n merge(true, chart.options.drilldown, options);\n if (pick(redraw, true)) {\n chart.redraw();\n }\n }\n }\n /* *\n *\n * Composition\n *\n * */\n var Drilldown;\n (function (Drilldown) {\n /* *\n *\n * Declarations\n *\n * */\n /* *\n *\n * Constants\n *\n * */\n const composedMembers = [];\n /* *\n *\n * Functions\n *\n * */\n /** @private */\n function compose(AxisClass, ChartClass, highchartsDefaultOptions, SeriesClass, seriesTypes, SVGRendererClass, TickClass) {\n const SVGElementClass = SVGRendererClass.prototype.Element;\n DrilldownSeries.compose(SeriesClass, seriesTypes);\n if (pushUnique(composedMembers, AxisClass)) {\n const axisProto = AxisClass.prototype;\n axisProto.drilldownCategory = axisDrilldownCategory;\n axisProto.getDDPoints = axisGetDDPoints;\n }\n if (pushUnique(composedMembers, Breadcrumbs)) {\n Breadcrumbs.compose(ChartClass, highchartsDefaultOptions);\n addEvent(Breadcrumbs, 'up', onBreadcrumbsUp);\n }\n if (pushUnique(composedMembers, ChartClass)) {\n const DrilldownChart = ChartClass;\n const addonProto = ChartAdditions.prototype;\n const chartProto = DrilldownChart.prototype;\n chartProto.addSeriesAsDrilldown = addonProto.addSeriesAsDrilldown;\n chartProto.addSingleSeriesAsDrilldown =\n addonProto.addSingleSeriesAsDrilldown;\n chartProto.applyDrilldown = addonProto.applyDrilldown;\n chartProto.drillUp = addonProto.drillUp;\n addEvent(DrilldownChart, 'afterDrilldown', onChartAfterDrilldown);\n addEvent(DrilldownChart, 'afterDrillUp', onChartAfterDrillUp);\n addEvent(DrilldownChart, 'afterInit', onChartAfterInit);\n addEvent(DrilldownChart, 'drillup', onChartDrillup);\n addEvent(DrilldownChart, 'drillupall', onChartDrillupall);\n addEvent(DrilldownChart, 'render', onChartRender);\n addEvent(DrilldownChart, 'update', onChartUpdate);\n }\n if (pushUnique(composedMembers, highchartsDefaultOptions)) {\n highchartsDefaultOptions.drilldown = DrilldownDefaults;\n }\n if (pushUnique(composedMembers, SVGElementClass)) {\n const elementProto = SVGElementClass.prototype;\n elementProto.fadeIn = svgElementFadeIn;\n }\n if (pushUnique(composedMembers, TickClass)) {\n const tickProto = TickClass.prototype;\n tickProto.drillable = tickDrillable;\n }\n }\n Drilldown.compose = compose;\n /** @private */\n function onBreadcrumbsUp(e) {\n const chart = this.chart, drillUpsNumber = this.getLevel() - e.newLevel;\n let isMultipleDrillUp = drillUpsNumber > 1;\n for (let i = 0; i < drillUpsNumber; i++) {\n if (i === drillUpsNumber - 1) {\n isMultipleDrillUp = false;\n }\n chart.drillUp(isMultipleDrillUp);\n }\n }\n /** @private */\n function onChartAfterDrilldown() {\n const chart = this, drilldownOptions = chart.options.drilldown, breadcrumbsOptions = drilldownOptions && drilldownOptions.breadcrumbs;\n if (!chart.breadcrumbs) {\n chart.breadcrumbs = new Breadcrumbs(chart, breadcrumbsOptions);\n }\n chart.breadcrumbs.updateProperties(createBreadcrumbsList(chart));\n }\n /** @private */\n function onChartAfterDrillUp() {\n const chart = this;\n if (chart.breadcrumbs) {\n chart.breadcrumbs.updateProperties(createBreadcrumbsList(chart));\n }\n }\n /**\n * Add update function to be called internally from Chart.update (#7600,\n * #12855)\n * @private\n */\n function onChartAfterInit() {\n this.drilldown = new ChartAdditions(this);\n }\n /** @private */\n function onChartDrillup() {\n const chart = this;\n if (chart.resetZoomButton) {\n chart.resetZoomButton = chart.resetZoomButton.destroy();\n }\n }\n /** @private */\n function onChartDrillupall() {\n const chart = this;\n if (chart.resetZoomButton) {\n chart.showResetZoom();\n }\n }\n /** @private */\n function onChartRender() {\n (this.xAxis || []).forEach((axis) => {\n axis.ddPoints = {};\n axis.series.forEach((series) => {\n const xData = series.xData || [], points = series.points;\n for (let i = 0, iEnd = xData.length, p; i < iEnd; i++) {\n p = series.options.data[i];\n // The `drilldown` property can only be set on an array or an\n // object\n if (typeof p !== 'number') {\n // Convert array to object (#8008)\n p = series.pointClass.prototype.optionsToObject\n .call({ series: series }, p);\n if (p.drilldown) {\n if (!axis.ddPoints[xData[i]]) {\n axis.ddPoints[xData[i]] = [];\n }\n const index = i - (series.cropStart || 0);\n axis.ddPoints[xData[i]].push(points && index >= 0 && index < points.length ?\n points[index] :\n true);\n }\n }\n }\n });\n // Add drillability to ticks, and always keep it drillability\n // updated (#3951)\n objectEach(axis.ticks, (tick) => tick.drillable());\n });\n }\n /** @private */\n function onChartUpdate(e) {\n const breadcrumbs = this.breadcrumbs, breadcrumbOptions = e.options.drilldown && e.options.drilldown.breadcrumbs;\n if (breadcrumbs && breadcrumbOptions) {\n breadcrumbs.update(breadcrumbOptions);\n }\n }\n /**\n * A general fadeIn method.\n *\n * @requires module:modules/drilldown\n *\n * @function Highcharts.SVGElement#fadeIn\n *\n * @param {boolean|Partial} [animation]\n * The animation options for the element fade.\n */\n function svgElementFadeIn(animation) {\n const elem = this;\n elem\n .attr({\n opacity: 0.1,\n visibility: 'inherit'\n })\n .animate({\n opacity: pick(elem.newOpacity, 1) // newOpacity used in maps\n }, animation || {\n duration: 250\n });\n }\n /**\n * Make a tick label drillable, or remove drilling on update.\n * @private\n */\n function tickDrillable() {\n const pos = this.pos, label = this.label, axis = this.axis, isDrillable = axis.coll === 'xAxis' && axis.getDDPoints, ddPointsX = isDrillable && axis.getDDPoints(pos), styledMode = axis.chart.styledMode;\n if (isDrillable) {\n if (label && ddPointsX && ddPointsX.length) {\n label.drillable = true;\n if (!label.basicStyles && !styledMode) {\n label.basicStyles = merge(label.styles);\n }\n label.addClass('highcharts-drilldown-axis-label');\n // #12656 - avoid duplicate of attach event\n if (label.removeOnDrillableClick) {\n removeEvent(label.element, 'click');\n }\n label.removeOnDrillableClick = addEvent(label.element, 'click', function (e) {\n e.preventDefault();\n axis.drilldownCategory(pos, e);\n });\n if (!styledMode && axis.chart.options.drilldown) {\n label.css(axis.chart.options.drilldown.activeAxisLabelStyle || {});\n }\n }\n else if (label &&\n label.drillable && label.removeOnDrillableClick) {\n if (!styledMode) {\n label.styles = {}; // reset for full overwrite of styles\n label.element.removeAttribute('style'); // #17933\n label.css(label.basicStyles);\n }\n label.removeOnDrillableClick(); // #3806\n label.removeClass('highcharts-drilldown-axis-label');\n }\n }\n }\n })(Drilldown || (Drilldown = {}));\n /* *\n *\n * Default Export\n *\n * */\n /* *\n *\n * API Declarations\n *\n * */\n /**\n * Gets fired when a drilldown point is clicked, before the new series is added.\n * Note that when clicking a category label to trigger multiple series\n * drilldown, one `drilldown` event is triggered per point in the category.\n *\n * @callback Highcharts.DrilldownCallbackFunction\n *\n * @param {Highcharts.Chart} this\n * The chart where the event occurs.\n *\n * @param {Highcharts.DrilldownEventObject} e\n * The drilldown event.\n */\n /**\n * The event arguments when a drilldown point is clicked.\n *\n * @interface Highcharts.DrilldownEventObject\n */ /**\n * If a category label was clicked, which index.\n * @name Highcharts.DrilldownEventObject#category\n * @type {number|undefined}\n */ /**\n * The original browser event (usually click) that triggered the drilldown.\n * @name Highcharts.DrilldownEventObject#originalEvent\n * @type {global.Event|undefined}\n */ /**\n * Prevents the default behaviour of the event.\n * @name Highcharts.DrilldownEventObject#preventDefault\n * @type {Function}\n */ /**\n * The originating point.\n * @name Highcharts.DrilldownEventObject#point\n * @type {Highcharts.Point}\n */ /**\n * If a category label was clicked, this array holds all points corresponding to\n * the category. Otherwise it is set to false.\n * @name Highcharts.DrilldownEventObject#points\n * @type {boolean|Array|undefined}\n */ /**\n * Options for the new series. If the event is utilized for async drilldown, the\n * seriesOptions are not added, but rather loaded async.\n * @name Highcharts.DrilldownEventObject#seriesOptions\n * @type {Highcharts.SeriesOptionsType|undefined}\n */ /**\n * The event target.\n * @name Highcharts.DrilldownEventObject#target\n * @type {Highcharts.Chart}\n */ /**\n * The event type.\n * @name Highcharts.DrilldownEventObject#type\n * @type {\"drilldown\"}\n */\n /**\n * This gets fired after all the series have been drilled up. This is especially\n * usefull in a chart with multiple drilldown series.\n *\n * @callback Highcharts.DrillupAllCallbackFunction\n *\n * @param {Highcharts.Chart} this\n * The chart where the event occurs.\n *\n * @param {Highcharts.DrillupAllEventObject} e\n * The final drillup event.\n */\n /**\n * The event arguments when all the series have been drilled up.\n *\n * @interface Highcharts.DrillupAllEventObject\n */ /**\n * Prevents the default behaviour of the event.\n * @name Highcharts.DrillupAllEventObject#preventDefault\n * @type {Function}\n */ /**\n * The event target.\n * @name Highcharts.DrillupAllEventObject#target\n * @type {Highcharts.Chart}\n */ /**\n * The event type.\n * @name Highcharts.DrillupAllEventObject#type\n * @type {\"drillupall\"}\n */\n /**\n * Gets fired when drilling up from a drilldown series.\n *\n * @callback Highcharts.DrillupCallbackFunction\n *\n * @param {Highcharts.Chart} this\n * The chart where the event occurs.\n *\n * @param {Highcharts.DrillupEventObject} e\n * The drillup event.\n */\n /**\n * The event arguments when drilling up from a drilldown series.\n *\n * @interface Highcharts.DrillupEventObject\n */ /**\n * Prevents the default behaviour of the event.\n * @name Highcharts.DrillupEventObject#preventDefault\n * @type {Function}\n */ /**\n * Options for the new series.\n * @name Highcharts.DrillupEventObject#seriesOptions\n * @type {Highcharts.SeriesOptionsType|undefined}\n */ /**\n * The event target.\n * @name Highcharts.DrillupEventObject#target\n * @type {Highcharts.Chart}\n */ /**\n * The event type.\n * @name Highcharts.DrillupEventObject#type\n * @type {\"drillup\"}\n */\n ''; // keeps doclets above in JS file\n\n return Drilldown;\n });\n _registerModule(_modules, 'masters/modules/drilldown.src.js', [_modules['Core/Globals.js'], _modules['Extensions/Drilldown/Drilldown.js'], _modules['Extensions/Breadcrumbs/Breadcrumbs.js']], function (Highcharts, Drilldown, Breadcrumbs) {\n\n const G = Highcharts;\n G.Breadcrumbs = Breadcrumbs;\n Drilldown.compose(G.Axis, G.Chart, G.defaultOptions, G.Series, G.seriesTypes, G.SVGRenderer, G.Tick);\n\n });\n}));"],"names":["factory","module","exports","define","amd","Highcharts","undefined","_modules","_registerModule","obj","path","args","fn","hasOwnProperty","apply","CustomEvent","window","dispatchEvent","detail","lang","mainBreadcrumb","options","buttonTheme","fill","height","padding","zIndex","states","select","style","color","buttonSpacing","floating","format","relativeTo","rtl","position","align","verticalAlign","x","y","separator","text","fontSize","showFullPath","useHTML","BreadcrumbsDefaults","Chart","F","U","addEvent","defined","extend","fireEvent","isString","merge","objectEach","pick","composedMembers","onChartAfterShowResetZoom","chart","breadcrumbs","bbox","resetZoomButton","getBBox","breadcrumbsOptions","alignBreadcrumbsGroup","width","onChartDestroy","destroy","onChartGetMargins","level","breadcrumbsHeight","marginBottom","yOffset","plotTop","onChartRedraw","redraw","onChartSelection","event","resetSelection","Breadcrumbs","compose","ChartClass","highchartsDefaultOptions","pushUnique","constructor","userOptions","elementList","isDirty","list","chartOptions","drilldown","drillUpButton","defaultOptions","navigation","updateProperties","setList","setLevel","length","getLevel","getButtonText","breadcrumb","textFormat","defaultText","drillUpText","returnText","formatter","levelOptions","render","group","renderer","g","addClass","attr","add","renderFullPathButtons","renderSingleButton","destroySingleButton","resetElementListState","updateListElements","destroyListElements","posX","previousBreadcrumb","renderButton","updateSingleButton","xOffset","positionOptions","alignTo","bBox","additionalSpace","newPositions","posY","button","e","callDefaultEvent","buttonEvents","events","click","call","newLevel","styledMode","renderSeparator","separatorOptions","label","css","update","currentBreadcrumb","force","element","updated","rtlFactor","updateXPosition","spacing","adjustToRTL","translate","i","iEnd","isLast","setState","activeAxisLabelStyle","cursor","fontWeight","textDecoration","activeDataLabelStyle","animation","duration","mapZooming","A","animObject","syncTimeout","applyCursorCSS","columnAnimateDrilldown","init","series","drilldownLevels","animationOptions","xAxis","animateFrom","forEach","_ddSeriesId","lowerSeriesOptions","shapeArgs","oldPos","pos","points","point","animateTo","graphic","animate","fadeInGroup","dataLabelsGroup","columnAnimateDrillupFrom","trackerGroups","key","on","removeGroup","columnGroup","complete","columnAnimateDrillupTo","drilldownLevel","dataLabel","hide","hidden","connector","pointsWithNodes","data","el","push","nodes","concat","verb","pointIndex","visible","fadeIn","Math","max","mapAnimateDrilldown","mapView","opacity","allowTransformAnimation","inactiveOtherPoints","enableMouseTracking","mapAnimateDrillupFrom","mapAnimateDrillupTo","onPointAfterInit","unbindDrilldownClick","onPointClick","onPointAfterSetState","halo","state","allowPointDrilldown","drilldownCategory","runDrilldown","onPointUpdate","onSeriesAfterDrawDataLabels","dataLabelsOptions","dataLabels","pointCSS","dlOptions","getContrast","onSeriesAfterDrawTracker","pieAnimateDrilldown","is","center","start","angle","end","startAngle","pointDoDrilldown","pointRunDrilldown","holdRedraw","category","originalEvent","seriesOptions","ddDupes","colorCounter","symbolCounter","id","indexOf","getDDPoints","slice","addSingleSeriesAsDrilldown","addSeriesAsDrilldown","SeriesClass","seriesTypes","column","ColumnSeriesClass","map","MapSeriesClass","pie","PieSeriesClass","PointClass","prototype","pointClass","columnProto","animateDrilldown","animateDrillupFrom","animateDrillupTo","mapProto","pieProto","pointProto","doDrilldown","Color","H","DrilldownDefaults","DrilldownSeries","Drilldown","noop","diffObjects","removeEvent","ddSeriesId","axisDrilldownCategory","applyDrilldown","axisGetDDPoints","ddPoints","createBreadcrumbsList","lastBreadcrumb","levelNumber","name","lowerSeries","pointOptions","ChartAdditions","isDrilling","projection","hasGeoProjection","userDrilldown","animOptions","userComplete","drilldownComplete","arguments","zoomTo","ddOptions","oldSeries","yAxis","colorProp","colorIndex","_levelNumber","levelSeries","levelSeriesOptions","last","purgedOptions","selected","seriesPurgedOptions","isNull","parse","setOpacity","get","oldExtremes","xMin","userMin","xMax","userMax","yMin","yMax","names","newSeries","addSeries","type","levelToRemove","hasCartesianSeries","some","isCartesian","fitToBounds","bounds","remove","filter","Object","keys","pointer","reset","isDirtyData","axes","axis","drillUp","isMultipleDrillUp","chartSeries","drilldownLevelsNumber","addedSeries","removeSeries","colorAxis","seriesI","pop","xData","seriesToRemove","setExtremes","shouldAnimate","zoomingDrill","setView","added","onBreadcrumbsUp","drillUpsNumber","onChartAfterDrilldown","drilldownOptions","onChartAfterDrillUp","onChartAfterInit","onChartDrillup","onChartDrillupall","showResetZoom","onChartRender","p","optionsToObject","index","cropStart","ticks","tick","drillable","onChartUpdate","breadcrumbOptions","svgElementFadeIn","elem","visibility","newOpacity","tickDrillable","isDrillable","coll","ddPointsX","basicStyles","styles","removeOnDrillableClick","preventDefault","removeAttribute","removeClass","AxisClass","SVGRendererClass","TickClass","SVGElementClass","Element","axisProto","addonProto","chartProto","DrilldownChart","elementProto","tickProto","G","Axis","Series","SVGRenderer","Tick"],"mappings":"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"}