{"version":3,"file":"assets/chunk.d1e2f897ac0bca5e0389.js","mappings":"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","sources":["../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Renderer/HTML/HTMLElement.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Renderer/HTML/HTMLRenderer.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Axis/DateTimeAxis.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Axis/LogarithmicAxis.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBand.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Extensions/ScrollablePlotArea.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Axis/Stacking/StackItem.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Axis/Stacking/StackingAxis.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Series/Line/LineSeries.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Series/Area/AreaSeries.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Series/Spline/SplineSeries.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Series/AreaSpline/AreaSplineSeries.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Series/Column/ColumnSeriesDefaults.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Series/Column/ColumnSeries.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Series/DataLabel.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Series/Column/ColumnDataLabel.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Series/Bar/BarSeries.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Series/Scatter/ScatterSeriesDefaults.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Series/Scatter/ScatterSeries.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Series/CenteredUtilities.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Series/Pie/PiePoint.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Series/Pie/PieSeriesDefaults.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Series/Pie/PieSeries.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Series/Pie/PieDataLabel.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Extensions/OverlappingDataLabels.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/Core/Responsive.js","../../../../../node_modules/.pnpm/highcharts@10.3.3/node_modules/highcharts/es-modules/masters/highcharts.src.js"],"sourcesContent":["/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport H from '../../Globals.js';\nvar isFirefox = H.isFirefox, isMS = H.isMS, isWebKit = H.isWebKit, win = H.win;\nimport SVGElement from '../SVG/SVGElement.js';\nimport U from '../../Utilities.js';\nvar css = U.css, defined = U.defined, extend = U.extend, pick = U.pick, pInt = U.pInt;\n/* *\n *\n * Class\n *\n * */\n/* eslint-disable valid-jsdoc */\nvar HTMLElement = /** @class */ (function (_super) {\n __extends(HTMLElement, _super);\n function HTMLElement() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /* *\n *\n * Static Functions\n *\n * */\n /**\n * Modifies SVGElement to support HTML elements.\n * @private\n */\n HTMLElement.compose = function (SVGElementClass) {\n if (HTMLElement.composedClasses.indexOf(SVGElementClass) === -1) {\n HTMLElement.composedClasses.push(SVGElementClass);\n var htmlElementProto = HTMLElement.prototype, svgElementProto = SVGElementClass.prototype;\n svgElementProto.getSpanCorrection = htmlElementProto\n .getSpanCorrection;\n svgElementProto.htmlCss = htmlElementProto.htmlCss;\n svgElementProto.htmlGetBBox = htmlElementProto.htmlGetBBox;\n svgElementProto.htmlUpdateTransform = htmlElementProto\n .htmlUpdateTransform;\n svgElementProto.setSpanRotation = htmlElementProto.setSpanRotation;\n }\n return SVGElementClass;\n };\n /* *\n *\n * Functions\n *\n * */\n /**\n * Get the correction in X and Y positioning as the element is rotated.\n * @private\n */\n HTMLElement.prototype.getSpanCorrection = function (width, baseline, alignCorrection) {\n this.xCorr = -width * alignCorrection;\n this.yCorr = -baseline;\n };\n /**\n * Apply CSS to HTML elements. This is used in text within SVG rendering and\n * by the VML renderer\n * @private\n */\n HTMLElement.prototype.htmlCss = function (styles) {\n var wrapper = this, element = wrapper.element, \n // When setting or unsetting the width style, we need to update\n // transform (#8809)\n isSettingWidth = (element.tagName === 'SPAN' &&\n styles &&\n 'width' in styles), textWidth = pick(isSettingWidth && styles.width, void 0);\n var doTransform;\n if (isSettingWidth) {\n delete styles.width;\n wrapper.textWidth = textWidth;\n doTransform = true;\n }\n if (styles && styles.textOverflow === 'ellipsis') {\n styles.whiteSpace = 'nowrap';\n styles.overflow = 'hidden';\n }\n wrapper.styles = extend(wrapper.styles, styles);\n css(wrapper.element, styles);\n // Now that all styles are applied, to the transform\n if (doTransform) {\n wrapper.htmlUpdateTransform();\n }\n return wrapper;\n };\n /**\n * VML and useHTML method for calculating the bounding box based on offsets.\n */\n HTMLElement.prototype.htmlGetBBox = function () {\n var wrapper = this, element = wrapper.element;\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: element.offsetWidth,\n height: element.offsetHeight\n };\n };\n /**\n * VML override private method to update elements based on internal\n * properties based on SVG transform.\n * @private\n */\n HTMLElement.prototype.htmlUpdateTransform = function () {\n // aligning non added elements is expensive\n if (!this.added) {\n this.alignOnAdd = true;\n return;\n }\n var wrapper = this, renderer = wrapper.renderer, elem = wrapper.element, translateX = wrapper.translateX || 0, translateY = wrapper.translateY || 0, x = wrapper.x || 0, y = wrapper.y || 0, align = wrapper.textAlign || 'left', alignCorrection = {\n left: 0, center: 0.5, right: 1\n }[align], styles = wrapper.styles, whiteSpace = styles && styles.whiteSpace;\n /** @private */\n function getTextPxLength() {\n if (wrapper.textPxLength) {\n return wrapper.textPxLength;\n }\n // Reset multiline/ellipsis in order to read width (#4928,\n // #5417)\n css(elem, {\n width: '',\n whiteSpace: whiteSpace || 'nowrap'\n });\n return elem.offsetWidth;\n }\n // apply translate\n css(elem, {\n marginLeft: translateX,\n marginTop: translateY\n });\n if (!renderer.styledMode && wrapper.shadows) { // used in labels/tooltip\n wrapper.shadows.forEach(function (shadow) {\n css(shadow, {\n marginLeft: translateX + 1,\n marginTop: translateY + 1\n });\n });\n }\n // apply inversion\n if (wrapper.inverted) { // wrapper is a group\n [].forEach.call(elem.childNodes, function (child) {\n renderer.invertChild(child, elem);\n });\n }\n if (elem.tagName === 'SPAN') {\n var rotation = wrapper.rotation, textWidth = wrapper.textWidth && pInt(wrapper.textWidth), currentTextTransform = [\n rotation,\n align,\n elem.innerHTML,\n wrapper.textWidth,\n wrapper.textAlign\n ].join(',');\n var baseline = void 0, hasBoxWidthChanged = false;\n // Update textWidth. Use the memoized textPxLength if possible, to\n // avoid the getTextPxLength function using elem.offsetWidth.\n // Calling offsetWidth affects rendering time as it forces layout\n // (#7656).\n if (textWidth !== wrapper.oldTextWidth) { // #983, #1254\n var textPxLength = getTextPxLength();\n if (((textWidth > wrapper.oldTextWidth) ||\n textPxLength > textWidth) && (\n // Only set the width if the text is able to word-wrap,\n // or text-overflow is ellipsis (#9537)\n /[ \\-]/.test(elem.textContent || elem.innerText) ||\n elem.style.textOverflow === 'ellipsis')) {\n css(elem, {\n width: (textPxLength > textWidth) || rotation ?\n textWidth + 'px' :\n 'auto',\n display: 'block',\n whiteSpace: whiteSpace || 'normal' // #3331\n });\n wrapper.oldTextWidth = textWidth;\n hasBoxWidthChanged = true; // #8159\n }\n }\n wrapper.hasBoxWidthChanged = hasBoxWidthChanged; // #8159\n // Do the calculations and DOM access only if properties changed\n if (currentTextTransform !== wrapper.cTT) {\n baseline = renderer.fontMetrics(elem.style.fontSize, elem).b;\n // Renderer specific handling of span rotation, but only if we\n // have something to update.\n if (defined(rotation) &&\n ((rotation !== (wrapper.oldRotation || 0)) ||\n (align !== wrapper.oldAlign))) {\n wrapper.setSpanRotation(rotation, alignCorrection, baseline);\n }\n wrapper.getSpanCorrection(\n // Avoid elem.offsetWidth if we can, it affects rendering\n // time heavily (#7656)\n ((!defined(rotation) && wrapper.textPxLength) || // #7920\n elem.offsetWidth), baseline, alignCorrection, rotation, align);\n }\n // apply position with correction\n css(elem, {\n left: (x + (wrapper.xCorr || 0)) + 'px',\n top: (y + (wrapper.yCorr || 0)) + 'px'\n });\n // record current text transform\n wrapper.cTT = currentTextTransform;\n wrapper.oldRotation = rotation;\n wrapper.oldAlign = align;\n }\n };\n /**\n * Set the rotation of an individual HTML span.\n * @private\n */\n HTMLElement.prototype.setSpanRotation = function (rotation, alignCorrection, baseline) {\n var getTransformKey = function () { return (isMS &&\n !/Edge/.test(win.navigator.userAgent) ?\n '-ms-transform' :\n isWebKit ?\n '-webkit-transform' :\n isFirefox ?\n 'MozTransform' :\n win.opera ?\n '-o-transform' :\n void 0); };\n var rotationStyle = {}, cssTransformKey = getTransformKey();\n if (cssTransformKey) {\n rotationStyle[cssTransformKey] = rotationStyle.transform =\n 'rotate(' + rotation + 'deg)';\n rotationStyle[cssTransformKey + (isFirefox ? 'Origin' : '-origin')] = rotationStyle.transformOrigin =\n (alignCorrection * 100) + '% ' + baseline + 'px';\n css(this.element, rotationStyle);\n }\n };\n /* *\n *\n * Static Properties\n *\n * */\n HTMLElement.composedClasses = [];\n return HTMLElement;\n}(SVGElement));\n/* *\n *\n * Default Export\n *\n * */\nexport default HTMLElement;\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport AST from './AST.js';\nimport SVGElement from '../SVG/SVGElement.js';\nimport SVGRenderer from '../SVG/SVGRenderer.js';\nimport U from '../../Utilities.js';\nvar attr = U.attr, createElement = U.createElement, extend = U.extend, pick = U.pick;\n/* *\n *\n * Class\n *\n * */\n/* eslint-disable valid-jsdoc */\n// Extend SvgRenderer for useHTML option.\nvar HTMLRenderer = /** @class */ (function (_super) {\n __extends(HTMLRenderer, _super);\n function HTMLRenderer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /* *\n *\n * Static Functions\n *\n * */\n /** @private */\n HTMLRenderer.compose = function (SVGRendererClass) {\n if (HTMLRenderer.composedClasses.indexOf(SVGRendererClass) === -1) {\n HTMLRenderer.composedClasses.push(SVGRendererClass);\n var htmlRendererProto = HTMLRenderer.prototype, svgRendererProto = SVGRendererClass.prototype;\n svgRendererProto.html = htmlRendererProto.html;\n }\n return SVGRendererClass;\n };\n /* *\n *\n * Functions\n *\n * */\n /**\n * Create HTML text node. This is used by the VML renderer as well as the\n * SVG renderer through the useHTML option.\n *\n * @private\n * @function Highcharts.SVGRenderer#html\n *\n * @param {string} str\n * The text of (subset) HTML to draw.\n *\n * @param {number} x\n * The x position of the text's lower left corner.\n *\n * @param {number} y\n * The y position of the text's lower left corner.\n *\n * @return {Highcharts.HTMLDOMElement}\n * HTML element.\n */\n HTMLRenderer.prototype.html = function (str, x, y) {\n var wrapper = this.createElement('span'), element = wrapper.element, renderer = wrapper.renderer, isSVG = renderer.isSVG, addSetters = function (gWrapper, style) {\n // These properties are set as attributes on the SVG group, and\n // as identical CSS properties on the div. (#3542)\n ['opacity', 'visibility'].forEach(function (prop) {\n gWrapper[prop + 'Setter'] = function (value, key, elem) {\n var styleObject = gWrapper.div ?\n gWrapper.div.style :\n style;\n SVGElement.prototype[prop + 'Setter']\n .call(this, value, key, elem);\n if (styleObject) {\n styleObject[key] = value;\n }\n };\n });\n gWrapper.addedSetters = true;\n };\n // Text setter\n wrapper.textSetter = function (value) {\n if (value !== this.textStr) {\n delete this.bBox;\n delete this.oldTextWidth;\n AST.setElementHTML(this.element, pick(value, ''));\n this.textStr = value;\n wrapper.doTransform = true;\n }\n };\n // Add setters for the element itself (#4938)\n if (isSVG) { // #4938, only for HTML within SVG\n addSetters(wrapper, wrapper.element.style);\n }\n // Various setters which rely on update transform\n wrapper.xSetter =\n wrapper.ySetter =\n wrapper.alignSetter =\n wrapper.rotationSetter =\n function (value, key) {\n if (key === 'align') {\n // Do not overwrite the SVGElement.align method. Same as VML.\n wrapper.alignValue = wrapper.textAlign = value;\n }\n else {\n wrapper[key] = value;\n }\n wrapper.doTransform = true;\n };\n // Runs at the end of .attr()\n wrapper.afterSetters = function () {\n // Update transform. Do this outside the loop to prevent redundant\n // updating for batch setting of attributes.\n if (this.doTransform) {\n this.htmlUpdateTransform();\n this.doTransform = false;\n }\n };\n // Set the default attributes\n wrapper\n .attr({\n text: str,\n x: Math.round(x),\n y: Math.round(y)\n })\n .css({\n position: 'absolute'\n });\n if (!renderer.styledMode) {\n wrapper.css({\n fontFamily: this.style.fontFamily,\n fontSize: this.style.fontSize\n });\n }\n // Keep the whiteSpace style outside the wrapper.styles collection\n element.style.whiteSpace = 'nowrap';\n // Use the HTML specific .css method\n wrapper.css = wrapper.htmlCss;\n // This is specific for HTML within SVG\n if (isSVG) {\n wrapper.add = function (svgGroupWrapper) {\n var container = renderer.box.parentNode, parents = [];\n var htmlGroup, parentGroup;\n this.parentGroup = svgGroupWrapper;\n // Create a mock group to hold the HTML elements\n if (svgGroupWrapper) {\n htmlGroup = svgGroupWrapper.div;\n if (!htmlGroup) {\n // Read the parent chain into an array and read from top\n // down\n parentGroup = svgGroupWrapper;\n while (parentGroup) {\n parents.push(parentGroup);\n // Move up to the next parent group\n parentGroup = parentGroup.parentGroup;\n }\n // Ensure dynamically updating position when any parent\n // is translated\n parents.reverse().forEach(function (parentGroup) {\n var cls = attr(parentGroup.element, 'class');\n /**\n * Common translate setter for X and Y on the HTML\n * group. Reverted the fix for #6957 du to\n * positioning problems and offline export (#7254,\n * #7280, #7529)\n * @private\n * @param {*} value\n * @param {string} key\n */\n function translateSetter(value, key) {\n parentGroup[key] = value;\n if (key === 'translateX') {\n htmlGroupStyle.left = value + 'px';\n }\n else {\n htmlGroupStyle.top = value + 'px';\n }\n parentGroup.doTransform = true;\n }\n // Create a HTML div and append it to the parent div\n // to emulate the SVG group structure\n var parentGroupStyles = parentGroup.styles || {};\n htmlGroup =\n parentGroup.div =\n parentGroup.div || createElement('div', cls ? { className: cls } : void 0, {\n position: 'absolute',\n left: (parentGroup.translateX || 0) + 'px',\n top: (parentGroup.translateY || 0) + 'px',\n display: parentGroup.display,\n opacity: parentGroup.opacity,\n cursor: parentGroupStyles.cursor,\n pointerEvents: (\n // #5595\n parentGroupStyles.pointerEvents),\n visibility: parentGroup.visibility\n // the top group is appended to container\n }, htmlGroup || container);\n // Shortcut\n var htmlGroupStyle = htmlGroup.style;\n // Set listeners to update the HTML div's position\n // whenever the SVG group position is changed.\n extend(parentGroup, {\n // (#7287) Pass htmlGroup to use\n // the related group\n classSetter: (function (htmlGroup) {\n return function (value) {\n this.element.setAttribute('class', value);\n htmlGroup.className = value;\n };\n }(htmlGroup)),\n on: function () {\n if (parents[0].div) { // #6418\n wrapper.on.apply({\n element: parents[0].div,\n onEvents: parentGroup.onEvents\n }, arguments);\n }\n return parentGroup;\n },\n translateXSetter: translateSetter,\n translateYSetter: translateSetter\n });\n if (!parentGroup.addedSetters) {\n addSetters(parentGroup);\n }\n });\n }\n }\n else {\n htmlGroup = container;\n }\n htmlGroup.appendChild(element);\n // Shared with VML:\n wrapper.added = true;\n if (wrapper.alignOnAdd) {\n wrapper.htmlUpdateTransform();\n }\n return wrapper;\n };\n }\n return wrapper;\n };\n /* *\n *\n * Static Properties\n *\n * */\n HTMLRenderer.composedClasses = [];\n return HTMLRenderer;\n}(SVGRenderer));\n/* *\n *\n * Default Export\n *\n * */\nexport default HTMLRenderer;\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport U from '../Utilities.js';\nvar addEvent = U.addEvent, getMagnitude = U.getMagnitude, normalizeTickInterval = U.normalizeTickInterval, timeUnits = U.timeUnits;\n/* *\n *\n * Composition\n *\n * */\n/* eslint-disable valid-jsdoc */\nvar DateTimeAxis;\n(function (DateTimeAxis) {\n /* *\n *\n * Declarations\n *\n * */\n /* *\n *\n * Constants\n *\n * */\n var composedClasses = [];\n /* *\n *\n * Functions\n *\n * */\n /**\n * Extends axis class with date and time support.\n * @private\n */\n function compose(AxisClass) {\n if (composedClasses.indexOf(AxisClass) === -1) {\n composedClasses.push(AxisClass);\n AxisClass.keepProps.push('dateTime');\n var axisProto = AxisClass.prototype;\n axisProto.getTimeTicks = getTimeTicks;\n addEvent(AxisClass, 'init', onInit);\n }\n return AxisClass;\n }\n DateTimeAxis.compose = compose;\n /**\n * Set the tick positions to a time unit that makes sense, for example\n * on the first of each month or on every Monday. Return an array with\n * the time positions. Used in datetime axes as well as for grouping\n * data on a datetime axis.\n *\n * @private\n * @function Highcharts.Axis#getTimeTicks\n * @param {Highcharts.TimeNormalizeObject} normalizedInterval\n * The interval in axis values (ms) and thecount.\n * @param {number} min\n * The minimum in axis values.\n * @param {number} max\n * The maximum in axis values.\n */\n function getTimeTicks() {\n return this.chart.time.getTimeTicks.apply(this.chart.time, arguments);\n }\n /**\n * @private\n */\n function onInit(e) {\n var axis = this;\n var options = e.userOptions;\n if (options.type !== 'datetime') {\n axis.dateTime = void 0;\n return;\n }\n if (!axis.dateTime) {\n axis.dateTime = new Additions(axis);\n }\n }\n /* *\n *\n * Classes\n *\n * */\n var Additions = /** @class */ (function () {\n /* *\n *\n * Constructors\n *\n * */\n function Additions(axis) {\n this.axis = axis;\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Get a normalized tick interval for dates. Returns a configuration\n * object with unit range (interval), count and name. Used to prepare\n * data for `getTimeTicks`. Previously this logic was part of\n * getTimeTicks, but as `getTimeTicks` now runs of segments in stock\n * charts, the normalizing logic was extracted in order to prevent it\n * for running over again for each segment having the same interval.\n * #662, #697.\n * @private\n */\n Additions.prototype.normalizeTimeTickInterval = function (tickInterval, unitsOption) {\n var units = (unitsOption || [[\n // unit name\n 'millisecond',\n // allowed multiples\n [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]\n ], [\n 'second',\n [1, 2, 5, 10, 15, 30]\n ], [\n 'minute',\n [1, 2, 5, 10, 15, 30]\n ], [\n 'hour',\n [1, 2, 3, 4, 6, 8, 12]\n ], [\n 'day',\n [1, 2]\n ], [\n 'week',\n [1, 2]\n ], [\n 'month',\n [1, 2, 3, 4, 6]\n ], [\n 'year',\n null\n ]]);\n var unit = units[units.length - 1], // default unit is years\n interval = timeUnits[unit[0]], multiples = unit[1], i;\n // loop through the units to find the one that best fits the\n // tickInterval\n for (i = 0; i < units.length; i++) {\n unit = units[i];\n interval = timeUnits[unit[0]];\n multiples = unit[1];\n if (units[i + 1]) {\n // lessThan is in the middle between the highest multiple\n // and the next unit.\n var lessThan = (interval *\n multiples[multiples.length - 1] +\n timeUnits[units[i + 1][0]]) / 2;\n // break and keep the current unit\n if (tickInterval <= lessThan) {\n break;\n }\n }\n }\n // prevent 2.5 years intervals, though 25, 250 etc. are allowed\n if (interval === timeUnits.year && tickInterval < 5 * interval) {\n multiples = [1, 2, 5];\n }\n // get the count\n var count = normalizeTickInterval(tickInterval / interval, multiples, unit[0] === 'year' ? // #1913, #2360\n Math.max(getMagnitude(tickInterval / interval), 1) :\n 1);\n return {\n unitRange: interval,\n count: count,\n unitName: unit[0]\n };\n };\n /**\n * Get the best date format for a specific X value based on the closest\n * point range on the axis.\n *\n * @private\n */\n Additions.prototype.getXDateFormat = function (x, dateTimeLabelFormats) {\n var axis = this.axis, time = axis.chart.time;\n return axis.closestPointRange ?\n time.getDateFormat(axis.closestPointRange, x, axis.options.startOfWeek, dateTimeLabelFormats) ||\n // #2546, 2581\n time.resolveDTLFormat(dateTimeLabelFormats.year).main :\n time.resolveDTLFormat(dateTimeLabelFormats.day).main;\n };\n return Additions;\n }());\n DateTimeAxis.Additions = Additions;\n})(DateTimeAxis || (DateTimeAxis = {}));\n/* *\n *\n * Default Export\n *\n * */\nexport default DateTimeAxis;\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport U from '../Utilities.js';\nvar addEvent = U.addEvent, getMagnitude = U.getMagnitude, normalizeTickInterval = U.normalizeTickInterval, pick = U.pick;\n/* *\n *\n * Class\n *\n * */\n/**\n * @private\n */\nvar LogarithmicAxis;\n(function (LogarithmicAxis) {\n /* *\n *\n * Declarations\n *\n * */\n /* *\n *\n * Constants\n *\n * */\n var composedClasses = [];\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /**\n * Provides logarithmic support for axes.\n * @private\n */\n function compose(AxisClass) {\n if (composedClasses.indexOf(AxisClass) === -1) {\n composedClasses.push(AxisClass);\n AxisClass.keepProps.push('logarithmic');\n addEvent(AxisClass, 'init', onInit);\n addEvent(AxisClass, 'afterInit', onAfterInit);\n }\n return AxisClass;\n }\n LogarithmicAxis.compose = compose;\n /**\n * @private\n */\n function onInit(e) {\n var axis = this;\n var options = e.userOptions;\n var logarithmic = axis.logarithmic;\n if (options.type !== 'logarithmic') {\n axis.logarithmic = void 0;\n }\n else {\n if (!logarithmic) {\n logarithmic = axis.logarithmic = new Additions(axis);\n }\n }\n }\n /**\n * @private\n */\n function onAfterInit() {\n var axis = this;\n var log = axis.logarithmic;\n // extend logarithmic axis\n if (log) {\n axis.lin2val = function (num) {\n return log.lin2log(num);\n };\n axis.val2lin = function (num) {\n return log.log2lin(num);\n };\n }\n }\n /* *\n *\n * Class\n *\n * */\n /**\n * Provides logarithmic support for axes.\n * @private\n * @class\n */\n var Additions = /** @class */ (function () {\n /* *\n *\n * Constructors\n *\n * */\n function Additions(axis) {\n this.axis = axis;\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Set the tick positions of a logarithmic axis.\n */\n Additions.prototype.getLogTickPositions = function (interval, min, max, minor) {\n var log = this;\n var axis = log.axis;\n var axisLength = axis.len;\n var options = axis.options;\n // Since we use this method for both major and minor ticks,\n // use a local variable and return the result\n var positions = [];\n // Reset\n if (!minor) {\n log.minorAutoInterval = void 0;\n }\n // First case: All ticks fall on whole logarithms: 1, 10, 100 etc.\n if (interval >= 0.5) {\n interval = Math.round(interval);\n positions = axis.getLinearTickPositions(interval, min, max);\n // Second case: We need intermediary ticks. For example\n // 1, 2, 4, 6, 8, 10, 20, 40 etc.\n }\n else if (interval >= 0.08) {\n var roundedMin = Math.floor(min);\n var intermediate = void 0, i = void 0, j = void 0, len = void 0, pos = void 0, lastPos = void 0, break2 = void 0;\n if (interval > 0.3) {\n intermediate = [1, 2, 4];\n // 0.2 equals five minor ticks per 1, 10, 100 etc\n }\n else if (interval > 0.15) {\n intermediate = [1, 2, 4, 6, 8];\n }\n else { // 0.1 equals ten minor ticks per 1, 10, 100 etc\n intermediate = [1, 2, 3, 4, 5, 6, 7, 8, 9];\n }\n for (i = roundedMin; i < max + 1 && !break2; i++) {\n len = intermediate.length;\n for (j = 0; j < len && !break2; j++) {\n pos = log.log2lin(log.lin2log(i) * intermediate[j]);\n // #1670, lastPos is #3113\n if (pos > min &&\n (!minor || lastPos <= max) &&\n typeof lastPos !== 'undefined') {\n positions.push(lastPos);\n }\n if (lastPos > max) {\n break2 = true;\n }\n lastPos = pos;\n }\n }\n // Third case: We are so deep in between whole logarithmic values,\n // that we might as well handle the tick positions like a linear\n // axis. For example 1.01, 1.02, 1.03, 1.04.\n }\n else {\n var realMin = log.lin2log(min), realMax = log.lin2log(max), tickIntervalOption = minor ?\n axis.getMinorTickInterval() :\n options.tickInterval, filteredTickIntervalOption = tickIntervalOption === 'auto' ?\n null :\n tickIntervalOption, tickPixelIntervalOption = options.tickPixelInterval / (minor ? 5 : 1), totalPixelLength = minor ?\n axisLength / axis.tickPositions.length :\n axisLength;\n interval = pick(filteredTickIntervalOption, log.minorAutoInterval, (realMax - realMin) *\n tickPixelIntervalOption / (totalPixelLength || 1));\n interval = normalizeTickInterval(interval);\n positions = axis.getLinearTickPositions(interval, realMin, realMax).map(log.log2lin);\n if (!minor) {\n log.minorAutoInterval = interval / 5;\n }\n }\n // Set the axis-level tickInterval variable\n if (!minor) {\n axis.tickInterval = interval;\n }\n return positions;\n };\n Additions.prototype.lin2log = function (num) {\n return Math.pow(10, num);\n };\n Additions.prototype.log2lin = function (num) {\n return Math.log(num) / Math.LN10;\n };\n return Additions;\n }());\n LogarithmicAxis.Additions = Additions;\n})(LogarithmicAxis || (LogarithmicAxis = {}));\n/* *\n *\n * Default Export\n *\n * */\nexport default LogarithmicAxis;\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport U from '../../Utilities.js';\nvar erase = U.erase, extend = U.extend, isNumber = U.isNumber;\n/* *\n *\n * Composition\n *\n * */\nvar PlotLineOrBandAxis;\n(function (PlotLineOrBandAxis) {\n /* *\n *\n * Declarations\n *\n * */\n /* *\n *\n * Constants\n *\n * */\n var composedClasses = [];\n /* *\n *\n * Variables\n *\n * */\n var PlotLineOrBandClass;\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /**\n * @private\n */\n function compose(PlotLineOrBandType, AxisClass) {\n if (!PlotLineOrBandClass) {\n PlotLineOrBandClass = PlotLineOrBandType;\n }\n if (composedClasses.indexOf(AxisClass) === -1) {\n composedClasses.push(AxisClass);\n extend(AxisClass.prototype, Additions.prototype);\n }\n return AxisClass;\n }\n PlotLineOrBandAxis.compose = compose;\n /* *\n *\n * Classes\n *\n * */\n /**\n * Object with members for extending the Axis prototype.\n * @private\n */\n var Additions = /** @class */ (function () {\n function Additions() {\n }\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable no-invalid-this, valid-jsdoc */\n /**\n * Internal function to create the SVG path definition for a plot band.\n *\n * @function Highcharts.Axis#getPlotBandPath\n *\n * @param {number} from\n * The axis value to start from.\n *\n * @param {number} to\n * The axis value to end on.\n *\n * @param {Highcharts.AxisPlotBandsOptions|Highcharts.AxisPlotLinesOptions} options\n * The plotBand or plotLine configuration object.\n *\n * @return {Highcharts.SVGPathArray}\n * The SVG path definition in array form.\n */\n Additions.prototype.getPlotBandPath = function (from, to, options) {\n if (options === void 0) { options = this.options; }\n var toPath = this.getPlotLinePath({\n value: to,\n force: true,\n acrossPanes: options.acrossPanes\n }), result = [], horiz = this.horiz, outside = !isNumber(this.min) ||\n !isNumber(this.max) ||\n (from < this.min && to < this.min) ||\n (from > this.max && to > this.max);\n var path = this.getPlotLinePath({\n value: from,\n force: true,\n acrossPanes: options.acrossPanes\n }), i, \n // #4964 check if chart is inverted or plotband is on yAxis\n plus = 1, isFlat;\n if (path && toPath) {\n // Flat paths don't need labels (#3836)\n if (outside) {\n isFlat = path.toString() === toPath.toString();\n plus = 0;\n }\n // Go over each subpath - for panes in Highcharts Stock\n for (i = 0; i < path.length; i += 2) {\n var pathStart = path[i], pathEnd = path[i + 1], toPathStart = toPath[i], toPathEnd = toPath[i + 1];\n // Type checking all affected path segments. Consider\n // something smarter.\n if ((pathStart[0] === 'M' || pathStart[0] === 'L') &&\n (pathEnd[0] === 'M' || pathEnd[0] === 'L') &&\n (toPathStart[0] === 'M' || toPathStart[0] === 'L') &&\n (toPathEnd[0] === 'M' || toPathEnd[0] === 'L')) {\n // Add 1 pixel when coordinates are the same\n if (horiz && toPathStart[1] === pathStart[1]) {\n toPathStart[1] += plus;\n toPathEnd[1] += plus;\n }\n else if (!horiz && toPathStart[2] === pathStart[2]) {\n toPathStart[2] += plus;\n toPathEnd[2] += plus;\n }\n result.push(['M', pathStart[1], pathStart[2]], ['L', pathEnd[1], pathEnd[2]], ['L', toPathEnd[1], toPathEnd[2]], ['L', toPathStart[1], toPathStart[2]], ['Z']);\n }\n result.isFlat = isFlat;\n }\n }\n else { // outside the axis area\n path = null;\n }\n return result;\n };\n /**\n * Add a plot band after render time.\n *\n * @sample highcharts/members/axis-addplotband/\n * Toggle the plot band from a button\n *\n * @function Highcharts.Axis#addPlotBand\n *\n * @param {Highcharts.AxisPlotBandsOptions} options\n * A configuration object for the plot band, as defined in\n * [xAxis.plotBands](https://api.highcharts.com/highcharts/xAxis.plotBands).\n *\n * @return {Highcharts.PlotLineOrBand|undefined}\n * The added plot band.\n */\n Additions.prototype.addPlotBand = function (options) {\n return this.addPlotBandOrLine(options, 'plotBands');\n };\n /**\n * Add a plot line after render time.\n *\n * @sample highcharts/members/axis-addplotline/\n * Toggle the plot line from a button\n *\n * @function Highcharts.Axis#addPlotLine\n *\n * @param {Highcharts.AxisPlotLinesOptions} options\n * A configuration object for the plot line, as defined in\n * [xAxis.plotLines](https://api.highcharts.com/highcharts/xAxis.plotLines).\n *\n * @return {Highcharts.PlotLineOrBand|undefined}\n * The added plot line.\n */\n Additions.prototype.addPlotLine = function (options) {\n return this.addPlotBandOrLine(options, 'plotLines');\n };\n /**\n * Add a plot band or plot line after render time. Called from\n * addPlotBand and addPlotLine internally.\n *\n * @private\n * @function Highcharts.Axis#addPlotBandOrLine\n * @param {Highcharts.AxisPlotBandsOptions|Highcharts.AxisPlotLinesOptions} options\n * The plotBand or plotLine configuration object.\n */\n Additions.prototype.addPlotBandOrLine = function (options, coll) {\n var _this = this;\n var userOptions = this.userOptions;\n var obj = new PlotLineOrBandClass(this, options);\n if (this.visible) {\n obj = obj.render();\n }\n if (obj) { // #2189\n if (!this._addedPlotLB) {\n this._addedPlotLB = true;\n (userOptions.plotLines || [])\n .concat(userOptions.plotBands || [])\n .forEach(function (plotLineOptions) {\n _this.addPlotBandOrLine(plotLineOptions);\n });\n }\n // Add it to the user options for exporting and Axis.update\n if (coll) {\n // Workaround Microsoft/TypeScript issue #32693\n var updatedOptions = (userOptions[coll] || []);\n updatedOptions.push(options);\n userOptions[coll] = updatedOptions;\n }\n this.plotLinesAndBands.push(obj);\n }\n return obj;\n };\n /**\n * Remove a plot band or plot line from the chart by id. Called\n * internally from `removePlotBand` and `removePlotLine`.\n * @private\n * @function Highcharts.Axis#removePlotBandOrLine\n */\n Additions.prototype.removePlotBandOrLine = function (id) {\n var plotLinesAndBands = this.plotLinesAndBands, options = this.options, userOptions = this.userOptions;\n if (plotLinesAndBands) { // #15639\n var i_1 = plotLinesAndBands.length;\n while (i_1--) {\n if (plotLinesAndBands[i_1].id === id) {\n plotLinesAndBands[i_1].destroy();\n }\n }\n ([\n options.plotLines || [],\n userOptions.plotLines || [],\n options.plotBands || [],\n userOptions.plotBands || []\n ]).forEach(function (arr) {\n i_1 = arr.length;\n while (i_1--) {\n if ((arr[i_1] || {}).id === id) {\n erase(arr, arr[i_1]);\n }\n }\n });\n }\n };\n /**\n * Remove a plot band by its id.\n *\n * @sample highcharts/members/axis-removeplotband/\n * Remove plot band by id\n * @sample highcharts/members/axis-addplotband/\n * Toggle the plot band from a button\n *\n * @function Highcharts.Axis#removePlotBand\n *\n * @param {string} id\n * The plot band's `id` as given in the original configuration\n * object or in the `addPlotBand` option.\n */\n Additions.prototype.removePlotBand = function (id) {\n this.removePlotBandOrLine(id);\n };\n /**\n * Remove a plot line by its id.\n *\n * @sample highcharts/xaxis/plotlines-id/\n * Remove plot line by id\n * @sample highcharts/members/axis-addplotline/\n * Toggle the plot line from a button\n *\n * @function Highcharts.Axis#removePlotLine\n *\n * @param {string} id\n * The plot line's `id` as given in the original configuration\n * object or in the `addPlotLine` option.\n */\n Additions.prototype.removePlotLine = function (id) {\n this.removePlotBandOrLine(id);\n };\n return Additions;\n }());\n})(PlotLineOrBandAxis || (PlotLineOrBandAxis = {}));\n/* *\n *\n * Default Export\n *\n * */\nexport default PlotLineOrBandAxis;\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport PlotLineOrBandAxis from './PlotLineOrBandAxis.js';\nimport U from '../../Utilities.js';\nvar arrayMax = U.arrayMax, arrayMin = U.arrayMin, defined = U.defined, destroyObjectProperties = U.destroyObjectProperties, erase = U.erase, fireEvent = U.fireEvent, merge = U.merge, objectEach = U.objectEach, pick = U.pick;\n/* *\n *\n * Class\n *\n * */\n/**\n * The object wrapper for plot lines and plot bands\n *\n * @class\n * @name Highcharts.PlotLineOrBand\n *\n * @param {Highcharts.Axis} axis\n * Related axis.\n *\n * @param {Highcharts.AxisPlotLinesOptions|Highcharts.AxisPlotBandsOptions} [options]\n * Options to use.\n */\nvar PlotLineOrBand = /** @class */ (function () {\n /* *\n *\n * Constructor\n *\n * */\n function PlotLineOrBand(axis, options) {\n this.axis = axis;\n if (options) {\n this.options = options;\n this.id = options.id;\n }\n }\n /* *\n *\n * Static Functions\n *\n * */\n PlotLineOrBand.compose = function (AxisClass) {\n return PlotLineOrBandAxis.compose(PlotLineOrBand, AxisClass);\n };\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable no-invalid-this, valid-jsdoc */\n /**\n * Render the plot line or plot band. If it is already existing,\n * move it.\n * @private\n * @function Highcharts.PlotLineOrBand#render\n */\n PlotLineOrBand.prototype.render = function () {\n fireEvent(this, 'render');\n var plotLine = this, axis = plotLine.axis, horiz = axis.horiz, log = axis.logarithmic, options = plotLine.options, color = options.color, zIndex = pick(options.zIndex, 0), events = options.events, groupAttribs = {}, renderer = axis.chart.renderer;\n var optionsLabel = options.label, label = plotLine.label, to = options.to, from = options.from, value = options.value, svgElem = plotLine.svgElem, path = [], group;\n var isBand = defined(from) && defined(to), isLine = defined(value), isNew = !svgElem, attribs = {\n 'class': 'highcharts-plot-' + (isBand ? 'band ' : 'line ') +\n (options.className || '')\n };\n var groupName = isBand ? 'bands' : 'lines';\n // logarithmic conversion\n if (log) {\n from = log.log2lin(from);\n to = log.log2lin(to);\n value = log.log2lin(value);\n }\n // Set the presentational attributes\n if (!axis.chart.styledMode) {\n if (isLine) {\n attribs.stroke = color || \"#999999\" /* Palette.neutralColor40 */;\n attribs['stroke-width'] = pick(options.width, 1);\n if (options.dashStyle) {\n attribs.dashstyle =\n options.dashStyle;\n }\n }\n else if (isBand) { // plot band\n attribs.fill = color || \"#e6ebf5\" /* Palette.highlightColor10 */;\n if (options.borderWidth) {\n attribs.stroke = options.borderColor;\n attribs['stroke-width'] = options.borderWidth;\n }\n }\n }\n // Grouping and zIndex\n groupAttribs.zIndex = zIndex;\n groupName += '-' + zIndex;\n group = axis.plotLinesAndBandsGroups[groupName];\n if (!group) {\n axis.plotLinesAndBandsGroups[groupName] = group =\n renderer.g('plot-' + groupName)\n .attr(groupAttribs).add();\n }\n // Create the path\n if (isNew) {\n /**\n * SVG element of the plot line or band.\n *\n * @name Highcharts.PlotLineOrBand#svgElem\n * @type {Highcharts.SVGElement}\n */\n plotLine.svgElem = svgElem = renderer\n .path()\n .attr(attribs)\n .add(group);\n }\n // Set the path or return\n if (isLine) {\n path = axis.getPlotLinePath({\n value: value,\n lineWidth: svgElem.strokeWidth(),\n acrossPanes: options.acrossPanes\n });\n }\n else if (isBand) { // plot band\n path = axis.getPlotBandPath(from, to, options);\n }\n else {\n return;\n }\n // common for lines and bands\n // Add events only if they were not added before.\n if (!plotLine.eventsAdded && events) {\n objectEach(events, function (event, eventType) {\n svgElem.on(eventType, function (e) {\n events[eventType].apply(plotLine, [e]);\n });\n });\n plotLine.eventsAdded = true;\n }\n if ((isNew || !svgElem.d) && path && path.length) {\n svgElem.attr({ d: path });\n }\n else if (svgElem) {\n if (path) {\n svgElem.show();\n svgElem.animate({ d: path });\n }\n else if (svgElem.d) {\n svgElem.hide();\n if (label) {\n plotLine.label = label = label.destroy();\n }\n }\n }\n // the plot band/line label\n if (optionsLabel &&\n (defined(optionsLabel.text) || defined(optionsLabel.formatter)) &&\n path &&\n path.length &&\n axis.width > 0 &&\n axis.height > 0 &&\n !path.isFlat) {\n // apply defaults\n optionsLabel = merge({\n align: horiz && isBand && 'center',\n x: horiz ? !isBand && 4 : 10,\n verticalAlign: !horiz && isBand && 'middle',\n y: horiz ? isBand ? 16 : 10 : isBand ? 6 : -4,\n rotation: horiz && !isBand && 90\n }, optionsLabel);\n this.renderLabel(optionsLabel, path, isBand, zIndex);\n }\n else if (label) { // move out of sight\n label.hide();\n }\n // chainable\n return plotLine;\n };\n /**\n * Render and align label for plot line or band.\n * @private\n * @function Highcharts.PlotLineOrBand#renderLabel\n */\n PlotLineOrBand.prototype.renderLabel = function (optionsLabel, path, isBand, zIndex) {\n var plotLine = this, axis = plotLine.axis, renderer = axis.chart.renderer;\n var label = plotLine.label;\n // add the SVG element\n if (!label) {\n /**\n * SVG element of the label.\n *\n * @name Highcharts.PlotLineOrBand#label\n * @type {Highcharts.SVGElement}\n */\n plotLine.label = label = renderer\n .text(this.getLabelText(optionsLabel), 0, 0, optionsLabel.useHTML)\n .attr({\n align: optionsLabel.textAlign || optionsLabel.align,\n rotation: optionsLabel.rotation,\n 'class': 'highcharts-plot-' + (isBand ? 'band' : 'line') +\n '-label ' + (optionsLabel.className || ''),\n zIndex: zIndex\n })\n .add();\n if (!axis.chart.styledMode) {\n label.css(merge({\n textOverflow: 'ellipsis'\n }, optionsLabel.style));\n }\n }\n // get the bounding box and align the label\n // #3000 changed to better handle choice between plotband or plotline\n var xBounds = path.xBounds ||\n [path[0][1], path[1][1], (isBand ? path[2][1] : path[0][1])];\n var yBounds = path.yBounds ||\n [path[0][2], path[1][2], (isBand ? path[2][2] : path[0][2])];\n var x = arrayMin(xBounds);\n var y = arrayMin(yBounds);\n label.align(optionsLabel, false, {\n x: x,\n y: y,\n width: arrayMax(xBounds) - x,\n height: arrayMax(yBounds) - y\n });\n if (!label.alignValue || label.alignValue === 'left') {\n var width = optionsLabel.clip ?\n axis.width : axis.chart.chartWidth;\n label.css({\n width: (label.rotation === 90 ?\n axis.height - (label.alignAttr.y - axis.top) :\n width - (label.alignAttr.x - axis.left)) + 'px'\n });\n }\n label.show(true);\n };\n /**\n * Get label's text content.\n * @private\n * @function Highcharts.PlotLineOrBand#getLabelText\n */\n PlotLineOrBand.prototype.getLabelText = function (optionsLabel) {\n return defined(optionsLabel.formatter) ?\n optionsLabel.formatter\n .call(this) :\n optionsLabel.text;\n };\n /**\n * Remove the plot line or band.\n *\n * @function Highcharts.PlotLineOrBand#destroy\n */\n PlotLineOrBand.prototype.destroy = function () {\n // remove it from the lookup\n erase(this.axis.plotLinesAndBands, this);\n delete this.axis;\n destroyObjectProperties(this);\n };\n return PlotLineOrBand;\n}());\n/* *\n *\n * Default Export\n *\n * */\nexport default PlotLineOrBand;\n/* *\n *\n * API Options\n *\n * */\n/**\n * Options for plot bands on axes.\n *\n * @typedef {Highcharts.XAxisPlotBandsOptions|Highcharts.YAxisPlotBandsOptions|Highcharts.ZAxisPlotBandsOptions} Highcharts.AxisPlotBandsOptions\n */\n/**\n * Options for plot band labels on axes.\n *\n * @typedef {Highcharts.XAxisPlotBandsLabelOptions|Highcharts.YAxisPlotBandsLabelOptions|Highcharts.ZAxisPlotBandsLabelOptions} Highcharts.AxisPlotBandsLabelOptions\n */\n/**\n * Options for plot lines on axes.\n *\n * @typedef {Highcharts.XAxisPlotLinesOptions|Highcharts.YAxisPlotLinesOptions|Highcharts.ZAxisPlotLinesOptions} Highcharts.AxisPlotLinesOptions\n */\n/**\n * Options for plot line labels on axes.\n *\n * @typedef {Highcharts.XAxisPlotLinesLabelOptions|Highcharts.YAxisPlotLinesLabelOptions|Highcharts.ZAxisPlotLinesLabelOptions} Highcharts.AxisPlotLinesLabelOptions\n */\n('');\n/* *\n *\n * API Options\n *\n * */\n/**\n * An array of colored bands stretching across the plot area marking an\n * interval on the axis.\n *\n * In styled mode, the plot bands are styled by the `.highcharts-plot-band`\n * class in addition to the `className` option.\n *\n * @productdesc {highcharts}\n * In a gauge, a plot band on the Y axis (value axis) will stretch along the\n * perimeter of the gauge.\n *\n * @type {Array<*>}\n * @product highcharts highstock gantt\n * @apioption xAxis.plotBands\n */\n/**\n * Flag to decide if plotBand should be rendered across all panes.\n *\n * @since 7.1.2\n * @product highstock\n * @type {boolean}\n * @default true\n * @apioption xAxis.plotBands.acrossPanes\n */\n/**\n * Border color for the plot band. Also requires `borderWidth` to be set.\n *\n * @type {Highcharts.ColorString}\n * @apioption xAxis.plotBands.borderColor\n */\n/**\n * Border width for the plot band. Also requires `borderColor` to be set.\n *\n * @type {number}\n * @default 0\n * @apioption xAxis.plotBands.borderWidth\n */\n/**\n * A custom class name, in addition to the default `highcharts-plot-band`,\n * to apply to each individual band.\n *\n * @type {string}\n * @since 5.0.0\n * @apioption xAxis.plotBands.className\n */\n/**\n * The color of the plot band.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-color/\n * Color band\n * @sample {highstock} stock/xaxis/plotbands/\n * Plot band on Y axis\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @default #e6ebf5\n * @apioption xAxis.plotBands.color\n */\n/**\n * An object defining mouse events for the plot band. Supported properties\n * are `click`, `mouseover`, `mouseout`, `mousemove`.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-events/\n * Mouse events demonstrated\n *\n * @since 1.2\n * @apioption xAxis.plotBands.events\n */\n/**\n * Click event on a plot band.\n *\n * @type {Highcharts.EventCallbackFunction}\n * @apioption xAxis.plotBands.events.click\n */\n/**\n * Mouse move event on a plot band.\n *\n * @type {Highcharts.EventCallbackFunction}\n * @apioption xAxis.plotBands.events.mousemove\n */\n/**\n * Mouse out event on the corner of a plot band.\n *\n * @type {Highcharts.EventCallbackFunction}\n * @apioption xAxis.plotBands.events.mouseout\n */\n/**\n * Mouse over event on a plot band.\n *\n * @type {Highcharts.EventCallbackFunction}\n * @apioption xAxis.plotBands.events.mouseover\n */\n/**\n * The start position of the plot band in axis units.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-color/\n * Datetime axis\n * @sample {highcharts} highcharts/xaxis/plotbands-from/\n * Categorized axis\n * @sample {highstock} stock/xaxis/plotbands/\n * Plot band on Y axis\n *\n * @type {number}\n * @apioption xAxis.plotBands.from\n */\n/**\n * An id used for identifying the plot band in Axis.removePlotBand.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-id/\n * Remove plot band by id\n * @sample {highstock} highcharts/xaxis/plotbands-id/\n * Remove plot band by id\n *\n * @type {string}\n * @apioption xAxis.plotBands.id\n */\n/**\n * The end position of the plot band in axis units.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-color/\n * Datetime axis\n * @sample {highcharts} highcharts/xaxis/plotbands-from/\n * Categorized axis\n * @sample {highstock} stock/xaxis/plotbands/\n * Plot band on Y axis\n *\n * @type {number}\n * @apioption xAxis.plotBands.to\n */\n/**\n * The z index of the plot band within the chart, relative to other\n * elements. Using the same z index as another element may give\n * unpredictable results, as the last rendered element will be on top.\n * Values from 0 to 20 make sense.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-color/\n * Behind plot lines by default\n * @sample {highcharts} highcharts/xaxis/plotbands-zindex/\n * Above plot lines\n * @sample {highcharts} highcharts/xaxis/plotbands-zindex-above-series/\n * Above plot lines and series\n *\n * @type {number}\n * @since 1.2\n * @apioption xAxis.plotBands.zIndex\n */\n/**\n * Text labels for the plot bands\n *\n * @product highcharts highstock gantt\n * @apioption xAxis.plotBands.label\n */\n/**\n * Horizontal alignment of the label. Can be one of \"left\", \"center\" or\n * \"right\".\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-align/\n * Aligned to the right\n * @sample {highstock} stock/xaxis/plotbands-label/\n * Plot band with labels\n *\n * @type {Highcharts.AlignValue}\n * @default center\n * @since 2.1\n * @apioption xAxis.plotBands.label.align\n */\n/**\n * Rotation of the text label in degrees .\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-rotation/\n * Vertical text\n *\n * @type {number}\n * @default 0\n * @since 2.1\n * @apioption xAxis.plotBands.label.rotation\n */\n/**\n * CSS styles for the text label.\n *\n * In styled mode, the labels are styled by the\n * `.highcharts-plot-band-label` class.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-style/\n * Blue and bold label\n *\n * @type {Highcharts.CSSObject}\n * @since 2.1\n * @apioption xAxis.plotBands.label.style\n */\n/**\n * The string text itself. A subset of HTML is supported.\n *\n * @type {string}\n * @since 2.1\n * @apioption xAxis.plotBands.label.text\n */\n/**\n * The text alignment for the label. While `align` determines where the\n * texts anchor point is placed within the plot band, `textAlign` determines\n * how the text is aligned against its anchor point. Possible values are\n * \"left\", \"center\" and \"right\". Defaults to the same as the `align` option.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-rotation/\n * Vertical text in center position but text-aligned left\n *\n * @type {Highcharts.AlignValue}\n * @since 2.1\n * @apioption xAxis.plotBands.label.textAlign\n */\n/**\n * Whether to [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n * to render the labels.\n *\n * @type {boolean}\n * @default false\n * @since 3.0.3\n * @apioption xAxis.plotBands.label.useHTML\n */\n/**\n * Vertical alignment of the label relative to the plot band. Can be one of\n * \"top\", \"middle\" or \"bottom\".\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-verticalalign/\n * Vertically centered label\n * @sample {highstock} stock/xaxis/plotbands-label/\n * Plot band with labels\n *\n * @type {Highcharts.VerticalAlignValue}\n * @default top\n * @since 2.1\n * @apioption xAxis.plotBands.label.verticalAlign\n */\n/**\n * Horizontal position relative the alignment. Default varies by\n * orientation.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-align/\n * Aligned 10px from the right edge\n * @sample {highstock} stock/xaxis/plotbands-label/\n * Plot band with labels\n *\n * @type {number}\n * @since 2.1\n * @apioption xAxis.plotBands.label.x\n */\n/**\n * Vertical position of the text baseline relative to the alignment. Default\n * varies by orientation.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-y/\n * Label on x axis\n * @sample {highstock} stock/xaxis/plotbands-label/\n * Plot band with labels\n *\n * @type {number}\n * @since 2.1\n * @apioption xAxis.plotBands.label.y\n */\n/**\n * An array of lines stretching across the plot area, marking a specific\n * value on one of the axes.\n *\n * In styled mode, the plot lines are styled by the\n * `.highcharts-plot-line` class in addition to the `className` option.\n *\n * @type {Array<*>}\n * @product highcharts highstock gantt\n * @sample {highcharts} highcharts/xaxis/plotlines-color/\n * Basic plot line\n * @sample {highcharts} highcharts/series-solidgauge/labels-auto-aligned/\n * Solid gauge plot line\n * @apioption xAxis.plotLines\n */\n/**\n * Flag to decide if plotLine should be rendered across all panes.\n *\n * @sample {highstock} stock/xaxis/plotlines-acrosspanes/\n * Plot lines on different panes\n *\n * @since 7.1.2\n * @product highstock\n * @type {boolean}\n * @default true\n * @apioption xAxis.plotLines.acrossPanes\n */\n/**\n * A custom class name, in addition to the default `highcharts-plot-line`,\n * to apply to each individual line.\n *\n * @type {string}\n * @since 5.0.0\n * @apioption xAxis.plotLines.className\n */\n/**\n * The color of the line.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-color/\n * A red line from X axis\n * @sample {highstock} stock/xaxis/plotlines/\n * Plot line on Y axis\n *\n * @type {Highcharts.ColorString}\n * @default #999999\n * @apioption xAxis.plotLines.color\n */\n/**\n * The dashing or dot style for the plot line. For possible values see\n * [this overview](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/plotoptions/series-dashstyle-all/).\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-dashstyle/\n * Dash and dot pattern\n * @sample {highstock} stock/xaxis/plotlines/\n * Plot line on Y axis\n *\n * @type {Highcharts.DashStyleValue}\n * @default Solid\n * @since 1.2\n * @apioption xAxis.plotLines.dashStyle\n */\n/**\n * An object defining mouse events for the plot line. Supported\n * properties are `click`, `mouseover`, `mouseout`, `mousemove`.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-events/\n * Mouse events demonstrated\n *\n * @since 1.2\n * @apioption xAxis.plotLines.events\n */\n/**\n * Click event on a plot band.\n *\n * @type {Highcharts.EventCallbackFunction}\n * @apioption xAxis.plotLines.events.click\n */\n/**\n * Mouse move event on a plot band.\n *\n * @type {Highcharts.EventCallbackFunction}\n * @apioption xAxis.plotLines.events.mousemove\n */\n/**\n * Mouse out event on the corner of a plot band.\n *\n * @type {Highcharts.EventCallbackFunction}\n * @apioption xAxis.plotLines.events.mouseout\n */\n/**\n * Mouse over event on a plot band.\n *\n * @type {Highcharts.EventCallbackFunction}\n * @apioption xAxis.plotLines.events.mouseover\n */\n/**\n * An id used for identifying the plot line in Axis.removePlotLine.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-id/\n * Remove plot line by id\n *\n * @type {string}\n * @apioption xAxis.plotLines.id\n */\n/**\n * The position of the line in axis units.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-color/\n * Between two categories on X axis\n * @sample {highstock} stock/xaxis/plotlines/\n * Plot line on Y axis\n *\n * @type {number}\n * @apioption xAxis.plotLines.value\n */\n/**\n * The width or thickness of the plot line.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-color/\n * 2px wide line from X axis\n * @sample {highstock} stock/xaxis/plotlines/\n * Plot line on Y axis\n *\n * @type {number}\n * @default 2\n * @apioption xAxis.plotLines.width\n */\n/**\n * The z index of the plot line within the chart.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-zindex-behind/\n * Behind plot lines by default\n * @sample {highcharts} highcharts/xaxis/plotlines-zindex-above/\n * Above plot lines\n * @sample {highcharts} highcharts/xaxis/plotlines-zindex-above-all/\n * Above plot lines and series\n *\n * @type {number}\n * @since 1.2\n * @apioption xAxis.plotLines.zIndex\n */\n/**\n * Text labels for the plot bands\n *\n * @apioption xAxis.plotLines.label\n */\n/**\n * Horizontal alignment of the label. Can be one of \"left\", \"center\" or\n * \"right\".\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-label-align-right/\n * Aligned to the right\n * @sample {highstock} stock/xaxis/plotlines/\n * Plot line on Y axis\n *\n * @type {Highcharts.AlignValue}\n * @default left\n * @since 2.1\n * @apioption xAxis.plotLines.label.align\n */\n/**\n * Whether to hide labels that are outside the plot area.\n *\n * @type {boolean}\n * @default false\n * @since 10.3.3\n * @apioption xAxis.plotLines.labels.clip\n */\n/**\n * Callback JavaScript function to format the label. Useful properties like\n * the value of plot line or the range of plot band (`from` & `to`\n * properties) can be found in `this.options` object.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-plotbands-label-formatter\n * Label formatters for plot line and plot band.\n * @type {Highcharts.FormatterCallbackFunction}\n * @apioption xAxis.plotLines.label.formatter\n */\n/**\n * Rotation of the text label in degrees. Defaults to 0 for horizontal plot\n * lines and 90 for vertical lines.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-label-verticalalign-middle/\n * Slanted text\n *\n * @type {number}\n * @since 2.1\n * @apioption xAxis.plotLines.label.rotation\n */\n/**\n * CSS styles for the text label.\n *\n * In styled mode, the labels are styled by the\n * `.highcharts-plot-line-label` class.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-label-style/\n * Blue and bold label\n *\n * @type {Highcharts.CSSObject}\n * @since 2.1\n * @apioption xAxis.plotLines.label.style\n */\n/**\n * The text itself. A subset of HTML is supported.\n *\n * @type {string}\n * @since 2.1\n * @apioption xAxis.plotLines.label.text\n */\n/**\n * The text alignment for the label. While `align` determines where the\n * texts anchor point is placed within the plot band, `textAlign` determines\n * how the text is aligned against its anchor point. Possible values are\n * \"left\", \"center\" and \"right\". Defaults to the same as the `align` option.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-label-textalign/\n * Text label in bottom position\n *\n * @type {Highcharts.AlignValue}\n * @since 2.1\n * @apioption xAxis.plotLines.label.textAlign\n */\n/**\n * Whether to [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n * to render the labels.\n *\n * @type {boolean}\n * @default false\n * @since 3.0.3\n * @apioption xAxis.plotLines.label.useHTML\n */\n/**\n * Vertical alignment of the label relative to the plot line. Can be\n * one of \"top\", \"middle\" or \"bottom\".\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-label-verticalalign-middle/\n * Vertically centered label\n *\n * @type {Highcharts.VerticalAlignValue}\n * @default {highcharts} top\n * @default {highstock} top\n * @since 2.1\n * @apioption xAxis.plotLines.label.verticalAlign\n */\n/**\n * Horizontal position relative the alignment. Default varies by\n * orientation.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-label-align-right/\n * Aligned 10px from the right edge\n * @sample {highstock} stock/xaxis/plotlines/\n * Plot line on Y axis\n *\n * @type {number}\n * @since 2.1\n * @apioption xAxis.plotLines.label.x\n */\n/**\n * Vertical position of the text baseline relative to the alignment. Default\n * varies by orientation.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-label-y/\n * Label below the plot line\n * @sample {highstock} stock/xaxis/plotlines/\n * Plot line on Y axis\n *\n * @type {number}\n * @since 2.1\n * @apioption xAxis.plotLines.label.y\n */\n/**\n * @type {Array<*>}\n * @extends xAxis.plotBands\n * @apioption yAxis.plotBands\n */\n/**\n * In a gauge chart, this option determines the inner radius of the\n * plot band that stretches along the perimeter. It can be given as\n * a percentage string, like `\"100%\"`, or as a pixel number, like `100`.\n * By default, the inner radius is controlled by the [thickness](\n * #yAxis.plotBands.thickness) option.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-gauge\n * Gauge plot band\n *\n * @type {number|string}\n * @since 2.3\n * @product highcharts\n * @apioption yAxis.plotBands.innerRadius\n */\n/**\n * In a gauge chart, this option determines the outer radius of the\n * plot band that stretches along the perimeter. It can be given as\n * a percentage string, like `\"100%\"`, or as a pixel number, like `100`.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-gauge\n * Gauge plot band\n *\n * @type {number|string}\n * @default 100%\n * @since 2.3\n * @product highcharts\n * @apioption yAxis.plotBands.outerRadius\n */\n/**\n * In a gauge chart, this option sets the width of the plot band\n * stretching along the perimeter. It can be given as a percentage\n * string, like `\"10%\"`, or as a pixel number, like `10`. The default\n * value 10 is the same as the default [tickLength](#yAxis.tickLength),\n * thus making the plot band act as a background for the tick markers.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-gauge\n * Gauge plot band\n *\n * @type {number|string}\n * @default 10\n * @since 2.3\n * @product highcharts\n * @apioption yAxis.plotBands.thickness\n */\n/**\n * @type {Array<*>}\n * @extends xAxis.plotLines\n * @apioption yAxis.plotLines\n */\n(''); // keeps doclets above in JS file\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * Highcharts feature to make the Y axis stay fixed when scrolling the chart\n * horizontally on mobile devices. Supports left and right side axes.\n */\n/*\nWIP on vertical scrollable plot area (#9378). To do:\n- Bottom axis positioning\n- Test with Gantt\n- Look for size optimizing the code\n- API and demos\n */\n'use strict';\nimport A from '../Core/Animation/AnimationUtilities.js';\nvar stop = A.stop;\nimport Axis from '../Core/Axis/Axis.js';\nimport Chart from '../Core/Chart/Chart.js';\nimport Series from '../Core/Series/Series.js';\nimport RendererRegistry from '../Core/Renderer/RendererRegistry.js';\nimport U from '../Core/Utilities.js';\nvar addEvent = U.addEvent, createElement = U.createElement, defined = U.defined, merge = U.merge, pick = U.pick;\n/* eslint-disable no-invalid-this, valid-jsdoc */\naddEvent(Chart, 'afterSetChartSize', function (e) {\n var scrollablePlotArea = this.options.chart.scrollablePlotArea, scrollableMinWidth = scrollablePlotArea && scrollablePlotArea.minWidth, scrollableMinHeight = scrollablePlotArea && scrollablePlotArea.minHeight, scrollablePixelsX, scrollablePixelsY, corrections;\n if (!this.renderer.forExport) {\n // The amount of pixels to scroll, the difference between chart\n // width and scrollable width\n if (scrollableMinWidth) {\n this.scrollablePixelsX = scrollablePixelsX = Math.max(0, scrollableMinWidth - this.chartWidth);\n if (scrollablePixelsX) {\n this.scrollablePlotBox = (this.renderer.scrollablePlotBox = merge(this.plotBox));\n this.plotBox.width = this.plotWidth += scrollablePixelsX;\n if (this.inverted) {\n this.clipBox.height += scrollablePixelsX;\n }\n else {\n this.clipBox.width += scrollablePixelsX;\n }\n corrections = {\n // Corrections for right side\n 1: { name: 'right', value: scrollablePixelsX }\n };\n }\n // Currently we can only do either X or Y\n }\n else if (scrollableMinHeight) {\n this.scrollablePixelsY = scrollablePixelsY = Math.max(0, scrollableMinHeight - this.chartHeight);\n if (defined(scrollablePixelsY)) {\n this.scrollablePlotBox = (this.renderer.scrollablePlotBox = merge(this.plotBox));\n this.plotBox.height = this.plotHeight += scrollablePixelsY;\n if (this.inverted) {\n this.clipBox.width += scrollablePixelsY;\n }\n else {\n this.clipBox.height += scrollablePixelsY;\n }\n corrections = {\n 2: { name: 'bottom', value: scrollablePixelsY }\n };\n }\n }\n if (corrections && !e.skipAxes) {\n this.axes.forEach(function (axis) {\n // For right and bottom axes, only fix the plot line length\n if (corrections[axis.side]) {\n // Get the plot lines right in getPlotLinePath,\n // temporarily set it to the adjusted plot width.\n axis.getPlotLinePath = function () {\n var marginName = corrections[axis.side].name, correctionValue = corrections[axis.side].value, \n // axis.right or axis.bottom\n margin = this[marginName], path;\n // Temporarily adjust\n this[marginName] = margin - correctionValue;\n path = Axis.prototype.getPlotLinePath.apply(this, arguments);\n // Reset\n this[marginName] = margin;\n return path;\n };\n }\n else {\n // Apply the corrected plotWidth\n axis.setAxisSize();\n axis.setAxisTranslation();\n }\n });\n }\n }\n});\naddEvent(Chart, 'render', function () {\n if (this.scrollablePixelsX || this.scrollablePixelsY) {\n if (this.setUpScrolling) {\n this.setUpScrolling();\n }\n this.applyFixed();\n }\n else if (this.fixedDiv) { // Has been in scrollable mode\n this.applyFixed();\n }\n});\n/**\n * @private\n * @function Highcharts.Chart#setUpScrolling\n * @return {void}\n */\nChart.prototype.setUpScrolling = function () {\n var _this = this;\n var css = {\n WebkitOverflowScrolling: 'touch',\n overflowX: 'hidden',\n overflowY: 'hidden'\n };\n if (this.scrollablePixelsX) {\n css.overflowX = 'auto';\n }\n if (this.scrollablePixelsY) {\n css.overflowY = 'auto';\n }\n // Insert a container with position relative\n // that scrolling and fixed container renders to (#10555)\n this.scrollingParent = createElement('div', {\n className: 'highcharts-scrolling-parent'\n }, {\n position: 'relative'\n }, this.renderTo);\n // Add the necessary divs to provide scrolling\n this.scrollingContainer = createElement('div', {\n 'className': 'highcharts-scrolling'\n }, css, this.scrollingParent);\n // On scroll, reset the chart position because it applies to the scrolled\n // container\n var lastHoverPoint;\n addEvent(this.scrollingContainer, 'scroll', function () {\n if (_this.pointer) {\n delete _this.pointer.chartPosition;\n if (_this.hoverPoint) {\n lastHoverPoint = _this.hoverPoint;\n }\n _this.pointer.runPointActions(void 0, lastHoverPoint, true);\n }\n });\n this.innerContainer = createElement('div', {\n 'className': 'highcharts-inner-container'\n }, null, this.scrollingContainer);\n // Now move the container inside\n this.innerContainer.appendChild(this.container);\n // Don't run again\n this.setUpScrolling = null;\n};\n/**\n * These elements are moved over to the fixed renderer and stay fixed when the\n * user scrolls the chart\n * @private\n */\nChart.prototype.moveFixedElements = function () {\n var container = this.container, fixedRenderer = this.fixedRenderer, fixedSelectors = [\n '.highcharts-breadcrumbs-group',\n '.highcharts-contextbutton',\n '.highcharts-credits',\n '.highcharts-legend',\n '.highcharts-legend-checkbox',\n '.highcharts-navigator-series',\n '.highcharts-navigator-xaxis',\n '.highcharts-navigator-yaxis',\n '.highcharts-navigator',\n '.highcharts-reset-zoom',\n '.highcharts-drillup-button',\n '.highcharts-scrollbar',\n '.highcharts-subtitle',\n '.highcharts-title'\n ], axisClass;\n if (this.scrollablePixelsX && !this.inverted) {\n axisClass = '.highcharts-yaxis';\n }\n else if (this.scrollablePixelsX && this.inverted) {\n axisClass = '.highcharts-xaxis';\n }\n else if (this.scrollablePixelsY && !this.inverted) {\n axisClass = '.highcharts-xaxis';\n }\n else if (this.scrollablePixelsY && this.inverted) {\n axisClass = '.highcharts-yaxis';\n }\n if (axisClass) {\n fixedSelectors.push(\"\".concat(axisClass, \":not(.highcharts-radial-axis)\"), \"\".concat(axisClass, \"-labels:not(.highcharts-radial-axis-labels)\"));\n }\n fixedSelectors.forEach(function (className) {\n [].forEach.call(container.querySelectorAll(className), function (elem) {\n (elem.namespaceURI === fixedRenderer.SVG_NS ?\n fixedRenderer.box :\n fixedRenderer.box.parentNode).appendChild(elem);\n elem.style.pointerEvents = 'auto';\n });\n });\n};\n/**\n * @private\n * @function Highcharts.Chart#applyFixed\n * @return {void}\n */\nChart.prototype.applyFixed = function () {\n var firstTime = !this.fixedDiv, chartOptions = this.options.chart, scrollableOptions = chartOptions.scrollablePlotArea, Renderer = RendererRegistry.getRendererType();\n var fixedRenderer, scrollableWidth, scrollableHeight;\n // First render\n if (firstTime) {\n this.fixedDiv = createElement('div', {\n className: 'highcharts-fixed'\n }, {\n position: 'absolute',\n overflow: 'hidden',\n pointerEvents: 'none',\n zIndex: (chartOptions.style && chartOptions.style.zIndex || 0) + 2,\n top: 0\n }, null, true);\n if (this.scrollingContainer) {\n this.scrollingContainer.parentNode.insertBefore(this.fixedDiv, this.scrollingContainer);\n }\n this.renderTo.style.overflow = 'visible';\n this.fixedRenderer = fixedRenderer = new Renderer(this.fixedDiv, this.chartWidth, this.chartHeight, this.options.chart.style);\n // Mask\n this.scrollableMask = fixedRenderer\n .path()\n .attr({\n fill: this.options.chart.backgroundColor || '#fff',\n 'fill-opacity': pick(scrollableOptions.opacity, 0.85),\n zIndex: -1\n })\n .addClass('highcharts-scrollable-mask')\n .add();\n addEvent(this, 'afterShowResetZoom', this.moveFixedElements);\n addEvent(this, 'afterApplyDrilldown', this.moveFixedElements);\n addEvent(this, 'afterLayOutTitles', this.moveFixedElements);\n }\n else {\n // Set the size of the fixed renderer to the visible width\n this.fixedRenderer.setSize(this.chartWidth, this.chartHeight);\n }\n if (this.scrollableDirty || firstTime) {\n this.scrollableDirty = false;\n this.moveFixedElements();\n }\n // Increase the size of the scrollable renderer and background\n scrollableWidth = this.chartWidth + (this.scrollablePixelsX || 0);\n scrollableHeight = this.chartHeight + (this.scrollablePixelsY || 0);\n stop(this.container);\n this.container.style.width = scrollableWidth + 'px';\n this.container.style.height = scrollableHeight + 'px';\n this.renderer.boxWrapper.attr({\n width: scrollableWidth,\n height: scrollableHeight,\n viewBox: [0, 0, scrollableWidth, scrollableHeight].join(' ')\n });\n this.chartBackground.attr({\n width: scrollableWidth,\n height: scrollableHeight\n });\n this.scrollingContainer.style.height = this.chartHeight + 'px';\n // Set scroll position\n if (firstTime) {\n if (scrollableOptions.scrollPositionX) {\n this.scrollingContainer.scrollLeft =\n this.scrollablePixelsX *\n scrollableOptions.scrollPositionX;\n }\n if (scrollableOptions.scrollPositionY) {\n this.scrollingContainer.scrollTop =\n this.scrollablePixelsY *\n scrollableOptions.scrollPositionY;\n }\n }\n // Mask behind the left and right side\n var axisOffset = this.axisOffset, maskTop = this.plotTop - axisOffset[0] - 1, maskLeft = this.plotLeft - axisOffset[3] - 1, maskBottom = this.plotTop + this.plotHeight + axisOffset[2] + 1, maskRight = this.plotLeft + this.plotWidth + axisOffset[1] + 1, maskPlotRight = this.plotLeft + this.plotWidth -\n (this.scrollablePixelsX || 0), maskPlotBottom = this.plotTop + this.plotHeight -\n (this.scrollablePixelsY || 0), d;\n if (this.scrollablePixelsX) {\n d = [\n // Left side\n ['M', 0, maskTop],\n ['L', this.plotLeft - 1, maskTop],\n ['L', this.plotLeft - 1, maskBottom],\n ['L', 0, maskBottom],\n ['Z'],\n // Right side\n ['M', maskPlotRight, maskTop],\n ['L', this.chartWidth, maskTop],\n ['L', this.chartWidth, maskBottom],\n ['L', maskPlotRight, maskBottom],\n ['Z']\n ];\n }\n else if (this.scrollablePixelsY) {\n d = [\n // Top side\n ['M', maskLeft, 0],\n ['L', maskLeft, this.plotTop - 1],\n ['L', maskRight, this.plotTop - 1],\n ['L', maskRight, 0],\n ['Z'],\n // Bottom side\n ['M', maskLeft, maskPlotBottom],\n ['L', maskLeft, this.chartHeight],\n ['L', maskRight, this.chartHeight],\n ['L', maskRight, maskPlotBottom],\n ['Z']\n ];\n }\n else {\n d = [['M', 0, 0]];\n }\n if (this.redrawTrigger !== 'adjustHeight') {\n this.scrollableMask.attr({ d: d });\n }\n};\naddEvent(Axis, 'afterInit', function () {\n this.chart.scrollableDirty = true;\n});\naddEvent(Series, 'show', function () {\n this.chart.scrollableDirty = true;\n});\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Options for a scrollable plot area. This feature provides a minimum size for\n * the plot area of the chart. If the size gets smaller than this, typically\n * on mobile devices, a native browser scrollbar is presented. This scrollbar\n * provides smooth scrolling for the contents of the plot area, whereas the\n * title, legend and unaffected axes are fixed.\n *\n * Since v7.1.2, a scrollable plot area can be defined for either horizontal or\n * vertical scrolling, depending on whether the `minWidth` or `minHeight`\n * option is set.\n *\n * @sample highcharts/chart/scrollable-plotarea\n * Scrollable plot area\n * @sample highcharts/chart/scrollable-plotarea-vertical\n * Vertically scrollable plot area\n * @sample {gantt} gantt/chart/scrollable-plotarea-vertical\n * Gantt chart with vertically scrollable plot area\n *\n * @since 6.1.0\n * @product highcharts gantt\n * @apioption chart.scrollablePlotArea\n */\n/**\n * The minimum height for the plot area. If it gets smaller than this, the plot\n * area will become scrollable.\n *\n * @type {number}\n * @since 7.1.2\n * @apioption chart.scrollablePlotArea.minHeight\n */\n/**\n * The minimum width for the plot area. If it gets smaller than this, the plot\n * area will become scrollable.\n *\n * @type {number}\n * @since 6.1.0\n * @apioption chart.scrollablePlotArea.minWidth\n */\n/**\n * The initial scrolling position of the scrollable plot area. Ranges from 0 to\n * 1, where 0 aligns the plot area to the left and 1 aligns it to the right.\n * Typically we would use 1 if the chart has right aligned Y axes.\n *\n * @type {number}\n * @since 6.1.0\n * @apioption chart.scrollablePlotArea.scrollPositionX\n */\n/**\n * The initial scrolling position of the scrollable plot area. Ranges from 0 to\n * 1, where 0 aligns the plot area to the top and 1 aligns it to the bottom.\n *\n * @type {number}\n * @since 7.1.2\n * @apioption chart.scrollablePlotArea.scrollPositionY\n */\n/**\n * The opacity of mask applied on one of the sides of the plot\n * area.\n *\n * @sample {highcharts} highcharts/chart/scrollable-plotarea-opacity\n * Disabled opacity for the mask\n *\n * @type {number}\n * @default 0.85\n * @since 7.1.1\n * @apioption chart.scrollablePlotArea.opacity\n */\n(''); // keep doclets above in transpiled file\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport FU from '../../FormatUtilities.js';\nvar format = FU.format;\nimport SeriesRegistry from '../../Series/SeriesRegistry.js';\nvar Series = SeriesRegistry.series;\nimport U from '../../Utilities.js';\nvar destroyObjectProperties = U.destroyObjectProperties, pick = U.pick, isNumber = U.isNumber;\n/* *\n *\n * Class\n *\n * */\n/**\n * The class for stacks. Each stack, on a specific X value and either negative\n * or positive, has its own stack item.\n * @private\n */\nvar StackItem = /** @class */ (function () {\n /* *\n *\n * Constructor\n *\n * */\n function StackItem(axis, options, negativeValue, x, stackOption) {\n var inverted = axis.chart.inverted, reversed = axis.reversed;\n this.axis = axis;\n // The stack goes to the left either if the stack has negative value\n // or when axis is reversed. XOR operator.\n var isNegative = (this.isNegative = !!negativeValue !== !!reversed);\n // Save the options to be able to style the label\n this.options = options = options || {};\n // Save the x value to be able to position the label later\n this.x = x;\n // Initialize total value\n this.total = null;\n this.cumulative = null;\n // This will keep each points' extremes stored by series.index and point\n // index\n this.points = {};\n this.hasValidPoints = false;\n // Save the stack option on the series configuration object,\n // and whether to treat it as percent\n this.stack = stackOption;\n this.leftCliff = 0;\n this.rightCliff = 0;\n // The align options and text align varies on whether the stack is\n // negative and if the chart is inverted or not.\n // First test the user supplied value, then use the dynamic.\n this.alignOptions = {\n align: options.align ||\n (inverted ? (isNegative ? 'left' : 'right') : 'center'),\n verticalAlign: options.verticalAlign ||\n (inverted ? 'middle' : isNegative ? 'bottom' : 'top'),\n y: options.y,\n x: options.x\n };\n this.textAlign =\n options.textAlign ||\n (inverted ? (!isNegative ? 'left' : 'right') : 'center');\n }\n /**\n * @private\n */\n StackItem.prototype.destroy = function () {\n destroyObjectProperties(this, this.axis);\n };\n /**\n * Renders the stack total label and adds it to the stack label group.\n * @private\n */\n StackItem.prototype.render = function (group) {\n var chart = this.axis.chart, options = this.options, formatOption = options.format, \n // Format the text in the label.\n str = formatOption ?\n format(formatOption, this, chart) :\n options.formatter.call(this);\n // Change the text to reflect the new total and set visibility to hidden\n // in case the serie is hidden\n if (this.label) {\n this.label.attr({ text: str, visibility: 'hidden' });\n }\n else {\n // Create new label\n this.label = chart.renderer.label(str, null, void 0, options.shape, void 0, void 0, options.useHTML, false, 'stack-labels');\n var attr = {\n r: options.borderRadius || 0,\n text: str,\n // set default padding to 5 as it is in datalabels #12308\n padding: pick(options.padding, 5),\n visibility: 'hidden' // hidden until setOffset is called\n };\n if (!chart.styledMode) {\n attr.fill = options.backgroundColor;\n attr.stroke = options.borderColor;\n attr['stroke-width'] = options.borderWidth;\n this.label.css(options.style || {});\n }\n this.label.attr(attr);\n if (!this.label.added) {\n this.label.add(group); // add to the labels-group\n }\n }\n // Rank it higher than data labels (#8742)\n this.label.labelrank = chart.plotSizeY;\n };\n /**\n * Sets the offset that the stack has from the x value and repositions the\n * label.\n * @private\n */\n StackItem.prototype.setOffset = function (xOffset, xWidth, boxBottom, boxTop, defaultX, xAxis) {\n var _a = this, alignOptions = _a.alignOptions, axis = _a.axis, label = _a.label, options = _a.options, textAlign = _a.textAlign, chart = axis.chart, stackBox = this.getStackBox({\n xOffset: xOffset,\n width: xWidth,\n boxBottom: boxBottom,\n boxTop: boxTop,\n defaultX: defaultX,\n xAxis: xAxis\n }), verticalAlign = alignOptions.verticalAlign;\n if (label && stackBox) {\n var labelBox = label.getBBox(), padding = label.padding;\n var isJustify = pick(options.overflow, 'justify') === 'justify', visible = void 0;\n // Reset alignOptions property after justify #12337\n alignOptions.x = options.x || 0;\n alignOptions.y = options.y || 0;\n // Calculate the adjusted Stack position, to take into consideration\n // The size if the labelBox and vertical alignment as\n // well as the text alignment. It's need to be done to work with\n // default SVGLabel.align/justify methods.\n var _b = this.adjustStackPosition({\n labelBox: labelBox,\n verticalAlign: verticalAlign,\n textAlign: textAlign\n }), x = _b.x, y = _b.y;\n stackBox.x -= x;\n stackBox.y -= y;\n // Align the label to the adjusted box.\n label.align(alignOptions, false, stackBox);\n // Check if label is inside the plotArea #12294\n visible = chart.isInsidePlot(label.alignAttr.x + alignOptions.x + x, label.alignAttr.y + alignOptions.y + y);\n if (!visible) {\n isJustify = false;\n }\n if (isJustify) {\n // Justify stackLabel into the stackBox\n Series.prototype.justifyDataLabel.call(axis, label, alignOptions, label.alignAttr, labelBox, stackBox);\n }\n // Add attr to aviod the default animation of justifyDataLabel.\n // Also add correct rotation with its rotation origin. #15129\n label.attr({\n x: label.alignAttr.x,\n y: label.alignAttr.y,\n rotation: options.rotation,\n rotationOriginX: labelBox.width / 2,\n rotationOriginY: labelBox.height / 2\n });\n // Check if the dataLabel should be visible.\n if (pick(!isJustify && options.crop, true)) {\n visible =\n isNumber(label.x) &&\n isNumber(label.y) &&\n chart.isInsidePlot(label.x - padding + label.width, label.y) &&\n chart.isInsidePlot(label.x + padding, label.y);\n }\n label[visible ? 'show' : 'hide']();\n }\n };\n /**\n * Adjust the stack BBox position, to take into consideration the alignment\n * of the dataLabel. This is necessary to make the stackDataLabel work with\n * core methods like `SVGLabel.adjust` and `Series.justifyDataLabel`.\n * @param AdjustStackPositionProps\n * @return {{x: number, y: number}} Adjusted BBox position of the stack.\n */\n StackItem.prototype.adjustStackPosition = function (_a) {\n var labelBox = _a.labelBox, verticalAlign = _a.verticalAlign, textAlign = _a.textAlign;\n var factorMap = {\n bottom: 0,\n middle: 1,\n top: 2,\n right: 1,\n center: 0,\n left: -1\n }, verticalAlignFactor = factorMap[verticalAlign], textAlignFactor = factorMap[textAlign];\n return {\n x: labelBox.width / 2 + (labelBox.width / 2) * textAlignFactor,\n y: (labelBox.height / 2) * verticalAlignFactor\n };\n };\n /**\n * Get the bbox of the stack.\n * @private\n * @function Highcharts.StackItem#getStackBox\n * @return {BBoxObject} The x, y, height, width of the stack.\n */\n StackItem.prototype.getStackBox = function (stackBoxProps) {\n var stackItem = this, axis = this.axis, chart = axis.chart, boxTop = stackBoxProps.boxTop, defaultX = stackBoxProps.defaultX, xOffset = stackBoxProps.xOffset, width = stackBoxProps.width, boxBottom = stackBoxProps.boxBottom, totalStackValue = axis.stacking.usePercentage ?\n 100 :\n pick(boxTop, this.total, 0), y = axis.toPixels(totalStackValue), xAxis = stackBoxProps.xAxis || chart.xAxis[0], x = pick(defaultX, xAxis.toPixels(this.x)) + xOffset, yZero = axis.toPixels(boxBottom ? boxBottom : 0), height = Math.abs(y - yZero), inverted = chart.inverted, neg = stackItem.isNegative;\n return inverted ?\n {\n x: (neg ? y : y - height) - chart.plotLeft,\n y: x - chart.plotTop,\n width: height,\n height: width\n } : {\n x: x - chart.plotLeft,\n y: (neg ? y - height : y) - chart.plotTop,\n width: width,\n height: height\n };\n };\n return StackItem;\n}());\n/* *\n *\n * Default Export\n *\n * */\nexport default StackItem;\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Stack of data points\n *\n * @product highcharts\n *\n * @interface Highcharts.StackItemObject\n */ /**\n* Alignment settings\n* @name Highcharts.StackItemObject#alignOptions\n* @type {Highcharts.AlignObject}\n*/ /**\n* Related axis\n* @name Highcharts.StackItemObject#axis\n* @type {Highcharts.Axis}\n*/ /**\n* Cumulative value of the stacked data points\n* @name Highcharts.StackItemObject#cumulative\n* @type {number}\n*/ /**\n* True if on the negative side\n* @name Highcharts.StackItemObject#isNegative\n* @type {boolean}\n*/ /**\n* Related SVG element\n* @name Highcharts.StackItemObject#label\n* @type {Highcharts.SVGElement}\n*/ /**\n* Related stack options\n* @name Highcharts.StackItemObject#options\n* @type {Highcharts.YAxisStackLabelsOptions}\n*/ /**\n* Total value of the stacked data points\n* @name Highcharts.StackItemObject#total\n* @type {number}\n*/ /**\n* Shared x value of the stack\n* @name Highcharts.StackItemObject#x\n* @type {number}\n*/\n''; // keeps doclets above in JS file\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport A from '../../Animation/AnimationUtilities.js';\nvar getDeferredAnimation = A.getDeferredAnimation;\nimport Axis from '../Axis.js';\nimport SeriesRegistry from '../../Series/SeriesRegistry.js';\nvar seriesProto = SeriesRegistry.series.prototype;\nimport StackItem from './StackItem.js';\nimport U from '../../Utilities.js';\nvar addEvent = U.addEvent, correctFloat = U.correctFloat, defined = U.defined, destroyObjectProperties = U.destroyObjectProperties, fireEvent = U.fireEvent, isArray = U.isArray, isNumber = U.isNumber, objectEach = U.objectEach, pick = U.pick;\n/* *\n *\n * Functions\n *\n * */\n/**\n * Generate stacks for each series and calculate stacks total values\n *\n * @private\n * @function Highcharts.Chart#getStacks\n */\nfunction chartGetStacks() {\n var chart = this, inverted = chart.inverted;\n // reset stacks for each yAxis\n chart.yAxis.forEach(function (axis) {\n if (axis.stacking && axis.stacking.stacks && axis.hasVisibleSeries) {\n axis.stacking.oldStacks = axis.stacking.stacks;\n }\n });\n chart.series.forEach(function (series) {\n var xAxisOptions = series.xAxis && series.xAxis.options || {};\n if (series.options.stacking &&\n (series.visible === true ||\n chart.options.chart.ignoreHiddenSeries === false)) {\n series.stackKey = [\n series.type,\n pick(series.options.stack, ''),\n inverted ? xAxisOptions.top : xAxisOptions.left,\n inverted ? xAxisOptions.height : xAxisOptions.width\n ].join(',');\n }\n });\n}\n/**\n * @private\n */\nfunction onAxisDestroy() {\n var stacking = this.stacking;\n if (!stacking) {\n return;\n }\n var stacks = stacking.stacks;\n // Destroy each stack total\n objectEach(stacks, function (stack, stackKey) {\n destroyObjectProperties(stack);\n stacks[stackKey] = null;\n });\n if (stacking &&\n stacking.stackTotalGroup) {\n stacking.stackTotalGroup.destroy();\n }\n}\n/**\n * @private\n */\nfunction onAxisInit() {\n if (this.coll === 'yAxis' && !this.stacking) {\n this.stacking = new AxisAdditions(this);\n }\n}\n/**\n * Get stack indicator, according to it's x-value, to determine points with the\n * same x-value\n *\n * @private\n * @function Highcharts.Series#getStackIndicator\n */\nfunction seriesGetStackIndicator(stackIndicator, x, index, key) {\n // Update stack indicator, when:\n // first point in a stack || x changed || stack type (negative vs positive)\n // changed:\n if (!defined(stackIndicator) ||\n stackIndicator.x !== x ||\n (key && stackIndicator.stackKey !== key)) {\n stackIndicator = {\n x: x,\n index: 0,\n key: key,\n stackKey: key\n };\n }\n else {\n (stackIndicator).index++;\n }\n stackIndicator.key =\n [index, x, stackIndicator.index].join(',');\n return stackIndicator;\n}\n/**\n * Iterate over all stacks and compute the absolute values to percent\n *\n * @private\n * @function Highcharts.Series#modifyStacks\n */\nfunction seriesModifyStacks() {\n var series = this, yAxis = series.yAxis, stackKey = series.stackKey, stacks = yAxis.stacking.stacks, processedXData = series.processedXData, stacking = series.options.stacking, stacker = series[stacking + 'Stacker'];\n var stackIndicator;\n if (stacker) { // Modifier function exists (Series.percentStacker etc.)\n [stackKey, '-' + stackKey].forEach(function (key) {\n var i = processedXData.length, x, stack, pointExtremes;\n while (i--) {\n x = processedXData[i];\n stackIndicator = series.getStackIndicator(stackIndicator, x, series.index, key);\n stack = stacks[key] && stacks[key][x];\n pointExtremes =\n stack && stack.points[stackIndicator.key];\n if (pointExtremes) {\n stacker.call(series, pointExtremes, stack, i);\n }\n }\n });\n }\n}\n/**\n * Modifier function for percent stacks. Blows up the stack to 100%.\n *\n * @private\n * @function Highcharts.Series#percentStacker\n */\nfunction seriesPercentStacker(pointExtremes, stack, i) {\n var totalFactor = stack.total ? 100 / stack.total : 0;\n // Y bottom value\n pointExtremes[0] = correctFloat(pointExtremes[0] * totalFactor);\n // Y value\n pointExtremes[1] = correctFloat(pointExtremes[1] * totalFactor);\n this.stackedYData[i] = pointExtremes[1];\n}\n/**\n * Set grouped points in a stack-like object. When `centerInCategory` is true,\n * and `stacking` is not enabled, we need a pseudo (horizontal) stack in order\n * to handle grouping of points within the same category.\n *\n * @private\n * @function Highcharts.Series#setStackedPoints\n * @return {void}\n */\nfunction seriesSetGroupedPoints() {\n var stacking = this.yAxis.stacking;\n if (this.options.centerInCategory &&\n (this.is('column') || this.is('columnrange')) &&\n // With stacking enabled, we already have stacks that we can compute\n // from\n !this.options.stacking &&\n // With only one series, we don't need to consider centerInCategory\n this.chart.series.length > 1) {\n seriesProto.setStackedPoints.call(this, 'group');\n // After updating, if we now have proper stacks, we must delete the group\n // pseudo stacks (#14986)\n }\n else if (stacking) {\n objectEach(stacking.stacks, function (type, key) {\n if (key.slice(-5) === 'group') {\n objectEach(type, function (stack) { return stack.destroy(); });\n delete stacking.stacks[key];\n }\n });\n }\n}\n/**\n * Adds series' points value to corresponding stack\n *\n * @private\n * @function Highcharts.Series#setStackedPoints\n */\nfunction seriesSetStackedPoints(stackingParam) {\n var chart = this.chart, stacking = stackingParam || this.options.stacking;\n if (!stacking || (this.visible !== true &&\n chart.options.chart.ignoreHiddenSeries !== false)) {\n return;\n }\n var series = this, xData = series.processedXData, yData = series.processedYData, stackedYData = [], yDataLength = yData.length, seriesOptions = series.options, threshold = seriesOptions.threshold, stackThreshold = pick(seriesOptions.startFromThreshold && threshold, 0), stackOption = seriesOptions.stack, stackKey = stackingParam ? \"\".concat(series.type, \",\").concat(stacking) : series.stackKey, negKey = '-' + stackKey, negStacks = series.negStacks, yAxis = stacking === 'group' ?\n chart.yAxis[0] :\n series.yAxis, stacks = yAxis.stacking.stacks, oldStacks = yAxis.stacking.oldStacks;\n var stackIndicator, isNegative, stack, other, key, pointKey, i, x, y;\n yAxis.stacking.stacksTouched += 1;\n // loop over the non-null y values and read them into a local array\n for (i = 0; i < yDataLength; i++) {\n x = xData[i];\n y = yData[i];\n stackIndicator = series.getStackIndicator(stackIndicator, x, series.index);\n pointKey = stackIndicator.key;\n // Read stacked values into a stack based on the x value,\n // the sign of y and the stack key. Stacking is also handled for null\n // values (#739)\n isNegative = negStacks && y < (stackThreshold ? 0 : threshold);\n key = isNegative ? negKey : stackKey;\n // Create empty object for this stack if it doesn't exist yet\n if (!stacks[key]) {\n stacks[key] = {};\n }\n // Initialize StackItem for this x\n if (!stacks[key][x]) {\n if (oldStacks[key] &&\n oldStacks[key][x]) {\n stacks[key][x] = oldStacks[key][x];\n stacks[key][x].total = null;\n }\n else {\n stacks[key][x] = new StackItem(yAxis, yAxis.options.stackLabels, !!isNegative, x, stackOption);\n }\n }\n // If the StackItem doesn't exist, create it first\n stack = stacks[key][x];\n if (y !== null) {\n stack.points[pointKey] = stack.points[series.index] =\n [pick(stack.cumulative, stackThreshold)];\n // Record the base of the stack\n if (!defined(stack.cumulative)) {\n stack.base = pointKey;\n }\n stack.touched = yAxis.stacking.stacksTouched;\n // In area charts, if there are multiple points on the same X value,\n // let the area fill the full span of those points\n if (stackIndicator.index > 0 && series.singleStacks === false) {\n stack.points[pointKey][0] =\n stack.points[series.index + ',' + x + ',0'][0];\n }\n // When updating to null, reset the point stack (#7493)\n }\n else {\n stack.points[pointKey] = stack.points[series.index] =\n null;\n }\n // Add value to the stack total\n if (stacking === 'percent') {\n // Percent stacked column, totals are the same for the positive and\n // negative stacks\n other = isNegative ? stackKey : negKey;\n if (negStacks && stacks[other] && stacks[other][x]) {\n other = stacks[other][x];\n stack.total = other.total =\n Math.max(other.total, stack.total) +\n Math.abs(y) ||\n 0;\n // Percent stacked areas\n }\n else {\n stack.total =\n correctFloat(stack.total + (Math.abs(y) || 0));\n }\n }\n else if (stacking === 'group') {\n if (isArray(y)) {\n y = y[0];\n }\n // In this stack, the total is the number of valid points\n if (y !== null) {\n stack.total = (stack.total || 0) + 1;\n }\n }\n else {\n stack.total = correctFloat(stack.total + (y || 0));\n }\n if (stacking === 'group') {\n // This point's index within the stack, pushed to stack.points[1]\n stack.cumulative = (stack.total || 1) - 1;\n }\n else {\n stack.cumulative =\n pick(stack.cumulative, stackThreshold) + (y || 0);\n }\n if (y !== null) {\n stack.points[pointKey].push(stack.cumulative);\n stackedYData[i] = stack.cumulative;\n stack.hasValidPoints = true;\n }\n }\n if (stacking === 'percent') {\n yAxis.stacking.usePercentage = true;\n }\n if (stacking !== 'group') {\n this.stackedYData = stackedYData; // To be used in getExtremes\n }\n // Reset old stacks\n yAxis.stacking.oldStacks = {};\n}\n/* *\n *\n * Classes\n *\n * */\n/**\n * Adds stacking support to axes.\n * @private\n * @class\n */\nvar AxisAdditions = /** @class */ (function () {\n /* *\n *\n * Constructors\n *\n * */\n function AxisAdditions(axis) {\n this.oldStacks = {};\n this.stacks = {};\n this.stacksTouched = 0;\n this.axis = axis;\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Build the stacks from top down\n * @private\n */\n AxisAdditions.prototype.buildStacks = function () {\n var stacking = this;\n var axis = stacking.axis;\n var axisSeries = axis.series;\n var reversedStacks = axis.options.reversedStacks;\n var len = axisSeries.length;\n var actualSeries, i;\n stacking.usePercentage = false;\n i = len;\n while (i--) {\n actualSeries = axisSeries[reversedStacks ? i : len - i - 1];\n actualSeries.setStackedPoints();\n actualSeries.setGroupedPoints();\n }\n // Loop up again to compute percent and stream stack\n for (i = 0; i < len; i++) {\n axisSeries[i].modifyStacks();\n }\n fireEvent(axis, 'afterBuildStacks');\n };\n /**\n * @private\n */\n AxisAdditions.prototype.cleanStacks = function () {\n var stacking = this;\n var stacks;\n if (stacking.oldStacks) {\n stacks = stacking.stacks = stacking.oldStacks;\n }\n // reset stacks\n objectEach(stacks, function (type) {\n objectEach(type, function (stack) {\n stack.cumulative = stack.total;\n });\n });\n };\n /**\n * Set all the stacks to initial states and destroy unused ones.\n * @private\n */\n AxisAdditions.prototype.resetStacks = function () {\n var _this = this;\n objectEach(this.stacks, function (type) {\n objectEach(type, function (stack, x) {\n // Clean up memory after point deletion (#1044, #4320)\n if (isNumber(stack.touched) &&\n stack.touched < _this.stacksTouched) {\n stack.destroy();\n delete type[x];\n // Reset stacks\n }\n else {\n stack.total = null;\n stack.cumulative = null;\n }\n });\n });\n };\n /**\n * @private\n */\n AxisAdditions.prototype.renderStackTotals = function () {\n var stacking = this, axis = stacking.axis, chart = axis.chart, renderer = chart.renderer, stacks = stacking.stacks, stackLabelsAnim = axis.options.stackLabels &&\n axis.options.stackLabels.animation, animationConfig = getDeferredAnimation(chart, stackLabelsAnim || false), stackTotalGroup = stacking.stackTotalGroup = (stacking.stackTotalGroup ||\n renderer\n .g('stack-labels')\n .attr({\n zIndex: 6,\n opacity: 0\n })\n .add());\n // plotLeft/Top will change when y axis gets wider so we need to\n // translate the stackTotalGroup at every render call. See bug #506\n // and #516\n stackTotalGroup.translate(chart.plotLeft, chart.plotTop);\n // Render each stack total\n objectEach(stacks, function (type) {\n objectEach(type, function (stack) {\n stack.render(stackTotalGroup);\n });\n });\n stackTotalGroup.animate({\n opacity: 1\n }, animationConfig);\n };\n return AxisAdditions;\n}());\n/* *\n *\n * Composition\n *\n * */\nvar StackingAxis;\n(function (StackingAxis) {\n /* *\n *\n * Constants\n *\n * */\n var composedClasses = [];\n /* *\n *\n * Functions\n *\n * */\n /**\n * Extends axis with stacking support.\n * @private\n */\n function compose(AxisClass, ChartClass, SeriesClass) {\n if (composedClasses.indexOf(AxisClass) === -1) {\n composedClasses.push(AxisClass);\n addEvent(AxisClass, 'init', onAxisInit);\n addEvent(AxisClass, 'destroy', onAxisDestroy);\n }\n if (composedClasses.indexOf(ChartClass) === -1) {\n composedClasses.push(ChartClass);\n var chartProto = ChartClass.prototype;\n chartProto.getStacks = chartGetStacks;\n }\n if (composedClasses.indexOf(SeriesClass) === -1) {\n composedClasses.push(SeriesClass);\n var seriesProto_1 = SeriesClass.prototype;\n seriesProto_1.getStackIndicator = seriesGetStackIndicator;\n seriesProto_1.modifyStacks = seriesModifyStacks;\n seriesProto_1.percentStacker = seriesPercentStacker;\n seriesProto_1.setGroupedPoints = seriesSetGroupedPoints;\n seriesProto_1.setStackedPoints = seriesSetStackedPoints;\n }\n }\n StackingAxis.compose = compose;\n})(StackingAxis || (StackingAxis = {}));\n/* *\n *\n * Default Export\n *\n * */\nexport default StackingAxis;\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Series from '../../Core/Series/Series.js';\nimport SeriesRegistry from '../../Core/Series/SeriesRegistry.js';\nimport U from '../../Core/Utilities.js';\nvar defined = U.defined, merge = U.merge;\n/* *\n *\n * Class\n *\n * */\n/**\n * The line series is the base type and is therefor the series base prototype.\n *\n * @private\n */\nvar LineSeries = /** @class */ (function (_super) {\n __extends(LineSeries, _super);\n function LineSeries() {\n /* *\n *\n * Static Functions\n *\n * */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /* *\n *\n * Properties\n *\n * */\n _this.data = void 0;\n _this.options = void 0;\n _this.points = void 0;\n return _this;\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Draw the graph. Called internally when rendering line-like series\n * types. The first time it generates the `series.graph` item and\n * optionally other series-wide items like `series.area` for area\n * charts. On subsequent calls these items are updated with new\n * positions and attributes.\n *\n * @function Highcharts.Series#drawGraph\n */\n LineSeries.prototype.drawGraph = function () {\n var series = this, options = this.options, graphPath = (this.gappedPath || this.getGraphPath).call(this), styledMode = this.chart.styledMode;\n var props = [[\n 'graph',\n 'highcharts-graph'\n ]];\n // Presentational properties\n if (!styledMode) {\n props[0].push((options.lineColor ||\n this.color ||\n \"#cccccc\" /* Palette.neutralColor20 */ // when colorByPoint = true\n ), options.dashStyle);\n }\n props = series.getZonesGraphs(props);\n // Draw the graph\n props.forEach(function (prop, i) {\n var graphKey = prop[0];\n var attribs, graph = series[graphKey];\n var verb = graph ? 'animate' : 'attr';\n if (graph) {\n graph.endX = series.preventGraphAnimation ?\n null :\n graphPath.xMap;\n graph.animate({ d: graphPath });\n }\n else if (graphPath.length) { // #1487\n /**\n * SVG element of area-based charts. Can be used for styling\n * purposes. If zones are configured, this element will be\n * hidden and replaced by multiple zone areas, accessible\n * via `series['zone-area-x']` (where x is a number,\n * starting with 0).\n *\n * @name Highcharts.Series#area\n * @type {Highcharts.SVGElement|undefined}\n */\n /**\n * SVG element of line-based charts. Can be used for styling\n * purposes. If zones are configured, this element will be\n * hidden and replaced by multiple zone lines, accessible\n * via `series['zone-graph-x']` (where x is a number,\n * starting with 0).\n *\n * @name Highcharts.Series#graph\n * @type {Highcharts.SVGElement|undefined}\n */\n series[graphKey] = graph = series.chart.renderer\n .path(graphPath)\n .addClass(prop[1])\n .attr({ zIndex: 1 }) // #1069\n .add(series.group);\n }\n if (graph && !styledMode) {\n attribs = {\n 'stroke': prop[2],\n 'stroke-width': options.lineWidth || 0,\n // Polygon series use filled graph\n 'fill': (series.fillGraph && series.color) || 'none'\n };\n // Apply dash style\n if (prop[3]) {\n attribs.dashstyle = prop[3];\n // The reason for the `else if` is that linecaps don't mix well\n // with dashstyle. The gaps get partially filled by the\n // linecap.\n }\n else if (options.linecap !== 'square') {\n attribs['stroke-linecap'] =\n attribs['stroke-linejoin'] = 'round';\n }\n graph[verb](attribs)\n // Add shadow to normal series (0) or to first\n // zone (1) #3932\n .shadow((i < 2) && options.shadow);\n }\n // Helpers for animation\n if (graph) {\n graph.startX = graphPath.xMap;\n graph.isArea = graphPath.isArea; // For arearange animation\n }\n });\n };\n // eslint-disable-next-line valid-jsdoc\n /**\n * Get the graph path.\n *\n * @private\n */\n LineSeries.prototype.getGraphPath = function (points, nullsAsZeroes, connectCliffs) {\n var series = this, options = series.options, graphPath = [], xMap = [];\n var gap, step = options.step;\n points = points || series.points;\n // Bottom of a stack is reversed\n var reversed = points.reversed;\n if (reversed) {\n points.reverse();\n }\n // Reverse the steps (#5004)\n step = {\n right: 1,\n center: 2\n }[step] || (step && 3);\n if (step && reversed) {\n step = 4 - step;\n }\n // Remove invalid points, especially in spline (#5015)\n points = this.getValidPoints(points, false, !(options.connectNulls && !nullsAsZeroes && !connectCliffs));\n // Build the line\n points.forEach(function (point, i) {\n var plotX = point.plotX, plotY = point.plotY, lastPoint = points[i - 1];\n // the path to this point from the previous\n var pathToPoint;\n if ((point.leftCliff || (lastPoint && lastPoint.rightCliff)) &&\n !connectCliffs) {\n gap = true; // ... and continue\n }\n // Line series, nullsAsZeroes is not handled\n if (point.isNull && !defined(nullsAsZeroes) && i > 0) {\n gap = !options.connectNulls;\n // Area series, nullsAsZeroes is set\n }\n else if (point.isNull && !nullsAsZeroes) {\n gap = true;\n }\n else {\n if (i === 0 || gap) {\n pathToPoint = [[\n 'M',\n point.plotX,\n point.plotY\n ]];\n // Generate the spline as defined in the SplineSeries object\n }\n else if (series.getPointSpline) {\n pathToPoint = [series.getPointSpline(points, point, i)];\n }\n else if (step) {\n if (step === 1) { // right\n pathToPoint = [[\n 'L',\n lastPoint.plotX,\n plotY\n ]];\n }\n else if (step === 2) { // center\n pathToPoint = [[\n 'L',\n (lastPoint.plotX + plotX) / 2,\n lastPoint.plotY\n ], [\n 'L',\n (lastPoint.plotX + plotX) / 2,\n plotY\n ]];\n }\n else {\n pathToPoint = [[\n 'L',\n plotX,\n lastPoint.plotY\n ]];\n }\n pathToPoint.push([\n 'L',\n plotX,\n plotY\n ]);\n }\n else {\n // normal line to next point\n pathToPoint = [[\n 'L',\n plotX,\n plotY\n ]];\n }\n // Prepare for animation. When step is enabled, there are\n // two path nodes for each x value.\n xMap.push(point.x);\n if (step) {\n xMap.push(point.x);\n if (step === 2) { // step = center (#8073)\n xMap.push(point.x);\n }\n }\n graphPath.push.apply(graphPath, pathToPoint);\n gap = false;\n }\n });\n graphPath.xMap = xMap;\n series.graphPath = graphPath;\n return graphPath;\n };\n // eslint-disable-next-line valid-jsdoc\n /**\n * Get zones properties for building graphs. Extendable by series with\n * multiple lines within one series.\n *\n * @private\n */\n LineSeries.prototype.getZonesGraphs = function (props) {\n // Add the zone properties if any\n this.zones.forEach(function (zone, i) {\n var propset = [\n 'zone-graph-' + i,\n 'highcharts-graph highcharts-zone-graph-' + i + ' ' +\n (zone.className || '')\n ];\n if (!this.chart.styledMode) {\n propset.push((zone.color || this.color), (zone.dashStyle || this.options.dashStyle));\n }\n props.push(propset);\n }, this);\n return props;\n };\n LineSeries.defaultOptions = merge(Series.defaultOptions, \n /**\n * General options for all series types.\n *\n * @optionparent plotOptions.series\n */\n {\n // nothing here yet\n });\n return LineSeries;\n}(Series));\nSeriesRegistry.registerSeriesType('line', LineSeries);\n/* *\n *\n * Default Export\n *\n * */\nexport default LineSeries;\n/* *\n *\n * API Options\n *\n * */\n/**\n * A line series displays information as a series of data points connected by\n * straight line segments.\n *\n * @sample {highcharts} highcharts/demo/line-basic/\n * Line chart\n * @sample {highstock} stock/demo/basic-line/\n * Line chart\n *\n * @extends plotOptions.series\n * @product highcharts highstock\n * @apioption plotOptions.line\n */\n/**\n * The SVG value used for the `stroke-linecap` and `stroke-linejoin`\n * of a line graph. Round means that lines are rounded in the ends and\n * bends.\n *\n * @type {Highcharts.SeriesLinecapValue}\n * @default round\n * @since 3.0.7\n * @apioption plotOptions.line.linecap\n */\n/**\n * A `line` series. If the [type](#series.line.type) option is not\n * specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends series,plotOptions.line\n * @excluding dataParser,dataURL\n * @product highcharts highstock\n * @apioption series.line\n */\n/**\n * An array of data points for the series. For the `line` series type,\n * points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n * interpreted as `y` options. The `x` values will be automatically\n * calculated, either starting at 0 and incremented by 1, or from\n * `pointStart` and `pointInterval` given in the series options. If the axis\n * has categories, these will be used. Example:\n * ```js\n * data: [0, 5, 3, 5]\n * ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n * `x,y`. If the first value is a string, it is applied as the name of the\n * point, and the `x` value is inferred.\n * ```js\n * data: [\n * [0, 1],\n * [1, 2],\n * [2, 8]\n * ]\n * ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of\n * data points exceeds the series'\n * [turboThreshold](#series.line.turboThreshold),\n * this option is not available.\n * ```js\n * data: [{\n * x: 1,\n * y: 9,\n * name: \"Point2\",\n * color: \"#00FF00\"\n * }, {\n * x: 1,\n * y: 6,\n * name: \"Point1\",\n * color: \"#FF00FF\"\n * }]\n * ```\n *\n * **Note:** In TypeScript you have to extend `PointOptionsObject` with an\n * additional declaration to allow custom data types:\n * ```ts\n * declare module `highcharts` {\n * interface PointOptionsObject {\n * custom: Record;\n * }\n * }\n * ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n * Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n * Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n * Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n * Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Config objects\n *\n * @declare Highcharts.PointOptionsObject\n * @type {Array|null|*>}\n * @apioption series.line.data\n */\n/**\n * An additional, individual class name for the data point's graphic\n * representation. Changes to a point's color will also be reflected in a\n * chart's legend and tooltip.\n *\n * @sample {highcharts} highcharts/css/point-series-classname\n *\n * @type {string}\n * @since 5.0.0\n * @product highcharts gantt\n * @apioption series.line.data.className\n */\n/**\n * Individual color for the point. By default the color is pulled from\n * the global `colors` array.\n *\n * In styled mode, the `color` option doesn't take effect. Instead, use\n * `colorIndex`.\n *\n * @sample {highcharts} highcharts/point/color/\n * Mark the highest point\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @product highcharts highstock gantt\n * @apioption series.line.data.color\n */\n/**\n * A specific color index to use for the point, so its graphic representations\n * are given the class name `highcharts-color-{n}`. In styled mode this will\n * change the color of the graphic. In non-styled mode, the color is set by the\n * `fill` attribute, so the change in class name won't have a visual effect by\n * default.\n *\n * @sample {highcharts} highcharts/css/colorindex/\n * Series and point color index\n *\n * @type {number}\n * @since 5.0.0\n * @product highcharts gantt\n * @apioption series.line.data.colorIndex\n */\n/**\n * A reserved subspace to store options and values for customized functionality.\n * Here you can add additional data for your own event callbacks and formatter\n * callbacks.\n *\n * @sample {highcharts} highcharts/point/custom/\n * Point and series with custom data\n *\n * @type {Highcharts.Dictionary<*>}\n * @apioption series.line.data.custom\n */\n/**\n * Individual data label for each point. The options are the same as\n * the ones for [plotOptions.series.dataLabels](\n * #plotOptions.series.dataLabels).\n *\n * @sample highcharts/point/datalabels/\n * Show a label for the last value\n *\n * @declare Highcharts.DataLabelsOptions\n * @extends plotOptions.line.dataLabels\n * @product highcharts highstock gantt\n * @apioption series.line.data.dataLabels\n */\n/**\n * A description of the point to add to the screen reader information\n * about the point.\n *\n * @type {string}\n * @since 5.0.0\n * @requires modules/accessibility\n * @apioption series.line.data.description\n */\n/**\n * An id for the point. This can be used after render time to get a\n * pointer to the point object through `chart.get()`.\n *\n * @sample {highcharts} highcharts/point/id/\n * Remove an id'd point\n *\n * @type {string}\n * @since 1.2.0\n * @product highcharts highstock gantt\n * @apioption series.line.data.id\n */\n/**\n * The rank for this point's data label in case of collision. If two\n * data labels are about to overlap, only the one with the highest `labelrank`\n * will be drawn.\n *\n * @type {number}\n * @apioption series.line.data.labelrank\n */\n/**\n * The name of the point as shown in the legend, tooltip, dataLabels, etc.\n *\n * @see [xAxis.uniqueNames](#xAxis.uniqueNames)\n *\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Point names\n *\n * @type {string}\n * @apioption series.line.data.name\n */\n/**\n * Whether the data point is selected initially.\n *\n * @type {boolean}\n * @default false\n * @product highcharts highstock gantt\n * @apioption series.line.data.selected\n */\n/**\n * The x value of the point. For datetime axes, the X value is the timestamp\n * in milliseconds since 1970.\n *\n * @type {number}\n * @product highcharts highstock\n * @apioption series.line.data.x\n */\n/**\n * The y value of the point.\n *\n * @type {number|null}\n * @product highcharts highstock\n * @apioption series.line.data.y\n */\n/**\n * The individual point events.\n *\n * @extends plotOptions.series.point.events\n * @product highcharts highstock gantt\n * @apioption series.line.data.events\n */\n/**\n * Options for the point markers of line-like series.\n *\n * @declare Highcharts.PointMarkerOptionsObject\n * @extends plotOptions.series.marker\n * @product highcharts highstock\n * @apioption series.line.data.marker\n */\n''; // include precedent doclets in transpilat\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport Color from '../../Core/Color/Color.js';\nvar color = Color.parse;\nimport LegendSymbol from '../../Core/Legend/LegendSymbol.js';\nimport SeriesRegistry from '../../Core/Series/SeriesRegistry.js';\nvar LineSeries = SeriesRegistry.seriesTypes.line;\nimport U from '../../Core/Utilities.js';\nvar extend = U.extend, merge = U.merge, objectEach = U.objectEach, pick = U.pick;\n/* *\n *\n * Class\n *\n * */\n/**\n * Area series type.\n *\n * @private\n * @class\n * @name AreaSeries\n *\n * @augments LineSeries\n */\nvar AreaSeries = /** @class */ (function (_super) {\n __extends(AreaSeries, _super);\n function AreaSeries() {\n /* *\n *\n * Static Properties\n *\n * */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.data = void 0;\n _this.options = void 0;\n _this.points = void 0;\n return _this;\n /* eslint-enable valid-jsdoc */\n }\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /**\n * Draw the graph and the underlying area. This method calls the Series\n * base function and adds the area. The areaPath is calculated in the\n * getSegmentPath method called from Series.prototype.drawGraph.\n * @private\n */\n AreaSeries.prototype.drawGraph = function () {\n // Define or reset areaPath\n this.areaPath = [];\n // Call the base method\n _super.prototype.drawGraph.apply(this);\n // Define local variables\n var series = this, areaPath = this.areaPath, options = this.options, zones = this.zones, props = [[\n 'area',\n 'highcharts-area',\n this.color,\n options.fillColor\n ]]; // area name, main color, fill color\n zones.forEach(function (zone, i) {\n props.push([\n 'zone-area-' + i,\n 'highcharts-area highcharts-zone-area-' + i + ' ' +\n zone.className,\n zone.color || series.color,\n zone.fillColor || options.fillColor\n ]);\n });\n props.forEach(function (prop) {\n var areaKey = prop[0], attribs = {};\n var area = series[areaKey];\n var verb = area ? 'animate' : 'attr';\n // Create or update the area\n if (area) { // update\n area.endX = series.preventGraphAnimation ?\n null :\n areaPath.xMap;\n area.animate({ d: areaPath });\n }\n else { // create\n attribs.zIndex = 0; // #1069\n area = series[areaKey] = series.chart.renderer\n .path(areaPath)\n .addClass(prop[1])\n .add(series.group);\n area.isArea = true;\n }\n if (!series.chart.styledMode) {\n attribs.fill = pick(prop[3], color(prop[2])\n .setOpacity(pick(options.fillOpacity, 0.75))\n .get());\n }\n area[verb](attribs);\n area.startX = areaPath.xMap;\n area.shiftUnit = options.step ? 2 : 1;\n });\n };\n /**\n * @private\n */\n AreaSeries.prototype.getGraphPath = function (points) {\n var getGraphPath = LineSeries.prototype.getGraphPath, options = this.options, stacking = options.stacking, yAxis = this.yAxis, bottomPoints = [], graphPoints = [], seriesIndex = this.index, stacks = yAxis.stacking.stacks[this.stackKey], threshold = options.threshold, translatedThreshold = Math.round(// #10909\n yAxis.getThreshold(options.threshold)), connectNulls = pick(// #10574\n options.connectNulls, stacking === 'percent'), \n // To display null points in underlying stacked series, this\n // series graph must be broken, and the area also fall down to\n // fill the gap left by the null point. #2069\n addDummyPoints = function (i, otherI, side) {\n var point = points[i], stackedValues = stacking &&\n stacks[point.x].points[seriesIndex], nullVal = point[side + 'Null'] || 0, cliffVal = point[side + 'Cliff'] || 0;\n var top, bottom, isNull = true;\n if (cliffVal || nullVal) {\n top = (nullVal ?\n stackedValues[0] :\n stackedValues[1]) + cliffVal;\n bottom = stackedValues[0] + cliffVal;\n isNull = !!nullVal;\n }\n else if (!stacking &&\n points[otherI] &&\n points[otherI].isNull) {\n top = bottom = threshold;\n }\n // Add to the top and bottom line of the area\n if (typeof top !== 'undefined') {\n graphPoints.push({\n plotX: plotX,\n plotY: top === null ?\n translatedThreshold :\n yAxis.getThreshold(top),\n isNull: isNull,\n isCliff: true\n });\n bottomPoints.push({\n plotX: plotX,\n plotY: bottom === null ?\n translatedThreshold :\n yAxis.getThreshold(bottom),\n doCurve: false // #1041, gaps in areaspline areas\n });\n }\n };\n var plotX, isNull, yBottom;\n // Find what points to use\n points = points || this.points;\n // Fill in missing points\n if (stacking) {\n points = this.getStackPoints(points);\n }\n for (var i = 0, iEnd = points.length; i < iEnd; ++i) {\n // Reset after series.update of stacking property (#12033)\n if (!stacking) {\n points[i].leftCliff = points[i].rightCliff =\n points[i].leftNull = points[i].rightNull = void 0;\n }\n isNull = points[i].isNull;\n plotX = pick(points[i].rectPlotX, points[i].plotX);\n yBottom = stacking ?\n pick(points[i].yBottom, translatedThreshold) :\n translatedThreshold;\n if (!isNull || connectNulls) {\n if (!connectNulls) {\n addDummyPoints(i, i - 1, 'left');\n }\n // Skip null point when stacking is false and connectNulls\n // true\n if (!(isNull && !stacking && connectNulls)) {\n graphPoints.push(points[i]);\n bottomPoints.push({\n x: i,\n plotX: plotX,\n plotY: yBottom\n });\n }\n if (!connectNulls) {\n addDummyPoints(i, i + 1, 'right');\n }\n }\n }\n var topPath = getGraphPath.call(this, graphPoints, true, true);\n bottomPoints.reversed = true;\n var bottomPath = getGraphPath.call(this, bottomPoints, true, true);\n var firstBottomPoint = bottomPath[0];\n if (firstBottomPoint && firstBottomPoint[0] === 'M') {\n bottomPath[0] = ['L', firstBottomPoint[1], firstBottomPoint[2]];\n }\n var areaPath = topPath.concat(bottomPath);\n if (areaPath.length) {\n areaPath.push(['Z']);\n }\n // TODO: don't set leftCliff and rightCliff when connectNulls?\n var graphPath = getGraphPath\n .call(this, graphPoints, false, connectNulls);\n areaPath.xMap = topPath.xMap;\n this.areaPath = areaPath;\n return graphPath;\n };\n /**\n * Return an array of stacked points, where null and missing points are\n * replaced by dummy points in order for gaps to be drawn correctly in\n * stacks.\n * @private\n */\n AreaSeries.prototype.getStackPoints = function (points) {\n var series = this, segment = [], keys = [], xAxis = this.xAxis, yAxis = this.yAxis, stack = yAxis.stacking.stacks[this.stackKey], pointMap = {}, yAxisSeries = yAxis.series, seriesLength = yAxisSeries.length, upOrDown = yAxis.options.reversedStacks ? 1 : -1, seriesIndex = yAxisSeries.indexOf(series);\n points = points || this.points;\n if (this.options.stacking) {\n for (var i = 0; i < points.length; i++) {\n // Reset after point update (#7326)\n points[i].leftNull = points[i].rightNull = void 0;\n // Create a map where we can quickly look up the points by\n // their X values.\n pointMap[points[i].x] = points[i];\n }\n // Sort the keys (#1651)\n objectEach(stack, function (stackX, x) {\n // nulled after switching between\n // grouping and not (#1651, #2336)\n if (stackX.total !== null) {\n keys.push(x);\n }\n });\n keys.sort(function (a, b) {\n return a - b;\n });\n var visibleSeries_1 = yAxisSeries.map(function (s) { return s.visible; });\n keys.forEach(function (x, idx) {\n var y = 0, stackPoint, stackedValues;\n if (pointMap[x] && !pointMap[x].isNull) {\n segment.push(pointMap[x]);\n // Find left and right cliff. -1 goes left, 1 goes\n // right.\n [-1, 1].forEach(function (direction) {\n var nullName = direction === 1 ?\n 'rightNull' :\n 'leftNull', cliffName = direction === 1 ?\n 'rightCliff' :\n 'leftCliff', otherStack = stack[keys[idx + direction]];\n var cliff = 0;\n // If there is a stack next to this one,\n // to the left or to the right...\n if (otherStack) {\n var i = seriesIndex;\n // Can go either up or down,\n // depending on reversedStacks\n while (i >= 0 && i < seriesLength) {\n var si = yAxisSeries[i].index;\n stackPoint = otherStack.points[si];\n if (!stackPoint) {\n // If the next point in this series is\n // missing, mark the point with\n // point.leftNull or point.rightNull = true.\n if (si === series.index) {\n pointMap[x][nullName] = true;\n // If there are missing points in the next\n // stack in any of the series below this\n // one, we need to substract the missing\n // values and add a hiatus to the left or\n // right.\n }\n else if (visibleSeries_1[i]) {\n stackedValues = stack[x].points[si];\n if (stackedValues) {\n cliff -= (stackedValues[1] -\n stackedValues[0]);\n }\n }\n }\n // When reversedStacks is true, loop up,\n // else loop down\n i += upOrDown;\n }\n }\n pointMap[x][cliffName] = cliff;\n });\n // There is no point for this X value in this series, so we\n // insert a dummy point in order for the areas to be drawn\n // correctly.\n }\n else {\n // Loop down the stack to find the series below this\n // one that has a value (#1991)\n var i = seriesIndex;\n while (i >= 0 && i < seriesLength) {\n var si = yAxisSeries[i].index;\n stackPoint = stack[x].points[si];\n if (stackPoint) {\n y = stackPoint[1];\n break;\n }\n // When reversedStacks is true, loop up, else loop\n // down\n i += upOrDown;\n }\n y = pick(y, 0);\n y = yAxis.translate(// #6272\n y, 0, 1, 0, 1);\n segment.push({\n isNull: true,\n plotX: xAxis.translate(// #6272\n x, 0, 0, 0, 1),\n x: x,\n plotY: y,\n yBottom: y\n });\n }\n });\n }\n return segment;\n };\n /**\n * The area series type.\n *\n * @sample {highcharts} highcharts/demo/area-basic/\n * Area chart\n * @sample {highstock} stock/demo/area/\n * Area chart\n *\n * @extends plotOptions.line\n * @excluding useOhlcData\n * @product highcharts highstock\n * @optionparent plotOptions.area\n */\n AreaSeries.defaultOptions = merge(LineSeries.defaultOptions, {\n /**\n * @see [fillColor](#plotOptions.area.fillColor)\n * @see [fillOpacity](#plotOptions.area.fillOpacity)\n *\n * @apioption plotOptions.area.color\n */\n /**\n * Fill color or gradient for the area. When `null`, the series' `color`\n * is used with the series' `fillOpacity`.\n *\n * In styled mode, the fill color can be set with the `.highcharts-area`\n * class name.\n *\n * @see [color](#plotOptions.area.color)\n * @see [fillOpacity](#plotOptions.area.fillOpacity)\n *\n * @sample {highcharts} highcharts/plotoptions/area-fillcolor-default/\n * Null by default\n * @sample {highcharts} highcharts/plotoptions/area-fillcolor-gradient/\n * Gradient\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @product highcharts highstock\n * @apioption plotOptions.area.fillColor\n */\n /**\n * Fill opacity for the area. When you set an explicit `fillColor`,\n * the `fillOpacity` is not applied. Instead, you should define the\n * opacity in the `fillColor` with an rgba color definition. The\n * `fillOpacity` setting, also the default setting, overrides the alpha\n * component of the `color` setting.\n *\n * In styled mode, the fill opacity can be set with the\n * `.highcharts-area` class name.\n *\n * @see [color](#plotOptions.area.color)\n * @see [fillColor](#plotOptions.area.fillColor)\n *\n * @sample {highcharts} highcharts/plotoptions/area-fillopacity/\n * Automatic fill color and fill opacity of 0.1\n *\n * @type {number}\n * @default {highcharts} 0.75\n * @default {highstock} 0.75\n * @product highcharts highstock\n * @apioption plotOptions.area.fillOpacity\n */\n /**\n * A separate color for the graph line. By default the line takes the\n * `color` of the series, but the lineColor setting allows setting a\n * separate color for the line without altering the `fillColor`.\n *\n * In styled mode, the line stroke can be set with the\n * `.highcharts-graph` class name.\n *\n * @sample {highcharts} highcharts/plotoptions/area-linecolor/\n * Dark gray line\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @product highcharts highstock\n * @apioption plotOptions.area.lineColor\n */\n /**\n * A separate color for the negative part of the area.\n *\n * In styled mode, a negative color is set with the\n * `.highcharts-negative` class name.\n *\n * @see [negativeColor](#plotOptions.area.negativeColor)\n *\n * @sample {highcharts} highcharts/css/series-negative-color/\n * Negative color in styled mode\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @since 3.0\n * @product highcharts\n * @apioption plotOptions.area.negativeFillColor\n */\n /**\n * Whether the whole area or just the line should respond to mouseover\n * tooltips and other mouse or touch events.\n *\n * @sample {highcharts|highstock} highcharts/plotoptions/area-trackbyarea/\n * Display the tooltip when the area is hovered\n *\n * @type {boolean}\n * @default false\n * @since 1.1.6\n * @product highcharts highstock\n * @apioption plotOptions.area.trackByArea\n */\n /**\n * The Y axis value to serve as the base for the area, for\n * distinguishing between values above and below a threshold. The area\n * between the graph and the threshold is filled.\n *\n * * If a number is given, the Y axis will scale to the threshold.\n * * If `null`, the scaling behaves like a line series with fill between\n * the graph and the Y axis minimum.\n * * If `Infinity` or `-Infinity`, the area between the graph and the\n * corresponding Y axis extreme is filled (since v6.1.0).\n *\n * @sample {highcharts} highcharts/plotoptions/area-threshold/\n * A threshold of 100\n * @sample {highcharts} highcharts/plotoptions/area-threshold-infinity/\n * A threshold of Infinity\n *\n * @type {number|null}\n * @since 2.0\n * @product highcharts highstock\n */\n threshold: 0\n });\n return AreaSeries;\n}(LineSeries));\nextend(AreaSeries.prototype, {\n singleStacks: false,\n drawLegendSymbol: LegendSymbol.drawRectangle\n});\nSeriesRegistry.registerSeriesType('area', AreaSeries);\n/* *\n *\n * Default Export\n *\n * */\nexport default AreaSeries;\n/* *\n *\n * API Options\n *\n * */\n/**\n * A `area` series. If the [type](#series.area.type) option is not\n * specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends series,plotOptions.area\n * @excluding dataParser, dataURL, useOhlcData\n * @product highcharts highstock\n * @apioption series.area\n */\n/**\n * @see [fillColor](#series.area.fillColor)\n * @see [fillOpacity](#series.area.fillOpacity)\n *\n * @apioption series.area.color\n */\n/**\n * An array of data points for the series. For the `area` series type,\n * points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n * interpreted as `y` options. The `x` values will be automatically\n * calculated, either starting at 0 and incremented by 1, or from\n * `pointStart` * and `pointInterval` given in the series options. If the\n * axis has categories, these will be used. Example:\n * ```js\n * data: [0, 5, 3, 5]\n * ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n * `x,y`. If the first value is a string, it is applied as the name of the\n * point, and the `x` value is inferred.\n * ```js\n * data: [\n * [0, 9],\n * [1, 7],\n * [2, 6]\n * ]\n * ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of\n * data points exceeds the series'\n * [turboThreshold](#series.area.turboThreshold), this option is not\n * available.\n * ```js\n * data: [{\n * x: 1,\n * y: 9,\n * name: \"Point2\",\n * color: \"#00FF00\"\n * }, {\n * x: 1,\n * y: 6,\n * name: \"Point1\",\n * color: \"#FF00FF\"\n * }]\n * ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n * Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n * Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n * Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n * Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Config objects\n *\n * @type {Array|null|*>}\n * @extends series.line.data\n * @product highcharts highstock\n * @apioption series.area.data\n */\n/**\n * @see [color](#series.area.color)\n * @see [fillOpacity](#series.area.fillOpacity)\n *\n * @apioption series.area.fillColor\n */\n/**\n * @see [color](#series.area.color)\n * @see [fillColor](#series.area.fillColor)\n *\n * @default {highcharts} 0.75\n * @default {highstock} 0.75\n * @apioption series.area.fillOpacity\n */\n''; // adds doclets above to transpilat\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport SeriesRegistry from '../../Core/Series/SeriesRegistry.js';\nvar LineSeries = SeriesRegistry.seriesTypes.line;\nimport U from '../../Core/Utilities.js';\nvar merge = U.merge, pick = U.pick;\n/* *\n *\n * Class\n *\n * */\n/**\n * Spline series type.\n *\n * @private\n */\nvar SplineSeries = /** @class */ (function (_super) {\n __extends(SplineSeries, _super);\n function SplineSeries() {\n /* *\n *\n * Static Properties\n *\n * */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /* *\n *\n * Properties\n *\n * */\n _this.data = void 0;\n _this.options = void 0;\n _this.points = void 0;\n return _this;\n /* eslint-enable valid-jsdoc */\n }\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /**\n * Get the spline segment from a given point's previous neighbour to the\n * given point.\n *\n * @private\n * @function Highcharts.seriesTypes.spline#getPointSpline\n */\n SplineSeries.prototype.getPointSpline = function (points, point, i) {\n var \n // 1 means control points midway between points, 2 means 1/3\n // from the point, 3 is 1/4 etc\n smoothing = 1.5, denom = smoothing + 1, plotX = point.plotX || 0, plotY = point.plotY || 0, lastPoint = points[i - 1], nextPoint = points[i + 1];\n var leftContX, leftContY, rightContX, rightContY;\n /**\n * @private\n */\n function doCurve(otherPoint) {\n return otherPoint &&\n !otherPoint.isNull &&\n otherPoint.doCurve !== false &&\n // #6387, area splines next to null:\n !point.isCliff;\n }\n // Find control points\n if (doCurve(lastPoint) && doCurve(nextPoint)) {\n var lastX = lastPoint.plotX || 0, lastY = lastPoint.plotY || 0, nextX = nextPoint.plotX || 0, nextY = nextPoint.plotY || 0;\n var correction = 0;\n leftContX = (smoothing * plotX + lastX) / denom;\n leftContY = (smoothing * plotY + lastY) / denom;\n rightContX = (smoothing * plotX + nextX) / denom;\n rightContY = (smoothing * plotY + nextY) / denom;\n // Have the two control points make a straight line through main\n // point\n if (rightContX !== leftContX) { // #5016, division by zero\n correction = (((rightContY - leftContY) *\n (rightContX - plotX)) /\n (rightContX - leftContX) + plotY - rightContY);\n }\n leftContY += correction;\n rightContY += correction;\n // to prevent false extremes, check that control points are\n // between neighbouring points' y values\n if (leftContY > lastY && leftContY > plotY) {\n leftContY = Math.max(lastY, plotY);\n // mirror of left control point\n rightContY = 2 * plotY - leftContY;\n }\n else if (leftContY < lastY && leftContY < plotY) {\n leftContY = Math.min(lastY, plotY);\n rightContY = 2 * plotY - leftContY;\n }\n if (rightContY > nextY && rightContY > plotY) {\n rightContY = Math.max(nextY, plotY);\n leftContY = 2 * plotY - rightContY;\n }\n else if (rightContY < nextY && rightContY < plotY) {\n rightContY = Math.min(nextY, plotY);\n leftContY = 2 * plotY - rightContY;\n }\n // record for drawing in next point\n point.rightContX = rightContX;\n point.rightContY = rightContY;\n }\n // Visualize control points for debugging\n /*\n if (leftContX) {\n this.chart.renderer.circle(\n leftContX + this.chart.plotLeft,\n leftContY + this.chart.plotTop,\n 2\n )\n .attr({\n stroke: 'red',\n 'stroke-width': 2,\n fill: 'none',\n zIndex: 9\n })\n .add();\n this.chart.renderer.path(['M', leftContX + this.chart.plotLeft,\n leftContY + this.chart.plotTop,\n 'L', plotX + this.chart.plotLeft, plotY + this.chart.plotTop])\n .attr({\n stroke: 'red',\n 'stroke-width': 2,\n zIndex: 9\n })\n .add();\n }\n if (rightContX) {\n this.chart.renderer.circle(\n rightContX + this.chart.plotLeft,\n rightContY + this.chart.plotTop,\n 2\n )\n .attr({\n stroke: 'green',\n 'stroke-width': 2,\n fill: 'none',\n zIndex: 9\n })\n .add();\n this.chart.renderer.path(['M', rightContX + this.chart.plotLeft,\n rightContY + this.chart.plotTop,\n 'L', plotX + this.chart.plotLeft, plotY + this.chart.plotTop])\n .attr({\n stroke: 'green',\n 'stroke-width': 2,\n zIndex: 9\n })\n .add();\n }\n // */\n var ret = [\n 'C',\n pick(lastPoint.rightContX, lastPoint.plotX, 0),\n pick(lastPoint.rightContY, lastPoint.plotY, 0),\n pick(leftContX, plotX, 0),\n pick(leftContY, plotY, 0),\n plotX,\n plotY\n ];\n // reset for updating series later\n lastPoint.rightContX = lastPoint.rightContY = void 0;\n return ret;\n };\n /**\n * A spline series is a special type of line series, where the segments\n * between the data points are smoothed.\n *\n * @sample {highcharts} highcharts/demo/spline-irregular-time/\n * Spline chart\n * @sample {highstock} stock/demo/spline/\n * Spline chart\n *\n * @extends plotOptions.series\n * @excluding step, boostThreshold, boostBlending\n * @product highcharts highstock\n * @optionparent plotOptions.spline\n */\n SplineSeries.defaultOptions = merge(LineSeries.defaultOptions);\n return SplineSeries;\n}(LineSeries));\nSeriesRegistry.registerSeriesType('spline', SplineSeries);\n/* *\n *\n * Default Export\n *\n * */\nexport default SplineSeries;\n/* *\n *\n * API Options\n *\n * */\n/**\n * A `spline` series. If the [type](#series.spline.type) option is\n * not specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends series,plotOptions.spline\n * @excluding dataParser, dataURL, step, boostThreshold, boostBlending\n * @product highcharts highstock\n * @apioption series.spline\n */\n/**\n * An array of data points for the series. For the `spline` series type,\n * points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n * interpreted as `y` options. The `x` values will be automatically\n * calculated, either starting at 0 and incremented by 1, or from\n * `pointStart` and `pointInterval` given in the series options. If the axis\n * has categories, these will be used. Example:\n * ```js\n * data: [0, 5, 3, 5]\n * ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n * `x,y`. If the first value is a string, it is applied as the name of the\n * point, and the `x` value is inferred.\n * ```js\n * data: [\n * [0, 9],\n * [1, 2],\n * [2, 8]\n * ]\n * ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of\n * data points exceeds the series'\n * [turboThreshold](#series.spline.turboThreshold),\n * this option is not available.\n * ```js\n * data: [{\n * x: 1,\n * y: 9,\n * name: \"Point2\",\n * color: \"#00FF00\"\n * }, {\n * x: 1,\n * y: 0,\n * name: \"Point1\",\n * color: \"#FF00FF\"\n * }]\n * ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n * Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n * Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n * Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n * Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Config objects\n *\n * @type {Array|null|*>}\n * @extends series.line.data\n * @product highcharts highstock\n * @apioption series.spline.data\n */\n''; // adds doclets above intro transpilat\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport SplineSeries from '../Spline/SplineSeries.js';\nimport LegendSymbol from '../../Core/Legend/LegendSymbol.js';\nimport SeriesRegistry from '../../Core/Series/SeriesRegistry.js';\nvar _a = SeriesRegistry.seriesTypes, AreaSeries = _a.area, areaProto = _a.area.prototype;\nimport U from '../../Core/Utilities.js';\nvar extend = U.extend, merge = U.merge;\n/* *\n *\n * Class\n *\n * */\n/**\n * AreaSpline series type.\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.areaspline\n *\n * @augments Highcharts.Series\n */\nvar AreaSplineSeries = /** @class */ (function (_super) {\n __extends(AreaSplineSeries, _super);\n function AreaSplineSeries() {\n /* *\n *\n * Static Properties\n *\n * */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /* *\n *\n * Properties\n *\n * */\n _this.data = void 0;\n _this.points = void 0;\n _this.options = void 0;\n return _this;\n }\n AreaSplineSeries.defaultOptions = merge(SplineSeries.defaultOptions, AreaSeries.defaultOptions);\n return AreaSplineSeries;\n}(SplineSeries));\nextend(AreaSplineSeries.prototype, {\n getGraphPath: areaProto.getGraphPath,\n getStackPoints: areaProto.getStackPoints,\n drawGraph: areaProto.drawGraph,\n drawLegendSymbol: LegendSymbol.drawRectangle\n});\nSeriesRegistry.registerSeriesType('areaspline', AreaSplineSeries);\n/* *\n *\n * Default Export\n *\n * */\nexport default AreaSplineSeries;\n/* *\n *\n * API Options\n *\n * */\n/**\n * The area spline series is an area series where the graph between the\n * points is smoothed into a spline.\n *\n * @sample {highcharts} highcharts/demo/areaspline/\n * Area spline chart\n * @sample {highstock} stock/demo/areaspline/\n * Area spline chart\n *\n * @extends plotOptions.area\n * @excluding step, boostThreshold, boostBlending\n * @product highcharts highstock\n * @apioption plotOptions.areaspline\n */\n/**\n * @see [fillColor](#plotOptions.areaspline.fillColor)\n * @see [fillOpacity](#plotOptions.areaspline.fillOpacity)\n *\n * @apioption plotOptions.areaspline.color\n */\n/**\n * @see [color](#plotOptions.areaspline.color)\n * @see [fillOpacity](#plotOptions.areaspline.fillOpacity)\n *\n * @apioption plotOptions.areaspline.fillColor\n */\n/**\n * @see [color](#plotOptions.areaspline.color)\n * @see [fillColor](#plotOptions.areaspline.fillColor)\n *\n * @default 0.75\n * @apioption plotOptions.areaspline.fillOpacity\n */\n/**\n * A `areaspline` series. If the [type](#series.areaspline.type) option\n * is not specified, it is inherited from [chart.type](#chart.type).\n *\n *\n * @extends series,plotOptions.areaspline\n * @excluding dataParser, dataURL, step, boostThreshold, boostBlending\n * @product highcharts highstock\n * @apioption series.areaspline\n */\n/**\n * @see [fillColor](#series.areaspline.fillColor)\n * @see [fillOpacity](#series.areaspline.fillOpacity)\n *\n * @apioption series.areaspline.color\n */\n/**\n * An array of data points for the series. For the `areaspline` series\n * type, points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n * interpreted as `y` options. The `x` values will be automatically\n * calculated, either starting at 0 and incremented by 1, or from\n * `pointStart` and `pointInterval` given in the series options. If the axis\n * has categories, these will be used. Example:\n * ```js\n * data: [0, 5, 3, 5]\n * ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n * `x,y`. If the first value is a string, it is applied as the name of the\n * point, and the `x` value is inferred.\n * ```js\n * data: [\n * [0, 10],\n * [1, 9],\n * [2, 3]\n * ]\n * ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of\n * data points exceeds the series'\n * [turboThreshold](#series.areaspline.turboThreshold), this option is not\n * available.\n * ```js\n * data: [{\n * x: 1,\n * y: 4,\n * name: \"Point2\",\n * color: \"#00FF00\"\n * }, {\n * x: 1,\n * y: 4,\n * name: \"Point1\",\n * color: \"#FF00FF\"\n * }]\n * ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n * Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n * Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n * Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n * Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Config objects\n *\n * @type {Array|null|*>}\n * @extends series.line.data\n * @product highcharts highstock\n * @apioption series.areaspline.data\n */\n/**\n * @see [color](#series.areaspline.color)\n * @see [fillOpacity](#series.areaspline.fillOpacity)\n *\n * @apioption series.areaspline.fillColor\n */\n/**\n * @see [color](#series.areaspline.color)\n * @see [fillColor](#series.areaspline.fillColor)\n *\n * @default 0.75\n * @apioption series.areaspline.fillOpacity\n */\n''; // adds doclets above into transpilat\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\n/* *\n *\n * API Options\n *\n * */\n/**\n * Column series display one column per value along an X axis.\n *\n * @sample {highcharts} highcharts/demo/column-basic/\n * Column chart\n * @sample {highstock} stock/demo/column/\n * Column chart\n *\n * @extends plotOptions.line\n * @excluding connectEnds, connectNulls, gapSize, gapUnit, linecap,\n * lineWidth, marker, step, useOhlcData\n * @product highcharts highstock\n * @optionparent plotOptions.column\n */\nvar ColumnSeriesDefaults = {\n /**\n * The corner radius of the border surrounding each column or bar.\n *\n * @sample {highcharts} highcharts/plotoptions/column-borderradius/\n * Rounded columns\n *\n * @product highcharts highstock gantt\n */\n borderRadius: 0,\n /**\n * When using automatic point colors pulled from the global\n * [colors](colors) or series-specific\n * [plotOptions.column.colors](series.colors) collections, this option\n * determines whether the chart should receive one color per series or\n * one color per point.\n *\n * In styled mode, the `colors` or `series.colors` arrays are not\n * supported, and instead this option gives the points individual color\n * class names on the form `highcharts-color-{n}`.\n *\n * @see [series colors](#plotOptions.column.colors)\n *\n * @sample {highcharts} highcharts/plotoptions/column-colorbypoint-false/\n * False by default\n * @sample {highcharts} highcharts/plotoptions/column-colorbypoint-true/\n * True\n *\n * @type {boolean}\n * @default false\n * @since 2.0\n * @product highcharts highstock gantt\n * @apioption plotOptions.column.colorByPoint\n */\n /**\n * A series specific or series type specific color set to apply instead\n * of the global [colors](#colors) when [colorByPoint](\n * #plotOptions.column.colorByPoint) is true.\n *\n * @type {Array}\n * @since 3.0\n * @product highcharts highstock gantt\n * @apioption plotOptions.column.colors\n */\n /**\n * When `true`, the columns will center in the category, ignoring null\n * or missing points. When `false`, space will be reserved for null or\n * missing points.\n *\n * @sample {highcharts} highcharts/series-column/centerincategory/\n * Center in category\n *\n * @since 8.0.1\n * @product highcharts highstock gantt\n */\n centerInCategory: false,\n /**\n * Padding between each value groups, in x axis units.\n *\n * @sample {highcharts} highcharts/plotoptions/column-grouppadding-default/\n * 0.2 by default\n * @sample {highcharts} highcharts/plotoptions/column-grouppadding-none/\n * No group padding - all columns are evenly spaced\n *\n * @product highcharts highstock gantt\n */\n groupPadding: 0.2,\n /**\n * Whether to group non-stacked columns or to let them render\n * independent of each other. Non-grouped columns will be laid out\n * individually and overlap each other.\n *\n * @sample {highcharts} highcharts/plotoptions/column-grouping-false/\n * Grouping disabled\n * @sample {highstock} highcharts/plotoptions/column-grouping-false/\n * Grouping disabled\n *\n * @type {boolean}\n * @default true\n * @since 2.3.0\n * @product highcharts highstock gantt\n * @apioption plotOptions.column.grouping\n */\n /** @ignore-option */\n marker: null,\n /**\n * The maximum allowed pixel width for a column, translated to the\n * height of a bar in a bar chart. This prevents the columns from\n * becoming too wide when there is a small number of points in the\n * chart.\n *\n * @see [pointWidth](#plotOptions.column.pointWidth)\n *\n * @sample {highcharts} highcharts/plotoptions/column-maxpointwidth-20/\n * Limited to 50\n * @sample {highstock} highcharts/plotoptions/column-maxpointwidth-20/\n * Limited to 50\n *\n * @type {number}\n * @since 4.1.8\n * @product highcharts highstock gantt\n * @apioption plotOptions.column.maxPointWidth\n */\n /**\n * Padding between each column or bar, in x axis units.\n *\n * @sample {highcharts} highcharts/plotoptions/column-pointpadding-default/\n * 0.1 by default\n * @sample {highcharts} highcharts/plotoptions/column-pointpadding-025/\n * 0.25\n * @sample {highcharts} highcharts/plotoptions/column-pointpadding-none/\n * 0 for tightly packed columns\n *\n * @product highcharts highstock gantt\n */\n pointPadding: 0.1,\n /**\n * A pixel value specifying a fixed width for each column or bar point.\n * When set to `undefined`, the width is calculated from the\n * `pointPadding` and `groupPadding`. The width effects the dimension\n * that is not based on the point value. For column series it is the\n * hoizontal length and for bar series it is the vertical length.\n *\n * @see [maxPointWidth](#plotOptions.column.maxPointWidth)\n *\n * @sample {highcharts} highcharts/plotoptions/column-pointwidth-20/\n * 20px wide columns regardless of chart width or the amount of\n * data points\n *\n * @type {number}\n * @since 1.2.5\n * @product highcharts highstock gantt\n * @apioption plotOptions.column.pointWidth\n */\n /**\n * A pixel value specifying a fixed width for the column or bar.\n * Overrides pointWidth on the series.\n *\n * @see [series.pointWidth](#plotOptions.column.pointWidth)\n *\n * @type {number}\n * @default undefined\n * @since 7.0.0\n * @product highcharts highstock gantt\n * @apioption series.column.data.pointWidth\n */\n /**\n * The minimal height for a column or width for a bar. By default,\n * 0 values are not shown. To visualize a 0 (or close to zero) point,\n * set the minimal point length to a pixel value like 3\\. In stacked\n * column charts, minPointLength might not be respected for tightly\n * packed values.\n *\n * @sample {highcharts} highcharts/plotoptions/column-minpointlength/\n * Zero base value\n * @sample {highcharts} highcharts/plotoptions/column-minpointlength-pos-and-neg/\n * Positive and negative close to zero values\n *\n * @product highcharts highstock gantt\n */\n minPointLength: 0,\n /**\n * When the series contains less points than the crop threshold, all\n * points are drawn, event if the points fall outside the visible plot\n * area at the current zoom. The advantage of drawing all points\n * (including markers and columns), is that animation is performed on\n * updates. On the other hand, when the series contains more points than\n * the crop threshold, the series data is cropped to only contain points\n * that fall within the plot area. The advantage of cropping away\n * invisible points is to increase performance on large series.\n *\n * @product highcharts highstock gantt\n */\n cropThreshold: 50,\n /**\n * The X axis range that each point is valid for. This determines the\n * width of the column. On a categorized axis, the range will be 1\n * by default (one category unit). On linear and datetime axes, the\n * range will be computed as the distance between the two closest data\n * points.\n *\n * The default `null` means it is computed automatically, but this\n * option can be used to override the automatic value.\n *\n * This option is set by default to 1 if data sorting is enabled.\n *\n * @sample {highcharts} highcharts/plotoptions/column-pointrange/\n * Set the point range to one day on a data set with one week\n * between the points\n *\n * @type {number|null}\n * @since 2.3\n * @product highcharts highstock gantt\n */\n pointRange: null,\n states: {\n /**\n * Options for the hovered point. These settings override the normal\n * state options when a point is moused over or touched.\n *\n * @extends plotOptions.series.states.hover\n * @excluding halo, lineWidth, lineWidthPlus, marker\n * @product highcharts highstock gantt\n */\n hover: {\n /** @ignore-option */\n halo: false,\n /**\n * A specific border color for the hovered point. Defaults to\n * inherit the normal state border color.\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @product highcharts gantt\n * @apioption plotOptions.column.states.hover.borderColor\n */\n /**\n * A specific color for the hovered point.\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @product highcharts gantt\n * @apioption plotOptions.column.states.hover.color\n */\n /**\n * How much to brighten the point on interaction. Requires the\n * main color to be defined in hex or rgb(a) format.\n *\n * In styled mode, the hover brightening is by default replaced\n * with a fill-opacity set in the `.highcharts-point:hover`\n * rule.\n *\n * @sample {highcharts} highcharts/plotoptions/column-states-hover-brightness/\n * Brighten by 0.5\n *\n * @product highcharts highstock gantt\n */\n brightness: 0.1\n },\n /**\n * Options for the selected point. These settings override the\n * normal state options when a point is selected.\n *\n * @extends plotOptions.series.states.select\n * @excluding halo, lineWidth, lineWidthPlus, marker\n * @product highcharts highstock gantt\n */\n select: {\n /**\n * A specific color for the selected point.\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @default #cccccc\n * @product highcharts highstock gantt\n */\n color: \"#cccccc\" /* Palette.neutralColor20 */,\n /**\n * A specific border color for the selected point.\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @default #000000\n * @product highcharts highstock gantt\n */\n borderColor: \"#000000\" /* Palette.neutralColor100 */\n }\n },\n dataLabels: {\n align: void 0,\n verticalAlign: void 0,\n /**\n * The y position offset of the label relative to the point in\n * pixels.\n *\n * @type {number}\n */\n y: void 0\n },\n // false doesn't work well: https://jsfiddle.net/highcharts/hz8fopan/14/\n /** @ignore-option */\n startFromThreshold: true,\n stickyTracking: false,\n tooltip: {\n distance: 6\n },\n /**\n * The Y axis value to serve as the base for the columns, for\n * distinguishing between values above and below a threshold. If `null`,\n * the columns extend from the padding Y axis minimum.\n *\n * @type {number|null}\n * @since 2.0\n * @product highcharts\n */\n threshold: 0,\n /**\n * The width of the border surrounding each column or bar. Defaults to\n * `1` when there is room for a border, but to `0` when the columns are\n * so dense that a border would cover the next column.\n *\n * In styled mode, the stroke width can be set with the\n * `.highcharts-point` rule.\n *\n * @sample {highcharts} highcharts/plotoptions/column-borderwidth/\n * 2px black border\n *\n * @type {number}\n * @default undefined\n * @product highcharts highstock gantt\n * @apioption plotOptions.column.borderWidth\n */\n /**\n * The color of the border surrounding each column or bar.\n *\n * In styled mode, the border stroke can be set with the\n * `.highcharts-point` rule.\n *\n * @sample {highcharts} highcharts/plotoptions/column-bordercolor/\n * Dark gray border\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @default #ffffff\n * @product highcharts highstock gantt\n */\n borderColor: \"#ffffff\" /* Palette.backgroundColor */\n};\n/**\n * A `column` series. If the [type](#series.column.type) option is\n * not specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends series,plotOptions.column\n * @excluding connectNulls, dataParser, dataURL, gapSize, gapUnit, linecap,\n * lineWidth, marker, connectEnds, step\n * @product highcharts highstock\n * @apioption series.column\n */\n/**\n * An array of data points for the series. For the `column` series type,\n * points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n * interpreted as `y` options. The `x` values will be automatically\n * calculated, either starting at 0 and incremented by 1, or from\n * `pointStart` and `pointInterval` given in the series options. If the axis\n * has categories, these will be used. Example:\n * ```js\n * data: [0, 5, 3, 5]\n * ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n * `x,y`. If the first value is a string, it is applied as the name of the\n * point, and the `x` value is inferred.\n * ```js\n * data: [\n * [0, 6],\n * [1, 2],\n * [2, 6]\n * ]\n * ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of\n * data points exceeds the series'\n * [turboThreshold](#series.column.turboThreshold), this option is not\n * available.\n * ```js\n * data: [{\n * x: 1,\n * y: 9,\n * name: \"Point2\",\n * color: \"#00FF00\"\n * }, {\n * x: 1,\n * y: 6,\n * name: \"Point1\",\n * color: \"#FF00FF\"\n * }]\n * ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n * Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n * Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n * Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n * Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Config objects\n *\n * @type {Array|null|*>}\n * @extends series.line.data\n * @excluding marker\n * @product highcharts highstock\n * @apioption series.column.data\n */\n/**\n * The color of the border surrounding the column or bar.\n *\n * In styled mode, the border stroke can be set with the `.highcharts-point`\n * rule.\n *\n * @sample {highcharts} highcharts/plotoptions/column-bordercolor/\n * Dark gray border\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @product highcharts highstock\n * @apioption series.column.data.borderColor\n */\n/**\n * The width of the border surrounding the column or bar.\n *\n * In styled mode, the stroke width can be set with the `.highcharts-point`\n * rule.\n *\n * @sample {highcharts} highcharts/plotoptions/column-borderwidth/\n * 2px black border\n *\n * @type {number}\n * @product highcharts highstock\n * @apioption series.column.data.borderWidth\n */\n/**\n * A name for the dash style to use for the column or bar. Overrides\n * dashStyle on the series.\n *\n * In styled mode, the stroke dash-array can be set with the same classes as\n * listed under [data.color](#series.column.data.color).\n *\n * @see [series.pointWidth](#plotOptions.column.dashStyle)\n *\n * @type {Highcharts.DashStyleValue}\n * @apioption series.column.data.dashStyle\n */\n/**\n * A pixel value specifying a fixed width for the column or bar. Overrides\n * pointWidth on the series. The width effects the dimension that is not based\n * on the point value.\n *\n * @see [series.pointWidth](#plotOptions.column.pointWidth)\n *\n * @type {number}\n * @apioption series.column.data.pointWidth\n */\n/**\n * @excluding halo, lineWidth, lineWidthPlus, marker\n * @product highcharts highstock\n * @apioption series.column.states.hover\n */\n/**\n * @excluding halo, lineWidth, lineWidthPlus, marker\n * @product highcharts highstock\n * @apioption series.column.states.select\n */\n''; // keeps doclets above in JS file\n/* *\n *\n * Default Export\n *\n * */\nexport default ColumnSeriesDefaults;\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport A from '../../Core/Animation/AnimationUtilities.js';\nvar animObject = A.animObject;\nimport Color from '../../Core/Color/Color.js';\nvar color = Color.parse;\nimport ColumnSeriesDefaults from './ColumnSeriesDefaults.js';\nimport H from '../../Core/Globals.js';\nvar hasTouch = H.hasTouch, noop = H.noop;\nimport LegendSymbol from '../../Core/Legend/LegendSymbol.js';\nimport Series from '../../Core/Series/Series.js';\nimport SeriesRegistry from '../../Core/Series/SeriesRegistry.js';\nimport U from '../../Core/Utilities.js';\nvar clamp = U.clamp, css = U.css, defined = U.defined, extend = U.extend, fireEvent = U.fireEvent, isArray = U.isArray, isNumber = U.isNumber, merge = U.merge, pick = U.pick, objectEach = U.objectEach;\n/* *\n *\n * Class\n *\n * */\n/**\n * The column series type.\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.column\n *\n * @augments Highcharts.Series\n */\nvar ColumnSeries = /** @class */ (function (_super) {\n __extends(ColumnSeries, _super);\n function ColumnSeries() {\n /* *\n *\n * Static Properties\n *\n * */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /* *\n *\n * Properties\n *\n * */\n _this.borderWidth = void 0;\n _this.data = void 0;\n _this.group = void 0;\n _this.options = void 0;\n _this.points = void 0;\n return _this;\n /* eslint-enable valid-jsdoc */\n }\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /**\n * Animate the column heights one by one from zero.\n *\n * @private\n * @function Highcharts.seriesTypes.column#animate\n *\n * @param {boolean} init\n * Whether to initialize the animation or run it\n */\n ColumnSeries.prototype.animate = function (init) {\n var series = this, yAxis = this.yAxis, options = series.options, inverted = this.chart.inverted, attr = {}, translateProp = inverted ?\n 'translateX' :\n 'translateY';\n var translateStart, translatedThreshold;\n if (init) {\n attr.scaleY = 0.001;\n translatedThreshold = clamp(yAxis.toPixels(options.threshold), yAxis.pos, yAxis.pos + yAxis.len);\n if (inverted) {\n attr.translateX = translatedThreshold - yAxis.len;\n }\n else {\n attr.translateY = translatedThreshold;\n }\n // apply finnal clipping (used in Highcharts Stock) (#7083)\n // animation is done by scaleY, so cliping is for panes\n if (series.clipBox) {\n series.setClip();\n }\n series.group.attr(attr);\n }\n else { // run the animation\n translateStart = Number(series.group.attr(translateProp));\n series.group.animate({ scaleY: 1 }, extend(animObject(series.options.animation), {\n // Do the scale synchronously to ensure smooth\n // updating (#5030, #7228)\n step: function (val, fx) {\n if (series.group) {\n attr[translateProp] = translateStart +\n fx.pos * (yAxis.pos - translateStart);\n series.group.attr(attr);\n }\n }\n }));\n }\n };\n /**\n * Initialize the series. Extends the basic Series.init method by\n * marking other series of the same type as dirty.\n *\n * @private\n * @function Highcharts.seriesTypes.column#init\n */\n ColumnSeries.prototype.init = function (chart, options) {\n _super.prototype.init.apply(this, arguments);\n var series = this;\n chart = series.chart;\n // if the series is added dynamically, force redraw of other\n // series affected by a new column\n if (chart.hasRendered) {\n chart.series.forEach(function (otherSeries) {\n if (otherSeries.type === series.type) {\n otherSeries.isDirty = true;\n }\n });\n }\n };\n /**\n * Return the width and x offset of the columns adjusted for grouping,\n * groupPadding, pointPadding, pointWidth etc.\n *\n * @private\n * @function Highcharts.seriesTypes.column#getColumnMetrics\n */\n ColumnSeries.prototype.getColumnMetrics = function () {\n var series = this, options = series.options, xAxis = series.xAxis, yAxis = series.yAxis, reversedStacks = xAxis.options.reversedStacks, \n // Keep backward compatibility: reversed xAxis had reversed\n // stacks\n reverseStacks = (xAxis.reversed && !reversedStacks) ||\n (!xAxis.reversed && reversedStacks), stackGroups = {};\n var stackKey, columnCount = 0;\n // Get the total number of column type series. This is called on\n // every series. Consider moving this logic to a chart.orderStacks()\n // function and call it on init, addSeries and removeSeries\n if (options.grouping === false) {\n columnCount = 1;\n }\n else {\n series.chart.series.forEach(function (otherSeries) {\n var otherYAxis = otherSeries.yAxis, otherOptions = otherSeries.options;\n var columnIndex;\n if (otherSeries.type === series.type &&\n (otherSeries.visible ||\n !series.chart.options.chart.ignoreHiddenSeries) &&\n yAxis.len === otherYAxis.len &&\n yAxis.pos === otherYAxis.pos) { // #642, #2086\n if (otherOptions.stacking &&\n otherOptions.stacking !== 'group') {\n stackKey = otherSeries.stackKey;\n if (typeof stackGroups[stackKey] ===\n 'undefined') {\n stackGroups[stackKey] = columnCount++;\n }\n columnIndex = stackGroups[stackKey];\n }\n else if (otherOptions.grouping !== false) { // #1162\n columnIndex = columnCount++;\n }\n otherSeries.columnIndex = columnIndex;\n }\n });\n }\n var categoryWidth = Math.min(Math.abs(xAxis.transA) * ((xAxis.ordinal && xAxis.ordinal.slope) ||\n options.pointRange ||\n xAxis.closestPointRange ||\n xAxis.tickInterval ||\n 1), // #2610\n xAxis.len // #1535\n ), groupPadding = categoryWidth * options.groupPadding, groupWidth = categoryWidth - 2 * groupPadding, pointOffsetWidth = groupWidth / (columnCount || 1), pointWidth = Math.min(options.maxPointWidth || xAxis.len, pick(options.pointWidth, pointOffsetWidth * (1 - 2 * options.pointPadding))), pointPadding = (pointOffsetWidth - pointWidth) / 2, \n // #1251, #3737\n colIndex = (series.columnIndex || 0) + (reverseStacks ? 1 : 0), pointXOffset = pointPadding +\n (groupPadding +\n colIndex * pointOffsetWidth -\n (categoryWidth / 2)) * (reverseStacks ? -1 : 1);\n // Save it for reading in linked series (Error bars particularly)\n series.columnMetrics = {\n width: pointWidth,\n offset: pointXOffset,\n paddedWidth: pointOffsetWidth,\n columnCount: columnCount\n };\n return series.columnMetrics;\n };\n /**\n * Make the columns crisp. The edges are rounded to the nearest full\n * pixel.\n *\n * @private\n * @function Highcharts.seriesTypes.column#crispCol\n */\n ColumnSeries.prototype.crispCol = function (x, y, w, h) {\n var chart = this.chart, borderWidth = this.borderWidth, xCrisp = -(borderWidth % 2 ? 0.5 : 0);\n var right, yCrisp = borderWidth % 2 ? 0.5 : 1;\n if (chart.inverted && chart.renderer.isVML) {\n yCrisp += 1;\n }\n // Horizontal. We need to first compute the exact right edge, then\n // round it and compute the width from there.\n if (this.options.crisp) {\n right = Math.round(x + w) + xCrisp;\n x = Math.round(x) + xCrisp;\n w = right - x;\n }\n // Vertical\n var bottom = Math.round(y + h) + yCrisp, fromTop = Math.abs(y) <= 0.5 && bottom > 0.5; // #4504, #4656\n y = Math.round(y) + yCrisp;\n h = bottom - y;\n // Top edges are exceptions\n if (fromTop && h) { // #5146\n y -= 1;\n h += 1;\n }\n return {\n x: x,\n y: y,\n width: w,\n height: h\n };\n };\n /**\n * Adjust for missing columns, according to the `centerInCategory`\n * option. Missing columns are either single points or stacks where the\n * point or points are either missing or null.\n *\n * @private\n * @function Highcharts.seriesTypes.column#adjustForMissingColumns\n * @param {number} x\n * The x coordinate of the column, left side\n *\n * @param {number} pointWidth\n * The pointWidth, already computed upstream\n *\n * @param {Highcharts.ColumnPoint} point\n * The point instance\n *\n * @param {Highcharts.ColumnMetricsObject} metrics\n * The series-wide column metrics\n *\n * @return {number}\n * The adjusted x position, or the original if not adjusted\n */\n ColumnSeries.prototype.adjustForMissingColumns = function (x, pointWidth, point, metrics) {\n var _this = this;\n var stacking = this.options.stacking;\n if (!point.isNull && metrics.columnCount > 1) {\n var reversedStacks_1 = this.yAxis.options.reversedStacks;\n var indexInCategory_1 = 0, totalInCategory_1 = reversedStacks_1 ? 0 : -metrics.columnCount;\n // Loop over all the stacks on the Y axis. When stacking is enabled,\n // these are real point stacks. When stacking is not enabled, but\n // `centerInCategory` is true, there is one stack handling the\n // grouping of points in each category. This is done in the\n // `setGroupedPoints` function.\n objectEach(this.yAxis.stacking && this.yAxis.stacking.stacks, function (stack) {\n if (typeof point.x === 'number') {\n var stackItem_1 = stack[point.x.toString()];\n if (stackItem_1) {\n var pointValues = stackItem_1.points[_this.index];\n // If true `stacking` is enabled, count the total\n // number of non-null stacks in the category, and\n // note which index this point is within those\n // stacks.\n if (stacking) {\n if (pointValues) {\n indexInCategory_1 = totalInCategory_1;\n }\n if (stackItem_1.hasValidPoints) {\n reversedStacks_1 ? // #16169\n totalInCategory_1++ : totalInCategory_1--;\n }\n // If `stacking` is not enabled, look for the index\n }\n else if (isArray(pointValues)) {\n // If there are multiple points with the same X\n // then gather all series in category, and\n // assign index\n var seriesIndexes = Object\n .keys(stackItem_1.points)\n .filter(function (pointKey) {\n // Filter out duplicate X's\n return !pointKey.match(',') &&\n // Filter out null points\n stackItem_1.points[pointKey] &&\n stackItem_1.points[pointKey].length > 1;\n })\n .map(parseFloat)\n .sort(function (a, b) { return b - a; });\n indexInCategory_1 = seriesIndexes.indexOf(_this.index);\n totalInCategory_1 = seriesIndexes.length;\n }\n }\n }\n });\n // Compute the adjusted x position\n var boxWidth = (totalInCategory_1 - 1) * metrics.paddedWidth +\n pointWidth;\n x = (point.plotX || 0) + boxWidth / 2 - pointWidth -\n indexInCategory_1 * metrics.paddedWidth;\n }\n return x;\n };\n /**\n * Translate each point to the plot area coordinate system and find\n * shape positions\n *\n * @private\n * @function Highcharts.seriesTypes.column#translate\n */\n ColumnSeries.prototype.translate = function () {\n var series = this, chart = series.chart, options = series.options, dense = series.dense =\n series.closestPointRange * series.xAxis.transA < 2, borderWidth = series.borderWidth = pick(options.borderWidth, dense ? 0 : 1 // #3635\n ), xAxis = series.xAxis, yAxis = series.yAxis, threshold = options.threshold, translatedThreshold = series.translatedThreshold =\n yAxis.getThreshold(threshold), minPointLength = pick(options.minPointLength, 5), metrics = series.getColumnMetrics(), seriesPointWidth = metrics.width, seriesXOffset = series.pointXOffset = metrics.offset, dataMin = series.dataMin, dataMax = series.dataMax;\n // postprocessed for border width\n var seriesBarW = series.barW =\n Math.max(seriesPointWidth, 1 + 2 * borderWidth);\n if (chart.inverted) {\n translatedThreshold -= 0.5; // #3355\n }\n // When the pointPadding is 0, we want the columns to be packed\n // tightly, so we allow individual columns to have individual sizes.\n // When pointPadding is greater, we strive for equal-width columns\n // (#2694).\n if (options.pointPadding) {\n seriesBarW = Math.ceil(seriesBarW);\n }\n Series.prototype.translate.apply(series);\n // Record the new values\n series.points.forEach(function (point) {\n var yBottom = pick(point.yBottom, translatedThreshold), safeDistance = 999 + Math.abs(yBottom), plotX = point.plotX || 0, \n // Don't draw too far outside plot area (#1303, #2241,\n // #4264)\n plotY = clamp(point.plotY, -safeDistance, yAxis.len + safeDistance);\n var up, barY = Math.min(plotY, yBottom), barH = Math.max(plotY, yBottom) - barY, pointWidth = seriesPointWidth, barX = plotX + seriesXOffset, barW = seriesBarW;\n // Handle options.minPointLength\n if (minPointLength && Math.abs(barH) < minPointLength) {\n barH = minPointLength;\n up = (!yAxis.reversed && !point.negative) ||\n (yAxis.reversed && point.negative);\n // Reverse zeros if there's no positive value in the series\n // in visible range (#7046)\n if (isNumber(threshold) &&\n isNumber(dataMax) &&\n point.y === threshold &&\n dataMax <= threshold &&\n // and if there's room for it (#7311)\n (yAxis.min || 0) < threshold &&\n // if all points are the same value (i.e zero) not draw\n // as negative points (#10646), but only if there's room\n // for it (#14876)\n (dataMin !== dataMax || (yAxis.max || 0) <= threshold)) {\n up = !up;\n }\n // If stacked...\n barY = (Math.abs(barY - translatedThreshold) > minPointLength ?\n // ...keep position\n yBottom - minPointLength :\n // #1485, #4051\n translatedThreshold -\n (up ? minPointLength : 0));\n }\n // Handle point.options.pointWidth\n // @todo Handle grouping/stacking too. Calculate offset properly\n if (defined(point.options.pointWidth)) {\n pointWidth = barW =\n Math.ceil(point.options.pointWidth);\n barX -= Math.round((pointWidth - seriesPointWidth) / 2);\n }\n // Adjust for null or missing points\n if (options.centerInCategory) {\n barX = series.adjustForMissingColumns(barX, pointWidth, point, metrics);\n }\n // Cache for access in polar\n point.barX = barX;\n point.pointWidth = pointWidth;\n // Fix the tooltip on center of grouped columns (#1216, #424,\n // #3648)\n point.tooltipPos = chart.inverted ?\n [\n clamp(yAxis.len + yAxis.pos - chart.plotLeft - plotY, yAxis.pos - chart.plotLeft, yAxis.len + yAxis.pos - chart.plotLeft),\n xAxis.len + xAxis.pos - chart.plotTop - barX - barW / 2,\n barH\n ] :\n [\n xAxis.left - chart.plotLeft + barX + barW / 2,\n clamp(plotY + yAxis.pos -\n chart.plotTop, yAxis.pos - chart.plotTop, yAxis.len + yAxis.pos - chart.plotTop),\n barH\n ];\n // Register shape type and arguments to be used in drawPoints\n // Allow shapeType defined on pointClass level\n point.shapeType = series.pointClass.prototype.shapeType || 'rect';\n point.shapeArgs = series.crispCol.apply(series, point.isNull ?\n // #3169, drilldown from null must have a position to work\n // from #6585, dataLabel should be placed on xAxis, not\n // floating in the middle of the chart\n [barX, translatedThreshold, barW, 0] :\n [barX, barY, barW, barH]);\n });\n };\n /**\n * Columns have no graph\n *\n * @private\n * @function Highcharts.seriesTypes.column#drawGraph\n */\n ColumnSeries.prototype.drawGraph = function () {\n this.group[this.dense ? 'addClass' : 'removeClass']('highcharts-dense-data');\n };\n /**\n * Get presentational attributes\n *\n * @private\n * @function Highcharts.seriesTypes.column#pointAttribs\n */\n ColumnSeries.prototype.pointAttribs = function (point, state) {\n var options = this.options, p2o = this.pointAttrToOptions || {}, strokeOption = p2o.stroke || 'borderColor', strokeWidthOption = p2o['stroke-width'] || 'borderWidth';\n var stateOptions, zone, brightness, fill = (point && point.color) || this.color, \n // set to fill when borderColor null:\n stroke = ((point && point[strokeOption]) ||\n options[strokeOption] ||\n fill), dashstyle = (point && point.options.dashStyle) || options.dashStyle, strokeWidth = (point && point[strokeWidthOption]) ||\n options[strokeWidthOption] ||\n this[strokeWidthOption] || 0, opacity = pick(point && point.opacity, options.opacity, 1);\n // Handle zone colors\n if (point && this.zones.length) {\n zone = point.getZone();\n // When zones are present, don't use point.color (#4267).\n // Changed order (#6527), added support for colorAxis (#10670)\n fill = (point.options.color ||\n (zone && (zone.color || point.nonZonedColor)) ||\n this.color);\n if (zone) {\n stroke = zone.borderColor || stroke;\n dashstyle = zone.dashStyle || dashstyle;\n strokeWidth = zone.borderWidth || strokeWidth;\n }\n }\n // Select or hover states\n if (state && point) {\n stateOptions = merge(options.states[state], \n // #6401\n point.options.states &&\n point.options.states[state] ||\n {});\n brightness = stateOptions.brightness;\n fill =\n stateOptions.color || (typeof brightness !== 'undefined' &&\n color(fill)\n .brighten(stateOptions.brightness)\n .get()) || fill;\n stroke = stateOptions[strokeOption] || stroke;\n strokeWidth =\n stateOptions[strokeWidthOption] || strokeWidth;\n dashstyle = stateOptions.dashStyle || dashstyle;\n opacity = pick(stateOptions.opacity, opacity);\n }\n var ret = {\n fill: fill,\n stroke: stroke,\n 'stroke-width': strokeWidth,\n opacity: opacity\n };\n if (dashstyle) {\n ret.dashstyle = dashstyle;\n }\n return ret;\n };\n /**\n * Draw the columns. For bars, the series.group is rotated, so the same\n * coordinates apply for columns and bars. This method is inherited by\n * scatter series.\n *\n * @private\n * @function Highcharts.seriesTypes.column#drawPoints\n */\n ColumnSeries.prototype.drawPoints = function (points) {\n if (points === void 0) { points = this.points; }\n var series = this, chart = this.chart, options = series.options, renderer = chart.renderer, animationLimit = options.animationLimit || 250;\n var shapeArgs;\n // draw the columns\n points.forEach(function (point) {\n var plotY = point.plotY;\n var graphic = point.graphic, hasGraphic = !!graphic, verb = graphic && chart.pointCount < animationLimit ?\n 'animate' : 'attr';\n if (isNumber(plotY) && point.y !== null) {\n shapeArgs = point.shapeArgs;\n // When updating a series between 2d and 3d or cartesian and\n // polar, the shape type changes.\n if (graphic && point.hasNewShapeType()) {\n graphic = graphic.destroy();\n }\n // Set starting position for point sliding animation.\n if (series.enabledDataSorting) {\n point.startXPos = series.xAxis.reversed ?\n -(shapeArgs ? (shapeArgs.width || 0) : 0) :\n series.xAxis.width;\n }\n if (!graphic) {\n point.graphic = graphic =\n renderer[point.shapeType](shapeArgs)\n .add(point.group || series.group);\n if (graphic &&\n series.enabledDataSorting &&\n chart.hasRendered &&\n chart.pointCount < animationLimit) {\n graphic.attr({\n x: point.startXPos\n });\n hasGraphic = true;\n verb = 'animate';\n }\n }\n if (graphic && hasGraphic) { // update\n graphic[verb](merge(shapeArgs));\n }\n // Border radius is not stylable (#6900)\n if (options.borderRadius) {\n graphic[verb]({\n r: options.borderRadius\n });\n }\n // Presentational\n if (!chart.styledMode) {\n graphic[verb](series.pointAttribs(point, (point.selected && 'select')))\n .shadow(point.allowShadow !== false && options.shadow, null, options.stacking && !options.borderRadius);\n }\n if (graphic) {\n graphic.addClass(point.getClassName(), true);\n graphic.attr({\n visibility: point.visible ? 'inherit' : 'hidden'\n });\n }\n }\n else if (graphic) {\n point.graphic = graphic.destroy(); // #1269\n }\n });\n };\n /**\n * Draw the tracker for a point.\n * @private\n */\n ColumnSeries.prototype.drawTracker = function (points) {\n if (points === void 0) { points = this.points; }\n var series = this, chart = series.chart, pointer = chart.pointer, onMouseOver = function (e) {\n var 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 var dataLabels;\n // Add reference to the point\n points.forEach(function (point) {\n dataLabels = (isArray(point.dataLabels) ?\n point.dataLabels :\n (point.dataLabel ? [point.dataLabel] : []));\n if (point.graphic) {\n point.graphic.element.point = point;\n }\n dataLabels.forEach(function (dataLabel) {\n if (dataLabel.div) {\n dataLabel.div.point = point;\n }\n else {\n dataLabel.element.point = point;\n }\n });\n });\n // Add the event listeners, we need to do this only once\n if (!series._hasTracking) {\n series.trackerGroups.forEach(function (key) {\n if (series[key]) {\n // we don't always have dataLabelsGroup\n series[key]\n .addClass('highcharts-tracker')\n .on('mouseover', onMouseOver)\n .on('mouseout', function (e) {\n pointer.onTrackerMouseOut(e);\n });\n if (hasTouch) {\n series[key].on('touchstart', onMouseOver);\n }\n if (!chart.styledMode && series.options.cursor) {\n series[key]\n .css({ cursor: series.options.cursor });\n }\n }\n });\n series._hasTracking = true;\n }\n fireEvent(this, 'afterDrawTracker');\n };\n /**\n * Remove this series from the chart\n *\n * @private\n * @function Highcharts.seriesTypes.column#remove\n */\n ColumnSeries.prototype.remove = function () {\n var series = this, chart = series.chart;\n // column and bar series affects other series of the same type\n // as they are either stacked or grouped\n if (chart.hasRendered) {\n chart.series.forEach(function (otherSeries) {\n if (otherSeries.type === series.type) {\n otherSeries.isDirty = true;\n }\n });\n }\n Series.prototype.remove.apply(series, arguments);\n };\n ColumnSeries.defaultOptions = merge(Series.defaultOptions, ColumnSeriesDefaults);\n return ColumnSeries;\n}(Series));\nextend(ColumnSeries.prototype, {\n cropShoulder: 0,\n // When tooltip is not shared, this series (and derivatives) requires\n // direct touch/hover. KD-tree does not apply.\n directTouch: true,\n /**\n * Use a solid rectangle like the area series types\n *\n * @private\n * @function Highcharts.seriesTypes.column#drawLegendSymbol\n *\n * @param {Highcharts.Legend} legend\n * The legend object\n *\n * @param {Highcharts.Series|Highcharts.Point} item\n * The series (this) or point\n */\n drawLegendSymbol: LegendSymbol.drawRectangle,\n getSymbol: noop,\n // use separate negative stacks, unlike area stacks where a negative\n // point is substracted from previous (#1910)\n negStacks: true,\n trackerGroups: ['group', 'dataLabelsGroup']\n});\nSeriesRegistry.registerSeriesType('column', ColumnSeries);\n/* *\n *\n * Default Export\n *\n * */\nexport default ColumnSeries;\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Adjusted width and x offset of the columns for grouping.\n *\n * @private\n * @interface Highcharts.ColumnMetricsObject\n */ /**\n* Width of the columns.\n* @name Highcharts.ColumnMetricsObject#width\n* @type {number}\n*/ /**\n* Offset of the columns.\n* @name Highcharts.ColumnMetricsObject#offset\n* @type {number}\n*/\n''; // detach doclets above\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport A from '../Animation/AnimationUtilities.js';\nvar getDeferredAnimation = A.getDeferredAnimation;\nimport F from '../FormatUtilities.js';\nvar format = F.format;\nimport U from '../Utilities.js';\nvar defined = U.defined, extend = U.extend, fireEvent = U.fireEvent, isArray = U.isArray, isString = U.isString, merge = U.merge, objectEach = U.objectEach, pick = U.pick, splat = U.splat;\n/* *\n *\n * Composition\n *\n * */\n/* eslint-disable valid-jsdoc */\nvar DataLabel;\n(function (DataLabel) {\n /* *\n *\n * Declarations\n *\n * */\n /* *\n *\n * Constants\n *\n * */\n var composedClasses = [];\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /**\n * Align each individual data label.\n * @private\n */\n function alignDataLabel(point, dataLabel, options, alignTo, isNew) {\n var series = this, chart = this.chart, inverted = this.isCartesian && chart.inverted, enabledDataSorting = this.enabledDataSorting, plotX = point.plotX, plotY = point.plotY, rotation = options.rotation, align = options.align, isInsidePlot = defined(plotX) &&\n defined(plotY) &&\n chart.isInsidePlot(plotX, Math.round(plotY), {\n inverted: inverted,\n paneCoordinates: true,\n series: series\n }), setStartPos = function (alignOptions) {\n if (enabledDataSorting && series.xAxis && !justify) {\n series.setDataLabelStartPos(point, dataLabel, isNew, isInsidePlot, alignOptions);\n }\n };\n var baseline, rotCorr, // rotation correction\n // Math.round for rounding errors (#2683), alignTo to allow column\n // labels (#2700)\n alignAttr, // the final position;\n justify = pick(options.overflow, (enabledDataSorting ? 'none' : 'justify')) === 'justify', visible = this.visible &&\n point.visible !== false &&\n defined(plotX) &&\n (point.series.forceDL ||\n (enabledDataSorting && !justify) ||\n isInsidePlot ||\n (\n // If the data label is inside the align box, it is\n // enough that parts of the align box is inside the\n // plot area (#12370). When stacking, it is always\n // inside regardless of the option (#15148).\n pick(options.inside, !!this.options.stacking) &&\n alignTo &&\n chart.isInsidePlot(plotX, inverted ?\n alignTo.x + 1 :\n alignTo.y + alignTo.height - 1, {\n inverted: inverted,\n paneCoordinates: true,\n series: series\n })));\n var pos = point.pos();\n if (visible && pos) {\n if (rotation) {\n dataLabel.attr({ align: align });\n }\n var bBox = dataLabel.getBBox(true), bBoxCorrection = [0, 0];\n baseline = chart.renderer.fontMetrics(chart.styledMode ? void 0 : options.style.fontSize, dataLabel).b;\n // The alignment box is a singular point\n alignTo = extend({\n x: pos[0],\n y: Math.round(pos[1]),\n width: 0,\n height: 0\n }, alignTo);\n // Add the text size for alignment calculation\n extend(options, {\n width: bBox.width,\n height: bBox.height\n });\n // Allow a hook for changing alignment in the last moment, then do\n // the alignment\n if (rotation) {\n justify = false; // Not supported for rotated text\n rotCorr = chart.renderer.rotCorr(baseline, rotation); // #3723\n alignAttr = {\n x: (alignTo.x +\n (options.x || 0) +\n alignTo.width / 2 +\n rotCorr.x),\n y: (alignTo.y +\n (options.y || 0) +\n { top: 0, middle: 0.5, bottom: 1 }[options.verticalAlign] *\n alignTo.height)\n };\n bBoxCorrection = [\n bBox.x - Number(dataLabel.attr('x')),\n bBox.y - Number(dataLabel.attr('y'))\n ];\n setStartPos(alignAttr); // data sorting\n dataLabel[isNew ? 'attr' : 'animate'](alignAttr);\n }\n else {\n setStartPos(alignTo); // data sorting\n dataLabel.align(options, void 0, alignTo);\n alignAttr = dataLabel.alignAttr;\n }\n // Handle justify or crop\n if (justify && alignTo.height >= 0) { // #8830\n this.justifyDataLabel(dataLabel, options, alignAttr, bBox, alignTo, isNew);\n // Now check that the data label is within the plot area\n }\n else if (pick(options.crop, true)) {\n var x = alignAttr.x, y = alignAttr.y;\n x += bBoxCorrection[0];\n y += bBoxCorrection[1];\n // Uncomment this block to visualize the bounding boxes used for\n // determining visibility\n /*\n chart.renderer.rect(\n chart.plotLeft + alignAttr.x + bBox.x,\n chart.plotTop + alignAttr.y + bBox.y + 9999,\n bBox.width,\n bBox.height\n ).attr({\n stroke: 'rgba(0, 0, 0, 0.3)',\n 'stroke-width': 0.5\n }).add();\n chart.renderer.circle(\n chart.plotLeft + alignAttr.x,\n chart.plotTop + alignAttr.y,\n 2\n ).attr({\n fill: 'red',\n zIndex: 20\n }).add();\n // */\n visible =\n chart.isInsidePlot(x, y, {\n paneCoordinates: true,\n series: series\n }) &&\n chart.isInsidePlot(x + bBox.width, y + bBox.height, {\n paneCoordinates: true,\n series: series\n });\n }\n // When we're using a shape, make it possible with a connector or an\n // arrow pointing to thie point\n if (options.shape && !rotation) {\n dataLabel[isNew ? 'attr' : 'animate']({\n anchorX: pos[0],\n anchorY: pos[1]\n });\n }\n }\n // To use alignAttr property in hideOverlappingLabels\n if (isNew && enabledDataSorting) {\n dataLabel.placed = false;\n }\n // Show or hide based on the final aligned position\n if (!visible && (!enabledDataSorting || justify)) {\n dataLabel.hide();\n dataLabel.placed = false; // don't animate back in\n }\n else {\n dataLabel.show();\n }\n }\n /**\n * Handle the dataLabels.filter option.\n * @private\n */\n function applyFilter(point, options) {\n var filter = options.filter;\n if (filter) {\n var op = filter.operator;\n var prop = point[filter.property];\n var val = filter.value;\n if ((op === '>' && prop > val) ||\n (op === '<' && prop < val) ||\n (op === '>=' && prop >= val) ||\n (op === '<=' && prop <= val) ||\n (op === '==' && prop == val) || // eslint-disable-line eqeqeq\n (op === '===' && prop === val)) {\n return true;\n }\n return false;\n }\n return true;\n }\n /**\n * @private\n */\n function compose(SeriesClass) {\n if (composedClasses.indexOf(SeriesClass) === -1) {\n var seriesProto = SeriesClass.prototype;\n composedClasses.push(SeriesClass);\n seriesProto.alignDataLabel = alignDataLabel;\n seriesProto.drawDataLabels = drawDataLabels;\n seriesProto.justifyDataLabel = justifyDataLabel;\n seriesProto.setDataLabelStartPos = setDataLabelStartPos;\n }\n }\n DataLabel.compose = compose;\n /**\n * Draw the data labels\n * @private\n */\n function drawDataLabels(points) {\n if (points === void 0) { points = this.points; }\n var series = this, chart = series.chart, seriesOptions = series.options, hasRendered = series.hasRendered || 0, renderer = chart.renderer, _a = chart.options.chart, backgroundColor = _a.backgroundColor, plotBackgroundColor = _a.plotBackgroundColor, contrastColor = renderer.getContrast((isString(plotBackgroundColor) && plotBackgroundColor) ||\n (isString(backgroundColor) && backgroundColor) ||\n \"#000000\" /* Palette.neutralColor100 */);\n var seriesDlOptions = seriesOptions.dataLabels, pointOptions, dataLabelsGroup;\n var dataLabelAnim = seriesDlOptions.animation, animationConfig = seriesDlOptions.defer ?\n getDeferredAnimation(chart, dataLabelAnim, series) :\n { defer: 0, duration: 0 };\n // Merge in plotOptions.dataLabels for series\n seriesDlOptions = mergeArrays(mergeArrays(chart.options.plotOptions &&\n chart.options.plotOptions.series &&\n chart.options.plotOptions.series.dataLabels, chart.options.plotOptions &&\n chart.options.plotOptions[series.type] &&\n chart.options.plotOptions[series.type].dataLabels), seriesDlOptions);\n fireEvent(this, 'drawDataLabels');\n if (isArray(seriesDlOptions) ||\n seriesDlOptions.enabled ||\n series._hasPointLabels) {\n // Create a separate group for the data labels to avoid rotation\n dataLabelsGroup = series.plotGroup('dataLabelsGroup', 'data-labels', !hasRendered ? 'hidden' : 'inherit', // #5133, #10220\n seriesDlOptions.zIndex || 6);\n dataLabelsGroup.attr({ opacity: +hasRendered }); // #3300\n if (!hasRendered) {\n var group = series.dataLabelsGroup;\n if (group) {\n if (series.visible) { // #2597, #3023, #3024\n dataLabelsGroup.show();\n }\n group[seriesOptions.animation ? 'animate' : 'attr']({ opacity: 1 }, animationConfig);\n }\n }\n // Make the labels for each point\n points.forEach(function (point) {\n // Merge in series options for the point.\n // @note dataLabelAttribs (like pointAttribs) would eradicate\n // the need for dlOptions, and simplify the section below.\n pointOptions = splat(mergeArrays(seriesDlOptions, \n // dlOptions is used in treemaps\n (point.dlOptions ||\n (point.options && point.options.dataLabels))));\n // Handle each individual data label for this point\n pointOptions.forEach(function (labelOptions, i) {\n // Options for one datalabel\n var labelEnabled = (labelOptions.enabled &&\n // #2282, #4641, #7112, #10049\n (!point.isNull || point.dataLabelOnNull) &&\n applyFilter(point, labelOptions)), connector = point.connectors ?\n point.connectors[i] :\n point.connector;\n var labelConfig, formatString, labelText, style, rotation, attr, dataLabel = point.dataLabels ?\n point.dataLabels[i] : point.dataLabel, isNew = !dataLabel;\n var labelDistance = pick(labelOptions.distance, point.labelDistance);\n if (labelEnabled) {\n // Create individual options structure that can be\n // extended without affecting others\n labelConfig = point.getLabelConfig();\n formatString = pick(labelOptions[point.formatPrefix + 'Format'], labelOptions.format);\n labelText = defined(formatString) ?\n format(formatString, labelConfig, chart) :\n (labelOptions[point.formatPrefix + 'Formatter'] ||\n labelOptions.formatter).call(labelConfig, labelOptions);\n style = labelOptions.style;\n rotation = labelOptions.rotation;\n if (!chart.styledMode) {\n // Determine the color\n style.color = pick(labelOptions.color, style.color, series.color, \"#000000\" /* Palette.neutralColor100 */);\n // Get automated contrast color\n if (style.color === 'contrast') {\n point.contrastColor = renderer.getContrast((point.color || series.color));\n style.color = (!defined(labelDistance) &&\n labelOptions.inside) ||\n labelDistance < 0 ||\n !!seriesOptions.stacking ?\n point.contrastColor :\n contrastColor;\n }\n else {\n delete point.contrastColor;\n }\n if (seriesOptions.cursor) {\n style.cursor = seriesOptions.cursor;\n }\n }\n attr = {\n r: labelOptions.borderRadius || 0,\n rotation: rotation,\n padding: labelOptions.padding,\n zIndex: 1\n };\n if (!chart.styledMode) {\n var backgroundColor_1 = labelOptions.backgroundColor, borderColor = labelOptions.borderColor;\n attr.fill = backgroundColor_1 === 'auto' ?\n point.color :\n backgroundColor_1;\n attr.stroke = borderColor === 'auto' ?\n point.color :\n borderColor;\n attr['stroke-width'] = labelOptions.borderWidth;\n }\n // Remove unused attributes (#947)\n objectEach(attr, function (val, name) {\n if (typeof val === 'undefined') {\n delete attr[name];\n }\n });\n }\n // If the point is outside the plot area, destroy it. #678,\n // #820\n if (dataLabel && (!labelEnabled ||\n !defined(labelText) ||\n !!dataLabel.div !== !!labelOptions.useHTML ||\n (\n // Change from no rotation to rotation and\n // vice versa. Don't use defined() because\n // rotation = 0 means also rotation = undefined\n (!dataLabel.rotation ||\n !labelOptions.rotation) &&\n dataLabel.rotation !== labelOptions.rotation))) {\n isNew = true;\n point.dataLabel = dataLabel =\n point.dataLabel && point.dataLabel.destroy();\n if (point.dataLabels) {\n // Remove point.dataLabels if this was the last one\n if (point.dataLabels.length === 1) {\n delete point.dataLabels;\n }\n else {\n delete point.dataLabels[i];\n }\n }\n if (!i) {\n delete point.dataLabel;\n }\n if (connector) {\n point.connector = point.connector.destroy();\n if (point.connectors) {\n // Remove point.connectors if this was the last\n // one\n if (point.connectors.length === 1) {\n delete point.connectors;\n }\n else {\n delete point.connectors[i];\n }\n }\n }\n }\n // Individual labels are disabled if the are explicitly\n // disabled in the point options, or if they fall outside\n // the plot area.\n if (labelEnabled && defined(labelText)) {\n if (!dataLabel) {\n // Create new label element\n point.dataLabels = point.dataLabels || [];\n dataLabel = point.dataLabels[i] = rotation ?\n // Labels don't rotate, use text element\n renderer.text(labelText, 0, 0, labelOptions.useHTML)\n .addClass('highcharts-data-label') :\n // We can use label\n renderer.label(labelText, 0, 0, labelOptions.shape, null, null, labelOptions.useHTML, null, 'data-label');\n // Store for backwards compatibility\n if (!i) {\n point.dataLabel = dataLabel;\n }\n dataLabel.addClass(' highcharts-data-label-color-' +\n point.colorIndex +\n ' ' + (labelOptions.className || '') +\n ( // #3398\n labelOptions.useHTML ?\n ' highcharts-tracker' :\n ''));\n }\n else {\n // Use old element and just update text\n attr.text = labelText;\n }\n // Store data label options for later access\n dataLabel.options = labelOptions;\n dataLabel.attr(attr);\n if (!chart.styledMode) {\n // Styles must be applied before add in order to\n // read text bounding box\n dataLabel.css(style).shadow(labelOptions.shadow);\n }\n var textPathOptions = labelOptions[point.formatPrefix + 'TextPath'] ||\n labelOptions.textPath;\n if (textPathOptions && !labelOptions.useHTML) {\n dataLabel.setTextPath((point.getDataLabelPath &&\n point.getDataLabelPath(dataLabel)) || point.graphic, textPathOptions);\n if (point.dataLabelPath &&\n !textPathOptions.enabled) {\n // clean the DOM\n point.dataLabelPath = (point.dataLabelPath.destroy());\n }\n }\n if (!dataLabel.added) {\n dataLabel.add(dataLabelsGroup);\n }\n // Now the data label is created and placed at 0,0, so\n // we need to align it\n series.alignDataLabel(point, dataLabel, labelOptions, null, isNew);\n }\n else if (dataLabel) {\n dataLabel.hide();\n }\n });\n });\n }\n fireEvent(this, 'afterDrawDataLabels');\n }\n /**\n * If data labels fall partly outside the plot area, align them back in, in\n * a way that doesn't hide the point.\n * @private\n */\n function justifyDataLabel(dataLabel, options, alignAttr, bBox, alignTo, isNew) {\n var chart = this.chart, align = options.align, verticalAlign = options.verticalAlign, padding = dataLabel.box ? 0 : (dataLabel.padding || 0);\n var _a = options.x, x = _a === void 0 ? 0 : _a, _b = options.y, y = _b === void 0 ? 0 : _b, off, justified;\n // Off left\n off = (alignAttr.x || 0) + padding;\n if (off < 0) {\n if (align === 'right' && x >= 0) {\n options.align = 'left';\n options.inside = true;\n }\n else {\n x -= off;\n }\n justified = true;\n }\n // Off right\n off = (alignAttr.x || 0) + bBox.width - padding;\n if (off > chart.plotWidth) {\n if (align === 'left' && x <= 0) {\n options.align = 'right';\n options.inside = true;\n }\n else {\n x += chart.plotWidth - off;\n }\n justified = true;\n }\n // Off top\n off = alignAttr.y + padding;\n if (off < 0) {\n if (verticalAlign === 'bottom' && y >= 0) {\n options.verticalAlign = 'top';\n options.inside = true;\n }\n else {\n y -= off;\n }\n justified = true;\n }\n // Off bottom\n off = (alignAttr.y || 0) + bBox.height - padding;\n if (off > chart.plotHeight) {\n if (verticalAlign === 'top' && y <= 0) {\n options.verticalAlign = 'bottom';\n options.inside = true;\n }\n else {\n y += chart.plotHeight - off;\n }\n justified = true;\n }\n if (justified) {\n options.x = x;\n options.y = y;\n dataLabel.placed = !isNew;\n dataLabel.align(options, void 0, alignTo);\n }\n return justified;\n }\n /**\n * Merge two objects that can be arrays. If one of them is an array, the\n * other is merged into each element. If both are arrays, each element is\n * merged by index. If neither are arrays, we use normal merge.\n * @private\n */\n function mergeArrays(one, two) {\n var res = [], i;\n if (isArray(one) && !isArray(two)) {\n res = one.map(function (el) {\n return merge(el, two);\n });\n }\n else if (isArray(two) && !isArray(one)) {\n res = two.map(function (el) {\n return merge(one, el);\n });\n }\n else if (!isArray(one) && !isArray(two)) {\n res = merge(one, two);\n }\n else {\n i = Math.max(one.length, two.length);\n while (i--) {\n res[i] = merge(one[i], two[i]);\n }\n }\n return res;\n }\n /**\n * Set starting position for data label sorting animation.\n * @private\n */\n function setDataLabelStartPos(point, dataLabel, isNew, isInside, alignOptions) {\n var chart = this.chart, inverted = chart.inverted, xAxis = this.xAxis, reversed = xAxis.reversed, labelCenter = inverted ? dataLabel.height / 2 : dataLabel.width / 2, pointWidth = point.pointWidth, halfWidth = pointWidth ? pointWidth / 2 : 0;\n dataLabel.startXPos = inverted ?\n alignOptions.x :\n (reversed ?\n -labelCenter - halfWidth :\n xAxis.width - labelCenter + halfWidth);\n dataLabel.startYPos = inverted ?\n (reversed ?\n this.yAxis.height - labelCenter + halfWidth :\n -labelCenter - halfWidth) : alignOptions.y;\n // We need to handle visibility in case of sorting point outside plot\n // area\n if (!isInside) {\n dataLabel\n .attr({ opacity: 1 })\n .animate({ opacity: 0 }, void 0, dataLabel.hide);\n }\n else if (dataLabel.visibility === 'hidden') {\n dataLabel.show();\n dataLabel\n .attr({ opacity: 0 })\n .animate({ opacity: 1 });\n }\n // Save start position on first render, but do not change position\n if (!chart.hasRendered) {\n return;\n }\n // Set start position\n if (isNew) {\n dataLabel.attr({ x: dataLabel.startXPos, y: dataLabel.startYPos });\n }\n dataLabel.placed = true;\n }\n})(DataLabel || (DataLabel = {}));\n/* *\n *\n * Default Export\n *\n * */\nexport default DataLabel;\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Callback JavaScript function to format the data label as a string. Note that\n * if a `format` is defined, the format takes precedence and the formatter is\n * ignored.\n *\n * @callback Highcharts.DataLabelsFormatterCallbackFunction\n *\n * @param {Highcharts.PointLabelObject} this\n * Data label context to format\n *\n * @param {Highcharts.DataLabelsOptions} options\n * [API options](/highcharts/plotOptions.series.dataLabels) of the data label\n *\n * @return {number|string|null|undefined}\n * Formatted data label text\n */\n/**\n * Values for handling data labels that flow outside the plot area.\n *\n * @typedef {\"allow\"|\"justify\"} Highcharts.DataLabelsOverflowValue\n */\n''; // keeps doclets above in JS file\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport DataLabel from '../../Core/Series/DataLabel.js';\nimport SeriesRegistry from '../../Core/Series/SeriesRegistry.js';\nvar Series = SeriesRegistry.series;\nimport U from '../../Core/Utilities.js';\nvar merge = U.merge, pick = U.pick;\n/* *\n *\n * Composition\n *\n * */\nvar ColumnDataLabel;\n(function (ColumnDataLabel) {\n /* *\n *\n * Constants\n *\n * */\n var composedClasses = [];\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /**\n * Override the basic data label alignment by adjusting for the position of\n * the column.\n * @private\n */\n function alignDataLabel(point, dataLabel, options, alignTo, isNew) {\n var inverted = this.chart.inverted, series = point.series, xLen = (series.xAxis ? series.xAxis.len : this.chart.plotSizeX) || 0, yLen = (series.yAxis ? series.yAxis.len : this.chart.plotSizeY) || 0, \n // data label box for alignment\n dlBox = point.dlBox || point.shapeArgs, below = pick(point.below, // range series\n point.plotY >\n pick(this.translatedThreshold, yLen)), \n // draw it inside the box?\n inside = pick(options.inside, !!this.options.stacking), overshoot;\n // Align to the column itself, or the top of it\n if (dlBox) { // Area range uses this method but not alignTo\n alignTo = merge(dlBox);\n if (alignTo.y < 0) {\n alignTo.height += alignTo.y;\n alignTo.y = 0;\n }\n // If parts of the box overshoots outside the plot area, modify the\n // box to center the label inside\n overshoot = alignTo.y + alignTo.height - yLen;\n if (overshoot > 0 && overshoot < alignTo.height) {\n alignTo.height -= overshoot;\n }\n if (inverted) {\n alignTo = {\n x: yLen - alignTo.y - alignTo.height,\n y: xLen - alignTo.x - alignTo.width,\n width: alignTo.height,\n height: alignTo.width\n };\n }\n // Compute the alignment box\n if (!inside) {\n if (inverted) {\n alignTo.x += below ? 0 : alignTo.width;\n alignTo.width = 0;\n }\n else {\n alignTo.y += below ? alignTo.height : 0;\n alignTo.height = 0;\n }\n }\n }\n // When alignment is undefined (typically columns and bars), display the\n // individual point below or above the point depending on the threshold\n options.align = pick(options.align, !inverted || inside ? 'center' : below ? 'right' : 'left');\n options.verticalAlign = pick(options.verticalAlign, inverted || inside ? 'middle' : below ? 'top' : 'bottom');\n // Call the parent method\n Series.prototype.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew);\n // If label was justified and we have contrast, set it:\n if (options.inside && point.contrastColor) {\n dataLabel.css({\n color: point.contrastColor\n });\n }\n }\n /** @private */\n function compose(ColumnSeriesClass) {\n DataLabel.compose(Series);\n if (composedClasses.indexOf(ColumnSeriesClass) === -1) {\n composedClasses.push(ColumnSeriesClass);\n ColumnSeriesClass.prototype.alignDataLabel = alignDataLabel;\n }\n }\n ColumnDataLabel.compose = compose;\n})(ColumnDataLabel || (ColumnDataLabel = {}));\n/* *\n *\n * Default Export\n *\n * */\nexport default ColumnDataLabel;\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport ColumnSeries from '../Column/ColumnSeries.js';\nimport SeriesRegistry from '../../Core/Series/SeriesRegistry.js';\nimport U from '../../Core/Utilities.js';\nvar extend = U.extend, merge = U.merge;\n/* *\n *\n * Class\n *\n * */\n/**\n * Bar series type.\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.bar\n *\n * @augments Highcharts.Series\n */\nvar BarSeries = /** @class */ (function (_super) {\n __extends(BarSeries, _super);\n function BarSeries() {\n /* *\n *\n * Static Properties\n *\n * */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /* *\n *\n * Properties\n *\n * */\n _this.data = void 0;\n _this.options = void 0;\n _this.points = void 0;\n return _this;\n }\n /**\n * A bar series is a special type of column series where the columns are\n * horizontal.\n *\n * @sample highcharts/demo/bar-basic/\n * Bar chart\n *\n * @extends plotOptions.column\n * @product highcharts\n * @optionparent plotOptions.bar\n */\n BarSeries.defaultOptions = merge(ColumnSeries.defaultOptions, {\n // nothing here yet\n });\n return BarSeries;\n}(ColumnSeries));\nextend(BarSeries.prototype, {\n inverted: true\n});\nSeriesRegistry.registerSeriesType('bar', BarSeries);\n/* *\n *\n * Default Export\n *\n * */\nexport default BarSeries;\n/* *\n *\n * API Options\n *\n * */\n/**\n * A `bar` series. If the [type](#series.bar.type) option is not specified,\n * it is inherited from [chart.type](#chart.type).\n *\n * @extends series,plotOptions.bar\n * @excluding connectNulls, dashStyle, dataParser, dataURL, gapSize, gapUnit,\n * linecap, lineWidth, marker, connectEnds, step\n * @product highcharts\n * @apioption series.bar\n */\n/**\n * An array of data points for the series. For the `bar` series type,\n * points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n * interpreted as `y` options. The `x` values will be automatically\n * calculated, either starting at 0 and incremented by 1, or from\n * `pointStart` and `pointInterval` given in the series options. If the axis\n * has categories, these will be used. Example:\n * ```js\n * data: [0, 5, 3, 5]\n * ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n * `x,y`. If the first value is a string, it is applied as the name of the\n * point, and the `x` value is inferred.\n * ```js\n * data: [\n * [0, 5],\n * [1, 10],\n * [2, 3]\n * ]\n * ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of\n * data points exceeds the series'\n * [turboThreshold](#series.bar.turboThreshold), this option is not\n * available.\n * ```js\n * data: [{\n * x: 1,\n * y: 1,\n * name: \"Point2\",\n * color: \"#00FF00\"\n * }, {\n * x: 1,\n * y: 10,\n * name: \"Point1\",\n * color: \"#FF00FF\"\n * }]\n * ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n * Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n * Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n * Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n * Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Config objects\n *\n * @type {Array|null|*>}\n * @extends series.column.data\n * @product highcharts\n * @apioption series.bar.data\n */\n/**\n * @excluding halo,lineWidth,lineWidthPlus,marker\n * @product highcharts highstock\n * @apioption series.bar.states.hover\n */\n/**\n * @excluding halo,lineWidth,lineWidthPlus,marker\n * @product highcharts highstock\n * @apioption series.bar.states.select\n */\n''; // gets doclets above into transpilat\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\n/* *\n *\n * API Options\n *\n * */\n/**\n * A scatter plot uses cartesian coordinates to display values for two\n * variables for a set of data.\n *\n * @sample {highcharts} highcharts/demo/scatter/\n * Scatter plot\n *\n * @extends plotOptions.line\n * @excluding cropThreshold, pointPlacement, shadow, useOhlcData\n * @product highcharts highstock\n * @optionparent plotOptions.scatter\n */\nvar ScatterSeriesDefaults = {\n /**\n * The width of the line connecting the data points.\n *\n * @sample {highcharts} highcharts/plotoptions/scatter-linewidth-none/\n * 0 by default\n * @sample {highcharts} highcharts/plotoptions/scatter-linewidth-1/\n * 1px\n *\n * @product highcharts highstock\n */\n lineWidth: 0,\n findNearestPointBy: 'xy',\n /**\n * Apply a jitter effect for the rendered markers. When plotting\n * discrete values, a little random noise may help telling the points\n * apart. The jitter setting applies a random displacement of up to `n`\n * axis units in either direction. So for example on a horizontal X\n * axis, setting the `jitter.x` to 0.24 will render the point in a\n * random position between 0.24 units to the left and 0.24 units to the\n * right of the true axis position. On a category axis, setting it to\n * 0.5 will fill up the bin and make the data appear continuous.\n *\n * When rendered on top of a box plot or a column series, a jitter value\n * of 0.24 will correspond to the underlying series' default\n * [groupPadding](\n * https://api.highcharts.com/highcharts/plotOptions.column.groupPadding)\n * and [pointPadding](\n * https://api.highcharts.com/highcharts/plotOptions.column.pointPadding)\n * settings.\n *\n * @sample {highcharts} highcharts/demo/scatter-jitter\n * Jitter on a scatter plot\n *\n * @sample {highcharts} highcharts/series-scatter/jitter-boxplot\n * Jittered scatter plot on top of a box plot\n *\n * @product highcharts highstock\n * @since 7.0.2\n */\n jitter: {\n /**\n * The maximal X offset for the random jitter effect.\n */\n x: 0,\n /**\n * The maximal Y offset for the random jitter effect.\n */\n y: 0\n },\n marker: {\n enabled: true // Overrides auto-enabling in line series (#3647)\n },\n /**\n * Sticky tracking of mouse events. When true, the `mouseOut` event\n * on a series isn't triggered until the mouse moves over another\n * series, or out of the plot area. When false, the `mouseOut` event on\n * a series is triggered when the mouse leaves the area around the\n * series' graph or markers. This also implies the tooltip. When\n * `stickyTracking` is false and `tooltip.shared` is false, the tooltip\n * will be hidden when moving the mouse between series.\n *\n * @type {boolean}\n * @default false\n * @product highcharts highstock highmaps\n * @apioption plotOptions.scatter.stickyTracking\n */\n /**\n * A configuration object for the tooltip rendering of each single\n * series. Properties are inherited from [tooltip](#tooltip).\n * Overridable properties are `headerFormat`, `pointFormat`,\n * `yDecimals`, `xDateFormat`, `yPrefix` and `ySuffix`. Unlike other\n * series, in a scatter plot the series.name by default shows in the\n * headerFormat and point.x and point.y in the pointFormat.\n *\n * @product highcharts highstock highmaps\n */\n tooltip: {\n /**\n * @product highcharts highstock\n */\n headerFormat: '\\u25CF ' +\n ' {series.name}
',\n pointFormat: 'x: {point.x}
y: {point.y}
'\n }\n};\n/**\n * A `scatter` series. If the [type](#series.scatter.type) option is\n * not specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends series,plotOptions.scatter\n * @excluding cropThreshold, dataParser, dataURL, useOhlcData\n * @product highcharts highstock\n * @apioption series.scatter\n */\n/**\n * An array of data points for the series. For the `scatter` series\n * type, points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n * interpreted as `y` options. The `x` values will be automatically\n * calculated, either starting at 0 and incremented by 1, or from\n * `pointStart` and `pointInterval` given in the series options. If the axis\n * has categories, these will be used. Example:\n * ```js\n * data: [0, 5, 3, 5]\n * ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n * `x,y`. If the first value is a string, it is applied as the name of the\n * point, and the `x` value is inferred.\n * ```js\n * data: [\n * [0, 0],\n * [1, 8],\n * [2, 9]\n * ]\n * ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of\n * data points exceeds the series'\n * [turboThreshold](#series.scatter.turboThreshold), this option is not\n * available.\n * ```js\n * data: [{\n * x: 1,\n * y: 2,\n * name: \"Point2\",\n * color: \"#00FF00\"\n * }, {\n * x: 1,\n * y: 4,\n * name: \"Point1\",\n * color: \"#FF00FF\"\n * }]\n * ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n * Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n * Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n * Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n * Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Config objects\n *\n * @type {Array|null|*>}\n * @extends series.line.data\n * @product highcharts highstock\n * @apioption series.scatter.data\n */\n''; // keeps doclets above in JS file\n/* *\n *\n * Default Export\n *\n * */\nexport default ScatterSeriesDefaults;\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport ScatterSeriesDefaults from './ScatterSeriesDefaults.js';\nimport SeriesRegistry from '../../Core/Series/SeriesRegistry.js';\nvar _a = SeriesRegistry.seriesTypes, ColumnSeries = _a.column, LineSeries = _a.line;\nimport U from '../../Core/Utilities.js';\nvar addEvent = U.addEvent, extend = U.extend, merge = U.merge;\n/* *\n *\n * Class\n *\n * */\n/**\n * Scatter series type.\n *\n * @private\n */\nvar ScatterSeries = /** @class */ (function (_super) {\n __extends(ScatterSeries, _super);\n function ScatterSeries() {\n /* *\n *\n * Static Properties\n *\n * */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /* *\n *\n * Properties\n *\n * */\n _this.data = void 0;\n _this.options = void 0;\n _this.points = void 0;\n return _this;\n /* eslint-enable valid-jsdoc */\n }\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /**\n * Optionally add the jitter effect.\n * @private\n */\n ScatterSeries.prototype.applyJitter = function () {\n var series = this, jitter = this.options.jitter, len = this.points.length;\n /**\n * Return a repeatable, pseudo-random number based on an integer\n * seed.\n * @private\n */\n function unrandom(seed) {\n var rand = Math.sin(seed) * 10000;\n return rand - Math.floor(rand);\n }\n if (jitter) {\n this.points.forEach(function (point, i) {\n ['x', 'y'].forEach(function (dim, j) {\n var axis, plotProp = 'plot' + dim.toUpperCase(), min, max, translatedJitter;\n if (jitter[dim] && !point.isNull) {\n axis = series[dim + 'Axis'];\n translatedJitter =\n jitter[dim] * axis.transA;\n if (axis && !axis.isLog) {\n // Identify the outer bounds of the jitter range\n min = Math.max(0, point[plotProp] - translatedJitter);\n max = Math.min(axis.len, point[plotProp] + translatedJitter);\n // Find a random position within this range\n point[plotProp] = min +\n (max - min) * unrandom(i + j * len);\n // Update clientX for the tooltip k-d-tree\n if (dim === 'x') {\n point.clientX = point.plotX;\n }\n }\n }\n });\n });\n }\n };\n /**\n * @private\n */\n ScatterSeries.prototype.drawGraph = function () {\n if (this.options.lineWidth) {\n _super.prototype.drawGraph.call(this);\n }\n else if (this.graph) {\n this.graph = this.graph.destroy();\n }\n };\n ScatterSeries.defaultOptions = merge(LineSeries.defaultOptions, ScatterSeriesDefaults);\n return ScatterSeries;\n}(LineSeries));\nextend(ScatterSeries.prototype, {\n drawTracker: ColumnSeries.prototype.drawTracker,\n sorted: false,\n requireSorting: false,\n noSharedTooltip: true,\n trackerGroups: ['group', 'markerGroup', 'dataLabelsGroup'],\n takeOrdinalPosition: false // #2342\n});\n/* *\n *\n * Events\n *\n * */\n/* eslint-disable no-invalid-this */\naddEvent(ScatterSeries, 'afterTranslate', function () {\n this.applyJitter();\n});\nSeriesRegistry.registerSeriesType('scatter', ScatterSeries);\n/* *\n *\n * Default Export\n *\n * */\nexport default ScatterSeries;\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport H from '../Core/Globals.js';\nvar deg2rad = H.deg2rad;\nimport Series from '../Core/Series/Series.js';\nimport U from '../Core/Utilities.js';\nvar fireEvent = U.fireEvent, isNumber = U.isNumber, pick = U.pick, relativeLength = U.relativeLength;\n/**\n * @private\n */\nvar CenteredUtilities;\n(function (CenteredUtilities) {\n /* *\n *\n * Declarations\n *\n * */\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /**\n * Get the center of the pie based on the size and center options relative\n * to the plot area. Borrowed by the polar and gauge series types.\n *\n * @private\n * @function Highcharts.CenteredSeriesMixin.getCenter\n */\n function getCenter() {\n var options = this.options, 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 var 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 var 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 Series)) {\n positions[3] = 0;\n }\n for (i = 0; i < 4; ++i) {\n value = positions[i];\n handleSlicingRoom = i < 2 || (i === 2 && /%$/.test(value));\n // i == 0: centerX, relative to width\n // i == 1: centerY, relative to height\n // i == 2: size, relative to smallestSize\n // i == 3: innerSize, relative to size\n positions[i] = relativeLength(value, [plotWidth, plotHeight, smallestSize, positions[2]][i]) + (handleSlicingRoom ? slicingRoom : 0);\n }\n // innerSize 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: positions });\n return positions;\n }\n CenteredUtilities.getCenter = getCenter;\n /**\n * getStartAndEndRadians - Calculates start and end angles in radians.\n * Used in series types such as pie and sunburst.\n *\n * @private\n * @function Highcharts.CenteredSeriesMixin.getStartAndEndRadians\n *\n * @param {number} [start]\n * Start angle in degrees.\n *\n * @param {number} [end]\n * Start angle in degrees.\n *\n * @return {Highcharts.RadianAngles}\n * Returns an object containing start and end angles as radians.\n */\n function getStartAndEndRadians(start, end) {\n var startAngle = 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 * */\nexport default 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 *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport A from '../../Core/Animation/AnimationUtilities.js';\nvar setAnimation = A.setAnimation;\nimport Point from '../../Core/Series/Point.js';\nimport U from '../../Core/Utilities.js';\nvar addEvent = U.addEvent, defined = U.defined, extend = U.extend, isNumber = U.isNumber, pick = U.pick, relativeLength = U.relativeLength;\n/* *\n *\n * Class\n *\n * */\nvar PiePoint = /** @class */ (function (_super) {\n __extends(PiePoint, _super);\n function PiePoint() {\n /* *\n *\n * Properties\n *\n * */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.labelDistance = void 0;\n _this.options = void 0;\n _this.series = void 0;\n return _this;\n }\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /**\n * Extendable method for getting the path of the connector between the\n * data label and the pie slice.\n * @private\n */\n PiePoint.prototype.getConnectorPath = function () {\n var labelPosition = this.labelPosition, options = this.series.options.dataLabels, predefinedShapes = this.connectorShapes;\n var connectorShape = options.connectorShape;\n // find out whether to use the predefined shape\n if (predefinedShapes[connectorShape]) {\n connectorShape = predefinedShapes[connectorShape];\n }\n return connectorShape.call(this, {\n // pass simplified label position object for user's convenience\n x: labelPosition.final.x,\n y: labelPosition.final.y,\n alignment: labelPosition.alignment\n }, labelPosition.connectorPosition, options);\n };\n /**\n * @private\n */\n PiePoint.prototype.getTranslate = function () {\n return this.sliced ? this.slicedTranslation : {\n translateX: 0,\n translateY: 0\n };\n };\n /**\n * @private\n */\n PiePoint.prototype.haloPath = function (size) {\n var shapeArgs = this.shapeArgs;\n return this.sliced || !this.visible ?\n [] :\n this.series.chart.renderer.symbols.arc(shapeArgs.x, shapeArgs.y, shapeArgs.r + size, shapeArgs.r + size, {\n // Substract 1px to ensure the background is not bleeding\n // through between the halo and the slice (#7495).\n innerR: shapeArgs.r - 1,\n start: shapeArgs.start,\n end: shapeArgs.end\n });\n };\n /**\n * Initialize the pie slice.\n * @private\n */\n PiePoint.prototype.init = function () {\n var _this = this;\n _super.prototype.init.apply(this, arguments);\n this.name = pick(this.name, 'Slice');\n // add event listener for select\n var toggleSlice = function (e) {\n _this.slice(e.type === 'select');\n };\n addEvent(this, 'select', toggleSlice);\n addEvent(this, 'unselect', toggleSlice);\n return this;\n };\n /**\n * Negative points are not valid (#1530, #3623, #5322)\n * @private\n */\n PiePoint.prototype.isValid = function () {\n return isNumber(this.y) && this.y >= 0;\n };\n /**\n * Toggle the visibility of a pie slice or other data point. Note that this\n * method is available only for some series, like pie, treemap and sunburst.\n *\n * @function Highcharts.Point#setVisible\n *\n * @param {boolean} [vis]\n * True to show the pie slice or other data point, false to hide. If\n * undefined, the visibility is toggled.\n *\n * @param {boolean} [redraw] Whether to redraw the chart after the point is\n * altered. If doing more operations on the chart, it is a good idea to set\n * redraw to false and call {@link Chart#redraw|chart.redraw()} after.\n *\n */\n PiePoint.prototype.setVisible = function (vis, redraw) {\n var _this = this;\n var series = this.series, chart = series.chart, ignoreHiddenPoint = series.options.ignoreHiddenPoint;\n redraw = pick(redraw, ignoreHiddenPoint);\n if (vis !== this.visible) {\n // If called without an argument, toggle visibility\n this.visible = this.options.visible = vis =\n typeof vis === 'undefined' ? !this.visible : vis;\n // update userOptions.data\n series.options.data[series.data.indexOf(this)] =\n this.options;\n // Show and hide associated elements. This is performed\n // regardless of redraw or not, because chart.redraw only\n // handles full series.\n ['graphic', 'dataLabel', 'connector', 'shadowGroup'].forEach(function (key) {\n if (_this[key]) {\n _this[key][vis ? 'show' : 'hide'](vis);\n }\n });\n if (this.legendItem) {\n chart.legend.colorizeItem(this, vis);\n }\n // #4170, hide halo after hiding point\n if (!vis && this.state === 'hover') {\n this.setState('');\n }\n // Handle ignore hidden slices\n if (ignoreHiddenPoint) {\n series.isDirty = true;\n }\n if (redraw) {\n chart.redraw();\n }\n }\n };\n /**\n * Set or toggle whether the slice is cut out from the pie.\n * @private\n *\n * @param {boolean} sliced\n * When undefined, the slice state is toggled.\n *\n * @param {boolean} [redraw]\n * Whether to redraw the chart. True by default.\n *\n * @param {boolean|Partial} [animation]\n * Animation options.\n */\n PiePoint.prototype.slice = function (sliced, redraw, animation) {\n var series = this.series, chart = series.chart;\n setAnimation(animation, chart);\n // redraw is true by default\n redraw = pick(redraw, true);\n /**\n * Pie series only. Whether to display a slice offset from the\n * center.\n * @name Highcharts.Point#sliced\n * @type {boolean|undefined}\n */\n // if called without an argument, toggle\n this.sliced = this.options.sliced = sliced =\n defined(sliced) ? sliced : !this.sliced;\n // update userOptions.data\n series.options.data[series.data.indexOf(this)] =\n this.options;\n if (this.graphic) {\n this.graphic.animate(this.getTranslate());\n }\n if (this.shadowGroup) {\n this.shadowGroup.animate(this.getTranslate());\n }\n };\n return PiePoint;\n}(Point));\nextend(PiePoint.prototype, {\n connectorShapes: {\n // only one available before v7.0.0\n fixedOffset: function (labelPosition, connectorPosition, options) {\n var breakAt = connectorPosition.breakAt, touchingSliceAt = connectorPosition.touchingSliceAt, lineSegment = options.softConnector ? [\n 'C',\n // 1st control point (of the curve)\n labelPosition.x +\n // 5 gives the connector a little horizontal bend\n (labelPosition.alignment === 'left' ? -5 : 5),\n labelPosition.y,\n 2 * breakAt.x - touchingSliceAt.x,\n 2 * breakAt.y - touchingSliceAt.y,\n breakAt.x,\n breakAt.y //\n ] : [\n 'L',\n breakAt.x,\n breakAt.y\n ];\n // assemble the path\n return ([\n ['M', labelPosition.x, labelPosition.y],\n lineSegment,\n ['L', touchingSliceAt.x, touchingSliceAt.y]\n ]);\n },\n straight: function (labelPosition, connectorPosition) {\n var touchingSliceAt = connectorPosition.touchingSliceAt;\n // direct line to the slice\n return [\n ['M', labelPosition.x, labelPosition.y],\n ['L', touchingSliceAt.x, touchingSliceAt.y]\n ];\n },\n crookedLine: function (labelPosition, connectorPosition, options) {\n var touchingSliceAt = connectorPosition.touchingSliceAt, series = this.series, pieCenterX = series.center[0], plotWidth = series.chart.plotWidth, plotLeft = series.chart.plotLeft, alignment = labelPosition.alignment, radius = this.shapeArgs.r, crookDistance = relativeLength(// % to fraction\n options.crookDistance, 1), crookX = alignment === 'left' ?\n pieCenterX + radius + (plotWidth + plotLeft -\n pieCenterX - radius) * (1 - crookDistance) :\n plotLeft + (pieCenterX - radius) * crookDistance, segmentWithCrook = [\n 'L',\n crookX,\n labelPosition.y\n ];\n var useCrook = true;\n // crookedLine formula doesn't make sense if the path overlaps\n // the label - use straight line instead in that case\n if (alignment === 'left' ?\n (crookX > labelPosition.x || crookX < touchingSliceAt.x) :\n (crookX < labelPosition.x || crookX > touchingSliceAt.x)) {\n useCrook = false;\n }\n // assemble the path\n var path = [['M', labelPosition.x, labelPosition.y]];\n if (useCrook) {\n path.push(segmentWithCrook);\n }\n path.push(['L', touchingSliceAt.x, touchingSliceAt.y]);\n return path;\n }\n }\n});\n/* *\n *\n * Default Export\n *\n * */\nexport default PiePoint;\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\n/* *\n *\n * API Options\n *\n * */\n/**\n * A pie chart is a circular graphic which is divided into slices to\n * illustrate numerical proportion.\n *\n * @sample highcharts/demo/pie-basic/\n * Pie chart\n *\n * @extends plotOptions.line\n * @excluding animationLimit, boostThreshold, connectEnds, connectNulls,\n * cropThreshold, dashStyle, dataSorting, dragDrop,\n * findNearestPointBy, getExtremesFromAll, label, lineWidth,\n * linkedTo, marker, negativeColor, pointInterval,\n * pointIntervalUnit, pointPlacement, pointStart,\n * softThreshold, stacking, step, threshold, turboThreshold,\n * zoneAxis, zones, dataSorting, boostBlending\n * @product highcharts highmaps\n * @optionparent plotOptions.pie\n *\n * @private\n */\nvar PieSeriesDefaults = {\n /**\n * @excluding legendItemClick\n * @apioption plotOptions.pie.events\n */\n /**\n * Fires when the checkbox next to the point name in the legend is\n * clicked. One parameter, event, is passed to the function. The state\n * of the checkbox is found by event.checked. The checked item is found\n * by event.item. Return false to prevent the default action which is to\n * toggle the select state of the series.\n *\n * @sample {highcharts} highcharts/plotoptions/series-events-checkboxclick/\n * Alert checkbox status\n *\n * @type {Function}\n * @since 1.2.0\n * @product highcharts highmaps\n * @context Highcharts.Point\n * @apioption plotOptions.pie.events.checkboxClick\n */\n /**\n * Fires when the legend item belonging to the pie point (slice) is\n * clicked. The `this` keyword refers to the point itself. One\n * parameter, `event`, is passed to the function, containing common\n * event information. The default action is to toggle the visibility of\n * the point. This can be prevented by calling `event.preventDefault()`.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-point-events-legenditemclick/\n * Confirm toggle visibility\n *\n * @type {Highcharts.PointLegendItemClickCallbackFunction}\n * @since 1.2.0\n * @product highcharts highmaps\n * @apioption plotOptions.pie.point.events.legendItemClick\n */\n /**\n * The center of the pie chart relative to the plot area. Can be\n * percentages or pixel values. The default behaviour (as of 3.0) is to\n * center the pie so that all slices and data labels are within the plot\n * area. As a consequence, the pie may actually jump around in a chart\n * with dynamic values, as the data labels move. In that case, the\n * center should be explicitly set, for example to `[\"50%\", \"50%\"]`.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-center/\n * Centered at 100, 100\n *\n * @type {Array<(number|string|null),(number|string|null)>}\n * @default [null, null]\n * @product highcharts highmaps\n *\n * @private\n */\n center: [null, null],\n /**\n * The color of the pie series. A pie series is represented as an empty\n * circle if the total sum of its values is 0. Use this property to\n * define the color of its border.\n *\n * In styled mode, the color can be defined by the\n * [colorIndex](#plotOptions.series.colorIndex) option. Also, the series\n * color can be set with the `.highcharts-series`,\n * `.highcharts-color-{n}`, `.highcharts-{type}-series` or\n * `.highcharts-series-{n}` class, or individual classes given by the\n * `className` option.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-emptyseries/\n * Empty pie series\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @default #cccccc\n * @apioption plotOptions.pie.color\n */\n /**\n * @product highcharts\n *\n * @private\n */\n clip: false,\n /**\n * @ignore-option\n *\n * @private\n */\n colorByPoint: true,\n /**\n * A series specific or series type specific color set to use instead\n * of the global [colors](#colors).\n *\n * @sample {highcharts} highcharts/demo/pie-monochrome/\n * Set default colors for all pies\n *\n * @type {Array}\n * @since 3.0\n * @product highcharts highmaps\n * @apioption plotOptions.pie.colors\n */\n /**\n * @declare Highcharts.SeriesPieDataLabelsOptionsObject\n * @extends plotOptions.series.dataLabels\n * @excluding align, allowOverlap, inside, staggerLines, step\n * @private\n */\n dataLabels: {\n /**\n * Alignment method for data labels. Possible values are:\n *\n * - `plotEdges`: Each label touches the nearest vertical edge of\n * the plot area.\n *\n * - `connectors`: Connectors have the same x position and the\n * widest label of each half (left & right) touches the nearest\n * vertical edge of the plot area.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-alignto-connectors/\n * alignTo: connectors\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-alignto-plotedges/\n * alignTo: plotEdges\n *\n * @type {string}\n * @since 7.0.0\n * @product highcharts highmaps\n * @apioption plotOptions.pie.dataLabels.alignTo\n */\n allowOverlap: true,\n /**\n * The color of the line connecting the data label to the pie slice.\n * The default color is the same as the point's color.\n *\n * In styled mode, the connector stroke is given in the\n * `.highcharts-data-label-connector` class.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-connectorcolor/\n * Blue connectors\n * @sample {highcharts} highcharts/css/pie-point/\n * Styled connectors\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @since 2.1\n * @product highcharts highmaps\n * @apioption plotOptions.pie.dataLabels.connectorColor\n */\n /**\n * The distance from the data label to the connector. Note that\n * data labels also have a default `padding`, so in order for the\n * connector to touch the text, the `padding` must also be 0.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-connectorpadding/\n * No padding\n *\n * @since 2.1\n * @product highcharts highmaps\n */\n connectorPadding: 5,\n /**\n * Specifies the method that is used to generate the connector path.\n * Highcharts provides 3 built-in connector shapes: `'fixedOffset'`\n * (default), `'straight'` and `'crookedLine'`. Using\n * `'crookedLine'` has the most sense (in most of the cases) when\n * `'alignTo'` is set.\n *\n * Users can provide their own method by passing a function instead\n * of a String. 3 arguments are passed to the callback:\n *\n * - Object that holds the information about the coordinates of the\n * label (`x` & `y` properties) and how the label is located in\n * relation to the pie (`alignment` property). `alignment` can by\n * one of the following:\n * `'left'` (pie on the left side of the data label),\n * `'right'` (pie on the right side of the data label) or\n * `'center'` (data label overlaps the pie).\n *\n * - Object that holds the information about the position of the\n * connector. Its `touchingSliceAt` porperty tells the position\n * of the place where the connector touches the slice.\n *\n * - Data label options\n *\n * The function has to return an SVG path definition in array form\n * (see the example).\n *\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-connectorshape-string/\n * connectorShape is a String\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-connectorshape-function/\n * connectorShape is a function\n *\n * @type {string|Function}\n * @since 7.0.0\n * @product highcharts highmaps\n */\n connectorShape: 'fixedOffset',\n /**\n * The width of the line connecting the data label to the pie slice.\n *\n * In styled mode, the connector stroke width is given in the\n * `.highcharts-data-label-connector` class.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-connectorwidth-disabled/\n * Disable the connector\n * @sample {highcharts} highcharts/css/pie-point/\n * Styled connectors\n *\n * @type {number}\n * @default 1\n * @since 2.1\n * @product highcharts highmaps\n * @apioption plotOptions.pie.dataLabels.connectorWidth\n */\n /**\n * Works only if `connectorShape` is `'crookedLine'`. It defines how\n * far from the vertical plot edge the coonnector path should be\n * crooked.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-crookdistance/\n * crookDistance set to 90%\n *\n * @since 7.0.0\n * @product highcharts highmaps\n */\n crookDistance: '70%',\n /**\n * The distance of the data label from the pie's edge. Negative\n * numbers put the data label on top of the pie slices. Can also be\n * defined as a percentage of pie's radius. Connectors are only\n * shown for data labels outside the pie.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-distance/\n * Data labels on top of the pie\n *\n * @type {number|string}\n * @since 2.1\n * @product highcharts highmaps\n */\n distance: 30,\n enabled: true,\n /**\n * A\n * [format string](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting)\n * for the data label. Available variables are the same as for\n * `formatter`.\n *\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-format/\n * Add a unit\n *\n * @type {string}\n * @default undefined\n * @since 3.0\n * @apioption plotOptions.pie.dataLabels.format\n */\n // eslint-disable-next-line valid-jsdoc\n /**\n * Callback JavaScript function to format the data label. Note that\n * if a `format` is defined, the format takes precedence and the\n * formatter is ignored.\n *\n * @type {Highcharts.DataLabelsFormatterCallbackFunction}\n * @default function () { return this.point.isNull ? void 0 : this.point.name; }\n */\n formatter: function () {\n return this.point.isNull ? void 0 : this.point.name;\n },\n /**\n * Whether to render the connector as a soft arc or a line with\n * sharp break. Works only if `connectorShape` equals to\n * `fixedOffset`.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-softconnector-true/\n * Soft\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-softconnector-false/\n * Non soft\n *\n * @since 2.1.7\n * @product highcharts highmaps\n */\n softConnector: true,\n /**\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-overflow\n * Long labels truncated with an ellipsis\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-overflow-wrap\n * Long labels are wrapped\n *\n * @type {Highcharts.CSSObject}\n * @apioption plotOptions.pie.dataLabels.style\n */\n x: 0\n },\n /**\n * If the total sum of the pie's values is 0, the series is represented\n * as an empty circle . The `fillColor` option defines the color of that\n * circle. Use [pie.borderWidth](#plotOptions.pie.borderWidth) to set\n * the border thickness.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-emptyseries/\n * Empty pie series\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @private\n */\n fillColor: void 0,\n /**\n * The end angle of the pie in degrees where 0 is top and 90 is right.\n * Defaults to `startAngle` plus 360.\n *\n * @sample {highcharts} highcharts/demo/pie-semi-circle/\n * Semi-circle donut\n *\n * @type {number}\n * @since 1.3.6\n * @product highcharts highmaps\n * @apioption plotOptions.pie.endAngle\n */\n /**\n * Thickness describing the ring size for a donut type chart,\n * overriding [innerSize](#plotOptions.pie.innerSize).\n *\n * @type {number}\n * @default undefined\n * @product highcharts\n * @since 10.1.0\n * @apioption plotOptions.pie.thickness\n * @private\n */\n /**\n * Equivalent to [chart.ignoreHiddenSeries](#chart.ignoreHiddenSeries),\n * this option tells whether the series shall be redrawn as if the\n * hidden point were `null`.\n *\n * The default value changed from `false` to `true` with Highcharts\n * 3.0.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-ignorehiddenpoint/\n * True, the hiddden point is ignored\n *\n * @since 2.3.0\n * @product highcharts highmaps\n *\n * @private\n */\n ignoreHiddenPoint: true,\n /**\n * @ignore-option\n *\n * @private\n */\n inactiveOtherPoints: true,\n /**\n * The size of the inner diameter for the pie. A size greater than 0\n * renders a donut chart. Can be a percentage or pixel value.\n * Percentages are relative to the pie size. Pixel values are given as\n * integers. Setting overridden by thickness.\n *\n *\n * Note: in Highcharts < 4.1.2, the percentage was relative to the plot\n * area, not the pie size.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-innersize-80px/\n * 80px inner size\n * @sample {highcharts} highcharts/plotoptions/pie-innersize-50percent/\n * 50% of the plot area\n * @sample {highcharts} highcharts/demo/3d-pie-donut/\n * 3D donut\n *\n * @type {number|string}\n * @default 0\n * @since 2.0\n * @product highcharts highmaps\n * @apioption plotOptions.pie.innerSize\n */\n /**\n * @ignore-option\n *\n * @private\n */\n legendType: 'point',\n /**\n * @ignore-option\n *\n * @private\n */\n marker: null,\n /**\n * The minimum size for a pie in response to auto margins. The pie will\n * try to shrink to make room for data labels in side the plot area,\n * but only to this size.\n *\n * @type {number|string}\n * @default 80\n * @since 3.0\n * @product highcharts highmaps\n * @apioption plotOptions.pie.minSize\n */\n /**\n * The diameter of the pie relative to the plot area. Can be a\n * percentage or pixel value. Pixel values are given as integers. The\n * default behaviour (as of 3.0) is to scale to the plot area and give\n * room for data labels within the plot area.\n * [slicedOffset](#plotOptions.pie.slicedOffset) is also included in the\n * default size calculation. As a consequence, the size of the pie may\n * vary when points are updated and data labels more around. In that\n * case it is best to set a fixed value, for example `\"75%\"`.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-size/\n * Smaller pie\n *\n * @type {number|string|null}\n * @product highcharts highmaps\n *\n * @private\n */\n size: null,\n /**\n * Whether to display this particular series or series type in the\n * legend. Since 2.1, pies are not shown in the legend by default.\n *\n * @sample {highcharts} highcharts/plotoptions/series-showinlegend/\n * One series in the legend, one hidden\n *\n * @product highcharts highmaps\n *\n * @private\n */\n showInLegend: false,\n /**\n * If a point is sliced, moved out from the center, how many pixels\n * should it be moved?.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-slicedoffset-20/\n * 20px offset\n *\n * @product highcharts highmaps\n *\n * @private\n */\n slicedOffset: 10,\n /**\n * The start angle of the pie slices in degrees where 0 is top and 90\n * right.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-startangle-90/\n * Start from right\n *\n * @type {number}\n * @default 0\n * @since 2.3.4\n * @product highcharts highmaps\n * @apioption plotOptions.pie.startAngle\n */\n /**\n * Sticky tracking of mouse events. When true, the `mouseOut` event\n * on a series isn't triggered until the mouse moves over another\n * series, or out of the plot area. When false, the `mouseOut` event on\n * a series is triggered when the mouse leaves the area around the\n * series' graph or markers. This also implies the tooltip. When\n * `stickyTracking` is false and `tooltip.shared` is false, the tooltip\n * will be hidden when moving the mouse between series.\n *\n * @product highcharts highmaps\n *\n * @private\n */\n stickyTracking: false,\n tooltip: {\n followPointer: true\n },\n /**\n * The color of the border surrounding each slice. When `null`, the\n * border takes the same color as the slice fill. This can be used\n * together with a `borderWidth` to fill drawing gaps created by\n * antialiazing artefacts in borderless pies.\n *\n * In styled mode, the border stroke is given in the `.highcharts-point`\n * class.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-bordercolor-black/\n * Black border\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @default #ffffff\n * @product highcharts highmaps\n *\n * @private\n */\n borderColor: \"#ffffff\" /* Palette.backgroundColor */,\n /**\n * The width of the border surrounding each slice.\n *\n * When setting the border width to 0, there may be small gaps between\n * the slices due to SVG antialiasing artefacts. To work around this,\n * keep the border width at 0.5 or 1, but set the `borderColor` to\n * `null` instead.\n *\n * In styled mode, the border stroke width is given in the\n * `.highcharts-point` class.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-borderwidth/\n * 3px border\n *\n * @product highcharts highmaps\n *\n * @private\n */\n borderWidth: 1,\n /**\n * @ignore-option\n * @private\n */\n lineWidth: void 0,\n states: {\n /**\n * @extends plotOptions.series.states.hover\n * @excluding marker, lineWidth, lineWidthPlus\n * @product highcharts highmaps\n */\n hover: {\n /**\n * How much to brighten the point on interaction. Requires the\n * main color to be defined in hex or rgb(a) format.\n *\n * In styled mode, the hover brightness is by default replaced\n * by a fill-opacity given in the `.highcharts-point-hover`\n * class.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-states-hover-brightness/\n * Brightened by 0.5\n *\n * @product highcharts highmaps\n */\n brightness: 0.1\n }\n }\n};\n/**\n * A `pie` series. If the [type](#series.pie.type) option is not specified,\n * it is inherited from [chart.type](#chart.type).\n *\n * @extends series,plotOptions.pie\n * @excluding cropThreshold, dataParser, dataURL, linkedTo, stack, xAxis, yAxis,\n * dataSorting, step, boostThreshold, boostBlending\n * @product highcharts highmaps\n * @apioption series.pie\n */\n/**\n * An array of data points for the series. For the `pie` series type,\n * points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n * interpreted as `y` options. Example:\n * ```js\n * data: [0, 5, 3, 5]\n * ```\n *\n * 2. An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of\n * data points exceeds the series'\n * [turboThreshold](#series.pie.turboThreshold),\n * this option is not available.\n * ```js\n * data: [{\n * y: 1,\n * name: \"Point2\",\n * color: \"#00FF00\"\n * }, {\n * y: 7,\n * name: \"Point1\",\n * color: \"#FF00FF\"\n * }]\n * ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n * Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n * Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n * Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n * Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Config objects\n *\n * @type {Array|null|*>}\n * @extends series.line.data\n * @excluding marker, x\n * @product highcharts highmaps\n * @apioption series.pie.data\n */\n/**\n * @type {Highcharts.SeriesPieDataLabelsOptionsObject}\n * @product highcharts highmaps\n * @apioption series.pie.data.dataLabels\n */\n/**\n * The sequential index of the data point in the legend.\n *\n * @type {number}\n * @product highcharts highmaps\n * @apioption series.pie.data.legendIndex\n */\n/**\n * Whether to display a slice offset from the center.\n *\n * @sample {highcharts} highcharts/point/sliced/\n * One sliced point\n *\n * @type {boolean}\n * @product highcharts highmaps\n * @apioption series.pie.data.sliced\n */\n/**\n * @extends plotOptions.pie.dataLabels\n * @excluding align, allowOverlap, inside, staggerLines, step\n * @product highcharts highmaps\n * @apioption series.pie.dataLabels\n */\n/**\n * @excluding legendItemClick\n * @product highcharts highmaps\n * @apioption series.pie.events\n */\n''; // placeholder for transpiled doclets above\n/* *\n *\n * Default Export\n *\n * */\nexport default PieSeriesDefaults;\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport CU from '../CenteredUtilities.js';\nvar getStartAndEndRadians = CU.getStartAndEndRadians;\nimport ColumnSeries from '../Column/ColumnSeries.js';\nimport H from '../../Core/Globals.js';\nvar noop = H.noop;\nimport LegendSymbol from '../../Core/Legend/LegendSymbol.js';\nimport PiePoint from './PiePoint.js';\nimport PieSeriesDefaults from './PieSeriesDefaults.js';\nimport Series from '../../Core/Series/Series.js';\nimport SeriesRegistry from '../../Core/Series/SeriesRegistry.js';\nimport Symbols from '../../Core/Renderer/SVG/Symbols.js';\nimport U from '../../Core/Utilities.js';\nvar clamp = U.clamp, extend = U.extend, fireEvent = U.fireEvent, merge = U.merge, pick = U.pick, relativeLength = U.relativeLength;\n/* *\n *\n * Class\n *\n * */\n/**\n * Pie series type.\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.pie\n *\n * @augments Highcharts.Series\n */\nvar PieSeries = /** @class */ (function (_super) {\n __extends(PieSeries, _super);\n function PieSeries() {\n /* *\n *\n * Static Properties\n *\n * */\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /* *\n *\n * Properties\n *\n * */\n _this.center = void 0;\n _this.data = void 0;\n _this.maxLabelDistance = void 0;\n _this.options = void 0;\n _this.points = void 0;\n return _this;\n /* eslint-enable valid-jsdoc */\n }\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /**\n * Animates the pies in.\n * @private\n */\n PieSeries.prototype.animate = function (init) {\n var series = this, points = series.points, startAngleRad = series.startAngleRad;\n if (!init) {\n points.forEach(function (point) {\n var graphic = point.graphic, args = point.shapeArgs;\n if (graphic && args) {\n // start values\n graphic.attr({\n // animate from inner radius (#779)\n r: pick(point.startR, (series.center && series.center[3] / 2)),\n start: startAngleRad,\n end: startAngleRad\n });\n // animate\n graphic.animate({\n r: args.r,\n start: args.start,\n end: args.end\n }, series.options.animation);\n }\n });\n }\n };\n /**\n * Called internally to draw auxiliary graph in pie-like series in\n * situtation when the default graph is not sufficient enough to present\n * the data well. Auxiliary graph is saved in the same object as\n * regular graph.\n * @private\n */\n PieSeries.prototype.drawEmpty = function () {\n var start = this.startAngleRad, end = this.endAngleRad, options = this.options;\n var centerX, centerY;\n // Draw auxiliary graph if there're no visible points.\n if (this.total === 0 && this.center) {\n centerX = this.center[0];\n centerY = this.center[1];\n if (!this.graph) {\n this.graph = this.chart.renderer\n .arc(centerX, centerY, this.center[1] / 2, 0, start, end)\n .addClass('highcharts-empty-series')\n .add(this.group);\n }\n this.graph.attr({\n d: Symbols.arc(centerX, centerY, this.center[2] / 2, 0, {\n start: start,\n end: end,\n innerR: this.center[3] / 2\n })\n });\n if (!this.chart.styledMode) {\n this.graph.attr({\n 'stroke-width': options.borderWidth,\n fill: options.fillColor || 'none',\n stroke: options.color || \"#cccccc\" /* Palette.neutralColor20 */\n });\n }\n }\n else if (this.graph) { // Destroy the graph object.\n this.graph = this.graph.destroy();\n }\n };\n /**\n * Slices in pie chart are initialized in DOM, but it's shapes and\n * animations are normally run in `drawPoints()`.\n * @private\n */\n PieSeries.prototype.drawPoints = function () {\n var renderer = this.chart.renderer;\n this.points.forEach(function (point) {\n // When updating a series between 2d and 3d or cartesian and\n // polar, the shape type changes.\n if (point.graphic && point.hasNewShapeType()) {\n point.graphic = point.graphic.destroy();\n }\n if (!point.graphic) {\n point.graphic = renderer[point.shapeType](point.shapeArgs)\n .add(point.series.group);\n point.delayedRendering = true;\n }\n });\n };\n /**\n * Extend the generatePoints method by adding total and percentage\n * properties to each point\n * @private\n */\n PieSeries.prototype.generatePoints = function () {\n _super.prototype.generatePoints.call(this);\n this.updateTotals();\n };\n /**\n * Utility for getting the x value from a given y, used for\n * anticollision logic in data labels. Added point for using specific\n * points' label distance.\n * @private\n */\n PieSeries.prototype.getX = function (y, left, point) {\n var center = this.center, \n // Variable pie has individual radius\n radius = this.radii ?\n this.radii[point.index] || 0 :\n center[2] / 2;\n var angle = Math.asin(clamp((y - center[1]) / (radius + point.labelDistance), -1, 1));\n var x = center[0] +\n (left ? -1 : 1) *\n (Math.cos(angle) * (radius + point.labelDistance)) +\n (point.labelDistance > 0 ?\n (left ? -1 : 1) * this.options.dataLabels.padding :\n 0);\n return x;\n };\n /**\n * Define hasData function for non-cartesian series. Returns true if the\n * series has points at all.\n * @private\n */\n PieSeries.prototype.hasData = function () {\n return !!this.processedXData.length; // != 0\n };\n /**\n * Draw the data points\n * @private\n */\n PieSeries.prototype.redrawPoints = function () {\n var series = this, chart = series.chart, renderer = chart.renderer, shadow = series.options.shadow;\n var groupTranslation, graphic, pointAttr, shapeArgs;\n this.drawEmpty();\n if (shadow && !series.shadowGroup && !chart.styledMode) {\n series.shadowGroup = renderer\n .g('shadow')\n .attr({ zIndex: -1 })\n .add(series.group);\n }\n // draw the slices\n series.points.forEach(function (point) {\n var animateTo = {};\n graphic = point.graphic;\n if (!point.isNull && graphic) {\n var shadowGroup = void 0;\n shapeArgs = point.shapeArgs;\n // If the point is sliced, use special translation, else use\n // plot area translation\n groupTranslation = point.getTranslate();\n if (!chart.styledMode) {\n // Put the shadow behind all points\n shadowGroup = point.shadowGroup;\n if (shadow && !shadowGroup) {\n shadowGroup = point.shadowGroup = renderer\n .g('shadow')\n .add(series.shadowGroup);\n }\n if (shadowGroup) {\n shadowGroup.attr(groupTranslation);\n }\n pointAttr = series.pointAttribs(point, (point.selected && 'select'));\n }\n // Draw the slice\n if (!point.delayedRendering) {\n graphic\n .setRadialReference(series.center);\n if (!chart.styledMode) {\n merge(true, animateTo, pointAttr);\n }\n merge(true, animateTo, shapeArgs, groupTranslation);\n graphic.animate(animateTo);\n }\n else {\n graphic\n .setRadialReference(series.center)\n .attr(shapeArgs)\n .attr(groupTranslation);\n if (!chart.styledMode) {\n graphic\n .attr(pointAttr)\n .attr({ 'stroke-linejoin': 'round' })\n .shadow(shadow, shadowGroup);\n }\n point.delayedRendering = false;\n }\n graphic.attr({\n visibility: point.visible ? 'inherit' : 'hidden'\n });\n graphic.addClass(point.getClassName(), true);\n }\n else if (graphic) {\n point.graphic = graphic.destroy();\n }\n });\n };\n /**\n * Utility for sorting data labels.\n * @private\n */\n PieSeries.prototype.sortByAngle = function (points, sign) {\n points.sort(function (a, b) {\n return ((typeof a.angle !== 'undefined') &&\n (b.angle - a.angle) * sign);\n });\n };\n /**\n * Do translation for pie slices\n * @private\n */\n PieSeries.prototype.translate = function (positions) {\n fireEvent(this, 'translate');\n this.generatePoints();\n var series = this, precision = 1000, // issue #172\n options = series.options, slicedOffset = options.slicedOffset, connectorOffset = slicedOffset + (options.borderWidth || 0), radians = getStartAndEndRadians(options.startAngle, options.endAngle), startAngleRad = series.startAngleRad = radians.start, endAngleRad = series.endAngleRad = radians.end, circ = endAngleRad - startAngleRad, // 2 * Math.PI,\n points = series.points, labelDistance = options.dataLabels.distance, ignoreHiddenPoint = options.ignoreHiddenPoint, len = points.length;\n var finalConnectorOffset, start, end, angle, \n // the x component of the radius vector for a given point\n radiusX, radiusY, i, point, cumulative = 0;\n // Get positions - either an integer or a percentage string must be\n // given. If positions are passed as a parameter, we're in a\n // recursive loop for adjusting space for data labels.\n if (!positions) {\n series.center = positions = series.getCenter();\n }\n // Calculate the geometry for each point\n for (i = 0; i < len; i++) {\n point = points[i];\n // set start and end angle\n start = startAngleRad + (cumulative * circ);\n if (point.isValid() &&\n (!ignoreHiddenPoint || point.visible)) {\n cumulative += point.percentage / 100;\n }\n end = startAngleRad + (cumulative * circ);\n // set the shape\n var shapeArgs = {\n x: positions[0],\n y: positions[1],\n r: positions[2] / 2,\n innerR: positions[3] / 2,\n start: Math.round(start * precision) / precision,\n end: Math.round(end * precision) / precision\n };\n point.shapeType = 'arc';\n point.shapeArgs = shapeArgs;\n // Used for distance calculation for specific point.\n point.labelDistance = pick((point.options.dataLabels &&\n point.options.dataLabels.distance), labelDistance);\n // Compute point.labelDistance if it's defined as percentage\n // of slice radius (#8854)\n point.labelDistance = relativeLength(point.labelDistance, shapeArgs.r);\n // Saved for later dataLabels distance calculation.\n series.maxLabelDistance = Math.max(series.maxLabelDistance || 0, point.labelDistance);\n // The angle must stay within -90 and 270 (#2645)\n angle = (end + start) / 2;\n if (angle > 1.5 * Math.PI) {\n angle -= 2 * Math.PI;\n }\n else if (angle < -Math.PI / 2) {\n angle += 2 * Math.PI;\n }\n // Center for the sliced out slice\n point.slicedTranslation = {\n translateX: Math.round(Math.cos(angle) * slicedOffset),\n translateY: Math.round(Math.sin(angle) * slicedOffset)\n };\n // set the anchor point for tooltips\n radiusX = Math.cos(angle) * positions[2] / 2;\n radiusY = Math.sin(angle) * positions[2] / 2;\n point.tooltipPos = [\n positions[0] + radiusX * 0.7,\n positions[1] + radiusY * 0.7\n ];\n point.half = angle < -Math.PI / 2 || angle > Math.PI / 2 ?\n 1 :\n 0;\n point.angle = angle;\n // Set the anchor point for data labels. Use point.labelDistance\n // instead of labelDistance // #1174\n // finalConnectorOffset - not override connectorOffset value.\n finalConnectorOffset = Math.min(connectorOffset, point.labelDistance / 5); // #1678\n point.labelPosition = {\n natural: {\n // initial position of the data label - it's utilized for\n // finding the final position for the label\n x: positions[0] + radiusX + Math.cos(angle) *\n point.labelDistance,\n y: positions[1] + radiusY + Math.sin(angle) *\n point.labelDistance\n },\n 'final': {\n // used for generating connector path -\n // initialized later in drawDataLabels function\n // x: undefined,\n // y: undefined\n },\n // left - pie on the left side of the data label\n // right - pie on the right side of the data label\n // center - data label overlaps the pie\n alignment: point.labelDistance < 0 ?\n 'center' : point.half ? 'right' : 'left',\n connectorPosition: {\n breakAt: {\n x: positions[0] + radiusX + Math.cos(angle) *\n finalConnectorOffset,\n y: positions[1] + radiusY + Math.sin(angle) *\n finalConnectorOffset\n },\n touchingSliceAt: {\n x: positions[0] + radiusX,\n y: positions[1] + radiusY\n }\n }\n };\n }\n fireEvent(series, 'afterTranslate');\n };\n /**\n * Recompute total chart sum and update percentages of points.\n * @private\n */\n PieSeries.prototype.updateTotals = function () {\n var points = this.points, len = points.length, ignoreHiddenPoint = this.options.ignoreHiddenPoint;\n var i, point, total = 0;\n // Get the total sum\n for (i = 0; i < len; i++) {\n point = points[i];\n if (point.isValid() &&\n (!ignoreHiddenPoint || point.visible)) {\n total += point.y;\n }\n }\n this.total = total;\n // Set each point's properties\n for (i = 0; i < len; i++) {\n point = points[i];\n point.percentage =\n (total > 0 && (point.visible || !ignoreHiddenPoint)) ?\n point.y / total * 100 :\n 0;\n point.total = total;\n }\n };\n PieSeries.defaultOptions = merge(Series.defaultOptions, PieSeriesDefaults);\n return PieSeries;\n}(Series));\nextend(PieSeries.prototype, {\n axisTypes: [],\n directTouch: true,\n drawGraph: void 0,\n drawLegendSymbol: LegendSymbol.drawRectangle,\n drawTracker: ColumnSeries.prototype.drawTracker,\n getCenter: CU.getCenter,\n getSymbol: noop,\n isCartesian: false,\n noSharedTooltip: true,\n pointAttribs: ColumnSeries.prototype.pointAttribs,\n pointClass: PiePoint,\n requireSorting: false,\n searchPoint: noop,\n trackerGroups: ['group', 'dataLabelsGroup']\n});\nSeriesRegistry.registerSeriesType('pie', PieSeries);\n/* *\n *\n * Default Export\n *\n * */\nexport default PieSeries;\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport DataLabel from '../../Core/Series/DataLabel.js';\nimport H from '../../Core/Globals.js';\nvar noop = H.noop;\nimport R from '../../Core/Renderer/RendererUtilities.js';\nvar distribute = R.distribute;\nimport SeriesRegistry from '../../Core/Series/SeriesRegistry.js';\nvar Series = SeriesRegistry.series;\nimport U from '../../Core/Utilities.js';\nvar arrayMax = U.arrayMax, clamp = U.clamp, defined = U.defined, merge = U.merge, pick = U.pick, relativeLength = U.relativeLength;\n/* *\n *\n * Composition\n *\n * */\nvar ColumnDataLabel;\n(function (ColumnDataLabel) {\n /* *\n *\n * Constants\n *\n * */\n var composedClasses = [];\n var dataLabelPositioners = {\n // Based on the value computed in Highcharts' distribute algorithm.\n radialDistributionY: function (point) {\n return point.top + point.distributeBox.pos;\n },\n // get the x - use the natural x position for labels near the\n // top and bottom, to prevent the top and botton slice\n // connectors from touching each other on either side\n // Based on the value computed in Highcharts' distribute algorithm.\n radialDistributionX: function (series, point, y, naturalY) {\n return series.getX(y < point.top + 2 || y > point.bottom - 2 ?\n naturalY :\n y, point.half, point);\n },\n // dataLabels.distance determines the x position of the label\n justify: function (point, radius, seriesCenter) {\n return seriesCenter[0] + (point.half ? -1 : 1) *\n (radius + point.labelDistance);\n },\n // Left edges of the left-half labels touch the left edge of the plot\n // area. Right edges of the right-half labels touch the right edge of\n // the plot area.\n alignToPlotEdges: function (dataLabel, half, plotWidth, plotLeft) {\n var dataLabelWidth = dataLabel.getBBox().width;\n return half ? dataLabelWidth + plotLeft :\n plotWidth - dataLabelWidth - plotLeft;\n },\n // Connectors of each side end in the same x position. Labels are\n // aligned to them. Left edge of the widest left-half label touches the\n // left edge of the plot area. Right edge of the widest right-half label\n // touches the right edge of the plot area.\n alignToConnectors: function (points, half, plotWidth, plotLeft) {\n var maxDataLabelWidth = 0, dataLabelWidth;\n // find widest data label\n points.forEach(function (point) {\n dataLabelWidth = point.dataLabel.getBBox().width;\n if (dataLabelWidth > maxDataLabelWidth) {\n maxDataLabelWidth = dataLabelWidth;\n }\n });\n return half ? maxDataLabelWidth + plotLeft :\n plotWidth - maxDataLabelWidth - plotLeft;\n }\n };\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /** @private */\n function compose(PieSeriesClass) {\n DataLabel.compose(Series);\n if (composedClasses.indexOf(PieSeriesClass) === -1) {\n composedClasses.push(PieSeriesClass);\n var pieProto = PieSeriesClass.prototype;\n pieProto.dataLabelPositioners = dataLabelPositioners;\n pieProto.alignDataLabel = noop;\n pieProto.drawDataLabels = drawDataLabels;\n pieProto.placeDataLabels = placeDataLabels;\n pieProto.verifyDataLabelOverflow = verifyDataLabelOverflow;\n }\n }\n ColumnDataLabel.compose = compose;\n /**\n * Override the base drawDataLabels method by pie specific functionality\n * @private\n */\n function drawDataLabels() {\n var series = this, data = series.data, chart = series.chart, options = series.options.dataLabels || {}, connectorPadding = options.connectorPadding, plotWidth = chart.plotWidth, plotHeight = chart.plotHeight, plotLeft = chart.plotLeft, maxWidth = Math.round(chart.chartWidth / 3), seriesCenter = series.center, radius = seriesCenter[2] / 2, centerY = seriesCenter[1], halves = [\n [],\n [] // left\n ], overflow = [0, 0, 0, 0], // top, right, bottom, left\n dataLabelPositioners = series.dataLabelPositioners;\n var point, connectorWidth, connector, dataLabel, dataLabelWidth, \n // labelPos,\n labelPosition, labelHeight, \n // divide the points into right and left halves for anti collision\n x, y, visibility, j, pointDataLabelsOptions;\n // get out if not enabled\n if (!series.visible ||\n (!options.enabled &&\n !series._hasPointLabels)) {\n return;\n }\n // Reset all labels that have been shortened\n data.forEach(function (point) {\n if (point.dataLabel && point.visible && point.dataLabel.shortened) {\n point.dataLabel\n .attr({\n width: 'auto'\n }).css({\n width: 'auto',\n textOverflow: 'clip'\n });\n point.dataLabel.shortened = false;\n }\n });\n // run parent method\n Series.prototype.drawDataLabels.apply(series);\n data.forEach(function (point) {\n if (point.dataLabel) {\n if (point.visible) { // #407, #2510\n // Arrange points for detection collision\n halves[point.half].push(point);\n // Reset positions (#4905)\n point.dataLabel._pos = null;\n // Avoid long labels squeezing the pie size too far down\n if (!defined(options.style.width) &&\n !defined(point.options.dataLabels &&\n point.options.dataLabels.style &&\n point.options.dataLabels.style.width)) {\n if (point.dataLabel.getBBox().width > maxWidth) {\n point.dataLabel.css({\n // Use a fraction of the maxWidth to avoid\n // wrapping close to the end of the string.\n width: Math.round(maxWidth * 0.7) + 'px'\n });\n point.dataLabel.shortened = true;\n }\n }\n }\n else {\n point.dataLabel = point.dataLabel.destroy();\n // Workaround to make pies destroy multiple datalabels\n // correctly. This logic needs rewriting to support multiple\n // datalabels fully.\n if (point.dataLabels && point.dataLabels.length === 1) {\n delete point.dataLabels;\n }\n }\n }\n });\n /* Loop over the points in each half, starting from the top and bottom\n * of the pie to detect overlapping labels.\n */\n halves.forEach(function (points, i) {\n var length = points.length, positions = [];\n var top, bottom, naturalY, sideOverflow, size, distributionLength;\n if (!length) {\n return;\n }\n // Sort by angle\n series.sortByAngle(points, i - 0.5);\n // Only do anti-collision when we have dataLabels outside the pie\n // and have connectors. (#856)\n if (series.maxLabelDistance > 0) {\n top = Math.max(0, centerY - radius - series.maxLabelDistance);\n bottom = Math.min(centerY + radius + series.maxLabelDistance, chart.plotHeight);\n points.forEach(function (point) {\n // check if specific points' label is outside the pie\n if (point.labelDistance > 0 && point.dataLabel) {\n // point.top depends on point.labelDistance value\n // Used for calculation of y value in getX method\n point.top = Math.max(0, centerY - radius - point.labelDistance);\n point.bottom = Math.min(centerY + radius + point.labelDistance, chart.plotHeight);\n size = point.dataLabel.getBBox().height || 21;\n // point.positionsIndex is needed for getting index of\n // parameter related to specific point inside positions\n // array - not every point is in positions array.\n point.distributeBox = {\n target: point.labelPosition.natural.y -\n point.top + size / 2,\n size: size,\n rank: point.y\n };\n positions.push(point.distributeBox);\n }\n });\n distributionLength = bottom + size - top;\n distribute(positions, distributionLength, distributionLength / 5);\n }\n // Now the used slots are sorted, fill them up sequentially\n for (j = 0; j < length; j++) {\n point = points[j];\n // labelPos = point.labelPos;\n labelPosition = point.labelPosition;\n dataLabel = point.dataLabel;\n visibility = point.visible === false ? 'hidden' : 'inherit';\n naturalY = labelPosition.natural.y;\n y = naturalY;\n if (positions && defined(point.distributeBox)) {\n if (typeof point.distributeBox.pos === 'undefined') {\n visibility = 'hidden';\n }\n else {\n labelHeight = point.distributeBox.size;\n // Find label's y position\n y = dataLabelPositioners\n .radialDistributionY(point);\n }\n }\n // It is needed to delete point.positionIndex for\n // dynamically added points etc.\n delete point.positionIndex; // @todo unused\n // Find label's x position\n // justify is undocumented in the API - preserve support for it\n if (options.justify) {\n x = dataLabelPositioners.justify(point, radius, seriesCenter);\n }\n else {\n switch (options.alignTo) {\n case 'connectors':\n x = dataLabelPositioners.alignToConnectors(points, i, plotWidth, plotLeft);\n break;\n case 'plotEdges':\n x = dataLabelPositioners.alignToPlotEdges(dataLabel, i, plotWidth, plotLeft);\n break;\n default:\n x = dataLabelPositioners.radialDistributionX(series, point, y, naturalY);\n }\n }\n // Record the placement and visibility\n dataLabel._attr = {\n visibility: visibility,\n align: labelPosition.alignment\n };\n pointDataLabelsOptions = point.options.dataLabels || {};\n dataLabel._pos = {\n x: (x +\n pick(pointDataLabelsOptions.x, options.x) + // (#12985)\n ({\n left: connectorPadding,\n right: -connectorPadding\n }[labelPosition.alignment] || 0)),\n // 10 is for the baseline (label vs text)\n y: (y +\n pick(pointDataLabelsOptions.y, options.y) - // (#12985)\n 10)\n };\n // labelPos.x = x;\n // labelPos.y = y;\n labelPosition.final.x = x;\n labelPosition.final.y = y;\n // Detect overflowing data labels\n if (pick(options.crop, true)) {\n dataLabelWidth = dataLabel.getBBox().width;\n sideOverflow = null;\n // Overflow left\n if (x - dataLabelWidth < connectorPadding &&\n i === 1 // left half\n ) {\n sideOverflow = Math.round(dataLabelWidth - x + connectorPadding);\n overflow[3] = Math.max(sideOverflow, overflow[3]);\n // Overflow right\n }\n else if (x + dataLabelWidth > plotWidth - connectorPadding &&\n i === 0 // right half\n ) {\n sideOverflow = Math.round(x + dataLabelWidth - plotWidth + connectorPadding);\n overflow[1] = Math.max(sideOverflow, overflow[1]);\n }\n // Overflow top\n if (y - labelHeight / 2 < 0) {\n overflow[0] = Math.max(Math.round(-y + labelHeight / 2), overflow[0]);\n // Overflow left\n }\n else if (y + labelHeight / 2 > plotHeight) {\n overflow[2] = Math.max(Math.round(y + labelHeight / 2 - plotHeight), overflow[2]);\n }\n dataLabel.sideOverflow = sideOverflow;\n }\n } // for each point\n }); // for each half\n // Do not apply the final placement and draw the connectors until we\n // have verified that labels are not spilling over.\n if (arrayMax(overflow) === 0 ||\n this.verifyDataLabelOverflow(overflow)) {\n // Place the labels in the final position\n this.placeDataLabels();\n this.points.forEach(function (point) {\n // #8864: every connector can have individual options\n pointDataLabelsOptions =\n merge(options, point.options.dataLabels);\n connectorWidth =\n pick(pointDataLabelsOptions.connectorWidth, 1);\n // Draw the connector\n if (connectorWidth) {\n var isNew = void 0;\n connector = point.connector;\n dataLabel = point.dataLabel;\n if (dataLabel &&\n dataLabel._pos &&\n point.visible &&\n point.labelDistance > 0) {\n visibility = dataLabel._attr.visibility;\n isNew = !connector;\n if (isNew) {\n point.connector = connector = chart.renderer\n .path()\n .addClass('highcharts-data-label-connector ' +\n ' highcharts-color-' + point.colorIndex +\n (point.className ?\n ' ' + point.className :\n ''))\n .add(series.dataLabelsGroup);\n if (!chart.styledMode) {\n connector.attr({\n 'stroke-width': connectorWidth,\n 'stroke': (pointDataLabelsOptions.connectorColor ||\n point.color ||\n \"#666666\" /* Palette.neutralColor60 */)\n });\n }\n }\n connector[isNew ? 'attr' : 'animate']({\n d: point.getConnectorPath()\n });\n connector.attr('visibility', visibility);\n }\n else if (connector) {\n point.connector = connector.destroy();\n }\n }\n });\n }\n }\n /**\n * Perform the final placement of the data labels after we have verified\n * that they fall within the plot area.\n * @private\n */\n function placeDataLabels() {\n this.points.forEach(function (point) {\n var dataLabel = point.dataLabel, _pos;\n if (dataLabel && point.visible) {\n _pos = dataLabel._pos;\n if (_pos) {\n // Shorten data labels with ellipsis if they still overflow\n // after the pie has reached minSize (#223).\n if (dataLabel.sideOverflow) {\n dataLabel._attr.width =\n Math.max(dataLabel.getBBox().width -\n dataLabel.sideOverflow, 0);\n dataLabel.css({\n width: dataLabel._attr.width + 'px',\n textOverflow: ((this.options.dataLabels.style || {})\n .textOverflow ||\n 'ellipsis')\n });\n dataLabel.shortened = true;\n }\n dataLabel.attr(dataLabel._attr);\n dataLabel[dataLabel.moved ? 'animate' : 'attr'](_pos);\n dataLabel.moved = true;\n }\n else if (dataLabel) {\n dataLabel.attr({ y: -9999 });\n }\n }\n // Clear for update\n delete point.distributeBox;\n }, this);\n }\n /**\n * Verify whether the data labels are allowed to draw, or we should run more\n * translation and data label positioning to keep them inside the plot area.\n * Returns true when data labels are ready to draw.\n * @private\n */\n function verifyDataLabelOverflow(overflow) {\n var center = this.center, options = this.options, centerOption = options.center, minSize = options.minSize || 80, newSize = minSize, \n // If a size is set, return true and don't try to shrink the pie\n // to fit the labels.\n ret = options.size !== null;\n if (!ret) {\n // Handle horizontal size and center\n if (centerOption[0] !== null) { // Fixed center\n newSize = Math.max(center[2] -\n Math.max(overflow[1], overflow[3]), minSize);\n }\n else { // Auto center\n newSize = Math.max(\n // horizontal overflow\n center[2] - overflow[1] - overflow[3], minSize);\n // horizontal center\n center[0] += (overflow[3] - overflow[1]) / 2;\n }\n // Handle vertical size and center\n if (centerOption[1] !== null) { // Fixed center\n newSize = clamp(newSize, minSize, center[2] - Math.max(overflow[0], overflow[2]));\n }\n else { // Auto center\n newSize = clamp(newSize, minSize, \n // vertical overflow\n center[2] - overflow[0] - overflow[2]);\n // vertical center\n center[1] += (overflow[0] - overflow[2]) / 2;\n }\n // If the size must be decreased, we need to run translate and\n // drawDataLabels again\n if (newSize < center[2]) {\n center[2] = newSize;\n center[3] = Math.min(// #3632\n options.thickness ?\n Math.max(0, newSize - options.thickness * 2) :\n Math.max(0, relativeLength(options.innerSize || 0, newSize)), newSize); // #6647\n this.translate(center);\n if (this.drawDataLabels) {\n this.drawDataLabels();\n }\n // Else, return true to indicate that the pie and its labels is\n // within the plot area\n }\n else {\n ret = true;\n }\n }\n return ret;\n }\n})(ColumnDataLabel || (ColumnDataLabel = {}));\n/* *\n *\n * Default Export\n *\n * */\nexport default ColumnDataLabel;\n","/* *\n *\n * Highcharts module to hide overlapping data labels.\n * This module is included in Highcharts.\n *\n * (c) 2009-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport Chart from '../Core/Chart/Chart.js';\nimport U from '../Core/Utilities.js';\nvar addEvent = U.addEvent, fireEvent = U.fireEvent, isArray = U.isArray, isNumber = U.isNumber, objectEach = U.objectEach, pick = U.pick;\n/**\n * Internal type\n * @private\n */\n/* eslint-disable no-invalid-this */\n// Collect potensial overlapping data labels. Stack labels probably don't need\n// to be considered because they are usually accompanied by data labels that lie\n// inside the columns.\naddEvent(Chart, 'render', function collectAndHide() {\n var chart = this, labels = [];\n // Consider external label collectors\n (this.labelCollectors || []).forEach(function (collector) {\n labels = labels.concat(collector());\n });\n (this.yAxis || []).forEach(function (yAxis) {\n if (yAxis.stacking &&\n yAxis.options.stackLabels &&\n !yAxis.options.stackLabels.allowOverlap) {\n objectEach(yAxis.stacking.stacks, function (stack) {\n objectEach(stack, function (stackItem) {\n if (stackItem.label) {\n labels.push(stackItem.label);\n }\n });\n });\n }\n });\n (this.series || []).forEach(function (series) {\n var dlOptions = series.options.dataLabels;\n if (series.visible &&\n !(dlOptions.enabled === false && !series._hasPointLabels)) { // #3866\n var push = function (points) {\n return points.forEach(function (point) {\n if (point.visible) {\n var dataLabels = (isArray(point.dataLabels) ?\n point.dataLabels :\n (point.dataLabel ? [point.dataLabel] : []));\n dataLabels.forEach(function (label) {\n var options = label.options;\n label.labelrank = pick(options.labelrank, point.labelrank, point.shapeArgs && point.shapeArgs.height); // #4118\n if (!options.allowOverlap) {\n labels.push(label);\n }\n else { // #13449\n label.oldOpacity = label.opacity;\n label.newOpacity = 1;\n hideOrShow(label, chart);\n }\n });\n }\n });\n };\n push(series.nodes || []);\n push(series.points);\n }\n });\n this.hideOverlappingLabels(labels);\n});\n/**\n * Hide overlapping labels. Labels are moved and faded in and out on zoom to\n * provide a smooth visual imression.\n *\n * @private\n * @function Highcharts.Chart#hideOverlappingLabels\n * @param {Array} labels\n * Rendered data labels\n * @requires modules/overlapping-datalabels\n */\nChart.prototype.hideOverlappingLabels = function (labels) {\n var chart = this, len = labels.length, ren = chart.renderer, label, i, j, label1, label2, box1, box2, isLabelAffected = false, isIntersectRect = function (box1, box2) {\n return !(box2.x >= box1.x + box1.width ||\n box2.x + box2.width <= box1.x ||\n box2.y >= box1.y + box1.height ||\n box2.y + box2.height <= box1.y);\n }, \n // Get the box with its position inside the chart, as opposed to getBBox\n // that only reports the position relative to the parent.\n getAbsoluteBox = function (label) {\n var pos, parent, bBox, \n // Substract the padding if no background or border (#4333)\n padding = label.box ? 0 : (label.padding || 0), lineHeightCorrection = 0, xOffset = 0, boxWidth, alignValue;\n if (label &&\n (!label.alignAttr || label.placed)) {\n pos = label.alignAttr || {\n x: label.attr('x'),\n y: label.attr('y')\n };\n parent = label.parentGroup;\n // Get width and height if pure text nodes (stack labels)\n if (!label.width) {\n bBox = label.getBBox();\n label.width = bBox.width;\n label.height = bBox.height;\n // Labels positions are computed from top left corner, so\n // we need to substract the text height from text nodes too.\n lineHeightCorrection = ren\n .fontMetrics(null, label.element).h;\n }\n boxWidth = label.width - 2 * padding;\n alignValue = {\n left: '0',\n center: '0.5',\n right: '1'\n }[label.alignValue];\n if (alignValue) {\n xOffset = +alignValue * boxWidth;\n }\n else if (isNumber(label.x) &&\n Math.round(label.x) !== label.translateX) {\n xOffset = label.x - label.translateX;\n }\n return {\n x: pos.x + (parent.translateX || 0) + padding -\n (xOffset || 0),\n y: pos.y + (parent.translateY || 0) + padding -\n lineHeightCorrection,\n width: label.width - 2 * padding,\n height: label.height - 2 * padding\n };\n }\n };\n for (i = 0; i < len; i++) {\n label = labels[i];\n if (label) {\n // Mark with initial opacity\n label.oldOpacity = label.opacity;\n label.newOpacity = 1;\n label.absoluteBox = getAbsoluteBox(label);\n }\n }\n // Prevent a situation in a gradually rising slope, that each label will\n // hide the previous one because the previous one always has lower rank.\n labels.sort(function (a, b) {\n return (b.labelrank || 0) - (a.labelrank || 0);\n });\n // Detect overlapping labels\n for (i = 0; i < len; i++) {\n label1 = labels[i];\n box1 = label1 && label1.absoluteBox;\n for (j = i + 1; j < len; ++j) {\n label2 = labels[j];\n box2 = label2 && label2.absoluteBox;\n if (box1 &&\n box2 &&\n label1 !== label2 && // #6465, polar chart with connectEnds\n label1.newOpacity !== 0 &&\n label2.newOpacity !== 0 &&\n // #15863 dataLabels are no longer hidden by translation\n label1.visibility !== 'hidden' &&\n label2.visibility !== 'hidden') {\n if (isIntersectRect(box1, box2)) {\n (label1.labelrank < label2.labelrank ? label1 : label2)\n .newOpacity = 0;\n }\n }\n }\n }\n // Hide or show\n labels.forEach(function (label) {\n if (hideOrShow(label, chart)) {\n isLabelAffected = true;\n }\n });\n if (isLabelAffected) {\n fireEvent(chart, 'afterHideAllOverlappingLabels');\n }\n};\n/**\n * Hide or show labels based on opacity.\n *\n * @private\n * @function hideOrShow\n * @param {Highcharts.SVGElement} label\n * The label.\n * @param {Highcharts.Chart} chart\n * The chart that contains the label.\n * @return {boolean}\n * Whether label is affected\n */\nfunction hideOrShow(label, chart) {\n var complete, newOpacity, isLabelAffected = false;\n if (label) {\n newOpacity = label.newOpacity;\n if (label.oldOpacity !== newOpacity) {\n // Make sure the label is completely hidden to avoid catching clicks\n // (#4362)\n if (label.alignAttr && label.placed) { // data labels\n label[newOpacity ? 'removeClass' : 'addClass']('highcharts-data-label-hidden');\n complete = function () {\n if (!chart.styledMode) {\n label.css({\n pointerEvents: newOpacity ? 'auto' : 'none'\n });\n }\n };\n isLabelAffected = true;\n // Animate or set the opacity\n label.alignAttr.opacity = newOpacity;\n label[label.isOld ? 'animate' : 'attr'](label.alignAttr, null, complete);\n fireEvent(chart, 'afterHideOverlappingLabel');\n }\n else { // other labels, tick labels\n label.attr({\n opacity: newOpacity\n });\n }\n }\n label.isOld = true;\n }\n return isLabelAffected;\n}\n","/* *\n *\n * (c) 2010-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n'use strict';\nimport U from './Utilities.js';\nvar extend = U.extend, find = U.find, isArray = U.isArray, isObject = U.isObject, merge = U.merge, objectEach = U.objectEach, pick = U.pick, splat = U.splat, uniqueKey = U.uniqueKey;\n/* *\n *\n * Composition\n *\n * */\nvar Responsive;\n(function (Responsive) {\n /* *\n *\n * Declarations\n *\n * */\n /* *\n *\n * Constants\n *\n * */\n var composedClasses = [];\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /**\n * @private\n */\n function compose(ChartClass) {\n if (composedClasses.indexOf(ChartClass) === -1) {\n composedClasses.push(ChartClass);\n extend(ChartClass.prototype, Additions.prototype);\n }\n return ChartClass;\n }\n Responsive.compose = compose;\n /* *\n *\n * Class\n *\n * */\n var Additions = /** @class */ (function () {\n function Additions() {\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Get the current values for a given set of options. Used before we\n * update the chart with a new responsiveness rule.\n *\n * @todo Restore axis options (by id?). The matching of items in\n * collections bears resemblance to the oneToOne matching in\n * Chart.update. Probably we can refactor out that matching and reuse it\n * in both functions.\n *\n * @private\n * @function Highcharts.Chart#currentOptions\n */\n Additions.prototype.currentOptions = function (options) {\n var chart = this, ret = {};\n /**\n * Recurse over a set of options and its current values,\n * and store the current values in the ret object.\n */\n function getCurrent(options, curr, ret, depth) {\n var i;\n objectEach(options, function (val, key) {\n if (!depth &&\n chart.collectionsWithUpdate.indexOf(key) > -1 &&\n curr[key]) {\n val = splat(val);\n ret[key] = [];\n // Iterate over collections like series, xAxis or yAxis\n // and map the items by index.\n for (i = 0; i < Math.max(val.length, curr[key].length); i++) {\n // Item exists in current data (#6347)\n if (curr[key][i]) {\n // If the item is missing from the new data, we\n // need to save the whole config structure. Like\n // when responsively updating from a dual axis\n // layout to a single axis and back (#13544).\n if (val[i] === void 0) {\n ret[key][i] = curr[key][i];\n // Otherwise, proceed\n }\n else {\n ret[key][i] = {};\n getCurrent(val[i], curr[key][i], ret[key][i], depth + 1);\n }\n }\n }\n }\n else if (isObject(val)) {\n ret[key] = isArray(val) ? [] : {};\n getCurrent(val, curr[key] || {}, ret[key], depth + 1);\n }\n else if (typeof curr[key] === 'undefined') { // #10286\n ret[key] = null;\n }\n else {\n ret[key] = curr[key];\n }\n });\n }\n getCurrent(options, this.options, ret, 0);\n return ret;\n };\n /**\n * Handle a single responsiveness rule.\n *\n * @private\n * @function Highcharts.Chart#matchResponsiveRule\n * @param {Highcharts.ResponsiveRulesOptions} rule\n * @param {Array} matches\n */\n Additions.prototype.matchResponsiveRule = function (rule, matches) {\n var condition = rule.condition, fn = condition.callback || function () {\n return (this.chartWidth <= pick(condition.maxWidth, Number.MAX_VALUE) &&\n this.chartHeight <= pick(condition.maxHeight, Number.MAX_VALUE) &&\n this.chartWidth >= pick(condition.minWidth, 0) &&\n this.chartHeight >= pick(condition.minHeight, 0));\n };\n if (fn.call(this)) {\n matches.push(rule._id);\n }\n };\n /**\n * Update the chart based on the current chart/document size and options\n * for responsiveness.\n *\n * @private\n * @function Highcharts.Chart#setResponsive\n * @param {boolean} [redraw=true]\n * @param {boolean} [reset=false]\n * Reset by un-applying all rules. Chart.update resets all rules before\n * applying updated options.\n */\n Additions.prototype.setResponsive = function (redraw, reset) {\n var _this = this;\n var options = this.options.responsive, currentResponsive = this.currentResponsive;\n var ruleIds = [], undoOptions;\n if (!reset && options && options.rules) {\n options.rules.forEach(function (rule) {\n if (typeof rule._id === 'undefined') {\n rule._id = uniqueKey();\n }\n _this.matchResponsiveRule(rule, ruleIds /* , redraw */);\n }, this);\n }\n // Merge matching rules\n var mergedOptions = merge.apply(void 0, ruleIds\n .map(function (ruleId) { return find((options || {}).rules || [], function (rule) { return (rule._id === ruleId); }); })\n .map(function (rule) { return (rule && rule.chartOptions); }));\n mergedOptions.isResponsiveOptions = true;\n // Stringified key for the rules that currently apply.\n ruleIds = (ruleIds.toString() || void 0);\n var currentRuleIds = (currentResponsive && currentResponsive.ruleIds);\n // Changes in what rules apply\n if (ruleIds !== currentRuleIds) {\n // Undo previous rules. Before we apply a new set of rules, we\n // need to roll back completely to base options (#6291).\n if (currentResponsive) {\n this.update(currentResponsive.undoOptions, redraw, true);\n }\n if (ruleIds) {\n // Get undo-options for matching rules\n undoOptions = this.currentOptions(mergedOptions);\n undoOptions.isResponsiveOptions = true;\n this.currentResponsive = {\n ruleIds: ruleIds,\n mergedOptions: mergedOptions,\n undoOptions: undoOptions\n };\n this.update(mergedOptions, redraw, true);\n }\n else {\n this.currentResponsive = void 0;\n }\n }\n };\n return Additions;\n }());\n})(Responsive || (Responsive = {}));\n/* *\n *\n * Default Export\n *\n * */\nexport default Responsive;\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * A callback function to gain complete control on when the responsive rule\n * applies.\n *\n * @callback Highcharts.ResponsiveCallbackFunction\n *\n * @param {Highcharts.Chart} this\n * Chart context.\n *\n * @return {boolean}\n * Return `true` if it applies.\n */\n(''); // keeps doclets above in JS file\n/* *\n *\n * API Options\n *\n * */\n/**\n * Allows setting a set of rules to apply for different screen or chart\n * sizes. Each rule specifies additional chart options.\n *\n * @sample {highstock} stock/demo/responsive/\n * Stock chart\n * @sample highcharts/responsive/axis/\n * Axis\n * @sample highcharts/responsive/legend/\n * Legend\n * @sample highcharts/responsive/classname/\n * Class name\n *\n * @since 5.0.0\n * @apioption responsive\n */\n/**\n * A set of rules for responsive settings. The rules are executed from\n * the top down.\n *\n * @sample {highcharts} highcharts/responsive/axis/\n * Axis changes\n * @sample {highstock} highcharts/responsive/axis/\n * Axis changes\n * @sample {highmaps} highcharts/responsive/axis/\n * Axis changes\n *\n * @type {Array<*>}\n * @since 5.0.0\n * @apioption responsive.rules\n */\n/**\n * A full set of chart options to apply as overrides to the general\n * chart options. The chart options are applied when the given rule\n * is active.\n *\n * A special case is configuration objects that take arrays, for example\n * [xAxis](#xAxis), [yAxis](#yAxis) or [series](#series). For these\n * collections, an `id` option is used to map the new option set to\n * an existing object. If an existing object of the same id is not found,\n * the item of the same indexupdated. So for example, setting `chartOptions`\n * with two series items without an `id`, will cause the existing chart's\n * two series to be updated with respective options.\n *\n * @sample {highstock} stock/demo/responsive/\n * Stock chart\n * @sample highcharts/responsive/axis/\n * Axis\n * @sample highcharts/responsive/legend/\n * Legend\n * @sample highcharts/responsive/classname/\n * Class name\n *\n * @type {Highcharts.Options}\n * @since 5.0.0\n * @apioption responsive.rules.chartOptions\n */\n/**\n * Under which conditions the rule applies.\n *\n * @since 5.0.0\n * @apioption responsive.rules.condition\n */\n/**\n * A callback function to gain complete control on when the responsive\n * rule applies. Return `true` if it applies. This opens for checking\n * against other metrics than the chart size, for example the document\n * size or other elements.\n *\n * @type {Highcharts.ResponsiveCallbackFunction}\n * @since 5.0.0\n * @context Highcharts.Chart\n * @apioption responsive.rules.condition.callback\n */\n/**\n * The responsive rule applies if the chart height is less than this.\n *\n * @type {number}\n * @since 5.0.0\n * @apioption responsive.rules.condition.maxHeight\n */\n/**\n * The responsive rule applies if the chart width is less than this.\n *\n * @sample highcharts/responsive/axis/\n * Max width is 500\n *\n * @type {number}\n * @since 5.0.0\n * @apioption responsive.rules.condition.maxWidth\n */\n/**\n * The responsive rule applies if the chart height is greater than this.\n *\n * @type {number}\n * @default 0\n * @since 5.0.0\n * @apioption responsive.rules.condition.minHeight\n */\n/**\n * The responsive rule applies if the chart width is greater than this.\n *\n * @type {number}\n * @default 0\n * @since 5.0.0\n * @apioption responsive.rules.condition.minWidth\n */\n(''); // keeps doclets above in JS file\n","/**\n * @license Highcharts JS v10.3.3 (2023-01-20)\n * @module highcharts/highcharts\n *\n * (c) 2009-2021 Torstein Honsi\n *\n * License: www.highcharts.com/license\n */\n'use strict';\nimport Highcharts from '../Core/Globals.js';\nimport Utilities from '../Core/Utilities.js';\nimport Defaults from '../Core/Defaults.js';\nimport Fx from '../Core/Animation/Fx.js';\nimport Animation from '../Core/Animation/AnimationUtilities.js';\nimport AST from '../Core/Renderer/HTML/AST.js';\nimport FormatUtilities from '../Core/FormatUtilities.js';\nimport RendererUtilities from '../Core/Renderer/RendererUtilities.js';\nimport SVGElement from '../Core/Renderer/SVG/SVGElement.js';\nimport SVGRenderer from '../Core/Renderer/SVG/SVGRenderer.js';\nimport HTMLElement from '../Core/Renderer/HTML/HTMLElement.js';\nimport HTMLRenderer from '../Core/Renderer/HTML/HTMLRenderer.js';\nimport Axis from '../Core/Axis/Axis.js';\nimport DateTimeAxis from '../Core/Axis/DateTimeAxis.js';\nimport LogarithmicAxis from '../Core/Axis/LogarithmicAxis.js';\nimport PlotLineOrBand from '../Core/Axis/PlotLineOrBand/PlotLineOrBand.js';\nimport Tick from '../Core/Axis/Tick.js';\nimport Tooltip from '../Core/Tooltip.js';\nimport Point from '../Core/Series/Point.js';\nimport Pointer from '../Core/Pointer.js';\nimport MSPointer from '../Core/MSPointer.js';\nimport Legend from '../Core/Legend/Legend.js';\nimport Chart from '../Core/Chart/Chart.js';\nimport '../Extensions/ScrollablePlotArea.js';\nimport StackingAxis from '../Core/Axis/Stacking/StackingAxis.js';\nimport StackItem from '../Core/Axis/Stacking/StackItem.js';\nimport Series from '../Core/Series/Series.js';\nimport SeriesRegistry from '../Core/Series/SeriesRegistry.js';\nimport '../Series/Line/LineSeries.js';\nimport '../Series/Area/AreaSeries.js';\nimport '../Series/Spline/SplineSeries.js';\nimport '../Series/AreaSpline/AreaSplineSeries.js';\nimport ColumnSeries from '../Series/Column/ColumnSeries.js';\nimport ColumnDataLabel from '../Series/Column/ColumnDataLabel.js';\nimport '../Series/Bar/BarSeries.js';\nimport '../Series/Scatter/ScatterSeries.js';\nimport PieSeries from '../Series/Pie/PieSeries.js';\nimport PieDataLabel from '../Series/Pie/PieDataLabel.js';\nimport DataLabel from '../Core/Series/DataLabel.js';\nimport '../Extensions/OverlappingDataLabels.js';\nimport Responsive from '../Core/Responsive.js';\nimport Color from '../Core/Color/Color.js';\nimport Time from '../Core/Time.js';\nvar G = Highcharts;\n// Animation\nG.animate = Animation.animate;\nG.animObject = Animation.animObject;\nG.getDeferredAnimation = Animation.getDeferredAnimation;\nG.setAnimation = Animation.setAnimation;\nG.stop = Animation.stop;\nG.timers = Fx.timers;\n// Classes\nG.AST = AST;\nG.Axis = Axis;\nG.Chart = Chart;\nG.chart = Chart.chart;\nG.Fx = Fx;\nG.Legend = Legend;\nG.PlotLineOrBand = PlotLineOrBand;\nG.Point = Point;\nG.Pointer = (MSPointer.isRequired() ? MSPointer : Pointer);\nG.Series = Series;\nG.StackItem = StackItem;\nG.SVGElement = SVGElement;\nG.SVGRenderer = SVGRenderer;\nG.Tick = Tick;\nG.Time = Time;\nG.Tooltip = Tooltip;\n// Color\nG.Color = Color;\nG.color = Color.parse;\n// Compositions\nHTMLRenderer.compose(SVGRenderer);\nHTMLElement.compose(SVGElement);\n// DefaultOptions\nG.defaultOptions = Defaults.defaultOptions;\nG.getOptions = Defaults.getOptions;\nG.time = Defaults.defaultTime;\nG.setOptions = Defaults.setOptions;\n// Format Utilities\nG.dateFormat = FormatUtilities.dateFormat;\nG.format = FormatUtilities.format;\nG.numberFormat = FormatUtilities.numberFormat;\n// Utilities\nG.addEvent = Utilities.addEvent;\nG.arrayMax = Utilities.arrayMax;\nG.arrayMin = Utilities.arrayMin;\nG.attr = Utilities.attr;\nG.clearTimeout = Utilities.clearTimeout;\nG.correctFloat = Utilities.correctFloat;\nG.createElement = Utilities.createElement;\nG.css = Utilities.css;\nG.defined = Utilities.defined;\nG.destroyObjectProperties = Utilities.destroyObjectProperties;\nG.discardElement = Utilities.discardElement;\nG.distribute = RendererUtilities.distribute;\nG.erase = Utilities.erase;\nG.error = Utilities.error;\nG.extend = Utilities.extend;\nG.extendClass = Utilities.extendClass;\nG.find = Utilities.find;\nG.fireEvent = Utilities.fireEvent;\nG.getMagnitude = Utilities.getMagnitude;\nG.getStyle = Utilities.getStyle;\nG.inArray = Utilities.inArray;\nG.isArray = Utilities.isArray;\nG.isClass = Utilities.isClass;\nG.isDOMElement = Utilities.isDOMElement;\nG.isFunction = Utilities.isFunction;\nG.isNumber = Utilities.isNumber;\nG.isObject = Utilities.isObject;\nG.isString = Utilities.isString;\nG.keys = Utilities.keys;\nG.merge = Utilities.merge;\nG.normalizeTickInterval = Utilities.normalizeTickInterval;\nG.objectEach = Utilities.objectEach;\nG.offset = Utilities.offset;\nG.pad = Utilities.pad;\nG.pick = Utilities.pick;\nG.pInt = Utilities.pInt;\nG.relativeLength = Utilities.relativeLength;\nG.removeEvent = Utilities.removeEvent;\nG.seriesType = SeriesRegistry.seriesType;\nG.splat = Utilities.splat;\nG.stableSort = Utilities.stableSort;\nG.syncTimeout = Utilities.syncTimeout;\nG.timeUnits = Utilities.timeUnits;\nG.uniqueKey = Utilities.uniqueKey;\nG.useSerialIds = Utilities.useSerialIds;\nG.wrap = Utilities.wrap;\n// Compositions\nColumnDataLabel.compose(ColumnSeries);\nDataLabel.compose(Series);\nDateTimeAxis.compose(Axis);\nLogarithmicAxis.compose(Axis);\nPieDataLabel.compose(PieSeries);\nPlotLineOrBand.compose(Axis);\nResponsive.compose(Chart);\nStackingAxis.compose(Axis, Chart, Series);\n// Default Export\nexport default G;\n"],"names":["extendStatics","__extends","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","TypeError","String","__","this","constructor","create","isFirefox","H","isMS","isWebKit","win","css","U","defined","extend","pick","pInt","_super","HTMLElement","apply","arguments","compose","SVGElementClass","composedClasses","indexOf","push","htmlElementProto","svgElementProto","getSpanCorrection","htmlCss","htmlGetBBox","htmlUpdateTransform","setSpanRotation","width","baseline","alignCorrection","xCorr","yCorr","styles","doTransform","wrapper","isSettingWidth","element","tagName","textWidth","textOverflow","whiteSpace","overflow","x","offsetLeft","y","offsetTop","offsetWidth","height","offsetHeight","added","renderer","elem","translateX","translateY","align","textAlign","left","center","right","marginLeft","marginTop","styledMode","shadows","forEach","shadow","inverted","childNodes","child","invertChild","rotation","currentTextTransform","innerHTML","join","hasBoxWidthChanged","oldTextWidth","textPxLength","test","textContent","innerText","style","display","cTT","fontMetrics","fontSize","oldRotation","oldAlign","top","alignOnAdd","rotationStyle","cssTransformKey","navigator","userAgent","opera","transform","transformOrigin","SVGElement","attr","createElement","HTMLRenderer","SVGRendererClass","htmlRendererProto","html","str","isSVG","addSetters","gWrapper","prop","value","key","styleObject","div","addedSetters","textSetter","textStr","bBox","AST","setElementHTML","xSetter","ySetter","alignSetter","rotationSetter","alignValue","afterSetters","text","Math","round","position","fontFamily","add","svgGroupWrapper","htmlGroup","parentGroup","container","box","parentNode","parents","reverse","cls","translateSetter","htmlGroupStyle","parentGroupStyles","className","opacity","cursor","pointerEvents","visibility","classSetter","setAttribute","on","onEvents","translateXSetter","translateYSetter","appendChild","SVGRenderer","DateTimeAxis","addEvent","getMagnitude","normalizeTickInterval","timeUnits","getTimeTicks","chart","time","onInit","e","axis","userOptions","type","dateTime","Additions","AxisClass","keepProps","normalizeTimeTickInterval","tickInterval","unitsOption","i","units","unit","length","interval","multiples","year","unitRange","count","max","unitName","getXDateFormat","dateTimeLabelFormats","closestPointRange","getDateFormat","options","startOfWeek","resolveDTLFormat","main","day","LogarithmicAxis","logarithmic","onAfterInit","log","lin2val","num","lin2log","val2lin","log2lin","getLogTickPositions","min","minor","axisLength","len","positions","minorAutoInterval","getLinearTickPositions","intermediate","j","pos","lastPos","break2","floor","realMin","realMax","tickIntervalOption","getMinorTickInterval","filteredTickIntervalOption","tickPixelIntervalOption","tickPixelInterval","totalPixelLength","tickPositions","map","pow","LN10","PlotLineOrBandAxis","erase","isNumber","PlotLineOrBandClass","PlotLineOrBandType","getPlotBandPath","from","to","isFlat","toPath","getPlotLinePath","force","acrossPanes","result","horiz","outside","path","plus","toString","pathStart","pathEnd","toPathStart","toPathEnd","addPlotBand","addPlotBandOrLine","addPlotLine","coll","_this","obj","visible","render","_addedPlotLB","plotLines","concat","plotBands","plotLineOptions","updatedOptions","plotLinesAndBands","removePlotBandOrLine","id","i_1","destroy","arr","removePlotBand","removePlotLine","arrayMax","arrayMin","destroyObjectProperties","fireEvent","merge","objectEach","PlotLineOrBand","group","plotLine","color","zIndex","events","groupAttribs","optionsLabel","label","svgElem","isBand","isLine","isNew","attribs","groupName","stroke","dashStyle","dashstyle","fill","borderWidth","borderColor","plotLinesAndBandsGroups","g","lineWidth","strokeWidth","eventsAdded","event","eventType","show","animate","hide","formatter","verticalAlign","renderLabel","getLabelText","useHTML","xBounds","yBounds","clip","chartWidth","alignAttr","stop","A","Chart","scrollablePixelsX","scrollablePixelsY","corrections","scrollablePlotArea","scrollableMinWidth","minWidth","scrollableMinHeight","minHeight","forExport","scrollablePlotBox","plotBox","plotWidth","clipBox","name","chartHeight","plotHeight","skipAxes","axes","side","marginName","correctionValue","margin","Axis","setAxisSize","setAxisTranslation","setUpScrolling","applyFixed","fixedDiv","lastHoverPoint","WebkitOverflowScrolling","overflowX","overflowY","scrollingParent","renderTo","scrollingContainer","pointer","chartPosition","hoverPoint","runPointActions","innerContainer","moveFixedElements","axisClass","fixedRenderer","fixedSelectors","querySelectorAll","namespaceURI","SVG_NS","scrollableWidth","scrollableHeight","firstTime","chartOptions","scrollableOptions","Renderer","RendererRegistry","getRendererType","insertBefore","scrollableMask","backgroundColor","addClass","setSize","scrollableDirty","boxWrapper","viewBox","chartBackground","scrollPositionX","scrollLeft","scrollPositionY","scrollTop","axisOffset","maskTop","plotTop","maskLeft","plotLeft","maskBottom","maskRight","maskPlotRight","maskPlotBottom","redrawTrigger","Series","format","FU","SeriesRegistry","series","StackItem","negativeValue","stackOption","reversed","isNegative","total","cumulative","points","hasValidPoints","stack","leftCliff","rightCliff","alignOptions","formatOption","shape","r","borderRadius","padding","labelrank","plotSizeY","setOffset","xOffset","xWidth","boxBottom","boxTop","defaultX","xAxis","_a","stackBox","getStackBox","labelBox","getBBox","isJustify","_b","adjustStackPosition","isInsidePlot","justifyDataLabel","rotationOriginX","rotationOriginY","crop","factorMap","bottom","middle","verticalAlignFactor","textAlignFactor","stackBoxProps","totalStackValue","stacking","usePercentage","toPixels","yZero","abs","neg","getDeferredAnimation","seriesProto","correctFloat","isArray","chartGetStacks","yAxis","stacks","hasVisibleSeries","oldStacks","xAxisOptions","ignoreHiddenSeries","stackKey","onAxisDestroy","stackTotalGroup","onAxisInit","AxisAdditions","seriesGetStackIndicator","stackIndicator","index","seriesModifyStacks","processedXData","stacker","pointExtremes","getStackIndicator","seriesPercentStacker","totalFactor","stackedYData","seriesSetGroupedPoints","centerInCategory","is","setStackedPoints","slice","seriesSetStackedPoints","stackingParam","other","pointKey","xData","yData","processedYData","yDataLength","seriesOptions","threshold","stackThreshold","startFromThreshold","negKey","negStacks","stacksTouched","stackLabels","base","touched","singleStacks","StackingAxis","buildStacks","actualSeries","axisSeries","reversedStacks","setGroupedPoints","modifyStacks","cleanStacks","resetStacks","renderStackTotals","stackLabelsAnim","animation","animationConfig","translate","ChartClass","SeriesClass","getStacks","seriesProto_1","percentStacker","LineSeries","data","drawGraph","graphPath","gappedPath","getGraphPath","props","lineColor","getZonesGraphs","graphKey","graph","verb","endX","preventGraphAnimation","xMap","fillGraph","linecap","startX","isArea","nullsAsZeroes","connectCliffs","gap","step","getValidPoints","connectNulls","point","pathToPoint","plotX","plotY","lastPoint","isNull","getPointSpline","zones","zone","propset","defaultOptions","registerSeriesType","Color","parse","seriesTypes","line","AreaSeries","areaPath","fillColor","areaKey","area","setOpacity","fillOpacity","get","shiftUnit","yBottom","bottomPoints","graphPoints","seriesIndex","translatedThreshold","getThreshold","addDummyPoints","otherI","stackedValues","nullVal","cliffVal","isCliff","doCurve","getStackPoints","iEnd","leftNull","rightNull","rectPlotX","topPath","bottomPath","firstBottomPoint","segment","keys","pointMap","yAxisSeries","seriesLength","upOrDown","stackX","sort","a","visibleSeries_1","s","idx","stackPoint","direction","nullName","cliffName","otherStack","cliff","si","drawLegendSymbol","LegendSymbol","drawRectangle","SplineSeries","leftContX","leftContY","rightContX","rightContY","smoothing","denom","nextPoint","otherPoint","lastX","lastY","nextX","nextY","correction","ret","areaProto","AreaSplineSeries","groupPadding","marker","pointPadding","minPointLength","cropThreshold","pointRange","states","hover","halo","brightness","select","dataLabels","stickyTracking","tooltip","distance","animObject","hasTouch","noop","clamp","ColumnSeries","init","translateStart","translateProp","scaleY","setClip","Number","val","fx","hasRendered","otherSeries","isDirty","getColumnMetrics","reverseStacks","stackGroups","columnCount","grouping","columnIndex","otherYAxis","otherOptions","categoryWidth","transA","ordinal","slope","pointOffsetWidth","pointWidth","maxPointWidth","pointXOffset","columnMetrics","offset","paddedWidth","crispCol","w","h","xCrisp","yCrisp","isVML","crisp","fromTop","adjustForMissingColumns","metrics","reversedStacks_1","indexInCategory_1","totalInCategory_1","stackItem_1","pointValues","seriesIndexes","filter","match","parseFloat","boxWidth","dense","seriesPointWidth","seriesXOffset","dataMin","dataMax","seriesBarW","barW","ceil","up","safeDistance","barY","barH","barX","negative","tooltipPos","shapeType","pointClass","shapeArgs","pointAttribs","state","stateOptions","p2o","pointAttrToOptions","strokeOption","strokeWidthOption","getZone","nonZonedColor","brighten","drawPoints","animationLimit","graphic","hasGraphic","pointCount","hasNewShapeType","enabledDataSorting","startXPos","selected","allowShadow","getClassName","drawTracker","onMouseOver","getPointFromEvent","isDirectTouch","dataLabel","_hasTracking","trackerGroups","onTrackerMouseOut","remove","ColumnSeriesDefaults","cropShoulder","directTouch","getSymbol","DataLabel","F","isString","splat","alignDataLabel","alignTo","rotCorr","isCartesian","paneCoordinates","setStartPos","justify","setDataLabelStartPos","forceDL","inside","bBoxCorrection","anchorX","anchorY","placed","drawDataLabels","dataLabelsGroup","plotBackgroundColor","contrastColor","getContrast","seriesDlOptions","dataLabelAnim","defer","duration","mergeArrays","plotOptions","enabled","_hasPointLabels","plotGroup","dlOptions","labelOptions","labelConfig","formatString","labelText","labelEnabled","dataLabelOnNull","op","operator","property","applyFilter","connector","connectors","labelDistance","getLabelConfig","formatPrefix","backgroundColor_1","colorIndex","textPathOptions","textPath","setTextPath","getDataLabelPath","dataLabelPath","off","justified","one","two","res","el","isInside","labelCenter","halfWidth","startYPos","ColumnDataLabel","overshoot","xLen","plotSizeX","yLen","dlBox","below","ColumnSeriesClass","BarSeries","findNearestPointBy","jitter","headerFormat","pointFormat","column","ScatterSeries","applyJitter","dim","translatedJitter","seed","rand","plotProp","toUpperCase","isLog","sin","clientX","ScatterSeriesDefaults","sorted","requireSorting","noSharedTooltip","takeOrdinalPosition","CenteredUtilities","deg2rad","relativeLength","getCenter","handleSlicingRoom","slicingRoom","slicedOffset","centerOption","smallestSize","thickness","size","innerSize","angular","getStartAndEndRadians","start","end","startAngle","endAngle","setAnimation","PiePoint","getConnectorPath","labelPosition","predefinedShapes","connectorShapes","connectorShape","final","alignment","connectorPosition","getTranslate","sliced","slicedTranslation","haloPath","symbols","arc","innerR","toggleSlice","isValid","setVisible","vis","redraw","ignoreHiddenPoint","legendItem","legend","colorizeItem","setState","shadowGroup","Point","fixedOffset","breakAt","touchingSliceAt","lineSegment","softConnector","straight","crookedLine","pieCenterX","radius","crookDistance","crookX","segmentWithCrook","useCrook","colorByPoint","allowOverlap","connectorPadding","inactiveOtherPoints","legendType","showInLegend","followPointer","CU","PieSeries","maxLabelDistance","startAngleRad","args","startR","drawEmpty","centerX","centerY","endAngleRad","Symbols","delayedRendering","generatePoints","updateTotals","getX","radii","angle","asin","cos","hasData","redrawPoints","groupTranslation","pointAttr","animateTo","setRadialReference","sortByAngle","sign","finalConnectorOffset","radiusX","radiusY","precision","connectorOffset","radians","circ","percentage","PI","half","natural","PieSeriesDefaults","axisTypes","searchPoint","distribute","R","dataLabelPositioners","radialDistributionY","distributeBox","radialDistributionX","naturalY","seriesCenter","alignToPlotEdges","dataLabelWidth","alignToConnectors","maxDataLabelWidth","connectorWidth","labelHeight","pointDataLabelsOptions","maxWidth","halves","shortened","_pos","sideOverflow","distributionLength","target","rank","positionIndex","_attr","verifyDataLabelOverflow","placeDataLabels","connectorColor","moved","minSize","newSize","PieSeriesClass","pieProto","hideOrShow","complete","newOpacity","isLabelAffected","oldOpacity","isOld","labels","labelCollectors","collector","stackItem","nodes","hideOverlappingLabels","label1","label2","box1","box2","ren","isIntersectRect","getAbsoluteBox","parent","lineHeightCorrection","absoluteBox","Responsive","find","isObject","uniqueKey","currentOptions","getCurrent","curr","depth","collectionsWithUpdate","matchResponsiveRule","rule","matches","condition","callback","MAX_VALUE","maxHeight","_id","setResponsive","reset","undoOptions","responsive","currentResponsive","ruleIds","rules","mergedOptions","ruleId","isResponsiveOptions","currentRuleIds","update","G","Highcharts","Animation","timers","Fx","Legend","Pointer","MSPointer","isRequired","Tick","Time","Tooltip","Defaults","getOptions","defaultTime","setOptions","dateFormat","FormatUtilities","numberFormat","Utilities","clearTimeout","discardElement","RendererUtilities","error","extendClass","getStyle","inArray","isClass","isDOMElement","isFunction","pad","removeEvent","seriesType","stableSort","syncTimeout","useSerialIds","wrap","PieDataLabel"],"sourceRoot":""}