Hacked By AnonymousFox
{"version":3,"sources":["<anon>"],"sourcesContent":["/**\n * @license Highcharts JS v12.1.2 (2025-01-09)\n * @module highcharts/polyfills\n *\n * (c) 2009-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"highcharts/highcharts\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"highcharts\"] = factory();\n\telse\n\t\t((root[\"Highcharts\"] && root[\"Highcharts\"].error(16, true)), root[\"Highcharts\"] = factory());\n})(this, function() {\nreturn /******/ (function() { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 298:\n/***/ (function() {\n\n\n\nif (!Array.prototype.includes) {\n // eslint-disable-next-line no-extend-native\n Array.prototype.includes = function (searchElement, fromIndex) {\n return this.indexOf(searchElement, fromIndex) > -1;\n };\n}\nif (!Array.prototype.find) {\n // eslint-disable-next-line no-extend-native\n Array.prototype.find = function (predicate, thisArg) {\n for (var i = 0; i < this.length; i++) {\n if (predicate.call(thisArg, this[i], i, this)) {\n return this[i];\n }\n }\n };\n}\nif (!Object.entries) {\n Object.entries = function (obj) {\n var keys = Object.keys(obj),\n iEnd = keys.length,\n entries = [];\n for (var i = 0; i < iEnd; ++i) {\n entries.push([keys[i], obj[keys[i]]]);\n }\n return entries;\n };\n}\nif (!Object.values) {\n Object.values = function (obj) {\n var keys = Object.keys(obj),\n iEnd = keys.length,\n values = [];\n for (var i = 0; i < iEnd; ++i) {\n values.push(obj[keys[i]]);\n }\n return values;\n };\n}\n(function () {\n if (typeof window.CustomEvent === \"function\")\n return false;\n function CustomEvent(type, params) {\n params = params || { bubbles: false, cancelable: false, detail: undefined };\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(type, params.bubbles, params.cancelable, params.detail);\n return evt;\n }\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent;\n})();\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t!function() {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = function(exports, definition) {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t}();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t!function() {\n/******/ \t\t__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }\n/******/ \t}();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": function() { return /* binding */ masters_es5_highcharts_src; }\n});\n\n// EXTERNAL MODULE: ./code/es5/es-modules/masters-es5/polyfills.js\nvar polyfills = __webpack_require__(298);\n;// ./code/es5/es-modules/Core/Globals.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n * Namespace\n *\n * */\n/**\n * Shared Highcharts properties.\n * @private\n */\nvar Globals;\n(function (Globals) {\n /* *\n *\n * Constants\n *\n * */\n var _a,\n _b;\n Globals.SVG_NS = 'http://www.w3.org/2000/svg', Globals.product = 'Highcharts', Globals.version = '12.1.2', Globals.win = (typeof window !== 'undefined' ?\n window :\n {}), // eslint-disable-line node/no-unsupported-features/es-builtins\n Globals.doc = Globals.win.document, Globals.svg = (Globals.doc &&\n Globals.doc.createElementNS &&\n !!Globals.doc.createElementNS(Globals.SVG_NS, 'svg').createSVGRect), Globals.pageLang = (_b = (_a = Globals.doc === null || Globals.doc === void 0 ? void 0 : Globals.doc.documentElement) === null || _a === void 0 ? void 0 : _a.closest('[lang]')) === null || _b === void 0 ? void 0 : _b.lang, Globals.userAgent = (Globals.win.navigator && Globals.win.navigator.userAgent) || '', Globals.isChrome = Globals.win.chrome, Globals.isFirefox = Globals.userAgent.indexOf('Firefox') !== -1, Globals.isMS = /(edge|msie|trident)/i.test(Globals.userAgent) && !Globals.win.opera, Globals.isSafari = !Globals.isChrome && Globals.userAgent.indexOf('Safari') !== -1, Globals.isTouchDevice = /(Mobile|Android|Windows Phone)/.test(Globals.userAgent), Globals.isWebKit = Globals.userAgent.indexOf('AppleWebKit') !== -1, Globals.deg2rad = Math.PI * 2 / 360, Globals.marginNames = [\n 'plotTop',\n 'marginRight',\n 'marginBottom',\n 'plotLeft'\n ], Globals.noop = function () { }, Globals.supportsPassiveEvents = (function () {\n // Checks whether the browser supports passive events, (#11353).\n var supportsPassive = false;\n // Object.defineProperty doesn't work on IE as well as passive\n // events - instead of using polyfill, we can exclude IE totally.\n if (!Globals.isMS) {\n var opts = Object.defineProperty({}, 'passive', {\n get: function () {\n supportsPassive = true;\n }\n });\n if (Globals.win.addEventListener && Globals.win.removeEventListener) {\n Globals.win.addEventListener('testPassive', Globals.noop, opts);\n Globals.win.removeEventListener('testPassive', Globals.noop, opts);\n }\n }\n return supportsPassive;\n }());\n /**\n * An array containing the current chart objects in the page. A chart's\n * position in the array is preserved throughout the page's lifetime. When\n * a chart is destroyed, the array item becomes `undefined`.\n *\n * @name Highcharts.charts\n * @type {Array<Highcharts.Chart|undefined>}\n */\n Globals.charts = [];\n /**\n * A shared registry between all bundles to keep track of applied\n * compositions.\n * @private\n */\n Globals.composed = [];\n /**\n * A hook for defining additional date format specifiers. New\n * specifiers are defined as key-value pairs by using the\n * specifier as key, and a function which takes the timestamp as\n * value. This function returns the formatted portion of the\n * date.\n *\n * Using `dateFormats` is also a convenient way to define new keys for\n * complex locale-aware date formats compatible with the\n * [Intl.DateTimeFormat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat)\n * browser API, whenever the built-in formats are not sufficient.\n *\n * @sample highcharts/global/dateformats/\n * Adding support for week number\n * @sample highcharts/global/dateformats-object/\n * A locale-aware date format using `Intl.DateTimeFormat`\n *\n * @name Highcharts.dateFormats\n * @type {Record<string, Highcharts.TimeFormatCallbackFunction>}\n */\n Globals.dateFormats = {};\n /**\n * @private\n * @deprecated\n * @todo Use only `Core/Series/SeriesRegistry.seriesTypes`\n */\n Globals.seriesTypes = {};\n /**\n * @private\n */\n Globals.symbolSizes = {};\n /* *\n *\n * Properties\n *\n * */\n // eslint-disable-next-line prefer-const\n Globals.chartCount = 0;\n})(Globals || (Globals = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Core_Globals = (Globals);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Theme options that should get applied to the chart. In module mode it\n * might not be possible to change this property because of read-only\n * restrictions, instead use {@link Highcharts.setOptions}.\n *\n * @deprecated\n * @name Highcharts.theme\n * @type {Highcharts.Options}\n */\n(''); // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Utilities.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\nvar charts = Core_Globals.charts, doc = Core_Globals.doc, win = Core_Globals.win;\n/* *\n *\n * Functions\n *\n * */\n/**\n * Provide error messages for debugging, with links to online explanation. This\n * function can be overridden to provide custom error handling.\n *\n * @sample highcharts/chart/highcharts-error/\n * Custom error handler\n *\n * @function Highcharts.error\n *\n * @param {number|string} code\n * The error code. See\n * [errors.xml](https://github.com/highcharts/highcharts/blob/master/errors/errors.xml)\n * for available codes. If it is a string, the error message is printed\n * directly in the console.\n *\n * @param {boolean} [stop=false]\n * Whether to throw an error or just log a warning in the console.\n *\n * @param {Highcharts.Chart} [chart]\n * Reference to the chart that causes the error. Used in 'debugger'\n * module to display errors directly on the chart.\n * Important note: This argument is undefined for errors that lack\n * access to the Chart instance. In such case, the error will be\n * displayed on the last created chart.\n *\n * @param {Highcharts.Dictionary<string>} [params]\n * Additional parameters for the generated message.\n *\n * @return {void}\n */\nfunction error(code, stop, chart, params) {\n var severity = stop ? 'Highcharts error' : 'Highcharts warning';\n if (code === 32) {\n code = \"\" + severity + \": Deprecated member\";\n }\n var isCode = isNumber(code);\n var message = isCode ?\n \"\" + severity + \" #\" + code + \": www.highcharts.com/errors/\" + code + \"/\" :\n code.toString();\n var defaultHandler = function () {\n if (stop) {\n throw new Error(message);\n }\n // Else ...\n if (win.console &&\n error.messages.indexOf(message) === -1 // Prevent console flooting\n ) {\n console.warn(message); // eslint-disable-line no-console\n }\n };\n if (typeof params !== 'undefined') {\n var additionalMessages_1 = '';\n if (isCode) {\n message += '?';\n }\n objectEach(params, function (value, key) {\n additionalMessages_1 += \"\\n - \".concat(key, \": \").concat(value);\n if (isCode) {\n message += encodeURI(key) + '=' + encodeURI(value);\n }\n });\n message += additionalMessages_1;\n }\n fireEvent(Core_Globals, 'displayError', { chart: chart, code: code, message: message, params: params }, defaultHandler);\n error.messages.push(message);\n}\n(function (error) {\n error.messages = [];\n})(error || (error = {}));\n/**\n * Utility function to deep merge two or more objects and return a third object.\n * If the first argument is true, the contents of the second object is copied\n * into the first object. The merge function can also be used with a single\n * object argument to create a deep copy of an object.\n *\n * @function Highcharts.merge<T>\n *\n * @param {true | T} extendOrSource\n * Whether to extend the left-side object,\n * or the first object to merge as a deep copy.\n *\n * @param {...Array<object|undefined>} [sources]\n * Object(s) to merge into the previous one.\n *\n * @return {T}\n * The merged object. If the first argument is true, the return is the\n * same as the second argument.\n */\nfunction merge(extendOrSource) {\n var sources = [];\n for (var _a = 1; _a < arguments.length; _a++) {\n sources[_a - 1] = arguments[_a];\n }\n var i,\n args = __spreadArray([extendOrSource],\n sources,\n true),\n ret = {};\n var doCopy = function (copy,\n original) {\n // An object is replacing a primitive\n if (typeof copy !== 'object') {\n copy = {};\n }\n objectEach(original, function (value, key) {\n // Prototype pollution (#14883)\n if (key === '__proto__' || key === 'constructor') {\n return;\n }\n // Copy the contents of objects, but not arrays or DOM nodes\n if (isObject(value, true) &&\n !isClass(value) &&\n !isDOMElement(value)) {\n copy[key] = doCopy(copy[key] || {}, value);\n // Primitives and arrays are copied over directly\n }\n else {\n copy[key] = original[key];\n }\n });\n return copy;\n };\n // If first argument is true, copy into the existing object. Used in\n // setOptions.\n if (extendOrSource === true) {\n ret = args[1];\n args = Array.prototype.slice.call(args, 2);\n }\n // For each argument, extend the return\n var len = args.length;\n for (i = 0; i < len; i++) {\n ret = doCopy(ret, args[i]);\n }\n return ret;\n}\n/**\n * Constrain a value to within a lower and upper threshold.\n *\n * @private\n * @param {number} value The initial value\n * @param {number} min The lower threshold\n * @param {number} max The upper threshold\n * @return {number} Returns a number value within min and max.\n */\nfunction clamp(value, min, max) {\n return value > min ? value < max ? value : max : min;\n}\n/**\n * Utility for crisping a line position to the nearest full pixel depening on\n * the line width\n * @param {number} value The raw pixel position\n * @param {number} lineWidth The line width\n * @param {boolean} [inverted] Whether the containing group is inverted.\n * Crisping round numbers on the y-scale need to go\n * to the other side because the coordinate system\n * is flipped (scaleY is -1)\n * @return {number} The pixel position to use for a crisp display\n */\nfunction crisp(value, lineWidth, inverted) {\n if (lineWidth === void 0) { lineWidth = 0; }\n var mod = lineWidth % 2 / 2,\n inverter = inverted ? -1 : 1;\n return (Math.round(value * inverter - mod) + mod) * inverter;\n}\n// eslint-disable-next-line valid-jsdoc\n/**\n * Return the deep difference between two objects. It can either return the new\n * properties, or optionally return the old values of new properties.\n * @private\n */\nfunction diffObjects(newer, older, keepOlder, collectionsWithUpdate) {\n var ret = {};\n /**\n * Recurse over a set of options and its current values, and store the\n * current values in the ret object.\n */\n function diff(newer, older, ret, depth) {\n var keeper = keepOlder ? older : newer;\n objectEach(newer, function (newerVal, key) {\n if (!depth &&\n collectionsWithUpdate &&\n collectionsWithUpdate.indexOf(key) > -1 &&\n older[key]) {\n newerVal = splat(newerVal);\n ret[key] = [];\n // Iterate over collections like series, xAxis or yAxis and map\n // the items by index.\n for (var i = 0; i < Math.max(newerVal.length, older[key].length); i++) {\n // Item exists in current data (#6347)\n if (older[key][i]) {\n // If the item is missing from the new data, we need to\n // save the whole config structure. Like when\n // responsively updating from a dual axis layout to a\n // single axis and back (#13544).\n if (newerVal[i] === void 0) {\n ret[key][i] = older[key][i];\n // Otherwise, proceed\n }\n else {\n ret[key][i] = {};\n diff(newerVal[i], older[key][i], ret[key][i], depth + 1);\n }\n }\n }\n }\n else if (isObject(newerVal, true) &&\n !newerVal.nodeType // #10044\n ) {\n ret[key] = isArray(newerVal) ? [] : {};\n diff(newerVal, older[key] || {}, ret[key], depth + 1);\n // Delete empty nested objects\n if (Object.keys(ret[key]).length === 0 &&\n // Except colorAxis which is a special case where the empty\n // object means it is enabled. Which is unfortunate and we\n // should try to find a better way.\n !(key === 'colorAxis' && depth === 0)) {\n delete ret[key];\n }\n }\n else if (newer[key] !== older[key] ||\n // If the newer key is explicitly undefined, keep it (#10525)\n (key in newer && !(key in older))) {\n if (key !== '__proto__' && key !== 'constructor') {\n ret[key] = keeper[key];\n }\n }\n });\n }\n diff(newer, older, ret, 0);\n return ret;\n}\n/**\n * Shortcut for parseInt\n *\n * @private\n * @function Highcharts.pInt\n *\n * @param {*} s\n * any\n *\n * @param {number} [mag]\n * Magnitude\n *\n * @return {number}\n * number\n */\nfunction pInt(s, mag) {\n return parseInt(s, mag || 10);\n}\n/**\n * Utility function to check for string type.\n *\n * @function Highcharts.isString\n *\n * @param {*} s\n * The item to check.\n *\n * @return {boolean}\n * True if the argument is a string.\n */\nfunction isString(s) {\n return typeof s === 'string';\n}\n/**\n * Utility function to check if an item is an array.\n *\n * @function Highcharts.isArray\n *\n * @param {*} obj\n * The item to check.\n *\n * @return {boolean}\n * True if the argument is an array.\n */\nfunction isArray(obj) {\n var str = Object.prototype.toString.call(obj);\n return str === '[object Array]' || str === '[object Array Iterator]';\n}\n/**\n * Utility function to check if an item is of type object.\n *\n * @function Highcharts.isObject\n *\n * @param {*} obj\n * The item to check.\n *\n * @param {boolean} [strict=false]\n * Also checks that the object is not an array.\n *\n * @return {boolean}\n * True if the argument is an object.\n */\nfunction isObject(obj, strict) {\n return (!!obj &&\n typeof obj === 'object' &&\n (!strict || !isArray(obj))); // eslint-disable-line @typescript-eslint/no-explicit-any\n}\n/**\n * Utility function to check if an Object is a HTML Element.\n *\n * @function Highcharts.isDOMElement\n *\n * @param {*} obj\n * The item to check.\n *\n * @return {boolean}\n * True if the argument is a HTML Element.\n */\nfunction isDOMElement(obj) {\n return isObject(obj) && typeof obj.nodeType === 'number';\n}\n/**\n * Utility function to check if an Object is a class.\n *\n * @function Highcharts.isClass\n *\n * @param {object|undefined} obj\n * The item to check.\n *\n * @return {boolean}\n * True if the argument is a class.\n */\nfunction isClass(obj) {\n var c = obj && obj.constructor;\n return !!(isObject(obj, true) &&\n !isDOMElement(obj) &&\n (c && c.name && c.name !== 'Object'));\n}\n/**\n * Utility function to check if an item is a number and it is finite (not NaN,\n * Infinity or -Infinity).\n *\n * @function Highcharts.isNumber\n *\n * @param {*} n\n * The item to check.\n *\n * @return {boolean}\n * True if the item is a finite number\n */\nfunction isNumber(n) {\n return typeof n === 'number' && !isNaN(n) && n < Infinity && n > -Infinity;\n}\n/**\n * Remove the last occurence of an item from an array.\n *\n * @function Highcharts.erase\n *\n * @param {Array<*>} arr\n * The array.\n *\n * @param {*} item\n * The item to remove.\n *\n * @return {void}\n */\nfunction erase(arr, item) {\n var i = arr.length;\n while (i--) {\n if (arr[i] === item) {\n arr.splice(i, 1);\n break;\n }\n }\n}\n/**\n * Insert a series or an axis in a collection with other items, either the\n * chart series or yAxis series or axis collections, in the correct order\n * according to the index option and whether it is internal. Used internally\n * when adding series and axes.\n *\n * @private\n * @function Highcharts.Chart#insertItem\n * @param {Highcharts.Series|Highcharts.Axis} item\n * The item to insert\n * @param {Array<Highcharts.Series>|Array<Highcharts.Axis>} collection\n * A collection of items, like `chart.series` or `xAxis.series`.\n * @return {number} The index of the series in the collection.\n */\nfunction insertItem(item, collection) {\n var indexOption = item.options.index,\n length = collection.length;\n var i;\n for (\n // Internal item (navigator) should always be pushed to the end\n i = item.options.isInternal ? length : 0; i < length + 1; i++) {\n if (\n // No index option, reached the end of the collection,\n // equivalent to pushing\n !collection[i] ||\n // Handle index option, the element to insert has lower index\n (isNumber(indexOption) &&\n indexOption < pick(collection[i].options.index, collection[i]._i)) ||\n // Insert the new item before other internal items\n // (navigator)\n collection[i].options.isInternal) {\n collection.splice(i, 0, item);\n break;\n }\n }\n return i;\n}\n/**\n * Adds an item to an array, if it is not present in the array.\n *\n * @function Highcharts.pushUnique\n *\n * @param {Array<unknown>} array\n * The array to add the item to.\n *\n * @param {unknown} item\n * The item to add.\n *\n * @return {boolean}\n * Returns true, if the item was not present and has been added.\n */\nfunction pushUnique(array, item) {\n return array.indexOf(item) < 0 && !!array.push(item);\n}\n/**\n * Check if an object is null or undefined.\n *\n * @function Highcharts.defined\n *\n * @param {*} obj\n * The object to check.\n *\n * @return {boolean}\n * False if the object is null or undefined, otherwise true.\n */\nfunction defined(obj) {\n return typeof obj !== 'undefined' && obj !== null;\n}\n/**\n * Set or get an attribute or an object of attributes.\n *\n * To use as a setter, pass a key and a value, or let the second argument be a\n * collection of keys and values. When using a collection, passing a value of\n * `null` or `undefined` will remove the attribute.\n *\n * To use as a getter, pass only a string as the second argument.\n *\n * @function Highcharts.attr\n *\n * @param {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement} elem\n * The DOM element to receive the attribute(s).\n *\n * @param {string|Highcharts.HTMLAttributes|Highcharts.SVGAttributes} [keyOrAttribs]\n * The property or an object of key-value pairs.\n *\n * @param {number|string} [value]\n * The value if a single property is set.\n *\n * @return {string|null|undefined}\n * When used as a getter, return the value.\n */\nfunction attr(elem, keyOrAttribs, value) {\n var isGetter = isString(keyOrAttribs) && !defined(value);\n var ret;\n var attrSingle = function (value,\n key) {\n // Set the value\n if (defined(value)) {\n elem.setAttribute(key,\n value);\n // Get the value\n }\n else if (isGetter) {\n ret = elem.getAttribute(key);\n // IE7 and below cannot get class through getAttribute (#7850)\n if (!ret && key === 'class') {\n ret = elem.getAttribute(key + 'Name');\n }\n // Remove the value\n }\n else {\n elem.removeAttribute(key);\n }\n };\n // If keyOrAttribs is a string\n if (isString(keyOrAttribs)) {\n attrSingle(value, keyOrAttribs);\n // Else if keyOrAttribs is defined, it is a hash of key/value pairs\n }\n else {\n objectEach(keyOrAttribs, attrSingle);\n }\n return ret;\n}\n/**\n * Check if an element is an array, and if not, make it into an array.\n *\n * @function Highcharts.splat\n *\n * @param {*} obj\n * The object to splat.\n *\n * @return {Array}\n * The produced or original array.\n */\nfunction splat(obj) {\n return isArray(obj) ? obj : [obj];\n}\n/**\n * Set a timeout if the delay is given, otherwise perform the function\n * synchronously.\n *\n * @function Highcharts.syncTimeout\n *\n * @param {Function} fn\n * The function callback.\n *\n * @param {number} delay\n * Delay in milliseconds.\n *\n * @param {*} [context]\n * An optional context to send to the function callback.\n *\n * @return {number}\n * An identifier for the timeout that can later be cleared with\n * Highcharts.clearTimeout. Returns -1 if there is no timeout.\n */\nfunction syncTimeout(fn, delay, context) {\n if (delay > 0) {\n return setTimeout(fn, delay, context);\n }\n fn.call(0, context);\n return -1;\n}\n/**\n * Internal clear timeout. The function checks that the `id` was not removed\n * (e.g. by `chart.destroy()`). For the details see\n * [issue #7901](https://github.com/highcharts/highcharts/issues/7901).\n *\n * @function Highcharts.clearTimeout\n *\n * @param {number|undefined} id\n * Id of a timeout.\n */\nfunction internalClearTimeout(id) {\n if (defined(id)) {\n clearTimeout(id);\n }\n}\n/* eslint-disable valid-jsdoc */\n/**\n * Utility function to extend an object with the members of another.\n *\n * @function Highcharts.extend<T>\n *\n * @param {T|undefined} a\n * The object to be extended.\n *\n * @param {Partial<T>} b\n * The object to add to the first one.\n *\n * @return {T}\n * Object a, the original object.\n */\nfunction extend(a, b) {\n /* eslint-enable valid-jsdoc */\n var n;\n if (!a) {\n a = {};\n }\n for (n in b) { // eslint-disable-line guard-for-in\n a[n] = b[n];\n }\n return a;\n}\n/* eslint-disable valid-jsdoc */\n/**\n * Return the first value that is not null or undefined.\n *\n * @function Highcharts.pick<T>\n *\n * @param {...Array<T|null|undefined>} items\n * Variable number of arguments to inspect.\n *\n * @return {T}\n * The value of the first argument that is not null or undefined.\n */\nfunction pick() {\n var args = arguments;\n var length = args.length;\n for (var i = 0; i < length; i++) {\n var arg = args[i];\n if (typeof arg !== 'undefined' && arg !== null) {\n return arg;\n }\n }\n}\n/**\n * Set CSS on a given element.\n *\n * @function Highcharts.css\n *\n * @param {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement} el\n * An HTML DOM element.\n *\n * @param {Highcharts.CSSObject} styles\n * Style object with camel case property names.\n *\n * @return {void}\n */\nfunction css(el, styles) {\n extend(el.style, styles);\n}\n/**\n * Utility function to create an HTML element with attributes and styles.\n *\n * @function Highcharts.createElement\n *\n * @param {string} tag\n * The HTML tag.\n *\n * @param {Highcharts.HTMLAttributes} [attribs]\n * Attributes as an object of key-value pairs.\n *\n * @param {Highcharts.CSSObject} [styles]\n * Styles as an object of key-value pairs.\n *\n * @param {Highcharts.HTMLDOMElement} [parent]\n * The parent HTML object.\n *\n * @param {boolean} [nopad=false]\n * If true, remove all padding, border and margin.\n *\n * @return {Highcharts.HTMLDOMElement}\n * The created DOM element.\n */\nfunction createElement(tag, attribs, styles, parent, nopad) {\n var el = doc.createElement(tag);\n if (attribs) {\n extend(el, attribs);\n }\n if (nopad) {\n css(el, { padding: '0', border: 'none', margin: '0' });\n }\n if (styles) {\n css(el, styles);\n }\n if (parent) {\n parent.appendChild(el);\n }\n return el;\n}\n// eslint-disable-next-line valid-jsdoc\n/**\n * Extend a prototyped class by new members.\n *\n * @deprecated\n * @function Highcharts.extendClass<T>\n *\n * @param {Highcharts.Class<T>} parent\n * The parent prototype to inherit.\n *\n * @param {Highcharts.Dictionary<*>} members\n * A collection of prototype members to add or override compared to the\n * parent prototype.\n *\n * @return {Highcharts.Class<T>}\n * A new prototype.\n */\nfunction extendClass(parent, members) {\n var obj = (function () { });\n obj.prototype = new parent(); // eslint-disable-line new-cap\n extend(obj.prototype, members);\n return obj;\n}\n/**\n * Left-pad a string to a given length by adding a character repetitively.\n *\n * @function Highcharts.pad\n *\n * @param {number} number\n * The input string or number.\n *\n * @param {number} [length]\n * The desired string length.\n *\n * @param {string} [padder=0]\n * The character to pad with.\n *\n * @return {string}\n * The padded string.\n */\nfunction pad(number, length, padder) {\n return new Array((length || 2) +\n 1 -\n String(number)\n .replace('-', '')\n .length).join(padder || '0') + number;\n}\n/**\n * Return a length based on either the integer value, or a percentage of a base.\n *\n * @function Highcharts.relativeLength\n *\n * @param {Highcharts.RelativeSize} value\n * A percentage string or a number.\n *\n * @param {number} base\n * The full length that represents 100%.\n *\n * @param {number} [offset=0]\n * A pixel offset to apply for percentage values. Used internally in\n * axis positioning.\n *\n * @return {number}\n * The computed length.\n */\nfunction relativeLength(value, base, offset) {\n return (/%$/).test(value) ?\n (base * parseFloat(value) / 100) + (offset || 0) :\n parseFloat(value);\n}\n/**\n * Replaces text in a string with a given replacement in a loop to catch nested\n * matches after previous replacements.\n *\n * @function Highcharts.replaceNested\n *\n * @param {string} text\n * Text to search and modify.\n *\n * @param {...Array<(RegExp|string)>} replacements\n * One or multiple tuples with search pattern (`[0]: (string|RegExp)`) and\n * replacement (`[1]: string`) for matching text.\n *\n * @return {string}\n * Text with replacements.\n */\nfunction replaceNested(text) {\n var replacements = [];\n for (var _a = 1; _a < arguments.length; _a++) {\n replacements[_a - 1] = arguments[_a];\n }\n var previous,\n replacement;\n do {\n previous = text;\n for (var _b = 0, replacements_1 = replacements; _b < replacements_1.length; _b++) {\n replacement = replacements_1[_b];\n text = text.replace(replacement[0], replacement[1]);\n }\n } while (text !== previous);\n return text;\n}\n/**\n * Wrap a method with extended functionality, preserving the original function.\n *\n * @function Highcharts.wrap\n *\n * @param {*} obj\n * The context object that the method belongs to. In real cases, this is\n * often a prototype.\n *\n * @param {string} method\n * The name of the method to extend.\n *\n * @param {Highcharts.WrapProceedFunction} func\n * A wrapper function callback. This function is called with the same\n * arguments as the original function, except that the original function\n * is unshifted and passed as the first argument.\n */\nfunction wrap(obj, method, func) {\n var proceed = obj[method];\n obj[method] = function () {\n var outerArgs = arguments,\n scope = this;\n return func.apply(this, [\n function () {\n return proceed.apply(scope, arguments.length ? arguments : outerArgs);\n }\n ].concat([].slice.call(arguments)));\n };\n}\n/**\n * Get the magnitude of a number.\n *\n * @function Highcharts.getMagnitude\n *\n * @param {number} num\n * The number.\n *\n * @return {number}\n * The magnitude, where 1-9 are magnitude 1, 10-99 magnitude 2 etc.\n */\nfunction getMagnitude(num) {\n return Math.pow(10, Math.floor(Math.log(num) / Math.LN10));\n}\n/**\n * Take an interval and normalize it to multiples of round numbers.\n *\n * @deprecated\n * @function Highcharts.normalizeTickInterval\n *\n * @param {number} interval\n * The raw, un-rounded interval.\n *\n * @param {Array<*>} [multiples]\n * Allowed multiples.\n *\n * @param {number} [magnitude]\n * The magnitude of the number.\n *\n * @param {boolean} [allowDecimals]\n * Whether to allow decimals.\n *\n * @param {boolean} [hasTickAmount]\n * If it has tickAmount, avoid landing on tick intervals lower than\n * original.\n *\n * @return {number}\n * The normalized interval.\n *\n * @todo\n * Move this function to the Axis prototype. It is here only for historical\n * reasons.\n */\nfunction normalizeTickInterval(interval, multiples, magnitude, allowDecimals, hasTickAmount) {\n var i,\n retInterval = interval;\n // Round to a tenfold of 1, 2, 2.5 or 5\n magnitude = pick(magnitude, getMagnitude(interval));\n var normalized = interval / magnitude;\n // Multiples for a linear scale\n if (!multiples) {\n multiples = hasTickAmount ?\n // Finer grained ticks when the tick amount is hard set, including\n // when alignTicks is true on multiple axes (#4580).\n [1, 1.2, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10] :\n // Else, let ticks fall on rounder numbers\n [1, 2, 2.5, 5, 10];\n // The allowDecimals option\n if (allowDecimals === false) {\n if (magnitude === 1) {\n multiples = multiples.filter(function (num) {\n return num % 1 === 0;\n });\n }\n else if (magnitude <= 0.1) {\n multiples = [1 / magnitude];\n }\n }\n }\n // Normalize the interval to the nearest multiple\n for (i = 0; i < multiples.length; i++) {\n retInterval = multiples[i];\n // Only allow tick amounts smaller than natural\n if ((hasTickAmount &&\n retInterval * magnitude >= interval) ||\n (!hasTickAmount &&\n (normalized <=\n (multiples[i] +\n (multiples[i + 1] || multiples[i])) / 2))) {\n break;\n }\n }\n // Multiply back to the correct magnitude. Correct floats to appropriate\n // precision (#6085).\n retInterval = correctFloat(retInterval * magnitude, -Math.round(Math.log(0.001) / Math.LN10));\n return retInterval;\n}\n/**\n * Sort an object array and keep the order of equal items. The ECMAScript\n * standard does not specify the behaviour when items are equal.\n *\n * @function Highcharts.stableSort\n *\n * @param {Array<*>} arr\n * The array to sort.\n *\n * @param {Function} sortFunction\n * The function to sort it with, like with regular Array.prototype.sort.\n */\nfunction stableSort(arr, sortFunction) {\n // @todo It seems like Chrome since v70 sorts in a stable way internally,\n // plus all other browsers do it, so over time we may be able to remove this\n // function\n var length = arr.length;\n var sortValue,\n i;\n // Add index to each item\n for (i = 0; i < length; i++) {\n arr[i].safeI = i; // Stable sort index\n }\n arr.sort(function (a, b) {\n sortValue = sortFunction(a, b);\n return sortValue === 0 ? a.safeI - b.safeI : sortValue;\n });\n // Remove index from items\n for (i = 0; i < length; i++) {\n delete arr[i].safeI; // Stable sort index\n }\n}\n/**\n * Non-recursive method to find the lowest member of an array. `Math.min` raises\n * a maximum call stack size exceeded error in Chrome when trying to apply more\n * than 150.000 points. This method is slightly slower, but safe.\n *\n * @function Highcharts.arrayMin\n *\n * @param {Array<*>} data\n * An array of numbers.\n *\n * @return {number}\n * The lowest number.\n */\nfunction arrayMin(data) {\n var i = data.length,\n min = data[0];\n while (i--) {\n if (data[i] < min) {\n min = data[i];\n }\n }\n return min;\n}\n/**\n * Non-recursive method to find the lowest member of an array. `Math.max` raises\n * a maximum call stack size exceeded error in Chrome when trying to apply more\n * than 150.000 points. This method is slightly slower, but safe.\n *\n * @function Highcharts.arrayMax\n *\n * @param {Array<*>} data\n * An array of numbers.\n *\n * @return {number}\n * The highest number.\n */\nfunction arrayMax(data) {\n var i = data.length,\n max = data[0];\n while (i--) {\n if (data[i] > max) {\n max = data[i];\n }\n }\n return max;\n}\n/**\n * Utility method that destroys any SVGElement instances that are properties on\n * the given object. It loops all properties and invokes destroy if there is a\n * destroy method. The property is then delete.\n *\n * @function Highcharts.destroyObjectProperties\n *\n * @param {*} obj\n * The object to destroy properties on.\n *\n * @param {*} [except]\n * Exception, do not destroy this property, only delete it.\n */\nfunction destroyObjectProperties(obj, except, destructablesOnly) {\n objectEach(obj, function (val, n) {\n // If the object is non-null and destroy is defined\n if (val !== except && (val === null || val === void 0 ? void 0 : val.destroy)) {\n // Invoke the destroy\n val.destroy();\n }\n // Delete the property from the object\n if ((val === null || val === void 0 ? void 0 : val.destroy) || !destructablesOnly) {\n delete obj[n];\n }\n });\n}\n/**\n * Discard a HTML element\n *\n * @function Highcharts.discardElement\n *\n * @param {Highcharts.HTMLDOMElement} element\n * The HTML node to discard.\n */\nfunction discardElement(element) {\n if (element && element.parentElement) {\n element.parentElement.removeChild(element);\n }\n}\n/**\n * Fix JS round off float errors.\n *\n * @function Highcharts.correctFloat\n *\n * @param {number} num\n * A float number to fix.\n *\n * @param {number} [prec=14]\n * The precision.\n *\n * @return {number}\n * The corrected float number.\n */\nfunction correctFloat(num, prec) {\n // When the number is higher than 1e14 use the number (#16275)\n return num > 1e14 ? num : parseFloat(num.toPrecision(prec || 14));\n}\n/**\n * The time unit lookup\n *\n * @ignore\n */\nvar timeUnits = {\n millisecond: 1,\n second: 1000,\n minute: 60000,\n hour: 3600000,\n day: 24 * 3600000,\n week: 7 * 24 * 3600000,\n month: 28 * 24 * 3600000,\n year: 364 * 24 * 3600000\n};\n/**\n * Easing definition\n *\n * @private\n * @function Math.easeInOutSine\n *\n * @param {number} pos\n * Current position, ranging from 0 to 1.\n *\n * @return {number}\n * Ease result\n */\nMath.easeInOutSine = function (pos) {\n return -0.5 * (Math.cos(Math.PI * pos) - 1);\n};\n/**\n * Convenience function to get the align factor, used several places for\n * computing positions\n * @private\n */\nvar getAlignFactor = function (align) {\n if (align === void 0) { align = ''; }\n return ({\n center: 0.5,\n right: 1,\n middle: 0.5,\n bottom: 1\n }[align] || 0);\n};\n/**\n * Find the closest distance between two values of a two-dimensional array\n * @private\n * @function Highcharts.getClosestDistance\n *\n * @param {Array<Array<number>>} arrays\n * An array of arrays of numbers\n *\n * @return {number | undefined}\n * The closest distance between values\n */\nfunction getClosestDistance(arrays, onError) {\n var allowNegative = !onError;\n var closest,\n loopLength,\n distance,\n i;\n arrays.forEach(function (xData) {\n if (xData.length > 1) {\n loopLength = xData.length - 1;\n for (i = loopLength; i > 0; i--) {\n distance = xData[i] - xData[i - 1];\n if (distance < 0 && !allowNegative) {\n onError === null || onError === void 0 ? void 0 : onError();\n // Only one call\n onError = void 0;\n }\n else if (distance && (typeof closest === 'undefined' || distance < closest)) {\n closest = distance;\n }\n }\n }\n });\n return closest;\n}\n/**\n * Returns the value of a property path on a given object.\n *\n * @private\n * @function getNestedProperty\n *\n * @param {string} path\n * Path to the property, for example `custom.myValue`.\n *\n * @param {unknown} obj\n * Instance containing the property on the specific path.\n *\n * @return {unknown}\n * The unknown property value.\n */\nfunction getNestedProperty(path, parent) {\n var pathElements = path.split('.');\n while (pathElements.length && defined(parent)) {\n var pathElement = pathElements.shift();\n // Filter on the key\n if (typeof pathElement === 'undefined' ||\n pathElement === '__proto__') {\n return; // Undefined\n }\n if (pathElement === 'this') {\n var thisProp = void 0;\n if (isObject(parent)) {\n thisProp = parent['@this'];\n }\n return thisProp !== null && thisProp !== void 0 ? thisProp : parent;\n }\n var child = parent[pathElement.replace(/[\\\\'\"]/g, '')];\n // Filter on the child\n if (!defined(child) ||\n typeof child === 'function' ||\n typeof child.nodeType === 'number' ||\n child === win) {\n return; // Undefined\n }\n // Else, proceed\n parent = child;\n }\n return parent;\n}\n/**\n * Get the computed CSS value for given element and property, only for numerical\n * properties. For width and height, the dimension of the inner box (excluding\n * padding) is returned. Used for fitting the chart within the container.\n *\n * @function Highcharts.getStyle\n *\n * @param {Highcharts.HTMLDOMElement} el\n * An HTML element.\n *\n * @param {string} prop\n * The property name.\n *\n * @param {boolean} [toInt=true]\n * Parse to integer.\n *\n * @return {number|string|undefined}\n * The style value.\n */\nfunction getStyle(el, prop, toInt) {\n var style;\n // For width and height, return the actual inner pixel size (#4913)\n if (prop === 'width') {\n var offsetWidth = Math.min(el.offsetWidth,\n el.scrollWidth);\n // In flex boxes, we need to use getBoundingClientRect and floor it,\n // because scrollWidth doesn't support subpixel precision (#6427) ...\n var boundingClientRectWidth = el.getBoundingClientRect &&\n el.getBoundingClientRect().width;\n // ...unless if the containing div or its parents are transform-scaled\n // down, in which case the boundingClientRect can't be used as it is\n // also scaled down (#9871, #10498).\n if (boundingClientRectWidth < offsetWidth &&\n boundingClientRectWidth >= offsetWidth - 1) {\n offsetWidth = Math.floor(boundingClientRectWidth);\n }\n return Math.max(0, // #8377\n (offsetWidth -\n (getStyle(el, 'padding-left', true) || 0) -\n (getStyle(el, 'padding-right', true) || 0)));\n }\n if (prop === 'height') {\n return Math.max(0, // #8377\n (Math.min(el.offsetHeight, el.scrollHeight) -\n (getStyle(el, 'padding-top', true) || 0) -\n (getStyle(el, 'padding-bottom', true) || 0)));\n }\n // Otherwise, get the computed style\n var css = win.getComputedStyle(el,\n void 0); // eslint-disable-line no-undefined\n if (css) {\n style = css.getPropertyValue(prop);\n if (pick(toInt, prop !== 'opacity')) {\n style = pInt(style);\n }\n }\n return style;\n}\n/**\n * Return the value of the first element in the array that satisfies the\n * provided testing function.\n *\n * @function Highcharts.find<T>\n *\n * @param {Array<T>} arr\n * The array to test.\n *\n * @param {Function} callback\n * The callback function. The function receives the item as the first\n * argument. Return `true` if this item satisfies the condition.\n *\n * @return {T|undefined}\n * The value of the element.\n */\nvar find = Array.prototype.find ?\n function (arr, callback) {\n return arr.find(callback);\n } :\n // Legacy implementation. PhantomJS, IE <= 11 etc. #7223.\n function (arr, callback) {\n var i;\n var length = arr.length;\n for (i = 0; i < length; i++) {\n if (callback(arr[i], i)) { // eslint-disable-line node/callback-return\n return arr[i];\n }\n }\n };\n/**\n * Get the element's offset position, corrected for `overflow: auto`.\n *\n * @function Highcharts.offset\n *\n * @param {global.Element} el\n * The DOM element.\n *\n * @return {Highcharts.OffsetObject}\n * An object containing `left` and `top` properties for the position in\n * the page.\n */\nfunction offset(el) {\n var docElem = doc.documentElement,\n box = (el.parentElement || el.parentNode) ?\n el.getBoundingClientRect() :\n { top: 0,\n left: 0,\n width: 0,\n height: 0 };\n return {\n top: box.top + (win.pageYOffset || docElem.scrollTop) -\n (docElem.clientTop || 0),\n left: box.left + (win.pageXOffset || docElem.scrollLeft) -\n (docElem.clientLeft || 0),\n width: box.width,\n height: box.height\n };\n}\n/* eslint-disable valid-jsdoc */\n/**\n * Iterate over object key pairs in an object.\n *\n * @function Highcharts.objectEach<T>\n *\n * @param {*} obj\n * The object to iterate over.\n *\n * @param {Highcharts.ObjectEachCallbackFunction<T>} fn\n * The iterator callback. It passes three arguments:\n * * value - The property value.\n * * key - The property key.\n * * obj - The object that objectEach is being applied to.\n *\n * @param {T} [ctx]\n * The context.\n */\nfunction objectEach(obj, fn, ctx) {\n /* eslint-enable valid-jsdoc */\n for (var key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n fn.call(ctx || obj[key], obj[key], key, obj);\n }\n }\n}\n/* eslint-disable valid-jsdoc */\n/**\n * Add an event listener.\n *\n * @function Highcharts.addEvent<T>\n *\n * @param {Highcharts.Class<T>|T} el\n * The element or object to add a listener to. It can be a\n * {@link HTMLDOMElement}, an {@link SVGElement} or any other object.\n *\n * @param {string} type\n * The event type.\n *\n * @param {Highcharts.EventCallbackFunction<T>|Function} fn\n * The function callback to execute when the event is fired.\n *\n * @param {Highcharts.EventOptionsObject} [options]\n * Options for adding the event.\n *\n * @sample highcharts/members/addevent\n * Use a general `render` event to draw shapes on a chart\n *\n * @return {Function}\n * A callback function to remove the added event.\n */\nfunction addEvent(el, type, fn, options) {\n /* eslint-enable valid-jsdoc */\n if (options === void 0) { options = {}; }\n // Add hcEvents to either the prototype (in case we're running addEvent on a\n // class) or the instance. If hasOwnProperty('hcEvents') is false, it is\n // inherited down the prototype chain, in which case we need to set the\n // property on this instance (which may itself be a prototype).\n var owner = typeof el === 'function' && el.prototype || el;\n if (!Object.hasOwnProperty.call(owner, 'hcEvents')) {\n owner.hcEvents = {};\n }\n var events = owner.hcEvents;\n // Allow click events added to points, otherwise they will be prevented by\n // the TouchPointer.pinch function after a pinch zoom operation (#7091).\n if (Core_Globals.Point && // Without H a dependency loop occurs\n el instanceof Core_Globals.Point &&\n el.series &&\n el.series.chart) {\n el.series.chart.runTrackerClick = true;\n }\n // Handle DOM events\n // If the browser supports passive events, add it to improve performance\n // on touch events (#11353).\n var addEventListener = el.addEventListener;\n if (addEventListener) {\n addEventListener.call(el, type, fn, Core_Globals.supportsPassiveEvents ? {\n passive: options.passive === void 0 ?\n type.indexOf('touch') !== -1 : options.passive,\n capture: false\n } : false);\n }\n if (!events[type]) {\n events[type] = [];\n }\n var eventObject = {\n fn: fn,\n order: typeof options.order === 'number' ? options.order : Infinity\n };\n events[type].push(eventObject);\n // Order the calls\n events[type].sort(function (a, b) { return a.order - b.order; });\n // Return a function that can be called to remove this event.\n return function () {\n removeEvent(el, type, fn);\n };\n}\n/* eslint-disable valid-jsdoc */\n/**\n * Remove an event that was added with {@link Highcharts#addEvent}.\n *\n * @function Highcharts.removeEvent<T>\n *\n * @param {Highcharts.Class<T>|T} el\n * The element to remove events on.\n *\n * @param {string} [type]\n * The type of events to remove. If undefined, all events are removed\n * from the element.\n *\n * @param {Highcharts.EventCallbackFunction<T>} [fn]\n * The specific callback to remove. If undefined, all events that match\n * the element and optionally the type are removed.\n *\n * @return {void}\n */\nfunction removeEvent(el, type, fn) {\n /* eslint-enable valid-jsdoc */\n /**\n * @private\n */\n function removeOneEvent(type, fn) {\n var removeEventListener = el.removeEventListener;\n if (removeEventListener) {\n removeEventListener.call(el, type, fn, false);\n }\n }\n /**\n * @private\n */\n function removeAllEvents(eventCollection) {\n var types,\n len;\n if (!el.nodeName) {\n return; // Break on non-DOM events\n }\n if (type) {\n types = {};\n types[type] = true;\n }\n else {\n types = eventCollection;\n }\n objectEach(types, function (_val, n) {\n if (eventCollection[n]) {\n len = eventCollection[n].length;\n while (len--) {\n removeOneEvent(n, eventCollection[n][len].fn);\n }\n }\n });\n }\n var owner = typeof el === 'function' && el.prototype || el;\n if (Object.hasOwnProperty.call(owner, 'hcEvents')) {\n var events = owner.hcEvents;\n if (type) {\n var typeEvents = (events[type] || []);\n if (fn) {\n events[type] = typeEvents.filter(function (obj) {\n return fn !== obj.fn;\n });\n removeOneEvent(type, fn);\n }\n else {\n removeAllEvents(events);\n events[type] = [];\n }\n }\n else {\n removeAllEvents(events);\n delete owner.hcEvents;\n }\n }\n}\n/* eslint-disable valid-jsdoc */\n/**\n * Fire an event that was registered with {@link Highcharts#addEvent}.\n *\n * @function Highcharts.fireEvent<T>\n *\n * @param {T} el\n * The object to fire the event on. It can be a {@link HTMLDOMElement},\n * an {@link SVGElement} or any other object.\n *\n * @param {string} type\n * The type of event.\n *\n * @param {Highcharts.Dictionary<*>|Event} [eventArguments]\n * Custom event arguments that are passed on as an argument to the event\n * handler.\n *\n * @param {Highcharts.EventCallbackFunction<T>|Function} [defaultFunction]\n * The default function to execute if the other listeners haven't\n * returned false.\n *\n * @return {void}\n */\nfunction fireEvent(el, type, eventArguments, defaultFunction) {\n /* eslint-enable valid-jsdoc */\n eventArguments = eventArguments || {};\n if (doc.createEvent &&\n (el.dispatchEvent ||\n (el.fireEvent &&\n // Enable firing events on Highcharts instance.\n el !== Core_Globals))) {\n var e = doc.createEvent('Events');\n e.initEvent(type, true, true);\n eventArguments = extend(e, eventArguments);\n if (el.dispatchEvent) {\n el.dispatchEvent(eventArguments);\n }\n else {\n el.fireEvent(type, eventArguments);\n }\n }\n else if (el.hcEvents) {\n if (!eventArguments.target) {\n // We're running a custom event\n extend(eventArguments, {\n // Attach a simple preventDefault function to skip\n // default handler if called. The built-in\n // defaultPrevented property is not overwritable (#5112)\n preventDefault: function () {\n eventArguments.defaultPrevented = true;\n },\n // Setting target to native events fails with clicking\n // the zoom-out button in Chrome.\n target: el,\n // If the type is not set, we're running a custom event\n // (#2297). If it is set, we're running a browser event.\n type: type\n });\n }\n var events = [];\n var object = el;\n var multilevel = false;\n // Recurse up the inheritance chain and collect hcEvents set as own\n // objects on the prototypes.\n while (object.hcEvents) {\n if (Object.hasOwnProperty.call(object, 'hcEvents') &&\n object.hcEvents[type]) {\n if (events.length) {\n multilevel = true;\n }\n events.unshift.apply(events, object.hcEvents[type]);\n }\n object = Object.getPrototypeOf(object);\n }\n // For performance reasons, only sort the event handlers in case we are\n // dealing with multiple levels in the prototype chain. Otherwise, the\n // events are already sorted in the addEvent function.\n if (multilevel) {\n // Order the calls\n events.sort(function (a, b) { return a.order - b.order; });\n }\n // Call the collected event handlers\n events.forEach(function (obj) {\n // If the event handler returns false, prevent the default handler\n // from executing\n if (obj.fn.call(el, eventArguments) === false) {\n eventArguments.preventDefault();\n }\n });\n }\n // Run the default if not prevented\n if (defaultFunction && !eventArguments.defaultPrevented) {\n defaultFunction.call(el, eventArguments);\n }\n}\nvar serialMode;\n/**\n * Get a unique key for using in internal element id's and pointers. The key is\n * composed of a random hash specific to this Highcharts instance, and a\n * counter.\n *\n * @example\n * let id = uniqueKey(); // => 'highcharts-x45f6hp-0'\n *\n * @function Highcharts.uniqueKey\n *\n * @return {string}\n * A unique key.\n */\nvar uniqueKey = (function () {\n var hash = Math.random().toString(36).substring(2, 9) + '-';\n var id = 0;\n return function () {\n return 'highcharts-' + (serialMode ? '' : hash) + id++;\n };\n}());\n/**\n * Activates a serial mode for element IDs provided by\n * {@link Highcharts.uniqueKey}. This mode can be used in automated tests, where\n * a simple comparison of two rendered SVG graphics is needed.\n *\n * **Note:** This is only for testing purposes and will break functionality in\n * webpages with multiple charts.\n *\n * @example\n * if (\n * process &&\n * process.env.NODE_ENV === 'development'\n * ) {\n * Highcharts.useSerialIds(true);\n * }\n *\n * @function Highcharts.useSerialIds\n *\n * @param {boolean} [mode]\n * Changes the state of serial mode.\n *\n * @return {boolean|undefined}\n * State of the serial mode.\n */\nfunction useSerialIds(mode) {\n return (serialMode = pick(mode, serialMode));\n}\nfunction isFunction(obj) {\n return typeof obj === 'function';\n}\nfunction ucfirst(s) {\n return ((isString(s) ?\n s.substring(0, 1).toUpperCase() + s.substring(1) :\n String(s)));\n}\n/* *\n *\n * External\n *\n * */\n// Register Highcharts as a plugin in jQuery\nif (win.jQuery) {\n /**\n * Highcharts-extended JQuery.\n *\n * @external JQuery\n */\n /**\n * Helper function to return the chart of the current JQuery selector\n * element.\n *\n * @function external:JQuery#highcharts\n *\n * @return {Highcharts.Chart}\n * The chart that is linked to the JQuery selector element.\n */ /**\n * Factory function to create a chart in the current JQuery selector\n * element.\n *\n * @function external:JQuery#highcharts\n *\n * @param {'Chart'|'Map'|'StockChart'|string} [className]\n * Name of the factory class in the Highcharts namespace.\n *\n * @param {Highcharts.Options} [options]\n * The chart options structure.\n *\n * @param {Highcharts.ChartCallbackFunction} [callback]\n * Function to run when the chart has loaded and all external\n * images are loaded. Defining a\n * [chart.events.load](https://api.highcharts.com/highcharts/chart.events.load)\n * handler is equivalent.\n *\n * @return {JQuery}\n * The current JQuery selector.\n */\n win.jQuery.fn.highcharts = function () {\n var args = [].slice.call(arguments);\n if (this[0]) { // `this[0]` is the renderTo div\n // Create the chart\n if (args[0]) {\n new Core_Globals[ // eslint-disable-line computed-property-spacing, no-new\n // Constructor defaults to Chart\n isString(args[0]) ? args.shift() : 'Chart'](this[0], args[0], args[1]);\n return this;\n }\n // When called without parameters or with the return argument,\n // return an existing chart\n return charts[attr(this[0], 'data-highcharts-chart')];\n }\n };\n}\n/* *\n *\n * Default Export\n *\n * */\n// TODO use named exports when supported.\nvar Utilities = {\n addEvent: addEvent,\n arrayMax: arrayMax,\n arrayMin: arrayMin,\n attr: attr,\n clamp: clamp,\n clearTimeout: internalClearTimeout,\n correctFloat: correctFloat,\n createElement: createElement,\n crisp: crisp,\n css: css,\n defined: defined,\n destroyObjectProperties: destroyObjectProperties,\n diffObjects: diffObjects,\n discardElement: discardElement,\n erase: erase,\n error: error,\n extend: extend,\n extendClass: extendClass,\n find: find,\n fireEvent: fireEvent,\n getAlignFactor: getAlignFactor,\n getClosestDistance: getClosestDistance,\n getMagnitude: getMagnitude,\n getNestedProperty: getNestedProperty,\n getStyle: getStyle,\n insertItem: insertItem,\n isArray: isArray,\n isClass: isClass,\n isDOMElement: isDOMElement,\n isFunction: isFunction,\n isNumber: isNumber,\n isObject: isObject,\n isString: isString,\n merge: merge,\n normalizeTickInterval: normalizeTickInterval,\n objectEach: objectEach,\n offset: offset,\n pad: pad,\n pick: pick,\n pInt: pInt,\n pushUnique: pushUnique,\n relativeLength: relativeLength,\n removeEvent: removeEvent,\n replaceNested: replaceNested,\n splat: splat,\n stableSort: stableSort,\n syncTimeout: syncTimeout,\n timeUnits: timeUnits,\n ucfirst: ucfirst,\n uniqueKey: uniqueKey,\n useSerialIds: useSerialIds,\n wrap: wrap\n};\n/* harmony default export */ var Core_Utilities = (Utilities);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * An animation configuration. Animation configurations can also be defined as\n * booleans, where `false` turns off animation and `true` defaults to a duration\n * of 500ms and defer of 0ms.\n *\n * @interface Highcharts.AnimationOptionsObject\n */ /**\n* A callback function to execute when the animation finishes.\n* @name Highcharts.AnimationOptionsObject#complete\n* @type {Function|undefined}\n*/ /**\n* The animation defer in milliseconds.\n* @name Highcharts.AnimationOptionsObject#defer\n* @type {number|undefined}\n*/ /**\n* The animation duration in milliseconds.\n* @name Highcharts.AnimationOptionsObject#duration\n* @type {number|undefined}\n*/ /**\n* The name of an easing function as defined on the `Math` object.\n* @name Highcharts.AnimationOptionsObject#easing\n* @type {string|Function|undefined}\n*/ /**\n* A callback function to execute on each step of each attribute or CSS property\n* that's being animated. The first argument contains information about the\n* animation and progress.\n* @name Highcharts.AnimationOptionsObject#step\n* @type {Function|undefined}\n*/\n/**\n * Creates a frame for the animated SVG element.\n *\n * @callback Highcharts.AnimationStepCallbackFunction\n *\n * @param {Highcharts.SVGElement} this\n * The SVG element to animate.\n *\n * @return {void}\n */\n/**\n * Interface description for a class.\n *\n * @interface Highcharts.Class<T>\n * @extends Function\n */ /**\n* Class constructor.\n* @function Highcharts.Class<T>#new\n* @param {...Array<*>} args\n* Constructor arguments.\n* @return {T}\n* Class instance.\n*/\n/**\n * A style object with camel case property names to define visual appearance of\n * a SVG element or HTML element. The properties can be whatever styles are\n * supported on the given SVG or HTML element.\n *\n * @example\n * {\n * fontFamily: 'monospace',\n * fontSize: '1.2em'\n * }\n *\n * @interface Highcharts.CSSObject\n */ /**\n* @name Highcharts.CSSObject#[key:string]\n* @type {boolean|number|string|undefined}\n*/ /**\n* Background style for the element.\n* @name Highcharts.CSSObject#background\n* @type {string|undefined}\n*/ /**\n* Background color of the element.\n* @name Highcharts.CSSObject#backgroundColor\n* @type {Highcharts.ColorString|undefined}\n*/ /**\n* Border style for the element.\n* @name Highcharts.CSSObject#border\n* @type {string|undefined}\n*/ /**\n* Radius of the element border.\n* @name Highcharts.CSSObject#borderRadius\n* @type {number|undefined}\n*/ /**\n* Color used in the element. The 'contrast' option is a Highcharts custom\n* property that results in black or white, depending on the background of the\n* element.\n* @name Highcharts.CSSObject#color\n* @type {'contrast'|Highcharts.ColorString|undefined}\n*/ /**\n* Style of the mouse cursor when resting over the element.\n* @name Highcharts.CSSObject#cursor\n* @type {Highcharts.CursorValue|undefined}\n*/ /**\n* Font family of the element text. Multiple values have to be in decreasing\n* preference order and separated by comma.\n* @name Highcharts.CSSObject#fontFamily\n* @type {string|undefined}\n*/ /**\n* Font size of the element text.\n* @name Highcharts.CSSObject#fontSize\n* @type {string|undefined}\n*/ /**\n* Font weight of the element text.\n* @name Highcharts.CSSObject#fontWeight\n* @type {string|undefined}\n*/ /**\n* Height of the element.\n* @name Highcharts.CSSObject#height\n* @type {number|undefined}\n*/ /**\n* The maximum number of lines. If lines are cropped away, an ellipsis will be\n* added.\n* @name Highcharts.CSSObject#lineClamp\n* @type {number|undefined}\n*/ /**\n* Width of the element border.\n* @name Highcharts.CSSObject#lineWidth\n* @type {number|undefined}\n*/ /**\n* Opacity of the element.\n* @name Highcharts.CSSObject#opacity\n* @type {number|undefined}\n*/ /**\n* Space around the element content.\n* @name Highcharts.CSSObject#padding\n* @type {string|undefined}\n*/ /**\n* Behaviour of the element when the mouse cursor rests over it.\n* @name Highcharts.CSSObject#pointerEvents\n* @type {string|undefined}\n*/ /**\n* Positioning of the element.\n* @name Highcharts.CSSObject#position\n* @type {string|undefined}\n*/ /**\n* Alignment of the element text.\n* @name Highcharts.CSSObject#textAlign\n* @type {string|undefined}\n*/ /**\n* Additional decoration of the element text.\n* @name Highcharts.CSSObject#textDecoration\n* @type {string|undefined}\n*/ /**\n* Outline style of the element text.\n* @name Highcharts.CSSObject#textOutline\n* @type {string|undefined}\n*/ /**\n* Line break style of the element text. Highcharts SVG elements support\n* `ellipsis` when a `width` is set.\n* @name Highcharts.CSSObject#textOverflow\n* @type {string|undefined}\n*/ /**\n* Top spacing of the element relative to the parent element.\n* @name Highcharts.CSSObject#top\n* @type {string|undefined}\n*/ /**\n* Animated transition of selected element properties.\n* @name Highcharts.CSSObject#transition\n* @type {string|undefined}\n*/ /**\n* Line break style of the element text.\n* @name Highcharts.CSSObject#whiteSpace\n* @type {string|undefined}\n*/ /**\n* Width of the element.\n* @name Highcharts.CSSObject#width\n* @type {number|undefined}\n*/\n/**\n * All possible cursor styles.\n *\n * @typedef {'alias'|'all-scroll'|'auto'|'cell'|'col-resize'|'context-menu'|'copy'|'crosshair'|'default'|'e-resize'|'ew-resize'|'grab'|'grabbing'|'help'|'move'|'n-resize'|'ne-resize'|'nesw-resize'|'no-drop'|'none'|'not-allowed'|'ns-resize'|'nw-resize'|'nwse-resize'|'pointer'|'progress'|'row-resize'|'s-resize'|'se-resize'|'sw-resize'|'text'|'vertical-text'|'w-resize'|'wait'|'zoom-in'|'zoom-out'} Highcharts.CursorValue\n */\n/**\n * All possible dash styles.\n *\n * @typedef {'Dash'|'DashDot'|'Dot'|'LongDash'|'LongDashDot'|'LongDashDotDot'|'ShortDash'|'ShortDashDot'|'ShortDashDotDot'|'ShortDot'|'Solid'} Highcharts.DashStyleValue\n */\n/**\n * Generic dictionary in TypeScript notation.\n * Use the native `AnyRecord` instead.\n *\n * @deprecated\n * @interface Highcharts.Dictionary<T>\n */ /**\n* @name Highcharts.Dictionary<T>#[key:string]\n* @type {T}\n*/\n/**\n * The function callback to execute when the event is fired. The `this` context\n * contains the instance, that fired the event.\n *\n * @callback Highcharts.EventCallbackFunction<T>\n *\n * @param {T} this\n *\n * @param {Highcharts.Dictionary<*>|Event} [eventArguments]\n * Event arguments.\n *\n * @return {boolean|void}\n */\n/**\n * The event options for adding function callback.\n *\n * @interface Highcharts.EventOptionsObject\n */ /**\n* The order the event handler should be called. This opens for having one\n* handler be called before another, independent of in which order they were\n* added.\n* @name Highcharts.EventOptionsObject#order\n* @type {number}\n*/ /**\n* Whether an event should be passive or not.\n* When set to `true`, the function specified by listener will never call\n* `preventDefault()`.\n* @name Highcharts.EventOptionsObject#passive\n* @type boolean\n*/\n/**\n * Formats data as a string. Usually the data is accessible through the `this`\n * keyword.\n *\n * @callback Highcharts.FormatterCallbackFunction<T>\n *\n * @param {T} this\n * Context to format\n *\n * @return {string}\n * Formatted text\n */\n/**\n * An object of key-value pairs for HTML attributes.\n *\n * @typedef {Highcharts.Dictionary<boolean|number|string|Function>} Highcharts.HTMLAttributes\n */\n/**\n * An HTML DOM element. The type is a reference to the regular HTMLElement in\n * the global scope.\n *\n * @typedef {global.HTMLElement} Highcharts.HTMLDOMElement\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement\n */\n/**\n * The iterator callback.\n *\n * @callback Highcharts.ObjectEachCallbackFunction<T>\n *\n * @param {T} this\n * The context.\n *\n * @param {*} value\n * The property value.\n *\n * @param {string} key\n * The property key.\n *\n * @param {*} obj\n * The object that objectEach is being applied to.\n */\n/**\n * An object containing `left` and `top` properties for the position in the\n * page.\n *\n * @interface Highcharts.OffsetObject\n */ /**\n* Left distance to the page border.\n* @name Highcharts.OffsetObject#left\n* @type {number}\n*/ /**\n* Top distance to the page border.\n* @name Highcharts.OffsetObject#top\n* @type {number}\n*/\n/**\n * Describes a range.\n *\n * @interface Highcharts.RangeObject\n */ /**\n* Maximum number of the range.\n* @name Highcharts.RangeObject#max\n* @type {number}\n*/ /**\n* Minimum number of the range.\n* @name Highcharts.RangeObject#min\n* @type {number}\n*/\n/**\n * If a number is given, it defines the pixel length. If a percentage string is\n * given, like for example `'50%'`, the setting defines a length relative to a\n * base size, for example the size of a container.\n *\n * @typedef {number|string} Highcharts.RelativeSize\n */\n/**\n * Proceed function to call original (wrapped) function.\n *\n * @callback Highcharts.WrapProceedFunction\n *\n * @param {*} [arg1]\n * Optional argument. Without any arguments defaults to first argument of\n * the wrapping function.\n *\n * @param {*} [arg2]\n * Optional argument. Without any arguments defaults to second argument\n * of the wrapping function.\n *\n * @param {*} [arg3]\n * Optional argument. Without any arguments defaults to third argument of\n * the wrapping function.\n *\n * @return {*}\n * Return value of the original function.\n */\n/**\n * The Highcharts object is the placeholder for all other members, and various\n * utility functions. The most important member of the namespace would be the\n * chart constructor.\n *\n * @example\n * let chart = Highcharts.chart('container', { ... });\n *\n * @namespace Highcharts\n */\n''; // Detach doclets above\n\n;// ./code/es5/es-modules/Core/Chart/ChartDefaults.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n * API Options\n *\n * */\n/**\n * General options for the chart.\n *\n * @optionparent chart\n */\nvar ChartDefaults = {\n /**\n * Default `mapData` for all series, in terms of a GeoJSON or TopoJSON\n * object. If set to a string, it functions as an index into the\n * `Highcharts.maps` array.\n *\n * For picking out individual shapes and geometries to use for each series\n * of the map, see [series.mapData](#series.map.mapData).\n *\n * @sample maps/demo/geojson\n * Loading GeoJSON data\n * @sample maps/chart/topojson\n * Loading TopoJSON data\n *\n * @type {string|Array<*>|Highcharts.GeoJSON|Highcharts.TopoJSON}\n * @since 5.0.0\n * @product highmaps\n * @apioption chart.map\n */\n /**\n * Set lat/lon transformation definitions for the chart. If not defined,\n * these are extracted from the map data.\n *\n * @type {*}\n * @since 5.0.0\n * @product highmaps\n * @apioption chart.mapTransforms\n */\n /**\n * When using multiple axes, the ticks of two or more opposite axes\n * will automatically be aligned by adding ticks to the axis or axes\n * with the least ticks, as if `tickAmount` were specified.\n *\n * This can be prevented by setting `alignTicks` to false. If the grid\n * lines look messy, it's a good idea to hide them for the secondary\n * axis by setting `gridLineWidth` to 0.\n *\n * If `startOnTick` or `endOnTick` in the axis options are set to false,\n * then the `alignTicks ` will be disabled for the axis.\n *\n * Disabled for logarithmic axes.\n *\n * @sample {highcharts} highcharts/chart/alignticks-true/\n * True by default\n * @sample {highcharts} highcharts/chart/alignticks-false/\n * False\n * @sample {highstock} stock/chart/alignticks-true/\n * True by default\n * @sample {highstock} stock/chart/alignticks-false/\n * False\n *\n * @type {boolean}\n * @default true\n * @product highcharts highstock gantt\n * @apioption chart.alignTicks\n */\n /**\n * When using multiple axes, align the thresholds. When this is true, other\n * ticks will also be aligned.\n *\n * Note that for line series and some other series types, the `threshold`\n * option is set to `null` by default. This will in turn cause their y-axis\n * to not have a threshold. In order to avoid that, set the series\n * `threshold` to 0 or another number.\n *\n * If `startOnTick` or `endOnTick` in the axis options are set to false, or\n * if the axis is logarithmic, the threshold will not be aligned.\n *\n * @sample {highcharts} highcharts/chart/alignthresholds/ Set to true\n *\n * @since 10.0.0\n * @product highcharts highstock gantt\n * @apioption chart.alignThresholds\n */\n alignThresholds: false,\n /**\n * Set the overall animation for all chart updating. Animation can be\n * disabled throughout the chart by setting it to false here. It can\n * be overridden for each individual API method as a function parameter.\n * The only animation not affected by this option is the initial series\n * animation, see [plotOptions.series.animation](\n * #plotOptions.series.animation).\n *\n * The animation can either be set as a boolean or a configuration\n * object. If `true`, it will use the 'swing' jQuery easing and a\n * duration of 500 ms. If used as a configuration object, the following\n * properties are supported:\n *\n * - `defer`: The animation delay time in milliseconds.\n *\n * - `duration`: The duration of the animation in milliseconds.\n *\n * - `easing`: A string reference to an easing function set on the\n * `Math` object. See\n * [the easing demo](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/plotoptions/series-animation-easing/).\n *\n * When zooming on a series with less than 100 points, the chart redraw\n * will be done with animation, but in case of more data points, it is\n * necessary to set this option to ensure animation on zoom.\n *\n * @sample {highcharts} highcharts/chart/animation-none/\n * Updating with no animation\n * @sample {highcharts} highcharts/chart/animation-duration/\n * With a longer duration\n * @sample {highcharts} highcharts/chart/animation-easing/\n * With a jQuery UI easing\n * @sample {highmaps} maps/chart/animation-none/\n * Updating with no animation\n * @sample {highmaps} maps/chart/animation-duration/\n * With a longer duration\n *\n * @type {boolean|Partial<Highcharts.AnimationOptionsObject>}\n * @default true\n * @apioption chart.animation\n */\n /**\n * A CSS class name to apply to the charts container `div`, allowing\n * unique CSS styling for each chart.\n *\n * @type {string}\n * @apioption chart.className\n */\n /**\n * Event listeners for the chart.\n *\n * @apioption chart.events\n */\n /**\n * Fires when a series is added to the chart after load time, using the\n * `addSeries` method. One parameter, `event`, is passed to the\n * function, containing common event information. Through\n * `event.options` you can access the series options that were passed to\n * the `addSeries` method. Returning false prevents the series from\n * being added.\n *\n * @sample {highcharts} highcharts/chart/events-addseries/\n * Alert on add series\n * @sample {highstock} stock/chart/events-addseries/\n * Alert on add series\n *\n * @type {Highcharts.ChartAddSeriesCallbackFunction}\n * @since 1.2.0\n * @context Highcharts.Chart\n * @apioption chart.events.addSeries\n */\n /**\n * Fires when clicking on the plot background. One parameter, `event`,\n * is passed to the function, containing common event information.\n *\n * Information on the clicked spot can be found through `event.xAxis`\n * and `event.yAxis`, which are arrays containing the axes of each\n * dimension and each axis' value at the clicked spot. The primary axes\n * are `event.xAxis[0]` and `event.yAxis[0]`. Remember the unit of a\n * datetime axis is milliseconds since 1970-01-01 00:00:00.\n *\n * ```js\n * click: function(e) {\n * console.log(\n * Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', e.xAxis[0].value),\n * e.yAxis[0].value\n * )\n * }\n * ```\n *\n * @sample {highcharts} highcharts/chart/events-click/\n * Alert coordinates on click\n * @sample {highcharts} highcharts/chart/events-container/\n * Alternatively, attach event to container\n * @sample {highstock} stock/chart/events-click/\n * Alert coordinates on click\n * @sample {highstock} highcharts/chart/events-container/\n * Alternatively, attach event to container\n * @sample {highmaps} maps/chart/events-click/\n * Record coordinates on click\n * @sample {highmaps} highcharts/chart/events-container/\n * Alternatively, attach event to container\n *\n * @type {Highcharts.ChartClickCallbackFunction}\n * @since 1.2.0\n * @context Highcharts.Chart\n * @apioption chart.events.click\n */\n /**\n * Fires when the chart is finished loading. Since v4.2.2, it also waits\n * for images to be loaded, for example from point markers. One\n * parameter, `event`, is passed to the function, containing common\n * event information.\n *\n * There is also a second parameter to the chart constructor where a\n * callback function can be passed to be executed on chart.load.\n *\n * @sample {highcharts} highcharts/chart/events-load/\n * Alert on chart load\n * @sample {highcharts} highcharts/chart/events-render/\n * Load vs Redraw vs Render\n * @sample {highstock} stock/chart/events-load/\n * Alert on chart load\n * @sample {highmaps} maps/chart/events-load/\n * Add series on chart load\n *\n * @type {Highcharts.ChartLoadCallbackFunction}\n * @context Highcharts.Chart\n * @apioption chart.events.load\n */\n /**\n * Fires when the chart is redrawn, either after a call to\n * `chart.redraw()` or after an axis, series or point is modified with\n * the `redraw` option set to `true`. One parameter, `event`, is passed\n * to the function, containing common event information.\n *\n * @sample {highcharts} highcharts/chart/events-redraw/\n * Alert on chart redraw\n * @sample {highcharts} highcharts/chart/events-render/\n * Load vs Redraw vs Render\n * @sample {highstock} stock/chart/events-redraw/\n * Alert on chart redraw when adding a series or moving the\n * zoomed range\n * @sample {highmaps} maps/chart/events-redraw/\n * Set subtitle on chart redraw\n *\n * @type {Highcharts.ChartRedrawCallbackFunction}\n * @since 1.2.0\n * @context Highcharts.Chart\n * @apioption chart.events.redraw\n */\n /**\n * Fires after initial load of the chart (directly after the `load`\n * event), and after each redraw (directly after the `redraw` event).\n *\n * @sample {highcharts} highcharts/chart/events-render/\n * Load vs Redraw vs Render\n *\n * @type {Highcharts.ChartRenderCallbackFunction}\n * @since 5.0.7\n * @context Highcharts.Chart\n * @apioption chart.events.render\n */\n /**\n * Fires when an area of the chart has been selected. Selection is\n * enabled by setting the chart's zoomType. One parameter, `event`, is\n * passed to the function, containing common event information. The\n * default action for the selection event is to zoom the chart to the\n * selected area. It can be prevented by calling\n * `event.preventDefault()` or return false.\n *\n * Information on the selected area can be found through `event.xAxis`\n * and `event.yAxis`, which are arrays containing the axes of each\n * dimension and each axis' min and max values. The primary axes are\n * `event.xAxis[0]` and `event.yAxis[0]`. Remember the unit of a\n * datetime axis is milliseconds since 1970-01-01 00:00:00.\n *\n * ```js\n * selection: function(event) {\n * // log the min and max of the primary, datetime x-axis\n * console.log(\n * Highcharts.dateFormat(\n * '%Y-%m-%d %H:%M:%S',\n * event.xAxis[0].min\n * ),\n * Highcharts.dateFormat(\n * '%Y-%m-%d %H:%M:%S',\n * event.xAxis[0].max\n * )\n * );\n * // log the min and max of the y axis\n * console.log(event.yAxis[0].min, event.yAxis[0].max);\n * }\n * ```\n *\n * @sample {highcharts} highcharts/chart/events-selection/\n * Report on selection and reset\n * @sample {highcharts} highcharts/chart/events-selection-points/\n * Select a range of points through a drag selection\n * @sample {highstock} stock/chart/events-selection/\n * Report on selection and reset\n * @sample {highstock} highcharts/chart/events-selection-points/\n * Select a range of points through a drag selection\n * (Highcharts)\n *\n * @type {Highcharts.ChartSelectionCallbackFunction}\n * @apioption chart.events.selection\n */\n /**\n * The margin between the outer edge of the chart and the plot area.\n * The numbers in the array designate top, right, bottom and left\n * respectively. Use the options `marginTop`, `marginRight`,\n * `marginBottom` and `marginLeft` for shorthand setting of one option.\n *\n * By default there is no margin. The actual space is dynamically\n * calculated from the offset of axis labels, axis title, title,\n * subtitle and legend in addition to the `spacingTop`, `spacingRight`,\n * `spacingBottom` and `spacingLeft` options.\n *\n * @sample {highcharts} highcharts/chart/margins-zero/\n * Zero margins\n * @sample {highstock} stock/chart/margin-zero/\n * Zero margins\n *\n * @type {number|Array<number>}\n * @apioption chart.margin\n */\n /**\n * The margin between the bottom outer edge of the chart and the plot\n * area. Use this to set a fixed pixel value for the margin as opposed\n * to the default dynamic margin. See also `spacingBottom`.\n *\n * @sample {highcharts} highcharts/chart/marginbottom/\n * 100px bottom margin\n * @sample {highstock} stock/chart/marginbottom/\n * 100px bottom margin\n * @sample {highmaps} maps/chart/margin/\n * 100px margins\n *\n * @type {number}\n * @since 2.0\n * @apioption chart.marginBottom\n */\n /**\n * The margin between the left outer edge of the chart and the plot\n * area. Use this to set a fixed pixel value for the margin as opposed\n * to the default dynamic margin. See also `spacingLeft`.\n *\n * @sample {highcharts} highcharts/chart/marginleft/\n * 150px left margin\n * @sample {highstock} stock/chart/marginleft/\n * 150px left margin\n * @sample {highmaps} maps/chart/margin/\n * 100px margins\n *\n * @type {number}\n * @since 2.0\n * @apioption chart.marginLeft\n */\n /**\n * The margin between the right outer edge of the chart and the plot\n * area. Use this to set a fixed pixel value for the margin as opposed\n * to the default dynamic margin. See also `spacingRight`.\n *\n * @sample {highcharts} highcharts/chart/marginright/\n * 100px right margin\n * @sample {highstock} stock/chart/marginright/\n * 100px right margin\n * @sample {highmaps} maps/chart/margin/\n * 100px margins\n *\n * @type {number}\n * @since 2.0\n * @apioption chart.marginRight\n */\n /**\n * The margin between the top outer edge of the chart and the plot area.\n * Use this to set a fixed pixel value for the margin as opposed to\n * the default dynamic margin. See also `spacingTop`.\n *\n * @sample {highcharts} highcharts/chart/margintop/ 100px top margin\n * @sample {highstock} stock/chart/margintop/\n * 100px top margin\n * @sample {highmaps} maps/chart/margin/\n * 100px margins\n *\n * @type {number}\n * @since 2.0\n * @apioption chart.marginTop\n */\n /**\n * Callback function to override the default function that formats all\n * the numbers in the chart. Returns a string with the formatted number.\n *\n * @sample highcharts/members/highcharts-numberformat\n * Arabic digits in Highcharts\n * @type {Highcharts.NumberFormatterCallbackFunction}\n * @since 8.0.0\n * @apioption chart.numberFormatter\n */\n /**\n * When a chart with an x and a y-axis is rendered, we first pre-render the\n * labels of both in order to measure them. Then, if either of the axis\n * labels take up so much space that it significantly affects the length of\n * the other axis, we repeat the process.\n *\n * By default we stop at two axis layout runs, but it may be that the second\n * run also alter the space required by either axis, for example if it\n * causes the labels to rotate. In this situation, a subsequent redraw of\n * the chart may cause the tick and label placement to change for apparently\n * no reason.\n *\n * Use the `axisLayoutRuns` option to set the maximum allowed number of\n * repetitions. But keep in mind that the default value of 2 is set because\n * every run costs performance time.\n *\n * **Note:** Changing that option to higher than the default might decrease\n * performance significantly, especially with bigger sets of data.\n *\n * @type {number}\n * @default 2\n * @since 11.3.0\n * @apioption chart.axisLayoutRuns\n */\n /**\n * Allows setting a key to switch between zooming and panning. Can be\n * one of `alt`, `ctrl`, `meta` (the command key on Mac and Windows\n * key on Windows) or `shift`. The keys are mapped directly to the key\n * properties of the click event argument (`event.altKey`,\n * `event.ctrlKey`, `event.metaKey` and `event.shiftKey`).\n *\n * @type {string}\n * @since 4.0.3\n * @product highcharts gantt\n * @validvalue [\"alt\", \"ctrl\", \"meta\", \"shift\"]\n * @apioption chart.panKey\n */\n /**\n * Allow panning in a chart. Best used with [panKey](#chart.panKey)\n * to combine zooming and panning.\n *\n * On touch devices, when the [tooltip.followTouchMove](\n * #tooltip.followTouchMove) option is `true` (default), panning\n * requires two fingers. To allow panning with one finger, set\n * `followTouchMove` to `false`.\n *\n * @sample {highcharts} highcharts/chart/pankey/ Zooming and panning\n * @sample {highstock} stock/chart/panning/ Zooming and xy panning\n */\n panning: {\n /**\n * Enable or disable chart panning.\n *\n * @type {boolean}\n * @default {highcharts} false\n * @default {highstock|highmaps} true\n */\n enabled: false,\n /**\n * Decides in what dimensions the user can pan the chart. Can be\n * one of `x`, `y`, or `xy`.\n *\n * During panning, all axes will behave as if\n * [`startOnTick`](#yAxis.startOnTick) and\n * [`endOnTick`](#yAxis.endOnTick) were set to `false`. After the\n * panning action is finished, the axes will adjust to their actual\n * settings.\n *\n * @sample {highcharts} highcharts/chart/panning-type\n * Zooming and xy panning\n *\n * @declare Highcharts.OptionsChartPanningTypeValue\n * @type {string}\n * @validvalue [\"x\", \"y\", \"xy\"]\n * @product highcharts highstock gantt\n */\n type: 'x'\n },\n /**\n * Equivalent to [zoomType](#chart.zoomType), but for multitouch\n * gestures only. By default, the `pinchType` is the same as the\n * `zoomType` setting. However, pinching can be enabled separately in\n * some cases, for example in stock charts where a mouse drag pans the\n * chart, while pinching is enabled. When [tooltip.followTouchMove](\n * #tooltip.followTouchMove) is true, pinchType only applies to\n * two-finger touches.\n *\n * @type {string}\n * @default {highcharts} undefined\n * @default {highstock} undefined\n * @since 3.0\n * @product highcharts highstock gantt\n * @deprecated\n * @validvalue [\"x\", \"y\", \"xy\"]\n * @apioption chart.pinchType\n */\n /**\n * Whether to apply styled mode. When in styled mode, no presentational\n * attributes or CSS are applied to the chart SVG. Instead, CSS rules\n * are required to style the chart. The default style sheet is\n * available from `https://code.highcharts.com/css/highcharts.css`.\n *\n * [Read more in the docs](https://www.highcharts.com/docs/chart-design-and-style/style-by-css)\n * on what classes and variables are available.\n *\n * @sample highcharts/css/colors\n * Color theming with CSS\n * @sample highcharts/css/prefers-color-scheme\n * Dynamic theme based on system settings\n * @type {boolean}\n * @default false\n * @since 7.0\n * @apioption chart.styledMode\n */\n styledMode: false,\n /**\n * The corner radius of the outer chart border.\n *\n * @sample {highcharts} highcharts/chart/borderradius/\n * 20px radius\n * @sample {highstock} stock/chart/border/\n * 10px radius\n * @sample {highmaps} maps/chart/border/\n * Border options\n *\n */\n borderRadius: 0,\n /**\n * In styled mode, this sets how many colors the class names\n * should rotate between. With ten colors, series (or points) are\n * given class names like `highcharts-color-0`, `highcharts-color-1`\n * [...] `highcharts-color-9`. The equivalent in non-styled mode\n * is to set colors using the [colors](#colors) setting.\n *\n * @since 5.0.0\n */\n colorCount: 10,\n /**\n * By default, (because of memory and performance reasons) the chart does\n * not copy the data but keeps it as a reference. In some cases, this might\n * result in mutating the original data source. In order to prevent that,\n * set that property to false. Please note that changing that might decrease\n * performance, especially with bigger sets of data.\n *\n * @type {boolean}\n * @since 10.1.0\n */\n allowMutatingData: true,\n /**\n * If true, the axes will scale to the remaining visible series once\n * one series is hidden. If false, hiding and showing a series will\n * not affect the axes or the other series. For stacks, once one series\n * within the stack is hidden, the rest of the stack will close in\n * around it even if the axis is not affected.\n *\n * @sample {highcharts} highcharts/chart/ignorehiddenseries-true/\n * True by default\n * @sample {highcharts} highcharts/chart/ignorehiddenseries-false/\n * False\n * @sample {highcharts} highcharts/chart/ignorehiddenseries-true-stacked/\n * True with stack\n * @sample {highstock} stock/chart/ignorehiddenseries-true/\n * True by default\n * @sample {highstock} stock/chart/ignorehiddenseries-false/\n * False\n *\n * @since 1.2.0\n * @product highcharts highstock gantt\n */\n ignoreHiddenSeries: true,\n /**\n * Whether to invert the axes so that the x axis is vertical and y axis\n * is horizontal. When `true`, the x axis is [reversed](#xAxis.reversed)\n * by default.\n *\n * @productdesc {highcharts}\n * If a bar series is present in the chart, it will be inverted\n * automatically. Inverting the chart doesn't have an effect if there\n * are no cartesian series in the chart.\n *\n * @sample {highcharts} highcharts/chart/inverted/\n * Inverted line\n * @sample {highstock} stock/navigator/inverted/\n * Inverted stock chart\n *\n * @type {boolean}\n * @default false\n * @product highcharts highstock gantt\n * @apioption chart.inverted\n */\n /**\n * The distance between the outer edge of the chart and the content,\n * like title or legend, or axis title and labels if present. The\n * numbers in the array designate top, right, bottom and left\n * respectively. Use the options spacingTop, spacingRight, spacingBottom\n * and spacingLeft options for shorthand setting of one option.\n *\n * @type {Array<number>}\n * @see [chart.margin](#chart.margin)\n * @default [10, 10, 15, 10]\n * @since 3.0.6\n */\n spacing: [10, 10, 15, 10],\n /**\n * The button that appears after a selection zoom, allowing the user\n * to reset zoom. This option is deprecated in favor of\n * [zooming](#chart.zooming).\n *\n * @since 2.2\n * @deprecated 10.2.1\n */\n resetZoomButton: {\n /**\n * What frame the button placement should be related to. Can be\n * either `plotBox` or `spacingBox`.\n *\n * @sample {highcharts} highcharts/chart/resetzoombutton-relativeto/\n * Relative to the chart\n * @sample {highstock} highcharts/chart/resetzoombutton-relativeto/\n * Relative to the chart\n *\n * @type {Highcharts.ButtonRelativeToValue}\n * @apioption chart.resetZoomButton.relativeTo\n */\n /**\n * A collection of attributes for the button. The object takes SVG\n * attributes like `fill`, `stroke`, `stroke-width` or `r`, the\n * border radius. The theme also supports `style`, a collection of\n * CSS properties for the text. Equivalent attributes for the hover\n * state are given in `theme.states.hover`.\n *\n * @sample {highcharts} highcharts/chart/resetzoombutton-theme/\n * Theming the button\n * @sample {highstock} highcharts/chart/resetzoombutton-theme/\n * Theming the button\n *\n * @type {Highcharts.SVGAttributes}\n */\n theme: {\n /**\n * The z-index of the button.\n *\n * @type {number}\n * @apioption chart.resetZoomButton.theme.zIndex\n */\n },\n /**\n * The position of the button.\n *\n * @sample {highcharts} highcharts/chart/resetzoombutton-position/\n * Above the plot area\n * @sample {highstock} highcharts/chart/resetzoombutton-position/\n * Above the plot area\n * @sample {highmaps} highcharts/chart/resetzoombutton-position/\n * Above the plot area\n *\n * @type {Highcharts.AlignObject}\n */\n position: {\n /**\n * The horizontal alignment of the button.\n *\n * @type {number}\n * @apioption chart.resetZoomButton.position.align\n */\n /**\n * The horizontal offset of the button.\n *\n * @type {number}\n * @apioption chart.resetZoomButton.position.x\n */\n /**\n * The vertical alignment of the button.\n *\n * @type {Highcharts.VerticalAlignValue}\n * @apioption chart.resetZoomButton.position.verticalAlign\n */\n /**\n * The vertical offset of the button.\n *\n * @type {number}\n * @apioption chart.resetZoomButton.position.y\n */\n }\n },\n /**\n * The pixel width of the plot area border.\n *\n * @sample {highcharts} highcharts/chart/plotborderwidth/\n * 1px border\n * @sample {highstock} stock/chart/plotborder/\n * 2px border\n * @sample {highmaps} maps/chart/plotborder/\n * Plot border options\n *\n * @type {number}\n * @default 0\n * @apioption chart.plotBorderWidth\n */\n /**\n * Whether to apply a drop shadow to the plot area. Requires that\n * plotBackgroundColor be set. The shadow can be an object configuration\n * containing `color`, `offsetX`, `offsetY`, `opacity` and `width`.\n *\n * @sample {highcharts} highcharts/chart/plotshadow/\n * Plot shadow\n * @sample {highstock} stock/chart/plotshadow/\n * Plot shadow\n * @sample {highmaps} maps/chart/plotborder/\n * Plot border options\n *\n * @type {boolean|Highcharts.ShadowOptionsObject}\n * @default false\n * @apioption chart.plotShadow\n */\n /**\n * When true, cartesian charts like line, spline, area and column are\n * transformed into the polar coordinate system. This produces _polar\n * charts_, also known as _radar charts_.\n *\n * @sample {highcharts} highcharts/demo/polar/\n * Polar chart\n * @sample {highcharts} highcharts/demo/polar-wind-rose/\n * Wind rose, stacked polar column chart\n * @sample {highcharts} highcharts/demo/polar-spider/\n * Spider web chart\n * @sample {highcharts} highcharts/parallel-coordinates/polar/\n * Star plot, multivariate data in a polar chart\n *\n * @type {boolean}\n * @default false\n * @since 2.3.0\n * @product highcharts\n * @requires highcharts-more\n * @apioption chart.polar\n */\n /**\n * Whether to reflow the chart to fit the width of the container div\n * on resizing the window.\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n * True by default\n * @sample {highcharts} highcharts/chart/reflow-false/\n * False\n * @sample {highstock} stock/chart/reflow-true/\n * True by default\n * @sample {highstock} stock/chart/reflow-false/\n * False\n * @sample {highmaps} maps/chart/reflow-true/\n * True by default\n * @sample {highmaps} maps/chart/reflow-false/\n * False\n *\n * @since 2.1\n */\n reflow: true,\n /**\n * The HTML element where the chart will be rendered. If it is a string,\n * the element by that id is used. The HTML element can also be passed\n * by direct reference, or as the first argument of the chart\n * constructor, in which case the option is not needed.\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n * String\n * @sample {highcharts} highcharts/chart/renderto-object/\n * Object reference\n * @sample {highstock} stock/chart/renderto-string/\n * String\n * @sample {highstock} stock/chart/renderto-object/\n * Object reference\n *\n * @type {string|Highcharts.HTMLDOMElement}\n * @apioption chart.renderTo\n */\n /**\n * The background color of the marker square when selecting (zooming\n * in on) an area of the chart.\n *\n * @see In styled mode, the selection marker fill is set with the\n * `.highcharts-selection-marker` class.\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @default rgba(51,92,173,0.25)\n * @since 2.1.7\n * @apioption chart.selectionMarkerFill\n */\n /**\n * Whether to apply a drop shadow to the global series group. This causes\n * all the series to have the same shadow. Contrary to the `series.shadow`\n * option, this prevents items from casting shadows on each other, like for\n * others series in a stack. The shadow can be an object configuration\n * containing `color`, `offsetX`, `offsetY`, `opacity` and `width`.\n *\n * @sample highcharts/chart/seriesgroupshadow/ Shadow\n *\n * @type {boolean|Highcharts.ShadowOptionsObject}\n * @default false\n * @apioption chart.shadow\n */\n /**\n * Whether to apply a drop shadow to the outer chart area. Requires\n * that backgroundColor be set. The shadow can be an object\n * configuration containing `color`, `offsetX`, `offsetY`, `opacity` and\n * `width`.\n *\n * @sample {highcharts} highcharts/chart/shadow/\n * Shadow\n * @sample {highstock} stock/chart/shadow/\n * Shadow\n * @sample {highmaps} maps/chart/border/\n * Chart border and shadow\n *\n * @type {boolean|Highcharts.ShadowOptionsObject}\n * @default false\n * @apioption chart.shadow\n */\n /**\n * Whether to show the axes initially. This only applies to empty charts\n * where series are added dynamically, as axes are automatically added\n * to cartesian series.\n *\n * @sample {highcharts} highcharts/chart/showaxes-false/\n * False by default\n * @sample {highcharts} highcharts/chart/showaxes-true/\n * True\n *\n * @type {boolean}\n * @since 1.2.5\n * @product highcharts gantt\n * @apioption chart.showAxes\n */\n /**\n * The space between the bottom edge of the chart and the content (plot\n * area, axis title and labels, title, subtitle or legend in top\n * position).\n *\n * @sample {highcharts} highcharts/chart/spacingbottom/\n * Spacing bottom set to 100\n * @sample {highstock} stock/chart/spacingbottom/\n * Spacing bottom set to 100\n * @sample {highmaps} maps/chart/spacing/\n * Spacing 100 all around\n *\n * @type {number}\n * @default 15\n * @since 2.1\n * @apioption chart.spacingBottom\n */\n /**\n * The space between the left edge of the chart and the content (plot\n * area, axis title and labels, title, subtitle or legend in top\n * position).\n *\n * @sample {highcharts} highcharts/chart/spacingleft/\n * Spacing left set to 100\n * @sample {highstock} stock/chart/spacingleft/\n * Spacing left set to 100\n * @sample {highmaps} maps/chart/spacing/\n * Spacing 100 all around\n *\n * @type {number}\n * @default 10\n * @since 2.1\n * @apioption chart.spacingLeft\n */\n /**\n * The space between the right edge of the chart and the content (plot\n * area, axis title and labels, title, subtitle or legend in top\n * position).\n *\n * @sample {highcharts} highcharts/chart/spacingright-100/\n * Spacing set to 100\n * @sample {highcharts} highcharts/chart/spacingright-legend/\n * Legend in right position with default spacing\n * @sample {highstock} stock/chart/spacingright/\n * Spacing set to 100\n * @sample {highmaps} maps/chart/spacing/\n * Spacing 100 all around\n *\n * @type {number}\n * @default 10\n * @since 2.1\n * @apioption chart.spacingRight\n */\n /**\n * The space between the top edge of the chart and the content (plot\n * area, axis title and labels, title, subtitle or legend in top\n * position).\n *\n * @sample {highcharts} highcharts/chart/spacingtop-100/\n * A top spacing of 100\n * @sample {highcharts} highcharts/chart/spacingtop-10/\n * Floating chart title makes the plot area align to the default\n * spacingTop of 10.\n * @sample {highstock} stock/chart/spacingtop/\n * A top spacing of 100\n * @sample {highmaps} maps/chart/spacing/\n * Spacing 100 all around\n *\n * @type {number}\n * @default 10\n * @since 2.1\n * @apioption chart.spacingTop\n */\n /**\n * Additional CSS styles to apply inline to the container `div` and the root\n * SVG.\n *\n * According to the CSS syntax documentation, it is recommended to quote\n * font family names that contain white space, digits, or punctuation\n * characters other than hyphens. In such cases, wrap the fontFamily\n * name as follows: `fontFamily: '\"Font name\"'`.\n *\n * Since v11, the root font size is 1rem by default, and all child element\n * are given a relative `em` font size by default. This allows implementers\n * to control all the chart's font sizes by only setting the root level.\n *\n * @see In styled mode, general chart styles can be set with the\n * `.highcharts-root` class.\n * @sample {highcharts} highcharts/chart/style-serif-font/\n * Using a serif type font\n * @sample {highcharts} highcharts/chart/style-special-font/\n * Using a font with special character in name\n * @sample {highcharts} highcharts/members/relative-font-size/\n * Relative font sizes\n * @sample {highcharts} highcharts/css/em/\n * Styled mode with relative font sizes\n * @sample {highstock} stock/chart/style/\n * Using a serif type font\n * @sample {highmaps} maps/chart/style-serif-font/\n * Using a serif type font\n *\n * @type {Highcharts.CSSObject}\n * @default {\"fontFamily\": \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', sans-serif\", \"fontSize\":\"1rem\"}\n * @apioption chart.style\n */\n /**\n * The default series type for the chart. Can be any of the chart types\n * listed under [plotOptions](#plotOptions) and [series](#series) or can\n * be a series provided by an additional module.\n *\n * In TypeScript this option has no effect in sense of typing and\n * instead the `type` option must always be set in the series.\n *\n * @sample {highcharts} highcharts/chart/type-bar/\n * Bar\n * @sample {highstock} stock/chart/type/\n * Areaspline\n * @sample {highmaps} maps/chart/type-mapline/\n * Mapline\n *\n * @type {string}\n * @default {highcharts} line\n * @default {highstock} line\n * @default {highmaps} map\n * @since 2.1.0\n * @apioption chart.type\n */\n type: 'line',\n /**\n * Decides in what dimensions the user can zoom by dragging the mouse.\n * Can be one of `x`, `y` or `xy`.\n *\n * @see [panKey](#chart.panKey)\n *\n * @sample {highcharts} highcharts/chart/zoomtype-none/\n * None by default\n * @sample {highcharts} highcharts/chart/zoomtype-x/\n * X\n * @sample {highcharts} highcharts/chart/zoomtype-y/\n * Y\n * @sample {highcharts} highcharts/chart/zoomtype-xy/\n * Xy\n * @sample {highcharts} highcharts/chart/zoomtype-polar/\n * Zoom on polar chart\n * @sample {highstock} stock/demo/basic-line/\n * None by default\n * @sample {highstock} stock/chart/zoomtype-x/\n * X\n * @sample {highstock} stock/chart/zoomtype-y/\n * Y\n * @sample {highstock} stock/chart/zoomtype-xy/\n * Xy\n * @sample {highmaps} maps/chart/zoomtype-xy/\n * Map with selection zoom\n *\n * @type {string}\n * @validvalue [\"x\", \"y\", \"xy\"]\n * @deprecated\n * @apioption chart.zoomType\n */\n /**\n * Enables zooming by a single touch, in combination with\n * [chart.zoomType](#chart.zoomType). When enabled, two-finger pinch\n * will still work as set up by [chart.pinchType](#chart.pinchType).\n * However, `zoomBySingleTouch` will interfere with touch-dragging the\n * chart to read the tooltip. And especially when vertical zooming is\n * enabled, it will make it hard to scroll vertically on the page.\n * @since 9.0.0\n * @sample highcharts/chart/zoombysingletouch\n * Zoom by single touch enabled, with buttons to toggle\n * @product highcharts highstock gantt\n * @deprecated\n */\n /**\n * Chart zooming options.\n * @since 10.2.1\n */\n zooming: {\n /**\n * Equivalent to [type](#chart.zooming.type), but for multitouch\n * gestures only. By default, the `pinchType` is the same as the\n * `type` setting. However, pinching can be enabled separately in\n * some cases, for example in stock charts where a mouse drag pans the\n * chart, while pinching is enabled. When [tooltip.followTouchMove](\n * #tooltip.followTouchMove) is true, pinchType only applies to\n * two-finger touches.\n *\n * @type {string}\n * @default {highcharts} undefined\n * @default {highstock} x\n * @product highcharts highstock gantt\n * @validvalue [\"x\", \"y\", \"xy\"]\n * @apioption chart.zooming.pinchType\n */\n /**\n * Decides in what dimensions the user can zoom by dragging the mouse.\n * Can be one of `x`, `y` or `xy`.\n *\n * @declare Highcharts.OptionsChartZoomingTypeValue\n * @type {string}\n * @default {highcharts} undefined\n * @product highcharts highstock gantt\n * @validvalue [\"x\", \"y\", \"xy\"]\n * @apioption chart.zooming.type\n */\n /**\n * Set a key to hold when dragging to zoom the chart. This is useful to\n * avoid zooming while moving points. Should be set different than\n * [chart.panKey](#chart.panKey).\n *\n * @type {string}\n * @default {highcharts} undefined\n * @validvalue [\"alt\", \"ctrl\", \"meta\", \"shift\"]\n * @requires modules/draggable-points\n * @apioption chart.zooming.key\n */\n /**\n * Enables zooming by a single touch, in combination with\n * [chart.zooming.type](#chart.zooming.type). When enabled, two-finger\n * pinch will still work as set up by [chart.zooming.pinchType]\n * (#chart.zooming.pinchType). However, `singleTouch` will interfere\n * with touch-dragging the chart to read the tooltip. And especially\n * when vertical zooming is enabled, it will make it hard to scroll\n * vertically on the page.\n *\n * @sample highcharts/chart/zoombysingletouch\n * Zoom by single touch enabled, with buttons to toggle\n *\n * @product highcharts highstock gantt\n */\n singleTouch: false,\n /**\n * The button that appears after a selection zoom, allowing the user\n * to reset zoom.\n */\n resetButton: {\n /**\n * What frame the button placement should be related to. Can be\n * either `plotBox` or `spacingBox`.\n *\n * @sample {highcharts} highcharts/chart/resetzoombutton-relativeto/\n * Relative to the chart\n * @sample {highstock} highcharts/chart/resetzoombutton-relativeto/\n * Relative to the chart\n *\n * @type {Highcharts.ButtonRelativeToValue}\n * @default plot\n * @apioption chart.zooming.resetButton.relativeTo\n */\n /**\n * A collection of attributes for the button. The object takes SVG\n * attributes like `fill`, `stroke`, `stroke-width` or `r`, the\n * border radius. The theme also supports `style`, a collection of\n * CSS properties for the text. Equivalent attributes for the hover\n * state are given in `theme.states.hover`.\n *\n * @sample {highcharts} highcharts/chart/resetzoombutton-theme/\n * Theming the button\n * @sample {highstock} highcharts/chart/resetzoombutton-theme/\n * Theming the button\n *\n * @type {Highcharts.SVGAttributes}\n * @since 10.2.1\n */\n theme: {\n /** @internal */\n zIndex: 6\n },\n /**\n * The position of the button.\n *\n * Note: Adjusting position values might cause overlap with chart\n * elements. Ensure coordinates do not obstruct other components or\n * data visibility.\n *\n * @sample {highcharts} highcharts/chart/resetzoombutton-position/\n * Above the plot area\n * @sample {highstock} highcharts/chart/resetzoombutton-position/\n * Above the plot area\n * @sample {highmaps} highcharts/chart/resetzoombutton-position/\n * Above the plot area\n *\n * @type {Highcharts.AlignObject}\n * @since 10.2.1\n */\n position: {\n /**\n * The horizontal alignment of the button.\n */\n align: 'right',\n /**\n * The horizontal offset of the button.\n */\n x: -10,\n /**\n * The vertical alignment of the button.\n *\n * @type {Highcharts.VerticalAlignValue}\n * @default top\n * @apioption chart.zooming.resetButton.position.verticalAlign\n */\n /**\n * The vertical offset of the button.\n */\n y: 10\n }\n }\n },\n /**\n * An explicit width for the chart. By default (when `null`) the width\n * is calculated from the offset width of the containing element.\n *\n * @sample {highcharts} highcharts/chart/width/\n * 800px wide\n * @sample {highstock} stock/chart/width/\n * 800px wide\n * @sample {highmaps} maps/chart/size/\n * Chart with explicit size\n *\n * @type {null|number|string}\n */\n width: null,\n /**\n * An explicit height for the chart. If a _number_, the height is\n * given in pixels. If given a _percentage string_ (for example\n * `'56%'`), the height is given as the percentage of the actual chart\n * width. This allows for preserving the aspect ratio across responsive\n * sizes.\n *\n * By default (when `null`) the height is calculated from the offset\n * height of the containing element, or 400 pixels if the containing\n * element's height is 0.\n *\n * @sample {highcharts} highcharts/chart/height/\n * Forced 200px height\n * @sample {highstock} stock/chart/height/\n * 300px height\n * @sample {highmaps} maps/chart/size/\n * Chart with explicit size\n * @sample highcharts/chart/height-percent/\n * Highcharts with percentage height\n * @sample highcharts/chart/height-inherited/\n * Chart with inherited height\n *\n * @type {null|number|string}\n */\n height: null,\n /**\n * The color of the outer chart border.\n *\n * @see In styled mode, the stroke is set with the\n * `.highcharts-background` class.\n *\n * @sample {highcharts} highcharts/chart/bordercolor/\n * Brown border\n * @sample {highstock} stock/chart/border/\n * Brown border\n * @sample {highmaps} maps/chart/border/\n * Border options\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n */\n borderColor: \"#334eff\" /* Palette.highlightColor80 */,\n /**\n * The pixel width of the outer chart border.\n *\n * @see In styled mode, the stroke is set with the\n * `.highcharts-background` class.\n *\n * @sample {highcharts} highcharts/chart/borderwidth/\n * 5px border\n * @sample {highstock} stock/chart/border/\n * 2px border\n * @sample {highmaps} maps/chart/border/\n * Border options\n *\n * @type {number}\n * @default 0\n * @apioption chart.borderWidth\n */\n /**\n * The background color or gradient for the outer chart area.\n *\n * @see In styled mode, the background is set with the\n * `.highcharts-background` class.\n *\n * @sample {highcharts} highcharts/chart/backgroundcolor-color/\n * Color\n * @sample {highcharts} highcharts/chart/backgroundcolor-gradient/\n * Gradient\n * @sample {highstock} stock/chart/backgroundcolor-color/\n * Color\n * @sample {highstock} stock/chart/backgroundcolor-gradient/\n * Gradient\n * @sample {highmaps} maps/chart/backgroundcolor-color/\n * Color\n * @sample {highmaps} maps/chart/backgroundcolor-gradient/\n * Gradient\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n */\n backgroundColor: \"#ffffff\" /* Palette.backgroundColor */,\n /**\n * The background color or gradient for the plot area.\n *\n * @see In styled mode, the plot background is set with the\n * `.highcharts-plot-background` class.\n *\n * @sample {highcharts} highcharts/chart/plotbackgroundcolor-color/\n * Color\n * @sample {highcharts} highcharts/chart/plotbackgroundcolor-gradient/\n * Gradient\n * @sample {highstock} stock/chart/plotbackgroundcolor-color/\n * Color\n * @sample {highstock} stock/chart/plotbackgroundcolor-gradient/\n * Gradient\n * @sample {highmaps} maps/chart/plotbackgroundcolor-color/\n * Color\n * @sample {highmaps} maps/chart/plotbackgroundcolor-gradient/\n * Gradient\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @apioption chart.plotBackgroundColor\n */\n /**\n * The URL for an image to use as the plot background. To set an image\n * as the background for the entire chart, set a CSS background image\n * to the container element. Note that for the image to be applied to\n * exported charts, its URL needs to be accessible by the export server.\n *\n * @see In styled mode, a plot background image can be set with the\n * `.highcharts-plot-background` class and a [custom pattern](\n * https://www.highcharts.com/docs/chart-design-and-style/gradients-shadows-and-patterns).\n *\n * @sample {highcharts} highcharts/chart/plotbackgroundimage/\n * Skies\n * @sample {highstock} stock/chart/plotbackgroundimage/\n * Skies\n *\n * @type {string}\n * @apioption chart.plotBackgroundImage\n */\n /**\n * The color of the inner chart or plot area border.\n *\n * @see In styled mode, a plot border stroke can be set with the\n * `.highcharts-plot-border` class.\n *\n * @sample {highcharts} highcharts/chart/plotbordercolor/\n * Blue border\n * @sample {highstock} stock/chart/plotborder/\n * Blue border\n * @sample {highmaps} maps/chart/plotborder/\n * Plot border options\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n */\n plotBorderColor: \"#cccccc\" /* Palette.neutralColor20 */\n};\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Chart_ChartDefaults = (ChartDefaults);\n\n;// ./code/es5/es-modules/Core/Color/Palettes.js\n/*\n * Series palettes for Highcharts. Series colors are defined in highcharts.css.\n * **Do not edit this file!** This file is generated using the 'gulp palette' task.\n */\nvar SeriesPalettes = {\n /**\n * Colors for data series and points\n */\n colors: [\n '#2caffe',\n '#544fc5',\n '#00e272',\n '#fe6a35',\n '#6b8abc',\n '#d568fb',\n '#2ee0ca',\n '#fa4b42',\n '#feb56a',\n '#91e8e1'\n ],\n};\n/* harmony default export */ var Palettes = (SeriesPalettes);\n\n;// ./code/es5/es-modules/Core/Time.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar pageLang = Core_Globals.pageLang, Time_win = Core_Globals.win;\n\nvar Time_defined = Core_Utilities.defined, Time_error = Core_Utilities.error, Time_extend = Core_Utilities.extend, Time_isNumber = Core_Utilities.isNumber, Time_isObject = Core_Utilities.isObject, Time_isString = Core_Utilities.isString, Time_merge = Core_Utilities.merge, Time_objectEach = Core_Utilities.objectEach, Time_pad = Core_Utilities.pad, Time_splat = Core_Utilities.splat, Time_timeUnits = Core_Utilities.timeUnits, Time_ucfirst = Core_Utilities.ucfirst;\n/* *\n *\n * Constants\n *\n * */\n// To do: Remove this when we no longer need support for Safari < v14.1\nvar hasOldSafariBug = Core_Globals.isSafari &&\n Time_win.Intl &&\n !Time_win.Intl.DateTimeFormat.prototype.formatRange;\nvar isDateTimeFormatOptions = function (obj) {\n return obj.main === void 0;\n};\n// We use the Spanish locale for internal weekday handling because it uses\n// unique letters for narrow weekdays\nvar spanishWeekdayIndex = function (weekday) {\n return ['D', 'L', 'M', 'X', 'J', 'V', 'S'].indexOf(weekday);\n};\n/* *\n *\n * Class\n *\n * */\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/**\n * The Time class. Time settings are applied in general for each page using\n * `Highcharts.setOptions`, or individually for each Chart item through the\n * [time](https://api.highcharts.com/highcharts/time) options set.\n *\n * The Time object is available from {@link Highcharts.Chart#time}, which refers\n * to `Highcharts.time` unless individual time settings are applied for each\n * chart.\n *\n * When configuring time settings for individual chart instances, be aware that\n * using `Highcharts.dateFormat` or `Highcharts.time.dateFormat` within\n * formatter callbacks relies on the global time object, which applies the\n * global language and time zone settings. To ensure charts with local time\n * settings function correctly, use `chart.time.dateFormat? instead. However,\n * the recommended best practice is to use `setOptions` to define global time\n * settings unless specific configurations are needed for each chart.\n *\n * @example\n * // Apply time settings globally\n * Highcharts.setOptions({\n * time: {\n * timezone: 'Europe/London'\n * }\n * });\n *\n * // Apply time settings by instance\n * const chart = Highcharts.chart('container', {\n * time: {\n * timezone: 'America/New_York'\n * },\n * series: [{\n * data: [1, 4, 3, 5]\n * }]\n * });\n *\n * // Use the Time object of a chart instance\n * console.log(\n * 'Current time in New York',\n * chart.time.dateFormat('%Y-%m-%d %H:%M:%S', Date.now())\n * );\n *\n * // Standalone use\n * const time = new Highcharts.Time({\n * timezone: 'America/New_York'\n * });\n * const s = time.dateFormat('%Y-%m-%d %H:%M:%S', Date.UTC(2020, 0, 1));\n * console.log(s); // => 2019-12-31 19:00:00\n *\n * @since 6.0.5\n *\n * @class\n * @name Highcharts.Time\n *\n * @param {Highcharts.TimeOptions} [options] Time options as defined in\n * [chart.options.time](/highcharts/time).\n */\nvar Time = /** @class */ (function () {\n /* *\n *\n * Constructors\n *\n * */\n function Time(options) {\n /* *\n *\n * Properties\n *\n * */\n this.options = {\n timezone: 'UTC'\n };\n this.variableTimezone = false;\n this.Date = Time_win.Date;\n this.update(options);\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Update the Time object with current options. It is called internally on\n * initializing Highcharts, after running `Highcharts.setOptions` and on\n * `Chart.update`.\n *\n * @private\n * @function Highcharts.Time#update\n *\n * @param {Highcharts.TimeOptions} [options]\n *\n */\n Time.prototype.update = function (options) {\n var _this = this;\n if (options === void 0) { options = {}; }\n this.dTLCache = {};\n this.options = options = Time_merge(true, this.options, options);\n var timezoneOffset = options.timezoneOffset,\n useUTC = options.useUTC;\n // Allow using a different Date class\n this.Date = options.Date || Time_win.Date || Date;\n // Assign the time zone. Handle the legacy, deprecated `useUTC` option.\n var timezone = options.timezone;\n if (Time_defined(useUTC)) {\n timezone = useUTC ? 'UTC' : void 0;\n }\n // The Etc/GMT time zones do not support offsets with half-hour\n // resolutions\n if (timezoneOffset && timezoneOffset % 60 === 0) {\n timezone = 'Etc/GMT' + ((timezoneOffset > 0 ? '+' : '')) + timezoneOffset / 60;\n }\n /*\n * The time object has options allowing for variable time zones, meaning\n * the axis ticks or series data needs to consider this.\n */\n this.variableTimezone = timezone !== 'UTC' &&\n (timezone === null || timezone === void 0 ? void 0 : timezone.indexOf('Etc/GMT')) !== 0;\n this.timezone = timezone;\n // Assign default time formats from locale strings\n ['months', 'shortMonths', 'weekdays', 'shortWeekdays'].forEach(function (name) {\n var isMonth = /months/i.test(name), isShort = /short/.test(name), options = { timeZone: 'UTC' };\n options[isMonth ? 'month' : 'weekday'] = isShort ? 'short' : 'long';\n _this[name] = (isMonth ?\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] :\n [3, 4, 5, 6, 7, 8, 9]).map(function (position) { return _this.dateFormat(options, (isMonth ? 31 : 1) * 24 * 36e5 * position); });\n });\n };\n /**\n * Get a date in terms of numbers (year, month, day etc) for further\n * processing. Takes the current `timezone` setting into account. Inverse of\n * `makeTime` and the native `Date` constructor and `Date.UTC`.\n *\n * The date is returned in array format with the following indices:\n *\n * 0: year,\n * 1: month (zero based),\n * 2: day,\n * 3: hours,\n * 4: minutes,\n * 5: seconds,\n * 6: milliseconds,\n * 7: weekday (Sunday as 0)\n *\n * @function Highcharts.Time#toParts\n *\n * @param {number|Date} [timestamp]\n * The timestamp in milliseconds since January 1st 1970.\n * A Date object is also accepted.\n *\n * @return {Array<number>} The date parts in array format.\n */\n Time.prototype.toParts = function (timestamp) {\n var _a = this.dateTimeFormat({\n weekday: 'narrow',\n day: 'numeric',\n month: 'numeric',\n year: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n }, timestamp, 'es')\n .split(/(?:, |\\/|:)/g), weekday = _a[0], dayOfMonth = _a[1], month = _a[2], year = _a[3], hours = _a[4], minutes = _a[5], seconds = _a[6];\n return [\n year,\n +month - 1,\n dayOfMonth,\n hours,\n minutes,\n seconds,\n // Milliseconds\n Math.floor(Number(timestamp) || 0) % 1000,\n // Weekday index\n spanishWeekdayIndex(weekday)\n ].map(Number);\n };\n /**\n * Shorthand to get a cached `Intl.DateTimeFormat` instance.\n */\n Time.prototype.dateTimeFormat = function (options, timestamp, locale) {\n var _a;\n if (locale === void 0) { locale = this.options.locale || pageLang; }\n var cacheKey = JSON.stringify(options) + locale;\n if (Time_isString(options)) {\n options = this.str2dtf(options);\n }\n var dTL = this.dTLCache[cacheKey];\n if (!dTL) {\n (_a = options.timeZone) !== null && _a !== void 0 ? _a : (options.timeZone = this.timezone);\n try {\n dTL = new Intl.DateTimeFormat(locale, options);\n }\n catch (e) {\n if (/Invalid time zone/i.test(e.message)) {\n Time_error(34);\n options.timeZone = 'UTC';\n dTL = new Intl.DateTimeFormat(locale, options);\n }\n else {\n Time_error(e.message, false);\n }\n }\n }\n this.dTLCache[cacheKey] = dTL;\n return (dTL === null || dTL === void 0 ? void 0 : dTL.format(timestamp)) || '';\n };\n /**\n * Take a locale-aware string format and return a full DateTimeFormat in\n * object form.\n */\n Time.prototype.str2dtf = function (s, dtf) {\n if (dtf === void 0) { dtf = {}; }\n var mapping = {\n L: { fractionalSecondDigits: 3 },\n S: { second: '2-digit' },\n M: { minute: 'numeric' },\n H: { hour: '2-digit' },\n k: { hour: 'numeric' },\n E: { weekday: 'narrow' },\n a: { weekday: 'short' },\n A: { weekday: 'long' },\n d: { day: '2-digit' },\n e: { day: 'numeric' },\n b: { month: 'short' },\n B: { month: 'long' },\n m: { month: '2-digit' },\n o: { month: 'numeric' },\n y: { year: '2-digit' },\n Y: { year: 'numeric' }\n };\n Object.keys(mapping).forEach(function (key) {\n if (s.indexOf(key) !== -1) {\n Time_extend(dtf, mapping[key]);\n }\n });\n return dtf;\n };\n /**\n * Make a time and returns milliseconds. Similar to `Date.UTC`, but takes\n * the current `timezone` setting into account.\n *\n * @function Highcharts.Time#makeTime\n *\n * @param {number} year\n * The year\n *\n * @param {number} month\n * The month. Zero-based, so January is 0.\n *\n * @param {number} [date=1]\n * The day of the month\n *\n * @param {number} [hours=0]\n * The hour of the day, 0-23.\n *\n * @param {number} [minutes=0]\n * The minutes\n *\n * @param {number} [seconds=0]\n * The seconds\n *\n * @return {number}\n * The time in milliseconds since January 1st 1970.\n */\n Time.prototype.makeTime = function (year, month, date, hours, minutes, seconds, milliseconds) {\n if (date === void 0) { date = 1; }\n if (hours === void 0) { hours = 0; }\n // eslint-disable-next-line new-cap\n var d = this.Date.UTC(year,\n month,\n date,\n hours,\n minutes || 0,\n seconds || 0,\n milliseconds || 0);\n if (this.timezone !== 'UTC') {\n var offset = this.getTimezoneOffset(d);\n d += offset;\n // Adjustments close to DST transitions\n if (\n // Optimize for speed by limiting the number of calls to\n // `getTimezoneOffset`. According to\n // https://en.wikipedia.org/wiki/Daylight_saving_time_by_country,\n // DST change may only occur in these months.\n [2, 3, 8, 9, 10, 11].indexOf(month) !== -1 &&\n // DST transitions occur only in the night-time\n (hours < 5 || hours > 20)) {\n var newOffset = this.getTimezoneOffset(d);\n if (offset !== newOffset) {\n d += newOffset - offset;\n // A special case for transitioning from summer time to winter\n // time. When the clock is set back, the same time is repeated\n // twice, i.e. 02:30 am is repeated since the clock is set back\n // from 3 am to 2 am. We need to make the same time as local\n // Date does.\n }\n else if (offset - 36e5 === this.getTimezoneOffset(d - 36e5) &&\n !hasOldSafariBug) {\n d -= 36e5;\n }\n }\n }\n return d;\n };\n /**\n * Parse a datetime string. Unless the string contains time zone\n * information, apply the current `timezone` from options. If the argument\n * is a number, return it.\n *\n * @function Highcharts.Time#parse\n * @param {string|number|undefined} s The datetime string to parse\n * @return {number|undefined} Parsed JavaScript timestamp\n */\n Time.prototype.parse = function (s) {\n if (!Time_isString(s)) {\n return s !== null && s !== void 0 ? s : void 0;\n }\n s = s\n // Firefox fails on YYYY/MM/DD\n .replace(/\\//g, '-')\n // Replace some non-standard notations\n .replace(/(GMT|UTC)/, '');\n // Extend shorthand hour timezone offset like +02\n // .replace(/([+-][0-9]{2})$/, '$1:00');\n // Check if the string has time zone information\n var hasTimezone = s.indexOf('Z') > -1 ||\n /([+-][0-9]{2}):?[0-9]{2}$/.test(s), isYYYYMMDD = /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/.test(s);\n if (!hasTimezone && !isYYYYMMDD) {\n s += 'Z';\n }\n var ts = Date.parse(s);\n if (Time_isNumber(ts)) {\n // Unless the string contains time zone information, convert from\n // the local time result of `Date.parse` via UTC into the current\n // timezone of the time object.\n return ts + ((!hasTimezone || isYYYYMMDD) ?\n this.getTimezoneOffset(ts) :\n 0);\n }\n };\n /**\n * Get the time zone offset based on the current timezone information as\n * set in the global options.\n *\n * @function Highcharts.Time#getTimezoneOffset\n *\n * @param {number} timestamp\n * The JavaScript timestamp to inspect.\n *\n * @return {number}\n * The timezone offset in minutes compared to UTC.\n */\n Time.prototype.getTimezoneOffset = function (timestamp) {\n if (this.timezone !== 'UTC') {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var _a = this.dateTimeFormat({ timeZoneName: 'shortOffset' }, timestamp, 'en')\n .split(/(GMT|:)/)\n .map(Number), date = _a[0], gmt = _a[1], hours = _a[2], colon = _a[3], _b = _a[4], minutes = _b === void 0 ? 0 : _b, offset = -(hours + minutes / 60) * 60 * 60000;\n // Possible future NaNs stop here\n if (Time_isNumber(offset)) {\n return offset;\n }\n }\n return 0;\n };\n /**\n * Formats a JavaScript date timestamp (milliseconds since January 1 1970)\n * into a human readable date string.\n *\n * The `format` parameter accepts two types of values:\n * - An object containing settings that are passed directly on to\n * [Intl.DateTimeFormat.prototype.format](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/format).\n * - A format string containing either individual or locale-aware format\n * keys. **Individual keys**, for example `%Y-%m-%d`, are listed below.\n * **Locale-aware keys** are grouped by square brackets, for example\n * `%[Ymd]`. The order of keys within the square bracket doesn't affect\n * the output, which is determined by the locale. See example below.\n * Internally, the locale-aware format keys are just a shorthand for the\n * full object formats, but are particularly practical in\n * [templating](https://www.highcharts.com/docs/chart-concepts/templating)\n * where full object definitions are not an option.\n *\n * The available string format keys are listed below. Additional formats can\n * be given in the {@link Highcharts.dateFormats} hook.\n *\n * Supported format keys:\n * | Key | Description | Notes on locale-aware format |\n * -------|----------------------------------------------|-------|\n * | `%A` | Long weekday, like 'Monday' | |\n * | `%a` | Short weekday, like 'Mon' | |\n * | `%E` | Narrow weekday, single character | |\n * | `%d` | Two digit day of the month, 01 to 31 | |\n * | `%e` | Day of the month, 1 through 31 | |\n * | `%w` | Day of the week, 0 through 6 | N/A |\n * | `%b` | Short month, like 'Jan' | |\n * | `%B` | Long month, like 'January' | |\n * | `%m` | Two digit month number, 01 through 12 | |\n * | `%o` | Month number, 1 through 12 | |\n * | `%y` | Two digits year, like 24 for 2024 | |\n * | `%Y` | Four digits year, like 2024 | |\n * | `%H` | Two digits hours in 24h format, 00 through 23 | Depending on the locale, 12h format may be instered. |\n * | `%k` | Hours in 24h format, 0 through 23 | Depending on the locale, 12h format may be instered. |\n * | `%I` | Two digits hours in 12h format, 00 through 11 | N/A. The locale determines the hour format. |\n * | `%l` | Hours in 12h format, 1 through 12 | N/A. The locale determines the hour format. |\n * | `%M` | Two digits minutes, 00 through 59 | |\n * | `%p` | Upper case AM or PM | N/A. The locale determines whether to add AM and PM. |\n * | `%P` | Lower case AM or PM | N/A. The locale determines whether to add AM and PM. |\n * | `%S` | Two digits seconds, 00 through 59 | |\n * | `%L` | Milliseconds (naming from Ruby) | |\n *\n * @example\n * // Object format, US English\n * const time1 = new Highcharts.Time({ locale: 'en-US' });\n * console.log(\n * time1.dateFormat({\n * day: 'numeric',\n * month: 'short',\n * year: 'numeric',\n * hour: 'numeric',\n * minute: 'numeric'\n * }, Date.UTC(2024, 11, 31))\n * ); // => Dec 31, 2024, 12:00 AM\n *\n * // Object format, British English\n * const time2 = new Highcharts.Time({ locale: 'en-GB' });\n * console.log(\n * time2.dateFormat({\n * day: 'numeric',\n * month: 'short',\n * year: 'numeric',\n * hour: 'numeric',\n * minute: 'numeric'\n * }, Date.UTC(2024, 11, 31))\n * ); // => 31 Dec 2024, 00:00\n *\n * // Individual key string replacement\n * const time3 = new Highcharts.Time();\n * console.log(\n * time3.dateFormat('%Y-%m-%d %H:%M:%S', Date.UTC(2024, 11, 31))\n * ); // => 2024-12-31 00:00:00\n *\n * // Locale-aware keys, US English\n * const time4 = new Highcharts.Time({ locale: 'en-US' });\n * console.log(\n * time4.dateFormat('%[YebHM]', Date.UTC(2024, 11, 31))\n * ); // => Dec 31, 2024, 12:00 AM\n *\n * // Locale-aware keys, British English\n * const time5 = new Highcharts.Time({ locale: 'en-GB' });\n * console.log(\n * time5.dateFormat('%[YebHM]', Date.UTC(2024, 11, 31))\n * ); // => 31 Dec 2024, 00:00\n *\n * // Mixed locale-aware and individual keys\n * console.log(\n * time5.dateFormat('%[Yeb], %H:%M', Date.UTC(2024, 11, 31))\n * ); // => 31 Dec 2024, 00:00\n *\n * @function Highcharts.Time#dateFormat\n *\n * @param {string|Highcharts.DateTimeFormatOptions} format\n * The desired string format where various time representations are\n * prefixed with %, or an object representing the locale-aware format\n * options.\n *\n * @param {number} [timestamp]\n * The JavaScript timestamp.\n *\n * @param {boolean} [upperCaseFirst=false]\n * Upper case first letter in the return.\n *\n * @return {string}\n * The formatted date.\n */\n Time.prototype.dateFormat = function (format, timestamp, upperCaseFirst) {\n var _a;\n var lang = (_a = Core_Globals.defaultOptions) === null || _a === void 0 ? void 0 : _a.lang;\n if (!Time_defined(timestamp) || isNaN(timestamp)) {\n return (lang === null || lang === void 0 ? void 0 : lang.invalidDate) || '';\n }\n format = format !== null && format !== void 0 ? format : '%Y-%m-%d %H:%M:%S';\n // First, identify and replace locale-aware formats like %[Ymd]\n if (Time_isString(format)) {\n var localeAwareRegex = /%\\[([a-zA-Z]+)\\]/g;\n var match = void 0;\n while ((match = localeAwareRegex.exec(format))) {\n format = format.replace(match[0], this.dateTimeFormat(match[1], timestamp));\n }\n }\n // Then, replace static formats like %Y, %m, %d etc.\n if (Time_isString(format) && format.indexOf('%') !== -1) {\n var time_1 = this,\n _b = this.toParts(timestamp),\n fullYear = _b[0],\n month = _b[1],\n dayOfMonth = _b[2],\n hours = _b[3],\n minutes = _b[4],\n seconds = _b[5],\n milliseconds = _b[6],\n weekday = _b[7],\n langWeekdays = (lang === null || lang === void 0 ? void 0 : lang.weekdays) || this.weekdays,\n shortWeekdays = (lang === null || lang === void 0 ? void 0 : lang.shortWeekdays) || this.shortWeekdays,\n months = (lang === null || lang === void 0 ? void 0 : lang.months) || this.months,\n shortMonths = (lang === null || lang === void 0 ? void 0 : lang.shortMonths) || this.shortMonths, \n // List all format keys. Custom formats can be added from the\n // outside.\n replacements = Time_extend({\n // Day\n // Short weekday, like 'Mon'\n a: shortWeekdays ?\n shortWeekdays[weekday] :\n langWeekdays[weekday].substr(0, 3),\n // Long weekday, like 'Monday'\n A: langWeekdays[weekday],\n // Two digit day of the month, 01 to 31\n d: Time_pad(dayOfMonth),\n // Day of the month, 1 through 31\n e: Time_pad(dayOfMonth, 2, ' '),\n // Day of the week, 0 through 6\n w: weekday,\n // Week (none implemented)\n // 'W': weekNumber(),\n // Month\n // Short month, like 'Jan'\n b: shortMonths[month],\n // Long month, like 'January'\n B: months[month],\n // Two digit month number, 01 through 12\n m: Time_pad(month + 1),\n // Month number, 1 through 12 (#8150)\n o: month + 1,\n // Year\n // Two digits year, like 09 for 2009\n y: fullYear.toString().substr(2, 2),\n // Four digits year, like 2009\n Y: fullYear,\n // Time\n // Two digits hours in 24h format, 00 through 23\n H: Time_pad(hours),\n // Hours in 24h format, 0 through 23\n k: hours,\n // Two digits hours in 12h format, 00 through 11\n I: Time_pad((hours % 12) || 12),\n // Hours in 12h format, 1 through 12\n l: (hours % 12) || 12,\n // Two digits minutes, 00 through 59\n M: Time_pad(minutes),\n // Upper case AM or PM\n p: hours < 12 ? 'AM' : 'PM',\n // Lower case AM or PM\n P: hours < 12 ? 'am' : 'pm',\n // Two digits seconds, 00 through 59\n S: Time_pad(seconds),\n // Milliseconds (naming from Ruby)\n L: Time_pad(milliseconds, 3)\n },\n Core_Globals.dateFormats);\n // Do the replaces\n Time_objectEach(replacements, function (val, key) {\n if (Time_isString(format)) {\n // Regex would do it in one line, but this is faster\n while (format.indexOf('%' + key) !== -1) {\n format = format.replace('%' + key, typeof val === 'function' ?\n val.call(time_1, timestamp) :\n val);\n }\n }\n });\n }\n else if (Time_isObject(format)) {\n var tzHours = (this.getTimezoneOffset(timestamp) || 0) /\n (60000 * 60), timeZone = this.timezone || ('Etc/GMT' + (tzHours >= 0 ? '+' : '') + tzHours), _c = format.prefix, prefix = _c === void 0 ? '' : _c, _d = format.suffix, suffix = _d === void 0 ? '' : _d;\n format = prefix + this.dateTimeFormat(Time_extend({ timeZone: timeZone }, format), timestamp) + suffix;\n }\n // Optionally sentence-case the string and return\n return upperCaseFirst ? Time_ucfirst(format) : format;\n };\n /**\n * Resolve legacy formats of dateTimeLabelFormats (strings and arrays) into\n * an object.\n * @private\n * @param {string|Array<T>|Highcharts.Dictionary<T>} f\n * General format description\n * @return {Highcharts.Dictionary<T>}\n * The object definition\n */\n Time.prototype.resolveDTLFormat = function (f) {\n if (!Time_isObject(f, true)) { // Check for string or array\n f = Time_splat(f);\n return {\n main: f[0],\n from: f[1],\n to: f[2]\n };\n }\n // Type-check DateTimeFormatOptions against DateTimeLabelFormatObject\n if (Time_isObject(f, true) && isDateTimeFormatOptions(f)) {\n return { main: f };\n }\n return f;\n };\n /**\n * Return an array with time positions distributed on round time values\n * right and right after min and max. Used in datetime axes as well as for\n * grouping data on a datetime axis.\n *\n * @function Highcharts.Time#getTimeTicks\n *\n * @param {Highcharts.TimeNormalizedObject} normalizedInterval\n * The interval in axis values (ms) and the count\n *\n * @param {number} [min]\n * The minimum in axis values\n *\n * @param {number} [max]\n * The maximum in axis values\n *\n * @param {number} [startOfWeek=1]\n *\n * @return {Highcharts.AxisTickPositionsArray}\n * Time positions\n */\n Time.prototype.getTimeTicks = function (normalizedInterval, min, max, startOfWeek) {\n var time = this,\n tickPositions = [],\n higherRanks = {},\n _a = normalizedInterval.count,\n count = _a === void 0 ? 1 : _a,\n unitRange = normalizedInterval.unitRange;\n var _b = time.toParts(min),\n year = _b[0],\n month = _b[1],\n dayOfMonth = _b[2],\n hours = _b[3],\n minutes = _b[4],\n seconds = _b[5],\n milliseconds = (min || 0) % 1000,\n variableDayLength;\n startOfWeek !== null && startOfWeek !== void 0 ? startOfWeek : (startOfWeek = 1);\n if (Time_defined(min)) { // #1300\n milliseconds = unitRange >= Time_timeUnits.second ?\n 0 : // #3935\n count * Math.floor(milliseconds / count);\n if (unitRange >= Time_timeUnits.second) { // Second\n seconds = unitRange >= Time_timeUnits.minute ?\n 0 : // #3935\n count * Math.floor(seconds / count);\n }\n if (unitRange >= Time_timeUnits.minute) { // Minute\n minutes = unitRange >= Time_timeUnits.hour ?\n 0 :\n count * Math.floor(minutes / count);\n }\n if (unitRange >= Time_timeUnits.hour) { // Hour\n hours = unitRange >= Time_timeUnits.day ?\n 0 :\n count * Math.floor(hours / count);\n }\n if (unitRange >= Time_timeUnits.day) { // Day\n dayOfMonth = unitRange >= Time_timeUnits.month ?\n 1 :\n Math.max(1, count * Math.floor(dayOfMonth / count));\n }\n if (unitRange >= Time_timeUnits.month) { // Month\n month = unitRange >= Time_timeUnits.year ? 0 :\n count * Math.floor(month / count);\n }\n if (unitRange >= Time_timeUnits.year) { // Year\n year -= year % count;\n }\n // Week is a special case that runs outside the hierarchy\n if (unitRange === Time_timeUnits.week) {\n if (count) {\n min = time.makeTime(year, month, dayOfMonth, hours, minutes, seconds, milliseconds);\n }\n // Get start of current week, independent of count\n var weekday = this.dateTimeFormat({\n timeZone: this.timezone,\n weekday: 'narrow'\n },\n min, 'es'),\n weekdayNo = spanishWeekdayIndex(weekday);\n dayOfMonth += -weekdayNo + startOfWeek +\n // We don't want to skip days that are before\n // startOfWeek (#7051)\n (weekdayNo < startOfWeek ? -7 : 0);\n }\n min = time.makeTime(year, month, dayOfMonth, hours, minutes, seconds, milliseconds);\n // Handle local timezone offset\n if (time.variableTimezone && Time_defined(max)) {\n // Detect whether we need to take the DST crossover into\n // consideration. If we're crossing over DST, the day length may\n // be 23h or 25h and we need to compute the exact clock time for\n // each tick instead of just adding hours. This comes at a cost,\n // so first we find out if it is needed (#4951).\n variableDayLength = (\n // Long range, assume we're crossing over.\n max - min > 4 * Time_timeUnits.month ||\n // Short range, check if min and max are in different time\n // zones.\n time.getTimezoneOffset(min) !==\n time.getTimezoneOffset(max));\n }\n // Iterate and add tick positions at appropriate values\n var t = min,\n i = 1;\n while (t < max) {\n tickPositions.push(t);\n // Increase the years\n if (unitRange === Time_timeUnits.year) {\n t = time.makeTime(year + i * count, 0);\n // Increase the months\n }\n else if (unitRange === Time_timeUnits.month) {\n t = time.makeTime(year, month + i * count);\n // If we're using local time, the interval is not fixed as it\n // jumps one hour at the DST crossover\n }\n else if (variableDayLength && (unitRange === Time_timeUnits.day ||\n unitRange === Time_timeUnits.week)) {\n t = time.makeTime(year, month, dayOfMonth +\n i * count * (unitRange === Time_timeUnits.day ? 1 : 7));\n }\n else if (variableDayLength &&\n unitRange === Time_timeUnits.hour &&\n count > 1) {\n // Make sure higher ranks are preserved across DST (#6797,\n // #7621)\n t = time.makeTime(year, month, dayOfMonth, hours + i * count);\n // Else, the interval is fixed and we use simple addition\n }\n else {\n t += unitRange * count;\n }\n i++;\n }\n // Push the last time\n tickPositions.push(t);\n // Handle higher ranks. Mark new days if the time is on midnight\n // (#950, #1649, #1760, #3349). Use a reasonable dropout threshold\n // to prevent looping over dense data grouping (#6156).\n if (unitRange <= Time_timeUnits.hour && tickPositions.length < 10000) {\n tickPositions.forEach(function (t) {\n if (\n // Speed optimization, no need to run dateFormat unless\n // we're on a full or half hour\n t % 1800000 === 0 &&\n // Check for local or global midnight\n time.dateFormat('%H%M%S%L', t) === '000000000') {\n higherRanks[t] = 'day';\n }\n });\n }\n }\n // Record information on the chosen unit - for dynamic label formatter\n tickPositions.info = Time_extend(normalizedInterval, {\n higherRanks: higherRanks,\n totalRange: unitRange * count\n });\n return tickPositions;\n };\n /**\n * Get the optimal date format for a point, based on a range.\n *\n * @private\n * @function Highcharts.Time#getDateFormat\n *\n * @param {number} range\n * The time range\n *\n * @param {number} timestamp\n * The timestamp of the date\n *\n * @param {number} startOfWeek\n * An integer representing the first day of the week, where 0 is\n * Sunday.\n *\n * @param {Highcharts.Dictionary<string>} dateTimeLabelFormats\n * A map of time units to formats.\n *\n * @return {string}\n * The optimal date format for a point.\n */\n Time.prototype.getDateFormat = function (range, timestamp, startOfWeek, dateTimeLabelFormats) {\n var dateStr = this.dateFormat('%m-%d %H:%M:%S.%L', timestamp), blank = '01-01 00:00:00.000', strpos = {\n millisecond: 15,\n second: 12,\n minute: 9,\n hour: 6,\n day: 3\n };\n var n = 'millisecond', \n // For sub-millisecond data, #4223\n lastN = n;\n for (n in Time_timeUnits) { // eslint-disable-line guard-for-in\n // If the range is exactly one week and we're looking at a\n // Sunday/Monday, go for the week format\n if (range === Time_timeUnits.week &&\n +this.dateFormat('%w', timestamp) === startOfWeek &&\n dateStr.substr(6) === blank.substr(6)) {\n n = 'week';\n break;\n }\n // The first format that is too great for the range\n if (Time_timeUnits[n] > range) {\n n = lastN;\n break;\n }\n // If the point is placed every day at 23:59, we need to show\n // the minutes as well. #2637.\n if (strpos[n] &&\n dateStr.substr(strpos[n]) !== blank.substr(strpos[n])) {\n break;\n }\n // Weeks are outside the hierarchy, only apply them on\n // Mondays/Sundays like in the first condition\n if (n !== 'week') {\n lastN = n;\n }\n }\n return this.resolveDTLFormat(dateTimeLabelFormats[n]).main;\n };\n return Time;\n}());\n/* *\n *\n * Default export\n *\n * */\n/* harmony default export */ var Core_Time = (Time);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Normalized interval.\n *\n * @interface Highcharts.TimeNormalizedObject\n */ /**\n* The count.\n*\n* @name Highcharts.TimeNormalizedObject#count\n* @type {number|undefined}\n*/ /**\n* The interval in axis values (ms).\n*\n* @name Highcharts.TimeNormalizedObject#unitRange\n* @type {number}\n*/\n/**\n * Function of an additional date format specifier.\n *\n * @callback Highcharts.TimeFormatCallbackFunction\n *\n * @param {number} timestamp\n * The time to format.\n *\n * @return {string}\n * The formatted portion of the date.\n */\n/**\n * Time ticks.\n *\n * @interface Highcharts.AxisTickPositionsArray\n * @extends global.Array<number>\n */ /**\n* @name Highcharts.AxisTickPositionsArray#info\n* @type {Highcharts.TimeTicksInfoObject|undefined}\n*/\n/**\n * A callback to return the time zone offset for a given datetime. It\n * takes the timestamp in terms of milliseconds since January 1 1970,\n * and returns the timezone offset in minutes. This provides a hook\n * for drawing time based charts in specific time zones using their\n * local DST crossover dates, with the help of external libraries.\n *\n * @callback Highcharts.TimezoneOffsetCallbackFunction\n *\n * @param {number} timestamp\n * Timestamp in terms of milliseconds since January 1 1970.\n *\n * @return {number}\n * Timezone offset in minutes.\n */\n/**\n * Options for formatting dates and times using the [Intl.DateTimeFormat](\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat\n * ) API, and extended with some custom options for Highcharts.\n *\n * @interface Highcharts.DateTimeFormatOptions\n */ /**\n* The locale matching algorithm to use.\n*\n* @name Highcharts.DateTimeFormatOptions#localeMatcher\n* @type {string|undefined}\n*/ /**\n* The time zone to use. The default is the browser's default time zone.\n*\n* @name Highcharts.DateTimeFormatOptions#timeZone\n* @type {string|undefined}\n*/ /**\n* Whether to use 12-hour time (as opposed to 24-hour time).\n*\n* @name Highcharts.DateTimeFormatOptions#hour12\n* @type {'auto'|'always'|'never'|undefined}\n*/ /**\n* The format matching algorithm to use.\n*\n* @name Highcharts.DateTimeFormatOptions#formatMatcher\n* @type {string|undefined}\n*/ /**\n* The representation of the weekday.\n*\n* @name Highcharts.DateTimeFormatOptions#weekday\n* @type {'narrow'|'short'|'long'|undefined}\n*/ /**\n* The representation of the era.\n*\n* @name Highcharts.DateTimeFormatOptions#era\n* @type {'narrow'|'short'|'long'|undefined}\n*/ /**\n* The representation of the year.\n*\n* @name Highcharts.DateTimeFormatOptions#year\n* @type {'numeric'|'2-digit'|undefined}\n*/ /**\n* The representation of the month.\n* \"narrow\", \"short\", \"long\".\n*\n* @name Highcharts.DateTimeFormatOptions#month\n* @type {'numeric'|'2-digit'|'narrow'|'short'|'long'|undefined}\n*/ /**\n* The representation of the day.\n*\n* @name Highcharts.DateTimeFormatOptions#day\n* @type {'numeric'|'2-digit'|undefined}\n*/ /**\n* The representation of the hour.\n*\n* @name Highcharts.DateTimeFormatOptions#hour\n* @type {'numeric'|'2-digit'|undefined}\n*/ /**\n* The representation of the minute.\n*\n* @name Highcharts.DateTimeFormatOptions#minute\n* @type {'numeric'|'2-digit'|undefined}\n*/ /**\n* The representation of the second.\n*\n* @name Highcharts.DateTimeFormatOptions#second\n* @type {'numeric'|'2-digit'|undefined}\n*/ /**\n* The number of fractional digits to use. 3 means milliseconds.\n*\n* @name Highcharts.DateTimeFormatOptions#fractionalSecondDigits\n* @type {number|undefined}\n*/ /**\n* The representation of the time zone name.\n*\n* @name Highcharts.DateTimeFormatOptions#timeZoneName\n* @type {'short'|'long'|undefined}\n*/ /**\n* A prefix for the time string. Custom Highcharts option.\n*\n* @name Highcharts.DateTimeFormatOptions#prefix\n* @type {'string'|undefined}\n*/ /**\n* A suffix for the time string. Custom Highcharts option.\n*\n* @name Highcharts.DateTimeFormatOptions#suffix\n* @type {'string'|undefined}\n*/\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Defaults.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar isTouchDevice = Core_Globals.isTouchDevice;\n\n\n\nvar Defaults_fireEvent = Core_Utilities.fireEvent, Defaults_merge = Core_Utilities.merge;\n/* *\n *\n * API Options\n *\n * */\n/**\n * Global default settings.\n *\n * @name Highcharts.defaultOptions\n * @type {Highcharts.Options}\n */ /**\n* @optionparent\n* @private\n*/\nvar defaultOptions = {\n /**\n * An array containing the default colors for the chart's series. When\n * all colors are used, new colors are pulled from the start again.\n *\n * Default colors can also be set on a series or series.type basis,\n * see [column.colors](#plotOptions.column.colors),\n * [pie.colors](#plotOptions.pie.colors).\n *\n * In styled mode, the colors option doesn't exist. Instead, colors\n * are defined in CSS and applied either through series or point class\n * names, or through the [chart.colorCount](#chart.colorCount) option.\n *\n * @sample {highcharts} highcharts/chart/colors/\n * Assign a global color theme\n * @sample highcharts/members/theme-v10/\n * Latest release styled like version 10\n *\n * @type {Array<(Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject)>}\n * @default [\n * \"#2caffe\",\n * \"#544fc5\",\n * \"#00e272\",\n * \"#fe6a35\",\n * \"#6b8abc\",\n * \"#d568fb\",\n * \"#2ee0ca\",\n * \"#fa4b42\",\n * \"#feb56a\",\n * \"#91e8e1\"\n * ]\n */\n colors: Palettes.colors,\n /**\n * Styled mode only. Configuration object for adding SVG definitions for\n * reusable elements. See [gradients, shadows and\n * patterns](https://www.highcharts.com/docs/chart-design-and-style/gradients-shadows-and-patterns)\n * for more information and code examples.\n *\n * @type {*}\n * @since 5.0.0\n * @apioption defs\n */\n /**\n * @ignore-option\n */\n symbols: ['circle', 'diamond', 'square', 'triangle', 'triangle-down'],\n /**\n * An object containing language-related strings and settings. A typical\n * setup uses `Highcharts.setOptions` to make the options apply to all\n * charts in the same page.\n *\n * ```js\n * Highcharts.setOptions({\n * lang: {\n * locale: 'fr'\n * }\n * });\n * ```\n */\n lang: {\n /**\n * The browser locale to use for date and number formatting. The actual\n * locale used for each chart is determined in three steps:\n * 1. If this `lang.locale` option is specified, it is used.\n * 2. Else, look for the closest ancestor HTML element with a `lang`\n * attribute, typically the `<html>` element.\n * 3. If no 'lang' attribute is found, use the default browser locale.\n *\n * Use `en-GB`, British English, for approximate consistency with\n * Highcharts v < 12.\n *\n * @sample highcharts/lang/locale/\n * Set the locale using the `lang.locale` option\n * @sample highcharts/lang/locale-attribute/\n * Pick up the locale from the HTML `lang` attribute\n * @sample highcharts/members/highcharts-numberformat\n * Arabic locale with digits and dates *\n *\n * @since 12.0.0\n * @type {string|Array<string>}\n */\n locale: void 0,\n /**\n * The loading text that appears when the chart is set into the loading\n * state following a call to `chart.showLoading`.\n */\n loading: 'Loading...',\n /**\n * An array containing the months names. Corresponds to the `%B` format\n * in `Highcharts.dateFormat()`. Defaults to 'undefined',\n * meaning the default month names are used according to the\n * `lang.locale` setting.\n *\n * @type {Array<string>}\n */\n months: void 0,\n /**\n * An array containing the months names in abbreviated form. Corresponds\n * to the `%b` format in `Highcharts.dateFormat()`. Defaults to\n * 'undefined', meaning the default short month names are used according\n * to the `lang.locale` setting.\n *\n * @type {Array<string>}\n */\n shortMonths: void 0,\n /**\n * An array containing the weekday names. Defaults to 'undefined',\n * meaning the default weekday names are used according to the\n * `lang.locale` setting.\n *\n * @type {Array<string>}\n */\n weekdays: void 0,\n /**\n * Short week days, starting Sunday. Defaults to 'undefined', meaning\n * the default short weekday names are used according to the\n * `lang.locale` setting.\n *\n * @sample highcharts/lang/shortweekdays/\n * Finnish two-letter abbreviations\n *\n * @type {Array<string>}\n * @since 4.2.4\n * @apioption lang.shortWeekdays\n */\n /**\n * What to show in a date field for invalid dates. Defaults to an empty\n * string.\n *\n * @type {string}\n * @since 4.1.8\n * @product highcharts highstock\n * @apioption lang.invalidDate\n */\n /**\n * The title appearing on hovering the zoom in button. The text itself\n * defaults to \"+\" and can be changed in the button options.\n *\n * @type {string}\n * @default Zoom in\n * @product highmaps\n * @apioption lang.zoomIn\n */\n /**\n * The title appearing on hovering the zoom out button. The text itself\n * defaults to \"-\" and can be changed in the button options.\n *\n * @type {string}\n * @default Zoom out\n * @product highmaps\n * @apioption lang.zoomOut\n */\n /**\n * The default decimal point used in the `Highcharts.numberFormat`\n * method unless otherwise specified in the function arguments. Defaults\n * to the locale decimal point as determined by `lang.locale`.\n *\n * @type {string}\n * @default undefined\n * @since 1.2.2\n * @apioption lang.decimalPoint\n */\n /**\n * [Metric prefixes](https://en.wikipedia.org/wiki/Metric_prefix) used\n * to shorten high numbers in axis labels. Replacing any of the\n * positions with `null` causes the full number to be written. Setting\n * `numericSymbols` to `undefined` disables shortening altogether.\n *\n * @sample {highcharts} highcharts/lang/numericsymbols/\n * Replacing the symbols with text\n * @sample {highstock} highcharts/lang/numericsymbols/\n * Replacing the symbols with text\n *\n * @type {Array<string>}\n * @default [\"k\", \"M\", \"G\", \"T\", \"P\", \"E\"]\n * @since 2.3.0\n */\n numericSymbols: ['k', 'M', 'G', 'T', 'P', 'E'],\n /**\n * The magnitude of [numericSymbols](#lang.numericSymbol) replacements.\n * Use 10000 for Japanese, Korean and various Chinese locales, which\n * use symbols for 10^4, 10^8 and 10^12.\n *\n * @sample highcharts/lang/numericsymbolmagnitude/\n * 10000 magnitude for Japanese\n *\n * @type {number}\n * @default 1000\n * @since 5.0.3\n * @apioption lang.numericSymbolMagnitude\n */\n /**\n * The default thousands separator used in the `Highcharts.numberFormat`\n * method unless otherwise specified in the function arguments. Defaults\n * to the locale thousands separator as determined by `lang.locale`.\n *\n * @type {string}\n * @default undefined\n * @since 1.2.2\n * @apioption lang.thousandsSep\n */\n /**\n * The text for the label appearing when a chart is zoomed.\n *\n * @since 1.2.4\n */\n resetZoom: 'Reset zoom',\n /**\n * The tooltip title for the label appearing when a chart is zoomed.\n *\n * @since 1.2.4\n */\n resetZoomTitle: 'Reset zoom level 1:1'\n },\n /**\n * Global options that don't apply to each chart. These options, like\n * the `lang` options, must be set using the `Highcharts.setOptions`\n * method.\n *\n * ```js\n * Highcharts.setOptions({\n * global: {\n * buttonTheme: {\n * fill: '#d0d0d0'\n * }\n * }\n * });\n * ```\n */\n global: {\n /**\n * General theme for buttons. This applies to the zoom button, exporting\n * context menu, map navigation, range selector buttons and custom\n * buttons generated using the `SVGRenderer.button` function. However,\n * each of these may be overridden with more specific options.\n *\n * @sample highcharts/global/buttontheme\n * General button theme\n * @since 11.4.2\n */\n buttonTheme: {\n /**\n * The fill color for buttons\n */\n fill: \"#f7f7f7\" /* Palette.neutralColor3 */,\n /**\n * The padding of buttons\n */\n padding: 8,\n /**\n * The border radius for buttons\n */\n r: 2,\n /**\n * The stroke color for buttons\n */\n stroke: \"#cccccc\" /* Palette.neutralColor20 */,\n /**\n * The stroke width for buttons\n */\n 'stroke-width': 1,\n /**\n * CSS styling for the buttons' text\n */\n style: {\n color: \"#333333\" /* Palette.neutralColor80 */,\n cursor: 'pointer',\n fontSize: '0.8em',\n fontWeight: 'normal'\n },\n /**\n * State overrides for the buttons\n */\n states: {\n /**\n * Hover state overrides for the buttons are applied in addition\n * to the normal state options\n */\n hover: {\n fill: \"#e6e6e6\" /* Palette.neutralColor10 */\n },\n /**\n * Select state overrides for the buttons are applied in\n * addition to the normal state options\n */\n select: {\n fill: \"#e6e9ff\" /* Palette.highlightColor10 */,\n style: {\n color: \"#000000\" /* Palette.neutralColor100 */,\n fontWeight: 'bold'\n }\n },\n /**\n * Disabled state overrides for the buttons are applied in\n * addition to the normal state options\n */\n disabled: {\n /**\n * Disabled state CSS style overrides for the buttons' text\n */\n style: {\n color: \"#cccccc\" /* Palette.neutralColor20 */\n }\n }\n }\n }\n },\n /**\n * Time options that can apply globally or to individual charts. These\n * settings affect how `datetime` axes are laid out, how tooltips are\n * formatted, how series\n * [pointIntervalUnit](#plotOptions.series.pointIntervalUnit) works and how\n * the Highcharts Stock range selector handles time.\n *\n * The common use case is that all charts in the same Highcharts object\n * share the same time settings, in which case the global settings are set\n * using `setOptions`.\n *\n * ```js\n * // Apply time settings globally\n * Highcharts.setOptions({\n * time: {\n * timezone: 'Europe/London'\n * }\n * });\n * // Apply time settings by instance\n * const chart = Highcharts.chart('container', {\n * time: {\n * timezone: 'America/New_York'\n * },\n * series: [{\n * data: [1, 4, 3, 5]\n * }]\n * });\n *\n * // Use the Time object\n * console.log(\n * 'Current time in New York',\n * chart.time.dateFormat('%Y-%m-%d %H:%M:%S', Date.now())\n * );\n * ```\n *\n * Since v6.0.5, the time options were moved from the `global` object to the\n * `time` object, and time options can be set on each individual chart.\n *\n * @sample {highcharts|highstock}\n * highcharts/time/timezone/\n * Set the timezone globally\n * @sample {highcharts}\n * highcharts/time/individual/\n * Set the timezone per chart instance\n * @sample {highstock}\n * stock/time/individual/\n * Set the timezone per chart instance\n *\n * @since 6.0.5\n * @optionparent time\n */\n time: {\n /**\n * A custom `Date` class for advanced date handling. For example,\n * [JDate](https://github.com/tahajahangir/jdate) can be hooked in to\n * handle Jalali dates.\n *\n * @type {*}\n * @since 4.0.4\n * @product highcharts highstock gantt\n */\n Date: void 0,\n /**\n * A named time zone. Supported time zone names rely on the browser\n * implementations, as described in the [mdn\n * docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat#timezone).\n * If the given time zone is not recognized by the browser, Highcharts\n * provides a warning and falls back to returning a 0 offset,\n * corresponding to the UTC time zone.\n *\n * The time zone affects axis scaling, tickmark placement and\n * time display in `Highcharts.dateFormat`.\n *\n * Setting `timezone` to `undefined` falls back to the default browser\n * timezone setting.\n *\n * Until v11.2.0, this option depended on moment.js.\n *\n * @sample {highcharts|highstock} highcharts/time/timezone/ Europe/Oslo\n *\n * @type {string}\n * @since 5.0.7\n * @product highcharts highstock gantt\n */\n timezone: 'UTC',\n /**\n * The timezone offset in minutes. Positive values are west, negative\n * values are east of UTC, as in the ECMAScript\n * [getTimezoneOffset](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset)\n * method. Use this to display UTC based data in a predefined time zone.\n *\n * This option is deprecated as of v11.4.1 and will be removed in a\n * future release. Use the [time.timezone](#time.timezone) option\n * instead.\n *\n * @see [time.getTimezoneOffset](#time.getTimezoneOffset)\n *\n * @sample {highcharts|highstock} highcharts/time/timezoneoffset/\n * Timezone offset\n *\n * @since 3.0.8\n * @deprecated 11.4.2\n * @product highcharts highstock gantt\n */\n timezoneOffset: 0,\n /**\n * Whether to use UTC time for axis scaling, tickmark placement and\n * time display in `Highcharts.dateFormat`. Advantages of using UTC\n * is that the time displays equally regardless of the user agent's\n * time zone settings. Local time can be used when the data is loaded\n * in real time or when correct Daylight Saving Time transitions are\n * required.\n *\n * Setting `useUTC` to true is equivalent to setting `time.timezone` to\n * `\"UTC\"`. Setting `useUTC` to false is equivalent to setting\n * `time.timezone` to `undefined`.\n *\n * @see [time.timezone](#timezone)\n *\n * @sample {highcharts} highcharts/time/useutc-true/\n * True by default\n * @sample {highcharts} highcharts/time/useutc-false/\n * False\n *\n * @deprecated\n */\n useUTC: void 0\n },\n chart: Chart_ChartDefaults,\n /**\n * The chart's main title.\n *\n * @sample {highmaps} maps/title/title/\n * Title options demonstrated\n * @sample {highcharts} highcharts/title/align-auto/\n * Default title alignment\n */\n title: {\n /**\n * When the title is floating, the plot area will not move to make space\n * for it.\n *\n * @sample {highcharts} highcharts/chart/zoomtype-none/\n * False by default\n * @sample {highcharts} highcharts/title/floating/\n * True - title on top of the plot area\n * @sample {highstock} stock/chart/title-floating/\n * True - title on top of the plot area\n *\n * @type {boolean}\n * @default false\n * @since 2.1\n * @apioption title.floating\n */\n /**\n * Whether to\n * [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n * to render the text.\n *\n * @type {boolean}\n * @default false\n * @apioption title.useHTML\n */\n /**\n * The vertical alignment of the title. Can be one of `\"top\"`,\n * `\"middle\"` and `\"bottom\"`. When a value is given, the title behaves\n * as if [floating](#title.floating) were `true`.\n *\n * @sample {highcharts} highcharts/title/verticalalign/\n * Chart title in bottom right corner\n * @sample {highstock} stock/chart/title-verticalalign/\n * Chart title in bottom right corner\n *\n * @type {Highcharts.VerticalAlignValue}\n * @since 2.1\n * @apioption title.verticalAlign\n */\n /**\n * The x position of the title relative to the alignment within\n * `chart.spacingLeft` and `chart.spacingRight`.\n *\n * @sample {highcharts} highcharts/title/align/\n * Aligned to the plot area (x = 70px = margin left - spacing\n * left)\n * @sample {highstock} stock/chart/title-align/\n * Aligned to the plot area (x = 50px = margin left - spacing\n * left)\n *\n * @type {number}\n * @default 0\n * @since 2.0\n * @apioption title.x\n */\n /**\n * The y position of the title relative to the alignment within\n * [chart.spacingTop](#chart.spacingTop) and [chart.spacingBottom](\n * #chart.spacingBottom). By default it depends on the font size.\n *\n * @sample {highcharts} highcharts/title/y/\n * Title inside the plot area\n * @sample {highstock} stock/chart/title-verticalalign/\n * Chart title in bottom right corner\n *\n * @type {number}\n * @since 2.0\n * @apioption title.y\n */\n /**\n * CSS styles for the title. Use this for font styling, but use `align`,\n * `x` and `y` for text alignment.\n *\n * Note that the default [title.minScale](#title.minScale) option also\n * affects the rendered font size. In order to keep the font size fixed\n * regardless of title length, set `minScale` to 1.\n *\n * In styled mode, the title style is given in the `.highcharts-title`\n * class.\n *\n * @sample {highcharts} highcharts/title/style/\n * Custom color and weight\n * @sample {highstock} stock/chart/title-style/\n * Custom color and weight\n * @sample highcharts/css/titles/\n * Styled mode\n *\n * @type {Highcharts.CSSObject}\n * @default {highcharts|highmaps} { \"color\": \"#333333\", \"fontSize\": \"18px\" }\n * @default {highstock} { \"color\": \"#333333\", \"fontSize\": \"16px\" }\n */\n style: {\n color: \"#333333\" /* Palette.neutralColor80 */,\n fontWeight: 'bold'\n },\n /**\n * The title of the chart. To disable the title, set the `text` to\n * `undefined`.\n *\n * @sample {highcharts} highcharts/title/text/\n * Custom title\n * @sample {highstock} stock/chart/title-text/\n * Custom title\n *\n * @default {highcharts|highmaps} Chart title\n * @default {highstock} undefined\n */\n text: 'Chart title',\n /**\n * The horizontal alignment of the title. Can be one of \"left\", \"center\"\n * and \"right\".\n *\n * Since v12 it defaults to `undefined`, meaning the alignment is\n * computed for best fit. If the text fits in one line, it aligned to\n * the center, but if it is wrapped into multiple lines, it is aligned\n * to the left.\n *\n * @sample {highcharts} highcharts/title/align-auto/\n * Default alignment, dynamic\n * @sample {highcharts} highcharts/title/align/\n * Aligned to the plot area (x = 70px = margin left - spacing\n * left)\n * @sample {highstock} stock/chart/title-align/\n * Aligned to the plot area (x = 50px = margin left - spacing\n * left)\n *\n * @type {Highcharts.AlignValue}\n * @default undefined\n * @since 2.0\n * @apioption title.align\n */\n /**\n * The margin between the title and the plot area, or if a subtitle\n * is present, the margin between the subtitle and the plot area.\n *\n * @sample {highcharts} highcharts/title/margin-50/\n * A chart title margin of 50\n * @sample {highcharts} highcharts/title/margin-subtitle/\n * The same margin applied with a subtitle\n * @sample {highstock} stock/chart/title-margin/\n * A chart title margin of 50\n *\n * @since 2.1\n */\n margin: 15,\n /**\n * When the title is too wide to fit in the chart, the default behavior\n * is to scale it down to fit, or apply word wrap if it is scaled down\n * to `minScale` and still doesn't fit.\n *\n * The default value reflects the scale, when using default font sizes,\n * when the title font size matches that of the subtitle. The title\n * still stands out as it is bold by default.\n *\n * Set `minScale` to 1 to avoid downscaling.\n *\n * @sample {highcharts} highcharts/title/align-auto/\n * Downscaling demonstrated\n *\n * @since 12.0.0\n */\n minScale: 0.67\n },\n /**\n * The chart's subtitle. This can be used both to display a subtitle below\n * the main title, and to display random text anywhere in the chart. The\n * subtitle can be updated after chart initialization through the\n * `Chart.setTitle` method.\n *\n * @sample {highcharts} highcharts/title/align-auto/\n * Default title alignment\n * @sample {highmaps} maps/title/subtitle/\n * Subtitle options demonstrated\n */\n subtitle: {\n /**\n * When the subtitle is floating, the plot area will not move to make\n * space for it.\n *\n * @sample {highcharts} highcharts/subtitle/floating/\n * Floating title and subtitle\n * @sample {highstock} stock/chart/subtitle-footnote\n * Footnote floating at bottom right of plot area\n *\n * @type {boolean}\n * @default false\n * @since 2.1\n * @apioption subtitle.floating\n */\n /**\n * CSS styles for the title.\n *\n * In styled mode, the subtitle style is given in the\n * `.highcharts-subtitle` class.\n *\n * @sample {highcharts} highcharts/subtitle/style/\n * Custom color and weight\n * @sample {highcharts} highcharts/css/titles/\n * Styled mode\n * @sample {highstock} stock/chart/subtitle-style\n * Custom color and weight\n * @sample {highstock} highcharts/css/titles/\n * Styled mode\n * @sample {highmaps} highcharts/css/titles/\n * Styled mode\n *\n * @type {Highcharts.CSSObject}\n * @default {\"color\": \"#666666\"}\n * @apioption subtitle.style\n */\n /**\n * Whether to\n * [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n * to render the text.\n *\n * @type {boolean}\n * @default false\n * @apioption subtitle.useHTML\n */\n /**\n * The vertical alignment of the title. Can be one of `\"top\"`,\n * `\"middle\"` and `\"bottom\"`. When middle, the subtitle behaves as\n * floating.\n *\n * @sample {highcharts} highcharts/subtitle/verticalalign/\n * Footnote at the bottom right of plot area\n * @sample {highstock} stock/chart/subtitle-footnote\n * Footnote at the bottom right of plot area\n *\n * @type {Highcharts.VerticalAlignValue}\n * @since 2.1\n * @apioption subtitle.verticalAlign\n */\n /**\n * The x position of the subtitle relative to the alignment within\n * `chart.spacingLeft` and `chart.spacingRight`.\n *\n * @sample {highcharts} highcharts/subtitle/align/\n * Footnote at right of plot area\n * @sample {highstock} stock/chart/subtitle-footnote\n * Footnote at the bottom right of plot area\n *\n * @type {number}\n * @default 0\n * @since 2.0\n * @apioption subtitle.x\n */\n /**\n * The y position of the subtitle relative to the alignment within\n * `chart.spacingTop` and `chart.spacingBottom`. By default the subtitle\n * is laid out below the title unless the title is floating.\n *\n * @sample {highcharts} highcharts/subtitle/verticalalign/\n * Footnote at the bottom right of plot area\n * @sample {highstock} stock/chart/subtitle-footnote\n * Footnote at the bottom right of plot area\n *\n * @type {number}\n * @since 2.0\n * @apioption subtitle.y\n */\n /**\n * CSS styles for the title.\n *\n * In styled mode, the subtitle style is given in the\n * `.highcharts-subtitle` class.\n *\n * @sample {highcharts} highcharts/subtitle/style/\n * Custom color and weight\n * @sample {highcharts} highcharts/css/titles/\n * Styled mode\n * @sample {highstock} stock/chart/subtitle-style\n * Custom color and weight\n * @sample {highstock} highcharts/css/titles/\n * Styled mode\n * @sample {highmaps} highcharts/css/titles/\n * Styled mode\n *\n * @type {Highcharts.CSSObject}\n * @default {\"color\": \"#666666\"}\n */\n style: {\n color: \"#666666\" /* Palette.neutralColor60 */,\n /**\n * @type {number|string}\n */\n fontSize: '0.8em'\n },\n /**\n * The subtitle of the chart.\n *\n * @sample {highcharts|highstock} highcharts/subtitle/text/\n * Custom subtitle\n * @sample {highcharts|highstock} highcharts/subtitle/text-formatted/\n * Formatted and linked text.\n */\n text: ''\n /**\n * The horizontal alignment of the subtitle. Can be one of \"left\",\n * \"center\" and \"right\". Since v12, it defaults to `undefined`, meaning\n * the actual alignment is inherited from the alignment of the main\n * title.\n *\n * @sample {highcharts} highcharts/title/align-auto/\n * Default title and subtitle alignment, dynamic\n * @sample {highcharts} highcharts/subtitle/align/\n * Footnote at right of plot area\n * @sample {highstock} stock/chart/subtitle-footnote\n * Footnote at bottom right of plot area\n *\n * @type {Highcharts.AlignValue}\n * @default undefined\n * @since 2.0\n * @apioption subtitle.align\n */\n },\n /**\n * The chart's caption, which will render below the chart and will be part\n * of exported charts. The caption can be updated after chart initialization\n * through the `Chart.update` or `Chart.caption.update` methods.\n *\n * @sample highcharts/caption/text/\n * A chart with a caption\n * @since 7.2.0\n */\n caption: {\n /**\n * When the caption is floating, the plot area will not move to make\n * space for it.\n *\n * @type {boolean}\n * @default false\n * @apioption caption.floating\n */\n /**\n * The margin between the caption and the plot area.\n */\n margin: 15,\n /**\n * Whether to\n * [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n * to render the text.\n *\n * @type {boolean}\n * @default false\n * @apioption caption.useHTML\n */\n /**\n * The x position of the caption relative to the alignment within\n * `chart.spacingLeft` and `chart.spacingRight`.\n *\n * @type {number}\n * @default 0\n * @apioption caption.x\n */\n /**\n * The y position of the caption relative to the alignment within\n * `chart.spacingTop` and `chart.spacingBottom`.\n *\n * @type {number}\n * @apioption caption.y\n */\n /**\n * CSS styles for the caption.\n *\n * In styled mode, the caption style is given in the\n * `.highcharts-caption` class.\n *\n * @sample {highcharts} highcharts/css/titles/\n * Styled mode\n *\n * @type {Highcharts.CSSObject}\n * @default {\"color\": \"#666666\"}\n */\n style: {\n color: \"#666666\" /* Palette.neutralColor60 */,\n /**\n * @type {number|string}\n */\n fontSize: '0.8em'\n },\n /**\n * The caption text of the chart.\n *\n * @sample {highcharts} highcharts/caption/text/\n * Custom caption\n */\n text: '',\n /**\n * The horizontal alignment of the caption. Can be one of \"left\",\n * \"center\" and \"right\".\n *\n * @type {Highcharts.AlignValue}\n */\n align: 'left',\n /**\n * The vertical alignment of the caption. Can be one of `\"top\"`,\n * `\"middle\"` and `\"bottom\"`. When middle, the caption behaves as\n * floating.\n *\n * @type {Highcharts.VerticalAlignValue}\n */\n verticalAlign: 'bottom'\n },\n /**\n * The plotOptions is a wrapper object for config objects for each series\n * type. The config objects for each series can also be overridden for\n * each series item as given in the series array.\n *\n * Configuration options for the series are given in three levels. Options\n * for all series in a chart are given in the [plotOptions.series](\n * #plotOptions.series) object. Then options for all series of a specific\n * type are given in the plotOptions of that type, for example\n * `plotOptions.line`. Next, options for one single series are given in\n * [the series array](#series).\n */\n plotOptions: {},\n /**\n * The legend is a box containing a symbol and name for each series\n * item or point item in the chart. Each series (or points in case\n * of pie charts) is represented by a symbol and its name in the legend.\n *\n * It is possible to override the symbol creator function and create\n * [custom legend symbols](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/studies/legend-custom-symbol/).\n *\n * @productdesc {highmaps}\n * A Highmaps legend by default contains one legend item per series, but if\n * a `colorAxis` is defined, the axis will be displayed in the legend.\n * Either as a gradient, or as multiple legend items for `dataClasses`.\n */\n legend: {\n /**\n * The background color of the legend.\n *\n * @see In styled mode, the legend background fill can be applied with\n * the `.highcharts-legend-box` class.\n *\n * @sample {highcharts} highcharts/legend/backgroundcolor/\n * Yellowish background\n * @sample {highstock} stock/legend/align/\n * Various legend options\n * @sample {highmaps} maps/legend/border-background/\n * Border and background options\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @apioption legend.backgroundColor\n */\n /**\n * The width of the drawn border around the legend.\n *\n * @see In styled mode, the legend border stroke width can be applied\n * with the `.highcharts-legend-box` class.\n *\n * @sample {highcharts} highcharts/legend/borderwidth/\n * 2px border width\n * @sample {highstock} stock/legend/align/\n * Various legend options\n * @sample {highmaps} maps/legend/border-background/\n * Border and background options\n *\n * @type {number}\n * @default 0\n * @apioption legend.borderWidth\n */\n /**\n * Enable or disable the legend. There is also a series-specific option,\n * [showInLegend](#plotOptions.series.showInLegend), that can hide the\n * series from the legend. In some series types this is `false` by\n * default, so it must set to `true` in order to show the legend for the\n * series.\n *\n * @sample {highcharts} highcharts/legend/enabled-false/ Legend disabled\n * @sample {highstock} stock/legend/align/ Various legend options\n * @sample {highmaps} maps/legend/enabled-false/ Legend disabled\n *\n * @default {highstock} false\n * @default {highmaps} true\n * @default {gantt} false\n */\n enabled: true,\n /**\n * The horizontal alignment of the legend box within the chart area.\n * Valid values are `left`, `center` and `right`.\n *\n * In the case that the legend is aligned in a corner position, the\n * `layout` option will determine whether to place it above/below\n * or on the side of the plot area.\n *\n * @sample {highcharts} highcharts/legend/align/\n * Legend at the right of the chart\n * @sample {highstock} stock/legend/align/\n * Various legend options\n * @sample {highmaps} maps/legend/alignment/\n * Legend alignment\n *\n * @type {Highcharts.AlignValue}\n * @since 2.0\n */\n align: 'center',\n /**\n * If the [layout](legend.layout) is `horizontal` and the legend items\n * span over two lines or more, whether to align the items into vertical\n * columns. Setting this to `false` makes room for more items, but will\n * look more messy.\n *\n * @since 6.1.0\n */\n alignColumns: true,\n /**\n * A CSS class name to apply to the legend group.\n */\n className: 'highcharts-no-tooltip',\n /**\n * General event handlers for the legend. These event hooks can\n * also be attached to the legend at run time using the\n * `Highcharts.addEvent` function.\n *\n * @declare Highcharts.LegendEventsOptionsObject\n *\n * @private\n */\n events: {},\n /**\n * Fires when the legend item belonging to the series is clicked. One\n * parameter, `event`, is passed to the function. The default action\n * is to toggle the visibility of the series, point or data class. This\n * can be prevented by returning `false` or calling\n * `event.preventDefault()`.\n *\n * @sample {highcharts} highcharts/legend/itemclick/\n * Confirm hiding and showing\n * @sample {highcharts} highcharts/legend/pie-legend-itemclick/\n * Confirm toggle visibility of pie slices\n *\n * @type {Highcharts.LegendItemClickCallbackFunction}\n * @context Highcharts.Legend\n * @apioption legend.events.itemClick\n */\n /**\n * When the legend is floating, the plot area ignores it and is allowed\n * to be placed below it.\n *\n * @sample {highcharts} highcharts/legend/floating-false/\n * False by default\n * @sample {highcharts} highcharts/legend/floating-true/\n * True\n * @sample {highmaps} maps/legend/alignment/\n * Floating legend\n *\n * @type {boolean}\n * @default false\n * @since 2.1\n * @apioption legend.floating\n */\n /**\n * The layout of the legend items. Can be one of `horizontal` or\n * `vertical` or `proximate`. When `proximate`, the legend items will be\n * placed as close as possible to the graphs they're representing,\n * except in inverted charts or when the legend position doesn't allow\n * it.\n *\n * @sample {highcharts} highcharts/legend/layout-horizontal/\n * Horizontal by default\n * @sample {highcharts} highcharts/legend/layout-vertical/\n * Vertical\n * @sample highcharts/legend/layout-proximate\n * Labels proximate to the data\n * @sample {highstock} stock/legend/layout-horizontal/\n * Horizontal by default\n * @sample {highmaps} maps/legend/padding-itemmargin/\n * Vertical with data classes\n * @sample {highmaps} maps/legend/layout-vertical/\n * Vertical with color axis gradient\n *\n * @validvalue [\"horizontal\", \"vertical\", \"proximate\"]\n */\n layout: 'horizontal',\n /**\n * In a legend with horizontal layout, the itemDistance defines the\n * pixel distance between each item.\n *\n * @sample {highcharts} highcharts/legend/layout-horizontal/\n * 50px item distance\n * @sample {highstock} highcharts/legend/layout-horizontal/\n * 50px item distance\n *\n * @type {number}\n * @default {highcharts} 20\n * @default {highstock} 20\n * @default {highmaps} 8\n * @since 3.0.3\n * @apioption legend.itemDistance\n */\n /**\n * The pixel bottom margin for each legend item.\n *\n * @sample {highcharts|highstock} highcharts/legend/padding-itemmargin/\n * Padding and item margins demonstrated\n * @sample {highmaps} maps/legend/padding-itemmargin/\n * Padding and item margins demonstrated\n *\n * @since 2.2.0\n */\n itemMarginBottom: 2,\n /**\n * The pixel top margin for each legend item.\n *\n * @sample {highcharts|highstock} highcharts/legend/padding-itemmargin/\n * Padding and item margins demonstrated\n * @sample {highmaps} maps/legend/padding-itemmargin/\n * Padding and item margins demonstrated\n *\n * @since 2.2.0\n */\n itemMarginTop: 2,\n /**\n * The width for each legend item. By default the items are laid out\n * successively. In a [horizontal layout](legend.layout), if the items\n * are laid out across two rows or more, they will be vertically aligned\n * depending on the [legend.alignColumns](legend.alignColumns) option.\n *\n * @sample {highcharts} highcharts/legend/itemwidth-default/\n * Undefined by default\n * @sample {highcharts} highcharts/legend/itemwidth-80/\n * 80 for aligned legend items\n *\n * @type {number}\n * @since 2.0\n * @apioption legend.itemWidth\n */\n /**\n * A [format string](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting)\n * for each legend label. Available variables relates to properties on\n * the series, or the point in case of pies.\n *\n * @type {string}\n * @default {name}\n * @since 1.3\n * @apioption legend.labelFormat\n */\n /* eslint-disable valid-jsdoc */\n /**\n * Callback function to format each of the series' labels. The `this`\n * keyword refers to the series object, or the point object in case of\n * pie charts. By default the series or point name is printed.\n *\n * @productdesc {highmaps}\n * In Highmaps the context can also be a data class in case of a\n * `colorAxis`.\n *\n * @sample {highcharts} highcharts/legend/labelformatter/\n * Add text\n * @sample {highmaps} maps/legend/labelformatter/\n * Data classes with label formatter\n *\n * @type {Highcharts.FormatterCallbackFunction<Point|Series>}\n */\n labelFormatter: function () {\n // eslint-enable valid-jsdoc\n return this.name;\n },\n /**\n * Line height for the legend items. Deprecated as of 2.1\\. Instead,\n * the line height for each item can be set using\n * `itemStyle.lineHeight`, and the padding between items using\n * `itemMarginTop` and `itemMarginBottom`.\n *\n * @sample {highcharts} highcharts/legend/lineheight/\n * Setting padding\n *\n * @deprecated\n *\n * @type {number}\n * @default 16\n * @since 2.0\n * @product highcharts gantt\n * @apioption legend.lineHeight\n */\n /**\n * If the plot area sized is calculated automatically and the legend is\n * not floating, the legend margin is the space between the legend and\n * the axis labels or plot area.\n *\n * @sample {highcharts} highcharts/legend/margin-default/\n * 12 pixels by default\n * @sample {highcharts} highcharts/legend/margin-30/\n * 30 pixels\n *\n * @type {number}\n * @default 12\n * @since 2.1\n * @apioption legend.margin\n */\n /**\n * Maximum pixel height for the legend. When the maximum height is\n * extended, navigation will show.\n *\n * @type {number}\n * @since 2.3.0\n * @apioption legend.maxHeight\n */\n /**\n * The color of the drawn border around the legend.\n *\n * @see In styled mode, the legend border stroke can be applied with the\n * `.highcharts-legend-box` class.\n *\n * @sample {highcharts} highcharts/legend/bordercolor/\n * Brown border\n * @sample {highstock} stock/legend/align/\n * Various legend options\n * @sample {highmaps} maps/legend/border-background/\n * Border and background options\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n */\n borderColor: \"#999999\" /* Palette.neutralColor40 */,\n /**\n * The border corner radius of the legend.\n *\n * @sample {highcharts} highcharts/legend/borderradius-default/\n * Square by default\n * @sample {highcharts} highcharts/legend/borderradius-round/\n * 5px rounded\n * @sample {highmaps} maps/legend/border-background/\n * Border and background options\n */\n borderRadius: 0,\n /**\n * Options for the paging or navigation appearing when the legend is\n * overflown. Navigation works well on screen, but not in static\n * exported images. One way of working around that is to\n * [increase the chart height in\n * export](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/legend/navigation-enabled-false/).\n *\n * @sample highcharts/legend/scrollable-vertical/\n * Legend with vertical scrollable extension\n * @sample highcharts/legend/scrollable-horizontal/\n * Legend with horizontal scrollable extension\n *\n */\n navigation: {\n /**\n * How to animate the pages when navigating up or down. A value of\n * `true` applies the default navigation given in the\n * `chart.animation` option. Additional options can be given as an\n * object containing values for easing and duration.\n *\n * @sample {highcharts} highcharts/legend/navigation/\n * Legend page navigation demonstrated\n * @sample {highstock} highcharts/legend/navigation/\n * Legend page navigation demonstrated\n *\n * @type {boolean|Partial<Highcharts.AnimationOptionsObject>}\n * @default true\n * @since 2.2.4\n * @apioption legend.navigation.animation\n */\n /**\n * The pixel size of the up and down arrows in the legend paging\n * navigation.\n *\n * @sample {highcharts} highcharts/legend/navigation/\n * Legend page navigation demonstrated\n * @sample {highstock} highcharts/legend/navigation/\n * Legend page navigation demonstrated\n *\n * @type {number}\n * @default 12\n * @since 2.2.4\n * @apioption legend.navigation.arrowSize\n */\n /**\n * Whether to enable the legend navigation. In most cases, disabling\n * the navigation results in an unwanted overflow.\n *\n * See also the\n * [adapt chart to legend](https://github.com/highcharts/adapt-chart-to-legend)\n * plugin for a solution to extend the chart height to make room for\n * the legend, optionally in exported charts only.\n *\n * @type {boolean}\n * @default true\n * @since 4.2.4\n * @apioption legend.navigation.enabled\n */\n /**\n * Text styles for the legend page navigation.\n *\n * @see In styled mode, the navigation items are styled with the\n * `.highcharts-legend-navigation` class.\n *\n * @sample {highcharts} highcharts/legend/navigation/\n * Legend page navigation demonstrated\n * @sample {highstock} highcharts/legend/navigation/\n * Legend page navigation demonstrated\n *\n * @type {Highcharts.CSSObject}\n * @since 2.2.4\n * @apioption legend.navigation.style\n */\n style: {\n /**\n * @type {number|string}\n */\n fontSize: '0.8em'\n },\n /**\n * The color for the active up or down arrow in the legend page\n * navigation.\n *\n * @see In styled mode, the active arrow be styled with the\n * `.highcharts-legend-nav-active` class.\n *\n * @sample {highcharts} highcharts/legend/navigation/\n * Legend page navigation demonstrated\n * @sample {highstock} highcharts/legend/navigation/\n * Legend page navigation demonstrated\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @since 2.2.4\n */\n activeColor: \"#0022ff\" /* Palette.highlightColor100 */,\n /**\n * The color of the inactive up or down arrow in the legend page\n * navigation. .\n *\n * @see In styled mode, the inactive arrow be styled with the\n * `.highcharts-legend-nav-inactive` class.\n *\n * @sample {highcharts} highcharts/legend/navigation/\n * Legend page navigation demonstrated\n * @sample {highstock} highcharts/legend/navigation/\n * Legend page navigation demonstrated\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @since 2.2.4\n */\n inactiveColor: \"#cccccc\" /* Palette.neutralColor20 */\n },\n /**\n * The inner padding of the legend box.\n *\n * @sample {highcharts|highstock} highcharts/legend/padding-itemmargin/\n * Padding and item margins demonstrated\n * @sample {highmaps} maps/legend/padding-itemmargin/\n * Padding and item margins demonstrated\n *\n * @type {number}\n * @default 8\n * @since 2.2.0\n * @apioption legend.padding\n */\n /**\n * Whether to reverse the order of the legend items compared to the\n * order of the series or points as defined in the configuration object.\n *\n * @see [yAxis.reversedStacks](#yAxis.reversedStacks),\n * [series.legendIndex](#series.legendIndex)\n *\n * @sample {highcharts} highcharts/legend/reversed/\n * Stacked bar with reversed legend\n *\n * @type {boolean}\n * @default false\n * @since 1.2.5\n * @apioption legend.reversed\n */\n /**\n * Whether to show the symbol on the right side of the text rather than\n * the left side. This is common in Arabic and Hebrew.\n *\n * @sample {highcharts} highcharts/legend/rtl/\n * Symbol to the right\n *\n * @type {boolean}\n * @default false\n * @since 2.2\n * @apioption legend.rtl\n */\n /**\n * CSS styles for the legend area. In the 1.x versions the position\n * of the legend area was determined by CSS. In 2.x, the position is\n * determined by properties like `align`, `verticalAlign`, `x` and `y`,\n * but the styles are still parsed for backwards compatibility.\n *\n * @deprecated\n *\n * @type {Highcharts.CSSObject}\n * @product highcharts highstock\n * @apioption legend.style\n */\n /**\n * CSS styles for each legend item. Only a subset of CSS is supported,\n * notably those options related to text. The default `textOverflow`\n * property makes long texts truncate. Set it to `undefined` to wrap\n * text instead. A `width` property can be added to control the text\n * width.\n *\n * @see In styled mode, the legend items can be styled with the\n * `.highcharts-legend-item` class.\n *\n * @sample {highcharts} highcharts/legend/itemstyle/\n * Bold black text\n * @sample {highmaps} maps/legend/itemstyle/\n * Item text styles\n *\n * @type {Highcharts.CSSObject}\n * @default {\"color\": \"#333333\", \"cursor\": \"pointer\", \"fontSize\": \"0.8em\", \"fontWeight\": \"bold\", \"textOverflow\": \"ellipsis\"}\n */\n itemStyle: {\n /**\n * @ignore\n */\n color: \"#333333\" /* Palette.neutralColor80 */,\n /**\n * @ignore\n */\n cursor: 'pointer',\n /**\n * @ignore\n */\n fontSize: '0.8em',\n /**\n * @ignore\n */\n textDecoration: 'none',\n /**\n * @ignore\n */\n textOverflow: 'ellipsis'\n },\n /**\n * CSS styles for each legend item in hover mode. Only a subset of\n * CSS is supported, notably those options related to text. Properties\n * are inherited from `style` unless overridden here.\n *\n * @see In styled mode, the hovered legend items can be styled with\n * the `.highcharts-legend-item:hover` pseudo-class.\n *\n * @sample {highcharts} highcharts/legend/itemhoverstyle/\n * Red on hover\n * @sample {highmaps} maps/legend/itemstyle/\n * Item text styles\n *\n * @type {Highcharts.CSSObject}\n * @default {\"color\": \"#000000\"}\n */\n itemHoverStyle: {\n /**\n * @ignore\n */\n color: \"#000000\" /* Palette.neutralColor100 */\n },\n /**\n * CSS styles for each legend item when the corresponding series or\n * point is hidden. Only a subset of CSS is supported, notably those\n * options related to text. Properties are inherited from `style`\n * unless overridden here.\n *\n * @see In styled mode, the hidden legend items can be styled with\n * the `.highcharts-legend-item-hidden` class.\n *\n * @sample {highcharts} highcharts/legend/itemhiddenstyle/\n * Darker gray color\n *\n * @type {Highcharts.CSSObject}\n * @default {\"color\": \"#cccccc\"}\n */\n itemHiddenStyle: {\n /**\n * @ignore\n */\n color: \"#666666\" /* Palette.neutralColor60 */,\n /**\n * @ignore\n */\n textDecoration: 'line-through'\n },\n /**\n * Whether to apply a drop shadow to the legend. A `backgroundColor`\n * also needs to be applied for this to take effect. The shadow can be\n * an object configuration containing `color`, `offsetX`, `offsetY`,\n * `opacity` and `width`.\n *\n * @sample {highcharts} highcharts/legend/shadow/\n * White background and drop shadow\n * @sample {highstock} stock/legend/align/\n * Various legend options\n * @sample {highmaps} maps/legend/border-background/\n * Border and background options\n *\n * @type {boolean|Highcharts.CSSObject}\n */\n shadow: false,\n /**\n * Default styling for the checkbox next to a legend item when\n * `showCheckbox` is true.\n *\n * @type {Highcharts.CSSObject}\n * @default {\"width\": \"13px\", \"height\": \"13px\", \"position\":\"absolute\"}\n */\n itemCheckboxStyle: {\n /**\n * @ignore\n */\n position: 'absolute',\n /**\n * @ignore\n */\n width: '13px', // For IE precision\n /**\n * @ignore\n */\n height: '13px'\n },\n /// itemWidth: undefined,\n /**\n * When this is true, the legend symbol width will be the same as\n * the symbol height, which in turn defaults to the font size of the\n * legend items.\n *\n * @since 5.0.0\n */\n squareSymbol: true,\n /**\n * The pixel height of the symbol for series types that use a rectangle\n * in the legend. Defaults to the font size of legend items.\n *\n * Note: This option is a default source of color axis height, if the\n * [colorAxis.height](https://api.highcharts.com/highcharts/colorAxis.height)\n * option is not set.\n *\n * @productdesc {highmaps}\n * In Highmaps, when the symbol is the gradient of a vertical color\n * axis, the height defaults to 200.\n *\n * @sample {highmaps} maps/legend/layout-vertical-sized/\n * Sized vertical gradient\n * @sample {highmaps} maps/legend/padding-itemmargin/\n * No distance between data classes\n *\n * @type {number}\n * @since 3.0.8\n * @apioption legend.symbolHeight\n */\n /**\n * The border radius of the symbol for series types that use a rectangle\n * in the legend. Defaults to half the `symbolHeight`, effectively\n * creating a circle.\n *\n * For color axis scales, it defaults to 3.\n *\n * @sample {highcharts} highcharts/legend/symbolradius/\n * Round symbols\n * @sample {highstock} highcharts/legend/symbolradius/\n * Round symbols\n * @sample {highmaps} highcharts/legend/symbolradius/\n * Round symbols\n *\n * @type {number}\n * @since 3.0.8\n * @apioption legend.symbolRadius\n */\n /**\n * The pixel width of the legend item symbol. When the `squareSymbol`\n * option is set, this defaults to the `symbolHeight`, otherwise 16.\n *\n * Note: This option is a default source of color axis width, if the\n * [colorAxis.width](https://api.highcharts.com/highcharts/colorAxis.width)\n * option is not set.\n *\n * @productdesc {highmaps}\n * In Highmaps, when the symbol is the gradient of a horizontal color\n * axis, the width defaults to 200.\n *\n * @sample {highcharts} highcharts/legend/symbolwidth/\n * Greater symbol width and padding\n * @sample {highmaps} maps/legend/padding-itemmargin/\n * Padding and item margins demonstrated\n * @sample {highmaps} maps/legend/layout-vertical-sized/\n * Sized vertical gradient\n *\n * @type {number}\n * @apioption legend.symbolWidth\n */\n /**\n * Whether to [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n * to render the legend item texts.\n *\n * Prior to 4.1.7, when using HTML, [legend.navigation](\n * #legend.navigation) was disabled.\n *\n * @sample highcharts/legend/scrollable-vertical/\n * Legend with vertical scrollable extension\n * @sample highcharts/legend/scrollable-horizontal/\n * Legend with horizontal scrollable extension\n *\n * @type {boolean}\n * @default false\n * @apioption legend.useHTML\n */\n /**\n * For a color axis with data classes, how many decimals to render in\n * the legend. The default preserves the decimals of the range numbers.\n *\n * @type {number}\n * @default -1\n * @product highcharts highmaps\n * @apioption legend.valueDecimals\n */\n /**\n * For a color axis with data classes, a suffix for the range numbers in\n * the legend.\n *\n * @type {string}\n * @default ''\n * @product highcharts highmaps\n * @apioption legend.valueSuffix\n */\n /**\n * The width of the legend box. If a number is set, it translates to\n * pixels. Since v7.0.2 it allows setting a percent string of the full\n * chart width, for example `40%`.\n *\n * Defaults to the full chart width for legends below or above the\n * chart, half the chart width for legends to the left and right.\n *\n * @sample {highcharts} highcharts/legend/width/\n * Aligned to the plot area\n * @sample {highcharts} highcharts/legend/width-percent/\n * A percent of the chart width\n *\n * @type {number|string}\n * @since 2.0\n * @apioption legend.width\n */\n /**\n * The pixel padding between the legend item symbol and the legend\n * item text.\n *\n * @sample {highcharts} highcharts/legend/symbolpadding/\n * Greater symbol width and padding\n */\n symbolPadding: 5,\n /**\n * The vertical alignment of the legend box. Can be one of `top`,\n * `middle` or `bottom`. Vertical position can be further determined\n * by the `y` option.\n *\n * In the case that the legend is aligned in a corner position, the\n * `layout` option will determine whether to place it above/below\n * or on the side of the plot area.\n *\n * When the [layout](#legend.layout) option is `proximate`, the\n * `verticalAlign` option doesn't apply.\n *\n * @sample {highcharts} highcharts/legend/verticalalign/\n * Legend 100px from the top of the chart\n * @sample {highstock} stock/legend/align/\n * Various legend options\n * @sample {highmaps} maps/legend/alignment/\n * Legend alignment\n *\n * @type {Highcharts.VerticalAlignValue}\n * @since 2.0\n */\n verticalAlign: 'bottom',\n // Width: undefined,\n /**\n * The x offset of the legend relative to its horizontal alignment\n * `align` within chart.spacingLeft and chart.spacingRight. Negative\n * x moves it to the left, positive x moves it to the right.\n *\n * @sample {highcharts} highcharts/legend/width/\n * Aligned to the plot area\n *\n * @since 2.0\n */\n x: 0,\n /**\n * The vertical offset of the legend relative to it's vertical alignment\n * `verticalAlign` within chart.spacingTop and chart.spacingBottom.\n * Negative y moves it up, positive y moves it down.\n *\n * @sample {highcharts} highcharts/legend/verticalalign/\n * Legend 100px from the top of the chart\n * @sample {highstock} stock/legend/align/\n * Various legend options\n * @sample {highmaps} maps/legend/alignment/\n * Legend alignment\n *\n * @since 2.0\n */\n y: 0,\n /**\n * A title to be added on top of the legend.\n *\n * @sample {highcharts} highcharts/legend/title/\n * Legend title\n * @sample {highmaps} maps/legend/alignment/\n * Legend with title\n *\n * @since 3.0\n */\n title: {\n /**\n * A text or HTML string for the title.\n *\n * @type {string}\n * @since 3.0\n * @apioption legend.title.text\n */\n /**\n * Generic CSS styles for the legend title.\n *\n * @see In styled mode, the legend title is styled with the\n * `.highcharts-legend-title` class.\n *\n * @type {Highcharts.CSSObject}\n * @default {\"fontSize\": \"0.8em\", \"fontWeight\": \"bold\"}\n * @since 3.0\n */\n style: {\n /**\n * @ignore\n */\n fontSize: '0.8em',\n /**\n * @ignore\n */\n fontWeight: 'bold'\n }\n }\n },\n /**\n * The loading options control the appearance of the loading screen\n * that covers the plot area on chart operations. This screen only\n * appears after an explicit call to `chart.showLoading()`. It is a\n * utility for developers to communicate to the end user that something\n * is going on, for example while retrieving new data via an XHR connection.\n * The \"Loading...\" text itself is not part of this configuration\n * object, but part of the `lang` object.\n */\n loading: {\n /**\n * The duration in milliseconds of the fade out effect.\n *\n * @sample highcharts/loading/hideduration/\n * Fade in and out over a second\n *\n * @type {number}\n * @default 100\n * @since 1.2.0\n * @apioption loading.hideDuration\n */\n /**\n * The duration in milliseconds of the fade in effect.\n *\n * @sample highcharts/loading/hideduration/\n * Fade in and out over a second\n *\n * @type {number}\n * @default 100\n * @since 1.2.0\n * @apioption loading.showDuration\n */\n /**\n * CSS styles for the loading label `span`.\n *\n * @see In styled mode, the loading label is styled with the\n * `.highcharts-loading-inner` class.\n *\n * @sample {highcharts|highmaps} highcharts/loading/labelstyle/\n * Vertically centered\n * @sample {highstock} stock/loading/general/\n * Label styles\n *\n * @type {Highcharts.CSSObject}\n * @default {\"fontWeight\": \"bold\", \"position\": \"relative\", \"top\": \"45%\"}\n * @since 1.2.0\n */\n labelStyle: {\n /**\n * @ignore\n */\n fontWeight: 'bold',\n /**\n * @ignore\n */\n position: 'relative',\n /**\n * @ignore\n */\n top: '45%'\n },\n /**\n * CSS styles for the loading screen that covers the plot area.\n *\n * In styled mode, the loading label is styled with the\n * `.highcharts-loading` class.\n *\n * @sample {highcharts|highmaps} highcharts/loading/style/\n * Gray plot area, white text\n * @sample {highstock} stock/loading/general/\n * Gray plot area, white text\n *\n * @type {Highcharts.CSSObject}\n * @default {\"position\": \"absolute\", \"backgroundColor\": \"#ffffff\", \"opacity\": 0.5, \"textAlign\": \"center\"}\n * @since 1.2.0\n */\n style: {\n /**\n * @ignore\n */\n position: 'absolute',\n /**\n * @ignore\n */\n backgroundColor: \"#ffffff\" /* Palette.backgroundColor */,\n /**\n * @ignore\n */\n opacity: 0.5,\n /**\n * @ignore\n */\n textAlign: 'center'\n }\n },\n /**\n * Options for the tooltip that appears when the user hovers over a\n * series or point.\n *\n * @declare Highcharts.TooltipOptions\n */\n tooltip: {\n /**\n * The color of the tooltip border. When `undefined`, the border takes\n * the color of the corresponding series or point.\n *\n * Note that the [borderWidth](#tooltip.borderWidth) is usually 0 by\n * default, so the border color may not be visible until a border width\n * is set.\n *\n * @sample {highcharts} highcharts/tooltip/bordercolor-default/ Follow\n * series by default\n * @sample {highcharts} highcharts/tooltip/bordercolor-black/ Black\n * border\n * @sample {highstock} stock/tooltip/general/ Styled tooltip\n * @sample {highmaps} maps/tooltip/background-border/ Background and\n * border demo\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @apioption tooltip.borderColor\n */\n /**\n * A CSS class name to apply to the tooltip's container div,\n * allowing unique CSS styling for each chart.\n *\n * @type {string}\n * @apioption tooltip.className\n */\n /**\n * Since 4.1, the crosshair definitions are moved to the Axis object\n * in order for a better separation from the tooltip. See\n * [xAxis.crosshair](#xAxis.crosshair).\n *\n * @sample {highcharts} highcharts/tooltip/crosshairs-x/\n * Enable a crosshair for the x value\n *\n * @deprecated\n *\n * @type {*}\n * @default true\n * @apioption tooltip.crosshairs\n */\n /**\n * Distance from point to tooltip in pixels.\n *\n * @type {number}\n * @default 16\n * @apioption tooltip.distance\n */\n /**\n * Whether the tooltip should follow the mouse as it moves across\n * columns, pie slices and other point types with an extent.\n * By default it behaves this way for pie, polygon, map, sankey\n * and wordcloud series by override in the `plotOptions`\n * for those series types.\n *\n * Does not apply if [split](#tooltip.split) is `true`.\n *\n * For touch moves to behave the same way, [followTouchMove](\n * #tooltip.followTouchMove) must be `true` also.\n *\n * @sample highcharts/tooltip/followpointer/\n * Tooltip follow pointer comparison\n *\n * @type {boolean}\n * @default {highcharts} false\n * @default {highstock} false\n * @default {highmaps} true\n * @since 3.0\n * @apioption tooltip.followPointer\n */\n /**\n * Whether the tooltip should update as the finger moves on a touch\n * device. If this is `true` and [chart.panning](#chart.panning) is\n * set,`followTouchMove` will take over one-finger touches, so the user\n * needs to use two fingers for zooming and panning.\n *\n * Note the difference to [followPointer](#tooltip.followPointer) that\n * only defines the _position_ of the tooltip. If `followPointer` is\n * false in for example a column series, the tooltip will show above or\n * below the column, but as `followTouchMove` is true, the tooltip will\n * jump from column to column as the user swipes across the plot area.\n *\n * @type {boolean}\n * @default {highcharts} true\n * @default {highstock} true\n * @default {highmaps} false\n * @since 3.0.1\n * @apioption tooltip.followTouchMove\n */\n /**\n * A [format string](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting)\n * for the whole shared tooltip. When format strings are a requirement,\n * it is usually more convenient to use `headerFormat`, `pointFormat`\n * and `footerFormat`, but the `format` option allows combining them\n * into one setting.\n *\n * The context of the format string is the same as that of the\n * `tooltip.formatter` callback.\n *\n * @sample {highcharts} highcharts/tooltip/format-shared/\n * Format for shared tooltip\n *\n * @type {string}\n * @default undefined\n * @since 11.1.0\n * @apioption tooltip.format\n */\n /**\n * Callback function to format the text of the tooltip from scratch. In\n * case of single or [shared](#tooltip.shared) tooltips, a string should\n * be returned. In case of [split](#tooltip.split) tooltips, it should\n * return an array where the first item is the header, and subsequent\n * items are mapped to the points. Return `false` to disable tooltip for\n * a specific point on series.\n *\n * A subset of HTML is supported. Unless `useHTML` is true, the HTML of\n * the tooltip is parsed and converted to SVG, therefore this isn't a\n * complete HTML renderer. The following HTML tags are supported: `b`,\n * `br`, `em`, `i`, `span`, `strong`. Spans can be styled with a `style`\n * attribute, but only text-related CSS, that is shared with SVG, is\n * handled.\n *\n * The context of the formatter (since v12) is the\n * [Point](https://api.highcharts.com/class-reference/Highcharts.Point)\n * instance. If the tooltip is shared or split, an array `this.points`\n * contains all points of the hovered x-value.\n *\n * Common properties from the Point to use in the formatter include:\n *\n * - **Point.percentage**:\n * Stacked series and pies only. The point's percentage of the total.\n *\n * - **Point.points**:\n * In a shared or split tooltip, this is an array containing all the\n * hovered points.\n *\n * - **this.series**:\n * The series object. The series name is available through\n * `this.series.name`.\n *\n * - **this.total**:\n * The total value at this point's x value in a stacked series, or the\n * sum of all slices in a pie series.\n *\n * - **this.x**:\n * The x value.\n *\n * - **this.y**:\n * The y value.\n *\n * @sample {highcharts} highcharts/tooltip/formatter-simple/\n * Simple string formatting\n * @sample {highcharts} highcharts/tooltip/formatter-shared/\n * Formatting with shared tooltip\n * @sample {highcharts|highstock} highcharts/tooltip/formatter-split/\n * Formatting with split tooltip\n * @sample highcharts/tooltip/formatter-conditional-default/\n * Extending default formatter\n * @sample {highstock} stock/tooltip/formatter/\n * Formatting with shared tooltip\n * @sample {highmaps} maps/tooltip/formatter/\n * String formatting\n *\n * @type {Highcharts.TooltipFormatterCallbackFunction}\n * @apioption tooltip.formatter\n */\n /**\n * Callback function to format the text of the tooltip for\n * visible null points.\n * Works analogously to [formatter](#tooltip.formatter).\n *\n * @sample highcharts/plotoptions/series-nullformat\n * Format data label and tooltip for null point.\n *\n * @type {Highcharts.TooltipFormatterCallbackFunction}\n * @apioption tooltip.nullFormatter\n */\n /**\n * Whether to allow the tooltip to render outside the chart's SVG\n * element box. By default (`false`), the tooltip is rendered within the\n * chart's SVG element, which results in the tooltip being aligned\n * inside the chart area. For small charts, this may result in clipping\n * or overlapping. When `true`, a separate SVG element is created and\n * overlaid on the page, allowing the tooltip to be aligned inside the\n * page itself. Beware that with this option active, CSS classes on the\n * chart's target container, with classnames matching the pattern\n * 'highcharts-*', will be set on the tooltip as well. This is done to\n * support theming for tooltips with this option.\n *\n * Defaults to `true` if `chart.scrollablePlotArea` is activated,\n * otherwise `false`.\n *\n * @sample highcharts/tooltip/outside\n * Small charts with tooltips outside\n *\n * @type {boolean|undefined}\n * @default undefined\n * @since 6.1.1\n * @apioption tooltip.outside\n */\n /**\n * A callback function for formatting the HTML output for a single point\n * in the tooltip. Like the `pointFormat` string, but with more\n * flexibility.\n *\n * @type {Highcharts.FormatterCallbackFunction<Highcharts.Point>}\n * @since 4.1.0\n * @context Highcharts.Point\n * @apioption tooltip.pointFormatter\n */\n /**\n * A callback function to place the tooltip in a custom position. The\n * callback receives three parameters: `labelWidth`, `labelHeight` and\n * `point`, where point contains values for `plotX` and `plotY` telling\n * where the reference point is in the plot area. Add `chart.plotLeft`\n * and `chart.plotTop` to get the full coordinates.\n *\n * To find the actual hovered `Point` instance, use\n * `this.chart.hoverPoint`. For shared or split tooltips, all the hover\n * points are available in `this.chart.hoverPoints`.\n *\n * Since v7, when [tooltip.split](#tooltip.split) option is enabled,\n * positioner is called for each of the boxes separately, including\n * xAxis header. xAxis header is not a point, instead `point` argument\n * contains info: `{ plotX: Number, plotY: Number, isHeader: Boolean }`\n *\n * The return should be an object containing x and y values, for example\n * `{ x: 100, y: 100 }`.\n *\n * @sample {highcharts} highcharts/tooltip/positioner/\n * A fixed tooltip position\n * @sample {highstock} stock/tooltip/positioner/\n * A fixed tooltip position on top of the chart\n * @sample {highmaps} maps/tooltip/positioner/\n * A fixed tooltip position\n * @sample {highstock} stock/tooltip/split-positioner/\n * Split tooltip with fixed positions\n * @sample {highstock} stock/tooltip/positioner-scrollable-plotarea/\n * Scrollable plot area combined with tooltip positioner\n *\n * @type {Highcharts.TooltipPositionerCallbackFunction}\n * @since 2.2.4\n * @apioption tooltip.positioner\n */\n /**\n * Shows tooltip for all points with the same X value. Splits the\n * tooltip into one label per series, with the header close to the axis.\n * This is recommended over [shared](#tooltip.shared)\n * tooltips for charts with multiple line series, generally making them\n * easier to read. This option takes precedence over `tooltip.shared`.\n *\n * Not supported for [polar](#chart.polar) and [inverted](#chart.inverted) charts.\n *\n * @productdesc {highstock} In Highcharts Stock, tooltips are split\n * by default since v6.0.0. Stock charts typically contain\n * multi-dimension points and multiple panes, making split tooltips\n * the preferred layout over\n * the previous `shared` tooltip.\n *\n * @sample highcharts/tooltip/split/\n * Split tooltip\n * @sample {highcharts|highstock} highcharts/tooltip/formatter-split/\n * Split tooltip and custom formatter callback\n *\n * @type {boolean}\n * @default {highcharts} false\n * @default {highstock} true\n * @since 5.0.0\n * @product highcharts highstock\n * @apioption tooltip.split\n */\n /**\n * Prevents the tooltip from switching or closing, when touched or\n * pointed.\n *\n * @sample highcharts/tooltip/stickoncontact/\n * Tooltip sticks on pointer contact\n *\n * @type {boolean}\n * @since 8.0.1\n * @apioption tooltip.stickOnContact\n */\n /**\n * Use HTML to render the contents of the tooltip instead of SVG. Using\n * HTML allows advanced formatting like tables and images in the\n * tooltip. It is also recommended for rtl languages as it works around\n * rtl bugs in early Firefox.\n *\n * @sample {highcharts|highstock} highcharts/tooltip/footerformat/\n * A table for value alignment\n * @sample {highcharts|highstock} highcharts/tooltip/fullhtml/\n * Full HTML tooltip\n * @sample {highmaps} maps/tooltip/usehtml/\n * Pure HTML tooltip\n *\n * @type {boolean}\n * @default false\n * @since 2.2\n * @apioption tooltip.useHTML\n */\n /**\n * How many decimals to show in each series' y value. This is\n * overridable in each series' tooltip options object. The default is to\n * preserve all decimals.\n *\n * @sample {highcharts|highstock} highcharts/tooltip/valuedecimals/\n * Set decimals, prefix and suffix for the value\n * @sample {highmaps} maps/tooltip/valuedecimals/\n * Set decimals, prefix and suffix for the value\n *\n * @type {number|undefined}\n * @since 2.2\n * @apioption tooltip.valueDecimals\n */\n /**\n * A string to prepend to each series' y value. Overridable in each\n * series' tooltip options object.\n *\n * @sample {highcharts|highstock} highcharts/tooltip/valuedecimals/\n * Set decimals, prefix and suffix for the value\n * @sample {highmaps} maps/tooltip/valuedecimals/\n * Set decimals, prefix and suffix for the value\n *\n * @type {string}\n * @since 2.2\n * @apioption tooltip.valuePrefix\n */\n /**\n * A string to append to each series' y value. Overridable in each\n * series' tooltip options object.\n *\n * @sample {highcharts|highstock} highcharts/tooltip/valuedecimals/\n * Set decimals, prefix and suffix for the value\n * @sample {highmaps} maps/tooltip/valuedecimals/\n * Set decimals, prefix and suffix for the value\n *\n * @type {string}\n * @since 2.2\n * @apioption tooltip.valueSuffix\n */\n /**\n * The format for the date in the tooltip header if the X axis is a\n * datetime axis. The default is a best guess based on the smallest\n * distance between points in the chart.\n *\n * @sample {highcharts} highcharts/tooltip/xdateformat/\n * A different format\n *\n * @type {string|Highcharts.DateTimeFormatOptions}\n * @product highcharts highstock gantt\n * @apioption tooltip.xDateFormat\n */\n /**\n * How many decimals to show for the `point.change`\n * or the `point.cumulativeSum` value when the `series.compare`\n * or the `series.cumulative` option is set.\n * This is overridable in each series' tooltip options object.\n *\n * @type {number}\n * @default 2\n * @since 1.0.1\n * @product highstock\n * @apioption tooltip.changeDecimals\n */\n /**\n * Enable or disable the tooltip.\n *\n * @sample {highcharts} highcharts/tooltip/enabled/\n * Disabled\n * @sample {highcharts} highcharts/plotoptions/series-point-events-mouseover/\n * Disable tooltip and show values on chart instead\n */\n enabled: true,\n /**\n * Enable or disable animation of the tooltip.\n *\n * @type {boolean|Partial<Highcharts.AnimationOptionsObject>}\n * @since 2.3.0\n */\n animation: {\n duration: 300,\n // EaseOutCirc\n easing: function (x) { return Math.sqrt(1 - Math.pow(x - 1, 2)); }\n },\n /**\n * The radius of the rounded border corners.\n *\n * @sample {highcharts} highcharts/tooltip/bordercolor-default/\n * Default border radius\n * @sample {highcharts} highcharts/tooltip/borderradius-0/\n * Square borders\n * @sample {highmaps} maps/tooltip/background-border/\n * Background and border demo\n */\n borderRadius: 3,\n /**\n * For series on datetime axes, the date format in the tooltip's\n * header will by default be guessed based on the closest data points.\n * This member gives the default string representations used for\n * each unit. For an overview of the string or object configuration, see\n * [dateFormat](/class-reference/Highcharts.Time#dateFormat).\n *\n * @see [xAxis.dateTimeLabelFormats](#xAxis.dateTimeLabelFormats)\n *\n * @type {Highcharts.Dictionary<string|Highcharts.DateTimeFormatOptions>}\n * @product highcharts highstock gantt\n */\n dateTimeLabelFormats: {\n /** @internal */\n millisecond: '%[AebHMSL]',\n /** @internal */\n second: '%[AebHMS]',\n /** @internal */\n minute: '%[AebHM]',\n /** @internal */\n hour: '%[AebHM]',\n /** @internal */\n day: '%[AebY]',\n /** @internal */\n week: 'Week from %[AebY]',\n /** @internal */\n month: '%[BY]',\n /** @internal */\n year: '%Y'\n },\n /**\n * A string to append to the tooltip format.\n *\n * @sample {highcharts} highcharts/tooltip/footerformat/\n * A table for value alignment\n * @sample {highmaps} maps/tooltip/format/\n * Format demo\n *\n * @since 2.2\n */\n footerFormat: '',\n /**\n * The name of a symbol to use for the border around the tooltip\n * header. Applies only when [tooltip.split](#tooltip.split) is\n * enabled.\n *\n * Custom callbacks for symbol path generation can also be added to\n * `Highcharts.SVGRenderer.prototype.symbols` the same way as for\n * [series.marker.symbol](plotOptions.line.marker.symbol).\n *\n * @see [tooltip.shape](#tooltip.shape)\n *\n * @sample {highstock} stock/tooltip/split-positioner/\n * Different shapes for header and split boxes\n *\n * @type {Highcharts.TooltipShapeValue}\n * @validvalue [\"callout\", \"rect\"]\n * @since 7.0\n */\n headerShape: 'callout',\n /**\n * The number of milliseconds to wait until the tooltip is hidden when\n * mouse out from a point or chart.\n *\n * @since 3.0\n */\n hideDelay: 500,\n /**\n * Padding inside the tooltip, in pixels.\n *\n * @since 5.0.0\n */\n padding: 8,\n /**\n * The name of a symbol to use for the border around the tooltip. Can\n * be one of: `\"callout\"`, `\"circle\"` or `\"rect\"`. When\n * [tooltip.split](#tooltip.split)\n * option is enabled, shape is applied to all boxes except header, which\n * is controlled by\n * [tooltip.headerShape](#tooltip.headerShape).\n *\n * Custom callbacks for symbol path generation can also be added to\n * `Highcharts.SVGRenderer.prototype.symbols` the same way as for\n * [series.marker.symbol](plotOptions.line.marker.symbol).\n *\n * @type {Highcharts.TooltipShapeValue}\n * @since 4.0\n */\n shape: 'callout',\n /**\n * Shows information in the tooltip for all points with the same X\n * value. When the tooltip is shared, the entire plot area will capture\n * mouse movement or touch events. Tooltip texts for series types with\n * ordered data (not pie, scatter, flags etc) will be shown in a single\n * bubble. This is recommended for single series charts and for\n * tablet/mobile optimized charts.\n *\n * See also [tooltip.split](#tooltip.split), that is better suited for\n * charts with many series, especially line-type series. The\n * `tooltip.split` option takes precedence over `tooltip.shared`.\n *\n * @sample {highcharts} highcharts/tooltip/shared-false/\n * False by default\n * @sample {highcharts} highcharts/tooltip/shared-true/\n * True\n * @sample {highcharts} highcharts/tooltip/shared-x-crosshair/\n * True with x axis crosshair\n * @sample {highcharts} highcharts/tooltip/shared-true-mixed-types/\n * True with mixed series types\n *\n * @since 2.1\n * @product highcharts highstock\n */\n shared: false,\n /**\n * Proximity snap for graphs or single points. It defaults to 10 for\n * mouse-powered devices and 25 for touch devices.\n *\n * Note that in most cases the whole plot area captures the mouse\n * movement, and in these cases `tooltip.snap` doesn't make sense. This\n * applies when [stickyTracking](#plotOptions.series.stickyTracking)\n * is `true` (default) and when the tooltip is [shared](#tooltip.shared)\n * or [split](#tooltip.split).\n *\n * @sample {highcharts} highcharts/tooltip/bordercolor-default/\n * 10 px by default\n * @sample {highcharts} highcharts/tooltip/snap-50/\n * 50 px on graph\n *\n * @type {number}\n * @default 10/25\n * @since 1.2.0\n * @product highcharts highstock\n */\n snap: isTouchDevice ? 25 : 10,\n /**\n * The HTML of the tooltip header line. The context is the\n * [Point class](https://api.highcharts.com/class-reference/Highcharts.Point).\n * Variables are enclosed in curly brackets. Examples of common\n * variables to include are `x`, `y`, `series.name` and `series.color`\n * and other properties on the same form. The `point.key` variable\n * contains the category name, x value or datetime string depending on\n * the type of axis. For datetime axes, the `point.key` date format can\n * be set using `tooltip.xDateFormat`.\n *\n * @sample {highcharts} highcharts/tooltip/footerformat/\n * An HTML table in the tooltip\n * @sample {highstock} highcharts/tooltip/footerformat/\n * An HTML table in the tooltip\n * @sample {highmaps} maps/tooltip/format/\n * Format demo\n *\n * @type {string}\n * @apioption tooltip.headerFormat\n */\n headerFormat: '<span style=\"font-size: 0.8em\">{ucfirst point.key}</span><br/>',\n /**\n * The HTML of the null point's line in the tooltip. Works analogously\n * to [pointFormat](#tooltip.pointFormat).\n *\n * @sample {highcharts} highcharts/plotoptions/series-nullformat\n * Format data label and tooltip for null point.\n *\n * @type {string}\n * @apioption tooltip.nullFormat\n */\n /**\n * The HTML of the point's line in the tooltip. The context is the\n * [Point class](https://api.highcharts.com/class-reference/Highcharts.Point).\n * Variables are enclosed in curly brackets. Examples of common\n * variables to include are `x`, `y`, `series.name` and `series.color`\n * and other properties on the same form. Furthermore, `y` can be\n * extended by the `tooltip.valuePrefix` and `tooltip.valueSuffix`\n * variables. This can also be overridden for each series, which makes\n * it a good hook for displaying units.\n *\n * In styled mode, the dot is colored by a class name rather than the\n * point color.\n *\n * @sample {highcharts} highcharts/tooltip/pointformat/\n * A different point format with value suffix\n * @sample {highcharts|highstock} highcharts/tooltip/pointformat-extra-information/\n * Show extra information about points in the tooltip\n * @sample {highmaps} maps/tooltip/format/\n * Format demo\n *\n * @type {string}\n * @since 2.2\n * @apioption tooltip.pointFormat\n */\n pointFormat: '<span style=\"color:{point.color}\">\\u25CF</span> {series.name}: <b>{point.y}</b><br/>',\n /**\n * The background color or gradient for the tooltip.\n *\n * In styled mode, the stroke width is set in the\n * `.highcharts-tooltip-box` class.\n *\n * @sample {highcharts} highcharts/tooltip/backgroundcolor-solid/\n * Yellowish background\n * @sample {highcharts} highcharts/tooltip/backgroundcolor-gradient/\n * Gradient\n * @sample {highcharts} highcharts/css/tooltip-border-background/\n * Tooltip in styled mode\n * @sample {highstock} stock/tooltip/general/\n * Custom tooltip\n * @sample {highstock} highcharts/css/tooltip-border-background/\n * Tooltip in styled mode\n * @sample {highmaps} maps/tooltip/background-border/\n * Background and border demo\n * @sample {highmaps} highcharts/css/tooltip-border-background/\n * Tooltip in styled mode\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n */\n backgroundColor: \"#ffffff\" /* Palette.backgroundColor */,\n /**\n * The pixel width of the tooltip border. Defaults to 0 for single\n * tooltips and 1 for split tooltips.\n *\n * In styled mode, the stroke width is set in the\n * `.highcharts-tooltip-box` class.\n *\n * @sample {highcharts} highcharts/tooltip/bordercolor-default/\n * 2 pixels\n * @sample {highcharts} highcharts/tooltip/borderwidth/\n * No border (shadow only)\n * @sample {highcharts} highcharts/css/tooltip-border-background/\n * Tooltip in styled mode\n * @sample {highstock} stock/tooltip/general/\n * Custom tooltip\n * @sample {highstock} highcharts/css/tooltip-border-background/\n * Tooltip in styled mode\n * @sample {highmaps} maps/tooltip/background-border/\n * Background and border demo\n * @sample {highmaps} highcharts/css/tooltip-border-background/\n * Tooltip in styled mode\n *\n * @type {number}\n */\n borderWidth: void 0,\n /**\n * Whether to apply a drop shadow to the tooltip.\n *\n * @sample {highcharts} highcharts/tooltip/bordercolor-default/\n * True by default\n * @sample {highcharts} highcharts/tooltip/shadow/\n * False\n * @sample {highmaps} maps/tooltip/positioner/\n * Fixed tooltip position, border and shadow disabled\n *\n * @type {boolean|Highcharts.ShadowOptionsObject}\n */\n shadow: true,\n /**\n * Prevents the tooltip from switching or closing when touched or\n * pointed.\n *\n * @sample highcharts/tooltip/stickoncontact/\n * Tooltip sticks on pointer contact\n *\n * @since 8.0.1\n */\n stickOnContact: false,\n /**\n * CSS styles for the tooltip. The tooltip can also be styled through\n * the CSS class `.highcharts-tooltip`.\n *\n * Note that the default `pointerEvents` style makes the tooltip ignore\n * mouse events, so in order to use clickable tooltips, this value must\n * be set to `auto`.\n *\n * @sample {highcharts} highcharts/tooltip/style/\n * Greater padding, bold text\n *\n * @type {Highcharts.CSSObject}\n */\n style: {\n /** @internal */\n color: \"#333333\" /* Palette.neutralColor80 */,\n /** @internal */\n cursor: 'default',\n /**\n * @type {number|string}\n */\n fontSize: '0.8em'\n },\n /**\n * Use HTML to render the contents of the tooltip instead of SVG. Using\n * HTML allows advanced formatting like tables and images in the\n * tooltip. It is also recommended for rtl languages as it works around\n * rtl bugs in early Firefox.\n *\n * @sample {highcharts|highstock} highcharts/tooltip/footerformat/\n * A table for value alignment\n * @sample {highcharts|highstock} highcharts/tooltip/fullhtml/\n * Full HTML tooltip\n * @sample {highmaps} maps/tooltip/usehtml/\n * Pure HTML tooltip\n *\n * @since 2.2\n */\n useHTML: false\n },\n /**\n * Highchart by default puts a credits label in the lower right corner\n * of the chart. This can be changed using these options.\n */\n credits: {\n /**\n * Credits for map source to be concatenated with conventional credit\n * text. By default this is a format string that collects copyright\n * information from the map if available.\n *\n * @see [mapTextFull](#credits.mapTextFull)\n * @see [text](#credits.text)\n *\n * @type {string}\n * @default \\u00a9 <a href=\"{geojson.copyrightUrl}\">{geojson.copyrightShort}</a>\n * @since 4.2.2\n * @product highmaps\n * @apioption credits.mapText\n */\n /**\n * Detailed credits for map source to be displayed on hover of credits\n * text. By default this is a format string that collects copyright\n * information from the map if available.\n *\n * @see [mapText](#credits.mapText)\n * @see [text](#credits.text)\n *\n * @type {string}\n * @default {geojson.copyright}\n * @since 4.2.2\n * @product highmaps\n * @apioption credits.mapTextFull\n */\n /**\n * Whether to show the credits text.\n *\n * @sample {highcharts} highcharts/credits/enabled-false/\n * Credits disabled\n * @sample {highstock} stock/credits/enabled/\n * Credits disabled\n * @sample {highmaps} maps/credits/enabled-false/\n * Credits disabled\n */\n enabled: true,\n /**\n * The URL for the credits label.\n *\n * @sample {highcharts} highcharts/credits/href/\n * Custom URL and text\n * @sample {highmaps} maps/credits/customized/\n * Custom URL and text\n */\n href: 'https://www.highcharts.com?credits',\n /**\n * Position configuration for the credits label.\n *\n * @sample {highcharts} highcharts/credits/position-left/\n * Left aligned\n * @sample {highcharts} highcharts/credits/position-left/\n * Left aligned\n * @sample {highmaps} maps/credits/customized/\n * Left aligned\n * @sample {highmaps} maps/credits/customized/\n * Left aligned\n *\n * @type {Highcharts.AlignObject}\n * @since 2.1\n */\n position: {\n /** @internal */\n align: 'right',\n /** @internal */\n x: -10,\n /** @internal */\n verticalAlign: 'bottom',\n /** @internal */\n y: -5\n },\n /**\n * CSS styles for the credits label.\n *\n * @see In styled mode, credits styles can be set with the\n * `.highcharts-credits` class.\n *\n * @type {Highcharts.CSSObject}\n */\n style: {\n /** @internal */\n cursor: 'pointer',\n /** @internal */\n color: \"#999999\" /* Palette.neutralColor40 */,\n /**\n * @type {number|string}\n */\n fontSize: '0.6em'\n },\n /**\n * The text for the credits label.\n *\n * @productdesc {highmaps}\n * If a map is loaded as GeoJSON, the text defaults to\n * `Highcharts @ {map-credits}`. Otherwise, it defaults to\n * `Highcharts.com`.\n *\n * @sample {highcharts} highcharts/credits/href/\n * Custom URL and text\n * @sample {highmaps} maps/credits/customized/\n * Custom URL and text\n */\n text: 'Highcharts.com'\n }\n};\nvar defaultTime = new Core_Time(defaultOptions.time);\n/**\n * Get the updated default options. Until 3.0.7, merely exposing defaultOptions\n * for outside modules wasn't enough because the setOptions method created a new\n * object.\n *\n * @function Highcharts.getOptions\n *\n * @return {Highcharts.Options}\n * Default options.\n */\nfunction getOptions() {\n return defaultOptions;\n}\n/**\n * Merge the default options with custom options and return the new options\n * structure. Commonly used for defining reusable templates.\n *\n * @sample highcharts/members/setoptions Applying a global theme\n *\n * @function Highcharts.setOptions\n *\n * @param {Highcharts.Options} options\n * The new custom chart options.\n *\n * @return {Highcharts.Options}\n * Updated options.\n */\nfunction setOptions(options) {\n Defaults_fireEvent(Core_Globals, 'setOptions', { options: options });\n // Copy in the default options\n Defaults_merge(true, defaultOptions, options);\n // Update the time object\n if (options.time) {\n defaultTime.update(defaultOptions.time);\n }\n if (options.lang && 'locale' in options.lang) {\n defaultTime.update({\n locale: options.lang.locale\n });\n }\n return defaultOptions;\n}\n/* *\n *\n * Default Export\n *\n * */\nvar DefaultOptions = {\n defaultOptions: defaultOptions,\n defaultTime: defaultTime,\n getOptions: getOptions,\n setOptions: setOptions\n};\n/* harmony default export */ var Defaults = (DefaultOptions);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * @typedef {\"plotBox\"|\"spacingBox\"} Highcharts.ButtonRelativeToValue\n */\n/**\n * Gets fired when a series is added to the chart after load time, using the\n * `addSeries` method. Returning `false` prevents the series from being added.\n *\n * @callback Highcharts.ChartAddSeriesCallbackFunction\n *\n * @param {Highcharts.Chart} this\n * The chart on which the event occurred.\n *\n * @param {Highcharts.ChartAddSeriesEventObject} event\n * The event that occurred.\n */\n/**\n * Contains common event information. Through the `options` property you can\n * access the series options that were passed to the `addSeries` method.\n *\n * @interface Highcharts.ChartAddSeriesEventObject\n */ /**\n* The series options that were passed to the `addSeries` method.\n* @name Highcharts.ChartAddSeriesEventObject#options\n* @type {Highcharts.SeriesOptionsType}\n*/ /**\n* Prevents the default behaviour of the event.\n* @name Highcharts.ChartAddSeriesEventObject#preventDefault\n* @type {Function}\n*/ /**\n* The event target.\n* @name Highcharts.ChartAddSeriesEventObject#target\n* @type {Highcharts.Chart}\n*/ /**\n* The event type.\n* @name Highcharts.ChartAddSeriesEventObject#type\n* @type {\"addSeries\"}\n*/\n/**\n * Gets fired when clicking on the plot background.\n *\n * @callback Highcharts.ChartClickCallbackFunction\n *\n * @param {Highcharts.Chart} this\n * The chart on which the event occurred.\n *\n * @param {Highcharts.PointerEventObject} event\n * The event that occurred.\n */\n/**\n * Contains an axes of the clicked spot.\n *\n * @interface Highcharts.ChartClickEventAxisObject\n */ /**\n* Axis at the clicked spot.\n* @name Highcharts.ChartClickEventAxisObject#axis\n* @type {Highcharts.Axis}\n*/ /**\n* Axis value at the clicked spot.\n* @name Highcharts.ChartClickEventAxisObject#value\n* @type {number}\n*/\n/**\n * Contains information about the clicked spot on the chart. Remember the unit\n * of a datetime axis is milliseconds since 1970-01-01 00:00:00.\n *\n * @interface Highcharts.ChartClickEventObject\n * @extends Highcharts.PointerEventObject\n */ /**\n* Information about the x-axis on the clicked spot.\n* @name Highcharts.ChartClickEventObject#xAxis\n* @type {Array<Highcharts.ChartClickEventAxisObject>}\n*/ /**\n* Information about the y-axis on the clicked spot.\n* @name Highcharts.ChartClickEventObject#yAxis\n* @type {Array<Highcharts.ChartClickEventAxisObject>}\n*/ /**\n* Information about the z-axis on the clicked spot.\n* @name Highcharts.ChartClickEventObject#zAxis\n* @type {Array<Highcharts.ChartClickEventAxisObject>|undefined}\n*/\n/**\n * Gets fired when the chart is finished loading.\n *\n * @callback Highcharts.ChartLoadCallbackFunction\n *\n * @param {Highcharts.Chart} this\n * The chart on which the event occurred.\n *\n * @param {global.Event} event\n * The event that occurred.\n */\n/**\n * Fires when the chart is redrawn, either after a call to `chart.redraw()` or\n * after an axis, series or point is modified with the `redraw` option set to\n * `true`.\n *\n * @callback Highcharts.ChartRedrawCallbackFunction\n *\n * @param {Highcharts.Chart} this\n * The chart on which the event occurred.\n *\n * @param {global.Event} event\n * The event that occurred.\n */\n/**\n * Gets fired after initial load of the chart (directly after the `load` event),\n * and after each redraw (directly after the `redraw` event).\n *\n * @callback Highcharts.ChartRenderCallbackFunction\n *\n * @param {Highcharts.Chart} this\n * The chart on which the event occurred.\n *\n * @param {global.Event} event\n * The event that occurred.\n */\n/**\n * Gets fired when an area of the chart has been selected. The default action\n * for the selection event is to zoom the chart to the selected area. It can be\n * prevented by calling `event.preventDefault()` or return false.\n *\n * @callback Highcharts.ChartSelectionCallbackFunction\n *\n * @param {Highcharts.Chart} this\n * The chart on which the event occurred.\n *\n * @param {Highcharts.SelectEventObject} event\n * Event informations\n *\n * @return {boolean|undefined}\n * Return false to prevent the default action, usually zoom.\n */\n(''); // Detach doclets above\n\n;// ./code/es5/es-modules/Core/Color/Color.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar Color_isNumber = Core_Utilities.isNumber, Color_merge = Core_Utilities.merge, Color_pInt = Core_Utilities.pInt, Color_defined = Core_Utilities.defined;\n/* *\n *\n * Class\n *\n * */\n/* eslint-disable valid-jsdoc */\n/**\n * Handle color operations. Some object methods are chainable.\n *\n * @class\n * @name Highcharts.Color\n *\n * @param {Highcharts.ColorType} input\n * The input color in either rgba or hex format\n */\nvar Color = /** @class */ (function () {\n /* *\n *\n * Constructor\n *\n * */\n function Color(input) {\n this.rgba = [NaN, NaN, NaN, NaN];\n this.input = input;\n var GlobalColor = Core_Globals.Color;\n // Backwards compatibility, allow class overwrite\n if (GlobalColor && GlobalColor !== Color) {\n return new GlobalColor(input);\n }\n var result,\n rgba,\n i,\n parser;\n // Gradients\n if (typeof input === 'object' &&\n typeof input.stops !== 'undefined') {\n this.stops = input.stops.map(function (stop) { return new Color(stop[1]); });\n // Solid colors\n }\n else if (typeof input === 'string') {\n this.input = input = (Color.names[input.toLowerCase()] || input);\n i = Color.parsers.length;\n while (i-- && !rgba) {\n parser = Color.parsers[i];\n result = parser.regex.exec(input);\n if (result) {\n rgba = parser.parse(result);\n }\n }\n }\n if (rgba) {\n this.rgba = rgba;\n }\n }\n /* *\n *\n * Static Functions\n *\n * */\n /**\n * Creates a color instance out of a color string or object.\n *\n * @function Highcharts.Color.parse\n *\n * @param {Highcharts.ColorType} [input]\n * The input color in either rgba or hex format.\n *\n * @return {Highcharts.Color}\n * Color instance.\n */\n Color.parse = function (input) {\n return input ? new Color(input) : Color.None;\n };\n /* *\n *\n * Functions\n *\n * */\n /**\n * Return the color or gradient stops in the specified format\n *\n * @function Highcharts.Color#get\n *\n * @param {string} [format]\n * Possible values are 'a', 'rgb', 'rgba' (default).\n *\n * @return {Highcharts.ColorType}\n * This color as a string or gradient stops.\n */\n Color.prototype.get = function (format) {\n var input = this.input,\n rgba = this.rgba;\n if (typeof input === 'object' &&\n typeof this.stops !== 'undefined') {\n var ret_1 = Color_merge(input);\n ret_1.stops = [].slice.call(ret_1.stops);\n this.stops.forEach(function (stop, i) {\n ret_1.stops[i] = [\n ret_1.stops[i][0],\n stop.get(format)\n ];\n });\n return ret_1;\n }\n // It's NaN if gradient colors on a column chart\n if (rgba && Color_isNumber(rgba[0])) {\n if (format === 'rgb' || (!format && rgba[3] === 1)) {\n return 'rgb(' + rgba[0] + ',' + rgba[1] + ',' + rgba[2] + ')';\n }\n if (format === 'a') {\n return \"\".concat(rgba[3]);\n }\n return 'rgba(' + rgba.join(',') + ')';\n }\n return input;\n };\n /**\n * Brighten the color instance.\n *\n * @function Highcharts.Color#brighten\n *\n * @param {number} alpha\n * The alpha value.\n *\n * @return {Highcharts.Color}\n * This color with modifications.\n */\n Color.prototype.brighten = function (alpha) {\n var rgba = this.rgba;\n if (this.stops) {\n this.stops.forEach(function (stop) {\n stop.brighten(alpha);\n });\n }\n else if (Color_isNumber(alpha) && alpha !== 0) {\n for (var i = 0; i < 3; i++) {\n rgba[i] += Color_pInt(alpha * 255);\n if (rgba[i] < 0) {\n rgba[i] = 0;\n }\n if (rgba[i] > 255) {\n rgba[i] = 255;\n }\n }\n }\n return this;\n };\n /**\n * Set the color's opacity to a given alpha value.\n *\n * @function Highcharts.Color#setOpacity\n *\n * @param {number} alpha\n * Opacity between 0 and 1.\n *\n * @return {Highcharts.Color}\n * Color with modifications.\n */\n Color.prototype.setOpacity = function (alpha) {\n this.rgba[3] = alpha;\n return this;\n };\n /**\n * Return an intermediate color between two colors.\n *\n * @function Highcharts.Color#tweenTo\n *\n * @param {Highcharts.Color} to\n * The color object to tween to.\n *\n * @param {number} pos\n * The intermediate position, where 0 is the from color (current color\n * item), and 1 is the `to` color.\n *\n * @return {Highcharts.ColorType}\n * The intermediate color in rgba notation, or unsupported type.\n */\n Color.prototype.tweenTo = function (to, pos) {\n var fromRgba = this.rgba,\n toRgba = to.rgba;\n // Unsupported color, return to-color (#3920, #7034)\n if (!Color_isNumber(fromRgba[0]) || !Color_isNumber(toRgba[0])) {\n return to.input || 'none';\n }\n // Check for has alpha, because rgba colors perform worse due to\n // lack of support in WebKit.\n var hasAlpha = (toRgba[3] !== 1 || fromRgba[3] !== 1),\n channel = function (to,\n i) {\n return to + (fromRgba[i] - to) * (1 - pos);\n }, rgba = toRgba.slice(0, 3).map(channel).map(Math.round);\n if (hasAlpha) {\n rgba.push(channel(toRgba[3], 3));\n }\n return (hasAlpha ? 'rgba(' : 'rgb(') + rgba.join(',') + ')';\n };\n /* *\n *\n * Static Properties\n *\n * */\n /**\n * Collection of named colors. Can be extended from the outside by adding\n * colors to Highcharts.Color.names.\n * @private\n */\n Color.names = {\n white: '#ffffff',\n black: '#000000'\n };\n /**\n * Collection of parsers. This can be extended from the outside by pushing\n * parsers to `Color.parsers`.\n * @private\n */\n Color.parsers = [{\n // RGBA color\n // eslint-disable-next-line max-len\n regex: /rgba\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d?(?:\\.\\d+)?)\\s*\\)/,\n parse: function (result) {\n return [\n Color_pInt(result[1]),\n Color_pInt(result[2]),\n Color_pInt(result[3]),\n parseFloat(result[4], 10)\n ];\n }\n }, {\n // RGB color\n regex: /rgb\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*\\)/,\n parse: function (result) {\n return [Color_pInt(result[1]), Color_pInt(result[2]), Color_pInt(result[3]), 1];\n }\n }, {\n // RGBA 3 & 4 digit hex color, e.g. #F0F, #F0FA\n regex: /^#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?$/i,\n parse: function (result) {\n // #abcd => #aabbccdd, hence result + result.\n return [\n (Color_pInt(result[1] + result[1], 16)),\n (Color_pInt(result[2] + result[2], 16)),\n (Color_pInt(result[3] + result[3], 16)),\n !Color_defined(result[4]) ?\n 1 :\n (Color_pInt(result[4] + result[4], 16) / 255)\n ];\n }\n }, {\n // RGBA 6 & 8 digit hex color, e.g. #FFCC00, #FFCC00FF\n regex: /^#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?$/i,\n parse: function (result) {\n return [\n Color_pInt(result[1], 16),\n Color_pInt(result[2], 16),\n Color_pInt(result[3], 16),\n !Color_defined(result[4]) ?\n 1 :\n (Color_pInt(result[4], 16) / 255)\n ];\n }\n }];\n // Must be last static member for init cycle\n Color.None = new Color('');\n return Color;\n}());\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Color_Color = (Color);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * A valid color to be parsed and handled by Highcharts. Highcharts internally\n * supports hex colors like `#ffffff`, rgb colors like `rgb(255,255,255)` and\n * rgba colors like `rgba(255,255,255,1)`. Other colors may be supported by the\n * browsers and displayed correctly, but Highcharts is not able to process them\n * and apply concepts like opacity and brightening.\n *\n * @typedef {string} Highcharts.ColorString\n */\n/**\n * A valid color type than can be parsed and handled by Highcharts. It can be a\n * color string, a gradient object, or a pattern object.\n *\n * @typedef {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject} Highcharts.ColorType\n */\n/**\n * Gradient options instead of a solid color.\n *\n * @example\n * // Linear gradient used as a color option\n * color: {\n * linearGradient: { x1: 0, x2: 0, y1: 0, y2: 1 },\n * stops: [\n * [0, '#003399'], // start\n * [0.5, '#ffffff'], // middle\n * [1, '#3366AA'] // end\n * ]\n * }\n *\n * @interface Highcharts.GradientColorObject\n */ /**\n* Holds an object that defines the start position and the end position relative\n* to the shape.\n* @name Highcharts.GradientColorObject#linearGradient\n* @type {Highcharts.LinearGradientColorObject|undefined}\n*/ /**\n* Holds an object that defines the center position and the radius.\n* @name Highcharts.GradientColorObject#radialGradient\n* @type {Highcharts.RadialGradientColorObject|undefined}\n*/ /**\n* The first item in each tuple is the position in the gradient, where 0 is the\n* start of the gradient and 1 is the end of the gradient. Multiple stops can be\n* applied. The second item is the color for each stop. This color can also be\n* given in the rgba format.\n* @name Highcharts.GradientColorObject#stops\n* @type {Array<Highcharts.GradientColorStopObject>}\n*/\n/**\n * Color stop tuple.\n *\n * @see Highcharts.GradientColorObject\n *\n * @interface Highcharts.GradientColorStopObject\n */ /**\n* @name Highcharts.GradientColorStopObject#0\n* @type {number}\n*/ /**\n* @name Highcharts.GradientColorStopObject#1\n* @type {Highcharts.ColorString}\n*/ /**\n* @name Highcharts.GradientColorStopObject#color\n* @type {Highcharts.Color|undefined}\n*/\n/**\n * Defines the start position and the end position for a gradient relative\n * to the shape. Start position (x1, y1) and end position (x2, y2) are relative\n * to the shape, where 0 means top/left and 1 is bottom/right.\n *\n * @interface Highcharts.LinearGradientColorObject\n */ /**\n* Start horizontal position of the gradient. Float ranges 0-1.\n* @name Highcharts.LinearGradientColorObject#x1\n* @type {number}\n*/ /**\n* End horizontal position of the gradient. Float ranges 0-1.\n* @name Highcharts.LinearGradientColorObject#x2\n* @type {number}\n*/ /**\n* Start vertical position of the gradient. Float ranges 0-1.\n* @name Highcharts.LinearGradientColorObject#y1\n* @type {number}\n*/ /**\n* End vertical position of the gradient. Float ranges 0-1.\n* @name Highcharts.LinearGradientColorObject#y2\n* @type {number}\n*/\n/**\n * Defines the center position and the radius for a gradient.\n *\n * @interface Highcharts.RadialGradientColorObject\n */ /**\n* Center horizontal position relative to the shape. Float ranges 0-1.\n* @name Highcharts.RadialGradientColorObject#cx\n* @type {number}\n*/ /**\n* Center vertical position relative to the shape. Float ranges 0-1.\n* @name Highcharts.RadialGradientColorObject#cy\n* @type {number}\n*/ /**\n* Radius relative to the shape. Float ranges 0-1.\n* @name Highcharts.RadialGradientColorObject#r\n* @type {number}\n*/\n/**\n * Creates a color instance out of a color string.\n *\n * @function Highcharts.color\n *\n * @param {Highcharts.ColorType} input\n * The input color in either rgba or hex format\n *\n * @return {Highcharts.Color}\n * Color instance\n */\n(''); // Detach doclets above\n\n;// ./code/es5/es-modules/Core/Animation/Fx.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar color = Color_Color.parse;\n\nvar Fx_win = Core_Globals.win;\n\nvar Fx_isNumber = Core_Utilities.isNumber, Fx_objectEach = Core_Utilities.objectEach;\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/* *\n *\n * Class\n *\n * */\n/**\n * An animator object used internally. One instance applies to one property\n * (attribute or style prop) on one element. Animation is always initiated\n * through {@link SVGElement#animate}.\n *\n * @example\n * let rect = renderer.rect(0, 0, 10, 10).add();\n * rect.animate({ width: 100 });\n *\n * @private\n * @class\n * @name Highcharts.Fx\n *\n * @param {Highcharts.HTMLDOMElement|Highcharts.SVGElement} elem\n * The element to animate.\n *\n * @param {Partial<Highcharts.AnimationOptionsObject>} options\n * Animation options.\n *\n * @param {string} prop\n * The single attribute or CSS property to animate.\n */\nvar Fx = /** @class */ (function () {\n /* *\n *\n * Constructors\n *\n * */\n function Fx(elem, options, prop) {\n this.pos = NaN;\n this.options = options;\n this.elem = elem;\n this.prop = prop;\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Set the current step of a path definition on SVGElement.\n *\n * @function Highcharts.Fx#dSetter\n *\n */\n Fx.prototype.dSetter = function () {\n var paths = this.paths,\n start = paths && paths[0],\n end = paths && paths[1],\n now = this.now || 0;\n var path = [];\n // Land on the final path without adjustment points appended in the ends\n if (now === 1 || !start || !end) {\n path = this.toD || [];\n }\n else if (start.length === end.length && now < 1) {\n for (var i = 0; i < end.length; i++) {\n // Tween between the start segment and the end segment. Start\n // with a copy of the end segment and tween the appropriate\n // numerics\n var startSeg = start[i];\n var endSeg = end[i];\n var tweenSeg = [];\n for (var j = 0; j < endSeg.length; j++) {\n var startItem = startSeg[j];\n var endItem = endSeg[j];\n // Tween numbers\n if (Fx_isNumber(startItem) &&\n Fx_isNumber(endItem) &&\n // Arc boolean flags\n !(endSeg[0] === 'A' && (j === 4 || j === 5))) {\n tweenSeg[j] = startItem + now * (endItem - startItem);\n // Strings, take directly from the end segment\n }\n else {\n tweenSeg[j] = endItem;\n }\n }\n path.push(tweenSeg);\n }\n // If animation is finished or length not matching, land on right value\n }\n else {\n path = end;\n }\n this.elem.attr('d', path, void 0, true);\n };\n /**\n * Update the element with the current animation step.\n *\n * @function Highcharts.Fx#update\n *\n */\n Fx.prototype.update = function () {\n var elem = this.elem,\n prop = this.prop, // If destroyed, it is null\n now = this.now,\n step = this.options.step;\n // Animation setter defined from outside\n if (this[prop + 'Setter']) {\n this[prop + 'Setter']();\n // Other animations on SVGElement\n }\n else if (elem.attr) {\n if (elem.element) {\n elem.attr(prop, now, null, true);\n }\n // HTML styles, raw HTML content like container size\n }\n else {\n elem.style[prop] = now + this.unit;\n }\n if (step) {\n step.call(elem, now, this);\n }\n };\n /**\n * Run an animation.\n *\n * @function Highcharts.Fx#run\n *\n * @param {number} from\n * The current value, value to start from.\n *\n * @param {number} to\n * The end value, value to land on.\n *\n * @param {string} unit\n * The property unit, for example `px`.\n *\n */\n Fx.prototype.run = function (from, to, unit) {\n var self = this,\n options = self.options,\n timer = function (gotoEnd) {\n return timer.stopped ? false : self.step(gotoEnd);\n }, requestAnimationFrame = Fx_win.requestAnimationFrame ||\n function (step) {\n setTimeout(step, 13);\n }, step = function () {\n for (var i = 0; i < Fx.timers.length; i++) {\n if (!Fx.timers[i]()) {\n Fx.timers.splice(i--, 1);\n }\n }\n if (Fx.timers.length) {\n requestAnimationFrame(step);\n }\n };\n if (from === to && !this.elem['forceAnimate:' + this.prop]) {\n delete options.curAnim[this.prop];\n if (options.complete &&\n Object.keys(options.curAnim).length === 0) {\n options.complete.call(this.elem);\n }\n }\n else { // #7166\n this.startTime = +new Date();\n this.start = from;\n this.end = to;\n this.unit = unit;\n this.now = this.start;\n this.pos = 0;\n timer.elem = this.elem;\n timer.prop = this.prop;\n if (timer() && Fx.timers.push(timer) === 1) {\n requestAnimationFrame(step);\n }\n }\n };\n /**\n * Run a single step in the animation.\n *\n * @function Highcharts.Fx#step\n *\n * @param {boolean} [gotoEnd]\n * Whether to go to the endpoint of the animation after abort.\n *\n * @return {boolean}\n * Returns `true` if animation continues.\n */\n Fx.prototype.step = function (gotoEnd) {\n var t = +new Date(),\n options = this.options,\n elem = this.elem,\n complete = options.complete,\n duration = options.duration,\n curAnim = options.curAnim;\n var ret,\n done;\n if (!!elem.attr && !elem.element) { // #2616, element is destroyed\n ret = false;\n }\n else if (gotoEnd || t >= duration + this.startTime) {\n this.now = this.end;\n this.pos = 1;\n this.update();\n curAnim[this.prop] = true;\n done = true;\n Fx_objectEach(curAnim, function (val) {\n if (val !== true) {\n done = false;\n }\n });\n if (done && complete) {\n complete.call(elem);\n }\n ret = false;\n }\n else {\n this.pos = options.easing((t - this.startTime) / duration);\n this.now = this.start + ((this.end -\n this.start) * this.pos);\n this.update();\n ret = true;\n }\n return ret;\n };\n /**\n * Prepare start and end values so that the path can be animated one to one.\n *\n * @function Highcharts.Fx#initPath\n *\n * @param {Highcharts.SVGElement} elem\n * The SVGElement item.\n *\n * @param {Highcharts.SVGPathArray|undefined} fromD\n * Starting path definition.\n *\n * @param {Highcharts.SVGPathArray} toD\n * Ending path definition.\n *\n * @return {Array<Highcharts.SVGPathArray,Highcharts.SVGPathArray>}\n * An array containing start and end paths in array form so that\n * they can be animated in parallel.\n */\n Fx.prototype.initPath = function (elem, fromD, toD) {\n var startX = elem.startX,\n endX = elem.endX,\n end = toD.slice(), // Copy\n isArea = elem.isArea,\n positionFactor = isArea ? 2 : 1,\n disableAnimation = fromD &&\n toD.length > fromD.length &&\n toD.hasStackedCliffs; // #16925\n var shift,\n fullLength,\n i,\n reverse,\n start = fromD && fromD.slice(); // Copy\n if (!start || disableAnimation) {\n return [end,\n end];\n }\n /**\n * If shifting points, prepend a dummy point to the end path.\n * @private\n */\n function prepend(arr, other) {\n while (arr.length < fullLength) {\n // Move to, line to or curve to?\n var moveSegment = arr[0],\n otherSegment = other[fullLength - arr.length];\n if (otherSegment && moveSegment[0] === 'M') {\n if (otherSegment[0] === 'C') {\n arr[0] = [\n 'C',\n moveSegment[1],\n moveSegment[2],\n moveSegment[1],\n moveSegment[2],\n moveSegment[1],\n moveSegment[2]\n ];\n }\n else {\n arr[0] = ['L', moveSegment[1], moveSegment[2]];\n }\n }\n // Prepend a copy of the first point\n arr.unshift(moveSegment);\n // For areas, the bottom path goes back again to the left, so we\n // need to append a copy of the last point.\n if (isArea) {\n var z = arr.pop();\n arr.push(arr[arr.length - 1], z); // Append point and the Z\n }\n }\n }\n /**\n * Copy and append last point until the length matches the end length.\n * @private\n */\n function append(arr) {\n while (arr.length < fullLength) {\n // Pull out the slice that is going to be appended or inserted.\n // In a line graph, the positionFactor is 1, and the last point\n // is sliced out. In an area graph, the positionFactor is 2,\n // causing the middle two points to be sliced out, since an area\n // path starts at left, follows the upper path then turns and\n // follows the bottom back.\n var segmentToAdd = arr[Math.floor(arr.length / positionFactor) - 1].slice();\n // Disable the first control point of curve segments\n if (segmentToAdd[0] === 'C') {\n segmentToAdd[1] = segmentToAdd[5];\n segmentToAdd[2] = segmentToAdd[6];\n }\n if (!isArea) {\n arr.push(segmentToAdd);\n }\n else {\n var lowerSegmentToAdd = arr[Math.floor(arr.length / positionFactor)].slice();\n arr.splice(arr.length / 2, 0, segmentToAdd, lowerSegmentToAdd);\n }\n }\n }\n // For sideways animation, find out how much we need to shift to get the\n // start path Xs to match the end path Xs.\n if (startX && endX && endX.length) {\n for (i = 0; i < startX.length; i++) {\n // Moving left, new points coming in on right\n if (startX[i] === endX[0]) {\n shift = i;\n break;\n // Moving right\n }\n else if (startX[0] ===\n endX[endX.length - startX.length + i]) {\n shift = i;\n reverse = true;\n break;\n // Fixed from the right side, \"scaling\" left\n }\n else if (startX[startX.length - 1] ===\n endX[endX.length - startX.length + i]) {\n shift = startX.length - i;\n break;\n }\n }\n if (typeof shift === 'undefined') {\n start = [];\n }\n }\n if (start.length && Fx_isNumber(shift)) {\n // The common target length for the start and end array, where both\n // arrays are padded in opposite ends\n fullLength = end.length + shift * positionFactor;\n if (!reverse) {\n prepend(end, start);\n append(start);\n }\n else {\n prepend(start, end);\n append(end);\n }\n }\n return [start, end];\n };\n /**\n * Handle animation of the color attributes directly.\n *\n * @function Highcharts.Fx#fillSetter\n *\n */\n Fx.prototype.fillSetter = function () {\n Fx.prototype.strokeSetter.apply(this, arguments);\n };\n /**\n * Handle animation of the color attributes directly.\n *\n * @function Highcharts.Fx#strokeSetter\n *\n */\n Fx.prototype.strokeSetter = function () {\n this.elem.attr(this.prop, color(this.start).tweenTo(color(this.end), this.pos), void 0, true);\n };\n /* *\n *\n * Static Properties\n *\n * */\n Fx.timers = [];\n return Fx;\n}());\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Animation_Fx = (Fx);\n\n;// ./code/es5/es-modules/Core/Animation/AnimationUtilities.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar AnimationUtilities_defined = Core_Utilities.defined, AnimationUtilities_getStyle = Core_Utilities.getStyle, AnimationUtilities_isArray = Core_Utilities.isArray, AnimationUtilities_isNumber = Core_Utilities.isNumber, AnimationUtilities_isObject = Core_Utilities.isObject, AnimationUtilities_merge = Core_Utilities.merge, AnimationUtilities_objectEach = Core_Utilities.objectEach, AnimationUtilities_pick = Core_Utilities.pick;\n/* *\n *\n * Functions\n *\n * */\n/**\n * Set the global animation to either a given value, or fall back to the given\n * chart's animation option.\n *\n * @function Highcharts.setAnimation\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>|undefined} animation\n * The animation object.\n *\n * @param {Highcharts.Chart} chart\n * The chart instance.\n *\n * @todo\n * This function always relates to a chart, and sets a property on the renderer,\n * so it should be moved to the SVGRenderer.\n */\nfunction setAnimation(animation, chart) {\n chart.renderer.globalAnimation = AnimationUtilities_pick(animation, chart.options.chart.animation, true);\n}\n/**\n * Get the animation in object form, where a disabled animation is always\n * returned as `{ duration: 0 }`.\n *\n * @function Highcharts.animObject\n *\n * @param {boolean|Highcharts.AnimationOptionsObject} [animation=0]\n * An animation setting. Can be an object with duration, complete and\n * easing properties, or a boolean to enable or disable.\n *\n * @return {Highcharts.AnimationOptionsObject}\n * An object with at least a duration property.\n */\nfunction animObject(animation) {\n return AnimationUtilities_isObject(animation) ?\n AnimationUtilities_merge({ duration: 500, defer: 0 }, animation) :\n { duration: animation ? 500 : 0, defer: 0 };\n}\n/**\n * Get the defer as a number value from series animation options.\n *\n * @function Highcharts.getDeferredAnimation\n *\n * @param {Highcharts.Chart} chart\n * The chart instance.\n *\n * @param {boolean|Highcharts.AnimationOptionsObject} animation\n * An animation setting. Can be an object with duration, complete and\n * easing properties, or a boolean to enable or disable.\n *\n * @param {Highcharts.Series} [series]\n * Series to defer animation.\n *\n * @return {number}\n * The numeric value.\n */\nfunction getDeferredAnimation(chart, animation, series) {\n var labelAnimation = animObject(animation),\n s = series ? [series] : chart.series;\n var defer = 0,\n duration = 0;\n s.forEach(function (series) {\n var seriesAnim = animObject(series.options.animation);\n defer = AnimationUtilities_isObject(animation) && AnimationUtilities_defined(animation.defer) ?\n labelAnimation.defer :\n Math.max(defer, seriesAnim.duration + seriesAnim.defer);\n duration = Math.min(labelAnimation.duration, seriesAnim.duration);\n });\n // Disable defer for exporting\n if (chart.renderer.forExport) {\n defer = 0;\n }\n var anim = {\n defer: Math.max(0,\n defer - duration),\n duration: Math.min(defer,\n duration)\n };\n return anim;\n}\n/**\n * The global animate method, which uses Fx to create individual animators.\n *\n * @function Highcharts.animate\n *\n * @param {Highcharts.HTMLDOMElement|Highcharts.SVGElement} el\n * The element to animate.\n *\n * @param {Highcharts.CSSObject|Highcharts.SVGAttributes} params\n * An object containing key-value pairs of the properties to animate.\n * Supports numeric as pixel-based CSS properties for HTML objects and\n * attributes for SVGElements.\n *\n * @param {Partial<Highcharts.AnimationOptionsObject>} [opt]\n * Animation options.\n *\n * @return {void}\n */\nfunction animate(el, params, opt) {\n var start,\n unit = '',\n end,\n fx,\n args;\n if (!AnimationUtilities_isObject(opt)) { // Number or undefined/null\n args = arguments;\n opt = {\n duration: args[2],\n easing: args[3],\n complete: args[4]\n };\n }\n if (!AnimationUtilities_isNumber(opt.duration)) {\n opt.duration = 400;\n }\n opt.easing = typeof opt.easing === 'function' ?\n opt.easing :\n (Math[opt.easing] || Math.easeInOutSine);\n opt.curAnim = AnimationUtilities_merge(params);\n AnimationUtilities_objectEach(params, function (val, prop) {\n // Stop current running animation of this property\n stop(el, prop);\n fx = new Animation_Fx(el, opt, prop);\n end = void 0;\n if (prop === 'd' && AnimationUtilities_isArray(params.d)) {\n fx.paths = fx.initPath(el, el.pathArray, params.d);\n fx.toD = params.d;\n start = 0;\n end = 1;\n }\n else if (el.attr) {\n start = el.attr(prop);\n }\n else {\n start = parseFloat(AnimationUtilities_getStyle(el, prop)) || 0;\n if (prop !== 'opacity') {\n unit = 'px';\n }\n }\n if (!end) {\n end = val;\n }\n if (typeof end === 'string' && end.match('px')) {\n end = end.replace(/px/g, ''); // #4351\n }\n fx.run(start, end, unit);\n });\n}\n/**\n * Stop running animation.\n *\n * @function Highcharts.stop\n *\n * @param {Highcharts.SVGElement} el\n * The SVGElement to stop animation on.\n *\n * @param {string} [prop]\n * The property to stop animating. If given, the stop method will stop a\n * single property from animating, while others continue.\n *\n * @return {void}\n *\n * @todo\n * A possible extension to this would be to stop a single property, when\n * we want to continue animating others. Then assign the prop to the timer\n * in the Fx.run method, and check for the prop here. This would be an\n * improvement in all cases where we stop the animation from .attr. Instead of\n * stopping everything, we can just stop the actual attributes we're setting.\n */\nfunction stop(el, prop) {\n var i = Animation_Fx.timers.length;\n // Remove timers related to this element (#4519)\n while (i--) {\n if (Animation_Fx.timers[i].elem === el && (!prop || prop === Animation_Fx.timers[i].prop)) {\n Animation_Fx.timers[i].stopped = true; // #4667\n }\n }\n}\nvar animationExports = {\n animate: animate,\n animObject: animObject,\n getDeferredAnimation: getDeferredAnimation,\n setAnimation: setAnimation,\n stop: stop\n};\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var AnimationUtilities = (animationExports);\n\n;// ./code/es5/es-modules/Core/Renderer/HTML/AST.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar SVG_NS = Core_Globals.SVG_NS, AST_win = Core_Globals.win;\n\nvar AST_attr = Core_Utilities.attr, AST_createElement = Core_Utilities.createElement, AST_css = Core_Utilities.css, AST_error = Core_Utilities.error, AST_isFunction = Core_Utilities.isFunction, AST_isString = Core_Utilities.isString, AST_objectEach = Core_Utilities.objectEach, AST_splat = Core_Utilities.splat;\nvar trustedTypes = AST_win.trustedTypes;\n/* *\n *\n * Constants\n *\n * */\n// Create the trusted type policy. This should not be exposed.\nvar trustedTypesPolicy = (trustedTypes &&\n AST_isFunction(trustedTypes.createPolicy) &&\n trustedTypes.createPolicy('highcharts', {\n createHTML: function (s) { return s; }\n }));\nvar emptyHTML = trustedTypesPolicy ?\n trustedTypesPolicy.createHTML('') :\n '';\n/* *\n *\n * Class\n *\n * */\n/**\n * The AST class represents an abstract syntax tree of HTML or SVG content. It\n * can take HTML as an argument, parse it, optionally transform it to SVG, then\n * perform sanitation before inserting it into the DOM.\n *\n * @class\n * @name Highcharts.AST\n *\n * @param {string|Array<Highcharts.ASTNode>} source\n * Either an HTML string or an ASTNode list to populate the tree.\n */\nvar AST = /** @class */ (function () {\n /* *\n *\n * Constructor\n *\n * */\n // Construct an AST from HTML markup, or wrap an array of existing AST nodes\n function AST(source) {\n this.nodes = typeof source === 'string' ?\n this.parseMarkup(source) : source;\n }\n /* *\n *\n * Static Functions\n *\n * */\n /**\n * Filter an object of SVG or HTML attributes against the allow list.\n *\n * @static\n *\n * @function Highcharts.AST#filterUserAttributes\n *\n * @param {Highcharts.SVGAttributes} attributes The attributes to filter\n *\n * @return {Highcharts.SVGAttributes}\n * The filtered attributes\n */\n AST.filterUserAttributes = function (attributes) {\n AST_objectEach(attributes, function (val, key) {\n var valid = true;\n if (AST.allowedAttributes.indexOf(key) === -1) {\n valid = false;\n }\n if (['background', 'dynsrc', 'href', 'lowsrc', 'src']\n .indexOf(key) !== -1) {\n valid = AST_isString(val) && AST.allowedReferences.some(function (ref) { return val.indexOf(ref) === 0; });\n }\n if (!valid) {\n AST_error(33, false, void 0, {\n 'Invalid attribute in config': \"\".concat(key)\n });\n delete attributes[key];\n }\n // #17753, < is not allowed in SVG attributes\n if (AST_isString(val) && attributes[key]) {\n attributes[key] = val.replace(/</g, '<');\n }\n });\n return attributes;\n };\n AST.parseStyle = function (style) {\n return style\n .split(';')\n .reduce(function (styles, line) {\n var pair = line.split(':').map(function (s) { return s.trim(); }),\n key = pair.shift();\n if (key && pair.length) {\n styles[key.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); })] = pair.join(':'); // #17146\n }\n return styles;\n }, {});\n };\n /**\n * Utility function to set html content for an element by passing in a\n * markup string. The markup is safely parsed by the AST class to avoid\n * XSS vulnerabilities. This function should be used instead of setting\n * `innerHTML` in all cases where the content is not fully trusted.\n *\n * @static\n * @function Highcharts.AST#setElementHTML\n *\n * @param {SVGDOMElement|HTMLDOMElement} el\n * Node to set content of.\n *\n * @param {string} html\n * Markup string\n */\n AST.setElementHTML = function (el, html) {\n el.innerHTML = AST.emptyHTML; // Clear previous\n if (html) {\n var ast = new AST(html);\n ast.addToDOM(el);\n }\n };\n /* *\n *\n * Functions\n *\n * */\n /**\n * Add the tree defined as a hierarchical JS structure to the DOM\n *\n * @function Highcharts.AST#addToDOM\n *\n * @param {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement} parent\n * The node where it should be added\n *\n * @return {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement}\n * The inserted node.\n */\n AST.prototype.addToDOM = function (parent) {\n /**\n * @private\n * @param {Highcharts.ASTNode} subtree\n * HTML/SVG definition\n * @param {Element} [subParent]\n * parent node\n * @return {Highcharts.SVGDOMElement|Highcharts.HTMLDOMElement}\n * The inserted node.\n */\n function recurse(subtree, subParent) {\n var ret;\n AST_splat(subtree).forEach(function (item) {\n var tagName = item.tagName;\n var textNode = item.textContent ?\n Core_Globals.doc.createTextNode(item.textContent) :\n void 0;\n // Whether to ignore the AST filtering totally, #15345\n var bypassHTMLFiltering = AST.bypassHTMLFiltering;\n var node;\n if (tagName) {\n if (tagName === '#text') {\n node = textNode;\n }\n else if (AST.allowedTags.indexOf(tagName) !== -1 ||\n bypassHTMLFiltering) {\n var NS = tagName === 'svg' ?\n SVG_NS :\n (subParent.namespaceURI || SVG_NS);\n var element = Core_Globals.doc.createElementNS(NS,\n tagName);\n var attributes_1 = item.attributes || {};\n // Apply attributes from root of AST node, legacy from\n // from before TextBuilder\n AST_objectEach(item, function (val, key) {\n if (key !== 'tagName' &&\n key !== 'attributes' &&\n key !== 'children' &&\n key !== 'style' &&\n key !== 'textContent') {\n attributes_1[key] = val;\n }\n });\n AST_attr(element, bypassHTMLFiltering ?\n attributes_1 :\n AST.filterUserAttributes(attributes_1));\n if (item.style) {\n AST_css(element, item.style);\n }\n // Add text content\n if (textNode) {\n element.appendChild(textNode);\n }\n // Recurse\n recurse(item.children || [], element);\n node = element;\n }\n else {\n AST_error(33, false, void 0, {\n 'Invalid tagName in config': tagName\n });\n }\n }\n // Add to the tree\n if (node) {\n subParent.appendChild(node);\n }\n ret = node;\n });\n // Return last node added (on top level it's the only one)\n return ret;\n }\n return recurse(this.nodes, parent);\n };\n /**\n * Parse HTML/SVG markup into AST Node objects. Used internally from the\n * constructor.\n *\n * @private\n *\n * @function Highcharts.AST#getNodesFromMarkup\n *\n * @param {string} markup The markup string.\n *\n * @return {Array<Highcharts.ASTNode>} The parsed nodes.\n */\n AST.prototype.parseMarkup = function (markup) {\n var nodes = [];\n markup = markup\n .trim()\n // The style attribute throws a warning when parsing when CSP is\n // enabled (#6884), so use an alias and pick it up below\n // Make all quotation marks parse correctly to DOM (#17627)\n .replace(/ style=([\"'])/g, ' data-style=$1');\n var doc;\n try {\n doc = new DOMParser().parseFromString(trustedTypesPolicy ?\n trustedTypesPolicy.createHTML(markup) :\n markup, 'text/html');\n }\n catch (e) {\n // There are two cases where this fails:\n // 1. IE9 and PhantomJS, where the DOMParser only supports parsing\n // XML\n // 2. Due to a Chromium issue where chart redraws are triggered by\n // a `beforeprint` event (#16931),\n // https://issues.chromium.org/issues/40222135\n }\n if (!doc) {\n var body = AST_createElement('div');\n body.innerHTML = markup;\n doc = { body: body };\n }\n var appendChildNodes = function (node,\n addTo) {\n var tagName = node.nodeName.toLowerCase();\n // Add allowed tags\n var astNode = {\n tagName: tagName\n };\n if (tagName === '#text') {\n astNode.textContent = node.textContent || '';\n }\n var parsedAttributes = node.attributes;\n // Add attributes\n if (parsedAttributes) {\n var attributes_2 = {};\n [].forEach.call(parsedAttributes, function (attrib) {\n if (attrib.name === 'data-style') {\n astNode.style = AST.parseStyle(attrib.value);\n }\n else {\n attributes_2[attrib.name] = attrib.value;\n }\n });\n astNode.attributes = attributes_2;\n }\n // Handle children\n if (node.childNodes.length) {\n var children_1 = [];\n [].forEach.call(node.childNodes, function (childNode) {\n appendChildNodes(childNode, children_1);\n });\n if (children_1.length) {\n astNode.children = children_1;\n }\n }\n addTo.push(astNode);\n };\n [].forEach.call(doc.body.childNodes, function (childNode) { return appendChildNodes(childNode, nodes); });\n return nodes;\n };\n /* *\n *\n * Static Properties\n *\n * */\n /**\n * The list of allowed SVG or HTML attributes, used for sanitizing\n * potentially harmful content from the chart configuration before adding to\n * the DOM.\n *\n * @see [Source code with default values](\n * https://github.com/highcharts/highcharts/blob/master/ts/Core/Renderer/HTML/AST.ts#:~:text=public%20static%20allowedAttributes)\n *\n * @example\n * // Allow a custom, trusted attribute\n * Highcharts.AST.allowedAttributes.push('data-value');\n *\n * @name Highcharts.AST.allowedAttributes\n * @type {Array<string>}\n */\n AST.allowedAttributes = [\n 'alt',\n 'aria-controls',\n 'aria-describedby',\n 'aria-expanded',\n 'aria-haspopup',\n 'aria-hidden',\n 'aria-label',\n 'aria-labelledby',\n 'aria-live',\n 'aria-pressed',\n 'aria-readonly',\n 'aria-roledescription',\n 'aria-selected',\n 'class',\n 'clip-path',\n 'color',\n 'colspan',\n 'cx',\n 'cy',\n 'd',\n 'dx',\n 'dy',\n 'disabled',\n 'fill',\n 'filterUnits',\n 'flood-color',\n 'flood-opacity',\n 'height',\n 'href',\n 'id',\n 'in',\n 'in2',\n 'markerHeight',\n 'markerWidth',\n 'offset',\n 'opacity',\n 'operator',\n 'orient',\n 'padding',\n 'paddingLeft',\n 'paddingRight',\n 'patternUnits',\n 'r',\n 'radius',\n 'refX',\n 'refY',\n 'role',\n 'scope',\n 'slope',\n 'src',\n 'startOffset',\n 'stdDeviation',\n 'stroke',\n 'stroke-linecap',\n 'stroke-width',\n 'style',\n 'tableValues',\n 'result',\n 'rowspan',\n 'summary',\n 'target',\n 'tabindex',\n 'text-align',\n 'text-anchor',\n 'textAnchor',\n 'textLength',\n 'title',\n 'type',\n 'valign',\n 'width',\n 'x',\n 'x1',\n 'x2',\n 'xlink:href',\n 'y',\n 'y1',\n 'y2',\n 'zIndex'\n ];\n /**\n * The list of allowed references for referring attributes like `href` and\n * `src`. Attribute values will only be allowed if they start with one of\n * these strings.\n *\n * @see [Source code with default values](\n * https://github.com/highcharts/highcharts/blob/master/ts/Core/Renderer/HTML/AST.ts#:~:text=public%20static%20allowedReferences)\n *\n * @example\n * // Allow tel:\n * Highcharts.AST.allowedReferences.push('tel:');\n *\n * @name Highcharts.AST.allowedReferences\n * @type {Array<string>}\n */\n AST.allowedReferences = [\n 'https://',\n 'http://',\n 'mailto:',\n '/',\n '../',\n './',\n '#'\n ];\n /**\n * The list of allowed SVG or HTML tags, used for sanitizing potentially\n * harmful content from the chart configuration before adding to the DOM.\n *\n * @see [Source code with default values](\n * https://github.com/highcharts/highcharts/blob/master/ts/Core/Renderer/HTML/AST.ts#:~:text=public%20static%20allowedTags)\n *\n * @example\n * // Allow a custom, trusted tag\n * Highcharts.AST.allowedTags.push('blink'); // ;)\n *\n * @name Highcharts.AST.allowedTags\n * @type {Array<string>}\n */\n AST.allowedTags = [\n 'a',\n 'abbr',\n 'b',\n 'br',\n 'button',\n 'caption',\n 'circle',\n 'clipPath',\n 'code',\n 'dd',\n 'defs',\n 'div',\n 'dl',\n 'dt',\n 'em',\n 'feComponentTransfer',\n 'feComposite',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feMorphology',\n 'feOffset',\n 'feMerge',\n 'feMergeNode',\n 'filter',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'hr',\n 'i',\n 'img',\n 'li',\n 'linearGradient',\n 'marker',\n 'ol',\n 'p',\n 'path',\n 'pattern',\n 'pre',\n 'rect',\n 'small',\n 'span',\n 'stop',\n 'strong',\n 'style',\n 'sub',\n 'sup',\n 'svg',\n 'table',\n 'text',\n 'textPath',\n 'thead',\n 'title',\n 'tbody',\n 'tspan',\n 'td',\n 'th',\n 'tr',\n 'u',\n 'ul',\n '#text'\n ];\n AST.emptyHTML = emptyHTML;\n /**\n * Allow all custom SVG and HTML attributes, references and tags (together\n * with potentially harmful ones) to be added to the DOM from the chart\n * configuration. In other words, disable the allow-listing which is the\n * primary functionality of the AST.\n *\n * WARNING: Setting this property to `true` while allowing untrusted user\n * data in the chart configuration will expose your application to XSS\n * security risks!\n *\n * Note that in case you want to allow a known set of tags or attributes,\n * you should allow-list them instead of disabling the filtering totally.\n * See [allowedAttributes](Highcharts.AST#.allowedAttributes),\n * [allowedReferences](Highcharts.AST#.allowedReferences) and\n * [allowedTags](Highcharts.AST#.allowedTags). The `bypassHTMLFiltering`\n * setting is intended only for those cases where allow-listing is not\n * practical, and the chart configuration already comes from a secure\n * source.\n *\n * @example\n * // Allow all custom attributes, references and tags (disable DOM XSS\n * // filtering)\n * Highcharts.AST.bypassHTMLFiltering = true;\n *\n * @name Highcharts.AST.bypassHTMLFiltering\n * @static\n */\n AST.bypassHTMLFiltering = false;\n return AST;\n}());\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var HTML_AST = (AST);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Serialized form of an SVG/HTML definition, including children.\n *\n * @interface Highcharts.ASTNode\n */ /**\n* @name Highcharts.ASTNode#attributes\n* @type {Highcharts.SVGAttributes|undefined}\n*/ /**\n* @name Highcharts.ASTNode#children\n* @type {Array<Highcharts.ASTNode>|undefined}\n*/ /**\n* @name Highcharts.ASTNode#tagName\n* @type {string|undefined}\n*/ /**\n* @name Highcharts.ASTNode#textContent\n* @type {string|undefined}\n*/\n(''); // Keeps doclets above in file\n\n;// ./code/es5/es-modules/Core/Templating.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar Templating_defaultOptions = Defaults.defaultOptions, Templating_defaultTime = Defaults.defaultTime;\n\nvar Templating_pageLang = Core_Globals.pageLang;\n\nvar Templating_extend = Core_Utilities.extend, Templating_getNestedProperty = Core_Utilities.getNestedProperty, Templating_isArray = Core_Utilities.isArray, Templating_isNumber = Core_Utilities.isNumber, Templating_isObject = Core_Utilities.isObject, Templating_isString = Core_Utilities.isString, Templating_pick = Core_Utilities.pick, Templating_ucfirst = Core_Utilities.ucfirst;\nvar helpers = {\n // Built-in helpers\n add: function (a, b) { return a + b; },\n divide: function (a, b) { return (b !== 0 ? a / b : ''); },\n // eslint-disable-next-line eqeqeq\n eq: function (a, b) { return a == b; },\n each: function (arr) {\n var match = arguments[arguments.length - 1];\n return Templating_isArray(arr) ?\n arr.map(function (item, i) { return format(match.body, Templating_extend(Templating_isObject(item) ? item : { '@this': item }, {\n '@index': i,\n '@first': i === 0,\n '@last': i === arr.length - 1\n })); }).join('') :\n false;\n },\n ge: function (a, b) { return a >= b; },\n gt: function (a, b) { return a > b; },\n 'if': function (condition) { return !!condition; },\n le: function (a, b) { return a <= b; },\n lt: function (a, b) { return a < b; },\n multiply: function (a, b) { return a * b; },\n // eslint-disable-next-line eqeqeq\n ne: function (a, b) { return a != b; },\n subtract: function (a, b) { return a - b; },\n ucfirst: Templating_ucfirst,\n unless: function (condition) { return !condition; }\n};\nvar numberFormatCache = {};\n/* *\n *\n * Functions\n *\n * */\n// Internal convenience function\nvar isQuotedString = function (str) { return /^[\"'].+[\"']$/.test(str); };\n/**\n * Formats a JavaScript date timestamp (milliseconds since Jan 1st 1970) into a\n * human readable date string. The format is a subset of the formats for PHP's\n * [strftime](https://www.php.net/manual/en/function.strftime.php) function.\n * Additional formats can be given in the {@link Highcharts.dateFormats} hook.\n *\n * Since v6.0.5, all internal dates are formatted through the\n * {@link Highcharts.Chart#time} instance to respect chart-level time settings.\n * The `Highcharts.dateFormat` function only reflects global time settings set\n * with `setOptions`.\n *\n * Supported format keys:\n * - `%a`: Short weekday, like 'Mon'\n * - `%A`: Long weekday, like 'Monday'\n * - `%d`: Two digit day of the month, 01 to 31\n * - `%e`: Day of the month, 1 through 31\n * - `%w`: Day of the week, 0 through 6\n * - `%b`: Short month, like 'Jan'\n * - `%B`: Long month, like 'January'\n * - `%m`: Two digit month number, 01 through 12\n * - `%y`: Two digits year, like 09 for 2009\n * - `%Y`: Four digits year, like 2009\n * - `%H`: Two digits hours in 24h format, 00 through 23\n * - `%k`: Hours in 24h format, 0 through 23\n * - `%I`: Two digits hours in 12h format, 00 through 11\n * - `%l`: Hours in 12h format, 1 through 12\n * - `%M`: Two digits minutes, 00 through 59\n * - `%p`: Upper case AM or PM\n * - `%P`: Lower case AM or PM\n * - `%S`: Two digits seconds, 00 through 59\n * - `%L`: Milliseconds (naming from Ruby)\n *\n * @function Highcharts.dateFormat\n *\n * @param {string} format\n * The desired format where various time representations are prefixed\n * with `%`.\n *\n * @param {number} timestamp\n * The JavaScript timestamp.\n *\n * @param {boolean} [upperCaseFirst=false]\n * Upper case first letter in the return.\n *\n * @return {string}\n * The formatted date.\n */\nfunction dateFormat(format, timestamp, upperCaseFirst) {\n return Templating_defaultTime.dateFormat(format, timestamp, upperCaseFirst);\n}\n/**\n * Format a string according to a subset of the rules of Python's String.format\n * method.\n *\n * @example\n * let s = Highcharts.format(\n * 'The {color} fox was {len:.2f} feet long',\n * { color: 'red', len: Math.PI }\n * );\n * // => The red fox was 3.14 feet long\n *\n * @function Highcharts.format\n *\n * @param {string} str\n * The string to format.\n *\n * @param {Record<string, *>} ctx\n * The context, a collection of key-value pairs where each key is\n * replaced by its value.\n *\n * @param {Highcharts.Chart} [chart]\n * A `Chart` instance used to get numberFormatter and time.\n *\n * @return {string}\n * The formatted string.\n */\nfunction format(str, ctx, chart) {\n if (str === void 0) { str = ''; }\n var regex = /\\{([\\p{L}\\d:\\.,;\\-\\/<>\\[\\]%_@+\"'’= #\\(\\)]+)\\}/gu, \n // The sub expression regex is the same as the top expression regex,\n // but except parens and block helpers (#), and surrounded by parens\n // instead of curly brackets.\n subRegex = /\\(([\\p{L}\\d:\\.,;\\-\\/<>\\[\\]%_@+\"'= ]+)\\)/gu, matches = [], floatRegex = /f$/, decRegex = /\\.(\\d)/, lang = (chart === null || chart === void 0 ? void 0 : chart.options.lang) || Templating_defaultOptions.lang, time = chart && chart.time || Templating_defaultTime, numberFormatter = chart && chart.numberFormatter || numberFormat;\n /*\n * Get a literal or variable value inside a template expression. May be\n * extended with other types like string or null if needed, but keep it\n * small for now.\n */\n var resolveProperty = function (key) {\n if (key === void 0) { key = ''; }\n var n;\n // Literals\n if (key === 'true') {\n return true;\n }\n if (key === 'false') {\n return false;\n }\n if ((n = Number(key)).toString() === key) {\n return n;\n }\n if (isQuotedString(key)) {\n return key.slice(1, -1);\n }\n // Variables and constants\n return Templating_getNestedProperty(key, ctx);\n };\n var match,\n currentMatch,\n depth = 0,\n hasSub;\n // Parse and create tree\n while ((match = regex.exec(str)) !== null) {\n // When a sub expression is found, it is evaluated first, and the\n // results recursively evaluated until no subexpression exists.\n var mainMatch = match,\n subMatch = subRegex.exec(match[1]);\n if (subMatch) {\n match = subMatch;\n hasSub = true;\n }\n if (!currentMatch || !currentMatch.isBlock) {\n currentMatch = {\n ctx: ctx,\n expression: match[1],\n find: match[0],\n isBlock: match[1].charAt(0) === '#',\n start: match.index,\n startInner: match.index + match[0].length,\n length: match[0].length\n };\n }\n // Identify helpers\n var fn = (currentMatch.isBlock ? mainMatch : match)[1].split(' ')[0].replace('#', '');\n if (helpers[fn]) {\n // Block helper, only 0 level is handled\n if (currentMatch.isBlock && fn === currentMatch.fn) {\n depth++;\n }\n if (!currentMatch.fn) {\n currentMatch.fn = fn;\n }\n }\n // Closing a block helper\n var startingElseSection = match[1] === 'else';\n if (currentMatch.isBlock &&\n currentMatch.fn && (match[1] === \"/\".concat(currentMatch.fn) ||\n startingElseSection)) {\n if (!depth) { // === 0\n var start = currentMatch.startInner,\n body = str.substr(start,\n match.index - start);\n // Either closing without an else section, or when encountering\n // an else section\n if (currentMatch.body === void 0) {\n currentMatch.body = body;\n currentMatch.startInner = match.index + match[0].length;\n // The body exists already, so this is the else section\n }\n else {\n currentMatch.elseBody = body;\n }\n currentMatch.find += body + match[0];\n if (!startingElseSection) {\n matches.push(currentMatch);\n currentMatch = void 0;\n }\n }\n else if (!startingElseSection) {\n depth--;\n }\n // Common expression\n }\n else if (!currentMatch.isBlock) {\n matches.push(currentMatch);\n }\n // Evaluate sub-matches one by one to prevent orphaned block closers\n if (subMatch && !(currentMatch === null || currentMatch === void 0 ? void 0 : currentMatch.isBlock)) {\n break;\n }\n }\n // Execute\n matches.forEach(function (match) {\n var body = match.body,\n elseBody = match.elseBody,\n expression = match.expression,\n fn = match.fn;\n var replacement,\n i;\n // Helper function\n if (fn) {\n // Pass the helpers the amount of arguments defined by the function,\n // then the match as the last argument.\n var args = [match],\n parts = [],\n len = expression.length;\n var start = 0,\n startChar = void 0;\n for (i = 0; i <= len; i++) {\n var char = expression.charAt(i);\n // Start of string\n if (!startChar && (char === '\"' || char === '\\'')) {\n startChar = char;\n // End of string\n }\n else if (startChar === char) {\n startChar = '';\n }\n if (!startChar &&\n (char === ' ' || i === len)) {\n parts.push(expression.substr(start, i - start));\n start = i + 1;\n }\n }\n i = helpers[fn].length;\n while (i--) {\n args.unshift(resolveProperty(parts[i + 1]));\n }\n replacement = helpers[fn].apply(ctx, args);\n // Block helpers may return true or false. They may also return a\n // string, like the `each` helper.\n if (match.isBlock && typeof replacement === 'boolean') {\n replacement = format(replacement ? body : elseBody, ctx, chart);\n }\n // Simple variable replacement\n }\n else {\n var valueAndFormat = isQuotedString(expression) ?\n [expression] : expression.split(':');\n replacement = resolveProperty(valueAndFormat.shift() || '');\n // Format the replacement\n if (valueAndFormat.length && typeof replacement === 'number') {\n var segment = valueAndFormat.join(':');\n if (floatRegex.test(segment)) { // Float\n var decimals = parseInt((segment.match(decRegex) || ['', '-1'])[1], 10);\n if (replacement !== null) {\n replacement = numberFormatter(replacement, decimals, lang.decimalPoint, segment.indexOf(',') > -1 ? lang.thousandsSep : '');\n }\n }\n else {\n replacement = time.dateFormat(segment, replacement);\n }\n }\n // Use string literal in order to be preserved in the outer\n // expression\n subRegex.lastIndex = 0;\n if (subRegex.test(match.find) && Templating_isString(replacement)) {\n replacement = \"\\\"\".concat(replacement, \"\\\"\");\n }\n }\n str = str.replace(match.find, Templating_pick(replacement, ''));\n });\n return hasSub ? format(str, ctx, chart) : str;\n}\n/**\n * Format a number and return a string based on input settings.\n *\n * @sample highcharts/members/highcharts-numberformat/\n * Custom number format\n *\n * @function Highcharts.numberFormat\n *\n * @param {number} number\n * The input number to format.\n *\n * @param {number} decimals\n * The amount of decimals. A value of -1 preserves the amount in the\n * input number.\n *\n * @param {string} [decimalPoint]\n * The decimal point, defaults to the one given in the lang options, or\n * a dot.\n *\n * @param {string} [thousandsSep]\n * The thousands separator, defaults to the one given in the lang\n * options, or a space character.\n *\n * @return {string}\n * The formatted number.\n */\nfunction numberFormat(number, decimals, decimalPoint, thousandsSep) {\n var _a,\n _b;\n number = +number || 0;\n decimals = +decimals;\n var ret,\n fractionDigits,\n _c = number.toString().split('e').map(Number),\n mantissa = _c[0],\n exp = _c[1];\n var lang = ((_a = this === null || this === void 0 ? void 0 : this.options) === null || _a === void 0 ? void 0 : _a.lang) || Templating_defaultOptions.lang,\n origDec = (number.toString().split('.')[1] || '').split('e')[0].length,\n firstDecimals = decimals,\n options = {};\n decimalPoint !== null && decimalPoint !== void 0 ? decimalPoint : (decimalPoint = lang.decimalPoint);\n thousandsSep !== null && thousandsSep !== void 0 ? thousandsSep : (thousandsSep = lang.thousandsSep);\n if (decimals === -1) {\n // Preserve decimals. Not huge numbers (#3793).\n decimals = Math.min(origDec, 20);\n }\n else if (!Templating_isNumber(decimals)) {\n decimals = 2;\n }\n else if (decimals && exp < 0) {\n // Expose decimals from exponential notation (#7042)\n fractionDigits = decimals + exp;\n if (fractionDigits >= 0) {\n // Remove too small part of the number while keeping the notation\n mantissa = +mantissa.toExponential(fractionDigits).split('e')[0];\n decimals = fractionDigits;\n }\n else {\n // `fractionDigits < 0`\n mantissa = Math.floor(mantissa);\n if (decimals < 20) {\n // Use number instead of exponential notation (#7405)\n number = +(mantissa * Math.pow(10, exp)).toFixed(decimals);\n }\n else {\n // Or zero\n number = 0;\n }\n exp = 0;\n }\n }\n if (exp) {\n decimals !== null && decimals !== void 0 ? decimals : (decimals = 2);\n number = mantissa;\n }\n if (Templating_isNumber(decimals) && decimals >= 0) {\n options.minimumFractionDigits = decimals;\n options.maximumFractionDigits = decimals;\n }\n if (thousandsSep === '') {\n options.useGrouping = false;\n }\n var hasSeparators = thousandsSep || decimalPoint,\n locale = hasSeparators ?\n 'en' :\n ((this === null || this === void 0 ? void 0 : this.locale) || lang.locale || Templating_pageLang),\n cacheKey = JSON.stringify(options) + locale,\n nf = (_b = numberFormatCache[cacheKey]) !== null && _b !== void 0 ? _b : (numberFormatCache[cacheKey] = new Intl.NumberFormat(locale,\n options));\n ret = nf.format(number);\n // If thousandsSep or decimalPoint are set, fall back to using English\n // format with string replacement for the separators.\n if (hasSeparators) {\n ret = ret\n // Preliminary step to avoid re-swapping (#22402)\n .replace(/([,\\.])/g, '_$1')\n .replace(/_\\,/g, thousandsSep !== null && thousandsSep !== void 0 ? thousandsSep : ',')\n .replace('_.', decimalPoint !== null && decimalPoint !== void 0 ? decimalPoint : '.');\n }\n if (\n // Remove signed zero (#20564)\n (!decimals && +ret === 0) ||\n // Small numbers, no decimals (#14023)\n (exp < 0 && !firstDecimals)) {\n ret = '0';\n }\n if (exp && +ret !== 0) {\n ret += 'e' + (exp < 0 ? '' : '+') + exp;\n }\n return ret;\n}\n/* *\n *\n * Default Export\n *\n * */\nvar Templating = {\n dateFormat: dateFormat,\n format: format,\n helpers: helpers,\n numberFormat: numberFormat\n};\n/* harmony default export */ var Core_Templating = (Templating);\n\n;// ./code/es5/es-modules/Core/Renderer/RendererRegistry.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n/* *\n *\n * Namespace\n *\n * */\nvar RendererRegistry;\n(function (RendererRegistry) {\n /* *\n *\n * Constants\n *\n * */\n RendererRegistry.rendererTypes = {};\n /* *\n *\n * Variables\n *\n * */\n var defaultRenderer;\n /* *\n *\n * Functions\n *\n * */\n /**\n * Gets a registered renderer class. If no renderer type is provided or the\n * requested renderer was not founded, the default renderer is returned.\n *\n * @param {string} [rendererType]\n * Renderer type or the default renderer.\n *\n * @return {Highcharts.Class<Highcharts.SVGRenderer>}\n * Returns the requested renderer class or the default renderer class.\n */\n function getRendererType(rendererType) {\n if (rendererType === void 0) { rendererType = defaultRenderer; }\n return (RendererRegistry.rendererTypes[rendererType] || RendererRegistry.rendererTypes[defaultRenderer]);\n }\n RendererRegistry.getRendererType = getRendererType;\n /**\n * Register a renderer class.\n *\n * @param {string} rendererType\n * Renderer type to register.\n *\n * @param {Highcharts.Class<Highcharts.SVGRenderer>} rendererClass\n * Returns the requested renderer class or the default renderer class.\n *\n * @param {boolean} setAsDefault\n * Sets the renderer class as the default renderer.\n */\n function registerRendererType(rendererType, rendererClass, setAsDefault) {\n RendererRegistry.rendererTypes[rendererType] = rendererClass;\n if (!defaultRenderer || setAsDefault) {\n defaultRenderer = rendererType;\n Core_Globals.Renderer = rendererClass; // Compatibility\n }\n }\n RendererRegistry.registerRendererType = registerRendererType;\n})(RendererRegistry || (RendererRegistry = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Renderer_RendererRegistry = (RendererRegistry);\n\n;// ./code/es5/es-modules/Core/Renderer/RendererUtilities.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n * Imports\n *\n * */\n\nvar RendererUtilities_clamp = Core_Utilities.clamp, RendererUtilities_pick = Core_Utilities.pick, RendererUtilities_pushUnique = Core_Utilities.pushUnique, RendererUtilities_stableSort = Core_Utilities.stableSort;\n/* *\n *\n * Namespace\n *\n * */\nvar RendererUtilities;\n(function (RendererUtilities) {\n /* *\n *\n * Declarations\n *\n * */\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /**\n * General distribution algorithm for distributing labels of differing size\n * along a confined length in two dimensions. The algorithm takes an array\n * of objects containing a size, a target and a rank. It will place the\n * labels as close as possible to their targets, skipping the lowest ranked\n * labels if necessary.\n * @private\n */\n function distribute(boxes, len, maxDistance) {\n // Original array will be altered with added .pos\n var origBoxes = boxes,\n reducedLen = origBoxes.reducedLen || len,\n sortByRank = function (a,\n b) {\n return (b.rank || 0) - (a.rank || 0);\n }, sortByTarget = function (a, b) {\n return a.target - b.target;\n }, restBoxes = [], // The outranked overshoot\n boxesLength = boxes.length, forDeletion = [], push = restBoxes.push;\n var i,\n cursor,\n step,\n overlapping = true,\n box,\n target,\n total = 0,\n equalRank;\n // If the total size exceeds the len, remove those boxes with the lowest\n // rank\n i = boxesLength;\n while (i--) {\n total += boxes[i].size;\n }\n // Sort by rank, then slice away overshoot\n if (total > reducedLen) {\n RendererUtilities_stableSort(boxes, sortByRank);\n equalRank = boxes[0].rank === boxes[boxes.length - 1].rank;\n step = equalRank ? boxesLength / 2 : -1;\n cursor = equalRank ? step : boxesLength - 1;\n // When the boxes have equal rank (pie data labels, flags - #10073),\n // decimate the boxes by starting in the middle and gradually remove\n // more items inside the array. When they are sorted by rank, just\n // remove the ones with the lowest rank from the end.\n while (step && total > reducedLen) {\n i = Math.floor(cursor);\n box = boxes[i];\n if (RendererUtilities_pushUnique(forDeletion, i)) {\n total -= box.size;\n }\n cursor += step;\n // Start over the decimation with smaller steps\n if (equalRank && cursor >= boxes.length) {\n step /= 2;\n cursor = step;\n }\n }\n // Clean out the boxes marked for deletion\n forDeletion\n .sort(function (a, b) { return b - a; })\n .forEach(function (i) {\n return push.apply(restBoxes, boxes.splice(i, 1));\n });\n }\n // Order by target\n RendererUtilities_stableSort(boxes, sortByTarget);\n // So far we have been mutating the original array. Now\n // create a copy with target arrays\n boxes = boxes.map(function (box) { return ({\n size: box.size,\n targets: [box.target],\n align: RendererUtilities_pick(box.align, 0.5)\n }); });\n while (overlapping) {\n // Initial positions: target centered in box\n i = boxes.length;\n while (i--) {\n box = boxes[i];\n // Composite box, average of targets\n target = (Math.min.apply(0, box.targets) +\n Math.max.apply(0, box.targets)) / 2;\n box.pos = RendererUtilities_clamp(target - box.size * box.align, 0, len - box.size);\n }\n // Detect overlap and join boxes\n i = boxes.length;\n overlapping = false;\n while (i--) {\n // Overlap\n if (i > 0 &&\n boxes[i - 1].pos + boxes[i - 1].size >\n boxes[i].pos) {\n // Add this size to the previous box\n boxes[i - 1].size += boxes[i].size;\n boxes[i - 1].targets = boxes[i - 1]\n .targets\n .concat(boxes[i].targets);\n boxes[i - 1].align = 0.5;\n // Overlapping right, push left\n if (boxes[i - 1].pos + boxes[i - 1].size > len) {\n boxes[i - 1].pos = len - boxes[i - 1].size;\n }\n boxes.splice(i, 1); // Remove this item\n overlapping = true;\n }\n }\n }\n // Add the rest (hidden boxes)\n push.apply(origBoxes, restBoxes);\n // Now the composite boxes are placed, we need to put the original boxes\n // within them\n i = 0;\n boxes.some(function (box) {\n var posInCompositeBox = 0;\n // Exceeded maxDistance => abort\n return (box.targets || []).some(function () {\n origBoxes[i].pos = box.pos + posInCompositeBox;\n // If the distance between the position and the target exceeds\n // maxDistance, abort the loop and decrease the length in\n // increments of 10% to recursively reduce the number of\n // visible boxes by rank. Once all boxes are within the\n // maxDistance, we're good.\n if (typeof maxDistance !== 'undefined' &&\n Math.abs(origBoxes[i].pos - origBoxes[i].target) > maxDistance) {\n // Reset the positions that are already set\n origBoxes\n .slice(0, i + 1)\n .forEach(function (box) { return delete box.pos; });\n // Try with a smaller length\n origBoxes.reducedLen =\n (origBoxes.reducedLen || len) - (len * 0.1);\n // Recurse\n if (origBoxes.reducedLen > len * 0.1) {\n distribute(origBoxes, len, maxDistance);\n }\n // Exceeded maxDistance => abort\n return true;\n }\n posInCompositeBox += origBoxes[i].size;\n i++;\n return false;\n });\n });\n // Add the rest (hidden) boxes and sort by target\n RendererUtilities_stableSort(origBoxes, sortByTarget);\n return origBoxes;\n }\n RendererUtilities.distribute = distribute;\n})(RendererUtilities || (RendererUtilities = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Renderer_RendererUtilities = (RendererUtilities);\n\n;// ./code/es5/es-modules/Core/Renderer/SVG/SVGElement.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar SVGElement_animate = AnimationUtilities.animate, SVGElement_animObject = AnimationUtilities.animObject, SVGElement_stop = AnimationUtilities.stop;\n\n\nvar deg2rad = Core_Globals.deg2rad, SVGElement_doc = Core_Globals.doc, svg = Core_Globals.svg, SVGElement_SVG_NS = Core_Globals.SVG_NS, SVGElement_win = Core_Globals.win, isFirefox = Core_Globals.isFirefox;\n\nvar SVGElement_addEvent = Core_Utilities.addEvent, SVGElement_attr = Core_Utilities.attr, SVGElement_createElement = Core_Utilities.createElement, SVGElement_crisp = Core_Utilities.crisp, SVGElement_css = Core_Utilities.css, SVGElement_defined = Core_Utilities.defined, SVGElement_erase = Core_Utilities.erase, SVGElement_extend = Core_Utilities.extend, SVGElement_fireEvent = Core_Utilities.fireEvent, SVGElement_getAlignFactor = Core_Utilities.getAlignFactor, SVGElement_isArray = Core_Utilities.isArray, SVGElement_isFunction = Core_Utilities.isFunction, SVGElement_isNumber = Core_Utilities.isNumber, SVGElement_isObject = Core_Utilities.isObject, SVGElement_isString = Core_Utilities.isString, SVGElement_merge = Core_Utilities.merge, SVGElement_objectEach = Core_Utilities.objectEach, SVGElement_pick = Core_Utilities.pick, SVGElement_pInt = Core_Utilities.pInt, SVGElement_pushUnique = Core_Utilities.pushUnique, SVGElement_replaceNested = Core_Utilities.replaceNested, SVGElement_syncTimeout = Core_Utilities.syncTimeout, SVGElement_uniqueKey = Core_Utilities.uniqueKey;\n/* *\n *\n * Class\n *\n * */\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/**\n * The SVGElement prototype is a JavaScript wrapper for SVG elements used in the\n * rendering layer of Highcharts. Combined with the\n * {@link Highcharts.SVGRenderer}\n * object, these prototypes allow freeform annotation in the charts or even in\n * HTML pages without instanciating a chart. The SVGElement can also wrap HTML\n * labels, when `text` or `label` elements are created with the `useHTML`\n * parameter.\n *\n * The SVGElement instances are created through factory functions on the\n * {@link Highcharts.SVGRenderer}\n * object, like\n * {@link Highcharts.SVGRenderer#rect|rect},\n * {@link Highcharts.SVGRenderer#path|path},\n * {@link Highcharts.SVGRenderer#text|text},\n * {@link Highcharts.SVGRenderer#label|label},\n * {@link Highcharts.SVGRenderer#g|g}\n * and more.\n *\n * See [How to use the SVG Renderer](\n * https://www.highcharts.com/docs/advanced-chart-features/renderer) for a\n * comprehensive tutorial on how to draw SVG elements on a chart.\n *\n * @class\n * @name Highcharts.SVGElement\n */\nvar SVGElement = /** @class */ (function () {\n /**\n * Initialize the SVG element. This function only exists to make the\n * initialization process overridable. It should not be called directly.\n *\n * @function Highcharts.SVGElement#init\n *\n * @param {Highcharts.SVGRenderer} renderer\n * The SVGRenderer instance to initialize to.\n *\n * @param {string} nodeName\n * The SVG node name.\n */\n function SVGElement(renderer, nodeName) {\n this.onEvents = {};\n this.opacity = 1; // Default base for animation\n this.SVG_NS = SVGElement_SVG_NS;\n /**\n * The primary DOM node. Each `SVGElement` instance wraps a main DOM\n * node, but may also represent more nodes.\n *\n * @name Highcharts.SVGElement#element\n * @type {Highcharts.SVGDOMElement|Highcharts.HTMLDOMElement}\n */\n this.element = nodeName === 'span' || nodeName === 'body' ?\n SVGElement_createElement(nodeName) :\n SVGElement_doc.createElementNS(this.SVG_NS, nodeName);\n /**\n * The renderer that the SVGElement belongs to.\n *\n * @name Highcharts.SVGElement#renderer\n * @type {Highcharts.SVGRenderer}\n */\n this.renderer = renderer;\n this.styles = {};\n SVGElement_fireEvent(this, 'afterInit');\n }\n // @todo public zIndex?: number;\n /* *\n *\n * Functions\n *\n * */\n /**\n * Get the current value of an attribute or pseudo attribute,\n * used mainly for animation. Called internally from\n * the {@link Highcharts.SVGRenderer#attr} function.\n *\n * @private\n * @function Highcharts.SVGElement#_defaultGetter\n *\n * @param {string} key\n * Property key.\n *\n * @return {number|string}\n * Property value.\n */\n SVGElement.prototype._defaultGetter = function (key) {\n var ret = SVGElement_pick(this[key + 'Value'], // Align getter\n this[key],\n this.element ? this.element.getAttribute(key) : null, 0);\n if (/^-?[\\d\\.]+$/.test(ret)) { // Is numerical\n ret = parseFloat(ret);\n }\n return ret;\n };\n /**\n * @private\n * @function Highcharts.SVGElement#_defaultSetter\n *\n * @param {string} value\n *\n * @param {string} key\n *\n * @param {Highcharts.SVGDOMElement} element\n *\n */\n SVGElement.prototype._defaultSetter = function (value, key, element) {\n element.setAttribute(key, value);\n };\n /**\n * Add the element to the DOM. All elements must be added this way.\n *\n * @sample highcharts/members/renderer-g\n * Elements added to a group\n *\n * @function Highcharts.SVGElement#add\n *\n * @param {Highcharts.SVGElement} [parent]\n * The parent item to add it to. If undefined, the element is added\n * to the {@link Highcharts.SVGRenderer.box}.\n *\n * @return {Highcharts.SVGElement}\n * Returns the SVGElement for chaining.\n */\n SVGElement.prototype.add = function (parent) {\n var renderer = this.renderer,\n element = this.element;\n var inserted;\n if (parent) {\n this.parentGroup = parent;\n }\n // Build formatted text\n if (typeof this.textStr !== 'undefined' &&\n this.element.nodeName === 'text' // Not for SVGLabel instances\n ) {\n renderer.buildText(this);\n }\n // Mark as added\n this.added = true;\n // If we're adding to renderer root, or other elements in the group\n // have a z index, we need to handle it\n if (!parent || parent.handleZ || this.zIndex) {\n inserted = this.zIndexSetter();\n }\n // If zIndex is not handled, append at the end\n if (!inserted) {\n (parent ?\n parent.element :\n renderer.box).appendChild(element);\n }\n // Fire an event for internal hooks\n if (this.onAdd) {\n this.onAdd();\n }\n return this;\n };\n /**\n * Add a class name to an element.\n *\n * @function Highcharts.SVGElement#addClass\n *\n * @param {string} className\n * The new class name to add.\n *\n * @param {boolean} [replace=false]\n * When true, the existing class name(s) will be overwritten with the new\n * one. When false, the new one is added.\n *\n * @return {Highcharts.SVGElement}\n * Return the SVG element for chainability.\n */\n SVGElement.prototype.addClass = function (className, replace) {\n var currentClassName = replace ? '' : (this.attr('class') || '');\n // Trim the string and remove duplicates\n className = (className || '')\n .split(/ /g)\n .reduce(function (newClassName, name) {\n if (currentClassName.indexOf(name) === -1) {\n newClassName.push(name);\n }\n return newClassName;\n }, (currentClassName ?\n [currentClassName] :\n []))\n .join(' ');\n if (className !== currentClassName) {\n this.attr('class', className);\n }\n return this;\n };\n /**\n * This method is executed in the end of `attr()`, after setting all\n * attributes in the hash. In can be used to efficiently consolidate\n * multiple attributes in one SVG property -- e.g., translate, rotate and\n * scale are merged in one \"transform\" attribute in the SVG node.\n *\n * @private\n * @function Highcharts.SVGElement#afterSetters\n */\n SVGElement.prototype.afterSetters = function () {\n // Update transform. Do this outside the loop to prevent redundant\n // updating for batch setting of attributes.\n if (this.doTransform) {\n this.updateTransform();\n this.doTransform = false;\n }\n };\n /**\n * Align the element relative to the chart or another box.\n *\n * @function Highcharts.SVGElement#align\n *\n * @param {Highcharts.AlignObject} [alignOptions]\n * The alignment options. The function can be called without this\n * parameter in order to re-align an element after the box has been\n * updated.\n *\n * @param {boolean} [alignByTranslate]\n * Align element by translation.\n *\n * @param {string|Highcharts.BBoxObject} [alignTo]\n * The box to align to, needs a width and height. When the box is a\n * string, it refers to an object in the Renderer. For example, when\n * box is `spacingBox`, it refers to `Renderer.spacingBox` which\n * holds `width`, `height`, `x` and `y` properties.\n *\n * @param {boolean} [redraw]\n * Decide if SVGElement should be redrawn with new alignment or\n * just change its attributes.\n *\n * @return {Highcharts.SVGElement} Returns the SVGElement for chaining.\n */\n SVGElement.prototype.align = function (alignOptions, alignByTranslate, alignTo, redraw) {\n if (redraw === void 0) { redraw = true; }\n var renderer = this.renderer,\n alignedObjects = renderer.alignedObjects,\n initialAlignment = Boolean(alignOptions);\n // First call on instanciate\n if (alignOptions) {\n this.alignOptions = alignOptions;\n this.alignByTranslate = alignByTranslate;\n this.alignTo = alignTo;\n // When called on resize, no arguments are supplied\n }\n else {\n alignOptions = this.alignOptions || {};\n alignByTranslate = this.alignByTranslate;\n alignTo = this.alignTo;\n }\n var alignToKey = !alignTo || SVGElement_isString(alignTo) ?\n alignTo || 'renderer' :\n void 0;\n // When aligned to a key, automatically re-align on redraws\n if (alignToKey) {\n // Prevent duplicates, like legendGroup after resize\n if (initialAlignment) {\n SVGElement_pushUnique(alignedObjects, this);\n }\n alignTo = void 0; // Do not use the box\n }\n var alignToBox = SVGElement_pick(alignTo,\n renderer[alignToKey],\n renderer), \n // Default: left align\n x = (alignToBox.x || 0) + (alignOptions.x || 0) +\n ((alignToBox.width || 0) - (alignOptions.width || 0)) *\n SVGElement_getAlignFactor(alignOptions.align), \n // Default: top align\n y = (alignToBox.y || 0) + (alignOptions.y || 0) +\n ((alignToBox.height || 0) - (alignOptions.height || 0)) *\n SVGElement_getAlignFactor(alignOptions.verticalAlign),\n attribs = {\n 'text-align': alignOptions === null || alignOptions === void 0 ? void 0 : alignOptions.align\n };\n attribs[alignByTranslate ? 'translateX' : 'x'] = Math.round(x);\n attribs[alignByTranslate ? 'translateY' : 'y'] = Math.round(y);\n // Animate only if already placed\n if (redraw) {\n this[this.placed ? 'animate' : 'attr'](attribs);\n this.placed = true;\n }\n this.alignAttr = attribs;\n return this;\n };\n /**\n * @private\n * @function Highcharts.SVGElement#alignSetter\n * @param {\"left\"|\"center\"|\"right\"} value\n */\n SVGElement.prototype.alignSetter = function (value) {\n var convert = {\n left: 'start',\n center: 'middle',\n right: 'end'\n };\n if (convert[value]) {\n this.alignValue = value;\n this.element.setAttribute('text-anchor', convert[value]);\n }\n };\n /**\n * Animate to given attributes or CSS properties.\n *\n * @sample highcharts/members/element-on/\n * Setting some attributes by animation\n *\n * @function Highcharts.SVGElement#animate\n *\n * @param {Highcharts.SVGAttributes} params\n * SVG attributes or CSS to animate.\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [options]\n * Animation options.\n *\n * @param {Function} [complete]\n * Function to perform at the end of animation.\n *\n * @return {Highcharts.SVGElement}\n * Returns the SVGElement for chaining.\n */\n SVGElement.prototype.animate = function (params, options, complete) {\n var _this = this;\n var animOptions = SVGElement_animObject(SVGElement_pick(options,\n this.renderer.globalAnimation,\n true)),\n deferTime = animOptions.defer;\n // When the page is hidden save resources in the background by not\n // running animation at all (#9749).\n if (SVGElement_doc.hidden) {\n animOptions.duration = 0;\n }\n if (animOptions.duration !== 0) {\n // Allows using a callback with the global animation without\n // overwriting it\n if (complete) {\n animOptions.complete = complete;\n }\n // If defer option is defined delay the animation #12901\n SVGElement_syncTimeout(function () {\n if (_this.element) {\n SVGElement_animate(_this, params, animOptions);\n }\n }, deferTime);\n }\n else {\n this.attr(params, void 0, complete || animOptions.complete);\n // Call the end step synchronously\n SVGElement_objectEach(params, function (val, prop) {\n if (animOptions.step) {\n animOptions.step.call(this, val, { prop: prop, pos: 1, elem: this });\n }\n }, this);\n }\n return this;\n };\n /**\n * Apply a text outline through a custom CSS property, by copying the text\n * element and apply stroke to the copy. Used internally. Contrast checks at\n * [example](https://jsfiddle.net/highcharts/43soe9m1/2/).\n *\n * @example\n * // Specific color\n * text.css({\n * textOutline: '1px black'\n * });\n * // Automatic contrast\n * text.css({\n * color: '#000000', // black text\n * textOutline: '1px contrast' // => white outline\n * });\n *\n * @private\n * @function Highcharts.SVGElement#applyTextOutline\n *\n * @param {string} textOutline\n * A custom CSS `text-outline` setting, defined by `width color`.\n */\n SVGElement.prototype.applyTextOutline = function (textOutline) {\n var elem = this.element,\n hasContrast = textOutline.indexOf('contrast') !== -1,\n styles = {};\n // When the text shadow is set to contrast, use dark stroke for light\n // text and vice versa.\n if (hasContrast) {\n styles.textOutline = textOutline = textOutline.replace(/contrast/g, this.renderer.getContrast(elem.style.fill));\n }\n // Extract the stroke width and color\n var parts = textOutline.split(' ');\n var color = parts[parts.length - 1];\n var strokeWidth = parts[0];\n if (strokeWidth && strokeWidth !== 'none' && Core_Globals.svg) {\n this.fakeTS = true; // Fake text shadow\n // Since the stroke is applied on center of the actual outline, we\n // need to double it to get the correct stroke-width outside the\n // glyphs.\n strokeWidth = strokeWidth.replace(/(^[\\d\\.]+)(.*?)$/g, function (match, digit, unit) {\n return (2 * Number(digit)) + unit;\n });\n // Remove shadows from previous runs.\n this.removeTextOutline();\n var outline_1 = SVGElement_doc.createElementNS(SVGElement_SVG_NS, 'tspan');\n SVGElement_attr(outline_1, {\n 'class': 'highcharts-text-outline',\n fill: color,\n stroke: color,\n 'stroke-width': strokeWidth,\n 'stroke-linejoin': 'round'\n });\n // For each of the tspans and text nodes, create a copy in the\n // outline.\n var parentElem = elem.querySelector('textPath') || elem;\n [].forEach.call(parentElem.childNodes, function (childNode) {\n var clone = childNode.cloneNode(true);\n if (clone.removeAttribute) {\n ['fill', 'stroke', 'stroke-width', 'stroke'].forEach(function (prop) { return clone\n .removeAttribute(prop); });\n }\n outline_1.appendChild(clone);\n });\n // Collect the sum of dy from all children, included nested ones\n var totalHeight_1 = 0;\n [].forEach.call(parentElem.querySelectorAll('text tspan'), function (element) {\n totalHeight_1 += Number(element.getAttribute('dy'));\n });\n // Insert an absolutely positioned break before the original text\n // to keep it in place\n var br = SVGElement_doc.createElementNS(SVGElement_SVG_NS, 'tspan');\n br.textContent = '\\u200B';\n // Reset the position for the following text\n SVGElement_attr(br, {\n x: Number(elem.getAttribute('x')),\n dy: -totalHeight_1\n });\n // Insert the outline\n outline_1.appendChild(br);\n parentElem.insertBefore(outline_1, parentElem.firstChild);\n }\n };\n /**\n * @function Highcharts.SVGElement#attr\n * @param {string} key\n * @return {number|string}\n */ /**\n * Apply native and custom attributes to the SVG elements.\n *\n * In order to set the rotation center for rotation, set x and y to 0 and\n * use `translateX` and `translateY` attributes to position the element\n * instead.\n *\n * Attributes frequently used in Highcharts are `fill`, `stroke`,\n * `stroke-width`.\n *\n * @sample highcharts/members/renderer-rect/\n * Setting some attributes\n *\n * @example\n * // Set multiple attributes\n * element.attr({\n * stroke: 'red',\n * fill: 'blue',\n * x: 10,\n * y: 10\n * });\n *\n * // Set a single attribute\n * element.attr('stroke', 'red');\n *\n * // Get an attribute\n * element.attr('stroke'); // => 'red'\n *\n * @function Highcharts.SVGElement#attr\n *\n * @param {string|Highcharts.SVGAttributes} [hash]\n * The native and custom SVG attributes.\n *\n * @param {number|string|Highcharts.SVGPathArray} [val]\n * If the type of the first argument is `string`, the second can be a\n * value, which will serve as a single attribute setter. If the first\n * argument is a string and the second is undefined, the function\n * serves as a getter and the current value of the property is\n * returned.\n *\n * @param {Function} [complete]\n * A callback function to execute after setting the attributes. This\n * makes the function compliant and interchangeable with the\n * {@link SVGElement#animate} function.\n *\n * @param {boolean} [continueAnimation=true]\n * Used internally when `.attr` is called as part of an animation\n * step. Otherwise, calling `.attr` for an attribute will stop\n * animation for that attribute.\n *\n * @return {Highcharts.SVGElement}\n * If used as a setter, it returns the current\n * {@link Highcharts.SVGElement} so the calls can be chained. If\n * used as a getter, the current value of the attribute is returned.\n */\n SVGElement.prototype.attr = function (hash, val, complete, continueAnimation) {\n var element = this.element,\n symbolCustomAttribs = SVGElement.symbolCustomAttribs;\n var key,\n hasSetSymbolSize,\n ret = this,\n skipAttr,\n setter;\n // Single key-value pair\n if (typeof hash === 'string' && typeof val !== 'undefined') {\n key = hash;\n hash = {};\n hash[key] = val;\n }\n // Used as a getter: first argument is a string, second is undefined\n if (typeof hash === 'string') {\n ret = (this[hash + 'Getter'] ||\n this._defaultGetter).call(this, hash, element);\n // Setter\n }\n else {\n SVGElement_objectEach(hash, function eachAttribute(val, key) {\n skipAttr = false;\n // Unless .attr is from the animator update, stop current\n // running animation of this property\n if (!continueAnimation) {\n SVGElement_stop(this, key);\n }\n // Special handling of symbol attributes\n if (this.symbolName &&\n symbolCustomAttribs.indexOf(key) !== -1) {\n if (!hasSetSymbolSize) {\n this.symbolAttr(hash);\n hasSetSymbolSize = true;\n }\n skipAttr = true;\n }\n if (this.rotation && (key === 'x' || key === 'y')) {\n this.doTransform = true;\n }\n if (!skipAttr) {\n setter = (this[key + 'Setter'] ||\n this._defaultSetter);\n setter.call(this, val, key, element);\n }\n }, this);\n this.afterSetters();\n }\n // In accordance with animate, run a complete callback\n if (complete) {\n complete.call(this);\n }\n return ret;\n };\n /**\n * Apply a clipping shape to this element.\n *\n * @function Highcharts.SVGElement#clip\n *\n * @param {SVGElement} [clipElem]\n * The clipping shape. If skipped, the current clip is removed.\n *\n * @return {Highcharts.SVGElement}\n * Returns the SVG element to allow chaining.\n */\n SVGElement.prototype.clip = function (clipElem) {\n if (clipElem && !clipElem.clipPath) {\n // Add a hyphen at the end to avoid confusion in testing indexes\n // -1 and -10, -11 etc (#6550)\n var id = SVGElement_uniqueKey() + '-', clipPath = this.renderer.createElement('clipPath')\n .attr({ id: id })\n .add(this.renderer.defs);\n SVGElement_extend(clipElem, { clipPath: clipPath, id: id, count: 0 });\n clipElem.add(clipPath);\n }\n return this.attr('clip-path', clipElem ?\n \"url(\".concat(this.renderer.url, \"#\").concat(clipElem.id, \")\") :\n 'none');\n };\n /**\n * Calculate the coordinates needed for drawing a rectangle crisply and\n * return the calculated attributes.\n *\n * @function Highcharts.SVGElement#crisp\n *\n * @param {Highcharts.RectangleObject} rect\n * Rectangle to crisp.\n *\n * @param {number} [strokeWidth]\n * The stroke width to consider when computing crisp positioning. It can\n * also be set directly on the rect parameter.\n *\n * @return {Highcharts.RectangleObject}\n * The modified rectangle arguments.\n */\n SVGElement.prototype.crisp = function (rect, strokeWidth) {\n // Math.round because strokeWidth can sometimes have roundoff errors\n strokeWidth = Math.round(strokeWidth || rect.strokeWidth || 0);\n var x1 = rect.x || this.x || 0,\n y1 = rect.y || this.y || 0,\n x2 = (rect.width || this.width || 0) + x1,\n y2 = (rect.height || this.height || 0) + y1, \n // Find all the rounded coordinates for corners\n x = SVGElement_crisp(x1,\n strokeWidth),\n y = SVGElement_crisp(y1,\n strokeWidth),\n x2Crisp = SVGElement_crisp(x2,\n strokeWidth),\n y2Crisp = SVGElement_crisp(y2,\n strokeWidth);\n SVGElement_extend(rect, {\n x: x,\n y: y,\n width: x2Crisp - x,\n height: y2Crisp - y\n });\n if (SVGElement_defined(rect.strokeWidth)) {\n rect.strokeWidth = strokeWidth;\n }\n return rect;\n };\n /**\n * Build and apply an SVG gradient out of a common JavaScript configuration\n * object. This function is called from the attribute setters. An event\n * hook is added for supporting other complex color types.\n *\n * @private\n * @function Highcharts.SVGElement#complexColor\n *\n * @param {Highcharts.GradientColorObject|Highcharts.PatternObject} colorOptions\n * The gradient or pattern options structure.\n *\n * @param {string} prop\n * The property to apply, can either be `fill` or `stroke`.\n *\n * @param {Highcharts.SVGDOMElement} elem\n * SVG element to apply the gradient on.\n */\n SVGElement.prototype.complexColor = function (colorOptions, prop, elem) {\n var renderer = this.renderer;\n var colorObject,\n gradName,\n gradAttr,\n radAttr,\n gradients,\n stops,\n stopColor,\n stopOpacity,\n radialReference,\n id,\n key = [],\n value;\n SVGElement_fireEvent(this.renderer, 'complexColor', {\n args: arguments\n }, function () {\n // Apply linear or radial gradients\n if (colorOptions.radialGradient) {\n gradName = 'radialGradient';\n }\n else if (colorOptions.linearGradient) {\n gradName = 'linearGradient';\n }\n if (gradName) {\n gradAttr = colorOptions[gradName];\n gradients = renderer.gradients;\n stops = colorOptions.stops;\n radialReference = elem.radialReference;\n // Keep < 2.2 compatibility\n if (SVGElement_isArray(gradAttr)) {\n colorOptions[gradName] = gradAttr = {\n x1: gradAttr[0],\n y1: gradAttr[1],\n x2: gradAttr[2],\n y2: gradAttr[3],\n gradientUnits: 'userSpaceOnUse'\n };\n }\n // Correct the radial gradient for the radial reference system\n if (gradName === 'radialGradient' &&\n radialReference &&\n !SVGElement_defined(gradAttr.gradientUnits)) {\n // Save the radial attributes for updating\n radAttr = gradAttr;\n gradAttr = SVGElement_merge(gradAttr, renderer.getRadialAttr(radialReference, radAttr), { gradientUnits: 'userSpaceOnUse' });\n }\n // Build the unique key to detect whether we need to create a\n // new element (#1282)\n SVGElement_objectEach(gradAttr, function (value, n) {\n if (n !== 'id') {\n key.push(n, value);\n }\n });\n SVGElement_objectEach(stops, function (val) {\n key.push(val);\n });\n key = key.join(',');\n // Check if a gradient object with the same config object is\n // created within this renderer\n if (gradients[key]) {\n id = gradients[key].attr('id');\n }\n else {\n // Set the id and create the element\n gradAttr.id = id = SVGElement_uniqueKey();\n var gradientObject_1 = gradients[key] =\n renderer.createElement(gradName)\n .attr(gradAttr)\n .add(renderer.defs);\n gradientObject_1.radAttr = radAttr;\n // The gradient needs to keep a list of stops to be able to\n // destroy them\n gradientObject_1.stops = [];\n stops.forEach(function (stop) {\n if (stop[1].indexOf('rgba') === 0) {\n colorObject = Color_Color.parse(stop[1]);\n stopColor = colorObject.get('rgb');\n stopOpacity = colorObject.get('a');\n }\n else {\n stopColor = stop[1];\n stopOpacity = 1;\n }\n var stopObject = renderer.createElement('stop').attr({\n offset: stop[0],\n 'stop-color': stopColor,\n 'stop-opacity': stopOpacity\n }).add(gradientObject_1);\n // Add the stop element to the gradient\n gradientObject_1.stops.push(stopObject);\n });\n }\n // Set the reference to the gradient object\n value = 'url(' + renderer.url + '#' + id + ')';\n elem.setAttribute(prop, value);\n elem.gradient = key;\n // Allow the color to be concatenated into tooltips formatters\n // etc. (#2995)\n colorOptions.toString = function () {\n return value;\n };\n }\n });\n };\n /**\n * Set styles for the element. In addition to CSS styles supported by\n * native SVG and HTML elements, there are also some custom made for\n * Highcharts, like `width`, `ellipsis` and `textOverflow` for SVG text\n * elements.\n *\n * @sample highcharts/members/renderer-text-on-chart/\n * Styled text\n *\n * @function Highcharts.SVGElement#css\n *\n * @param {Highcharts.CSSObject} styles\n * The new CSS styles.\n *\n * @return {Highcharts.SVGElement}\n * Return the SVG element for chaining.\n */\n SVGElement.prototype.css = function (styles) {\n var oldStyles = this.styles,\n newStyles = {},\n elem = this.element;\n var textWidth,\n hasNew = !oldStyles;\n // Filter out existing styles to increase performance (#2640)\n if (oldStyles) {\n SVGElement_objectEach(styles, function (value, n) {\n if (oldStyles && oldStyles[n] !== value) {\n newStyles[n] = value;\n hasNew = true;\n }\n });\n }\n if (hasNew) {\n // Merge the new styles with the old ones\n if (oldStyles) {\n styles = SVGElement_extend(oldStyles, newStyles);\n }\n // Get the text width from style\n // Previously set, unset it (#8234)\n if (styles.width === null || styles.width === 'auto') {\n delete this.textWidth;\n // Apply new\n }\n else if (elem.nodeName.toLowerCase() === 'text' &&\n styles.width) {\n textWidth = this.textWidth = SVGElement_pInt(styles.width);\n }\n // Store object\n SVGElement_extend(this.styles, styles);\n if (textWidth && (!svg && this.renderer.forExport)) {\n delete styles.width;\n }\n var fontSize = isFirefox && styles.fontSize || null;\n // Necessary in firefox to be able to set font-size, #22124\n if (fontSize && (SVGElement_isNumber(fontSize) ||\n /^\\d+$/.test(fontSize))) {\n styles.fontSize += 'px';\n }\n var stylesToApply_1 = SVGElement_merge(styles);\n if (elem.namespaceURI === this.SVG_NS) {\n // These CSS properties are interpreted internally by the SVG\n // renderer, but are not supported by SVG and should not be\n // added to the DOM. In styled mode, no CSS should find its way\n // to the DOM whatsoever (#6173, #6474).\n ['textOutline', 'textOverflow', 'whiteSpace', 'width'].forEach(function (key) { return (stylesToApply_1 &&\n delete stylesToApply_1[key]); });\n // SVG requires fill for text\n if (stylesToApply_1.color) {\n stylesToApply_1.fill = stylesToApply_1.color;\n }\n }\n SVGElement_css(elem, stylesToApply_1);\n }\n if (this.added) {\n // Rebuild text after added. Cache mechanisms in the buildText will\n // prevent building if there are no significant changes.\n if (this.element.nodeName === 'text') {\n this.renderer.buildText(this);\n }\n // Apply text outline after added\n if (styles.textOutline) {\n this.applyTextOutline(styles.textOutline);\n }\n }\n return this;\n };\n /**\n * @private\n * @function Highcharts.SVGElement#dashstyleSetter\n * @param {string} value\n */\n SVGElement.prototype.dashstyleSetter = function (value) {\n var i,\n strokeWidth = this['stroke-width'];\n // If \"inherit\", like maps in IE, assume 1 (#4981). With HC5 and the new\n // strokeWidth function, we should be able to use that instead.\n if (strokeWidth === 'inherit') {\n strokeWidth = 1;\n }\n value = value && value.toLowerCase();\n if (value) {\n var v = value\n .replace('shortdashdotdot', '3,1,1,1,1,1,')\n .replace('shortdashdot', '3,1,1,1')\n .replace('shortdot', '1,1,')\n .replace('shortdash', '3,1,')\n .replace('longdash', '8,3,')\n .replace(/dot/g, '1,3,')\n .replace('dash', '4,3,')\n .replace(/,$/, '')\n .split(','); // Ending comma\n i = v.length;\n while (i--) {\n v[i] = '' + (SVGElement_pInt(v[i]) * SVGElement_pick(strokeWidth, NaN));\n }\n value = v.join(',').replace(/NaN/g, 'none'); // #3226\n this.element.setAttribute('stroke-dasharray', value);\n }\n };\n /**\n * Destroy the element and element wrapper and clear up the DOM and event\n * hooks.\n *\n * @function Highcharts.SVGElement#destroy\n */\n SVGElement.prototype.destroy = function () {\n var _a;\n var wrapper = this,\n element = wrapper.element || {},\n renderer = wrapper.renderer,\n ownerSVGElement = element.ownerSVGElement;\n var parentToClean = (element.nodeName === 'SPAN' &&\n wrapper.parentGroup ||\n void 0),\n grandParent,\n i;\n // Remove events\n element.onclick = element.onmouseout = element.onmouseover =\n element.onmousemove = element.point = null;\n SVGElement_stop(wrapper); // Stop running animations\n if (wrapper.clipPath && ownerSVGElement) {\n var clipPath_1 = wrapper.clipPath;\n // Look for existing references to this clipPath and remove them\n // before destroying the element (#6196).\n // The upper case version is for Edge\n [].forEach.call(ownerSVGElement.querySelectorAll('[clip-path],[CLIP-PATH]'), function (el) {\n if (el.getAttribute('clip-path').indexOf(clipPath_1.element.id) > -1) {\n el.removeAttribute('clip-path');\n }\n });\n wrapper.clipPath = clipPath_1.destroy();\n }\n wrapper.connector = (_a = wrapper.connector) === null || _a === void 0 ? void 0 : _a.destroy();\n // Destroy stops in case this is a gradient object @todo old code?\n if (wrapper.stops) {\n for (i = 0; i < wrapper.stops.length; i++) {\n wrapper.stops[i].destroy();\n }\n wrapper.stops.length = 0;\n wrapper.stops = void 0;\n }\n // Remove element\n wrapper.safeRemoveChild(element);\n // In case of useHTML, clean up empty containers emulating SVG groups\n // (#1960, #2393, #2697).\n while (parentToClean &&\n parentToClean.div &&\n parentToClean.div.childNodes.length === 0) {\n grandParent = parentToClean.parentGroup;\n wrapper.safeRemoveChild(parentToClean.div);\n delete parentToClean.div;\n parentToClean = grandParent;\n }\n // Remove from alignObjects\n if (wrapper.alignOptions) {\n SVGElement_erase(renderer.alignedObjects, wrapper);\n }\n SVGElement_objectEach(wrapper, function (val, key) {\n // Destroy child elements of a group\n if (wrapper[key] &&\n wrapper[key].parentGroup === wrapper &&\n wrapper[key].destroy) {\n wrapper[key].destroy();\n }\n // Delete all properties\n delete wrapper[key];\n });\n return;\n };\n /**\n * @private\n * @function Highcharts.SVGElement#dSettter\n * @param {number|string|Highcharts.SVGPathArray} value\n * @param {string} key\n * @param {Highcharts.SVGDOMElement} element\n */\n SVGElement.prototype.dSetter = function (value, key, element) {\n if (SVGElement_isArray(value)) {\n // Backwards compatibility, convert one-dimensional array into an\n // array of segments\n if (typeof value[0] === 'string') {\n value = this.renderer.pathToSegments(value);\n }\n this.pathArray = value;\n value = value.reduce(function (acc, seg, i) {\n if (!seg || !seg.join) {\n return (seg || '').toString();\n }\n return (i ? acc + ' ' : '') + seg.join(' ');\n }, '');\n }\n if (/(NaN| {2}|^$)/.test(value)) {\n value = 'M 0 0';\n }\n // Check for cache before resetting. Resetting causes disturbance in the\n // DOM, causing flickering in some cases in Edge/IE (#6747). Also\n // possible performance gain.\n if (this[key] !== value) {\n element.setAttribute(key, value);\n this[key] = value;\n }\n };\n /**\n * @private\n * @function Highcharts.SVGElement#fillSetter\n * @param {Highcharts.ColorType} value\n * @param {string} key\n * @param {Highcharts.SVGDOMElement} element\n */\n SVGElement.prototype.fillSetter = function (value, key, element) {\n if (typeof value === 'string') {\n element.setAttribute(key, value);\n }\n else if (value) {\n this.complexColor(value, key, element);\n }\n };\n /**\n * @private\n * @function Highcharts.SVGElement#hrefSetter\n * @param {Highcharts.ColorType} value\n * @param {string} key\n * @param {Highcharts.SVGDOMElement} element\n */\n SVGElement.prototype.hrefSetter = function (value, key, element) {\n // Namespace is needed for offline export, #19106\n element.setAttributeNS('http://www.w3.org/1999/xlink', key, value);\n };\n /**\n * Get the bounding box (width, height, x and y) for the element. Generally\n * used to get rendered text size. Since this is called a lot in charts,\n * the results are cached based on text properties, in order to save DOM\n * traffic. The returned bounding box includes the rotation, so for example\n * a single text line of rotation 90 will report a greater height, and a\n * width corresponding to the line-height.\n *\n * @sample highcharts/members/renderer-on-chart/\n * Draw a rectangle based on a text's bounding box\n *\n * @function Highcharts.SVGElement#getBBox\n *\n * @param {boolean} [reload]\n * Skip the cache and get the updated DOM bounding box.\n *\n * @param {number} [rot]\n * Override the element's rotation. This is internally used on axis\n * labels with a value of 0 to find out what the bounding box would\n * be have been if it were not rotated.\n *\n * @return {Highcharts.BBoxObject}\n * The bounding box with `x`, `y`, `width` and `height` properties.\n */\n SVGElement.prototype.getBBox = function (reload, rot) {\n var wrapper = this,\n alignValue = wrapper.alignValue,\n element = wrapper.element,\n renderer = wrapper.renderer,\n styles = wrapper.styles,\n textStr = wrapper.textStr,\n cache = renderer.cache,\n cacheKeys = renderer.cacheKeys,\n isSVG = element.namespaceURI === wrapper.SVG_NS,\n rotation = SVGElement_pick(rot,\n wrapper.rotation, 0),\n fontSize = renderer.styledMode ? (element &&\n SVGElement.prototype.getStyle.call(element, 'font-size')) : (styles.fontSize);\n var bBox,\n height,\n toggleTextShadowShim,\n cacheKey;\n // Avoid undefined and null (#7316)\n if (SVGElement_defined(textStr)) {\n cacheKey = textStr.toString();\n // Since numbers are monospaced, and numerical labels appear a lot\n // in a chart, we assume that a label of n characters has the same\n // bounding box as others of the same length. Unless there is inner\n // HTML in the label. In that case, leave the numbers as is (#5899).\n if (cacheKey.indexOf('<') === -1) {\n cacheKey = cacheKey.replace(/\\d/g, '0');\n }\n // Properties that affect bounding box\n cacheKey += [\n '',\n renderer.rootFontSize,\n fontSize,\n rotation,\n wrapper.textWidth, // #7874, also useHTML\n alignValue,\n styles.lineClamp,\n styles.textOverflow, // #5968\n styles.fontWeight // #12163\n ].join(',');\n }\n if (cacheKey && !reload) {\n bBox = cache[cacheKey];\n }\n // No cache found\n if (!bBox || bBox.polygon) {\n // SVG elements\n if (isSVG || renderer.forExport) {\n try { // Fails in Firefox if the container has display: none.\n // When the text shadow shim is used, we need to hide the\n // fake shadows to get the correct bounding box (#3872)\n toggleTextShadowShim = this.fakeTS && function (display) {\n var outline = element.querySelector('.highcharts-text-outline');\n if (outline) {\n SVGElement_css(outline, { display: display });\n }\n };\n // Workaround for #3842, Firefox reporting wrong bounding\n // box for shadows\n if (SVGElement_isFunction(toggleTextShadowShim)) {\n toggleTextShadowShim('none');\n }\n bBox = element.getBBox ?\n // SVG: use extend because IE9 is not allowed to change\n // width and height in case of rotation (below)\n SVGElement_extend({}, element.getBBox()) : {\n // HTML elements with `exporting.allowHTML` and\n // legacy IE in export mode\n width: element.offsetWidth,\n height: element.offsetHeight,\n x: 0,\n y: 0\n };\n // #3842\n if (SVGElement_isFunction(toggleTextShadowShim)) {\n toggleTextShadowShim('');\n }\n }\n catch (e) {\n '';\n }\n // If the bBox is not set, the try-catch block above failed. The\n // other condition is for Opera that returns a width of\n // -Infinity on hidden elements.\n if (!bBox || bBox.width < 0) {\n bBox = { x: 0, y: 0, width: 0, height: 0 };\n }\n // Use HTML within SVG\n }\n else {\n bBox = wrapper.htmlGetBBox();\n }\n // True SVG elements as well as HTML elements in modern browsers\n // using the .useHTML option need to compensated for rotation\n height = bBox.height;\n // Workaround for wrong bounding box in IE, Edge and Chrome on\n // Windows. With Highcharts' default font, IE and Edge report\n // a box height of 16.899 and Chrome rounds it to 17. If this\n // stands uncorrected, it results in more padding added below\n // the text than above when adding a label border or background.\n // Also vertical positioning is affected.\n // https://jsfiddle.net/highcharts/em37nvuj/\n // (#1101, #1505, #1669, #2568, #6213).\n if (isSVG) {\n bBox.height = height = ({\n '11px,17': 14,\n '13px,20': 16\n }[\"\" + (fontSize || '') + \",\".concat(Math.round(height))] ||\n height);\n }\n // Adjust for rotated text\n if (rotation) {\n bBox = this.getRotatedBox(bBox, rotation);\n }\n // Create a reference to catch changes to bBox\n var e = { bBox: bBox };\n SVGElement_fireEvent(this, 'afterGetBBox', e);\n // Pick up any changes after the fired event\n bBox = e.bBox;\n }\n // Cache it. When loading a chart in a hidden iframe in Firefox and\n // IE/Edge, the bounding box height is 0, so don't cache it (#5620).\n if (cacheKey && (textStr === '' || bBox.height > 0)) {\n // Rotate (#4681)\n while (cacheKeys.length > 250) {\n delete cache[cacheKeys.shift()];\n }\n if (!cache[cacheKey]) {\n cacheKeys.push(cacheKey);\n }\n cache[cacheKey] = bBox;\n }\n return bBox;\n };\n /**\n * Get the rotated box.\n * @private\n */\n SVGElement.prototype.getRotatedBox = function (box, rotation) {\n var boxX = box.x,\n boxY = box.y,\n width = box.width,\n height = box.height,\n _a = this,\n alignValue = _a.alignValue,\n translateY = _a.translateY,\n _b = _a.rotationOriginX,\n rotationOriginX = _b === void 0 ? 0 : _b,\n _c = _a.rotationOriginY,\n rotationOriginY = _c === void 0 ? 0 : _c,\n alignFactor = SVGElement_getAlignFactor(alignValue),\n baseline = Number(this.element.getAttribute('y') || 0) -\n (translateY ? 0 : boxY),\n rad = rotation * deg2rad,\n rad90 = (rotation - 90) * deg2rad,\n cosRad = Math.cos(rad),\n sinRad = Math.sin(rad),\n wCosRad = width * cosRad,\n wSinRad = width * sinRad,\n cosRad90 = Math.cos(rad90),\n sinRad90 = Math.sin(rad90),\n _d = [\n rotationOriginX,\n rotationOriginY\n ].map(function (rotOrigin) { return [\n rotOrigin - (rotOrigin * cosRad),\n rotOrigin * sinRad\n ]; }),\n _e = _d[0],\n xOriginCosRad = _e[0],\n xOriginSinRad = _e[1],\n _f = _d[1],\n yOriginCosRad = _f[0],\n yOriginSinRad = _f[1], \n // Find the starting point on the left side baseline of\n // the text\n pX = ((boxX + alignFactor * (width - wCosRad)) +\n xOriginCosRad + yOriginSinRad),\n pY = ((boxY + baseline - alignFactor * wSinRad) -\n xOriginSinRad + yOriginCosRad), \n // Find all corners\n aX = pX + baseline * cosRad90,\n bX = aX + wCosRad,\n cX = bX - height * cosRad90,\n dX = cX - wCosRad,\n aY = pY + baseline * sinRad90,\n bY = aY + wSinRad,\n cY = bY - height * sinRad90,\n dY = cY - wSinRad;\n // Deduct the bounding box from the corners\n var x = Math.min(aX,\n bX,\n cX,\n dX),\n y = Math.min(aY,\n bY,\n cY,\n dY),\n boxWidth = Math.max(aX,\n bX,\n cX,\n dX) - x,\n boxHeight = Math.max(aY,\n bY,\n cY,\n dY) - y;\n /* Uncomment to debug boxes\n this.renderer.path([\n ['M', aX, aY],\n ['L', bX, bY],\n ['L', cX, cY],\n ['L', dX, dY],\n ['Z']\n ])\n .attr({\n stroke: 'red',\n 'stroke-width': 1\n })\n .add();\n // */\n return {\n x: x,\n y: y,\n width: boxWidth,\n height: boxHeight,\n polygon: [\n [aX, aY],\n [bX, bY],\n [cX, cY],\n [dX, dY]\n ]\n };\n };\n /**\n * Get the computed style. Only in styled mode.\n *\n * @example\n * chart.series[0].points[0].graphic.getStyle('stroke-width'); // => '1px'\n *\n * @function Highcharts.SVGElement#getStyle\n *\n * @param {string} prop\n * The property name to check for.\n *\n * @return {string}\n * The current computed value.\n */\n SVGElement.prototype.getStyle = function (prop) {\n return SVGElement_win\n .getComputedStyle(this.element || this, '')\n .getPropertyValue(prop);\n };\n /**\n * Check if an element has the given class name.\n *\n * @function Highcharts.SVGElement#hasClass\n *\n * @param {string} className\n * The class name to check for.\n *\n * @return {boolean}\n * Whether the class name is found.\n */\n SVGElement.prototype.hasClass = function (className) {\n return ('' + this.attr('class'))\n .split(' ')\n .indexOf(className) !== -1;\n };\n /**\n * Hide the element, similar to setting the `visibility` attribute to\n * `hidden`.\n *\n * @function Highcharts.SVGElement#hide\n *\n * @return {Highcharts.SVGElement}\n * Returns the SVGElement for chaining.\n */\n SVGElement.prototype.hide = function () {\n return this.attr({ visibility: 'hidden' });\n };\n /**\n * @private\n */\n SVGElement.prototype.htmlGetBBox = function () {\n return { height: 0, width: 0, x: 0, y: 0 };\n };\n /**\n * Add an event listener. This is a simple setter that replaces the\n * previous event of the same type added by this function, as opposed to\n * the {@link Highcharts#addEvent} function.\n *\n * @sample highcharts/members/element-on/\n * A clickable rectangle\n *\n * @function Highcharts.SVGElement#on\n *\n * @param {string} eventType\n * The event type.\n *\n * @param {Function} handler\n * The handler callback.\n *\n * @return {Highcharts.SVGElement}\n * The SVGElement for chaining.\n */\n SVGElement.prototype.on = function (eventType, handler) {\n var onEvents = this.onEvents;\n if (onEvents[eventType]) {\n // Unbind existing event\n onEvents[eventType]();\n }\n onEvents[eventType] = SVGElement_addEvent(this.element, eventType, handler);\n return this;\n };\n /**\n * @private\n * @function Highcharts.SVGElement#opacitySetter\n * @param {string} value\n * @param {string} key\n * @param {Highcharts.SVGDOMElement} element\n */\n SVGElement.prototype.opacitySetter = function (value, key, element) {\n // Round off to avoid float errors, like tests where opacity lands on\n // 9.86957e-06 instead of 0\n var opacity = Number(Number(value).toFixed(3));\n this.opacity = opacity;\n element.setAttribute(key, opacity);\n };\n /**\n * Re-align an aligned text or label after setting the text.\n *\n * @private\n * @function Highcharts.SVGElement#reAlign\n *\n */\n SVGElement.prototype.reAlign = function () {\n var _a;\n if (((_a = this.alignOptions) === null || _a === void 0 ? void 0 : _a.width) && this.alignOptions.align !== 'left') {\n this.alignOptions.width = this.getBBox().width;\n this.placed = false; // Block animation\n this.align();\n }\n };\n /**\n * Remove a class name from the element.\n *\n * @function Highcharts.SVGElement#removeClass\n *\n * @param {string|RegExp} className\n * The class name to remove.\n *\n * @return {Highcharts.SVGElement} Returns the SVG element for chainability.\n */\n SVGElement.prototype.removeClass = function (className) {\n return this.attr('class', ('' + this.attr('class'))\n .replace(SVGElement_isString(className) ?\n new RegExp(\"(^| )\".concat(className, \"( |$)\")) : // #12064, #13590\n className, ' ')\n .replace(/ +/g, ' ')\n .trim());\n };\n /**\n *\n * @private\n */\n SVGElement.prototype.removeTextOutline = function () {\n var outline = this.element\n .querySelector('tspan.highcharts-text-outline');\n if (outline) {\n this.safeRemoveChild(outline);\n }\n };\n /**\n * Removes an element from the DOM.\n *\n * @private\n * @function Highcharts.SVGElement#safeRemoveChild\n *\n * @param {Highcharts.SVGDOMElement|Highcharts.HTMLDOMElement} element\n * The DOM node to remove.\n */\n SVGElement.prototype.safeRemoveChild = function (element) {\n var parentNode = element.parentNode;\n if (parentNode) {\n parentNode.removeChild(element);\n }\n };\n /**\n * Set the coordinates needed to draw a consistent radial gradient across\n * a shape regardless of positioning inside the chart. Used on pie slices\n * to make all the slices have the same radial reference point.\n *\n * @function Highcharts.SVGElement#setRadialReference\n *\n * @param {Array<number>} coordinates\n * The center reference. The format is `[centerX, centerY, diameter]` in\n * pixels.\n *\n * @return {Highcharts.SVGElement}\n * Returns the SVGElement for chaining.\n */\n SVGElement.prototype.setRadialReference = function (coordinates) {\n var existingGradient = (this.element.gradient &&\n this.renderer.gradients[this.element.gradient]);\n this.element.radialReference = coordinates;\n // On redrawing objects with an existing gradient, the gradient needs\n // to be repositioned (#3801)\n if (existingGradient && existingGradient.radAttr) {\n existingGradient.animate(this.renderer.getRadialAttr(coordinates, existingGradient.radAttr));\n }\n return this;\n };\n /**\n * Add a shadow to the element. In styled mode, this method is not used,\n * instead use `defs` and filters.\n *\n * @example\n * renderer.rect(10, 100, 100, 100)\n * .attr({ fill: 'red' })\n * .shadow(true);\n *\n * @function Highcharts.SVGElement#shadow\n *\n * @param {boolean|Highcharts.ShadowOptionsObject} [shadowOptions] The\n * shadow options. If `true`, the default options are applied. If\n * `false`, the current shadow will be removed.\n *\n * @return {Highcharts.SVGElement} Returns the SVGElement for chaining.\n */\n SVGElement.prototype.shadow = function (shadowOptions) {\n var _a;\n var renderer = this.renderer,\n options = SVGElement_merge(((_a = this.parentGroup) === null || _a === void 0 ? void 0 : _a.rotation) === 90 ? {\n offsetX: -1,\n offsetY: -1\n } : {},\n SVGElement_isObject(shadowOptions) ? shadowOptions : {}),\n id = renderer.shadowDefinition(options);\n return this.attr({\n filter: shadowOptions ?\n \"url(\".concat(renderer.url, \"#\").concat(id, \")\") :\n 'none'\n });\n };\n /**\n * Show the element after it has been hidden.\n *\n * @function Highcharts.SVGElement#show\n *\n * @param {boolean} [inherit=true]\n * Set the visibility attribute to `inherit` rather than `visible`.\n * The difference is that an element with `visibility=\"visible\"`\n * will be visible even if the parent is hidden.\n *\n * @return {Highcharts.SVGElement}\n * Returns the SVGElement for chaining.\n */\n SVGElement.prototype.show = function (inherit) {\n if (inherit === void 0) { inherit = true; }\n return this.attr({ visibility: inherit ? 'inherit' : 'visible' });\n };\n /**\n * Set the stroke-width and record it on the SVGElement\n *\n * @private\n * @function Highcharts.SVGElement#strokeSetter\n * @param {number|string|ColorType} value\n * @param {string} key\n * @param {Highcharts.SVGDOMElement} element\n */\n SVGElement.prototype['stroke-widthSetter'] = function (value, key, element) {\n // Record it for quick access in getter\n this[key] = value;\n element.setAttribute(key, value);\n };\n /**\n * Get the computed stroke width in pixel values. This is used extensively\n * when drawing shapes to ensure the shapes are rendered crisp and\n * positioned correctly relative to each other. Using\n * `shape-rendering: crispEdges` leaves us less control over positioning,\n * for example when we want to stack columns next to each other, or position\n * things pixel-perfectly within the plot box.\n *\n * The common pattern when placing a shape is:\n * - Create the SVGElement and add it to the DOM. In styled mode, it will\n * now receive a stroke width from the style sheet. In classic mode we\n * will add the `stroke-width` attribute.\n * - Read the computed `elem.strokeWidth()`.\n * - Place it based on the stroke width.\n *\n * @function Highcharts.SVGElement#strokeWidth\n *\n * @return {number}\n * The stroke width in pixels. Even if the given stroke width (in CSS or by\n * attributes) is based on `em` or other units, the pixel size is returned.\n */\n SVGElement.prototype.strokeWidth = function () {\n // In non-styled mode, read the stroke width as set by .attr\n if (!this.renderer.styledMode) {\n return this['stroke-width'] || 0;\n }\n // In styled mode, read computed stroke width\n var val = this.getStyle('stroke-width');\n var ret = 0,\n tempElement;\n // Read pixel values directly\n if (/px$/.test(val)) {\n ret = SVGElement_pInt(val);\n // Other values like em, pt etc need to be measured\n }\n else if (val !== '') {\n tempElement = SVGElement_doc.createElementNS(SVGElement_SVG_NS, 'rect');\n SVGElement_attr(tempElement, {\n width: val,\n 'stroke-width': 0\n });\n this.element.parentNode.appendChild(tempElement);\n ret = tempElement.getBBox().width;\n tempElement.parentNode.removeChild(tempElement);\n }\n return ret;\n };\n /**\n * If one of the symbol size affecting parameters are changed,\n * check all the others only once for each call to an element's\n * .attr() method\n *\n * @private\n * @function Highcharts.SVGElement#symbolAttr\n *\n * @param {Highcharts.SVGAttributes} hash\n * The attributes to set.\n */\n SVGElement.prototype.symbolAttr = function (hash) {\n var wrapper = this;\n SVGElement.symbolCustomAttribs.forEach(function (key) {\n wrapper[key] = SVGElement_pick(hash[key], wrapper[key]);\n });\n wrapper.attr({\n d: wrapper.renderer.symbols[wrapper.symbolName](wrapper.x, wrapper.y, wrapper.width, wrapper.height, wrapper)\n });\n };\n /**\n * @private\n * @function Highcharts.SVGElement#textSetter\n * @param {string} value\n */\n SVGElement.prototype.textSetter = function (value) {\n if (value !== this.textStr) {\n // Delete size caches when the text changes\n // delete this.bBox; // old code in series-label\n delete this.textPxLength;\n this.textStr = value;\n if (this.added) {\n this.renderer.buildText(this);\n }\n this.reAlign();\n }\n };\n /**\n * @private\n * @function Highcharts.SVGElement#titleSetter\n * @param {string} value\n */\n SVGElement.prototype.titleSetter = function (value) {\n var el = this.element;\n var titleNode = el.getElementsByTagName('title')[0] ||\n SVGElement_doc.createElementNS(this.SVG_NS, 'title');\n // Move to first child\n if (el.insertBefore) {\n el.insertBefore(titleNode, el.firstChild);\n }\n else {\n el.appendChild(titleNode);\n }\n // Replace text content and escape markup\n titleNode.textContent = SVGElement_replaceNested(// Scan #[73]\n SVGElement_pick(value, ''), // #3276, #3895\n [/<[^>]*>/g, '']).replace(/</g, '<').replace(/>/g, '>');\n };\n /**\n * Bring the element to the front. Alternatively, a new zIndex can be set.\n *\n * @sample highcharts/members/element-tofront/\n * Click an element to bring it to front\n *\n * @function Highcharts.SVGElement#toFront\n *\n * @return {Highcharts.SVGElement}\n * Returns the SVGElement for chaining.\n */\n SVGElement.prototype.toFront = function () {\n var element = this.element;\n element.parentNode.appendChild(element);\n return this;\n };\n /**\n * Move an object and its children by x and y values.\n *\n * @function Highcharts.SVGElement#translate\n *\n * @param {number} x\n * The x value.\n *\n * @param {number} y\n * The y value.\n *\n * @return {Highcharts.SVGElement}\n * Translated element.\n */\n SVGElement.prototype.translate = function (x, y) {\n return this.attr({\n translateX: x,\n translateY: y\n });\n };\n /**\n * Update the transform attribute based on internal properties. Deals with\n * the custom `translateX`, `translateY`, `rotation`, `scaleX` and `scaleY`\n * attributes and updates the SVG `transform` attribute.\n *\n * @private\n * @function Highcharts.SVGElement#updateTransform\n */\n SVGElement.prototype.updateTransform = function (attrib) {\n var _a;\n if (attrib === void 0) { attrib = 'transform'; }\n var _b = this,\n element = _b.element,\n matrix = _b.matrix,\n _c = _b.rotation,\n rotation = _c === void 0 ? 0 : _c,\n rotationOriginX = _b.rotationOriginX,\n rotationOriginY = _b.rotationOriginY,\n scaleX = _b.scaleX,\n scaleY = _b.scaleY,\n _d = _b.translateX,\n translateX = _d === void 0 ? 0 : _d,\n _e = _b.translateY,\n translateY = _e === void 0 ? 0 : _e;\n // Apply translate. Nearly all transformed elements have translation,\n // so instead of checking for translate = 0, do it always (#1767,\n // #1846).\n var transform = ['translate(' + translateX + ',' + translateY + ')'];\n // Apply matrix\n if (SVGElement_defined(matrix)) {\n transform.push('matrix(' + matrix.join(',') + ')');\n }\n // Apply rotation\n if (rotation) {\n transform.push('rotate(' + rotation + ' ' +\n SVGElement_pick(rotationOriginX, element.getAttribute('x'), 0) +\n ' ' +\n SVGElement_pick(rotationOriginY, element.getAttribute('y') || 0) + ')');\n // HTML labels rotation (#20685)\n if (((_a = this.text) === null || _a === void 0 ? void 0 : _a.element.tagName) === 'SPAN') {\n this.text.attr({\n rotation: rotation,\n rotationOriginX: (rotationOriginX || 0) - this.padding,\n rotationOriginY: (rotationOriginY || 0) - this.padding\n });\n }\n }\n // Apply scale\n if (SVGElement_defined(scaleX) || SVGElement_defined(scaleY)) {\n transform.push('scale(' + SVGElement_pick(scaleX, 1) + ' ' + SVGElement_pick(scaleY, 1) + ')');\n }\n if (transform.length && !(this.text || this).textPath) {\n element.setAttribute(attrib, transform.join(' '));\n }\n };\n /**\n * @private\n * @function Highcharts.SVGElement#visibilitySetter\n *\n * @param {string} value\n *\n * @param {string} key\n *\n * @param {Highcharts.SVGDOMElement} element\n *\n */\n SVGElement.prototype.visibilitySetter = function (value, key, element) {\n // IE9-11 doesn't handle visibility:inherit well, so we remove the\n // attribute instead (#2881, #3909)\n if (value === 'inherit') {\n element.removeAttribute(key);\n }\n else if (this[key] !== value) { // #6747\n element.setAttribute(key, value);\n }\n this[key] = value;\n };\n /**\n * @private\n * @function Highcharts.SVGElement#xGetter\n */\n SVGElement.prototype.xGetter = function (key) {\n if (this.element.nodeName === 'circle') {\n if (key === 'x') {\n key = 'cx';\n }\n else if (key === 'y') {\n key = 'cy';\n }\n }\n return this._defaultGetter(key);\n };\n /**\n * @private\n * @function Highcharts.SVGElement#zIndexSetter\n */\n SVGElement.prototype.zIndexSetter = function (value, key) {\n var renderer = this.renderer,\n parentGroup = this.parentGroup,\n parentWrapper = parentGroup || renderer,\n parentNode = parentWrapper.element || renderer.box,\n element = this.element,\n svgParent = parentNode === renderer.box;\n var childNodes,\n otherElement,\n otherZIndex,\n inserted = false,\n undefinedOtherZIndex,\n run = this.added,\n i;\n if (SVGElement_defined(value)) {\n // So we can read it for other elements in the group\n element.setAttribute('data-z-index', value);\n value = +value;\n if (this[key] === value) {\n // Only update when needed (#3865)\n run = false;\n }\n }\n else if (SVGElement_defined(this[key])) {\n element.removeAttribute('data-z-index');\n }\n this[key] = value;\n // Insert according to this and other elements' zIndex. Before .add() is\n // called, nothing is done. Then on add, or by later calls to\n // zIndexSetter, the node is placed on the right place in the DOM.\n if (run) {\n value = this.zIndex;\n if (value && parentGroup) {\n parentGroup.handleZ = true;\n }\n childNodes = parentNode.childNodes;\n for (i = childNodes.length - 1; i >= 0 && !inserted; i--) {\n otherElement = childNodes[i];\n otherZIndex = otherElement.getAttribute('data-z-index');\n undefinedOtherZIndex = !SVGElement_defined(otherZIndex);\n if (otherElement !== element) {\n if (\n // Negative zIndex versus no zIndex:\n // On all levels except the highest. If the parent is\n // <svg>, then we don't want to put items before <desc>\n // or <defs>\n value < 0 &&\n undefinedOtherZIndex &&\n !svgParent &&\n !i) {\n parentNode.insertBefore(element, childNodes[i]);\n inserted = true;\n }\n else if (\n // Insert after the first element with a lower zIndex\n SVGElement_pInt(otherZIndex) <= value ||\n // If negative zIndex, add this before first undefined\n // zIndex element\n (undefinedOtherZIndex &&\n (!SVGElement_defined(value) || value >= 0))) {\n parentNode.insertBefore(element, childNodes[i + 1]);\n inserted = true;\n }\n }\n }\n if (!inserted) {\n parentNode.insertBefore(element, childNodes[svgParent ? 3 : 0]);\n inserted = true;\n }\n }\n return inserted;\n };\n /* *\n *\n * Properties\n *\n * */\n // Custom attributes used for symbols, these should be filtered out when\n // setting SVGElement attributes (#9375).\n SVGElement.symbolCustomAttribs = [\n 'anchorX',\n 'anchorY',\n 'clockwise',\n 'end',\n 'height',\n 'innerR',\n 'r',\n 'start',\n 'width',\n 'x',\n 'y'\n ];\n return SVGElement;\n}());\n// Some shared setters and getters\nSVGElement.prototype.strokeSetter = SVGElement.prototype.fillSetter;\nSVGElement.prototype.yGetter = SVGElement.prototype.xGetter;\nSVGElement.prototype.matrixSetter =\n SVGElement.prototype.rotationOriginXSetter =\n SVGElement.prototype.rotationOriginYSetter =\n SVGElement.prototype.rotationSetter =\n SVGElement.prototype.scaleXSetter =\n SVGElement.prototype.scaleYSetter =\n SVGElement.prototype.translateXSetter =\n SVGElement.prototype.translateYSetter =\n SVGElement.prototype.verticalAlignSetter = function (value, key) {\n this[key] = value;\n this.doTransform = true;\n };\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var SVG_SVGElement = (SVGElement);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Reference to the global SVGElement class as a workaround for a name conflict\n * in the Highcharts namespace.\n *\n * @global\n * @typedef {global.SVGElement} GlobalSVGElement\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SVGElement\n */\n/**\n * The horizontal alignment of an element.\n *\n * @typedef {\"center\"|\"left\"|\"right\"} Highcharts.AlignValue\n */\n/**\n * Options to align the element relative to the chart or another box.\n *\n * @interface Highcharts.AlignObject\n */ /**\n* Horizontal alignment. Can be one of `left`, `center` and `right`.\n*\n* @name Highcharts.AlignObject#align\n* @type {Highcharts.AlignValue|undefined}\n*\n* @default left\n*/ /**\n* Vertical alignment. Can be one of `top`, `middle` and `bottom`.\n*\n* @name Highcharts.AlignObject#verticalAlign\n* @type {Highcharts.VerticalAlignValue|undefined}\n*\n* @default top\n*/ /**\n* Horizontal pixel offset from alignment.\n*\n* @name Highcharts.AlignObject#x\n* @type {number|undefined}\n*\n* @default 0\n*/ /**\n* Vertical pixel offset from alignment.\n*\n* @name Highcharts.AlignObject#y\n* @type {number|undefined}\n*\n* @default 0\n*/ /**\n* Use the `transform` attribute with translateX and translateY custom\n* attributes to align this elements rather than `x` and `y` attributes.\n*\n* @name Highcharts.AlignObject#alignByTranslate\n* @type {boolean|undefined}\n*\n* @default false\n*/\n/**\n * Bounding box of an element.\n *\n * @interface Highcharts.BBoxObject\n * @extends Highcharts.PositionObject\n */ /**\n* Height of the bounding box.\n*\n* @name Highcharts.BBoxObject#height\n* @type {number}\n*/ /**\n* Width of the bounding box.\n*\n* @name Highcharts.BBoxObject#width\n* @type {number}\n*/ /**\n* Horizontal position of the bounding box.\n*\n* @name Highcharts.BBoxObject#x\n* @type {number}\n*/ /**\n* Vertical position of the bounding box.\n*\n* @name Highcharts.BBoxObject#y\n* @type {number}\n*/\n/**\n * An object of key-value pairs for SVG attributes. Attributes in Highcharts\n * elements for the most parts correspond to SVG, but some are specific to\n * Highcharts, like `zIndex`, `rotation`, `rotationOriginX`,\n * `rotationOriginY`, `translateX`, `translateY`, `scaleX` and `scaleY`. SVG\n * attributes containing a hyphen are _not_ camel-cased, they should be\n * quoted to preserve the hyphen.\n *\n * @example\n * {\n * 'stroke': '#ff0000', // basic\n * 'stroke-width': 2, // hyphenated\n * 'rotation': 45 // custom\n * 'd': ['M', 10, 10, 'L', 30, 30, 'z'] // path definition, note format\n * }\n *\n * @interface Highcharts.SVGAttributes\n */ /**\n* @name Highcharts.SVGAttributes#[key:string]\n* @type {*}\n*/ /**\n* @name Highcharts.SVGAttributes#d\n* @type {string|Highcharts.SVGPathArray|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#dx\n* @type {number|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#dy\n* @type {number|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#fill\n* @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#inverted\n* @type {boolean|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#matrix\n* @type {Array<number>|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#rotation\n* @type {number|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#rotationOriginX\n* @type {number|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#rotationOriginY\n* @type {number|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#scaleX\n* @type {number|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#scaleY\n* @type {number|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#stroke\n* @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#style\n* @type {string|Highcharts.CSSObject|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#translateX\n* @type {number|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#translateY\n* @type {number|undefined}\n*/ /**\n* @name Highcharts.SVGAttributes#zIndex\n* @type {number|undefined}\n*/\n/**\n * An SVG DOM element. The type is a reference to the regular SVGElement in the\n * global scope.\n *\n * @typedef {globals.GlobalSVGElement} Highcharts.SVGDOMElement\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/SVGElement\n */\n/**\n * The vertical alignment of an element.\n *\n * @typedef {\"bottom\"|\"middle\"|\"top\"} Highcharts.VerticalAlignValue\n */\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Renderer/SVG/SVGLabel.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d,\n b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d,\n b) { d.__proto__ = b; }) ||\n function (d,\n b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\nvar SVGLabel_defined = Core_Utilities.defined, SVGLabel_extend = Core_Utilities.extend, SVGLabel_getAlignFactor = Core_Utilities.getAlignFactor, SVGLabel_isNumber = Core_Utilities.isNumber, SVGLabel_merge = Core_Utilities.merge, SVGLabel_pick = Core_Utilities.pick, SVGLabel_removeEvent = Core_Utilities.removeEvent;\n/* *\n *\n * Class\n *\n * */\n/**\n * SVG label to render text.\n * @private\n * @class\n * @name Highcharts.SVGLabel\n * @augments Highcharts.SVGElement\n */\nvar SVGLabel = /** @class */ (function (_super) {\n __extends(SVGLabel, _super);\n /* *\n *\n * Constructor\n *\n * */\n function SVGLabel(renderer, str, x, y, shape, anchorX, anchorY, useHTML, baseline, className) {\n var _this = _super.call(this,\n renderer, 'g') || this;\n _this.paddingLeftSetter = _this.paddingSetter;\n _this.paddingRightSetter = _this.paddingSetter;\n _this.doUpdate = false;\n _this.textStr = str;\n _this.x = x;\n _this.y = y;\n _this.anchorX = anchorX;\n _this.anchorY = anchorY;\n _this.baseline = baseline;\n _this.className = className;\n _this.addClass(className === 'button' ?\n 'highcharts-no-tooltip' :\n 'highcharts-label');\n if (className) {\n _this.addClass('highcharts-' + className);\n }\n // Create the text element. An undefined text content prevents redundant\n // box calculation (#16121)\n _this.text = renderer.text(void 0, 0, 0, useHTML).attr({ zIndex: 1 });\n // Validate the shape argument\n var hasBGImage;\n if (typeof shape === 'string') {\n hasBGImage = /^url\\((.*?)\\)$/.test(shape);\n if (hasBGImage || _this.renderer.symbols[shape]) {\n _this.symbolKey = shape;\n }\n }\n _this.bBox = SVGLabel.emptyBBox;\n _this.padding = 3;\n _this.baselineOffset = 0;\n _this.needsBox = renderer.styledMode || hasBGImage;\n _this.deferredAttr = {};\n _this.alignFactor = 0;\n return _this;\n }\n /* *\n *\n * Functions\n *\n * */\n SVGLabel.prototype.alignSetter = function (value) {\n var alignFactor = SVGLabel_getAlignFactor(value);\n this.textAlign = value;\n if (alignFactor !== this.alignFactor) {\n this.alignFactor = alignFactor;\n // Bounding box exists, means we're dynamically changing\n if (this.bBox && SVGLabel_isNumber(this.xSetting)) {\n this.attr({ x: this.xSetting }); // #5134\n }\n }\n };\n SVGLabel.prototype.anchorXSetter = function (value, key) {\n this.anchorX = value;\n this.boxAttr(key, Math.round(value) - this.getCrispAdjust() - this.xSetting);\n };\n SVGLabel.prototype.anchorYSetter = function (value, key) {\n this.anchorY = value;\n this.boxAttr(key, value - this.ySetting);\n };\n /*\n * Set a box attribute, or defer it if the box is not yet created\n */\n SVGLabel.prototype.boxAttr = function (key, value) {\n if (this.box) {\n this.box.attr(key, value);\n }\n else {\n this.deferredAttr[key] = value;\n }\n };\n /*\n * Pick up some properties and apply them to the text instead of the\n * wrapper.\n */\n SVGLabel.prototype.css = function (styles) {\n if (styles) {\n var textStyles_1 = {};\n // Create a copy to avoid altering the original object\n // (#537)\n styles = SVGLabel_merge(styles);\n SVGLabel.textProps.forEach(function (prop) {\n if (typeof styles[prop] !== 'undefined') {\n textStyles_1[prop] = styles[prop];\n delete styles[prop];\n }\n });\n this.text.css(textStyles_1);\n // Update existing text, box (#9400, #12163, #18212)\n if ('fontSize' in textStyles_1 || 'fontWeight' in textStyles_1) {\n this.updateTextPadding();\n }\n else if ('width' in textStyles_1 || 'textOverflow' in textStyles_1) {\n this.updateBoxSize();\n }\n }\n return SVG_SVGElement.prototype.css.call(this, styles);\n };\n /*\n * Destroy and release memory.\n */\n SVGLabel.prototype.destroy = function () {\n // Added by button implementation\n SVGLabel_removeEvent(this.element, 'mouseenter');\n SVGLabel_removeEvent(this.element, 'mouseleave');\n if (this.text) {\n this.text.destroy();\n }\n if (this.box) {\n this.box = this.box.destroy();\n }\n // Call base implementation to destroy the rest\n SVG_SVGElement.prototype.destroy.call(this);\n return void 0;\n };\n SVGLabel.prototype.fillSetter = function (value, key) {\n if (value) {\n this.needsBox = true;\n }\n // For animation getter (#6776)\n this.fill = value;\n this.boxAttr(key, value);\n };\n /*\n * Return the bounding box of the box, not the group.\n */\n SVGLabel.prototype.getBBox = function (reload, rot) {\n // If we have a text string and the DOM bBox was 0, it typically means\n // that the label was first rendered hidden, so we need to update the\n // bBox (#15246)\n if (this.textStr && this.bBox.width === 0 && this.bBox.height === 0) {\n this.updateBoxSize();\n }\n var _a = this,\n padding = _a.padding,\n _b = _a.height,\n height = _b === void 0 ? 0 : _b,\n _c = _a.translateX,\n translateX = _c === void 0 ? 0 : _c,\n _d = _a.translateY,\n translateY = _d === void 0 ? 0 : _d,\n _e = _a.width,\n width = _e === void 0 ? 0 : _e,\n paddingLeft = SVGLabel_pick(this.paddingLeft,\n padding),\n rotation = rot !== null && rot !== void 0 ? rot : (this.rotation || 0);\n var bBox = {\n width: width,\n height: height,\n x: translateX + this.bBox.x - paddingLeft,\n y: translateY + this.bBox.y - padding + this.baselineOffset\n };\n if (rotation) {\n bBox = this.getRotatedBox(bBox, rotation);\n }\n return bBox;\n };\n SVGLabel.prototype.getCrispAdjust = function () {\n return (this.renderer.styledMode && this.box ?\n this.box.strokeWidth() :\n (this['stroke-width'] ?\n parseInt(this['stroke-width'], 10) :\n 0)) % 2 / 2;\n };\n SVGLabel.prototype.heightSetter = function (value) {\n this.heightSetting = value;\n this.doUpdate = true;\n };\n /**\n * This method is executed in the end of `attr()`, after setting all\n * attributes in the hash. In can be used to efficiently consolidate\n * multiple attributes in one SVG property -- e.g., translate, rotate and\n * scale are merged in one \"transform\" attribute in the SVG node.\n * Also updating height or width should trigger update of the box size.\n *\n * @private\n * @function Highcharts.SVGLabel#afterSetters\n */\n SVGLabel.prototype.afterSetters = function () {\n _super.prototype.afterSetters.call(this);\n if (this.doUpdate) {\n this.updateBoxSize();\n this.doUpdate = false;\n }\n };\n /*\n * After the text element is added, get the desired size of the border\n * box and add it before the text in the DOM.\n */\n SVGLabel.prototype.onAdd = function () {\n this.text.add(this);\n this.attr({\n // Alignment is available now (#3295, 0 not rendered if given\n // as a value)\n text: SVGLabel_pick(this.textStr, ''),\n x: this.x || 0,\n y: this.y || 0\n });\n if (this.box && SVGLabel_defined(this.anchorX)) {\n this.attr({\n anchorX: this.anchorX,\n anchorY: this.anchorY\n });\n }\n };\n SVGLabel.prototype.paddingSetter = function (value, key) {\n if (!SVGLabel_isNumber(value)) {\n this[key] = void 0;\n }\n else if (value !== this[key]) {\n this[key] = value;\n this.updateTextPadding();\n }\n };\n SVGLabel.prototype.rSetter = function (value, key) {\n this.boxAttr(key, value);\n };\n SVGLabel.prototype.strokeSetter = function (value, key) {\n // For animation getter (#6776)\n this.stroke = value;\n this.boxAttr(key, value);\n };\n SVGLabel.prototype['stroke-widthSetter'] = function (value, key) {\n if (value) {\n this.needsBox = true;\n }\n this['stroke-width'] = value;\n this.boxAttr(key, value);\n };\n SVGLabel.prototype['text-alignSetter'] = function (value) {\n // The text-align variety is for the pre-animation getter. The code\n // should be unified to either textAlign or text-align.\n this.textAlign = this['text-align'] = value;\n this.updateTextPadding();\n };\n SVGLabel.prototype.textSetter = function (text) {\n if (typeof text !== 'undefined') {\n // Must use .attr to ensure transforms are done (#10009)\n this.text.attr({ text: text });\n }\n this.updateTextPadding();\n this.reAlign();\n };\n /*\n * This function runs after the label is added to the DOM (when the bounding\n * box is available), and after the text of the label is updated to detect\n * the new bounding box and reflect it in the border box.\n */\n SVGLabel.prototype.updateBoxSize = function () {\n var text = this.text,\n attribs = {},\n padding = this.padding, \n // #12165 error when width is null (auto)\n // #12163 when fontweight: bold, recalculate bBox without cache\n // #3295 && 3514 box failure when string equals 0\n bBox = this.bBox = (((!SVGLabel_isNumber(this.widthSetting) ||\n !SVGLabel_isNumber(this.heightSetting) ||\n this.textAlign) && SVGLabel_defined(text.textStr)) ?\n text.getBBox(void 0, 0) :\n SVGLabel.emptyBBox);\n var crispAdjust;\n this.width = this.getPaddedWidth();\n this.height = (this.heightSetting || bBox.height || 0) + 2 * padding;\n var metrics = this.renderer.fontMetrics(text);\n // Update the label-scoped y offset. Math.min because of inline\n // style (#9400)\n this.baselineOffset = padding + Math.min(\n // When applicable, use the font size of the first line (#15707)\n (this.text.firstLineMetrics || metrics).b, \n // When the height is 0, there is no bBox, so go with the font\n // metrics. Highmaps CSS demos.\n bBox.height || Infinity);\n // #15491: Vertical centering\n if (this.heightSetting) {\n this.baselineOffset += (this.heightSetting - metrics.h) / 2;\n }\n if (this.needsBox && !text.textPath) {\n // Create the border box if it is not already present\n if (!this.box) {\n // Symbol definition exists (#5324)\n var box = this.box = this.symbolKey ?\n this.renderer.symbol(this.symbolKey) :\n this.renderer.rect();\n box.addClass(// Don't use label className for buttons\n (this.className === 'button' ?\n '' : 'highcharts-label-box') +\n (this.className ?\n ' highcharts-' + this.className + '-box' : ''));\n box.add(this);\n }\n crispAdjust = this.getCrispAdjust();\n attribs.x = crispAdjust;\n attribs.y = ((this.baseline ? -this.baselineOffset : 0) + crispAdjust);\n // Apply the box attributes\n attribs.width = Math.round(this.width);\n attribs.height = Math.round(this.height);\n this.box.attr(SVGLabel_extend(attribs, this.deferredAttr));\n this.deferredAttr = {};\n }\n };\n /*\n * This function runs after setting text or padding, but only if padding\n * is changed.\n */\n SVGLabel.prototype.updateTextPadding = function () {\n var _a,\n _b;\n var text = this.text,\n textAlign = text.styles.textAlign || this.textAlign;\n if (!text.textPath) {\n this.updateBoxSize();\n // Determine y based on the baseline\n var textY = this.baseline ? 0 : this.baselineOffset,\n textX = ((_a = this.paddingLeft) !== null && _a !== void 0 ? _a : this.padding) +\n // Compensate for alignment\n SVGLabel_getAlignFactor(textAlign) * ((_b = this.widthSetting) !== null && _b !== void 0 ? _b : this.bBox.width);\n // Update if anything changed\n if (textX !== text.x || textY !== text.y) {\n text.attr({\n align: textAlign,\n x: textX\n });\n if (typeof textY !== 'undefined') {\n text.attr('y', textY);\n }\n }\n // Record current values\n text.x = textX;\n text.y = textY;\n }\n };\n SVGLabel.prototype.widthSetter = function (value) {\n // `width:auto` => null\n this.widthSetting = SVGLabel_isNumber(value) ? value : void 0;\n this.doUpdate = true;\n };\n SVGLabel.prototype.getPaddedWidth = function () {\n var padding = this.padding;\n var paddingLeft = SVGLabel_pick(this.paddingLeft,\n padding);\n var paddingRight = SVGLabel_pick(this.paddingRight,\n padding);\n return ((this.widthSetting || this.bBox.width || 0) +\n paddingLeft +\n paddingRight);\n };\n SVGLabel.prototype.xSetter = function (value) {\n this.x = value; // For animation getter\n if (this.alignFactor) {\n value -= this.alignFactor * this.getPaddedWidth();\n // Force animation even when setting to the same value (#7898)\n this['forceAnimate:x'] = true;\n }\n this.xSetting = Math.round(value);\n this.attr('translateX', this.xSetting);\n };\n SVGLabel.prototype.ySetter = function (value) {\n this.ySetting = this.y = Math.round(value);\n this.attr('translateY', this.ySetting);\n };\n /* *\n *\n * Static Properties\n *\n * */\n SVGLabel.emptyBBox = {\n width: 0,\n height: 0,\n x: 0,\n y: 0\n };\n /**\n * For labels, these CSS properties are applied to the `text` node directly.\n *\n * @private\n * @name Highcharts.SVGLabel#textProps\n * @type {Array<string>}\n */\n SVGLabel.textProps = [\n 'color', 'direction', 'fontFamily', 'fontSize', 'fontStyle',\n 'fontWeight', 'lineClamp', 'lineHeight', 'textAlign', 'textDecoration',\n 'textOutline', 'textOverflow', 'whiteSpace', 'width'\n ];\n return SVGLabel;\n}(SVG_SVGElement));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var SVG_SVGLabel = (SVGLabel);\n\n;// ./code/es5/es-modules/Core/Renderer/SVG/Symbols.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar Symbols_defined = Core_Utilities.defined, Symbols_isNumber = Core_Utilities.isNumber, Symbols_pick = Core_Utilities.pick;\n/* *\n *\n * Functions\n *\n * */\n/* eslint-disable require-jsdoc, valid-jsdoc */\n/**\n *\n */\nfunction arc(cx, cy, w, h, options) {\n var arc = [];\n if (options) {\n var start = options.start || 0,\n rx = Symbols_pick(options.r,\n w),\n ry = Symbols_pick(options.r,\n h || w), \n // Subtract a small number to prevent cos and sin of start and end\n // from becoming equal on 360 arcs (#1561). The size of the circle\n // affects the constant, therefore the division by `rx`. If the\n // proximity is too small, the arc disappears. If it is too great, a\n // gap appears. This can be seen in the animation of the official\n // bubble demo (#20586).\n proximity = 0.0002 / (options.borderRadius ? 1 : Math.max(rx, 1)),\n fullCircle = (Math.abs((options.end || 0) - start - 2 * Math.PI) <\n proximity),\n end = (options.end || 0) - (fullCircle ? proximity : 0),\n innerRadius = options.innerR,\n open_1 = Symbols_pick(options.open,\n fullCircle),\n cosStart = Math.cos(start),\n sinStart = Math.sin(start),\n cosEnd = Math.cos(end),\n sinEnd = Math.sin(end), \n // Proximity takes care of rounding errors around PI (#6971)\n longArc = Symbols_pick(options.longArc,\n end - start - Math.PI < proximity ? 0 : 1);\n var arcSegment = [\n 'A', // ArcTo\n rx, // X radius\n ry, // Y radius\n 0, // Slanting\n longArc, // Long or short arc\n Symbols_pick(options.clockwise, 1), // Clockwise\n cx + rx * cosEnd,\n cy + ry * sinEnd\n ];\n arcSegment.params = { start: start, end: end, cx: cx, cy: cy }; // Memo for border radius\n arc.push([\n 'M',\n cx + rx * cosStart,\n cy + ry * sinStart\n ], arcSegment);\n if (Symbols_defined(innerRadius)) {\n arcSegment = [\n 'A', // ArcTo\n innerRadius, // X radius\n innerRadius, // Y radius\n 0, // Slanting\n longArc, // Long or short arc\n // Clockwise - opposite to the outer arc clockwise\n Symbols_defined(options.clockwise) ? 1 - options.clockwise : 0,\n cx + innerRadius * cosStart,\n cy + innerRadius * sinStart\n ];\n // Memo for border radius\n arcSegment.params = {\n start: end,\n end: start,\n cx: cx,\n cy: cy\n };\n arc.push(open_1 ?\n [\n 'M',\n cx + innerRadius * cosEnd,\n cy + innerRadius * sinEnd\n ] : [\n 'L',\n cx + innerRadius * cosEnd,\n cy + innerRadius * sinEnd\n ], arcSegment);\n }\n if (!open_1) {\n arc.push(['Z']);\n }\n }\n return arc;\n}\n/**\n * Callout shape used for default tooltips.\n */\nfunction callout(x, y, w, h, options) {\n var arrowLength = 6,\n halfDistance = 6,\n r = Math.min((options && options.r) || 0,\n w,\n h),\n safeDistance = r + halfDistance,\n anchorX = options && options.anchorX,\n anchorY = options && options.anchorY || 0;\n var path = roundedRect(x,\n y,\n w,\n h, { r: r });\n if (!Symbols_isNumber(anchorX)) {\n return path;\n }\n // Do not render a connector, if anchor starts inside the label\n if (anchorX < w && anchorX > 0 && anchorY < h && anchorY > 0) {\n return path;\n }\n // Anchor on right side\n if (x + anchorX > w - safeDistance) {\n // Chevron\n if (anchorY > y + safeDistance &&\n anchorY < y + h - safeDistance) {\n path.splice(3, 1, ['L', x + w, anchorY - halfDistance], ['L', x + w + arrowLength, anchorY], ['L', x + w, anchorY + halfDistance], ['L', x + w, y + h - r]);\n // Simple connector\n }\n else {\n if (anchorX < w) { // Corner connector\n var isTopCorner = anchorY < y + safeDistance,\n cornerY = isTopCorner ? y : y + h,\n sliceStart = isTopCorner ? 2 : 5;\n path.splice(sliceStart, 0, ['L', anchorX, anchorY], ['L', x + w - r, cornerY]);\n }\n else { // Side connector\n path.splice(3, 1, ['L', x + w, h / 2], ['L', anchorX, anchorY], ['L', x + w, h / 2], ['L', x + w, y + h - r]);\n }\n }\n // Anchor on left side\n }\n else if (x + anchorX < safeDistance) {\n // Chevron\n if (anchorY > y + safeDistance &&\n anchorY < y + h - safeDistance) {\n path.splice(7, 1, ['L', x, anchorY + halfDistance], ['L', x - arrowLength, anchorY], ['L', x, anchorY - halfDistance], ['L', x, y + r]);\n // Simple connector\n }\n else {\n if (anchorX > 0) { // Corner connector\n var isTopCorner = anchorY < y + safeDistance,\n cornerY = isTopCorner ? y : y + h,\n sliceStart = isTopCorner ? 1 : 6;\n path.splice(sliceStart, 0, ['L', anchorX, anchorY], ['L', x + r, cornerY]);\n }\n else { // Side connector\n path.splice(7, 1, ['L', x, h / 2], ['L', anchorX, anchorY], ['L', x, h / 2], ['L', x, y + r]);\n }\n }\n }\n else if ( // Replace bottom\n anchorY > h &&\n anchorX < w - safeDistance) {\n path.splice(5, 1, ['L', anchorX + halfDistance, y + h], ['L', anchorX, y + h + arrowLength], ['L', anchorX - halfDistance, y + h], ['L', x + r, y + h]);\n }\n else if ( // Replace top\n anchorY < 0 &&\n anchorX > safeDistance) {\n path.splice(1, 1, ['L', anchorX - halfDistance, y], ['L', anchorX, y - arrowLength], ['L', anchorX + halfDistance, y], ['L', w - r, y]);\n }\n return path;\n}\n/**\n *\n */\nfunction circle(x, y, w, h) {\n // Return a full arc\n return arc(x + w / 2, y + h / 2, w / 2, h / 2, {\n start: Math.PI * 0.5,\n end: Math.PI * 2.5,\n open: false\n });\n}\n/**\n *\n */\nfunction diamond(x, y, w, h) {\n return [\n ['M', x + w / 2, y],\n ['L', x + w, y + h / 2],\n ['L', x + w / 2, y + h],\n ['L', x, y + h / 2],\n ['Z']\n ];\n}\n// #15291\n/**\n *\n */\nfunction rect(x, y, w, h, options) {\n if (options && options.r) {\n return roundedRect(x, y, w, h, options);\n }\n return [\n ['M', x, y],\n ['L', x + w, y],\n ['L', x + w, y + h],\n ['L', x, y + h],\n ['Z']\n ];\n}\n/**\n *\n */\nfunction roundedRect(x, y, w, h, options) {\n var r = (options === null || options === void 0 ? void 0 : options.r) || 0;\n return [\n ['M', x + r, y],\n ['L', x + w - r, y], // Top side\n ['A', r, r, 0, 0, 1, x + w, y + r], // Top-right corner\n ['L', x + w, y + h - r], // Right side\n ['A', r, r, 0, 0, 1, x + w - r, y + h], // Bottom-right corner\n ['L', x + r, y + h], // Bottom side\n ['A', r, r, 0, 0, 1, x, y + h - r], // Bottom-left corner\n ['L', x, y + r], // Left side\n ['A', r, r, 0, 0, 1, x + r, y],\n ['Z'] // Top-left corner\n ];\n}\n/**\n *\n */\nfunction triangle(x, y, w, h) {\n return [\n ['M', x + w / 2, y],\n ['L', x + w, y + h],\n ['L', x, y + h],\n ['Z']\n ];\n}\n/**\n *\n */\nfunction triangleDown(x, y, w, h) {\n return [\n ['M', x, y],\n ['L', x + w, y],\n ['L', x + w / 2, y + h],\n ['Z']\n ];\n}\nvar Symbols = {\n arc: arc,\n callout: callout,\n circle: circle,\n diamond: diamond,\n rect: rect,\n roundedRect: roundedRect,\n square: rect,\n triangle: triangle,\n 'triangle-down': triangleDown\n};\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var SVG_Symbols = (Symbols);\n\n;// ./code/es5/es-modules/Core/Renderer/SVG/TextBuilder.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar TextBuilder_doc = Core_Globals.doc, TextBuilder_SVG_NS = Core_Globals.SVG_NS, TextBuilder_win = Core_Globals.win;\n\nvar TextBuilder_attr = Core_Utilities.attr, TextBuilder_extend = Core_Utilities.extend, TextBuilder_fireEvent = Core_Utilities.fireEvent, TextBuilder_isString = Core_Utilities.isString, TextBuilder_objectEach = Core_Utilities.objectEach, TextBuilder_pick = Core_Utilities.pick;\n// Function used to test string length including an ellipsis\nvar stringWithEllipsis = function (text, currentIndex) {\n return text.substring(0, currentIndex) + '\\u2026';\n};\n/* *\n *\n * Class\n *\n * */\n/**\n * SVG Text Builder\n * @private\n * @class\n * @name Highcharts.TextBuilder\n */\nvar TextBuilder = /** @class */ (function () {\n function TextBuilder(svgElement) {\n var textStyles = svgElement.styles;\n this.renderer = svgElement.renderer;\n this.svgElement = svgElement;\n this.width = svgElement.textWidth;\n this.textLineHeight = textStyles && textStyles.lineHeight;\n this.textOutline = textStyles && textStyles.textOutline;\n this.ellipsis = Boolean(textStyles && textStyles.textOverflow === 'ellipsis');\n this.lineClamp = textStyles === null || textStyles === void 0 ? void 0 : textStyles.lineClamp;\n this.noWrap = Boolean(textStyles && textStyles.whiteSpace === 'nowrap');\n }\n /**\n * Build an SVG representation of the pseudo HTML given in the object's\n * svgElement.\n *\n * @private\n *\n * @return {void}.\n */\n TextBuilder.prototype.buildSVG = function () {\n var wrapper = this.svgElement, textNode = wrapper.element, renderer = wrapper.renderer, textStr = TextBuilder_pick(wrapper.textStr, '').toString(), hasMarkup = textStr.indexOf('<') !== -1, childNodes = textNode.childNodes, tempParent = !wrapper.added && renderer.box, regexMatchBreaks = /<br.*?>/g, \n // The buildText code is quite heavy, so if we're not changing\n // something that affects the text, skip it (#6113).\n textCache = [\n textStr,\n this.ellipsis,\n this.noWrap,\n this.textLineHeight,\n this.textOutline,\n wrapper.getStyle('font-size'),\n wrapper.styles.lineClamp,\n this.width\n ].join(',');\n if (textCache === wrapper.textCache) {\n return;\n }\n wrapper.textCache = textCache;\n delete wrapper.actualWidth;\n // Remove old text\n for (var i = childNodes.length; i--;) {\n textNode.removeChild(childNodes[i]);\n }\n // Simple strings, add text directly and return\n if (!hasMarkup &&\n !this.ellipsis &&\n !this.width &&\n !wrapper.textPath &&\n (textStr.indexOf(' ') === -1 ||\n (this.noWrap && !regexMatchBreaks.test(textStr)))) {\n textNode.appendChild(TextBuilder_doc.createTextNode(this.unescapeEntities(textStr)));\n // Complex strings, add more logic\n }\n else if (textStr !== '') {\n if (tempParent) {\n // Attach it to the DOM to read offset width and font size\n tempParent.appendChild(textNode);\n }\n // Step 1. Parse the markup safely and directly into a tree\n // structure.\n var ast = new HTML_AST(textStr);\n // Step 2. Do as many as we can of the modifications to the tree\n // structure before it is added to the DOM\n this.modifyTree(ast.nodes);\n ast.addToDOM(textNode);\n // Step 3. Some modifications can't be done until the structure is\n // in the DOM, because we need to read computed metrics.\n this.modifyDOM();\n // Add title if an ellipsis was added\n if (this.ellipsis &&\n (textNode.textContent || '').indexOf('\\u2026') !== -1) {\n wrapper.attr('title', this.unescapeEntities(wrapper.textStr || '', ['<', '>']) // #7179\n );\n }\n if (tempParent) {\n tempParent.removeChild(textNode);\n }\n }\n // Apply the text outline\n if (TextBuilder_isString(this.textOutline) && wrapper.applyTextOutline) {\n wrapper.applyTextOutline(this.textOutline);\n }\n };\n /**\n * Modify the DOM of the generated SVG structure. This function only does\n * operations that cannot be done until the elements are attached to the\n * DOM, like doing layout based on rendered metrics of the added elements.\n *\n * @private\n *\n */\n TextBuilder.prototype.modifyDOM = function () {\n var _this = this;\n var wrapper = this.svgElement;\n var x = TextBuilder_attr(wrapper.element, 'x');\n wrapper.firstLineMetrics = void 0;\n // Remove empty tspans (including breaks) from the beginning because\n // SVG's getBBox doesn't count empty lines. The use case is tooltip\n // where the header is empty. By doing this in the DOM rather than in\n // the AST, we can inspect the textContent directly and don't have to\n // recurse down to look for valid content.\n var firstChild;\n while ((firstChild = wrapper.element.firstChild)) {\n if (/^[\\s\\u200B]*$/.test(firstChild.textContent || ' ')) {\n wrapper.element.removeChild(firstChild);\n }\n else {\n break;\n }\n }\n // Modify hard line breaks by applying the rendered line height\n [].forEach.call(wrapper.element.querySelectorAll('tspan.highcharts-br'), function (br, i) {\n if (br.nextSibling && br.previousSibling) { // #5261\n if (i === 0 && br.previousSibling.nodeType === 1) {\n wrapper.firstLineMetrics = wrapper.renderer\n .fontMetrics(br.previousSibling);\n }\n TextBuilder_attr(br, {\n // Since the break is inserted in front of the next\n // line, we need to use the next sibling for the line\n // height\n dy: _this.getLineHeight(br.nextSibling),\n x: x\n });\n }\n });\n // Constrain the line width, either by ellipsis or wrapping\n var width = this.width || 0;\n if (!width) {\n return;\n }\n // Insert soft line breaks into each text node\n var modifyTextNode = function (textNode,\n parentElement) {\n var _a;\n var text = textNode.textContent || '';\n var words = text\n .replace(/([^\\^])-/g, '$1- ') // Split on hyphens\n // .trim()\n .split(' '); // #1273\n var hasWhiteSpace = !_this.noWrap && (words.length > 1 || wrapper.element.childNodes.length > 1);\n var dy = _this.getLineHeight(parentElement),\n ellipsisWidth = Math.max(0, \n // Subtract the font face to make room for\n // the ellipsis itself\n width - 0.8 * dy);\n var lineNo = 0;\n var startAt = wrapper.actualWidth;\n if (hasWhiteSpace) {\n var lines = [];\n // Remove preceding siblings in order to make the text length\n // calculation correct in the truncate function\n var precedingSiblings = [];\n while (parentElement.firstChild &&\n parentElement.firstChild !== textNode) {\n precedingSiblings.push(parentElement.firstChild);\n parentElement.removeChild(parentElement.firstChild);\n }\n while (words.length) {\n // Apply the previous line\n if (words.length && !_this.noWrap && lineNo > 0) {\n lines.push(textNode.textContent || '');\n textNode.textContent = words.join(' ')\n .replace(/- /g, '-');\n }\n // For each line, truncate the remaining\n // words into the line length.\n _this.truncate(textNode, void 0, words, lineNo === 0 ? (startAt || 0) : 0, width, ellipsisWidth, \n // Build the text to test for\n function (t, currentIndex) {\n return words\n .slice(0, currentIndex)\n .join(' ')\n .replace(/- /g, '-');\n });\n startAt = wrapper.actualWidth;\n lineNo++;\n // Line clamp. Break out after n lines and append an\n // ellipsis regardless of the text length.\n if (_this.lineClamp && lineNo >= _this.lineClamp) {\n // Only if there are remaining words that should have\n // been rendered.\n if (words.length) {\n _this.truncate(textNode, textNode.textContent || '', void 0, 0, \n // Target width\n width, ellipsisWidth, stringWithEllipsis);\n textNode.textContent = ((_a = textNode.textContent) === null || _a === void 0 ? void 0 : _a.replace('\\u2026', '')) + '\\u2026';\n }\n break;\n }\n }\n // Reinsert the preceding child nodes\n precedingSiblings.forEach(function (childNode) {\n parentElement.insertBefore(childNode, textNode);\n });\n // Insert the previous lines before the original text node\n lines.forEach(function (line) {\n // Insert the line\n parentElement.insertBefore(TextBuilder_doc.createTextNode(line), textNode);\n // Insert a break\n var br = TextBuilder_doc.createElementNS(TextBuilder_SVG_NS, 'tspan');\n br.textContent = '\\u200B'; // Zero-width space\n TextBuilder_attr(br, { dy: dy, x: x });\n parentElement.insertBefore(br, textNode);\n });\n }\n else if (_this.ellipsis) {\n if (text) {\n _this.truncate(textNode, text, void 0, 0, \n // Target width\n width, ellipsisWidth, stringWithEllipsis);\n }\n }\n };\n // Recurse down the DOM tree and handle line breaks for each text node\n var modifyChildren = (function (node) {\n var childNodes = [].slice.call(node.childNodes);\n childNodes.forEach(function (childNode) {\n if (childNode.nodeType === TextBuilder_win.Node.TEXT_NODE) {\n modifyTextNode(childNode, node);\n }\n else {\n // Reset word-wrap width readings after hard breaks\n if (childNode.className.baseVal\n .indexOf('highcharts-br') !== -1) {\n wrapper.actualWidth = 0;\n }\n // Recurse down to child node\n modifyChildren(childNode);\n }\n });\n });\n modifyChildren(wrapper.element);\n };\n /**\n * Get the rendered line height of a <text>, <tspan> or pure text node.\n * @private\n * @param {DOMElementType|Text} node The node to check for\n * @return {number} The rendered line height\n */\n TextBuilder.prototype.getLineHeight = function (node) {\n // If the node is a text node, use its parent\n var element = (node.nodeType === TextBuilder_win.Node.TEXT_NODE) ?\n node.parentElement :\n node;\n return this.textLineHeight ?\n parseInt(this.textLineHeight.toString(), 10) :\n this.renderer.fontMetrics(element || this.svgElement.element).h;\n };\n /**\n * Transform a pseudo HTML AST node tree into an SVG structure. We do as\n * much heavy lifting as we can here, before doing the final processing in\n * the modifyDOM function. The original data is mutated.\n *\n * @private\n *\n * @param {ASTNode[]} nodes The AST nodes\n *\n */\n TextBuilder.prototype.modifyTree = function (nodes) {\n var _this = this;\n var modifyChild = function (node,\n i) {\n var _a = node.attributes,\n attributes = _a === void 0 ? {} : _a,\n children = node.children,\n _b = node.style,\n style = _b === void 0 ? {} : _b,\n tagName = node.tagName,\n styledMode = _this.renderer.styledMode;\n // Apply styling to text tags\n if (tagName === 'b' || tagName === 'strong') {\n if (styledMode) {\n // eslint-disable-next-line dot-notation\n attributes['class'] = 'highcharts-strong';\n }\n else {\n style.fontWeight = 'bold';\n }\n }\n else if (tagName === 'i' || tagName === 'em') {\n if (styledMode) {\n // eslint-disable-next-line dot-notation\n attributes['class'] = 'highcharts-emphasized';\n }\n else {\n style.fontStyle = 'italic';\n }\n }\n // Modify styling\n if (style && style.color) {\n style.fill = style.color;\n }\n // Handle breaks\n if (tagName === 'br') {\n attributes['class'] = 'highcharts-br'; // eslint-disable-line dot-notation\n node.textContent = '\\u200B'; // Zero-width space\n // Trim whitespace off the beginning of new lines\n var nextNode = nodes[i + 1];\n if (nextNode && nextNode.textContent) {\n nextNode.textContent =\n nextNode.textContent.replace(/^ +/gm, '');\n }\n // If an anchor has direct text node children, the text is unable to\n // wrap because there is no `getSubStringLength` function on the\n // element. Therefore we need to wrap the child text node or nodes\n // in a tspan. #16173.\n }\n else if (tagName === 'a' &&\n children &&\n children.some(function (child) { return child.tagName === '#text'; })) {\n node.children = [{ children: children, tagName: 'tspan' }];\n }\n if (tagName !== '#text' && tagName !== 'a') {\n node.tagName = 'tspan';\n }\n TextBuilder_extend(node, { attributes: attributes, style: style });\n // Recurse\n if (children) {\n children\n .filter(function (c) { return c.tagName !== '#text'; })\n .forEach(modifyChild);\n }\n };\n nodes.forEach(modifyChild);\n TextBuilder_fireEvent(this.svgElement, 'afterModifyTree', { nodes: nodes });\n };\n /*\n * Truncate the text node contents to a given length. Used when the css\n * width is set. If the `textOverflow` is `ellipsis`, the text is truncated\n * character by character to the given length. If not, the text is\n * word-wrapped line by line.\n */\n TextBuilder.prototype.truncate = function (textNode, text, words, startAt, width, ellipsisWidth, getString) {\n var svgElement = this.svgElement;\n var rotation = svgElement.rotation;\n // Cache the lengths to avoid checking the same twice\n var lengths = [];\n // Word wrap cannot be truncated to shorter than one word, ellipsis\n // text can be completely blank.\n var minIndex = words && !startAt ? 1 : 0;\n var maxIndex = (text || words || '').length;\n var currentIndex = maxIndex;\n var str;\n var actualWidth;\n if (!words) {\n width = ellipsisWidth;\n }\n var getSubStringLength = function (charEnd,\n concatenatedEnd) {\n // `charEnd` is used when finding the character-by-character\n // break for ellipsis, concatenatedEnd is used for word-by-word\n // break for word wrapping.\n var end = concatenatedEnd || charEnd;\n var parentNode = textNode.parentNode;\n if (parentNode && typeof lengths[end] === 'undefined') {\n // Modern browsers\n if (parentNode.getSubStringLength) {\n // Fails with DOM exception on unit-tests/legend/members\n // of unknown reason. Desired width is 0, text content\n // is \"5\" and end is 1.\n try {\n lengths[end] = startAt +\n parentNode.getSubStringLength(0, words ? end + 1 : end);\n }\n catch (e) {\n '';\n }\n }\n }\n return lengths[end];\n };\n svgElement.rotation = 0; // Discard rotation when computing box\n actualWidth = getSubStringLength(textNode.textContent.length);\n if (startAt + actualWidth > width) {\n // Do a binary search for the index where to truncate the text\n while (minIndex <= maxIndex) {\n currentIndex = Math.ceil((minIndex + maxIndex) / 2);\n // When checking words for word-wrap, we need to build the\n // string and measure the subStringLength at the concatenated\n // word length.\n if (words) {\n str = getString(words, currentIndex);\n }\n actualWidth = getSubStringLength(currentIndex, str && str.length - 1);\n if (minIndex === maxIndex) {\n // Complete\n minIndex = maxIndex + 1;\n }\n else if (actualWidth > width) {\n // Too large. Set max index to current.\n maxIndex = currentIndex - 1;\n }\n else {\n // Within width. Set min index to current.\n minIndex = currentIndex;\n }\n }\n // If max index was 0 it means the shortest possible text was also\n // too large. For ellipsis that means only the ellipsis, while for\n // word wrap it means the whole first word.\n if (maxIndex === 0) {\n // Remove ellipsis\n textNode.textContent = '';\n // If the new text length is one less than the original, we don't\n // need the ellipsis\n }\n else if (!(text && maxIndex === text.length - 1)) {\n textNode.textContent = str || getString(text || words, currentIndex);\n }\n // Add ellipsis on individual lines\n if (this.ellipsis && actualWidth > width) {\n this.truncate(textNode, textNode.textContent || '', void 0, 0, width, ellipsisWidth, stringWithEllipsis);\n }\n }\n // When doing line wrapping, prepare for the next line by removing the\n // items from this line.\n if (words) {\n words.splice(0, currentIndex);\n }\n svgElement.actualWidth = actualWidth;\n svgElement.rotation = rotation; // Apply rotation again.\n };\n /*\n * Un-escape HTML entities based on the public `renderer.escapes` list\n *\n * @private\n *\n * @param {string} inputStr The string to unescape\n * @param {Array<string>} [except] Exceptions\n *\n * @return {string} The processed string\n */\n TextBuilder.prototype.unescapeEntities = function (inputStr, except) {\n TextBuilder_objectEach(this.renderer.escapes, function (value, key) {\n if (!except || except.indexOf(value) === -1) {\n inputStr = inputStr.toString().replace(new RegExp(value, 'g'), key);\n }\n });\n return inputStr;\n };\n return TextBuilder;\n}());\n/* harmony default export */ var SVG_TextBuilder = (TextBuilder);\n\n;// ./code/es5/es-modules/Core/Renderer/SVG/SVGRenderer.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar SVGRenderer_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\nvar SVGRenderer_defaultOptions = Defaults.defaultOptions;\n\n\nvar SVGRenderer_charts = Core_Globals.charts, SVGRenderer_deg2rad = Core_Globals.deg2rad, SVGRenderer_doc = Core_Globals.doc, SVGRenderer_isFirefox = Core_Globals.isFirefox, isMS = Core_Globals.isMS, isWebKit = Core_Globals.isWebKit, noop = Core_Globals.noop, SVGRenderer_SVG_NS = Core_Globals.SVG_NS, symbolSizes = Core_Globals.symbolSizes, SVGRenderer_win = Core_Globals.win;\n\n\n\n\n\n\nvar SVGRenderer_addEvent = Core_Utilities.addEvent, SVGRenderer_attr = Core_Utilities.attr, SVGRenderer_createElement = Core_Utilities.createElement, SVGRenderer_crisp = Core_Utilities.crisp, SVGRenderer_css = Core_Utilities.css, SVGRenderer_defined = Core_Utilities.defined, SVGRenderer_destroyObjectProperties = Core_Utilities.destroyObjectProperties, SVGRenderer_extend = Core_Utilities.extend, SVGRenderer_isArray = Core_Utilities.isArray, SVGRenderer_isNumber = Core_Utilities.isNumber, SVGRenderer_isObject = Core_Utilities.isObject, SVGRenderer_isString = Core_Utilities.isString, SVGRenderer_merge = Core_Utilities.merge, SVGRenderer_pick = Core_Utilities.pick, SVGRenderer_pInt = Core_Utilities.pInt, SVGRenderer_replaceNested = Core_Utilities.replaceNested, SVGRenderer_uniqueKey = Core_Utilities.uniqueKey;\n/* *\n *\n * Variables\n *\n * */\nvar hasInternalReferenceBug;\n/* *\n *\n * Class\n *\n * */\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/**\n * Allows direct access to the Highcharts rendering layer in order to draw\n * primitive shapes like circles, rectangles, paths or text directly on a chart,\n * or independent from any chart. The SVGRenderer represents a wrapper object\n * for SVG in modern browsers.\n *\n * An existing chart's renderer can be accessed through {@link Chart.renderer}.\n * The renderer can also be used completely decoupled from a chart.\n *\n * See [How to use the SVG Renderer](\n * https://www.highcharts.com/docs/advanced-chart-features/renderer) for a\n * comprehensive tutorial.\n *\n * @sample highcharts/members/renderer-on-chart\n * Annotating a chart programmatically.\n * @sample highcharts/members/renderer-basic\n * Independent SVG drawing.\n *\n * @example\n * // Use directly without a chart object.\n * let renderer = new Highcharts.Renderer(parentNode, 600, 400);\n *\n * @class\n * @name Highcharts.SVGRenderer\n *\n * @param {Highcharts.HTMLDOMElement} container\n * Where to put the SVG in the web page.\n *\n * @param {number} width\n * The width of the SVG.\n *\n * @param {number} height\n * The height of the SVG.\n *\n * @param {Highcharts.CSSObject} [style]\n * The box style, if not in styleMode\n *\n * @param {boolean} [forExport=false]\n * Whether the rendered content is intended for export.\n *\n * @param {boolean} [allowHTML=true]\n * Whether the renderer is allowed to include HTML text, which will be\n * projected on top of the SVG.\n *\n * @param {boolean} [styledMode=false]\n * Whether the renderer belongs to a chart that is in styled mode.\n * If it does, it will avoid setting presentational attributes in\n * some cases, but not when set explicitly through `.attr` and `.css`\n * etc.\n */\nvar SVGRenderer = /** @class */ (function () {\n /**\n * The root `svg` node of the renderer.\n *\n * @name Highcharts.SVGRenderer#box\n * @type {Highcharts.SVGDOMElement}\n */\n /**\n * The wrapper for the root `svg` node of the renderer.\n *\n * @name Highcharts.SVGRenderer#boxWrapper\n * @type {Highcharts.SVGElement}\n */\n /**\n * A pointer to the `defs` node of the root SVG.\n *\n * @name Highcharts.SVGRenderer#defs\n * @type {Highcharts.SVGElement}\n */\n /**\n * Whether the rendered content is intended for export.\n *\n * @name Highcharts.SVGRenderer#forExport\n * @type {boolean | undefined}\n */\n /**\n * Page url used for internal references.\n *\n * @private\n * @name Highcharts.SVGRenderer#url\n * @type {string}\n */\n /**\n * Initialize the SVGRenderer. Overridable initializer function that takes\n * the same parameters as the constructor.\n *\n * @function Highcharts.SVGRenderer#init\n *\n * @param {Highcharts.HTMLDOMElement} container\n * Where to put the SVG in the web page.\n *\n * @param {number} width\n * The width of the SVG.\n *\n * @param {number} height\n * The height of the SVG.\n *\n * @param {Highcharts.CSSObject} [style]\n * The box style, if not in styleMode\n *\n * @param {boolean} [forExport=false]\n * Whether the rendered content is intended for export.\n *\n * @param {boolean} [allowHTML=true]\n * Whether the renderer is allowed to include HTML text, which will be\n * projected on top of the SVG.\n *\n * @param {boolean} [styledMode=false]\n * Whether the renderer belongs to a chart that is in styled mode. If it\n * does, it will avoid setting presentational attributes in some cases, but\n * not when set explicitly through `.attr` and `.css` etc.\n */\n function SVGRenderer(container, width, height, style, forExport, allowHTML, styledMode) {\n var renderer = this,\n boxWrapper = renderer\n .createElement('svg')\n .attr({\n version: '1.1',\n 'class': 'highcharts-root'\n }),\n element = boxWrapper.element;\n if (!styledMode) {\n boxWrapper.css(this.getStyle(style || {}));\n }\n container.appendChild(element);\n // Always use ltr on the container, otherwise text-anchor will be\n // flipped and text appear outside labels, buttons, tooltip etc (#3482)\n SVGRenderer_attr(container, 'dir', 'ltr');\n // For browsers other than IE, add the namespace attribute (#1978)\n if (container.innerHTML.indexOf('xmlns') === -1) {\n SVGRenderer_attr(element, 'xmlns', this.SVG_NS);\n }\n this.box = element;\n this.boxWrapper = boxWrapper;\n this.alignedObjects = [];\n this.url = this.getReferenceURL();\n // Add description\n var desc = this.createElement('desc').add();\n desc.element.appendChild(SVGRenderer_doc.createTextNode('Created with Highcharts 12.1.2'));\n this.defs = this.createElement('defs').add();\n this.allowHTML = allowHTML;\n this.forExport = forExport;\n this.styledMode = styledMode;\n this.gradients = {}; // Object where gradient SvgElements are stored\n this.cache = {}; // Cache for numerical bounding boxes\n this.cacheKeys = [];\n this.imgCount = 0;\n this.rootFontSize = boxWrapper.getStyle('font-size');\n renderer.setSize(width, height, false);\n // Issue 110 workaround:\n // In Firefox, if a div is positioned by percentage, its pixel position\n // may land between pixels. The container itself doesn't display this,\n // but an SVG element inside this container will be drawn at subpixel\n // precision. In order to draw sharp lines, this must be compensated\n // for. This doesn't seem to work inside iframes though (like in\n // jsFiddle).\n var subPixelFix,\n rect;\n if (SVGRenderer_isFirefox && container.getBoundingClientRect) {\n subPixelFix = function () {\n SVGRenderer_css(container, { left: 0, top: 0 });\n rect = container.getBoundingClientRect();\n SVGRenderer_css(container, {\n left: (Math.ceil(rect.left) - rect.left) + 'px',\n top: (Math.ceil(rect.top) - rect.top) + 'px'\n });\n };\n // Run the fix now\n subPixelFix();\n // Run it on resize\n renderer.unSubPixelFix = SVGRenderer_addEvent(SVGRenderer_win, 'resize', subPixelFix);\n }\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * General method for adding a definition to the SVG `defs` tag. Can be used\n * for gradients, fills, filters etc. Styled mode only. A hook for adding\n * general definitions to the SVG's defs tag. Definitions can be referenced\n * from the CSS by its `id`. Read more in\n * [gradients, shadows and patterns](https://www.highcharts.com/docs/chart-design-and-style/gradients-shadows-and-patterns).\n * Styled mode only.\n *\n * @function Highcharts.SVGRenderer#definition\n *\n * @param {Highcharts.ASTNode} def\n * A serialized form of an SVG definition, including children.\n *\n * @return {Highcharts.SVGElement}\n * The inserted node.\n */\n SVGRenderer.prototype.definition = function (def) {\n var ast = new HTML_AST([def]);\n return ast.addToDOM(this.defs.element);\n };\n /**\n * Get the prefix needed for internal URL references to work in certain\n * cases. Some older browser versions had a bug where internal url\n * references in SVG attributes, on the form `url(#some-id)`, would fail if\n * a base tag was present in the page. There were also issues with\n * `history.pushState` related to this prefix.\n *\n * Related issues: #24, #672, #1070, #5244.\n *\n * The affected browsers are:\n * - Chrome <= 53 (May 2018)\n * - Firefox <= 51 (January 2017)\n * - Safari/Mac <= 12.1 (2018 or 2019)\n * - Safari/iOS <= 13\n *\n * @todo Remove this hack when time has passed. All the affected browsers\n * are evergreens, so it is increasingly unlikely that users are affected by\n * the bug.\n *\n * @return {string}\n * The prefix to use. An empty string for modern browsers.\n */\n SVGRenderer.prototype.getReferenceURL = function () {\n if ((SVGRenderer_isFirefox || isWebKit) &&\n SVGRenderer_doc.getElementsByTagName('base').length) {\n // Detect if a clip path is taking effect by performing a hit test\n // outside the clipped area. If the hit element is the rectangle\n // that was supposed to be clipped, the bug is present. This only\n // has to be performed once per page load, so we store the result\n // locally in the module.\n if (!SVGRenderer_defined(hasInternalReferenceBug)) {\n var id = SVGRenderer_uniqueKey();\n var ast = new HTML_AST([{\n tagName: 'svg',\n attributes: {\n width: 8,\n height: 8\n },\n children: [{\n tagName: 'defs',\n children: [{\n tagName: 'clipPath',\n attributes: {\n id: id\n },\n children: [{\n tagName: 'rect',\n attributes: {\n width: 4,\n height: 4\n }\n }]\n }]\n }, {\n tagName: 'rect',\n attributes: {\n id: 'hitme',\n width: 8,\n height: 8,\n 'clip-path': \"url(#\".concat(id, \")\"),\n fill: 'rgba(0,0,0,0.001)'\n }\n }]\n }]);\n var svg = ast.addToDOM(SVGRenderer_doc.body);\n SVGRenderer_css(svg, {\n position: 'fixed',\n top: 0,\n left: 0,\n zIndex: 9e5\n });\n var hitElement = SVGRenderer_doc.elementFromPoint(6, 6);\n hasInternalReferenceBug = (hitElement && hitElement.id) === 'hitme';\n SVGRenderer_doc.body.removeChild(svg);\n }\n if (hasInternalReferenceBug) {\n // Scan alert #[72]: Loop for nested patterns\n return SVGRenderer_replaceNested(SVGRenderer_win.location.href.split('#')[0], // Remove hash\n [/<[^>]*>/g, ''], // Wing cut HTML\n [/([\\('\\)])/g, '\\\\$1'], // Escape parantheses and quotes\n [/ /g, '%20'] // Replace spaces (needed for Safari only)\n );\n }\n }\n return '';\n };\n /**\n * Get the global style setting for the renderer.\n *\n * @private\n * @function Highcharts.SVGRenderer#getStyle\n *\n * @param {Highcharts.CSSObject} style\n * Style settings.\n *\n * @return {Highcharts.CSSObject}\n * The style settings mixed with defaults.\n */\n SVGRenderer.prototype.getStyle = function (style) {\n this.style = SVGRenderer_extend({\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", ' +\n 'Roboto, Helvetica, Arial, \"Apple Color Emoji\", ' +\n '\"Segoe UI Emoji\", \"Segoe UI Symbol\", sans-serif',\n fontSize: '1rem'\n }, style);\n return this.style;\n };\n /**\n * Apply the global style on the renderer, mixed with the default styles.\n *\n * @function Highcharts.SVGRenderer#setStyle\n *\n * @param {Highcharts.CSSObject} style\n * CSS to apply.\n */\n SVGRenderer.prototype.setStyle = function (style) {\n this.boxWrapper.css(this.getStyle(style));\n };\n /**\n * Detect whether the renderer is hidden. This happens when one of the\n * parent elements has `display: none`. Used internally to detect when we\n * need to render preliminarily in another div to get the text bounding\n * boxes right.\n *\n * @function Highcharts.SVGRenderer#isHidden\n *\n * @return {boolean}\n * True if it is hidden.\n */\n SVGRenderer.prototype.isHidden = function () {\n return !this.boxWrapper.getBBox().width;\n };\n /**\n * Destroys the renderer and its allocated members.\n *\n * @function Highcharts.SVGRenderer#destroy\n *\n * @return {null}\n * Pass through value.\n */\n SVGRenderer.prototype.destroy = function () {\n var renderer = this,\n rendererDefs = renderer.defs;\n renderer.box = null;\n renderer.boxWrapper = renderer.boxWrapper.destroy();\n // Call destroy on all gradient elements\n SVGRenderer_destroyObjectProperties(renderer.gradients || {});\n renderer.gradients = null;\n renderer.defs = rendererDefs.destroy();\n // Remove sub pixel fix handler (#982)\n if (renderer.unSubPixelFix) {\n renderer.unSubPixelFix();\n }\n renderer.alignedObjects = null;\n return null;\n };\n /**\n * Create a wrapper for an SVG element. Serves as a factory for\n * {@link SVGElement}, but this function is itself mostly called from\n * primitive factories like {@link SVGRenderer#path}, {@link\n * SVGRenderer#rect} or {@link SVGRenderer#text}.\n *\n * @function Highcharts.SVGRenderer#createElement\n *\n * @param {string} nodeName\n * The node name, for example `rect`, `g` etc.\n *\n * @return {Highcharts.SVGElement}\n * The generated SVGElement.\n */\n SVGRenderer.prototype.createElement = function (nodeName) {\n return new this.Element(this, nodeName);\n };\n /**\n * Get converted radial gradient attributes according to the radial\n * reference. Used internally from the {@link SVGElement#colorGradient}\n * function.\n *\n * @private\n * @function Highcharts.SVGRenderer#getRadialAttr\n */\n SVGRenderer.prototype.getRadialAttr = function (radialReference, gradAttr) {\n return {\n cx: (radialReference[0] - radialReference[2] / 2) +\n (gradAttr.cx || 0) * radialReference[2],\n cy: (radialReference[1] - radialReference[2] / 2) +\n (gradAttr.cy || 0) * radialReference[2],\n r: (gradAttr.r || 0) * radialReference[2]\n };\n };\n /**\n * Create a drop shadow definition and return its id\n *\n * @private\n * @function Highcharts.SVGRenderer#shadowDefinition\n *\n * @param {boolean|Highcharts.ShadowOptionsObject} [shadowOptions] The\n * shadow options. If `true`, the default options are applied\n */\n SVGRenderer.prototype.shadowDefinition = function (shadowOptions) {\n var id = SVGRenderer_spreadArray([\n \"highcharts-drop-shadow-\".concat(this.chartIndex)\n ],\n Object.keys(shadowOptions)\n .map(function (key) {\n return \"\" + key + \"-\".concat(shadowOptions[key]);\n }), true).join('-').toLowerCase().replace(/[^a-z\\d\\-]/g, ''), options = SVGRenderer_merge({\n color: '#000000',\n offsetX: 1,\n offsetY: 1,\n opacity: 0.15,\n width: 5\n }, shadowOptions);\n if (!this.defs.element.querySelector(\"#\".concat(id))) {\n this.definition({\n tagName: 'filter',\n attributes: {\n id: id,\n filterUnits: options.filterUnits\n },\n children: this.getShadowFilterContent(options)\n });\n }\n return id;\n };\n /**\n * Get shadow filter content.\n * NOTE! Overridden in es5 module for IE11 compatibility.\n *\n * @private\n * @function Highcharts.SVGRenderer#getShadowFilterContent\n *\n * @param {ShadowOptionsObject} options\n * The shadow options.\n * @return {Array<AST.Node>}\n * The shadow filter content.\n */\n SVGRenderer.prototype.getShadowFilterContent = function (options) {\n return [{\n tagName: 'feDropShadow',\n attributes: {\n dx: options.offsetX,\n dy: options.offsetY,\n 'flood-color': options.color,\n // Tuned and modified to keep a preserve compatibility\n // with the old settings\n 'flood-opacity': Math.min(options.opacity * 5, 1),\n stdDeviation: options.width / 2\n }\n }];\n };\n /**\n * Parse a simple HTML string into SVG tspans. Called internally when text\n * is set on an SVGElement. The function supports a subset of HTML tags, CSS\n * text features like `width`, `text-overflow`, `white-space`, and also\n * attributes like `href` and `style`.\n *\n * @private\n * @function Highcharts.SVGRenderer#buildText\n *\n * @param {Highcharts.SVGElement} wrapper\n * The parent SVGElement.\n */\n SVGRenderer.prototype.buildText = function (wrapper) {\n new SVG_TextBuilder(wrapper).buildSVG();\n };\n /**\n * Returns white for dark colors and black for bright colors, based on W3C's\n * definition of [Relative luminance](\n * https://www.w3.org/WAI/GL/wiki/Relative_luminance).\n *\n * @function Highcharts.SVGRenderer#getContrast\n *\n * @param {Highcharts.ColorString} color\n * The color to get the contrast for.\n *\n * @return {Highcharts.ColorString}\n * The contrast color, either `#000000` or `#FFFFFF`.\n */\n SVGRenderer.prototype.getContrast = function (color) {\n // #6216, #17273\n var rgba = Color_Color.parse(color).rgba\n .map(function (b8) {\n var c = b8 / 255;\n return c <= 0.03928 ?\n c / 12.92 :\n Math.pow((c + 0.055) / 1.055, 2.4);\n });\n // Relative luminance\n var l = 0.2126 * rgba[0] + 0.7152 * rgba[1] + 0.0722 * rgba[2];\n // Use white or black based on which provides more contrast\n return 1.05 / (l + 0.05) > (l + 0.05) / 0.05 ? '#FFFFFF' : '#000000';\n };\n /**\n * Create a button with preset states. Styles for the button can either be\n * set as arguments, or a general theme for all buttons can be set by the\n * `global.buttonTheme` option.\n *\n * @function Highcharts.SVGRenderer#button\n *\n * @param {string} text\n * The text or HTML to draw.\n *\n * @param {number} x\n * The x position of the button's left side.\n *\n * @param {number} y\n * The y position of the button's top side.\n *\n * @param {Highcharts.EventCallbackFunction<Highcharts.SVGElement>} callback\n * The function to execute on button click or touch.\n *\n * @param {Highcharts.SVGAttributes} [theme]\n * SVG attributes for the normal state.\n *\n * @param {Highcharts.SVGAttributes} [hoverState]\n * SVG attributes for the hover state.\n *\n * @param {Highcharts.SVGAttributes} [selectState]\n * SVG attributes for the pressed state.\n *\n * @param {Highcharts.SVGAttributes} [disabledState]\n * SVG attributes for the disabled state.\n *\n * @param {Highcharts.SymbolKeyValue} [shape=rect]\n * The shape type.\n *\n * @param {boolean} [useHTML=false]\n * Whether to use HTML to render the label.\n *\n * @return {Highcharts.SVGElement}\n * The button element.\n */\n SVGRenderer.prototype.button = function (text, x, y, callback, theme, hoverState, selectState, disabledState, shape, useHTML) {\n if (theme === void 0) { theme = {}; }\n var label = this.label(text,\n x,\n y,\n shape,\n void 0,\n void 0,\n useHTML,\n void 0, 'button'),\n styledMode = this.styledMode,\n args = arguments;\n var curState = 0;\n theme = SVGRenderer_merge(SVGRenderer_defaultOptions.global.buttonTheme, theme);\n // @todo Consider moving this to a lower level, like .attr\n if (styledMode) {\n delete theme.fill;\n delete theme.stroke;\n delete theme['stroke-width'];\n }\n var states = theme.states || {},\n normalStyle = theme.style || {};\n delete theme.states;\n delete theme.style;\n // Presentational\n var stateAttribs = [\n HTML_AST.filterUserAttributes(theme)\n ], \n // The string type is a mistake, it is just for compliance with\n // SVGAttribute and is not used in button theme.\n stateStyles = [normalStyle];\n if (!styledMode) {\n ['hover', 'select', 'disabled'].forEach(function (stateName, i) {\n stateAttribs.push(SVGRenderer_merge(stateAttribs[0], HTML_AST.filterUserAttributes(args[i + 5] || states[stateName] || {})));\n stateStyles.push(stateAttribs[i + 1].style);\n delete stateAttribs[i + 1].style;\n });\n }\n // Add the events. IE9 and IE10 need mouseover and mouseout to function\n // (#667).\n SVGRenderer_addEvent(label.element, isMS ? 'mouseover' : 'mouseenter', function () {\n if (curState !== 3) {\n label.setState(1);\n }\n });\n SVGRenderer_addEvent(label.element, isMS ? 'mouseout' : 'mouseleave', function () {\n if (curState !== 3) {\n label.setState(curState);\n }\n });\n label.setState = function (state) {\n if (state === void 0) { state = 0; }\n // Hover state is temporary, don't record it\n if (state !== 1) {\n label.state = curState = state;\n }\n // Update visuals\n label\n .removeClass(/highcharts-button-(normal|hover|pressed|disabled)/)\n .addClass('highcharts-button-' +\n ['normal', 'hover', 'pressed', 'disabled'][state]);\n if (!styledMode) {\n label.attr(stateAttribs[state]);\n var css_1 = stateStyles[state];\n if (SVGRenderer_isObject(css_1)) {\n label.css(css_1);\n }\n }\n };\n label.attr(stateAttribs[0]);\n // Presentational attributes\n if (!styledMode) {\n label.css(SVGRenderer_extend({ cursor: 'default' }, normalStyle));\n // HTML labels don't need to handle pointer events because click and\n // mouseenter/mouseleave is bound to the underlying <g> element.\n // Should this be reconsidered, we need more complex logic to share\n // events between the <g> and its <div> counterpart, and avoid\n // triggering mouseenter/mouseleave when hovering from one to the\n // other (#17440).\n if (useHTML) {\n label.text.css({ pointerEvents: 'none' });\n }\n }\n return label\n .on('touchstart', function (e) { return e.stopPropagation(); })\n .on('click', function (e) {\n if (curState !== 3) {\n callback.call(label, e);\n }\n });\n };\n /**\n * Make a straight line crisper by not spilling out to neighbour pixels.\n *\n * @function Highcharts.SVGRenderer#crispLine\n *\n * @param {Highcharts.SVGPathArray} points\n * The original points on the format `[['M', 0, 0], ['L', 100, 0]]`.\n *\n * @param {number} width\n * The width of the line.\n *\n * @return {Highcharts.SVGPathArray}\n * The original points array, but modified to render crisply.\n */\n SVGRenderer.prototype.crispLine = function (points, width) {\n var start = points[0],\n end = points[1];\n // Normalize to a crisp line\n if (SVGRenderer_defined(start[1]) && start[1] === end[1]) {\n start[1] = end[1] = SVGRenderer_crisp(start[1], width);\n }\n if (SVGRenderer_defined(start[2]) && start[2] === end[2]) {\n start[2] = end[2] = SVGRenderer_crisp(start[2], width);\n }\n return points;\n };\n /**\n * Draw a path, wraps the SVG `path` element.\n *\n * @sample highcharts/members/renderer-path-on-chart/\n * Draw a path in a chart\n * @sample highcharts/members/renderer-path/\n * Draw a path independent from a chart\n *\n * @example\n * let path = renderer.path(['M', 10, 10, 'L', 30, 30, 'z'])\n * .attr({ stroke: '#ff00ff' })\n * .add();\n *\n * @function Highcharts.SVGRenderer#path\n *\n * @param {Highcharts.SVGPathArray} [path]\n * An SVG path definition in array form.\n *\n * @return {Highcharts.SVGElement}\n * The generated wrapper element.\n *\n */ /**\n * Draw a path, wraps the SVG `path` element.\n *\n * @function Highcharts.SVGRenderer#path\n *\n * @param {Highcharts.SVGAttributes} [attribs]\n * The initial attributes.\n *\n * @return {Highcharts.SVGElement}\n * The generated wrapper element.\n */\n SVGRenderer.prototype.path = function (path) {\n var attribs = (this.styledMode ? {} : {\n fill: 'none'\n });\n if (SVGRenderer_isArray(path)) {\n attribs.d = path;\n }\n else if (SVGRenderer_isObject(path)) { // Attributes\n SVGRenderer_extend(attribs, path);\n }\n return this.createElement('path').attr(attribs);\n };\n /**\n * Draw a circle, wraps the SVG `circle` element.\n *\n * @sample highcharts/members/renderer-circle/\n * Drawing a circle\n *\n * @function Highcharts.SVGRenderer#circle\n *\n * @param {number} [x]\n * The center x position.\n *\n * @param {number} [y]\n * The center y position.\n *\n * @param {number} [r]\n * The radius.\n *\n * @return {Highcharts.SVGElement}\n * The generated wrapper element.\n */ /**\n * Draw a circle, wraps the SVG `circle` element.\n *\n * @function Highcharts.SVGRenderer#circle\n *\n * @param {Highcharts.SVGAttributes} [attribs]\n * The initial attributes.\n *\n * @return {Highcharts.SVGElement}\n * The generated wrapper element.\n */\n SVGRenderer.prototype.circle = function (x, y, r) {\n var attribs = (SVGRenderer_isObject(x) ?\n x :\n typeof x === 'undefined' ? {} : { x: x, y: y, r: r }), wrapper = this.createElement('circle');\n // Setting x or y translates to cx and cy\n wrapper.xSetter = wrapper.ySetter = function (value, key, element) {\n element.setAttribute('c' + key, value);\n };\n return wrapper.attr(attribs);\n };\n /**\n * Draw and return an arc.\n *\n * @sample highcharts/members/renderer-arc/\n * Drawing an arc\n *\n * @function Highcharts.SVGRenderer#arc\n *\n * @param {number} [x=0]\n * Center X position.\n *\n * @param {number} [y=0]\n * Center Y position.\n *\n * @param {number} [r=0]\n * The outer radius' of the arc.\n *\n * @param {number} [innerR=0]\n * Inner radius like used in donut charts.\n *\n * @param {number} [start=0]\n * The starting angle of the arc in radians, where 0 is to the right and\n * `-Math.PI/2` is up.\n *\n * @param {number} [end=0]\n * The ending angle of the arc in radians, where 0 is to the right and\n * `-Math.PI/2` is up.\n *\n * @return {Highcharts.SVGElement}\n * The generated wrapper element.\n */ /**\n * Draw and return an arc. Overloaded function that takes arguments object.\n *\n * @function Highcharts.SVGRenderer#arc\n *\n * @param {Highcharts.SVGAttributes} attribs\n * Initial SVG attributes.\n *\n * @return {Highcharts.SVGElement}\n * The generated wrapper element.\n */\n SVGRenderer.prototype.arc = function (x, y, r, innerR, start, end) {\n var options;\n if (SVGRenderer_isObject(x)) {\n options = x;\n y = options.y;\n r = options.r;\n innerR = options.innerR;\n start = options.start;\n end = options.end;\n x = options.x;\n }\n else {\n options = { innerR: innerR, start: start, end: end };\n }\n // Arcs are defined as symbols for the ability to set\n // attributes in attr and animate\n var arc = this.symbol('arc',\n x,\n y,\n r,\n r,\n options);\n arc.r = r; // #959\n return arc;\n };\n /**\n * Draw and return a rectangle.\n *\n * @function Highcharts.SVGRenderer#rect\n *\n * @param {number} [x]\n * Left position.\n *\n * @param {number} [y]\n * Top position.\n *\n * @param {number} [width]\n * Width of the rectangle.\n *\n * @param {number} [height]\n * Height of the rectangle.\n *\n * @param {number} [r]\n * Border corner radius.\n *\n * @param {number} [strokeWidth]\n * A stroke width can be supplied to allow crisp drawing.\n *\n * @return {Highcharts.SVGElement}\n * The generated wrapper element.\n */ /**\n * Draw and return a rectangle.\n *\n * @sample highcharts/members/renderer-rect-on-chart/\n * Draw a rectangle in a chart\n * @sample highcharts/members/renderer-rect/\n * Draw a rectangle independent from a chart\n *\n * @function Highcharts.SVGRenderer#rect\n *\n * @param {Highcharts.SVGAttributes} [attributes]\n * General SVG attributes for the rectangle.\n *\n * @return {Highcharts.SVGElement}\n * The generated wrapper element.\n */\n SVGRenderer.prototype.rect = function (x, y, width, height, r, strokeWidth) {\n var attribs = (SVGRenderer_isObject(x) ?\n x :\n typeof x === 'undefined' ?\n {} :\n {\n x: x,\n y: y,\n r: r,\n width: Math.max(width || 0, 0),\n height: Math.max(height || 0, 0)\n }),\n wrapper = this.createElement('rect');\n if (!this.styledMode) {\n if (typeof strokeWidth !== 'undefined') {\n attribs['stroke-width'] = strokeWidth;\n SVGRenderer_extend(attribs, wrapper.crisp(attribs));\n }\n attribs.fill = 'none';\n }\n wrapper.rSetter = function (value, _key, element) {\n wrapper.r = value;\n SVGRenderer_attr(element, {\n rx: value,\n ry: value\n });\n };\n wrapper.rGetter = function () {\n return wrapper.r || 0;\n };\n return wrapper.attr(attribs);\n };\n /**\n * Draw and return a rectangle with advanced corner rounding options.\n *\n * @function Highcharts.SVGRenderer#roundedRect\n *\n * @param {Highcharts.SVGAttributes} attribs\n * Attributes\n * @return {Highcharts.SVGElement}\n * The generated wrapper element.\n */\n SVGRenderer.prototype.roundedRect = function (attribs) {\n return this.symbol('roundedRect').attr(attribs);\n };\n /**\n * Resize the {@link SVGRenderer#box} and re-align all aligned child\n * elements.\n *\n * @sample highcharts/members/renderer-g/\n * Show and hide grouped objects\n *\n * @function Highcharts.SVGRenderer#setSize\n *\n * @param {number} width\n * The new pixel width.\n *\n * @param {number} height\n * The new pixel height.\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animate=true]\n * Whether and how to animate.\n */\n SVGRenderer.prototype.setSize = function (width, height, animate) {\n var renderer = this;\n renderer.width = width;\n renderer.height = height;\n renderer.boxWrapper.animate({\n width: width,\n height: height\n }, {\n step: function () {\n this.attr({\n viewBox: '0 0 ' + this.attr('width') + ' ' +\n this.attr('height')\n });\n },\n duration: SVGRenderer_pick(animate, true) ? void 0 : 0\n });\n renderer.alignElements();\n };\n /**\n * Create and return an svg group element. Child\n * {@link Highcharts.SVGElement} objects are added to the group by using the\n * group as the first parameter in {@link Highcharts.SVGElement#add|add()}.\n *\n * @function Highcharts.SVGRenderer#g\n *\n * @param {string} [name]\n * The group will be given a class name of `highcharts-{name}`. This\n * can be used for styling and scripting.\n *\n * @return {Highcharts.SVGElement}\n * The generated wrapper element.\n */\n SVGRenderer.prototype.g = function (name) {\n var elem = this.createElement('g');\n return name ?\n elem.attr({ 'class': 'highcharts-' + name }) :\n elem;\n };\n /**\n * Display an image.\n *\n * @sample highcharts/members/renderer-image-on-chart/\n * Add an image in a chart\n * @sample highcharts/members/renderer-image/\n * Add an image independent of a chart\n *\n * @function Highcharts.SVGRenderer#image\n *\n * @param {string} href\n * The image source.\n *\n * @param {number} [x]\n * The X position.\n *\n * @param {number} [y]\n * The Y position.\n *\n * @param {number} [width]\n * The image width. If omitted, it defaults to the image file width.\n *\n * @param {number} [height]\n * The image height. If omitted it defaults to the image file\n * height.\n *\n * @param {Function} [onload]\n * Event handler for image load.\n *\n * @return {Highcharts.SVGElement}\n * The generated wrapper element.\n */\n SVGRenderer.prototype.image = function (href, x, y, width, height, onload) {\n var attribs = { preserveAspectRatio: 'none' };\n // Optional properties (#11756)\n if (SVGRenderer_isNumber(x)) {\n attribs.x = x;\n }\n if (SVGRenderer_isNumber(y)) {\n attribs.y = y;\n }\n if (SVGRenderer_isNumber(width)) {\n attribs.width = width;\n }\n if (SVGRenderer_isNumber(height)) {\n attribs.height = height;\n }\n var elemWrapper = this.createElement('image').attr(attribs),\n onDummyLoad = function (e) {\n elemWrapper.attr({ href: href });\n onload.call(elemWrapper, e);\n };\n // Add load event if supplied\n if (onload) {\n // We have to use a dummy HTML image since IE support for SVG image\n // load events is very buggy. First set a transparent src, wait for\n // dummy to load, and then add the real src to the SVG image.\n elemWrapper.attr({\n /* eslint-disable-next-line max-len */\n href: 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=='\n });\n var dummy = new SVGRenderer_win.Image();\n SVGRenderer_addEvent(dummy, 'load', onDummyLoad);\n dummy.src = href;\n if (dummy.complete) {\n onDummyLoad({});\n }\n }\n else {\n elemWrapper.attr({ href: href });\n }\n return elemWrapper;\n };\n /**\n * Draw a symbol out of pre-defined shape paths from\n * {@link SVGRenderer#symbols}.\n * It is used in Highcharts for point makers, which cake a `symbol` option,\n * and label and button backgrounds like in the tooltip and stock flags.\n *\n * @function Highcharts.SVGRenderer#symbol\n *\n * @param {string} symbol\n * The symbol name.\n *\n * @param {number} [x]\n * The X coordinate for the top left position.\n *\n * @param {number} [y]\n * The Y coordinate for the top left position.\n *\n * @param {number} [width]\n * The pixel width.\n *\n * @param {number} [height]\n * The pixel height.\n *\n * @param {Highcharts.SymbolOptionsObject} [options]\n * Additional options, depending on the actual symbol drawn.\n *\n * @return {Highcharts.SVGElement}\n * SVG symbol.\n */\n SVGRenderer.prototype.symbol = function (symbol, x, y, width, height, options) {\n var ren = this, imageRegex = /^url\\((.*?)\\)$/, isImage = imageRegex.test(symbol), sym = (!isImage && (this.symbols[symbol] ? symbol : 'circle')), \n // Get the symbol definition function\n symbolFn = (sym && this.symbols[sym]);\n var obj,\n path,\n imageSrc,\n centerImage;\n if (symbolFn) {\n // Check if there's a path defined for this symbol\n if (typeof x === 'number') {\n path = symbolFn.call(this.symbols, x || 0, y || 0, width || 0, height || 0, options);\n }\n obj = this.path(path);\n if (!ren.styledMode) {\n obj.attr('fill', 'none');\n }\n // Expando properties for use in animate and attr\n SVGRenderer_extend(obj, {\n symbolName: (sym || void 0),\n x: x,\n y: y,\n width: width,\n height: height\n });\n if (options) {\n SVGRenderer_extend(obj, options);\n }\n // Image symbols\n }\n else if (isImage) {\n imageSrc = symbol.match(imageRegex)[1];\n // Create the image synchronously, add attribs async\n var img_1 = obj = this.image(imageSrc);\n // The image width is not always the same as the symbol width. The\n // image may be centered within the symbol, as is the case when\n // image shapes are used as label backgrounds, for example in flags.\n img_1.imgwidth = SVGRenderer_pick(options && options.width, symbolSizes[imageSrc] && symbolSizes[imageSrc].width);\n img_1.imgheight = SVGRenderer_pick(options && options.height, symbolSizes[imageSrc] && symbolSizes[imageSrc].height);\n /**\n * Set the size and position\n */\n centerImage = function (obj) { return obj.attr({\n width: obj.width,\n height: obj.height\n }); };\n /**\n * Width and height setters that take both the image's physical size\n * and the label size into consideration, and translates the image\n * to center within the label.\n */\n ['width', 'height'].forEach(function (key) {\n img_1[\"\" + key + \"Setter\"] = function (value, key) {\n this[key] = value;\n var _a = this,\n alignByTranslate = _a.alignByTranslate,\n element = _a.element,\n width = _a.width,\n height = _a.height,\n imgwidth = _a.imgwidth,\n imgheight = _a.imgheight,\n imgSize = key === 'width' ? imgwidth : imgheight;\n var scale = 1;\n // Scale and center the image within its container. The name\n // `backgroundSize` is taken from the CSS spec, but the\n // value `within` is made up. Other possible values in the\n // spec, `cover` and `contain`, can be implemented if\n // needed.\n if (options &&\n options.backgroundSize === 'within' &&\n width &&\n height &&\n imgwidth &&\n imgheight) {\n scale = Math.min(width / imgwidth, height / imgheight);\n // Update both width and height to keep the ratio\n // correct (#17315)\n SVGRenderer_attr(element, {\n width: Math.round(imgwidth * scale),\n height: Math.round(imgheight * scale)\n });\n }\n else if (element && imgSize) {\n element.setAttribute(key, imgSize);\n }\n if (!alignByTranslate && imgwidth && imgheight) {\n this.translate(((width || 0) - (imgwidth * scale)) / 2, ((height || 0) - (imgheight * scale)) / 2);\n }\n };\n });\n if (SVGRenderer_defined(x)) {\n img_1.attr({\n x: x,\n y: y\n });\n }\n img_1.isImg = true;\n img_1.symbolUrl = symbol;\n if (SVGRenderer_defined(img_1.imgwidth) && SVGRenderer_defined(img_1.imgheight)) {\n centerImage(img_1);\n }\n else {\n // Initialize image to be 0 size so export will still function\n // if there's no cached sizes.\n img_1.attr({ width: 0, height: 0 });\n // Create a dummy JavaScript image to get the width and height.\n SVGRenderer_createElement('img', {\n onload: function () {\n var chart = SVGRenderer_charts[ren.chartIndex];\n // Special case for SVGs on IE11, the width is not\n // accessible until the image is part of the DOM\n // (#2854).\n if (this.width === 0) {\n SVGRenderer_css(this, {\n position: 'absolute',\n top: '-999em'\n });\n SVGRenderer_doc.body.appendChild(this);\n }\n // Center the image\n symbolSizes[imageSrc] = {\n width: this.width,\n height: this.height\n };\n img_1.imgwidth = this.width;\n img_1.imgheight = this.height;\n if (img_1.element) {\n centerImage(img_1);\n }\n // Clean up after #2854 workaround.\n if (this.parentNode) {\n this.parentNode.removeChild(this);\n }\n // Fire the load event when all external images are\n // loaded\n ren.imgCount--;\n if (!ren.imgCount && chart && !chart.hasLoaded) {\n chart.onload();\n }\n },\n src: imageSrc\n });\n this.imgCount++;\n }\n }\n return obj;\n };\n /**\n * Define a clipping rectangle. The clipping rectangle is later applied\n * to {@link SVGElement} objects through the {@link SVGElement#clip}\n * function.\n *\n * This function is deprecated as of v11.2. Instead, use a regular shape\n * (`rect`, `path` etc), and the `SVGElement.clipTo` function.\n *\n * @example\n * let circle = renderer.circle(100, 100, 100)\n * .attr({ fill: 'red' })\n * .add();\n * let clipRect = renderer.clipRect(100, 100, 100, 100);\n *\n * // Leave only the lower right quarter visible\n * circle.clip(clipRect);\n *\n * @deprecated\n *\n * @function Highcharts.SVGRenderer#clipRect\n *\n * @param {number} [x]\n *\n * @param {number} [y]\n *\n * @param {number} [width]\n *\n * @param {number} [height]\n *\n * @return {Highcharts.ClipRectElement}\n * A clipping rectangle.\n */\n SVGRenderer.prototype.clipRect = function (x, y, width, height) {\n return this.rect(x, y, width, height, 0);\n };\n /**\n * Draw text. The text can contain a subset of HTML, like spans and anchors\n * and some basic text styling of these. For more advanced features like\n * border and background, use {@link Highcharts.SVGRenderer#label} instead.\n * To update the text after render, run `text.attr({ text: 'New text' })`.\n *\n * @sample highcharts/members/renderer-text-on-chart/\n * Annotate the chart freely\n * @sample highcharts/members/renderer-on-chart/\n * Annotate with a border and in response to the data\n * @sample highcharts/members/renderer-text/\n * Formatted text\n *\n * @function Highcharts.SVGRenderer#text\n *\n * @param {string} [str]\n * The text of (subset) HTML to draw.\n *\n * @param {number} [x]\n * The x position of the text's lower left corner.\n *\n * @param {number} [y]\n * The y position of the text's lower left corner.\n *\n * @param {boolean} [useHTML=false]\n * Use HTML to render the text.\n *\n * @return {Highcharts.SVGElement}\n * The text object.\n */\n SVGRenderer.prototype.text = function (str, x, y, useHTML) {\n var renderer = this,\n attribs = {};\n if (useHTML && (renderer.allowHTML || !renderer.forExport)) {\n return renderer.html(str, x, y);\n }\n attribs.x = Math.round(x || 0); // X always needed for line-wrap logic\n if (y) {\n attribs.y = Math.round(y);\n }\n if (SVGRenderer_defined(str)) {\n attribs.text = str;\n }\n var wrapper = renderer.createElement('text').attr(attribs);\n if (!useHTML || (renderer.forExport && !renderer.allowHTML)) {\n wrapper.xSetter = function (value, key, element) {\n var tspans = element.getElementsByTagName('tspan'),\n parentVal = element.getAttribute(key);\n for (var i = 0, tspan = void 0; i < tspans.length; i++) {\n tspan = tspans[i];\n // If the x values are equal, the tspan represents a line\n // break\n if (tspan.getAttribute(key) === parentVal) {\n tspan.setAttribute(key, value);\n }\n }\n element.setAttribute(key, value);\n };\n }\n return wrapper;\n };\n /**\n * Utility to return the baseline offset and total line height from the font\n * size.\n *\n * @function Highcharts.SVGRenderer#fontMetrics\n *\n * @param {Highcharts.SVGElement|Highcharts.SVGDOMElement|number} [element]\n * The element to inspect for a current font size. If a number is\n * given, it's used as a fall back for direct font size in pixels.\n *\n * @return {Highcharts.FontMetricsObject}\n * The font metrics.\n */\n SVGRenderer.prototype.fontMetrics = function (element) {\n var f = SVGRenderer_pInt(SVG_SVGElement.prototype.getStyle.call(element, 'font-size') || 0);\n // Empirical values found by comparing font size and bounding box\n // height. Applies to the default font family.\n // https://jsfiddle.net/highcharts/7xvn7/\n var h = f < 24 ? f + 3 : Math.round(f * 1.2),\n b = Math.round(h * 0.8);\n return {\n // Line height\n h: h,\n // Baseline\n b: b,\n // Font size\n f: f\n };\n };\n /**\n * Correct X and Y positioning of a label for rotation (#1764).\n *\n * @private\n * @function Highcharts.SVGRenderer#rotCorr\n */\n SVGRenderer.prototype.rotCorr = function (baseline, rotation, alterY) {\n var y = baseline;\n if (rotation && alterY) {\n y = Math.max(y * Math.cos(rotation * SVGRenderer_deg2rad), 4);\n }\n return {\n x: (-baseline / 3) * Math.sin(rotation * SVGRenderer_deg2rad),\n y: y\n };\n };\n /**\n * Compatibility function to convert the legacy one-dimensional path array\n * into an array of segments.\n *\n * It is used in maps to parse the `path` option, and in SVGRenderer.dSetter\n * to support legacy paths from demos.\n *\n * @private\n * @function Highcharts.SVGRenderer#pathToSegments\n */\n SVGRenderer.prototype.pathToSegments = function (path) {\n var ret = [];\n var segment = [];\n var commandLength = {\n A: 8,\n C: 7,\n H: 2,\n L: 3,\n M: 3,\n Q: 5,\n S: 5,\n T: 3,\n V: 2\n };\n // Short, non-typesafe parsing of the one-dimensional array. It splits\n // the path on any string. This is not type checked against the tuple\n // types, but is shorter, and doesn't require specific checks for any\n // command type in SVG.\n for (var i = 0; i < path.length; i++) {\n // Command skipped, repeat previous or insert L/l for M/m\n if (SVGRenderer_isString(segment[0]) &&\n SVGRenderer_isNumber(path[i]) &&\n segment.length === commandLength[(segment[0].toUpperCase())]) {\n path.splice(i, 0, segment[0].replace('M', 'L').replace('m', 'l'));\n }\n // Split on string\n if (typeof path[i] === 'string') {\n if (segment.length) {\n ret.push(segment.slice(0));\n }\n segment.length = 0;\n }\n segment.push(path[i]);\n }\n ret.push(segment.slice(0));\n return ret;\n /*\n // Fully type-safe version where each tuple type is checked. The\n // downside is filesize and a lack of flexibility for unsupported\n // commands\n const ret: SVGPath = [],\n commands = {\n A: 7,\n C: 6,\n H: 1,\n L: 2,\n M: 2,\n Q: 4,\n S: 4,\n T: 2,\n V: 1,\n Z: 0\n };\n\n let i = 0,\n lastI = 0,\n lastCommand;\n\n while (i < path.length) {\n const item = path[i];\n\n let command;\n\n if (typeof item === 'string') {\n command = item;\n i += 1;\n } else {\n command = lastCommand || 'M';\n }\n\n // Upper case\n const commandUC = command.toUpperCase();\n\n if (commandUC in commands) {\n\n // No numeric parameters\n if (command === 'Z' || command === 'z') {\n ret.push([command]);\n\n // One numeric parameter\n } else {\n const val0 = path[i];\n if (typeof val0 === 'number') {\n\n // Horizontal line to\n if (command === 'H' || command === 'h') {\n ret.push([command, val0]);\n i += 1;\n\n // Vertical line to\n } else if (command === 'V' || command === 'v') {\n ret.push([command, val0]);\n i += 1;\n\n // Two numeric parameters\n } else {\n const val1 = path[i + 1];\n if (typeof val1 === 'number') {\n // lineTo\n if (command === 'L' || command === 'l') {\n ret.push([command, val0, val1]);\n i += 2;\n\n // moveTo\n } else if (command === 'M' || command === 'm') {\n ret.push([command, val0, val1]);\n i += 2;\n\n // Smooth quadratic bezier\n } else if (command === 'T' || command === 't') {\n ret.push([command, val0, val1]);\n i += 2;\n\n // Four numeric parameters\n } else {\n const val2 = path[i + 2],\n val3 = path[i + 3];\n if (\n typeof val2 === 'number' &&\n typeof val3 === 'number'\n ) {\n // Quadratic bezier to\n if (\n command === 'Q' ||\n command === 'q'\n ) {\n ret.push([\n command,\n val0,\n val1,\n val2,\n val3\n ]);\n i += 4;\n\n // Smooth cubic bezier to\n } else if (\n command === 'S' ||\n command === 's'\n ) {\n ret.push([\n command,\n val0,\n val1,\n val2,\n val3\n ]);\n i += 4;\n\n // Six numeric parameters\n } else {\n const val4 = path[i + 4],\n val5 = path[i + 5];\n\n if (\n typeof val4 === 'number' &&\n typeof val5 === 'number'\n ) {\n // Curve to\n if (\n command === 'C' ||\n command === 'c'\n ) {\n ret.push([\n command,\n val0,\n val1,\n val2,\n val3,\n val4,\n val5\n ]);\n i += 6;\n\n // Seven numeric parameters\n } else {\n const val6 = path[i + 6];\n\n // Arc to\n if (\n typeof val6 ===\n 'number' &&\n (\n command === 'A' ||\n command === 'a'\n )\n ) {\n ret.push([\n command,\n val0,\n val1,\n val2,\n val3,\n val4,\n val5,\n val6\n ]);\n i += 7;\n\n }\n\n }\n }\n }\n }\n }\n }\n\n }\n }\n }\n }\n\n // An unmarked command following a moveTo is a lineTo\n lastCommand = command === 'M' ? 'L' : command;\n\n if (i === lastI) {\n break;\n }\n lastI = i;\n }\n return ret;\n */\n };\n /**\n * Draw a label, which is an extended text element with support for border\n * and background. Highcharts creates a `g` element with a text and a `path`\n * or `rect` inside, to make it behave somewhat like a HTML div. Border and\n * background are set through `stroke`, `stroke-width` and `fill` attributes\n * using the {@link Highcharts.SVGElement#attr|attr} method. To update the\n * text after render, run `label.attr({ text: 'New text' })`.\n *\n * @sample highcharts/members/renderer-label-on-chart/\n * A label on the chart\n *\n * @function Highcharts.SVGRenderer#label\n *\n * @param {string} str\n * The initial text string or (subset) HTML to render.\n *\n * @param {number} x\n * The x position of the label's left side.\n *\n * @param {number} [y]\n * The y position of the label's top side or baseline, depending on\n * the `baseline` parameter.\n *\n * @param {string} [shape='rect']\n * The shape of the label's border/background, if any. Defaults to\n * `rect`. Other possible values are `callout` or other shapes\n * defined in {@link Highcharts.SVGRenderer#symbols}.\n *\n * @param {number} [anchorX]\n * In case the `shape` has a pointer, like a flag, this is the\n * coordinates it should be pinned to.\n *\n * @param {number} [anchorY]\n * In case the `shape` has a pointer, like a flag, this is the\n * coordinates it should be pinned to.\n *\n * @param {boolean} [useHTML=false]\n * Whether to use HTML to render the label.\n *\n * @param {boolean} [baseline=false]\n * Whether to position the label relative to the text baseline,\n * like {@link Highcharts.SVGRenderer#text|renderer.text}, or to the\n * upper border of the rectangle.\n *\n * @param {string} [className]\n * Class name for the group.\n *\n * @return {Highcharts.SVGElement}\n * The generated label.\n */\n SVGRenderer.prototype.label = function (str, x, y, shape, anchorX, anchorY, useHTML, baseline, className) {\n return new SVG_SVGLabel(this, str, x, y, shape, anchorX, anchorY, useHTML, baseline, className);\n };\n /**\n * Re-align all aligned elements.\n *\n * @private\n * @function Highcharts.SVGRenderer#alignElements\n */\n SVGRenderer.prototype.alignElements = function () {\n this.alignedObjects.forEach(function (el) { return el.align(); });\n };\n return SVGRenderer;\n}());\nSVGRenderer_extend(SVGRenderer.prototype, {\n /**\n * A pointer to the renderer's associated Element class.\n *\n * @name Highcharts.SVGRenderer#Element\n * @type {Highcharts.SVGElement}\n */\n Element: SVG_SVGElement,\n SVG_NS: SVGRenderer_SVG_NS,\n /**\n * A collection of characters mapped to HTML entities. When `useHTML` on an\n * element is true, these entities will be rendered correctly by HTML. In\n * the SVG pseudo-HTML, they need to be unescaped back to simple characters,\n * so for example `<` will render as `<`.\n *\n * @example\n * // Add support for unescaping quotes\n * Highcharts.SVGRenderer.prototype.escapes['\"'] = '"';\n *\n * @name Highcharts.SVGRenderer#escapes\n * @type {Highcharts.Dictionary<string>}\n */\n escapes: {\n '&': '&',\n '<': '<',\n '>': '>',\n \"'\": ''', // eslint-disable-line quotes\n '\"': '"'\n },\n /**\n * An extendable collection of functions for defining symbol paths.\n *\n * @name Highcharts.SVGRenderer#symbols\n * @type {Highcharts.SymbolDictionary}\n */\n symbols: SVG_Symbols,\n /**\n * Dummy function for plugins, called every time the renderer is updated.\n * Prior to Highcharts 5, this was used for the canvg renderer.\n *\n * @deprecated\n * @function Highcharts.SVGRenderer#draw\n */\n draw: noop\n});\n/* *\n *\n * Registry\n *\n * */\nRenderer_RendererRegistry.registerRendererType('svg', SVGRenderer, true);\n/* *\n *\n * Export Default\n *\n * */\n/* harmony default export */ var SVG_SVGRenderer = (SVGRenderer);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * A clipping rectangle that can be applied to one or more {@link SVGElement}\n * instances. It is instantiated with the {@link SVGRenderer#clipRect} function\n * and applied with the {@link SVGElement#clip} function.\n *\n * @example\n * let circle = renderer.circle(100, 100, 100)\n * .attr({ fill: 'red' })\n * .add();\n * let clipRect = renderer.clipRect(100, 100, 100, 100);\n *\n * // Leave only the lower right quarter visible\n * circle.clip(clipRect);\n *\n * @typedef {Highcharts.SVGElement} Highcharts.ClipRectElement\n */\n/**\n * The font metrics.\n *\n * @interface Highcharts.FontMetricsObject\n */ /**\n* The baseline relative to the top of the box.\n*\n* @name Highcharts.FontMetricsObject#b\n* @type {number}\n*/ /**\n* The font size.\n*\n* @name Highcharts.FontMetricsObject#f\n* @type {number}\n*/ /**\n* The line height.\n*\n* @name Highcharts.FontMetricsObject#h\n* @type {number}\n*/\n/**\n * An object containing `x` and `y` properties for the position of an element.\n *\n * @interface Highcharts.PositionObject\n */ /**\n* X position of the element.\n* @name Highcharts.PositionObject#x\n* @type {number}\n*/ /**\n* Y position of the element.\n* @name Highcharts.PositionObject#y\n* @type {number}\n*/\n/**\n * A rectangle.\n *\n * @interface Highcharts.RectangleObject\n */ /**\n* Height of the rectangle.\n* @name Highcharts.RectangleObject#height\n* @type {number}\n*/ /**\n* Width of the rectangle.\n* @name Highcharts.RectangleObject#width\n* @type {number}\n*/ /**\n* Horizontal position of the rectangle.\n* @name Highcharts.RectangleObject#x\n* @type {number}\n*/ /**\n* Vertical position of the rectangle.\n* @name Highcharts.RectangleObject#y\n* @type {number}\n*/\n/**\n * The shadow options.\n *\n * @interface Highcharts.ShadowOptionsObject\n */ /**\n* The shadow color.\n* @name Highcharts.ShadowOptionsObject#color\n* @type {Highcharts.ColorString|undefined}\n* @default ${palette.neutralColor100}\n*/ /**\n* The horizontal offset from the element.\n*\n* @name Highcharts.ShadowOptionsObject#offsetX\n* @type {number|undefined}\n* @default 1\n*/ /**\n* The vertical offset from the element.\n* @name Highcharts.ShadowOptionsObject#offsetY\n* @type {number|undefined}\n* @default 1\n*/ /**\n* The shadow opacity.\n*\n* @name Highcharts.ShadowOptionsObject#opacity\n* @type {number|undefined}\n* @default 0.15\n*/ /**\n* The shadow width or distance from the element.\n* @name Highcharts.ShadowOptionsObject#width\n* @type {number|undefined}\n* @default 3\n*/\n/**\n * @interface Highcharts.SizeObject\n */ /**\n* @name Highcharts.SizeObject#height\n* @type {number}\n*/ /**\n* @name Highcharts.SizeObject#width\n* @type {number}\n*/\n/**\n * Array of path commands, that will go into the `d` attribute of an SVG\n * element.\n *\n * @typedef {Array<(Array<Highcharts.SVGPathCommand>|Array<Highcharts.SVGPathCommand,number>|Array<Highcharts.SVGPathCommand,number,number>|Array<Highcharts.SVGPathCommand,number,number,number,number>|Array<Highcharts.SVGPathCommand,number,number,number,number,number,number>|Array<Highcharts.SVGPathCommand,number,number,number,number,number,number,number>)>} Highcharts.SVGPathArray\n */\n/**\n * Possible path commands in an SVG path array. Valid values are `A`, `C`, `H`,\n * `L`, `M`, `Q`, `S`, `T`, `V`, `Z`.\n *\n * @typedef {string} Highcharts.SVGPathCommand\n * @validvalue [\"a\",\"c\",\"h\",\"l\",\"m\",\"q\",\"s\",\"t\",\"v\",\"z\",\"A\",\"C\",\"H\",\"L\",\"M\",\"Q\",\"S\",\"T\",\"V\",\"Z\"]\n */\n/**\n * An extendable collection of functions for defining symbol paths. Symbols are\n * used internally for point markers, button and label borders and backgrounds,\n * or custom shapes. Extendable by adding to {@link SVGRenderer#symbols}.\n *\n * @interface Highcharts.SymbolDictionary\n */ /**\n* @name Highcharts.SymbolDictionary#[key:string]\n* @type {Function|undefined}\n*/ /**\n* @name Highcharts.SymbolDictionary#arc\n* @type {Function|undefined}\n*/ /**\n* @name Highcharts.SymbolDictionary#callout\n* @type {Function|undefined}\n*/ /**\n* @name Highcharts.SymbolDictionary#circle\n* @type {Function|undefined}\n*/ /**\n* @name Highcharts.SymbolDictionary#diamond\n* @type {Function|undefined}\n*/ /**\n* @name Highcharts.SymbolDictionary#square\n* @type {Function|undefined}\n*/ /**\n* @name Highcharts.SymbolDictionary#triangle\n* @type {Function|undefined}\n*/\n/**\n * Can be one of `arc`, `callout`, `circle`, `diamond`, `square`, `triangle`,\n * and `triangle-down`. Symbols are used internally for point markers, button\n * and label borders and backgrounds, or custom shapes. Extendable by adding to\n * {@link SVGRenderer#symbols}.\n *\n * @typedef {\"arc\"|\"callout\"|\"circle\"|\"diamond\"|\"square\"|\"triangle\"|\"triangle-down\"} Highcharts.SymbolKeyValue\n */\n/**\n * Additional options, depending on the actual symbol drawn.\n *\n * @interface Highcharts.SymbolOptionsObject\n */ /**\n* The anchor X position for the `callout` symbol. This is where the chevron\n* points to.\n*\n* @name Highcharts.SymbolOptionsObject#anchorX\n* @type {number|undefined}\n*/ /**\n* The anchor Y position for the `callout` symbol. This is where the chevron\n* points to.\n*\n* @name Highcharts.SymbolOptionsObject#anchorY\n* @type {number|undefined}\n*/ /**\n* The end angle of an `arc` symbol.\n*\n* @name Highcharts.SymbolOptionsObject#end\n* @type {number|undefined}\n*/ /**\n* Whether to draw `arc` symbol open or closed.\n*\n* @name Highcharts.SymbolOptionsObject#open\n* @type {boolean|undefined}\n*/ /**\n* The radius of an `arc` symbol, or the border radius for the `callout` symbol.\n*\n* @name Highcharts.SymbolOptionsObject#r\n* @type {number|undefined}\n*/ /**\n* The start angle of an `arc` symbol.\n*\n* @name Highcharts.SymbolOptionsObject#start\n* @type {number|undefined}\n*/\n(''); // Keeps doclets above in transpiled file\n\n;// ./code/es5/es-modules/Core/Renderer/HTML/HTMLElement.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar HTMLElement_extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d,\n b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d,\n b) { d.__proto__ = b; }) ||\n function (d,\n b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (undefined && undefined.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\n\n\nvar composed = Core_Globals.composed;\n\n\nvar HTMLElement_attr = Core_Utilities.attr, HTMLElement_css = Core_Utilities.css, HTMLElement_createElement = Core_Utilities.createElement, HTMLElement_defined = Core_Utilities.defined, HTMLElement_extend = Core_Utilities.extend, HTMLElement_getAlignFactor = Core_Utilities.getAlignFactor, HTMLElement_isNumber = Core_Utilities.isNumber, HTMLElement_pInt = Core_Utilities.pInt, HTMLElement_pushUnique = Core_Utilities.pushUnique;\n/**\n * The opacity and visibility properties are set as attributes on the main\n * element and SVG groups, and as identical CSS properties on the HTML element\n * and the ancestry divs. (#3542)\n *\n * @private\n */\nfunction commonSetter(value, key, elem) {\n var _a;\n var style = ((_a = this.div) === null || _a === void 0 ? void 0 : _a.style) || elem.style;\n SVG_SVGElement.prototype[\"\" + key + \"Setter\"].call(this, value, key, elem);\n if (style) {\n style[key] = value;\n }\n}\n/**\n * Decorate each SVG group in the ancestry line. Each SVG `g` element that\n * contains children with useHTML, will receive a `div` element counterpart to\n * contain the HTML span. These div elements are translated and styled like\n * original `g` counterparts.\n *\n * @private\n */\nvar decorateSVGGroup = function (g, container) {\n var _a;\n if (!g.div) {\n var className = HTMLElement_attr(g.element, 'class'),\n cssProto_1 = g.css;\n // Create the parallel HTML group\n var div_1 = HTMLElement_createElement('div', className ? { className: className } : void 0, __assign(__assign({ \n // Add HTML specific styles\n position: 'absolute', left: \"\" + (g.translateX || 0) + \"px\", top: \"\" + (g.translateY || 0) + \"px\" }, g.styles), { \n // Add g attributes that correspond to CSS\n display: g.display, opacity: g.opacity, visibility: g.visibility }), \n // The top group is appended to container\n ((_a = g.parentGroup) === null || _a === void 0 ? void 0 : _a.div) || container);\n g.classSetter = function (value, key, element) {\n element.setAttribute('class', value);\n div_1.className = value;\n };\n /**\n * Common translate setter for X and Y on the HTML group.\n *\n * Reverted the fix for #6957 due to positioning problems and offline\n * export (#7254, #7280, #7529)\n * @private\n */\n g.translateXSetter = g.translateYSetter = function (value, key) {\n g[key] = value;\n div_1.style[key === 'translateX' ? 'left' : 'top'] = \"\" + value + \"px\";\n g.doTransform = true;\n };\n g.opacitySetter = g.visibilitySetter = commonSetter;\n // Extend the parent group's css function by updating the parallel div\n // counterpart with the same style.\n g.css = function (styles) {\n // Call the base css method. The `parentGroup` can be either an\n // SVGElement or an SVGLabel, in which the css method is extended\n // (#19200).\n cssProto_1.call(g, styles);\n // #6794\n if (styles.cursor) {\n div_1.style.cursor = styles.cursor;\n }\n // #18821\n if (styles.pointerEvents) {\n div_1.style.pointerEvents = styles.pointerEvents;\n }\n return g;\n };\n // Event handling\n g.on = function () {\n SVG_SVGElement.prototype.on.apply({\n element: div_1,\n onEvents: g.onEvents\n }, arguments);\n return g;\n };\n g.div = div_1;\n }\n return g.div;\n};\n/* *\n *\n * Class\n *\n * */\nvar HTMLElement = /** @class */ (function (_super) {\n HTMLElement_extends(HTMLElement, _super);\n /* *\n *\n * Functions\n *\n * */\n function HTMLElement(renderer, nodeName) {\n var _this = _super.call(this,\n renderer,\n nodeName) || this;\n _this.css(__assign({ position: 'absolute' }, (renderer.styledMode ? {} : {\n fontFamily: renderer.style.fontFamily,\n fontSize: renderer.style.fontSize\n })));\n return _this;\n }\n /* *\n *\n * Static Functions\n *\n * */\n /**\n * Compose\n * @private\n */\n HTMLElement.compose = function (SVGRendererClass) {\n if (HTMLElement_pushUnique(composed, this.compose)) {\n /**\n * Create a HTML text node. This is used by the SVG renderer `text`\n * and `label` functions through the `useHTML` parameter.\n *\n * @private\n */\n SVGRendererClass.prototype.html = function (str, x, y) {\n return new HTMLElement(this, 'span')\n // Set the default attributes\n .attr({\n text: str,\n x: Math.round(x),\n y: Math.round(y)\n });\n };\n }\n };\n /**\n * Get the correction in X and Y positioning as the element is rotated.\n * @private\n */\n HTMLElement.prototype.getSpanCorrection = function (width, baseline, alignCorrection) {\n this.xCorr = -width * alignCorrection;\n this.yCorr = -baseline;\n };\n /**\n * Apply CSS to HTML elements. This is used in text within SVG rendering.\n * @private\n */\n HTMLElement.prototype.css = function (styles) {\n var element = this.element, \n // When setting or unsetting the width style, we need to update\n // transform (#8809)\n isSettingWidth = (element.tagName === 'SPAN' &&\n styles &&\n 'width' in styles),\n textWidth = isSettingWidth && styles.width;\n var doTransform;\n if (isSettingWidth) {\n delete styles.width;\n this.textWidth = HTMLElement_pInt(textWidth) || void 0;\n doTransform = true;\n }\n // Some properties require other properties to be set\n if ((styles === null || styles === void 0 ? void 0 : styles.textOverflow) === 'ellipsis') {\n styles.overflow = 'hidden';\n }\n if (styles === null || styles === void 0 ? void 0 : styles.lineClamp) {\n styles.display = '-webkit-box';\n styles.WebkitLineClamp = styles.lineClamp;\n styles.WebkitBoxOrient = 'vertical';\n styles.overflow = 'hidden';\n }\n // SVG natively supports setting font size as numbers. With HTML, the\n // font size should behave in the same way (#21624).\n if (HTMLElement_isNumber(Number(styles === null || styles === void 0 ? void 0 : styles.fontSize))) {\n styles.fontSize = styles.fontSize + 'px';\n }\n HTMLElement_extend(this.styles, styles);\n HTMLElement_css(element, styles);\n // Now that all styles are applied, to the transform\n if (doTransform) {\n this.updateTransform();\n }\n return this;\n };\n /**\n * The useHTML method for calculating the bounding box based on offsets.\n * Called internally from the `SVGElement.getBBox` function and subsequently\n * rotated.\n *\n * @private\n */\n HTMLElement.prototype.htmlGetBBox = function () {\n var element = this.element;\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: element.offsetWidth,\n height: element.offsetHeight\n };\n };\n /**\n * Batch update styles and attributes related to transform\n *\n * @private\n */\n HTMLElement.prototype.updateTransform = function () {\n var _this = this;\n var _a;\n // Aligning non added elements is expensive\n if (!this.added) {\n this.alignOnAdd = true;\n return;\n }\n var _b = this, element = _b.element, renderer = _b.renderer, rotation = _b.rotation, rotationOriginX = _b.rotationOriginX, rotationOriginY = _b.rotationOriginY, scaleX = _b.scaleX, scaleY = _b.scaleY, styles = _b.styles, _c = _b.textAlign, textAlign = _c === void 0 ? 'left' : _c, textWidth = _b.textWidth, _d = _b.translateX, translateX = _d === void 0 ? 0 : _d, _e = _b.translateY, translateY = _e === void 0 ? 0 : _e, _f = _b.x, x = _f === void 0 ? 0 : _f, _g = _b.y, y = _g === void 0 ? 0 : _g, _h = styles.display, display = _h === void 0 ? 'block' : _h, whiteSpace = styles.whiteSpace;\n // Get the pixel length of the text\n var getTextPxLength = function () {\n if (_this.textPxLength) {\n return _this.textPxLength;\n }\n // Reset multiline/ellipsis in order to read width (#4928,\n // #5417)\n HTMLElement_css(element, {\n width: '',\n whiteSpace: whiteSpace || 'nowrap'\n });\n return element.offsetWidth;\n };\n // Apply translate\n HTMLElement_css(element, {\n marginLeft: \"\" + translateX + \"px\",\n marginTop: \"\" + translateY + \"px\"\n });\n if (element.tagName === 'SPAN') {\n var currentTextTransform = [\n rotation,\n textAlign,\n element.innerHTML,\n textWidth,\n this.textAlign\n ].join(','), parentPadding = (((_a = this.parentGroup) === null || _a === void 0 ? void 0 : _a.padding) * -1) || 0;\n var baseline = void 0;\n // Update textWidth. Use the memoized textPxLength if possible, to\n // avoid the getTextPxLength function using elem.offsetWidth.\n // Calling offsetWidth affects rendering time as it forces layout\n // (#7656).\n if (textWidth !== this.oldTextWidth) { // #983, #1254\n var textPxLength = getTextPxLength(),\n textWidthNum = textWidth || 0;\n if (((textWidthNum > this.oldTextWidth) ||\n textPxLength > textWidthNum) && (\n // Only set the width if the text is able to word-wrap,\n // or text-overflow is ellipsis (#9537)\n /[ \\-]/.test(element.textContent || element.innerText) ||\n element.style.textOverflow === 'ellipsis')) {\n HTMLElement_css(element, {\n width: ((textPxLength > textWidthNum) ||\n rotation ||\n scaleX) ?\n textWidth + 'px' :\n 'auto', // #16261\n display: display,\n whiteSpace: whiteSpace || 'normal' // #3331\n });\n this.oldTextWidth = textWidth;\n }\n }\n // Do the calculations and DOM access only if properties changed\n if (currentTextTransform !== this.cTT) {\n baseline = renderer.fontMetrics(element).b;\n // Renderer specific handling of span rotation, but only if we\n // have something to update.\n if (HTMLElement_defined(rotation) &&\n ((rotation !== (this.oldRotation || 0)) ||\n (textAlign !== this.oldAlign))) {\n this.setSpanRotation(rotation, parentPadding, parentPadding);\n }\n this.getSpanCorrection(\n // Avoid elem.offsetWidth if we can, it affects rendering\n // time heavily (#7656)\n ((!HTMLElement_defined(rotation) &&\n !this.textWidth &&\n this.textPxLength) || // #7920\n element.offsetWidth), baseline, HTMLElement_getAlignFactor(textAlign));\n }\n // Apply position with correction and rotation origin\n var _j = this,\n _k = _j.xCorr,\n xCorr = _k === void 0 ? 0 : _k,\n _l = _j.yCorr,\n yCorr = _l === void 0 ? 0 : _l,\n rotOriginX = (rotationOriginX !== null && rotationOriginX !== void 0 ? rotationOriginX : x) - xCorr - x - parentPadding,\n rotOriginY = (rotationOriginY !== null && rotationOriginY !== void 0 ? rotationOriginY : y) - yCorr - y - parentPadding,\n styles_1 = {\n left: \"\" + (x + xCorr) + \"px\",\n top: \"\" + (y + yCorr) + \"px\",\n textAlign: textAlign,\n transformOrigin: \"\" + rotOriginX + \"px \" + rotOriginY + \"px\"\n };\n if (scaleX || scaleY) {\n styles_1.transform = \"scale(\".concat(scaleX !== null && scaleX !== void 0 ? scaleX : 1, \",\").concat(scaleY !== null && scaleY !== void 0 ? scaleY : 1, \")\");\n }\n HTMLElement_css(element, styles_1);\n // Record current text transform\n this.cTT = currentTextTransform;\n this.oldRotation = rotation;\n this.oldAlign = textAlign;\n }\n };\n /**\n * Set the rotation of an individual HTML span.\n * @private\n */\n HTMLElement.prototype.setSpanRotation = function (rotation, originX, originY) {\n // CSS transform and transform-origin both supported without prefix\n // since Firefox 16 (2012), IE 10 (2012), Chrome 36 (2014), Safari 9\n // (2015).;\n HTMLElement_css(this.element, {\n transform: \"rotate(\".concat(rotation, \"deg)\"),\n transformOrigin: \"\" + originX + \"% \" + originY + \"px\"\n });\n };\n /**\n * Add the element to a group wrapper. For HTML elements, a parallel div\n * will be created for each ancenstor SVG `g` element.\n *\n * @private\n */\n HTMLElement.prototype.add = function (parentGroup) {\n var container = this.renderer.box\n .parentNode,\n parents = [];\n var div;\n this.parentGroup = parentGroup;\n // Create a parallel divs to hold the HTML elements\n if (parentGroup) {\n div = parentGroup.div;\n if (!div) {\n // Read the parent chain into an array and read from top\n // down\n var svgGroup = parentGroup;\n while (svgGroup) {\n parents.push(svgGroup);\n // Move up to the next parent group\n svgGroup = svgGroup.parentGroup;\n }\n // Decorate each of the ancestor group elements with a parallel\n // div that reflects translation and styling\n for (var _i = 0, _a = parents.reverse(); _i < _a.length; _i++) {\n var parentGroup_1 = _a[_i];\n div = decorateSVGGroup(parentGroup_1, container);\n }\n }\n }\n (div || container).appendChild(this.element);\n this.added = true;\n if (this.alignOnAdd) {\n this.updateTransform();\n }\n return this;\n };\n /**\n * Text setter\n * @private\n */\n HTMLElement.prototype.textSetter = function (value) {\n if (value !== this.textStr) {\n delete this.bBox;\n delete this.oldTextWidth;\n HTML_AST.setElementHTML(this.element, value !== null && value !== void 0 ? value : '');\n this.textStr = value;\n this.doTransform = true;\n }\n };\n /**\n * Align setter\n *\n * @private\n */\n HTMLElement.prototype.alignSetter = function (value) {\n this.alignValue = this.textAlign = value;\n this.doTransform = true;\n };\n /**\n * Various setters which rely on update transform\n * @private\n */\n HTMLElement.prototype.xSetter = function (value, key) {\n this[key] = value;\n this.doTransform = true;\n };\n return HTMLElement;\n}(SVG_SVGElement));\n// Some shared setters\nvar proto = HTMLElement.prototype;\nproto.visibilitySetter = proto.opacitySetter = commonSetter;\nproto.ySetter =\n proto.rotationSetter =\n proto.rotationOriginXSetter =\n proto.rotationOriginYSetter = proto.xSetter;\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var HTML_HTMLElement = (HTMLElement);\n\n;// ./code/es5/es-modules/Core/Axis/AxisDefaults.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n * Namespace\n *\n * */\nvar AxisDefaults;\n(function (AxisDefaults) {\n /* *\n *\n * Constants\n *\n * */\n /**\n * The X axis or category axis. Normally this is the horizontal axis,\n * though if the chart is inverted this is the vertical axis. In case of\n * multiple axes, the xAxis node is an array of configuration objects.\n *\n * See the [Axis class](/class-reference/Highcharts.Axis) for programmatic\n * access to the axis.\n *\n * @productdesc {highmaps}\n * In Highmaps, the axis is hidden, but it is used behind the scenes to\n * control features like zooming and panning. Zooming is in effect the same\n * as setting the extremes of one of the exes.\n *\n * @type {*|Array<*>}\n * @optionparent xAxis\n */\n AxisDefaults.xAxis = {\n /**\n * When using multiple axis, the ticks of two or more opposite axes\n * will automatically be aligned by adding ticks to the axis or axes\n * with the least ticks, as if `tickAmount` were specified.\n *\n * This can be prevented by setting `alignTicks` to false. If the grid\n * lines look messy, it's a good idea to hide them for the secondary\n * axis by setting `gridLineWidth` to 0.\n *\n * If `startOnTick` or `endOnTick` in an Axis options are set to false,\n * then the `alignTicks ` will be disabled for the Axis.\n *\n * Disabled for logarithmic axes.\n *\n * @product highcharts highstock gantt\n */\n alignTicks: true,\n /**\n * Whether to allow decimals in this axis' ticks. When counting\n * integers, like persons or hits on a web page, decimals should\n * be avoided in the labels. By default, decimals are allowed on small\n * scale axes.\n *\n * @see [minTickInterval](#xAxis.minTickInterval)\n *\n * @sample {highcharts|highstock} highcharts/yaxis/allowdecimals-true/\n * True by default\n * @sample {highcharts|highstock} highcharts/yaxis/allowdecimals-false/\n * False\n *\n * @type {boolean|undefined}\n * @default undefined\n * @since 2.0\n */\n allowDecimals: void 0,\n /**\n * When using an alternate grid color, a band is painted across the\n * plot area between every other grid line.\n *\n * @sample {highcharts} highcharts/yaxis/alternategridcolor/\n * Alternate grid color on the Y axis\n * @sample {highstock} stock/xaxis/alternategridcolor/\n * Alternate grid color on the Y axis\n *\n * @type {Highcharts.ColorType}\n * @apioption xAxis.alternateGridColor\n */\n /**\n * An array defining breaks in the axis, the sections defined will be\n * left out and all the points shifted closer to each other.\n *\n * @productdesc {highcharts}\n * Requires that the broken-axis.js module is loaded.\n *\n * @sample {highcharts} highcharts/axisbreak/break-simple/\n * Simple break\n * @sample {highcharts|highstock} highcharts/axisbreak/break-visualized/\n * Advanced with callback\n * @sample {highstock} stock/demo/intraday-breaks/\n * Break on nights and weekends\n *\n * @type {Array<*>}\n * @since 4.1.0\n * @product highcharts highstock gantt\n * @apioption xAxis.breaks\n */\n /**\n * A number indicating how much space should be left between the start\n * and the end of the break. The break size is given in axis units,\n * so for instance on a `datetime` axis, a break size of 3600000 would\n * indicate the equivalent of an hour.\n *\n * @type {number}\n * @default 0\n * @since 4.1.0\n * @product highcharts highstock gantt\n * @apioption xAxis.breaks.breakSize\n */\n /**\n * The axis value where the break starts. On datetime axes, this may be\n * a date string.\n *\n * @type {number|string}\n * @since 4.1.0\n * @product highcharts highstock gantt\n * @apioption xAxis.breaks.from\n */\n /**\n * Defines an interval after which the break appears again. By default\n * the breaks do not repeat.\n *\n * @type {number}\n * @default 0\n * @since 4.1.0\n * @product highcharts highstock gantt\n * @apioption xAxis.breaks.repeat\n */\n /**\n * The axis value where the break ends. On datetime axes, this may be\n * a date string.\n *\n * @type {number|string}\n * @since 4.1.0\n * @product highcharts highstock gantt\n * @apioption xAxis.breaks.to\n */\n /**\n * If categories are present for the xAxis, names are used instead of\n * numbers for that axis.\n *\n * Since Highcharts 3.0, categories can also\n * be extracted by giving each point a [name](#series.data) and setting\n * axis [type](#xAxis.type) to `category`. However, if you have multiple\n * series, best practice remains defining the `categories` array.\n *\n * Example: `categories: ['Apples', 'Bananas', 'Oranges']`\n *\n * @sample {highcharts} highcharts/demo/line-labels/\n * With\n * @sample {highcharts} highcharts/xaxis/categories/\n * Without\n *\n * @type {Array<string>}\n * @product highcharts gantt\n * @apioption xAxis.categories\n */\n /**\n * The highest allowed value for automatically computed axis extremes.\n *\n * @see [floor](#xAxis.floor)\n *\n * @sample {highcharts|highstock} highcharts/yaxis/floor-ceiling/\n * Floor and ceiling\n *\n * @type {number}\n * @since 4.0\n * @product highcharts highstock gantt\n * @apioption xAxis.ceiling\n */\n /**\n * A class name that opens for styling the axis by CSS, especially in\n * Highcharts styled mode. The class name is applied to group elements\n * for the grid, axis elements and labels.\n *\n * @sample {highcharts|highstock|highmaps} highcharts/css/axis/\n * Multiple axes with separate styling\n *\n * @type {string}\n * @since 5.0.0\n * @apioption xAxis.className\n */\n /**\n * Configure a crosshair that follows either the mouse pointer or the\n * hovered point.\n *\n * In styled mode, the crosshairs are styled in the\n * `.highcharts-crosshair`, `.highcharts-crosshair-thin` or\n * `.highcharts-xaxis-category` classes.\n *\n * @productdesc {highstock}\n * In Highcharts stock, by default, the crosshair is enabled on the\n * X axis and disabled on the Y axis.\n *\n * @sample {highcharts} highcharts/xaxis/crosshair-both/\n * Crosshair on both axes\n * @sample {highstock} stock/xaxis/crosshairs-xy/\n * Crosshair on both axes, with y axis label\n * @sample {highmaps} highcharts/xaxis/crosshair-both/\n * Crosshair on both axes\n *\n * @declare Highcharts.AxisCrosshairOptions\n * @type {boolean|*}\n * @default false\n * @since 4.1\n * @apioption xAxis.crosshair\n */\n /**\n * The value on a perpendicular axis where this axis should cross. This\n * is typically used on mathematical plots where the axes cross at 0.\n * When `crossing` is set, space will not be reserved at the sides of\n * the chart for axis labels and title, so those may be clipped. In this\n * case it is better to place the axes without the `crossing` option.\n *\n * @type {number}\n * @sample highcharts/xaxis/crossing\n * Function plot with axes crossing at 0\n * @since 11.0.1\n * @apioption xAxis.crossing\n */\n /**\n * A class name for the crosshair, especially as a hook for styling.\n *\n * @type {string}\n * @since 5.0.0\n * @apioption xAxis.crosshair.className\n */\n /**\n * The color of the crosshair. Defaults to `#cccccc` for numeric and\n * datetime axes, and `rgba(204,214,235,0.25)` for category axes, where\n * the crosshair by default highlights the whole category.\n *\n * @sample {highcharts|highstock|highmaps} highcharts/xaxis/crosshair-customized/\n * Customized crosshairs\n *\n * @type {Highcharts.ColorType}\n * @default #cccccc\n * @since 4.1\n * @apioption xAxis.crosshair.color\n */\n /**\n * The dash style for the crosshair. See\n * [plotOptions.series.dashStyle](#plotOptions.series.dashStyle)\n * for possible values.\n *\n * @sample {highcharts|highmaps} highcharts/xaxis/crosshair-dotted/\n * Dotted crosshair\n * @sample {highstock} stock/xaxis/crosshair-dashed/\n * Dashed X axis crosshair\n *\n * @type {Highcharts.DashStyleValue}\n * @default Solid\n * @since 4.1\n * @apioption xAxis.crosshair.dashStyle\n */\n /**\n * A label on the axis next to the crosshair.\n *\n * In styled mode, the label is styled with the\n * `.highcharts-crosshair-label` class.\n *\n * @sample {highstock} stock/xaxis/crosshair-label/\n * Crosshair labels\n * @sample {highstock} highcharts/css/crosshair-label/\n * Style mode\n *\n * @declare Highcharts.AxisCrosshairLabelOptions\n * @since 2.1\n * @product highstock\n * @apioption xAxis.crosshair.label\n */\n /**\n * Alignment of the label compared to the axis. Defaults to `\"left\"` for\n * right-side axes, `\"right\"` for left-side axes and `\"center\"` for\n * horizontal axes.\n *\n * @type {Highcharts.AlignValue}\n * @since 2.1\n * @product highstock\n * @apioption xAxis.crosshair.label.align\n */\n /**\n * The background color for the label. Defaults to the related series\n * color, or `#666666` if that is not available.\n *\n * @type {Highcharts.ColorType}\n * @since 2.1\n * @product highstock\n * @apioption xAxis.crosshair.label.backgroundColor\n */\n /**\n * The border color for the crosshair label\n *\n * @type {Highcharts.ColorType}\n * @since 2.1\n * @product highstock\n * @apioption xAxis.crosshair.label.borderColor\n */\n /**\n * The border corner radius of the crosshair label.\n *\n * @type {number}\n * @default 3\n * @since 2.1.10\n * @product highstock\n * @apioption xAxis.crosshair.label.borderRadius\n */\n /**\n * The border width for the crosshair label.\n *\n * @type {number}\n * @default 0\n * @since 2.1\n * @product highstock\n * @apioption xAxis.crosshair.label.borderWidth\n */\n /**\n * Flag to enable crosshair's label.\n *\n * @sample {highstock} stock/xaxis/crosshairs-xy/\n * Enabled label for yAxis' crosshair\n *\n * @type {boolean}\n * @default false\n * @since 2.1\n * @product highstock\n * @apioption xAxis.crosshair.label.enabled\n */\n /**\n * A format string for the crosshair label. Defaults to `{value}` for\n * numeric axes and `{value:%b %d, %Y}` for datetime axes.\n *\n * @type {string}\n * @since 2.1\n * @product highstock\n * @apioption xAxis.crosshair.label.format\n */\n /**\n * Formatter function for the label text.\n *\n * @type {Highcharts.XAxisCrosshairLabelFormatterCallbackFunction}\n * @since 2.1\n * @product highstock\n * @apioption xAxis.crosshair.label.formatter\n */\n /**\n * Padding inside the crosshair label.\n *\n * @type {number}\n * @default 8\n * @since 2.1\n * @product highstock\n * @apioption xAxis.crosshair.label.padding\n */\n /**\n * The shape to use for the label box.\n *\n * @type {string}\n * @default callout\n * @since 2.1\n * @product highstock\n * @apioption xAxis.crosshair.label.shape\n */\n /**\n * Text styles for the crosshair label.\n *\n * @type {Highcharts.CSSObject}\n * @default {\"color\": \"white\", \"fontWeight\": \"normal\", \"fontSize\": \"11px\", \"textAlign\": \"center\"}\n * @since 2.1\n * @product highstock\n * @apioption xAxis.crosshair.label.style\n */\n /**\n * Whether the crosshair should snap to the point or follow the pointer\n * independent of points.\n *\n * @sample {highcharts|highstock} highcharts/xaxis/crosshair-snap-false/\n * True by default\n * @sample {highmaps} maps/demo/latlon-advanced/\n * Snap is false\n *\n * @type {boolean}\n * @default true\n * @since 4.1\n * @apioption xAxis.crosshair.snap\n */\n /**\n * The pixel width of the crosshair. Defaults to 1 for numeric or\n * datetime axes, and for one category width for category axes.\n *\n * @sample {highcharts} highcharts/xaxis/crosshair-customized/\n * Customized crosshairs\n * @sample {highstock} highcharts/xaxis/crosshair-customized/\n * Customized crosshairs\n * @sample {highmaps} highcharts/xaxis/crosshair-customized/\n * Customized crosshairs\n *\n * @type {number}\n * @default 1\n * @since 4.1\n * @apioption xAxis.crosshair.width\n */\n /**\n * The Z index of the crosshair. Higher Z indices allow drawing the\n * crosshair on top of the series or behind the grid lines.\n *\n * @type {number}\n * @default 2\n * @since 4.1\n * @apioption xAxis.crosshair.zIndex\n */\n /**\n * Whether to pan axis. If `chart.panning` is enabled, the option\n * allows to disable panning on an individual axis.\n */\n panningEnabled: true,\n /**\n * The Z index for the axis group.\n *\n * @see [axis.gridZIndex](#xAxis.gridZIndex)\n * @see [axis.labels.zIndex](#xAxis.labels.zIndex)\n */\n zIndex: 2,\n /**\n * Whether to zoom axis. If `chart.zoomType` is set, the option allows\n * to disable zooming on an individual axis.\n *\n * @sample {highcharts} highcharts/xaxis/zoomenabled/\n * Zoom enabled is false\n */\n zoomEnabled: true,\n /**\n * For a datetime axis, the scale will automatically adjust to the\n * appropriate unit. This member gives the default string\n * representations used for each unit. For intermediate values,\n * different units may be used, for example the `day` unit can be used\n * on midnight and `hour` unit be used for intermediate values on the\n * same axis.\n *\n * For an overview of the string or object configuration, see\n * [dateFormat](/class-reference/Highcharts.Time#dateFormat).\n *\n * Defaults to:\n * ```js\n * {\n * millisecond: '%[HMSL]',\n * second: '%[HMS]',\n * minute: '%[HM]',\n * hour: '%[HM]',\n * day: '%[eb]',\n * week: '%[eb]',\n * month: '%[bY]',\n * year: '%Y'\n * }\n * ```\n *\n * @sample {highcharts} highcharts/xaxis/datetimelabelformats-object/\n * Object day format on X axis\n * @sample {highcharts} highcharts/xaxis/datetimelabelformats/\n * String day format on X axis\n * @sample {highstock} stock/xaxis/datetimelabelformats/\n * More information in x axis labels\n *\n * @declare Highcharts.AxisDateTimeLabelFormatsOptions\n * @product highcharts highstock gantt\n */\n dateTimeLabelFormats: {\n /**\n * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject\n * @type {string|*}\n */\n millisecond: {\n /**\n * @type {Array<string|Highcharts.DateTimeFormatOptions>}\n * @default undefined\n * @apioption xAxis.dateTimeLabelFormats.millisecond.list\n */\n /**\n * @type {string|Highcharts.DateTimeFormatOptions}\n * @apioption xAxis.dateTimeLabelFormats.millisecond.main\n */\n main: '%[HMSL]',\n range: false\n },\n /**\n * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject\n * @type {string|*}\n */\n second: {\n /**\n * @type {Array<string|Highcharts.DateTimeFormatOptions>}\n * @default undefined\n * @apioption xAxis.dateTimeLabelFormats.second.list\n */\n /**\n * @type {string|Highcharts.DateTimeFormatOptions}\n * @apioption xAxis.dateTimeLabelFormats.second.main\n */\n main: '%[HMS]',\n range: false\n },\n /**\n * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject\n * @type {string|*}\n */\n minute: {\n /**\n * @type {Array<string|Highcharts.DateTimeFormatOptions>}\n * @default undefined\n * @apioption xAxis.dateTimeLabelFormats.minute.list\n */\n /**\n * @type {string|Highcharts.DateTimeFormatOptions}\n * @apioption xAxis.dateTimeLabelFormats.minute.main\n */\n main: '%[HM]',\n range: false\n },\n /**\n * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject\n * @type {string|*}\n */\n hour: {\n /**\n * @type {Array<string|Highcharts.DateTimeFormatOptions>}\n * @default undefined\n * @apioption xAxis.dateTimeLabelFormats.hour.list\n */\n /**\n * @type {string|Highcharts.DateTimeFormatOptions}\n * @apioption xAxis.dateTimeLabelFormats.hour.main\n */\n main: '%[HM]',\n range: false\n },\n /**\n * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject\n * @type {string|*}\n */\n day: {\n /**\n * @type {Array<string|Highcharts.DateTimeFormatOptions>}\n * @default undefined\n * @apioption xAxis.dateTimeLabelFormats.day.list\n */\n /**\n * @type {string|Highcharts.DateTimeFormatOptions}\n * @apioption xAxis.dateTimeLabelFormats.day.main\n */\n main: '%[eb]'\n },\n /**\n * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject\n * @type {string|*}\n */\n week: {\n /**\n * @type {Array<string|Highcharts.DateTimeFormatOptions>}\n * @default undefined\n * @apioption xAxis.dateTimeLabelFormats.week.list\n */\n /**\n * @type {string|Highcharts.DateTimeFormatOptions}\n * @apioption xAxis.dateTimeLabelFormats.week.main\n */\n main: '%[eb]'\n },\n /**\n * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject\n * @type {string|*}\n */\n month: {\n /**\n * @type {Array<string|Highcharts.DateTimeFormatOptions>}\n * @default undefined\n * @apioption xAxis.dateTimeLabelFormats.month.list\n */\n /**\n * @type {string|Highcharts.DateTimeFormatOptions}\n * @apioption xAxis.dateTimeLabelFormats.month.main\n */\n main: '%[bY]'\n },\n /**\n * @declare Highcharts.AxisDateTimeLabelFormatsOptionsObject\n * @type {string|*}\n */\n year: {\n /**\n * @type {Array<string|Highcharts.DateTimeFormatOptions>}\n * @default undefined\n * @apioption xAxis.dateTimeLabelFormats.year.list\n */\n /**\n * @type {string|Highcharts.DateTimeFormatOptions}\n * @apioption xAxis.dateTimeLabelFormats.year.main\n */\n main: '%Y'\n }\n },\n /**\n * Whether to force the axis to end on a tick. Use this option with\n * the `maxPadding` option to control the axis end.\n *\n * @productdesc {highstock}\n * In Highcharts Stock, `endOnTick` is always `false` when the navigator\n * is enabled, to prevent jumpy scrolling. With disabled navigator\n * enabling `endOnTick` may lead to extending the xAxis to show the last\n * tick, therefore range selector buttons may not have an active state\n * if the axis gets extended.\n *\n * @sample {highcharts} highcharts/yaxis/endontick/\n * True by default\n * @sample {highcharts} highcharts/yaxis/endontick-false/\n * False\n * @sample {highstock} stock/demo/basic-line/\n * True by default\n * @sample {highstock} stock/xaxis/endontick/\n * False\n *\n * @since 1.2.0\n */\n endOnTick: false,\n /**\n * Event handlers for the axis.\n *\n * @type {*}\n * @apioption xAxis.events\n */\n /**\n * An event fired after the breaks have rendered.\n *\n * @see [breaks](#xAxis.breaks)\n *\n * @sample {highcharts} highcharts/axisbreak/break-event/\n * AfterBreak Event\n *\n * @type {Highcharts.AxisEventCallbackFunction}\n * @since 4.1.0\n * @product highcharts gantt\n * @apioption xAxis.events.afterBreaks\n */\n /**\n * As opposed to the `setExtremes` event, this event fires after the\n * final min and max values are computed and corrected for `minRange`.\n *\n * Fires when the minimum and maximum is set for the axis, either by\n * calling the `.setExtremes()` method or by selecting an area in the\n * chart. One parameter, `event`, is passed to the function, containing\n * common event information.\n *\n * The new user set minimum and maximum values can be found by\n * `event.min` and `event.max`. These reflect the axis minimum and\n * maximum in axis values. The actual data extremes are found in\n * `event.dataMin` and `event.dataMax`.\n *\n * @type {Highcharts.AxisSetExtremesEventCallbackFunction}\n * @since 2.3\n * @context Highcharts.Axis\n * @apioption xAxis.events.afterSetExtremes\n */\n /**\n * An event fired when a break from this axis occurs on a point.\n *\n * @see [breaks](#xAxis.breaks)\n *\n * @sample {highcharts} highcharts/axisbreak/break-visualized/\n * Visualization of a Break\n *\n * @type {Highcharts.AxisPointBreakEventCallbackFunction}\n * @since 4.1.0\n * @product highcharts gantt\n * @context Highcharts.Axis\n * @apioption xAxis.events.pointBreak\n */\n /**\n * An event fired when a point falls inside a break from this axis.\n *\n * @type {Highcharts.AxisPointBreakEventCallbackFunction}\n * @product highcharts highstock gantt\n * @context Highcharts.Axis\n * @apioption xAxis.events.pointInBreak\n */\n /**\n * An event fired when a point is outside a break after zoom.\n *\n * @type {Highcharts.AxisPointBreakEventCallbackFunction}\n * @product highcharts highstock gantt\n * @context Highcharts.Axis\n * @apioption xAxis.events.pointBreakOut\n */\n /**\n * Fires when the minimum and maximum is set for the axis, either by\n * calling the `.setExtremes()` method or by selecting an area in the\n * chart. One parameter, `event`, is passed to the function,\n * containing common event information.\n *\n * The new user set minimum and maximum values can be found by\n * `event.min` and `event.max`. These reflect the axis minimum and\n * maximum in data values. When an axis is zoomed all the way out from\n * the \"Reset zoom\" button, `event.min` and `event.max` are null, and\n * the new extremes are set based on `this.dataMin` and `this.dataMax`.\n *\n * @sample {highstock} stock/xaxis/events-setextremes/\n * Log new extremes on x axis\n *\n * @type {Highcharts.AxisSetExtremesEventCallbackFunction}\n * @since 1.2.0\n * @context Highcharts.Axis\n * @apioption xAxis.events.setExtremes\n */\n /**\n * The lowest allowed value for automatically computed axis extremes.\n *\n * @see [ceiling](#yAxis.ceiling)\n *\n * @sample {highcharts} highcharts/yaxis/floor-ceiling/\n * Floor and ceiling\n * @sample {highstock} stock/demo/lazy-loading/\n * Prevent negative stock price on Y axis\n *\n * @type {number}\n * @since 4.0\n * @product highcharts highstock gantt\n * @apioption xAxis.floor\n */\n /**\n * The dash or dot style of the grid lines. For possible values, see\n * [this demonstration](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/plotoptions/series-dashstyle-all/).\n *\n * @sample {highcharts} highcharts/yaxis/gridlinedashstyle/\n * Long dashes\n * @sample {highstock} stock/xaxis/gridlinedashstyle/\n * Long dashes\n *\n * @type {Highcharts.DashStyleValue}\n * @since 1.2\n */\n gridLineDashStyle: 'Solid',\n /**\n * The Z index of the grid lines.\n *\n * @sample {highcharts|highstock} highcharts/xaxis/gridzindex/\n * A Z index of 4 renders the grid above the graph\n *\n * @product highcharts highstock gantt\n *\n * @see [axis.zIndex](#xAxis.zIndex)\n * @see [axis.labels.zIndex](#xAxis.labels.zIndex)\n */\n gridZIndex: 1,\n /**\n * An id for the axis. This can be used after render time to get\n * a pointer to the axis object through `chart.get()`.\n *\n * @sample {highcharts} highcharts/xaxis/id/\n * Get the object\n * @sample {highstock} stock/xaxis/id/\n * Get the object\n *\n * @type {string}\n * @since 1.2.0\n * @apioption xAxis.id\n */\n /**\n * The axis labels show the number or category for each tick.\n *\n * Since v8.0.0: Labels are animated in categorized x-axis with\n * updating data if `tickInterval` and `step` is set to 1.\n *\n * @productdesc {highmaps}\n * X and Y axis labels are by default disabled in Highmaps, but the\n * functionality is inherited from Highcharts and used on `colorAxis`,\n * and can be enabled on X and Y axes too.\n */\n labels: {\n /**\n * What part of the string the given position is anchored to.\n * If `left`, the left side of the string is at the axis position.\n * Can be one of `\"left\"`, `\"center\"` or `\"right\"`. Defaults to\n * an intelligent guess based on which side of the chart the axis\n * is on and the rotation of the label.\n *\n * @see [reserveSpace](#xAxis.labels.reserveSpace)\n *\n * @sample {highcharts} highcharts/xaxis/labels-align-left/\n * Left\n * @sample {highcharts} highcharts/xaxis/labels-align-right/\n * Right\n * @sample {highcharts} highcharts/xaxis/labels-reservespace-true/\n * Left-aligned labels on a vertical category axis\n *\n * @type {Highcharts.AlignValue}\n * @apioption xAxis.labels.align\n */\n /**\n * Whether to allow the axis labels to overlap. When false,\n * overlapping labels are hidden.\n *\n * @sample {highcharts} highcharts/xaxis/labels-allowoverlap-true/\n * X axis labels overlap enabled\n *\n * @type {boolean}\n * @default false\n * @apioption xAxis.labels.allowOverlap\n */\n /**\n * For horizontal axes, the allowed degrees of label rotation\n * to prevent overlapping labels. If there is enough space,\n * labels are not rotated. As the chart gets narrower, it\n * will start rotating the labels -45 degrees, then remove\n * every second label and try again with rotations 0 and -45 etc.\n * Set it to `undefined` to disable rotation, which will\n * cause the labels to word-wrap if possible. Defaults to `[-45]``\n * on bottom and top axes, `undefined` on left and right axes.\n *\n * @sample {highcharts|highstock} highcharts/xaxis/labels-autorotation-default/\n * Default auto rotation of 0 or -45\n * @sample {highcharts|highstock} highcharts/xaxis/labels-autorotation-0-90/\n * Custom graded auto rotation\n *\n * @type {Array<number>}\n * @default undefined\n * @since 4.1.0\n * @product highcharts highstock gantt\n * @apioption xAxis.labels.autoRotation\n */\n /**\n * When each category width is more than this many pixels, we don't\n * apply auto rotation. Instead, we lay out the axis label with word\n * wrap. A lower limit makes sense when the label contains multiple\n * short words that don't extend the available horizontal space for\n * each label.\n *\n * @sample {highcharts} highcharts/xaxis/labels-autorotationlimit/\n * Lower limit\n *\n * @since 4.1.5\n * @product highcharts gantt\n */\n autoRotationLimit: 80,\n /**\n * The label's pixel distance from the perimeter of the plot area.\n * On cartesian charts, this is overridden if the `labels.y` setting\n * is set.\n *\n * @sample {highcharts} highcharts/yaxis/labels-distance/\n * Polar chart, labels centered under the arc\n *\n * @type {number}\n * @product highcharts gantt\n */\n distance: 15,\n /**\n * Enable or disable the axis labels.\n *\n * @sample {highcharts} highcharts/xaxis/labels-enabled/\n * X axis labels disabled\n * @sample {highstock} stock/xaxis/labels-enabled/\n * X axis labels disabled\n *\n */\n enabled: true,\n /**\n * A format string for the axis label. The context is available as\n * format string variables. For example, you can use `{text}` to\n * insert the default formatted text. The recommended way of adding\n * units for the label is using `text`, for example `{text} km`.\n *\n * To add custom numeric or datetime formatting, use `{value}` with\n * formatting, for example `{value:.1f}` or `{value:%Y-%m-%d}`.\n *\n * See\n * [format string](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting)\n * for more examples of formatting.\n *\n * The default value is not specified due to the dynamic\n * nature of the default implementation.\n *\n * @sample {highcharts|highstock} highcharts/yaxis/labels-format/\n * Add units to Y axis label\n * @sample {highcharts} highcharts/xaxis/labels-format-linked/\n * Linked category names\n * @sample {highcharts} highcharts/xaxis/labels-format-custom/\n * Custom number format\n *\n * @type {string}\n * @since 3.0\n * @apioption xAxis.labels.format\n */\n /**\n * Callback JavaScript function to format the label. The value\n * is given by `this.value`. Additional properties for `this` are\n * `axis`, `chart`, `isFirst`, `isLast` and `text` which holds the\n * value of the default formatter.\n *\n * Defaults to a built in function returning a formatted string\n * depending on whether the axis is `category`, `datetime`,\n * `numeric` or other.\n *\n * @sample {highcharts} highcharts/xaxis/labels-formatter-linked/\n * Linked category names\n * @sample {highcharts} highcharts/xaxis/labels-formatter-extended/\n * Modified numeric labels\n * @sample {highstock} stock/xaxis/labels-formatter/\n * Added units on Y axis\n *\n * @type {Highcharts.AxisLabelsFormatterCallbackFunction}\n * @apioption xAxis.labels.formatter\n */\n /**\n * The number of pixels to indent the labels per level in a treegrid\n * axis.\n *\n * @sample gantt/treegrid-axis/demo\n * Indentation 10px by default.\n * @sample gantt/treegrid-axis/indentation-0px\n * Indentation set to 0px.\n *\n * @product gantt\n */\n indentation: 10,\n /**\n * Horizontal axis only. When `staggerLines` is not set,\n * `maxStaggerLines` defines how many lines the axis is allowed to\n * add to automatically avoid overlapping X labels. Set to `1` to\n * disable overlap detection.\n *\n * @deprecated\n * @type {number}\n * @default 5\n * @since 1.3.3\n * @apioption xAxis.labels.maxStaggerLines\n */\n /**\n * How to handle overflowing labels on horizontal axis. If set to\n * `\"allow\"`, it will not be aligned at all. By default it\n * `\"justify\"` labels inside the chart area. If there is room to\n * move it, it will be aligned to the edge, else it will be removed.\n *\n * @since 2.2.5\n * @validvalue [\"allow\", \"justify\"]\n */\n overflow: 'justify',\n /**\n * The pixel padding for axis labels, to ensure white space between\n * them. Defaults to 4 for horizontal axes, 1 for vertical.\n *\n * @type {number}\n * @default undefined\n * @product highcharts gantt\n * @apioption xAxis.labels.padding\n */\n /**\n * Whether to reserve space for the labels. By default, space is\n * reserved for the labels in these cases:\n *\n * * On all horizontal axes.\n * * On vertical axes if `label.align` is `right` on a left-side\n * axis or `left` on a right-side axis.\n * * On vertical axes if `label.align` is `center`.\n *\n * This can be turned off when for example the labels are rendered\n * inside the plot area instead of outside.\n *\n * @see [labels.align](#xAxis.labels.align)\n *\n * @sample {highcharts} highcharts/xaxis/labels-reservespace/\n * No reserved space, labels inside plot\n * @sample {highcharts} highcharts/xaxis/labels-reservespace-true/\n * Left-aligned labels on a vertical category axis\n *\n * @type {boolean}\n * @since 4.1.10\n * @product highcharts highstock gantt\n * @apioption xAxis.labels.reserveSpace\n */\n reserveSpace: void 0,\n /**\n * Rotation of the labels in degrees. When `undefined`, the\n * `autoRotation` option takes precedence.\n *\n * @sample {highcharts} highcharts/xaxis/labels-rotation/\n * X axis labels rotated 90°\n *\n * @type {number}\n * @default 0\n * @apioption xAxis.labels.rotation\n */\n rotation: void 0,\n /**\n * Horizontal axes only. The number of lines to spread the labels\n * over to make room or tighter labels. 0 disables staggering.\n *\n * @sample {highcharts} highcharts/xaxis/labels-staggerlines/\n * Show labels over two lines\n * @sample {highstock} stock/xaxis/labels-staggerlines/\n * Show labels over two lines\n *\n * @since 2.1\n */\n staggerLines: 0,\n /**\n * To show only every _n_'th label on the axis, set the step to _n_.\n * Setting the step to 2 shows every other label.\n *\n * By default, when 0, the step is calculated automatically to avoid\n * overlap. To prevent this, set it to 1\\. This usually only\n * happens on a category axis, and is often a sign that you have\n * chosen the wrong axis type.\n *\n * Read more at\n * [Axis docs](https://www.highcharts.com/docs/chart-concepts/axes)\n * => What axis should I use?\n *\n * @sample {highcharts} highcharts/xaxis/labels-step/\n * Showing only every other axis label on a categorized\n * x-axis\n * @sample {highcharts} highcharts/xaxis/labels-step-auto/\n * Auto steps on a category axis\n *\n * @since 2.1\n */\n step: 0,\n /**\n * Whether to [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n * to render the labels.\n */\n useHTML: false,\n /**\n * The x position offset of all labels relative to the tick\n * positions on the axis. Overrides the `labels.distance` option.\n *\n * @type {number}\n * @apioption xAxis.labels.x\n */\n /**\n * The y position offset of all labels relative to the tick\n * positions on the axis. Overrides the `labels.distance` option.\n *\n * @sample {highcharts} highcharts/xaxis/labels-x/\n * X axis labels placed on grid lines\n *\n * @type {number}\n * @apioption xAxis.labels.y\n */\n /**\n * The Z index for the axis labels.\n *\n * @see [axis.zIndex](#xAxis.zIndex)\n * @see [axis.gridZIndex](#xAxis.gridZIndex)\n */\n zIndex: 7,\n /**\n * CSS styles for the label. Use `lineClamp` to control wrapping of\n * category labels. Use `textOverflow: 'none'` to prevent ellipsis\n * (dots).\n *\n * In styled mode, the labels are styled with the\n * `.highcharts-axis-labels` class.\n *\n * @sample {highcharts} highcharts/xaxis/labels-style/\n * Red X axis labels\n *\n * @type {Highcharts.CSSObject}\n */\n style: {\n /** @internal */\n color: \"#333333\" /* Palette.neutralColor80 */,\n /** @internal */\n cursor: 'default',\n /**\n * @type {number|string}\n */\n fontSize: '0.8em',\n /** @internal */\n textOverflow: 'ellipsis'\n }\n },\n /**\n * The left position as the horizontal axis. If it's a number, it is\n * interpreted as pixel position relative to the chart.\n *\n * Since Highcharts v5.0.13: If it's a percentage string, it is\n * interpreted as percentages of the plot width, offset from plot area\n * left.\n *\n * @sample {highcharts} highcharts/xaxis/axis-position-properties\n * Different axis position properties\n *\n * @type {number|string}\n * @product highcharts highstock\n * @apioption xAxis.left\n */\n /**\n * The top position as the vertical axis. If it's a number, it is\n * interpreted as pixel position relative to the chart.\n *\n * Since Highcharts 2: If it's a percentage string, it is interpreted\n * as percentages of the plot height, offset from plot area top.\n *\n * @sample {highcharts} highcharts/xaxis/axis-position-properties\n * Different axis position properties\n *\n * @type {number|string}\n * @product highcharts highstock\n * @apioption xAxis.top\n */\n /**\n * Index of another axis that this axis is linked to. When an axis is\n * linked to a master axis, it will take the same extremes as\n * the master, but as assigned by min or max or by setExtremes.\n * It can be used to show additional info, or to ease reading the\n * chart by duplicating the scales.\n *\n * @sample {highcharts} highcharts/xaxis/linkedto/\n * Different string formats of the same date\n * @sample {highcharts} highcharts/yaxis/linkedto/\n * Y values on both sides\n *\n * @type {number}\n * @since 2.0.2\n * @product highcharts highstock gantt\n * @apioption xAxis.linkedTo\n */\n /**\n * The maximum value of the axis. If `undefined`, the max value is\n * automatically calculated.\n *\n * If a datetime string is passed, it is parsed into epoch time\n * according to the time zone given in [time.timezone](#time.timezone).\n *\n * If the [endOnTick](#yAxis.endOnTick) option is true, the `max` value\n * might be rounded up.\n *\n * If a [tickAmount](#yAxis.tickAmount) is set, the axis may be extended\n * beyond the set max in order to reach the given number of ticks. The\n * same may happen in a chart with multiple axes, determined by [chart.\n * alignTicks](#chart), where a `tickAmount` is applied internally.\n *\n * @sample {highcharts} highcharts/yaxis/max-200/\n * Y axis max of 200\n * @sample {highcharts} highcharts/yaxis/max-logarithmic/\n * Y axis max on logarithmic axis\n * @sample {highstock} stock/xaxis/min-max/\n * Fixed min and max on X axis\n *\n * @type {number|string|null}\n * @apioption xAxis.max\n */\n /**\n * Padding of the max value relative to the length of the axis. A\n * padding of 0.05 will make a 100px axis 5px longer. This is useful\n * when you don't want the highest data value to appear on the edge\n * of the plot area. When the axis' `max` option is set or a max extreme\n * is set using `axis.setExtremes()`, the maxPadding will be ignored.\n *\n * @productdesc {highstock}\n * For an [ordinal](#xAxis.ordinal) axis, `minPadding` and `maxPadding`\n * are ignored. Use [overscroll](#xAxis.overscroll) instead.\n *\n * @sample {highcharts} highcharts/yaxis/maxpadding/\n * Max padding of 0.25 on y axis\n * @sample {highstock} stock/xaxis/minpadding-maxpadding/\n * Greater min- and maxPadding\n * @sample {highmaps} maps/chart/plotbackgroundcolor-gradient/\n * Add some padding\n *\n * @default {highcharts} 0.01\n * @default {highstock|highmaps} 0\n * @since 1.2.0\n */\n maxPadding: 0.01,\n /**\n * Deprecated. Use `minRange` instead.\n *\n * @deprecated\n * @type {number}\n * @product highcharts highstock\n * @apioption xAxis.maxZoom\n */\n /**\n * The minimum value of the axis. If `undefined`, the min value is\n * automatically calculated.\n *\n * If a datetime string is passed, it is parsed into epoch time\n * according to the time zone given in [time.timezone](#time.timezone).\n *\n * If the [startOnTick](#yAxis.startOnTick) option is true (default),\n * the `min` value might be rounded down.\n *\n * The automatically calculated minimum value is also affected by\n * [floor](#yAxis.floor), [softMin](#yAxis.softMin),\n * [minPadding](#yAxis.minPadding), [minRange](#yAxis.minRange)\n * as well as [series.threshold](#plotOptions.series.threshold)\n * and [series.softThreshold](#plotOptions.series.softThreshold).\n *\n * @sample {highcharts} highcharts/yaxis/min-startontick-false/\n * -50 with startOnTick to false\n * @sample {highcharts} highcharts/yaxis/min-startontick-true/\n * -50 with startOnTick true by default\n * @sample {highstock} stock/xaxis/min-max/\n * Set min and max on X axis\n *\n * @type {number|string|null}\n * @apioption xAxis.min\n */\n /**\n * The dash or dot style of the minor grid lines. For possible values,\n * see [this demonstration](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/plotoptions/series-dashstyle-all/).\n *\n * @sample {highcharts} highcharts/yaxis/minorgridlinedashstyle/\n * Long dashes on minor grid lines\n * @sample {highstock} stock/xaxis/minorgridlinedashstyle/\n * Long dashes on minor grid lines\n *\n * @type {Highcharts.DashStyleValue}\n * @since 1.2\n */\n minorGridLineDashStyle: 'Solid',\n /**\n * Specific tick interval in axis units for the minor ticks. On a linear\n * axis, if `\"auto\"`, the minor tick interval is calculated as a fifth\n * of the tickInterval. If `undefined`, minor ticks are not shown.\n *\n * On logarithmic axes, the unit is the power of the value. For example,\n * setting the minorTickInterval to 1 puts one tick on each of 0.1, 1,\n * 10, 100 etc. Setting the minorTickInterval to 0.1 produces 9 ticks\n * between 1 and 10, 10 and 100 etc.\n *\n * If user settings dictate minor ticks to become too dense, they don't\n * make sense, and will be ignored to prevent performance problems.\n *\n * @sample {highcharts} highcharts/yaxis/minortickinterval-null/\n * Undefined by default\n * @sample {highcharts} highcharts/yaxis/minortickinterval-5/ 5 units\n * @sample {highcharts} highcharts/yaxis/minortickinterval-log-auto/\n * \"auto\"\n * @sample {highcharts} highcharts/yaxis/minortickinterval-log/ 0.1\n * @sample {highstock} stock/demo/basic-line/ Null by default\n * @sample {highstock} stock/xaxis/minortickinterval-auto/ \"auto\"\n *\n * @type {number|'auto'}\n * @apioption xAxis.minorTickInterval\n */\n /**\n * The pixel length of the minor tick marks.\n *\n * @sample {highcharts} highcharts/yaxis/minorticklength/\n * 10px on Y axis\n * @sample {highstock} stock/xaxis/minorticks/\n * 10px on Y axis\n */\n minorTickLength: 2,\n /**\n * The position of the minor tick marks relative to the axis line.\n * Can be one of `inside` and `outside`.\n *\n * @sample {highcharts} highcharts/yaxis/minortickposition-outside/\n * Outside by default\n * @sample {highcharts} highcharts/yaxis/minortickposition-inside/\n * Inside\n * @sample {highstock} stock/xaxis/minorticks/\n * Inside\n *\n * @validvalue [\"inside\", \"outside\"]\n */\n minorTickPosition: 'outside',\n /**\n * Enable or disable minor ticks. The interval between the minor ticks\n * can be controlled either by the\n * [minorTicksPerMajor](#xAxis.minorTicksPerMajor) setting, or as an\n * absolute [minorTickInterval](#xAxis.minorTickInterval) value.\n *\n * On a logarithmic axis, minor ticks are laid out based on a best\n * guess, attempting to enter an approximate number of minor ticks\n * between each major tick based on\n * [minorTicksPerMajor](#xAxis.minorTicksPerMajor).\n *\n * Prior to v6.0.0, ticks were enabled in auto layout by setting\n * `minorTickInterval` to `\"auto\"`.\n *\n * @productdesc {highcharts} On axes using\n * [categories](#xAxis.categories), minor ticks are not supported.\n *\n * @sample {highcharts} highcharts/yaxis/minorticks-true/ Enabled on\n * linear Y axis\n *\n * @type {boolean}\n * @default false\n * @since 6.0.0\n * @apioption xAxis.minorTicks\n */\n /**\n * The number of minor ticks per major tick. Works for `linear`,\n * `logarithmic` and `datetime` axes.\n *\n * @sample {highcharts} highcharts/yaxis/minortickspermajor/\n * 2 minor ticks per major tick on Y axis\n *\n * @since 11.0.0\n *\n * @type {number}\n */\n minorTicksPerMajor: 5,\n /**\n * The pixel width of the minor tick mark.\n *\n * @sample {highcharts} highcharts/yaxis/minortickwidth/\n * 3px width\n * @sample {highstock} stock/xaxis/minorticks/\n * 1px width\n *\n * @type {number}\n * @default 0\n * @apioption xAxis.minorTickWidth\n */\n /**\n * Padding of the min value relative to the length of the axis. A\n * padding of 0.05 will make a 100px axis 5px longer. This is useful\n * when you don't want the lowest data value to appear on the edge\n * of the plot area. When the axis' `min` option is set or a min extreme\n * is set using `axis.setExtremes()`, the minPadding will be ignored.\n *\n * @productdesc {highstock}\n * For an [ordinal](#xAxis.ordinal) axis, `minPadding` and `maxPadding`\n * are ignored. Use [overscroll](#xAxis.overscroll) instead.\n *\n * @sample {highcharts} highcharts/yaxis/minpadding/\n * Min padding of 0.2\n * @sample {highstock} stock/xaxis/minpadding-maxpadding/\n * Greater min- and maxPadding\n * @sample {highmaps} maps/chart/plotbackgroundcolor-gradient/\n * Add some padding\n *\n * @default {highcharts} 0.01\n * @default {highstock|highmaps} 0\n * @since 1.2.0\n * @product highcharts highstock gantt\n */\n minPadding: 0.01,\n /**\n * The minimum range to display on this axis. The entire axis will not\n * be allowed to span over a smaller interval than this. For example,\n * for a datetime axis the main unit is milliseconds. If minRange is\n * set to 3600000, you can't zoom in more than to one hour.\n *\n * The default minRange for the x axis is five times the smallest\n * interval between any of the data points.\n *\n * On a logarithmic axis, the unit for the minimum range is the power.\n * So a minRange of 1 means that the axis can be zoomed to 10-100,\n * 100-1000, 1000-10000 etc.\n *\n * **Note**: The `minPadding`, `maxPadding`, `startOnTick` and\n * `endOnTick` settings also affect how the extremes of the axis\n * are computed.\n *\n * @sample {highcharts} highcharts/xaxis/minrange/\n * Minimum range of 5\n * @sample {highstock} stock/xaxis/minrange/\n * Max zoom of 6 months overrides user selections\n *\n * @type {number}\n * @apioption xAxis.minRange\n */\n /**\n * The minimum tick interval allowed in axis values. For example on\n * zooming in on an axis with daily data, this can be used to prevent\n * the axis from showing hours. Defaults to the closest distance between\n * two points on the axis.\n *\n * @type {number}\n * @since 2.3.0\n * @apioption xAxis.minTickInterval\n */\n /**\n * The distance in pixels from the plot area to the axis line.\n * A positive offset moves the axis with it's line, labels and ticks\n * away from the plot area. This is typically used when two or more\n * axes are displayed on the same side of the plot. With multiple\n * axes the offset is dynamically adjusted to avoid collision, this\n * can be overridden by setting offset explicitly.\n *\n * @sample {highcharts} highcharts/yaxis/offset/\n * Y axis offset of 70\n * @sample {highcharts} highcharts/yaxis/offset-centered/\n * Axes positioned in the center of the plot\n * @sample {highstock} stock/xaxis/offset/\n * Y axis offset by 70 px\n *\n * @type {number}\n */\n offset: void 0,\n /**\n * Whether to display the axis on the opposite side of the normal. The\n * normal is on the left side for vertical axes and bottom for\n * horizontal, so the opposite sides will be right and top respectively.\n * This is typically used with dual or multiple axes.\n *\n * @sample {highcharts} highcharts/yaxis/opposite/\n * Secondary Y axis opposite\n * @sample {highstock} stock/xaxis/opposite/\n * Y axis on left side\n *\n * @default {highcharts|highstock|highmaps} false\n * @default {gantt} true\n * @type Boolean\n * @apioption xAxis.opposite\n */\n /**\n * In an ordinal axis, the points are equally spaced in the chart\n * regardless of the actual time or x distance between them. This means\n * that missing data periods (e.g. nights or weekends for a stock chart)\n * will not take up space in the chart.\n * Having `ordinal: false` will show any gaps created by the `gapSize`\n * setting proportionate to their duration.\n *\n * In stock charts the X axis is ordinal by default, unless\n * the boost module is used and at least one of the series' data length\n * exceeds the [boostThreshold](#series.line.boostThreshold).\n *\n * For an ordinal axis, `minPadding` and `maxPadding` are ignored. Use\n * [overscroll](#xAxis.overscroll) instead.\n *\n * @sample {highstock} stock/xaxis/ordinal-true/\n * True by default\n * @sample {highstock} stock/xaxis/ordinal-false/\n * False\n *\n * @see [overscroll](#xAxis.overscroll)\n *\n * @type {boolean}\n * @default true\n * @since 1.1\n * @product highstock\n * @apioption xAxis.ordinal\n */\n /**\n * Additional range on the right side of the xAxis. Works similar to\n * `xAxis.maxPadding`, but the value is set in terms of axis values,\n * percentage or pixels.\n *\n * If it's a number, it is interpreted as axis values, which in a\n * datetime axis equals milliseconds.\n *\n * If it's a percentage string, is interpreted as percentages of axis\n * length. An overscroll of 50% will make a 100px axis 50px longer.\n *\n * If it's a pixel string, it is interpreted as a fixed pixel value, but\n * limited to 90% of the axis length.\n *\n * @sample {highstock} stock/xaxis/overscroll/ One minute overscroll\n * with live data\n * @sample {highstock} stock/xaxis/overscroll-percent/ Overscroll set in\n * percentage\n * @sample {highstock} stock/xaxis/overscroll-pixel/ Overscroll set in\n * pixels\n *\n * @type {number | string}\n * @default 0\n * @since 6.0.0\n * @product highstock\n * @apioption xAxis.overscroll\n */\n /**\n * Refers to the index in the [panes](#panes) array. Used for circular\n * gauges and polar charts. When the option is not set then first pane\n * will be used.\n *\n * @sample highcharts/demo/gauge-vu-meter\n * Two gauges with different center\n *\n * @type {number}\n * @product highcharts\n * @apioption xAxis.pane\n */\n /**\n * The zoomed range to display when only defining one or none of `min`\n * or `max`. For example, to show the latest month, a range of one month\n * can be set.\n *\n * @sample {highstock} stock/xaxis/range/\n * Setting a zoomed range when the rangeSelector is disabled\n *\n * @type {number}\n * @product highstock\n * @apioption xAxis.range\n */\n /**\n * Whether to reverse the axis so that the highest number is closest\n * to the origin. If the chart is inverted, the x axis is reversed by\n * default.\n *\n * @sample {highcharts} highcharts/yaxis/reversed/\n * Reversed Y axis\n * @sample {highstock} stock/xaxis/reversed/\n * Reversed Y axis\n *\n * @type {boolean}\n * @default undefined\n * @apioption xAxis.reversed\n */\n reversed: void 0,\n /**\n * This option determines how stacks should be ordered within a group.\n * For example reversed xAxis also reverses stacks, so first series\n * comes last in a group. To keep order like for non-reversed xAxis\n * enable this option.\n *\n * @sample {highcharts} highcharts/xaxis/reversedstacks/\n * Reversed stacks comparison\n * @sample {highstock} highcharts/xaxis/reversedstacks/\n * Reversed stacks comparison\n *\n * @since 6.1.1\n * @product highcharts highstock\n */\n reversedStacks: false,\n /**\n * An optional scrollbar to display on the X axis in response to\n * limiting the minimum and maximum of the axis values.\n *\n * In styled mode, all the presentational options for the scrollbar are\n * replaced by the classes `.highcharts-scrollbar-thumb`,\n * `.highcharts-scrollbar-arrow`, `.highcharts-scrollbar-button`,\n * `.highcharts-scrollbar-rifles` and `.highcharts-scrollbar-track`.\n *\n * @sample {highstock} stock/yaxis/heatmap-scrollbars/\n * Heatmap with both scrollbars\n *\n * @extends scrollbar\n * @since 4.2.6\n * @product highstock\n * @apioption xAxis.scrollbar\n */\n /**\n * Whether to show the axis line and title when the axis has no data.\n *\n * @sample {highcharts} highcharts/yaxis/showempty/\n * When clicking the legend to hide series, one axis preserves\n * line and title, the other doesn't\n * @sample {highstock} highcharts/yaxis/showempty/\n * When clicking the legend to hide series, one axis preserves\n * line and title, the other doesn't\n *\n * @since 1.1\n */\n showEmpty: true,\n /**\n * Whether to show the first tick label.\n *\n * @sample {highcharts} highcharts/xaxis/showfirstlabel-false/\n * Set to false on X axis\n * @sample {highstock} stock/xaxis/showfirstlabel/\n * Labels below plot lines on Y axis\n */\n showFirstLabel: true,\n /**\n * Whether to show the last tick label. Defaults to `true` on cartesian\n * charts, and `false` on polar charts.\n *\n * @sample {highcharts} highcharts/xaxis/showlastlabel-true/\n * Set to true on X axis\n * @sample {highstock} stock/xaxis/showfirstlabel/\n * Labels below plot lines on Y axis\n *\n * @type {boolean}\n * @default undefined\n * @product highcharts highstock gantt\n */\n showLastLabel: true,\n /**\n * A soft maximum for the axis. If the series data maximum is less than\n * this, the axis will stay at this maximum, but if the series data\n * maximum is higher, the axis will flex to show all data.\n *\n * @sample highcharts/yaxis/softmin-softmax/\n * Soft min and max\n *\n * @type {number}\n * @since 5.0.1\n * @product highcharts highstock gantt\n * @apioption xAxis.softMax\n */\n /**\n * A soft minimum for the axis. If the series data minimum is greater\n * than this, the axis will stay at this minimum, but if the series\n * data minimum is lower, the axis will flex to show all data.\n *\n * @sample highcharts/yaxis/softmin-softmax/\n * Soft min and max\n *\n * @type {number}\n * @since 5.0.1\n * @product highcharts highstock gantt\n * @apioption xAxis.softMin\n */\n /**\n * For datetime axes, this decides where to put the tick between weeks.\n * 0 = Sunday, 1 = Monday.\n *\n * @sample {highcharts} highcharts/xaxis/startofweek-monday/\n * Monday by default\n * @sample {highcharts} highcharts/xaxis/startofweek-sunday/\n * Sunday\n * @sample {highstock} stock/xaxis/startofweek-1\n * Monday by default\n * @sample {highstock} stock/xaxis/startofweek-0\n * Sunday\n *\n * @product highcharts highstock gantt\n */\n startOfWeek: 1,\n /**\n * Whether to force the axis to start on a tick. Use this option with\n * the `minPadding` option to control the axis start.\n *\n * @productdesc {highstock}\n * In Highcharts Stock, `startOnTick` is always `false` when\n * the navigator is enabled, to prevent jumpy scrolling.\n *\n * @sample {highcharts} highcharts/xaxis/startontick-false/\n * False by default\n * @sample {highcharts} highcharts/xaxis/startontick-true/\n * True\n *\n * @since 1.2.0\n */\n startOnTick: false,\n /**\n * The amount of ticks to draw on the axis. This opens up for aligning\n * the ticks of multiple charts or panes within a chart. This option\n * overrides the `tickPixelInterval` option.\n *\n * This option only has an effect on linear axes. Datetime, logarithmic\n * or category axes are not affected.\n *\n * @sample {highcharts} highcharts/yaxis/tickamount/\n * 8 ticks on Y axis\n * @sample {highstock} highcharts/yaxis/tickamount/\n * 8 ticks on Y axis\n *\n * @type {number}\n * @since 4.1.0\n * @product highcharts highstock gantt\n * @apioption xAxis.tickAmount\n */\n /**\n * The interval of the tick marks in axis units. When `undefined`, the\n * tick interval is computed to approximately follow the\n * [tickPixelInterval](#xAxis.tickPixelInterval) on linear and datetime\n * axes. On categorized axes, a `undefined` tickInterval will default to\n * 1, one category. Note that datetime axes are based on milliseconds,\n * so for example an interval of one day is expressed as\n * `24 * 3600 * 1000`.\n *\n * On logarithmic axes, the tickInterval is based on powers, so a\n * tickInterval of 1 means one tick on each of 0.1, 1, 10, 100 etc. A\n * tickInterval of 2 means a tick of 0.1, 10, 1000 etc. A tickInterval\n * of 0.2 puts a tick on 0.1, 0.2, 0.4, 0.6, 0.8, 1, 2, 4, 6, 8, 10, 20,\n * 40 etc.\n *\n *\n * If the tickInterval is too dense for labels to be drawn, Highcharts\n * may remove ticks.\n *\n * If the chart has multiple axes, the [alignTicks](#chart.alignTicks)\n * option may interfere with the `tickInterval` setting.\n *\n * @see [tickPixelInterval](#xAxis.tickPixelInterval)\n * @see [tickPositions](#xAxis.tickPositions)\n * @see [tickPositioner](#xAxis.tickPositioner)\n *\n * @sample {highcharts} highcharts/xaxis/tickinterval-5/\n * Tick interval of 5 on a linear axis\n * @sample {highstock} stock/xaxis/tickinterval/\n * Tick interval of 0.01 on Y axis\n *\n * @type {number}\n * @apioption xAxis.tickInterval\n */\n /**\n * The pixel length of the main tick marks.\n *\n * @sample {highcharts} highcharts/xaxis/ticklength/\n * 20 px tick length on the X axis\n * @sample {highstock} stock/xaxis/ticks/\n * Formatted ticks on X axis\n */\n tickLength: 10,\n /**\n * If tickInterval is `null` this option sets the approximate pixel\n * interval of the tick marks. Not applicable to categorized axis.\n *\n * The tick interval is also influenced by the [minTickInterval](\n * #xAxis.minTickInterval) option, that, by default prevents ticks from\n * being denser than the data points.\n *\n * @see [tickInterval](#xAxis.tickInterval)\n * @see [tickPositioner](#xAxis.tickPositioner)\n * @see [tickPositions](#xAxis.tickPositions)\n *\n * @sample {highcharts} highcharts/xaxis/tickpixelinterval-50/\n * 50 px on X axis\n * @sample {highstock} stock/xaxis/tickpixelinterval/\n * 200 px on X axis\n */\n tickPixelInterval: 100,\n /**\n * For categorized axes only. If `on` the tick mark is placed in the\n * center of the category, if `between` the tick mark is placed between\n * categories. The default is `between` if the `tickInterval` is 1, else\n * `on`. In order to render tick marks on a category axis it is necessary\n * to provide a [tickWidth](#xAxis.tickWidth).\n *\n * @sample {highcharts} highcharts/xaxis/tickmarkplacement-between/\n * \"between\" by default\n * @sample {highcharts} highcharts/xaxis/tickmarkplacement-on/\n * \"on\"\n *\n * @product highcharts gantt\n * @validvalue [\"on\", \"between\"]\n */\n tickmarkPlacement: 'between',\n /**\n * The position of the major tick marks relative to the axis line.\n * Can be one of `inside` and `outside`.\n *\n * @sample {highcharts} highcharts/xaxis/tickposition-outside/\n * \"outside\" by default\n * @sample {highcharts} highcharts/xaxis/tickposition-inside/\n * \"inside\"\n * @sample {highstock} stock/xaxis/ticks/\n * Formatted ticks on X axis\n *\n * @validvalue [\"inside\", \"outside\"]\n */\n tickPosition: 'outside',\n /**\n * A callback function returning array defining where the ticks are\n * laid out on the axis. This overrides the default behaviour of\n * [tickPixelInterval](#xAxis.tickPixelInterval) and [tickInterval](\n * #xAxis.tickInterval). The automatic tick positions are accessible\n * through `this.tickPositions` and can be modified by the callback.\n *\n * @see [tickPositions](#xAxis.tickPositions)\n *\n * @sample {highcharts} highcharts/xaxis/tickpositions-tickpositioner/\n * Demo of tickPositions and tickPositioner\n * @sample {highstock} highcharts/xaxis/tickpositions-tickpositioner/\n * Demo of tickPositions and tickPositioner\n *\n * @type {Highcharts.AxisTickPositionerCallbackFunction}\n * @apioption xAxis.tickPositioner\n */\n /**\n * An array defining where the ticks are laid out on the axis. This\n * overrides the default behaviour of [tickPixelInterval](\n * #xAxis.tickPixelInterval) and [tickInterval](#xAxis.tickInterval).\n *\n * @see [tickPositioner](#xAxis.tickPositioner)\n *\n * @sample {highcharts} highcharts/xaxis/tickpositions-tickpositioner/\n * Demo of tickPositions and tickPositioner\n * @sample {highstock} highcharts/xaxis/tickpositions-tickpositioner/\n * Demo of tickPositions and tickPositioner\n *\n * @type {Array<number>}\n * @apioption xAxis.tickPositions\n */\n /**\n * The pixel width of the major tick marks. Defaults to 0 on category\n * axes, otherwise 1.\n *\n * In styled mode, the stroke width is given in the `.highcharts-tick`\n * class, but in order for the element to be generated on category axes,\n * the option must be explicitly set to 1.\n *\n * @sample {highcharts} highcharts/xaxis/tickwidth/\n * 10 px width\n * @sample {highcharts} highcharts/css/axis-grid/\n * Styled mode\n * @sample {highstock} stock/xaxis/ticks/\n * Formatted ticks on X axis\n * @sample {highstock} highcharts/css/axis-grid/\n * Styled mode\n *\n * @type {undefined|number}\n * @default {highstock} 1\n * @default {highmaps} 0\n * @apioption xAxis.tickWidth\n */\n /**\n * The axis title, showing next to the axis line.\n *\n * @productdesc {highmaps}\n * In Highmaps, the axis is hidden by default, but adding an axis title\n * is still possible. X axis and Y axis titles will appear at the bottom\n * and left by default.\n */\n title: {\n /**\n * Alignment of the title relative to the axis values. Possible\n * values are \"low\", \"middle\" or \"high\".\n *\n * @sample {highcharts} highcharts/xaxis/title-align-low/\n * \"low\"\n * @sample {highcharts} highcharts/xaxis/title-align-center/\n * \"middle\" by default\n * @sample {highcharts} highcharts/xaxis/title-align-high/\n * \"high\"\n * @sample {highcharts} highcharts/yaxis/title-offset/\n * Place the Y axis title on top of the axis\n * @sample {highstock} stock/xaxis/title-align/\n * Aligned to \"high\" value\n *\n * @type {Highcharts.AxisTitleAlignValue}\n */\n align: 'middle',\n /**\n * Deprecated. Set the `text` to `undefined` to disable the title.\n *\n * @deprecated\n * @type {boolean}\n * @product highcharts\n * @apioption xAxis.title.enabled\n */\n /**\n * The pixel distance between the axis labels or line and the title.\n * Defaults to 0 for horizontal axes, 10 for vertical\n *\n * @sample {highcharts} highcharts/xaxis/title-margin/\n * Y axis title margin of 60\n *\n * @type {number}\n * @apioption xAxis.title.margin\n */\n /**\n * The distance of the axis title from the axis line. By default,\n * this distance is computed from the offset width of the labels,\n * the labels' distance from the axis and the title's margin.\n * However when the offset option is set, it overrides all this.\n *\n * @sample {highcharts} highcharts/yaxis/title-offset/\n * Place the axis title on top of the axis\n * @sample {highstock} highcharts/yaxis/title-offset/\n * Place the axis title on top of the Y axis\n *\n * @type {number}\n * @since 2.2.0\n * @apioption xAxis.title.offset\n */\n /**\n * Whether to reserve space for the title when laying out the axis.\n *\n * @type {boolean}\n * @default true\n * @since 5.0.11\n * @product highcharts highstock gantt\n * @apioption xAxis.title.reserveSpace\n */\n /**\n * The rotation of the text in degrees. 0 is horizontal, 270 is\n * vertical reading from bottom to top. Defaults to 0 for horizontal\n * axes, 270 for left-side axes and 90 for right-side axes.\n *\n * @sample {highcharts} highcharts/yaxis/title-offset/\n * Horizontal\n *\n * @type {number}\n * @default undefined\n * @apioption xAxis.title.rotation\n */\n /**\n * The actual text of the axis title. It can contain basic HTML tags\n * like `b`, `i` and `span` with style.\n *\n * @sample {highcharts} highcharts/xaxis/title-text/\n * Custom HTML\n * @sample {highstock} stock/xaxis/title-text/\n * Titles for both axes\n *\n * @type {string|null}\n * @apioption xAxis.title.text\n */\n /**\n * Alignment of the text, can be `\"left\"`, `\"right\"` or `\"center\"`.\n * Default alignment depends on the\n * [title.align](xAxis.title.align):\n *\n * Horizontal axes:\n * - for `align` = `\"low\"`, `textAlign` is set to `left`\n * - for `align` = `\"middle\"`, `textAlign` is set to `center`\n * - for `align` = `\"high\"`, `textAlign` is set to `right`\n *\n * Vertical axes:\n * - for `align` = `\"low\"` and `opposite` = `true`, `textAlign` is\n * set to `right`\n * - for `align` = `\"low\"` and `opposite` = `false`, `textAlign` is\n * set to `left`\n * - for `align` = `\"middle\"`, `textAlign` is set to `center`\n * - for `align` = `\"high\"` and `opposite` = `true` `textAlign` is\n * set to `left`\n * - for `align` = `\"high\"` and `opposite` = `false` `textAlign` is\n * set to `right`\n *\n * @type {Highcharts.AlignValue}\n * @apioption xAxis.title.textAlign\n */\n /**\n * Whether to [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n * to render the axis title.\n *\n * @product highcharts highstock gantt\n */\n useHTML: false,\n /**\n * Horizontal pixel offset of the title position.\n *\n * @since 4.1.6\n * @product highcharts highstock gantt\n */\n x: 0,\n /**\n * Vertical pixel offset of the title position.\n *\n * @product highcharts highstock gantt\n */\n y: 0,\n /**\n * CSS styles for the title. If the title text is longer than the\n * axis length, it will wrap to multiple lines by default. This can\n * be customized by setting the `lineClamp` property, by setting a\n * specific `width` or by setting `whiteSpace: 'nowrap'`.\n *\n * In styled mode, the stroke width is given in the\n * `.highcharts-axis-title` class.\n *\n * @sample {highcharts} highcharts/xaxis/title-style/\n * Red\n * @sample {highcharts} highcharts/css/axis/\n * Styled mode\n *\n * @type {Highcharts.CSSObject}\n */\n style: {\n /** @internal */\n color: \"#666666\" /* Palette.neutralColor60 */,\n /**\n * @type {number|string}\n */\n fontSize: '0.8em'\n }\n },\n /**\n * The type of axis. Can be one of `linear`, `logarithmic`, `datetime`\n * or `category`. In a datetime axis, the numbers are given in\n * milliseconds, and tick marks are placed on appropriate values like\n * full hours or days. In a category axis, the\n * [point names](#series.line.data.name) of the chart's series are used\n * for categories, if not a [categories](#xAxis.categories) array is\n * defined.\n *\n * @sample {highcharts} highcharts/xaxis/type-linear/\n * Linear\n * @sample {highcharts} highcharts/yaxis/type-log/\n * Logarithmic\n * @sample {highcharts} highcharts/yaxis/type-log-minorgrid/\n * Logarithmic with minor grid lines\n * @sample {highcharts} highcharts/xaxis/type-log-both/\n * Logarithmic on two axes\n * @sample {highcharts} highcharts/yaxis/type-log-negative/\n * Logarithmic with extension to emulate negative values\n *\n * @type {Highcharts.AxisTypeValue}\n * @default linear\n * @product highcharts gantt\n * @apioption xAxis.type\n */\n /**\n * If there are multiple axes on the same side of the chart, the pixel\n * margin between the axes. Defaults to 0 on vertical axes, 15 on\n * horizontal axes.\n *\n * @type {number}\n * @since 7.0.3\n * @apioption xAxis.margin\n */\n /**\n * Applies only when the axis `type` is `category`. When `uniqueNames`\n * is true, points are placed on the X axis according to their names.\n * If the same point name is repeated in the same or another series,\n * the point is placed on the same X position as other points of the\n * same name. When `uniqueNames` is false, the points are laid out in\n * increasing X positions regardless of their names, and the X axis\n * category will take the name of the last point in each position.\n *\n * @sample {highcharts} highcharts/xaxis/uniquenames-true/\n * True by default\n * @sample {highcharts} highcharts/xaxis/uniquenames-false/\n * False\n *\n * @since 4.2.7\n * @product highcharts gantt\n * @type {boolean}\n * @default true\n * @apioption xAxis.uniqueNames\n */\n /**\n * Datetime axis only. An array determining what time intervals the\n * ticks are allowed to fall on. Each array item is an array where the\n * first value is the time unit and the second value another array of\n * allowed multiples.\n *\n * Defaults to:\n * ```js\n * units: [[\n * 'millisecond', // unit name\n * [1, 2, 5, 10, 20, 25, 50, 100, 200, 500] // allowed multiples\n * ], [\n * 'second',\n * [1, 2, 5, 10, 15, 30]\n * ], [\n * 'minute',\n * [1, 2, 5, 10, 15, 30]\n * ], [\n * 'hour',\n * [1, 2, 3, 4, 6, 8, 12]\n * ], [\n * 'day',\n * [1, 2]\n * ], [\n * 'week',\n * [1, 2]\n * ], [\n * 'month',\n * [1, 2, 3, 4, 6]\n * ], [\n * 'year',\n * null\n * ]]\n * ```\n *\n * @sample {highcharts} highcharts/xaxis/units/\n * Axis units demonstrated\n *\n * @type {Array<Array<string,(Array<number>|null)>>}\n * @product highcharts highstock gantt\n * @apioption xAxis.units\n */\n /**\n * Whether axis, including axis title, line, ticks and labels, should\n * be visible.\n *\n * @since 4.1.9\n * @product highcharts highstock gantt\n */\n visible: true,\n /**\n * Color of the minor, secondary grid lines.\n *\n * In styled mode, the stroke width is given in the\n * `.highcharts-minor-grid-line` class.\n *\n * @sample {highcharts} highcharts/yaxis/minorgridlinecolor/\n * Bright grey lines from Y axis\n * @sample {highcharts|highstock} highcharts/css/axis-grid/\n * Styled mode\n * @sample {highstock} stock/xaxis/minorgridlinecolor/\n * Bright grey lines from Y axis\n *\n * @type {Highcharts.ColorType}\n * @default #f2f2f2\n */\n minorGridLineColor: \"#f2f2f2\" /* Palette.neutralColor5 */,\n /**\n * Width of the minor, secondary grid lines.\n *\n * In styled mode, the stroke width is given in the\n * `.highcharts-grid-line` class.\n *\n * @sample {highcharts} highcharts/yaxis/minorgridlinewidth/\n * 2px lines from Y axis\n * @sample {highcharts|highstock} highcharts/css/axis-grid/\n * Styled mode\n * @sample {highstock} stock/xaxis/minorgridlinewidth/\n * 2px lines from Y axis\n */\n minorGridLineWidth: 1,\n /**\n * Color for the minor tick marks.\n *\n * @sample {highcharts} highcharts/yaxis/minortickcolor/\n * Black tick marks on Y axis\n * @sample {highstock} stock/xaxis/minorticks/\n * Black tick marks on Y axis\n *\n * @type {Highcharts.ColorType}\n * @default #999999\n */\n minorTickColor: \"#999999\" /* Palette.neutralColor40 */,\n /**\n * The color of the line marking the axis itself.\n *\n * In styled mode, the line stroke is given in the\n * `.highcharts-axis-line` or `.highcharts-xaxis-line` class.\n *\n * @sample {highcharts} highcharts/yaxis/linecolor/\n * A red line on Y axis\n * @sample {highcharts|highstock} highcharts/css/axis/\n * Axes in styled mode\n * @sample {highstock} stock/xaxis/linecolor/\n * A red line on X axis\n *\n * @type {Highcharts.ColorType}\n */\n lineColor: \"#333333\" /* Palette.neutralColor80 */,\n /**\n * The width of the line marking the axis itself.\n *\n * In styled mode, the stroke width is given in the\n * `.highcharts-axis-line` or `.highcharts-xaxis-line` class.\n *\n * @sample {highcharts} highcharts/yaxis/linecolor/\n * A 1px line on Y axis\n * @sample {highcharts|highstock} highcharts/css/axis/\n * Axes in styled mode\n * @sample {highstock} stock/xaxis/linewidth/\n * A 2px line on X axis\n *\n * @default {highcharts|highstock} 1\n * @default {highmaps} 0\n */\n lineWidth: 1,\n /**\n * Color of the grid lines extending the ticks across the plot area.\n *\n * In styled mode, the stroke is given in the `.highcharts-grid-line`\n * class.\n *\n * @productdesc {highmaps}\n * In Highmaps, the grid lines are hidden by default.\n *\n * @sample {highcharts} highcharts/yaxis/gridlinecolor/\n * Green lines\n * @sample {highcharts|highstock} highcharts/css/axis-grid/\n * Styled mode\n * @sample {highstock} stock/xaxis/gridlinecolor/\n * Green lines\n *\n * @type {Highcharts.ColorType}\n * @default #e6e6e6\n */\n gridLineColor: \"#e6e6e6\" /* Palette.neutralColor10 */,\n /**\n * The width of the grid lines extending the ticks across the plot area.\n * Defaults to 1 on the Y axis and 0 on the X axis, except for 3d\n * charts.\n *\n * In styled mode, the stroke width is given in the\n * `.highcharts-grid-line` class.\n *\n * @sample {highcharts} highcharts/yaxis/gridlinewidth/\n * 2px lines\n * @sample {highcharts|highstock} highcharts/css/axis-grid/\n * Styled mode\n * @sample {highstock} stock/xaxis/gridlinewidth/\n * 2px lines\n *\n * @type {number}\n * @apioption xAxis.gridLineWidth\n */\n gridLineWidth: void 0,\n /**\n * The height as the vertical axis. If it's a number, it is\n * interpreted as pixels.\n *\n * Since Highcharts 2: If it's a percentage string, it is interpreted\n * as percentages of the total plot height.\n *\n * @sample {highcharts} highcharts/xaxis/axis-position-properties\n * Different axis position properties\n *\n * @type {number|string}\n * @product highcharts highstock\n * @apioption xAxis.height\n */\n /**\n * The width as the horizontal axis. If it's a number, it is interpreted\n * as pixels.\n *\n * Since Highcharts v5.0.13: If it's a percentage string, it is\n * interpreted as percentages of the total plot width.\n *\n * @sample {highcharts} highcharts/xaxis/axis-position-properties\n * Different axis position properties\n *\n * @type {number|string}\n * @product highcharts highstock\n * @apioption xAxis.width\n */\n /**\n * Color for the main tick marks.\n *\n * In styled mode, the stroke is given in the `.highcharts-tick`\n * class.\n *\n * @sample {highcharts} highcharts/xaxis/tickcolor/\n * Red ticks on X axis\n * @sample {highcharts|highstock} highcharts/css/axis-grid/\n * Styled mode\n * @sample {highstock} stock/xaxis/ticks/\n * Formatted ticks on X axis\n *\n * @type {Highcharts.ColorType}\n */\n tickColor: \"#333333\" /* Palette.neutralColor80 */\n // `tickWidth: 1`\n };\n /**\n * The Z axis or depth axis for 3D plots.\n *\n * See the [Axis class](/class-reference/Highcharts.Axis) for programmatic\n * access to the axis.\n *\n * @sample {highcharts} highcharts/3d/scatter-zaxis-categories/\n * Z-Axis with Categories\n * @sample {highcharts} highcharts/3d/scatter-zaxis-grid/\n * Z-Axis with styling\n *\n * @type {*|Array<*>}\n * @extends xAxis\n * @since 5.0.0\n * @product highcharts\n * @excluding breaks, crosshair, height, left, lineColor, lineWidth,\n * nameToX, showEmpty, top, width\n * @apioption zAxis\n */\n /**\n * The Y axis or value axis. Normally this is the vertical axis,\n * though if the chart is inverted this is the horizontal axis.\n * In case of multiple axes, the yAxis node is an array of\n * configuration objects.\n *\n * See [the Axis object](/class-reference/Highcharts.Axis) for programmatic\n * access to the axis.\n *\n * @type {*|Array<*>}\n * @extends xAxis\n * @excluding currentDateIndicator,ordinal,overscroll\n * @optionparent yAxis\n */\n AxisDefaults.yAxis = {\n /**\n * The type of axis. Can be one of `linear`, `logarithmic`, `datetime`,\n * `category` or `treegrid`. Defaults to `treegrid` for Gantt charts,\n * `linear` for other chart types.\n *\n * In a datetime axis, the numbers are given in milliseconds, and tick\n * marks are placed on appropriate values, like full hours or days. In a\n * category or treegrid axis, the [point names](#series.line.data.name)\n * of the chart's series are used for categories, if a\n * [categories](#xAxis.categories) array is not defined.\n *\n * @sample {highcharts} highcharts/yaxis/type-log-minorgrid/\n * Logarithmic with minor grid lines\n * @sample {highcharts} highcharts/yaxis/type-log-negative/\n * Logarithmic with extension to emulate negative values\n * @sample {gantt} gantt/treegrid-axis/demo\n * Treegrid axis\n *\n * @type {Highcharts.AxisTypeValue}\n * @default {highcharts} linear\n * @default {gantt} treegrid\n * @product highcharts gantt\n * @apioption yAxis.type\n */\n /**\n * The height of the Y axis. If it's a number, it is interpreted as\n * pixels.\n *\n * Since Highcharts 2: If it's a percentage string, it is interpreted as\n * percentages of the total plot height.\n *\n * @see [yAxis.top](#yAxis.top)\n *\n * @sample {highstock} stock/demo/candlestick-and-volume/\n * Percentage height panes\n *\n * @type {number|string}\n * @product highcharts highstock\n * @apioption yAxis.height\n */\n /**\n * Solid gauge only. Unless [stops](#yAxis.stops) are set, the color\n * to represent the maximum value of the Y axis.\n *\n * @sample {highcharts} highcharts/yaxis/mincolor-maxcolor/\n * Min and max colors\n *\n * @type {Highcharts.ColorType}\n * @default #003399\n * @since 4.0\n * @product highcharts\n * @apioption yAxis.maxColor\n */\n /**\n * Solid gauge only. Unless [stops](#yAxis.stops) are set, the color\n * to represent the minimum value of the Y axis.\n *\n * @sample {highcharts} highcharts/yaxis/mincolor-maxcolor/\n * Min and max color\n *\n * @type {Highcharts.ColorType}\n * @default #e6ebf5\n * @since 4.0\n * @product highcharts\n * @apioption yAxis.minColor\n */\n /**\n * Whether to reverse the axis so that the highest number is closest\n * to the origin.\n *\n * @sample {highcharts} highcharts/yaxis/reversed/\n * Reversed Y axis\n * @sample {highstock} stock/xaxis/reversed/\n * Reversed Y axis\n *\n * @type {boolean}\n * @default {highcharts} false\n * @default {highstock} false\n * @default {highmaps} true\n * @default {gantt} true\n * @apioption yAxis.reversed\n */\n /**\n * If `true`, the first series in a stack will be drawn on top in a\n * positive, non-reversed Y axis. If `false`, the first series is in\n * the base of the stack.\n *\n * @sample {highcharts} highcharts/yaxis/reversedstacks-false/\n * Non-reversed stacks\n * @sample {highstock} highcharts/yaxis/reversedstacks-false/\n * Non-reversed stacks\n *\n * @type {boolean}\n * @default true\n * @since 3.0.10\n * @product highcharts highstock\n * @apioption yAxis.reversedStacks\n */\n reversedStacks: true,\n /**\n * Solid gauge series only. Color stops for the solid gauge. Use this\n * in cases where a linear gradient between a `minColor` and `maxColor`\n * is not sufficient. The stops is an array of tuples, where the first\n * item is a float between 0 and 1 assigning the relative position in\n * the gradient, and the second item is the color.\n *\n * For solid gauges, the Y axis also inherits the concept of\n * [data classes](https://api.highcharts.com/highmaps#colorAxis.dataClasses)\n * from the Highmaps color axis.\n *\n * @sample {highcharts} highcharts/demo/gauge-solid/\n * Gauge with stops\n *\n * @see [minColor](#yAxis.minColor)\n * @see [maxColor](#yAxis.maxColor)\n *\n * @type {Array<Array<number,Highcharts.ColorType>>}\n * @since 4.0\n * @product highcharts\n * @apioption yAxis.stops\n */\n /**\n * The pixel width of the major tick marks.\n *\n * @sample {highcharts} highcharts/xaxis/tickwidth/ 10 px width\n * @sample {highstock} stock/xaxis/ticks/ Formatted ticks on X axis\n *\n * @type {number}\n * @default 0\n * @product highcharts highstock gantt\n * @apioption yAxis.tickWidth\n */\n /**\n * Whether to force the axis to end on a tick. Use this option with\n * the `maxPadding` option to control the axis end.\n *\n * This option is always disabled, when panning type is\n * either `y` or `xy`.\n *\n * @see [type](#chart.panning.type)\n *\n *\n * @sample {highcharts} highcharts/yaxis/endontick/\n * True by default\n * @sample {highcharts} highcharts/yaxis/endontick-false/\n * False\n * @sample {highstock} stock/demo/basic-line/\n * True by default\n * @sample {highstock} stock/xaxis/endontick/\n * False for Y axis\n *\n * @since 1.2.0\n */\n endOnTick: true,\n /**\n * Padding of the max value relative to the length of the axis. A\n * padding of 0.05 will make a 100px axis 5px longer. This is useful\n * when you don't want the highest data value to appear on the edge\n * of the plot area. When the axis' `max` option is set or a max extreme\n * is set using `axis.setExtremes()`, the maxPadding will be ignored.\n *\n * Also the `softThreshold` option takes precedence over `maxPadding`,\n * so if the data is tangent to the threshold, `maxPadding` may not\n * apply unless `softThreshold` is set to false.\n *\n * @sample {highcharts} highcharts/yaxis/maxpadding-02/\n * Max padding of 0.2\n * @sample {highstock} stock/xaxis/minpadding-maxpadding/\n * Greater min- and maxPadding\n *\n * @since 1.2.0\n * @product highcharts highstock gantt\n */\n maxPadding: 0.05,\n /**\n * Padding of the min value relative to the length of the axis. A\n * padding of 0.05 will make a 100px axis 5px longer. This is useful\n * when you don't want the lowest data value to appear on the edge\n * of the plot area. When the axis' `min` option is set or a max extreme\n * is set using `axis.setExtremes()`, the maxPadding will be ignored.\n *\n * Also the `softThreshold` option takes precedence over `minPadding`,\n * so if the data is tangent to the threshold, `minPadding` may not\n * apply unless `softThreshold` is set to false.\n *\n * @sample {highcharts} highcharts/yaxis/minpadding/\n * Min padding of 0.2\n * @sample {highstock} stock/xaxis/minpadding-maxpadding/\n * Greater min- and maxPadding\n *\n * @since 1.2.0\n * @product highcharts highstock gantt\n */\n minPadding: 0.05,\n /**\n * @productdesc {highstock}\n * In Highcharts Stock 1.x, the Y axis was placed\n * on the left side by default.\n *\n * @sample {highcharts} highcharts/yaxis/opposite/\n * Secondary Y axis opposite\n * @sample {highstock} stock/xaxis/opposite/\n * Y axis on left side\n *\n * @type {boolean}\n * @default {highstock} true\n * @default {highcharts} false\n * @product highstock highcharts gantt\n * @apioption yAxis.opposite\n */\n /**\n * @see [tickInterval](#xAxis.tickInterval)\n * @see [tickPositioner](#xAxis.tickPositioner)\n * @see [tickPositions](#xAxis.tickPositions)\n */\n tickPixelInterval: 72,\n /**\n * Whether to show the last tick label.\n *\n * @productdesc {highcharts|gantt}\n * Defaults to `true` on cartesian charts, and `false` on polar charts.\n *\n * @productdesc {highstock}\n * Defaults to `true` for categorized yAxis and `false` for other types\n * of yAxis.\n *\n * @default undefined\n */\n showLastLabel: true,\n /**\n * @extends xAxis.labels\n */\n labels: {\n /**\n * The label's pixel distance from the perimeter of the plot area.\n * On cartesian charts, this is overridden if the `labels.y` setting\n * is set.\n *\n * On polar charts, if it's a percentage string, it is interpreted\n * the same as [series.radius](#plotOptions.gauge.radius), so the\n * label can be aligned under the gauge's shape.\n *\n * @sample {highcharts} highcharts/yaxis/labels-distance/\n * Polar chart, labels centered under the arc\n *\n * @type {number|string}\n * @product highcharts\n * @apioption yAxis.labels.distance\n */\n /**\n * The y position offset of all labels relative to the tick\n * positions on the axis. For polar and radial axis consider the use\n * of the [distance](#yAxis.labels.distance) option.\n *\n * @sample {highcharts} highcharts/xaxis/labels-x/\n * Y axis labels placed on grid lines\n *\n * @type {number}\n * @default {highcharts} 3\n * @default {highstock} -2\n * @default {highmaps} 3\n * @apioption yAxis.labels.y\n */\n /**\n * What part of the string the given position is anchored to. Can\n * be one of `\"left\"`, `\"center\"` or `\"right\"`. The exact position\n * also depends on the `labels.x` setting.\n *\n * Angular gauges and solid gauges defaults to `\"center\"`.\n * Solid gauges with two labels have additional option `\"auto\"`\n * for automatic horizontal and vertical alignment.\n *\n * @sample {highcharts} highcharts/yaxis/labels-align-left/\n * Left\n * @sample {highcharts} highcharts/series-solidgauge/labels-auto-aligned/\n * Solid gauge labels auto aligned\n *\n * @type {Highcharts.AlignValue}\n * @default {highstock} right\n * @apioption yAxis.labels.align\n */\n /**\n * The x position offset of all labels relative to the tick\n * positions on the axis. Defaults to -15 for left axis, 15 for\n * right axis.\n *\n * @sample {highcharts} highcharts/xaxis/labels-x/\n * Y axis labels placed on grid lines\n *\n * @type {number}\n */\n x: void 0\n },\n /**\n * @sample {highcharts} highcharts/yaxis/max-200/\n * Y axis max of 200\n * @sample {highcharts} highcharts/yaxis/max-logarithmic/\n * Y axis max on logarithmic axis\n * @sample {highstock} stock/yaxis/min-max/\n * Fixed min and max on Y axis\n *\n * @apioption yAxis.max\n */\n /**\n * @sample {highcharts} highcharts/yaxis/min-startontick-false/\n * -50 with startOnTick to false\n * @sample {highcharts} highcharts/yaxis/min-startontick-true/\n * -50 with startOnTick true by default\n * @sample {highstock} stock/yaxis/min-max/\n * Fixed min and max on Y axis\n *\n * @apioption yAxis.min\n */\n /**\n * An optional scrollbar to display on the Y axis in response to\n * limiting the minimum an maximum of the axis values.\n *\n * In styled mode, all the presentational options for the scrollbar\n * are replaced by the classes `.highcharts-scrollbar-thumb`,\n * `.highcharts-scrollbar-arrow`, `.highcharts-scrollbar-button`,\n * `.highcharts-scrollbar-rifles` and `.highcharts-scrollbar-track`.\n *\n * @sample {highstock} stock/yaxis/scrollbar/\n * Scrollbar on the Y axis\n *\n * @extends scrollbar\n * @since 4.2.6\n * @product highstock\n * @excluding height\n * @apioption yAxis.scrollbar\n */\n /**\n * Enable the scrollbar on the Y axis.\n *\n * @sample {highstock} stock/yaxis/scrollbar/\n * Enabled on Y axis\n *\n * @type {boolean}\n * @default false\n * @since 4.2.6\n * @product highstock\n * @apioption yAxis.scrollbar.enabled\n */\n /**\n * Pixel margin between the scrollbar and the axis elements.\n *\n * @type {number}\n * @default 10\n * @since 4.2.6\n * @product highstock\n * @apioption yAxis.scrollbar.margin\n */\n /* eslint-disable highcharts/doclet-apioption-last */\n /**\n * Defines the position of the scrollbar. By default, it is positioned\n * on the opposite of the main axis (right side of the chart).\n * However, in the case of RTL languages could be set to `false`\n * which positions the scrollbar on the left.\n *\n * Works only for vertical axes.\n * This means yAxis in a non-inverted chart and xAxis in the inverted.\n *\n * @sample stock/yaxis/scrollbar-opposite/\n * A scrollbar not on the opposite side\n *\n * @type {boolean}\n * @default true\n * @since 9.3.0\n *\n * @apioption yAxis.scrollbar.opposite\n * @apioption xAxis.scrollbar.opposite\n *\n */\n /* eslint-enable highcharts/doclet-apioption-last */\n /**\n * Whether to show the scrollbar when it is fully zoomed out at max\n * range. Setting it to `false` on the Y axis makes the scrollbar stay\n * hidden until the user zooms in, like common in browsers.\n *\n * @type {boolean}\n * @default true\n * @since 4.2.6\n * @product highstock\n * @apioption yAxis.scrollbar.showFull\n */\n /**\n * The width of a vertical scrollbar or height of a horizontal\n * scrollbar. Defaults to 20 on touch devices.\n *\n * @type {number}\n * @default 14\n * @since 4.2.6\n * @product highstock\n * @apioption yAxis.scrollbar.size\n */\n /**\n * Z index of the scrollbar elements.\n *\n * @type {number}\n * @default 3\n * @since 4.2.6\n * @product highstock\n * @apioption yAxis.scrollbar.zIndex\n */\n /**\n * A soft maximum for the axis. If the series data maximum is less\n * than this, the axis will stay at this maximum, but if the series\n * data maximum is higher, the axis will flex to show all data.\n *\n * **Note**: The [series.softThreshold](\n * #plotOptions.series.softThreshold) option takes precedence over this\n * option.\n *\n * @sample highcharts/yaxis/softmin-softmax/\n * Soft min and max\n *\n * @type {number}\n * @since 5.0.1\n * @product highcharts highstock gantt\n * @apioption yAxis.softMax\n */\n /**\n * A soft minimum for the axis. If the series data minimum is greater\n * than this, the axis will stay at this minimum, but if the series\n * data minimum is lower, the axis will flex to show all data.\n *\n * **Note**: The [series.softThreshold](\n * #plotOptions.series.softThreshold) option takes precedence over this\n * option.\n *\n * @sample highcharts/yaxis/softmin-softmax/\n * Soft min and max\n *\n * @type {number}\n * @since 5.0.1\n * @product highcharts highstock gantt\n * @apioption yAxis.softMin\n */\n /**\n * Defines the horizontal alignment of the stack total label. Can be one\n * of `\"left\"`, `\"center\"` or `\"right\"`. The default value is calculated\n * at runtime and depends on orientation and whether the stack is\n * positive or negative.\n *\n * @sample {highcharts} highcharts/yaxis/stacklabels-align-left/\n * Aligned to the left\n * @sample {highcharts} highcharts/yaxis/stacklabels-align-center/\n * Aligned in center\n * @sample {highcharts} highcharts/yaxis/stacklabels-align-right/\n * Aligned to the right\n *\n * @type {Highcharts.AlignValue}\n * @since 2.1.5\n * @product highcharts\n * @apioption yAxis.stackLabels.align\n */\n /**\n * A format string for the data label. Available variables are the same\n * as for `formatter`.\n *\n * @type {string}\n * @default {total}\n * @since 3.0.2\n * @product highcharts highstock\n * @apioption yAxis.stackLabels.format\n */\n /**\n * Rotation of the labels in degrees.\n *\n * @sample {highcharts} highcharts/yaxis/stacklabels-rotation/\n * Labels rotated 45°\n *\n * @type {number}\n * @default 0\n * @since 2.1.5\n * @product highcharts\n * @apioption yAxis.stackLabels.rotation\n */\n /**\n * The text alignment for the label. While `align` determines where the\n * texts anchor point is placed with regards to the stack, `textAlign`\n * determines how the text is aligned against its anchor point. Possible\n * values are `\"left\"`, `\"center\"` and `\"right\"`. The default value is\n * calculated at runtime and depends on orientation and whether the\n * stack is positive or negative.\n *\n * @sample {highcharts} highcharts/yaxis/stacklabels-textalign-left/\n * Label in center position but text-aligned left\n *\n * @type {Highcharts.AlignValue}\n * @since 2.1.5\n * @product highcharts\n * @apioption yAxis.stackLabels.textAlign\n */\n /**\n * Whether to [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n * to render the labels.\n *\n * @type {boolean}\n * @default false\n * @since 3.0\n * @product highcharts highstock\n * @apioption yAxis.stackLabels.useHTML\n */\n /**\n * Defines the vertical alignment of the stack total label. Can be one\n * of `\"top\"`, `\"middle\"` or `\"bottom\"`. The default value is calculated\n * at runtime and depends on orientation and whether the stack is\n * positive or negative.\n *\n * @sample {highcharts} highcharts/yaxis/stacklabels-verticalalign-top/\n * Vertically aligned top\n * @sample {highcharts} highcharts/yaxis/stacklabels-verticalalign-middle/\n * Vertically aligned middle\n * @sample {highcharts} highcharts/yaxis/stacklabels-verticalalign-bottom/\n * Vertically aligned bottom\n *\n * @type {Highcharts.VerticalAlignValue}\n * @since 2.1.5\n * @product highcharts\n * @apioption yAxis.stackLabels.verticalAlign\n */\n /**\n * The x position offset of the label relative to the left of the\n * stacked bar. The default value is calculated at runtime and depends\n * on orientation and whether the stack is positive or negative.\n *\n * @sample {highcharts} highcharts/yaxis/stacklabels-x/\n * Stack total labels with x offset\n *\n * @type {number}\n * @since 2.1.5\n * @product highcharts\n * @apioption yAxis.stackLabels.x\n */\n /**\n * The y position offset of the label relative to the tick position\n * on the axis. The default value is calculated at runtime and depends\n * on orientation and whether the stack is positive or negative.\n *\n * @sample {highcharts} highcharts/yaxis/stacklabels-y/\n * Stack total labels with y offset\n *\n * @type {number}\n * @since 2.1.5\n * @product highcharts\n * @apioption yAxis.stackLabels.y\n */\n /**\n * Whether to force the axis to start on a tick. Use this option with\n * the `maxPadding` option to control the axis start.\n *\n * This option is always disabled, when panning type is\n * either `y` or `xy`.\n *\n * @see [type](#chart.panning.type)\n *\n * @sample {highcharts} highcharts/xaxis/startontick-false/\n * False by default\n * @sample {highcharts} highcharts/xaxis/startontick-true/\n * True\n * @sample {highstock} stock/xaxis/endontick/\n * False for Y axis\n *\n * @since 1.2.0\n * @product highcharts highstock gantt\n */\n startOnTick: true,\n title: {\n /**\n * The pixel distance between the axis labels and the title.\n * Positive values are outside the axis line, negative are inside.\n *\n * @sample {highcharts} highcharts/xaxis/title-margin/\n * Y axis title margin of 60\n *\n * @type {number}\n * @default 40\n * @apioption yAxis.title.margin\n */\n /**\n * The actual text of the axis title. Horizontal texts can contain\n * HTML, but rotated texts are painted using vector techniques and\n * must be clean text. The Y axis title is disabled by setting the\n * `text` option to `undefined`.\n *\n * @sample {highcharts} highcharts/xaxis/title-text/\n * Custom HTML\n *\n * @type {string|null}\n * @default {highcharts} Values\n * @default {highstock} undefined\n * @product highcharts highstock gantt\n */\n text: 'Values'\n },\n /**\n * The top position of the Y axis. If it's a number, it is interpreted\n * as pixel position relative to the chart.\n *\n * Since Highcharts 2: If it's a percentage string, it is interpreted as\n * percentages of the plot height, offset from plot area top.\n *\n * @see [yAxis.height](#yAxis.height)\n *\n * @sample {highstock} stock/demo/candlestick-and-volume/\n * Percentage height panes\n *\n * @type {number|string}\n * @product highcharts highstock\n * @apioption yAxis.top\n */\n /**\n * The stack labels show the total value for each bar in a stacked\n * column or bar chart. The label will be placed on top of positive\n * columns and below negative columns. In case of an inverted column\n * chart or a bar chart the label is placed to the right of positive\n * bars and to the left of negative bars.\n *\n * @product highcharts\n */\n stackLabels: {\n /**\n * Enable or disable the initial animation when a series is\n * displayed for the `stackLabels`. The animation can also be set as\n * a configuration object. Please note that this option only\n * applies to the initial animation.\n * For other animations, see [chart.animation](#chart.animation)\n * and the animation parameter under the API methods.\n * The following properties are supported:\n *\n * - `defer`: The animation delay time in milliseconds.\n *\n * @sample {highcharts} highcharts/plotoptions/animation-defer/\n * Animation defer settings\n * @type {boolean|Partial<Highcharts.AnimationOptionsObject>}\n * @since 8.2.0\n * @apioption yAxis.stackLabels.animation\n */\n animation: {},\n /**\n * The animation delay time in milliseconds.\n * Set to `0` renders stackLabel immediately.\n * As `undefined` inherits defer time from the [series.animation.defer](#plotOptions.series.animation.defer).\n *\n * @type {number}\n * @since 8.2.0\n * @apioption yAxis.stackLabels.animation.defer\n */\n /**\n * Allow the stack labels to overlap.\n *\n * @sample {highcharts} highcharts/yaxis/stacklabels-allowoverlap-false/\n * Default false\n *\n * @since 5.0.13\n * @product highcharts\n */\n allowOverlap: false,\n /**\n * The background color or gradient for the stack label.\n *\n * @sample {highcharts} highcharts/yaxis/stacklabels-box/\n * Stack labels box options\n * @type {Highcharts.ColorType}\n * @since 8.1.0\n * @apioption yAxis.stackLabels.backgroundColor\n */\n /**\n * The border color for the stack label. Defaults to `undefined`.\n *\n * @sample {highcharts} highcharts/yaxis/stacklabels-box/\n * Stack labels box options\n * @type {Highcharts.ColorType}\n * @since 8.1.0\n * @apioption yAxis.stackLabels.borderColor\n */\n /**\n * The border radius in pixels for the stack label.\n *\n * @sample {highcharts} highcharts/yaxis/stacklabels-box/\n * Stack labels box options\n * @type {number}\n * @default 0\n * @since 8.1.0\n * @apioption yAxis.stackLabels.borderRadius\n */\n /**\n * The border width in pixels for the stack label.\n *\n * @sample {highcharts} highcharts/yaxis/stacklabels-box/\n * Stack labels box options\n * @type {number}\n * @default 0\n * @since 8.1.0\n * @apioption yAxis.stackLabels.borderWidth\n */\n /**\n * Enable or disable the stack total labels.\n *\n * @sample {highcharts} highcharts/yaxis/stacklabels-enabled/\n * Enabled stack total labels\n * @sample {highcharts} highcharts/yaxis/stacklabels-enabled-waterfall/\n * Enabled stack labels in waterfall chart\n *\n * @since 2.1.5\n * @product highcharts\n */\n enabled: false,\n /**\n * Whether to hide stack labels that are outside the plot area.\n * By default, the stack label is moved\n * inside the plot area according to the\n * [overflow](/highcharts/#yAxis/stackLabels/overflow)\n * option.\n *\n * @type {boolean}\n * @since 7.1.3\n */\n crop: true,\n /**\n * How to handle stack total labels that flow outside the plot area.\n * The default is set to `\"justify\"`,\n * which aligns them inside the plot area.\n * For columns and bars, this means it will be moved inside the bar.\n * To display stack labels outside the plot area,\n * set `crop` to `false` and `overflow` to `\"allow\"`.\n *\n * @sample highcharts/yaxis/stacklabels-overflow/\n * Stack labels flows outside the plot area.\n *\n * @type {Highcharts.DataLabelsOverflowValue}\n * @since 7.1.3\n */\n overflow: 'justify',\n /* eslint-disable valid-jsdoc */\n /**\n * Callback JavaScript function to format the label. The value is\n * given by `this.total`.\n *\n * @sample {highcharts} highcharts/yaxis/stacklabels-formatter/\n * Added units to stack total value\n *\n * @type {Highcharts.FormatterCallbackFunction<Highcharts.StackItemObject>}\n * @since 2.1.5\n * @product highcharts\n */\n formatter: function () {\n var numberFormatter = this.axis.chart.numberFormatter;\n /* eslint-enable valid-jsdoc */\n return numberFormatter(this.total || 0, -1);\n },\n /**\n * CSS styles for the label.\n *\n * In styled mode, the styles are set in the\n * `.highcharts-stack-label` class.\n *\n * @sample {highcharts} highcharts/yaxis/stacklabels-style/\n * Red stack total labels\n *\n * @type {Highcharts.CSSObject}\n * @since 2.1.5\n * @product highcharts\n */\n style: {\n /** @internal */\n color: \"#000000\" /* Palette.neutralColor100 */,\n /**\n * @type {number|string}\n */\n fontSize: '0.7em',\n /** @internal */\n fontWeight: 'bold',\n /** @internal */\n textOutline: '1px contrast'\n }\n },\n gridLineWidth: 1,\n lineWidth: 0\n };\n})(AxisDefaults || (AxisDefaults = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Axis_AxisDefaults = (AxisDefaults);\n\n;// ./code/es5/es-modules/Core/Foundation.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar Foundation_addEvent = Core_Utilities.addEvent, Foundation_isFunction = Core_Utilities.isFunction, Foundation_objectEach = Core_Utilities.objectEach, Foundation_removeEvent = Core_Utilities.removeEvent;\n/* *\n *\n * Class Namespace\n *\n * */\nvar Foundation;\n(function (Foundation) {\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /**\n * Register event options. If an event handler is set on the options, it\n * should be subject to Chart.update, Axis.update and Series.update. This is\n * contrary to general handlers that are set directly using addEvent either\n * on the class or on the instance. #6538, #6943, #10861.\n * @private\n */\n function registerEventOptions(component, options) {\n // A lookup over those events that are added by _options_ (not\n // programmatically). These are updated through .update()\n component.eventOptions = component.eventOptions || {};\n // Register event listeners\n Foundation_objectEach(options.events, function (event, eventType) {\n // If event does not exist, or is changed by the .update()\n // function\n if (component.eventOptions[eventType] !== event) {\n // Remove existing if set by option\n if (component.eventOptions[eventType]) {\n Foundation_removeEvent(component, eventType, component.eventOptions[eventType]);\n delete component.eventOptions[eventType];\n }\n if (Foundation_isFunction(event)) {\n component.eventOptions[eventType] = event;\n Foundation_addEvent(component, eventType, event, {\n order: 0 // #14080 fire those events as firsts\n });\n }\n }\n });\n }\n Foundation.registerEventOptions = registerEventOptions;\n})(Foundation || (Foundation = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Core_Foundation = (Foundation);\n\n;// ./code/es5/es-modules/Core/Axis/Tick.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar Tick_deg2rad = Core_Globals.deg2rad;\n\nvar Tick_clamp = Core_Utilities.clamp, Tick_correctFloat = Core_Utilities.correctFloat, Tick_defined = Core_Utilities.defined, Tick_destroyObjectProperties = Core_Utilities.destroyObjectProperties, Tick_extend = Core_Utilities.extend, Tick_fireEvent = Core_Utilities.fireEvent, Tick_getAlignFactor = Core_Utilities.getAlignFactor, Tick_isNumber = Core_Utilities.isNumber, Tick_merge = Core_Utilities.merge, Tick_objectEach = Core_Utilities.objectEach, Tick_pick = Core_Utilities.pick;\n/* *\n *\n * Class\n *\n * */\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/**\n * The Tick class.\n *\n * @class\n * @name Highcharts.Tick\n *\n * @param {Highcharts.Axis} axis\n * The axis of the tick.\n *\n * @param {number} pos\n * The position of the tick on the axis in terms of axis values.\n *\n * @param {string} [type]\n * The type of tick, either 'minor' or an empty string\n *\n * @param {boolean} [noLabel=false]\n * Whether to disable the label or not. Defaults to false.\n *\n * @param {Object} [parameters]\n * Optional parameters for the tick.\n */\nvar Tick = /** @class */ (function () {\n /* *\n *\n * Constructors\n *\n * */\n function Tick(axis, pos, type, noLabel, parameters) {\n this.isNew = true;\n this.isNewLabel = true;\n /**\n * The related axis of the tick.\n * @name Highcharts.Tick#axis\n * @type {Highcharts.Axis}\n */\n this.axis = axis;\n /**\n * The logical position of the tick on the axis in terms of axis values.\n * @name Highcharts.Tick#pos\n * @type {number}\n */\n this.pos = pos;\n /**\n * The tick type, which can be `\"minor\"`, or an empty string.\n * @name Highcharts.Tick#type\n * @type {string}\n */\n this.type = type || '';\n this.parameters = parameters || {};\n /**\n * The mark offset of the tick on the axis. Usually `undefined`, numeric\n * for grid axes.\n * @name Highcharts.Tick#tickmarkOffset\n * @type {number|undefined}\n */\n this.tickmarkOffset = this.parameters.tickmarkOffset;\n this.options = this.parameters.options;\n Tick_fireEvent(this, 'init');\n if (!type && !noLabel) {\n this.addLabel();\n }\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Write the tick label.\n *\n * @private\n * @function Highcharts.Tick#addLabel\n */\n Tick.prototype.addLabel = function () {\n var tick = this,\n axis = tick.axis,\n options = axis.options,\n chart = axis.chart,\n categories = axis.categories,\n log = axis.logarithmic,\n names = axis.names,\n pos = tick.pos,\n labelOptions = Tick_pick(tick.options && tick.options.labels,\n options.labels),\n tickPositions = axis.tickPositions,\n isFirst = pos === tickPositions[0],\n isLast = pos === tickPositions[tickPositions.length - 1],\n animateLabels = (!labelOptions.step || labelOptions.step === 1) &&\n axis.tickInterval === 1,\n tickPositionInfo = tickPositions.info;\n var label = tick.label,\n dateTimeLabelFormat,\n dateTimeLabelFormats,\n i;\n // The context value\n var value = this.parameters.category || (categories ?\n Tick_pick(categories[pos],\n names[pos],\n pos) :\n pos);\n if (log && Tick_isNumber(value)) {\n value = Tick_correctFloat(log.lin2log(value));\n }\n // Set the datetime label format. If a higher rank is set for this\n // position, use that. If not, use the general format.\n if (axis.dateTime) {\n if (tickPositionInfo) {\n dateTimeLabelFormats = chart.time.resolveDTLFormat(options.dateTimeLabelFormats[(!options.grid &&\n tickPositionInfo.higherRanks[pos]) ||\n tickPositionInfo.unitName]);\n dateTimeLabelFormat = dateTimeLabelFormats.main;\n }\n else if (Tick_isNumber(value)) { // #1441\n dateTimeLabelFormat = axis.dateTime.getXDateFormat(value, options.dateTimeLabelFormats ||\n {});\n }\n }\n // Set properties for access in render method\n /**\n * True if the tick is the first one on the axis.\n * @name Highcharts.Tick#isFirst\n * @readonly\n * @type {boolean|undefined}\n */\n tick.isFirst = isFirst;\n /**\n * True if the tick is the last one on the axis.\n * @name Highcharts.Tick#isLast\n * @readonly\n * @type {boolean|undefined}\n */\n tick.isLast = isLast;\n // Get the string\n var ctx = {\n axis: axis,\n chart: chart,\n dateTimeLabelFormat: dateTimeLabelFormat,\n isFirst: isFirst,\n isLast: isLast,\n pos: pos,\n tick: tick,\n tickPositionInfo: tickPositionInfo,\n value: value\n };\n // Fire an event that allows modifying the context for use in\n // `labels.format` and `labels.formatter`.\n Tick_fireEvent(this, 'labelFormat', ctx);\n // Label formatting. When `labels.format` is given, we first run the\n // defaultFormatter and append the result to the context as `text`.\n // Handy for adding prefix or suffix while keeping default number\n // formatting.\n var labelFormatter = function (ctx) {\n if (labelOptions.formatter) {\n return labelOptions.formatter.call(ctx,\n ctx);\n }\n if (labelOptions.format) {\n ctx.text = axis.defaultLabelFormatter.call(ctx);\n return Core_Templating.format(labelOptions.format, ctx, chart);\n }\n return axis.defaultLabelFormatter.call(ctx);\n };\n var str = labelFormatter.call(ctx,\n ctx);\n // Set up conditional formatting based on the format list if existing.\n var list = dateTimeLabelFormats && dateTimeLabelFormats.list;\n if (list) {\n tick.shortenLabel = function () {\n for (i = 0; i < list.length; i++) {\n Tick_extend(ctx, { dateTimeLabelFormat: list[i] });\n label.attr({\n text: labelFormatter.call(ctx, ctx)\n });\n if (label.getBBox().width <\n axis.getSlotWidth(tick) - 2 *\n (labelOptions.padding || 0)) {\n return;\n }\n }\n label.attr({\n text: ''\n });\n };\n }\n else {\n // #15692\n tick.shortenLabel = void 0;\n }\n // Call only after first render\n if (animateLabels && axis._addedPlotLB) {\n tick.moveLabel(str, labelOptions);\n }\n // First call\n if (!Tick_defined(label) && !tick.movedLabel) {\n /**\n * The rendered text label of the tick.\n * @name Highcharts.Tick#label\n * @type {Highcharts.SVGElement|undefined}\n */\n tick.label = label = tick.createLabel(str, labelOptions);\n // Base value to detect change for new calls to getBBox\n tick.rotation = 0;\n // Update\n }\n else if (label && label.textStr !== str && !animateLabels) {\n // When resetting text, also reset the width if dynamically set\n // (#8809)\n if (label.textWidth &&\n !labelOptions.style.width &&\n !label.styles.width) {\n label.css({ width: null });\n }\n label.attr({ text: str });\n label.textPxLength = label.getBBox().width;\n }\n };\n /**\n * Render and return the label of the tick.\n *\n * @private\n * @function Highcharts.Tick#createLabel\n */\n Tick.prototype.createLabel = function (str, labelOptions, xy) {\n var axis = this.axis,\n _a = axis.chart,\n renderer = _a.renderer,\n styledMode = _a.styledMode,\n label = Tick_defined(str) && labelOptions.enabled ?\n renderer\n .text(str,\n xy === null || xy === void 0 ? void 0 : xy.x,\n xy === null || xy === void 0 ? void 0 : xy.y,\n labelOptions.useHTML)\n .add(axis.labelGroup) :\n void 0;\n // Un-rotated length\n if (label) {\n var whiteSpace = labelOptions.style.whiteSpace || 'normal';\n // Without position absolute, IE export sometimes is wrong\n if (!styledMode) {\n label.css(Tick_merge(labelOptions.style, { whiteSpace: 'nowrap' }));\n }\n label.textPxLength = label.getBBox().width;\n if (!styledMode) {\n label.css({ whiteSpace: whiteSpace });\n }\n }\n return label;\n };\n /**\n * Destructor for the tick prototype\n *\n * @private\n * @function Highcharts.Tick#destroy\n */\n Tick.prototype.destroy = function () {\n Tick_destroyObjectProperties(this, this.axis);\n };\n /**\n * Gets the x and y positions for ticks in terms of pixels.\n *\n * @private\n * @function Highcharts.Tick#getPosition\n *\n * @param {boolean} horiz\n * Whether the tick is on an horizontal axis or not.\n *\n * @param {number} tickPos\n * Position of the tick.\n *\n * @param {number} tickmarkOffset\n * Tickmark offset for all ticks.\n *\n * @param {boolean} [old]\n * Whether the axis has changed or not.\n *\n * @return {Highcharts.PositionObject}\n * The tick position.\n *\n * @emits Highcharts.Tick#event:afterGetPosition\n */\n Tick.prototype.getPosition = function (horiz, tickPos, tickmarkOffset, old) {\n var axis = this.axis,\n chart = axis.chart,\n cHeight = (old && chart.oldChartHeight) || chart.chartHeight,\n pos = {\n x: horiz ?\n Tick_correctFloat(axis.translate(tickPos + tickmarkOffset,\n void 0,\n void 0,\n old) +\n axis.transB) :\n (axis.left +\n axis.offset +\n (axis.opposite ?\n (((old && chart.oldChartWidth) ||\n chart.chartWidth) -\n axis.right -\n axis.left) :\n 0)),\n y: horiz ?\n (cHeight -\n axis.bottom +\n axis.offset -\n (axis.opposite ? axis.height : 0)) :\n Tick_correctFloat(cHeight -\n axis.translate(tickPos + tickmarkOffset,\n void 0,\n void 0,\n old) -\n axis.transB)\n };\n // Chrome workaround for #10516\n pos.y = Tick_clamp(pos.y, -1e9, 1e9);\n Tick_fireEvent(this, 'afterGetPosition', { pos: pos });\n return pos;\n };\n /**\n * Get the x, y position of the tick label\n * @private\n */\n Tick.prototype.getLabelPosition = function (x, y, label, horiz, labelOptions, tickmarkOffset, index, step) {\n var axis = this.axis,\n transA = axis.transA,\n reversed = ( // #7911\n axis.isLinked && axis.linkedParent ?\n axis.linkedParent.reversed :\n axis.reversed),\n staggerLines = axis.staggerLines,\n rotCorr = axis.tickRotCorr || { x: 0,\n y: 0 }, \n // Adjust for label alignment if we use reserveSpace: true (#5286)\n labelOffsetCorrection = (!horiz && !axis.reserveSpaceDefault ?\n -axis.labelOffset * (axis.labelAlign === 'center' ? 0.5 : 1) :\n 0),\n distance = labelOptions.distance,\n pos = {};\n var yOffset,\n line;\n if (axis.side === 0) {\n yOffset = label.rotation ? -distance : -label.getBBox().height;\n }\n else if (axis.side === 2) {\n yOffset = rotCorr.y + distance;\n }\n else {\n // #3140, #3140\n yOffset = Math.cos(label.rotation * Tick_deg2rad) *\n (rotCorr.y - label.getBBox(false, 0).height / 2);\n }\n if (Tick_defined(labelOptions.y)) {\n yOffset = axis.side === 0 && axis.horiz ?\n labelOptions.y + yOffset :\n labelOptions.y;\n }\n x = x +\n Tick_pick(labelOptions.x, [0, 1, 0, -1][axis.side] * distance) +\n labelOffsetCorrection +\n rotCorr.x -\n (tickmarkOffset && horiz ?\n tickmarkOffset * transA * (reversed ? -1 : 1) :\n 0);\n y = y + yOffset - (tickmarkOffset && !horiz ?\n tickmarkOffset * transA * (reversed ? 1 : -1) : 0);\n // Correct for staggered labels\n if (staggerLines) {\n line = (index / (step || 1) % staggerLines);\n if (axis.opposite) {\n line = staggerLines - line - 1;\n }\n y += line * (axis.labelOffset / staggerLines);\n }\n pos.x = x;\n pos.y = Math.round(y);\n Tick_fireEvent(this, 'afterGetLabelPosition', { pos: pos, tickmarkOffset: tickmarkOffset, index: index });\n return pos;\n };\n /**\n * Get the offset height or width of the label\n *\n * @private\n * @function Highcharts.Tick#getLabelSize\n */\n Tick.prototype.getLabelSize = function () {\n return this.label ?\n this.label.getBBox()[this.axis.horiz ? 'height' : 'width'] :\n 0;\n };\n /**\n * Extendible method to return the path of the marker\n * @private\n */\n Tick.prototype.getMarkPath = function (x, y, tickLength, tickWidth, horiz, renderer) {\n if (horiz === void 0) { horiz = false; }\n return renderer.crispLine([[\n 'M',\n x,\n y\n ], [\n 'L',\n x + (horiz ? 0 : -tickLength),\n y + (horiz ? tickLength : 0)\n ]], tickWidth);\n };\n /**\n * Handle the label overflow by adjusting the labels to the left and right\n * edge, or hide them if they collide into the neighbour label.\n *\n * @private\n * @function Highcharts.Tick#handleOverflow\n */\n Tick.prototype.handleOverflow = function (xy) {\n var tick = this,\n axis = this.axis,\n labelOptions = axis.options.labels,\n pxPos = xy.x,\n chartWidth = axis.chart.chartWidth,\n spacing = axis.chart.spacing,\n leftBound = Tick_pick(axis.labelLeft,\n Math.min(axis.pos,\n spacing[3])),\n rightBound = Tick_pick(axis.labelRight,\n Math.max(!axis.isRadial ? axis.pos + axis.len : 0,\n chartWidth - spacing[1])),\n label = this.label,\n rotation = this.rotation,\n factor = Tick_getAlignFactor(axis.labelAlign || label.attr('align')),\n labelWidth = label.getBBox().width,\n slotWidth = axis.getSlotWidth(tick),\n xCorrection = factor,\n css = {};\n var modifiedSlotWidth = slotWidth,\n goRight = 1,\n leftPos,\n rightPos,\n textWidth;\n // Check if the label overshoots the chart spacing box. If it does, move\n // it. If it now overshoots the slotWidth, add ellipsis.\n if (!rotation && labelOptions.overflow === 'justify') {\n leftPos = pxPos - factor * labelWidth;\n rightPos = pxPos + (1 - factor) * labelWidth;\n if (leftPos < leftBound) {\n modifiedSlotWidth =\n xy.x + modifiedSlotWidth * (1 - factor) - leftBound;\n }\n else if (rightPos > rightBound) {\n modifiedSlotWidth =\n rightBound - xy.x + modifiedSlotWidth * factor;\n goRight = -1;\n }\n modifiedSlotWidth = Math.min(slotWidth, modifiedSlotWidth); // #4177\n if (modifiedSlotWidth < slotWidth && axis.labelAlign === 'center') {\n xy.x += (goRight *\n (slotWidth -\n modifiedSlotWidth -\n xCorrection * (slotWidth - Math.min(labelWidth, modifiedSlotWidth))));\n }\n // If the label width exceeds the available space, set a text width\n // to be picked up below. Also, if a width has been set before, we\n // need to set a new one because the reported labelWidth will be\n // limited by the box (#3938).\n if (labelWidth > modifiedSlotWidth ||\n (axis.autoRotation && (label.styles || {}).width)) {\n textWidth = modifiedSlotWidth;\n }\n // Add ellipsis to prevent rotated labels to be clipped against the edge\n // of the chart\n }\n else if (rotation < 0 &&\n pxPos - factor * labelWidth < leftBound) {\n textWidth = Math.round(pxPos / Math.cos(rotation * Tick_deg2rad) - leftBound);\n }\n else if (rotation > 0 &&\n pxPos + factor * labelWidth > rightBound) {\n textWidth = Math.round((chartWidth - pxPos) /\n Math.cos(rotation * Tick_deg2rad));\n }\n if (textWidth && label) {\n if (tick.shortenLabel) {\n tick.shortenLabel();\n }\n else {\n label.css(Tick_extend(css, {\n width: Math.floor(textWidth) + 'px',\n lineClamp: axis.isRadial ? 0 : 1\n }));\n }\n }\n };\n /**\n * Try to replace the label if the same one already exists.\n *\n * @private\n * @function Highcharts.Tick#moveLabel\n */\n Tick.prototype.moveLabel = function (str, labelOptions) {\n var tick = this,\n label = tick.label,\n axis = tick.axis;\n var moved = false,\n labelPos;\n if (label && label.textStr === str) {\n tick.movedLabel = label;\n moved = true;\n delete tick.label;\n }\n else { // Find a label with the same string\n Tick_objectEach(axis.ticks, function (currentTick) {\n if (!moved &&\n !currentTick.isNew &&\n currentTick !== tick &&\n currentTick.label &&\n currentTick.label.textStr === str) {\n tick.movedLabel = currentTick.label;\n moved = true;\n currentTick.labelPos = tick.movedLabel.xy;\n delete currentTick.label;\n }\n });\n }\n // Create new label if the actual one is moved\n if (!moved && (tick.labelPos || label)) {\n labelPos = tick.labelPos || label.xy;\n tick.movedLabel = tick.createLabel(str, labelOptions, labelPos);\n if (tick.movedLabel) {\n tick.movedLabel.attr({ opacity: 0 });\n }\n }\n };\n /**\n * Put everything in place\n *\n * @private\n * @param {number} index\n *\n * @param {boolean} [old]\n * Use old coordinates to prepare an animation into new position\n *\n * @param {number} [opacity]\n */\n Tick.prototype.render = function (index, old, opacity) {\n var tick = this,\n axis = tick.axis,\n horiz = axis.horiz,\n pos = tick.pos,\n tickmarkOffset = Tick_pick(tick.tickmarkOffset,\n axis.tickmarkOffset),\n xy = tick.getPosition(horiz,\n pos,\n tickmarkOffset,\n old),\n x = xy.x,\n y = xy.y,\n axisStart = axis.pos,\n axisEnd = axisStart + axis.len,\n pxPos = horiz ? x : y;\n // Anything that is not between `axis.pos` and `axis.pos + axis.length`\n // should not be visible (#20166). The `correctFloat` is for reversed\n // axes in Safari.\n if (!axis.chart.polar &&\n tick.isNew &&\n (Tick_correctFloat(pxPos) < axisStart || pxPos > axisEnd)) {\n opacity = 0;\n }\n var labelOpacity = Tick_pick(opacity,\n tick.label && tick.label.newOpacity, // #15528\n 1);\n opacity = Tick_pick(opacity, 1);\n this.isActive = true;\n // Create the grid line\n this.renderGridLine(old, opacity);\n // Create the tick mark\n this.renderMark(xy, opacity);\n // The label is created on init - now move it into place\n this.renderLabel(xy, old, labelOpacity, index);\n tick.isNew = false;\n Tick_fireEvent(this, 'afterRender');\n };\n /**\n * Renders the gridLine.\n *\n * @private\n * @function Highcharts.Tick#renderGridLine\n * @param {boolean} old Whether or not the tick is old\n * @param {number} opacity The opacity of the grid line\n */\n Tick.prototype.renderGridLine = function (old, opacity) {\n var tick = this,\n axis = tick.axis,\n options = axis.options,\n attribs = {},\n pos = tick.pos,\n type = tick.type,\n tickmarkOffset = Tick_pick(tick.tickmarkOffset,\n axis.tickmarkOffset),\n renderer = axis.chart.renderer;\n var gridLine = tick.gridLine,\n gridLinePath,\n gridLineWidth = options.gridLineWidth,\n gridLineColor = options.gridLineColor,\n dashStyle = options.gridLineDashStyle;\n if (tick.type === 'minor') {\n gridLineWidth = options.minorGridLineWidth;\n gridLineColor = options.minorGridLineColor;\n dashStyle = options.minorGridLineDashStyle;\n }\n if (!gridLine) {\n if (!axis.chart.styledMode) {\n attribs.stroke = gridLineColor;\n attribs['stroke-width'] = gridLineWidth || 0;\n attribs.dashstyle = dashStyle;\n }\n if (!type) {\n attribs.zIndex = 1;\n }\n if (old) {\n opacity = 0;\n }\n /**\n * The rendered grid line of the tick.\n * @name Highcharts.Tick#gridLine\n * @type {Highcharts.SVGElement|undefined}\n */\n tick.gridLine = gridLine = renderer.path()\n .attr(attribs)\n .addClass('highcharts-' + (type ? type + '-' : '') + 'grid-line')\n .add(axis.gridGroup);\n }\n if (gridLine) {\n gridLinePath = axis.getPlotLinePath({\n value: pos + tickmarkOffset,\n lineWidth: gridLine.strokeWidth(),\n force: 'pass',\n old: old,\n acrossPanes: false // #18025\n });\n // If the parameter 'old' is set, the current call will be followed\n // by another call, therefore do not do any animations this time\n if (gridLinePath) {\n gridLine[old || tick.isNew ? 'attr' : 'animate']({\n d: gridLinePath,\n opacity: opacity\n });\n }\n }\n };\n /**\n * Renders the tick mark.\n *\n * @private\n * @function Highcharts.Tick#renderMark\n * @param {Highcharts.PositionObject} xy The position vector of the mark\n * @param {number} opacity The opacity of the mark\n */\n Tick.prototype.renderMark = function (xy, opacity) {\n var tick = this, axis = tick.axis, options = axis.options, renderer = axis.chart.renderer, type = tick.type, tickSize = axis.tickSize(type ? type + 'Tick' : 'tick'), x = xy.x, y = xy.y, tickWidth = Tick_pick(options[type !== 'minor' ? 'tickWidth' : 'minorTickWidth'], !type && axis.isXAxis ? 1 : 0), // X axis defaults to 1\n tickColor = options[type !== 'minor' ? 'tickColor' : 'minorTickColor'];\n var mark = tick.mark;\n var isNewMark = !mark;\n if (tickSize) {\n // Negate the length\n if (axis.opposite) {\n tickSize[0] = -tickSize[0];\n }\n // First time, create it\n if (!mark) {\n /**\n * The rendered mark of the tick.\n * @name Highcharts.Tick#mark\n * @type {Highcharts.SVGElement|undefined}\n */\n tick.mark = mark = renderer.path()\n .addClass('highcharts-' + (type ? type + '-' : '') + 'tick')\n .add(axis.axisGroup);\n if (!axis.chart.styledMode) {\n mark.attr({\n stroke: tickColor,\n 'stroke-width': tickWidth\n });\n }\n }\n mark[isNewMark ? 'attr' : 'animate']({\n d: tick.getMarkPath(x, y, tickSize[0], mark.strokeWidth(), axis.horiz, renderer),\n opacity: opacity\n });\n }\n };\n /**\n * Renders the tick label.\n * Note: The label should already be created in init(), so it should only\n * have to be moved into place.\n *\n * @private\n * @function Highcharts.Tick#renderLabel\n * @param {Highcharts.PositionObject} xy The position vector of the label\n * @param {boolean} old Whether or not the tick is old\n * @param {number} opacity The opacity of the label\n * @param {number} index The index of the tick\n */\n Tick.prototype.renderLabel = function (xy, old, opacity, index) {\n var tick = this,\n axis = tick.axis,\n horiz = axis.horiz,\n options = axis.options,\n label = tick.label,\n labelOptions = options.labels,\n step = labelOptions.step,\n tickmarkOffset = Tick_pick(tick.tickmarkOffset,\n axis.tickmarkOffset),\n x = xy.x,\n y = xy.y;\n var show = true;\n if (label && Tick_isNumber(x)) {\n label.xy = xy = tick.getLabelPosition(x, y, label, horiz, labelOptions, tickmarkOffset, index, step);\n // Apply show first and show last. If the tick is both first and\n // last, it is a single centered tick, in which case we show the\n // label anyway (#2100).\n if ((tick.isFirst &&\n !tick.isLast &&\n !options.showFirstLabel) ||\n (tick.isLast &&\n !tick.isFirst &&\n !options.showLastLabel)) {\n show = false;\n // Handle label overflow and show or hide accordingly\n }\n else if (horiz &&\n !labelOptions.step &&\n !labelOptions.rotation &&\n !old &&\n opacity !== 0) {\n tick.handleOverflow(xy);\n }\n // Apply step\n if (step && index % step) {\n // Show those indices dividable by step\n show = false;\n }\n // Set the new position, and show or hide\n if (show && Tick_isNumber(xy.y)) {\n xy.opacity = opacity;\n label[tick.isNewLabel ? 'attr' : 'animate'](xy).show(true);\n tick.isNewLabel = false;\n }\n else {\n label.hide(); // #1338, #15863\n tick.isNewLabel = true;\n }\n }\n };\n /**\n * Replace labels with the moved ones to perform animation. Additionally\n * destroy unused labels.\n *\n * @private\n * @function Highcharts.Tick#replaceMovedLabel\n */\n Tick.prototype.replaceMovedLabel = function () {\n var tick = this,\n label = tick.label,\n axis = tick.axis;\n // Animate and destroy\n if (label && !tick.isNew) {\n label.animate({ opacity: 0 }, void 0, label.destroy);\n delete tick.label;\n }\n axis.isDirty = true;\n tick.label = tick.movedLabel;\n delete tick.movedLabel;\n };\n return Tick;\n}());\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Axis_Tick = (Tick);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Optional parameters for the tick.\n * @private\n * @interface Highcharts.TickParametersObject\n */ /**\n* Set category for the tick.\n* @name Highcharts.TickParametersObject#category\n* @type {string|undefined}\n*/ /**\n* @name Highcharts.TickParametersObject#options\n* @type {Highcharts.Dictionary<any>|undefined}\n*/ /**\n* Set tickmarkOffset for the tick.\n* @name Highcharts.TickParametersObject#tickmarkOffset\n* @type {number|undefined}\n*/\n/**\n * Additional time tick information.\n *\n * @interface Highcharts.TimeTicksInfoObject\n * @extends Highcharts.TimeNormalizedObject\n */ /**\n* @name Highcharts.TimeTicksInfoObject#higherRanks\n* @type {Array<string>}\n*/ /**\n* @name Highcharts.TimeTicksInfoObject#totalRange\n* @type {number}\n*/\n(''); // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Axis/Axis.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar Axis_animObject = AnimationUtilities.animObject;\n\nvar xAxis = Axis_AxisDefaults.xAxis, yAxis = Axis_AxisDefaults.yAxis;\n\n\nvar Axis_defaultOptions = Defaults.defaultOptions;\n\nvar registerEventOptions = Core_Foundation.registerEventOptions;\n\nvar Axis_deg2rad = Core_Globals.deg2rad;\n\n\nvar Axis_arrayMax = Core_Utilities.arrayMax, Axis_arrayMin = Core_Utilities.arrayMin, Axis_clamp = Core_Utilities.clamp, Axis_correctFloat = Core_Utilities.correctFloat, Axis_defined = Core_Utilities.defined, Axis_destroyObjectProperties = Core_Utilities.destroyObjectProperties, Axis_erase = Core_Utilities.erase, Axis_error = Core_Utilities.error, Axis_extend = Core_Utilities.extend, Axis_fireEvent = Core_Utilities.fireEvent, Axis_getClosestDistance = Core_Utilities.getClosestDistance, Axis_insertItem = Core_Utilities.insertItem, Axis_isArray = Core_Utilities.isArray, Axis_isNumber = Core_Utilities.isNumber, Axis_isString = Core_Utilities.isString, Axis_merge = Core_Utilities.merge, Axis_normalizeTickInterval = Core_Utilities.normalizeTickInterval, Axis_objectEach = Core_Utilities.objectEach, Axis_pick = Core_Utilities.pick, Axis_relativeLength = Core_Utilities.relativeLength, Axis_removeEvent = Core_Utilities.removeEvent, Axis_splat = Core_Utilities.splat, Axis_syncTimeout = Core_Utilities.syncTimeout;\nvar getNormalizedTickInterval = function (axis, tickInterval) { return Axis_normalizeTickInterval(tickInterval, void 0, void 0, Axis_pick(axis.options.allowDecimals, \n// If the tick interval is greater than 0.5, avoid decimals, as\n// linear axes are often used to render discrete values (#3363). If\n// a tick amount is set, allow decimals by default, as it increases\n// the chances for a good fit.\ntickInterval < 0.5 || axis.tickAmount !== void 0), !!axis.tickAmount); };\nAxis_extend(Axis_defaultOptions, { xAxis: xAxis, yAxis: Axis_merge(xAxis, yAxis) });\n/* *\n *\n * Class\n *\n * */\n/**\n * Create a new axis object. Called internally when instantiating a new chart or\n * adding axes by {@link Highcharts.Chart#addAxis}.\n *\n * A chart can have from 0 axes (pie chart) to multiples. In a normal, single\n * series cartesian chart, there is one X axis and one Y axis.\n *\n * The X axis or axes are referenced by {@link Highcharts.Chart.xAxis}, which is\n * an array of Axis objects. If there is only one axis, it can be referenced\n * through `chart.xAxis[0]`, and multiple axes have increasing indices. The same\n * pattern goes for Y axes.\n *\n * If you need to get the axes from a series object, use the `series.xAxis` and\n * `series.yAxis` properties. These are not arrays, as one series can only be\n * associated to one X and one Y axis.\n *\n * A third way to reference the axis programmatically is by `id`. Add an `id` in\n * the axis configuration options, and get the axis by\n * {@link Highcharts.Chart#get}.\n *\n * Configuration options for the axes are given in options.xAxis and\n * options.yAxis.\n *\n * @class\n * @name Highcharts.Axis\n *\n * @param {Highcharts.Chart} chart\n * The Chart instance to apply the axis on.\n *\n * @param {Highcharts.AxisOptions} userOptions\n * Axis options\n */\nvar Axis = /** @class */ (function () {\n /* *\n *\n * Constructors\n *\n * */\n function Axis(chart, userOptions, coll) {\n this.init(chart, userOptions, coll);\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Overrideable function to initialize the axis.\n *\n * @see {@link Axis}\n *\n * @function Highcharts.Axis#init\n *\n * @param {Highcharts.Chart} chart\n * The Chart instance to apply the axis on.\n *\n * @param {AxisOptions} userOptions\n * Axis options.\n *\n * @emits Highcharts.Axis#event:afterInit\n * @emits Highcharts.Axis#event:init\n */\n Axis.prototype.init = function (chart, userOptions, coll) {\n var _a,\n _b,\n _c,\n _d;\n if (coll === void 0) { coll = this.coll; }\n var isXAxis = coll === 'xAxis',\n axis = this,\n horiz = axis.isZAxis || (chart.inverted ? !isXAxis : isXAxis);\n /**\n * The Chart that the axis belongs to.\n *\n * @name Highcharts.Axis#chart\n * @type {Highcharts.Chart}\n */\n axis.chart = chart;\n /**\n * Whether the axis is horizontal.\n *\n * @name Highcharts.Axis#horiz\n * @type {boolean|undefined}\n */\n axis.horiz = horiz;\n /**\n * Whether the axis is the x-axis.\n *\n * @name Highcharts.Axis#isXAxis\n * @type {boolean|undefined}\n */\n axis.isXAxis = isXAxis;\n /**\n * The collection where the axis belongs, for example `xAxis`, `yAxis`\n * or `colorAxis`. Corresponds to properties on Chart, for example\n * {@link Chart.xAxis}.\n *\n * @name Highcharts.Axis#coll\n * @type {string}\n */\n axis.coll = coll;\n Axis_fireEvent(this, 'init', { userOptions: userOptions });\n // Needed in setOptions\n axis.opposite = Axis_pick(userOptions.opposite, axis.opposite);\n /**\n * The side on which the axis is rendered. 0 is top, 1 is right, 2\n * is bottom and 3 is left.\n *\n * @name Highcharts.Axis#side\n * @type {number}\n */\n axis.side = Axis_pick(userOptions.side, axis.side, (horiz ?\n (axis.opposite ? 0 : 2) : // Top : bottom\n (axis.opposite ? 1 : 3)) // Right : left\n );\n /**\n * Current options for the axis after merge of defaults and user's\n * options.\n *\n * @name Highcharts.Axis#options\n * @type {Highcharts.AxisOptions}\n */\n axis.setOptions(userOptions);\n var options = axis.options,\n labelsOptions = options.labels;\n // Set the type and fire an event\n (_a = axis.type) !== null && _a !== void 0 ? _a : (axis.type = options.type || 'linear');\n (_b = axis.uniqueNames) !== null && _b !== void 0 ? _b : (axis.uniqueNames = (_c = options.uniqueNames) !== null && _c !== void 0 ? _c : true);\n Axis_fireEvent(axis, 'afterSetType');\n /**\n * User's options for this axis without defaults.\n *\n * @name Highcharts.Axis#userOptions\n * @type {Highcharts.AxisOptions}\n */\n axis.userOptions = userOptions;\n axis.minPixelPadding = 0;\n /**\n * Whether the axis is reversed. Based on the `axis.reversed`,\n * option, but inverted charts have reversed xAxis by default.\n *\n * @name Highcharts.Axis#reversed\n * @type {boolean}\n */\n axis.reversed = Axis_pick(options.reversed, axis.reversed);\n axis.visible = options.visible;\n axis.zoomEnabled = options.zoomEnabled;\n // Initial categories\n axis.hasNames = this.type === 'category' || options.categories === true;\n /**\n * If categories are present for the axis, names are used instead of\n * numbers for that axis.\n *\n * Since Highcharts 3.0, categories can also be extracted by giving each\n * point a name and setting axis type to `category`. However, if you\n * have multiple series, best practice remains defining the `categories`\n * array.\n *\n * @see [xAxis.categories](/highcharts/xAxis.categories)\n *\n * @name Highcharts.Axis#categories\n * @type {Array<string>}\n * @readonly\n */\n axis.categories = (Axis_isArray(options.categories) && options.categories) ||\n (axis.hasNames ? [] : void 0);\n if (!axis.names) { // Preserve on update (#3830)\n axis.names = [];\n axis.names.keys = {};\n }\n // Placeholder for plotlines and plotbands groups\n axis.plotLinesAndBandsGroups = {};\n // Shorthand types\n axis.positiveValuesOnly = !!axis.logarithmic;\n // Flag, if axis is linked to another axis\n axis.isLinked = Axis_defined(options.linkedTo);\n /**\n * List of major ticks mapped by position on axis.\n *\n * @see {@link Highcharts.Tick}\n *\n * @name Highcharts.Axis#ticks\n * @type {Highcharts.Dictionary<Highcharts.Tick>}\n */\n axis.ticks = {};\n axis.labelEdge = [];\n /**\n * List of minor ticks mapped by position on the axis.\n *\n * @see {@link Highcharts.Tick}\n *\n * @name Highcharts.Axis#minorTicks\n * @type {Highcharts.Dictionary<Highcharts.Tick>}\n */\n axis.minorTicks = {};\n // List of plotLines/Bands\n axis.plotLinesAndBands = [];\n // Alternate bands\n axis.alternateBands = {};\n /**\n * The length of the axis in terms of pixels.\n *\n * @name Highcharts.Axis#len\n * @type {number}\n */\n (_d = axis.len) !== null && _d !== void 0 ? _d : (axis.len = 0);\n axis.minRange = axis.userMinRange = options.minRange || options.maxZoom;\n axis.range = options.range;\n axis.offset = options.offset || 0;\n /**\n * The maximum value of the axis. In a logarithmic axis, this is the\n * logarithm of the real value, and the real value can be obtained from\n * {@link Axis#getExtremes}.\n *\n * @name Highcharts.Axis#max\n * @type {number|undefined}\n */\n axis.max = void 0;\n /**\n * The minimum value of the axis. In a logarithmic axis, this is the\n * logarithm of the real value, and the real value can be obtained from\n * {@link Axis#getExtremes}.\n *\n * @name Highcharts.Axis#min\n * @type {number|undefined}\n */\n axis.min = void 0;\n /**\n * The processed crosshair options.\n *\n * @name Highcharts.Axis#crosshair\n * @type {boolean|Highcharts.AxisCrosshairOptions}\n */\n var crosshair = Axis_pick(options.crosshair,\n Axis_splat(chart.options.tooltip.crosshairs)[isXAxis ? 0 : 1]);\n axis.crosshair = crosshair === true ? {} : crosshair;\n // Register. Don't add it again on Axis.update().\n if (chart.axes.indexOf(axis) === -1) { //\n if (isXAxis) { // #2713\n chart.axes.splice(chart.xAxis.length, 0, axis);\n }\n else {\n chart.axes.push(axis);\n }\n Axis_insertItem(this, chart[this.coll]);\n }\n chart.orderItems(axis.coll);\n /**\n * All series associated to the axis.\n *\n * @name Highcharts.Axis#series\n * @type {Array<Highcharts.Series>}\n */\n axis.series = axis.series || []; // Populated by Series\n // Reversed axis\n if (chart.inverted &&\n !axis.isZAxis &&\n isXAxis &&\n !Axis_defined(axis.reversed)) {\n axis.reversed = true;\n }\n axis.labelRotation = Axis_isNumber(labelsOptions.rotation) ?\n labelsOptions.rotation :\n void 0;\n // Register event listeners\n registerEventOptions(axis, options);\n Axis_fireEvent(this, 'afterInit');\n };\n /**\n * Merge and set options.\n *\n * @private\n * @function Highcharts.Axis#setOptions\n *\n * @param {Highcharts.AxisOptions} userOptions\n * Axis options.\n *\n * @emits Highcharts.Axis#event:afterSetOptions\n */\n Axis.prototype.setOptions = function (userOptions) {\n var sideSpecific = this.horiz ?\n // Top and bottom axis defaults\n {\n labels: {\n autoRotation: [-45],\n padding: 3\n },\n margin: 15\n } :\n // Left and right axis, title rotated 90 or 270 degrees\n // respectively\n {\n labels: {\n padding: 1\n },\n title: {\n rotation: 90 * this.side\n }\n };\n this.options = Axis_merge(sideSpecific, Axis_defaultOptions[this.coll], userOptions);\n Axis_fireEvent(this, 'afterSetOptions', { userOptions: userOptions });\n };\n /**\n * The default label formatter. The context is a special config object for\n * the label. In apps, use the\n * [labels.formatter](https://api.highcharts.com/highcharts/xAxis.labels.formatter)\n * instead, except when a modification is needed.\n *\n * @function Highcharts.Axis#defaultLabelFormatter\n *\n * @param {Highcharts.AxisLabelsFormatterContextObject} this\n * Formatter context of axis label.\n *\n * @param {Highcharts.AxisLabelsFormatterContextObject} [ctx]\n * Formatter context of axis label.\n *\n * @return {string}\n * The formatted label content.\n */\n Axis.prototype.defaultLabelFormatter = function () {\n var axis = this.axis,\n chart = this.chart,\n numberFormatter = chart.numberFormatter,\n value = Axis_isNumber(this.value) ? this.value : NaN,\n time = axis.chart.time,\n categories = axis.categories,\n dateTimeLabelFormat = this.dateTimeLabelFormat,\n lang = Axis_defaultOptions.lang,\n numericSymbols = lang.numericSymbols,\n numSymMagnitude = lang.numericSymbolMagnitude || 1000, \n // Make sure the same symbol is added for all labels on a linear\n // axis\n numericSymbolDetector = axis.logarithmic ?\n Math.abs(value) :\n axis.tickInterval;\n var i = numericSymbols && numericSymbols.length,\n multi,\n ret;\n if (categories) {\n ret = \"\".concat(this.value);\n }\n else if (dateTimeLabelFormat) { // Datetime axis\n ret = time.dateFormat(dateTimeLabelFormat, value, true);\n }\n else if (i &&\n numericSymbols &&\n numericSymbolDetector >= 1000) {\n // Decide whether we should add a numeric symbol like k (thousands)\n // or M (millions). If we are to enable this in tooltip or other\n // places as well, we can move this logic to the numberFormatter and\n // enable it by a parameter.\n while (i-- && typeof ret === 'undefined') {\n multi = Math.pow(numSymMagnitude, i + 1);\n if (\n // Only accept a numeric symbol when the distance is more\n // than a full unit. So for example if the symbol is k, we\n // don't accept numbers like 0.5k.\n numericSymbolDetector >= multi &&\n // Accept one decimal before the symbol. Accepts 0.5k but\n // not 0.25k. How does this work with the previous?\n (value * 10) % multi === 0 &&\n numericSymbols[i] !== null &&\n value !== 0) { // #5480\n ret = numberFormatter(value / multi, -1) + numericSymbols[i];\n }\n }\n }\n if (typeof ret === 'undefined') {\n if (Math.abs(value) >= 10000) { // Add thousands separators\n ret = numberFormatter(value, -1);\n }\n else { // Small numbers\n ret = numberFormatter(value, -1, void 0, ''); // #2466\n }\n }\n return ret;\n };\n /**\n * Get the minimum and maximum for the series of each axis. The function\n * analyzes the axis series and updates `this.dataMin` and `this.dataMax`.\n *\n * @private\n * @function Highcharts.Axis#getSeriesExtremes\n *\n * @emits Highcharts.Axis#event:afterGetSeriesExtremes\n * @emits Highcharts.Axis#event:getSeriesExtremes\n */\n Axis.prototype.getSeriesExtremes = function () {\n var axis = this;\n var xExtremes;\n Axis_fireEvent(this, 'getSeriesExtremes', null, function () {\n axis.hasVisibleSeries = false;\n // Reset properties in case we're redrawing (#3353)\n axis.dataMin = axis.dataMax = axis.threshold = void 0;\n axis.softThreshold = !axis.isXAxis;\n // Loop through this axis' series\n axis.series.forEach(function (series) {\n if (series.reserveSpace()) {\n var seriesOptions = series.options;\n var xData = void 0,\n threshold = seriesOptions.threshold,\n seriesDataMin = void 0,\n seriesDataMax = void 0;\n axis.hasVisibleSeries = true;\n // Validate threshold in logarithmic axes\n if (axis.positiveValuesOnly && (threshold || 0) <= 0) {\n threshold = void 0;\n }\n // Get dataMin and dataMax for X axes\n if (axis.isXAxis) {\n xData = series.getColumn('x');\n if (xData.length) {\n xData = axis.logarithmic ?\n xData.filter(function (x) { return x > 0; }) :\n xData;\n xExtremes = series.getXExtremes(xData);\n // If xData contains values which is not numbers,\n // then filter them out. To prevent performance hit,\n // we only do this after we have already found\n // seriesDataMin because in most cases all data is\n // valid. #5234.\n seriesDataMin = xExtremes.min;\n seriesDataMax = xExtremes.max;\n if (!Axis_isNumber(seriesDataMin) &&\n // #5010:\n !(seriesDataMin instanceof Date)) {\n xData = xData.filter(Axis_isNumber);\n xExtremes = series.getXExtremes(xData);\n // Do it again with valid data\n seriesDataMin = xExtremes.min;\n seriesDataMax = xExtremes.max;\n }\n if (xData.length) {\n axis.dataMin = Math.min(Axis_pick(axis.dataMin, seriesDataMin), seriesDataMin);\n axis.dataMax = Math.max(Axis_pick(axis.dataMax, seriesDataMax), seriesDataMax);\n }\n }\n // Get dataMin and dataMax for Y axes, as well as handle\n // stacking and processed data\n }\n else {\n // Get this particular series extremes\n var dataExtremes = series.applyExtremes();\n // Get the dataMin and dataMax so far. If percentage is\n // used, the min and max are always 0 and 100. If\n // seriesDataMin and seriesDataMax is null, then series\n // doesn't have active y data, we continue with nulls\n if (Axis_isNumber(dataExtremes.dataMin)) {\n seriesDataMin = dataExtremes.dataMin;\n axis.dataMin = Math.min(Axis_pick(axis.dataMin, seriesDataMin), seriesDataMin);\n }\n if (Axis_isNumber(dataExtremes.dataMax)) {\n seriesDataMax = dataExtremes.dataMax;\n axis.dataMax = Math.max(Axis_pick(axis.dataMax, seriesDataMax), seriesDataMax);\n }\n // Adjust to threshold\n if (Axis_defined(threshold)) {\n axis.threshold = threshold;\n }\n // If any series has a hard threshold, it takes\n // precedence\n if (!seriesOptions.softThreshold ||\n axis.positiveValuesOnly) {\n axis.softThreshold = false;\n }\n }\n }\n });\n });\n Axis_fireEvent(this, 'afterGetSeriesExtremes');\n };\n /**\n * Translate from axis value to pixel position on the chart, or back. Use\n * the `toPixels` and `toValue` functions in applications.\n *\n * @private\n * @function Highcharts.Axis#translate\n */\n Axis.prototype.translate = function (val, backwards, cvsCoord, old, handleLog, pointPlacement) {\n var _a;\n var axis = (this.linkedParent || this), // #1417\n localMin = (old && axis.old ? axis.old.min : axis.min);\n if (!Axis_isNumber(localMin)) {\n return NaN;\n }\n var minPixelPadding = axis.minPixelPadding,\n doPostTranslate = (axis.isOrdinal ||\n ((_a = axis.brokenAxis) === null || _a === void 0 ? void 0 : _a.hasBreaks) ||\n (axis.logarithmic && handleLog)) && axis.lin2val;\n var sign = 1,\n cvsOffset = 0,\n localA = old && axis.old ? axis.old.transA : axis.transA,\n returnValue = 0;\n if (!localA) {\n localA = axis.transA;\n }\n // In vertical axes, the canvas coordinates start from 0 at the top like\n // in SVG.\n if (cvsCoord) {\n sign *= -1; // Canvas coordinates inverts the value\n cvsOffset = axis.len;\n }\n // Handle reversed axis\n if (axis.reversed) {\n sign *= -1;\n cvsOffset -= sign * (axis.sector || axis.len);\n }\n // From pixels to value\n if (backwards) { // Reverse translation\n val = val * sign + cvsOffset;\n val -= minPixelPadding;\n // From chart pixel to value:\n returnValue = val / localA + localMin;\n if (doPostTranslate) { // Log, ordinal and broken axis\n returnValue = axis.lin2val(returnValue);\n }\n // From value to pixels\n }\n else {\n if (doPostTranslate) { // Log, ordinal and broken axis\n val = axis.val2lin(val);\n }\n var value = sign * (val - localMin) * localA;\n returnValue = value +\n cvsOffset +\n (sign * minPixelPadding) +\n (Axis_isNumber(pointPlacement) ? localA * pointPlacement : 0);\n if (!axis.isRadial) {\n returnValue = Axis_correctFloat(returnValue);\n }\n }\n return returnValue;\n };\n /**\n * Translate a value in terms of axis units into pixels within the chart.\n *\n * @function Highcharts.Axis#toPixels\n *\n * @param {number|string} value\n * A value in terms of axis units. For datetime axes, a timestamp or\n * date/time string is accepted.\n *\n * @param {boolean} [paneCoordinates=false]\n * Whether to return the pixel coordinate relative to the chart or just the\n * axis/pane itself.\n *\n * @return {number}\n * Pixel position of the value on the chart or axis.\n */\n Axis.prototype.toPixels = function (value, paneCoordinates) {\n var _a,\n _b;\n return this.translate((_b = (_a = this.chart) === null || _a === void 0 ? void 0 : _a.time.parse(value)) !== null && _b !== void 0 ? _b : NaN, false, !this.horiz, void 0, true) + (paneCoordinates ? 0 : this.pos);\n };\n /**\n * Translate a pixel position along the axis to a value in terms of axis\n * units.\n *\n * @function Highcharts.Axis#toValue\n *\n * @param {number} pixel\n * The pixel value coordinate.\n *\n * @param {boolean} [paneCoordinates=false]\n * Whether the input pixel is relative to the chart or just the axis/pane\n * itself.\n *\n * @return {number}\n * The axis value.\n */\n Axis.prototype.toValue = function (pixel, paneCoordinates) {\n return this.translate(pixel - (paneCoordinates ? 0 : this.pos), true, !this.horiz, void 0, true);\n };\n /**\n * Create the path for a plot line that goes from the given value on\n * this axis, across the plot to the opposite side. Also used internally for\n * grid lines and crosshairs.\n *\n * @function Highcharts.Axis#getPlotLinePath\n *\n * @param {Highcharts.AxisPlotLinePathOptionsObject} options\n * Options for the path.\n *\n * @return {Highcharts.SVGPathArray|null}\n * The SVG path definition for the plot line.\n */\n Axis.prototype.getPlotLinePath = function (options) {\n var axis = this,\n chart = axis.chart,\n axisLeft = axis.left,\n axisTop = axis.top,\n old = options.old,\n value = options.value,\n lineWidth = options.lineWidth,\n cHeight = (old && chart.oldChartHeight) || chart.chartHeight,\n cWidth = (old && chart.oldChartWidth) || chart.chartWidth,\n transB = axis.transB;\n var translatedValue = options.translatedValue,\n force = options.force,\n x1,\n y1,\n x2,\n y2,\n skip;\n // eslint-disable-next-line valid-jsdoc\n /**\n * Check if x is between a and b. If not, either move to a/b\n * or skip, depending on the force parameter.\n * @private\n */\n function between(x, a, b) {\n if (force !== 'pass' && (x < a || x > b)) {\n if (force) {\n x = Axis_clamp(x, a, b);\n }\n else {\n skip = true;\n }\n }\n return x;\n }\n var evt = {\n value: value,\n lineWidth: lineWidth,\n old: old,\n force: force,\n acrossPanes: options.acrossPanes,\n translatedValue: translatedValue\n };\n Axis_fireEvent(this, 'getPlotLinePath', evt, function (e) {\n translatedValue = Axis_pick(translatedValue, axis.translate(value, void 0, void 0, old));\n // Keep the translated value within sane bounds, and avoid Infinity\n // to fail the isNumber test (#7709).\n translatedValue = Axis_clamp(translatedValue, -1e9, 1e9);\n x1 = x2 = translatedValue + transB;\n y1 = y2 = cHeight - translatedValue - transB;\n if (!Axis_isNumber(translatedValue)) { // No min or max\n skip = true;\n force = false; // #7175, don't force it when path is invalid\n }\n else if (axis.horiz) {\n y1 = axisTop;\n y2 = cHeight - axis.bottom + (axis.options.isInternal ?\n 0 :\n (chart.scrollablePixelsY || 0)); // #20354, scrollablePixelsY shouldn't be used for navigator\n x1 = x2 = between(x1, axisLeft, axisLeft + axis.width);\n }\n else {\n x1 = axisLeft;\n x2 = cWidth - axis.right + (chart.scrollablePixelsX || 0);\n y1 = y2 = between(y1, axisTop, axisTop + axis.height);\n }\n e.path = skip && !force ?\n void 0 :\n chart.renderer.crispLine([['M', x1, y1], ['L', x2, y2]], lineWidth || 1);\n });\n return evt.path;\n };\n /**\n * Internal function to get the tick positions of a linear axis to round\n * values like whole tens or every five.\n *\n * @function Highcharts.Axis#getLinearTickPositions\n *\n * @param {number} tickInterval\n * The normalized tick interval.\n *\n * @param {number} min\n * Axis minimum.\n *\n * @param {number} max\n * Axis maximum.\n *\n * @return {Array<number>}\n * An array of axis values where ticks should be placed.\n */\n Axis.prototype.getLinearTickPositions = function (tickInterval, min, max) {\n var roundedMin = Axis_correctFloat(Math.floor(min / tickInterval) * tickInterval), roundedMax = Axis_correctFloat(Math.ceil(max / tickInterval) * tickInterval), tickPositions = [];\n var pos,\n lastPos,\n precision;\n // When the precision is higher than what we filter out in\n // correctFloat, skip it (#6183).\n if (Axis_correctFloat(roundedMin + tickInterval) === roundedMin) {\n precision = 20;\n }\n // For single points, add a tick regardless of the relative position\n // (#2662, #6274)\n if (this.single) {\n return [min];\n }\n // Populate the intermediate values\n pos = roundedMin;\n while (pos <= roundedMax) {\n // Place the tick on the rounded value\n tickPositions.push(pos);\n // Always add the raw tickInterval, not the corrected one.\n pos = Axis_correctFloat(pos + tickInterval, precision);\n // If the interval is not big enough in the current min - max range\n // to actually increase the loop variable, we need to break out to\n // prevent endless loop. Issue #619\n if (pos === lastPos) {\n break;\n }\n // Record the last value\n lastPos = pos;\n }\n return tickPositions;\n };\n /**\n * Resolve the new minorTicks/minorTickInterval options into the legacy\n * loosely typed minorTickInterval option.\n *\n * @function Highcharts.Axis#getMinorTickInterval\n *\n * @return {number|\"auto\"|null}\n * Legacy option\n */\n Axis.prototype.getMinorTickInterval = function () {\n var _a = this.options,\n minorTicks = _a.minorTicks,\n minorTickInterval = _a.minorTickInterval;\n if (minorTicks === true) {\n return Axis_pick(minorTickInterval, 'auto');\n }\n if (minorTicks === false) {\n return;\n }\n return minorTickInterval;\n };\n /**\n * Internal function to return the minor tick positions. For logarithmic\n * axes, the same logic as for major ticks is reused.\n *\n * @function Highcharts.Axis#getMinorTickPositions\n *\n * @return {Array<number>}\n * An array of axis values where ticks should be placed.\n */\n Axis.prototype.getMinorTickPositions = function () {\n var _a;\n var axis = this,\n options = axis.options,\n tickPositions = axis.tickPositions,\n minorTickInterval = axis.minorTickInterval,\n pointRangePadding = axis.pointRangePadding || 0,\n min = (axis.min || 0) - pointRangePadding, // #1498\n max = (axis.max || 0) + pointRangePadding, // #1498\n range = ((_a = axis.brokenAxis) === null || _a === void 0 ? void 0 : _a.hasBreaks) ?\n axis.brokenAxis.unitLength : max - min;\n var minorTickPositions = [],\n pos;\n // If minor ticks get too dense, they are hard to read, and may cause\n // long running script. So we don't draw them.\n if (range && range / minorTickInterval < axis.len / 3) { // #3875\n var logarithmic_1 = axis.logarithmic;\n if (logarithmic_1) {\n // For each interval in the major ticks, compute the minor ticks\n // separately.\n this.paddedTicks.forEach(function (_pos, i, paddedTicks) {\n if (i) {\n minorTickPositions.push.apply(minorTickPositions, logarithmic_1.getLogTickPositions(minorTickInterval, paddedTicks[i - 1], paddedTicks[i], true));\n }\n });\n }\n else if (axis.dateTime &&\n this.getMinorTickInterval() === 'auto') { // #1314\n minorTickPositions = minorTickPositions.concat(axis.getTimeTicks(axis.dateTime.normalizeTimeTickInterval(minorTickInterval), min, max, options.startOfWeek));\n }\n else {\n for (pos = min + (tickPositions[0] - min) % minorTickInterval; pos <= max; pos += minorTickInterval) {\n // Very, very, tight grid lines (#5771)\n if (pos === minorTickPositions[0]) {\n break;\n }\n minorTickPositions.push(pos);\n }\n }\n }\n if (minorTickPositions.length !== 0) {\n axis.trimTicks(minorTickPositions); // #3652 #3743 #1498 #6330\n }\n return minorTickPositions;\n };\n /**\n * Adjust the min and max for the minimum range. Keep in mind that the\n * series data is not yet processed, so we don't have information on data\n * cropping and grouping, or updated `axis.pointRange` or\n * `series.pointRange`. The data can't be processed until we have finally\n * established min and max.\n *\n * @private\n * @function Highcharts.Axis#adjustForMinRange\n */\n Axis.prototype.adjustForMinRange = function () {\n var _a,\n _b,\n _c;\n var axis = this,\n options = axis.options,\n logarithmic = axis.logarithmic,\n time = axis.chart.time;\n var max = axis.max,\n min = axis.min,\n minRange = axis.minRange,\n zoomOffset,\n spaceAvailable,\n closestDataRange,\n minArgs,\n maxArgs;\n // Set the automatic minimum range based on the closest point distance\n if (axis.isXAxis &&\n typeof minRange === 'undefined' &&\n !logarithmic) {\n if (Axis_defined(options.min) ||\n Axis_defined(options.max) ||\n Axis_defined(options.floor) ||\n Axis_defined(options.ceiling)) {\n // Setting it to null, as opposed to undefined, signals we don't\n // run this block again as per the condition above.\n minRange = null;\n }\n else {\n // Find the closest distance between raw data points, as opposed\n // to closestPointRange that applies to processed points\n // (cropped and grouped)\n closestDataRange = Axis_getClosestDistance(axis.series.map(function (s) {\n var xData = s.getColumn('x');\n // If xIncrement, we only need to measure the two first\n // points to get the distance. Saves processing time.\n return s.xIncrement ? xData.slice(0, 2) : xData;\n })) || 0;\n minRange = Math.min(closestDataRange * 5, axis.dataMax - axis.dataMin);\n }\n }\n // If minRange is exceeded, adjust\n if (Axis_isNumber(max) &&\n Axis_isNumber(min) &&\n Axis_isNumber(minRange) &&\n max - min < minRange) {\n spaceAvailable =\n axis.dataMax - axis.dataMin >=\n minRange;\n zoomOffset = (minRange - max + min) / 2;\n // If min and max options have been set, don't go beyond it\n minArgs = [\n min - zoomOffset,\n (_a = time.parse(options.min)) !== null && _a !== void 0 ? _a : (min - zoomOffset)\n ];\n // If space is available, stay within the data range\n if (spaceAvailable) {\n minArgs[2] = logarithmic ?\n logarithmic.log2lin(axis.dataMin) :\n axis.dataMin;\n }\n min = Axis_arrayMax(minArgs);\n maxArgs = [\n min + minRange,\n (_b = time.parse(options.max)) !== null && _b !== void 0 ? _b : (min + minRange)\n ];\n // If space is available, stay within the data range\n if (spaceAvailable) {\n maxArgs[2] = logarithmic ?\n logarithmic.log2lin(axis.dataMax) :\n axis.dataMax;\n }\n max = Axis_arrayMin(maxArgs);\n // Now if the max is adjusted, adjust the min back\n if (max - min < minRange) {\n minArgs[0] = max - minRange;\n minArgs[1] = (_c = time.parse(options.min)) !== null && _c !== void 0 ? _c : (max - minRange);\n min = Axis_arrayMax(minArgs);\n }\n }\n // Record modified extremes\n axis.minRange = minRange;\n axis.min = min;\n axis.max = max;\n };\n /**\n * Find the closestPointRange across all series, including the single data\n * series.\n *\n * @private\n * @function Highcharts.Axis#getClosest\n */\n Axis.prototype.getClosest = function () {\n var closestSingleDistance,\n closestDistance;\n if (this.categories) {\n closestDistance = 1;\n }\n else {\n var singleXs_1 = [];\n this.series.forEach(function (series) {\n var seriesClosest = series.closestPointRange,\n xData = series.getColumn('x');\n if (xData.length === 1) {\n singleXs_1.push(xData[0]);\n }\n else if (series.sorted &&\n Axis_defined(seriesClosest) &&\n series.reserveSpace()) {\n closestDistance = Axis_defined(closestDistance) ?\n Math.min(closestDistance, seriesClosest) :\n seriesClosest;\n }\n });\n if (singleXs_1.length) {\n singleXs_1.sort(function (a, b) { return a - b; });\n closestSingleDistance = Axis_getClosestDistance([singleXs_1]);\n }\n }\n if (closestSingleDistance && closestDistance) {\n return Math.min(closestSingleDistance, closestDistance);\n }\n return closestSingleDistance || closestDistance;\n };\n /**\n * When a point name is given and no x, search for the name in the existing\n * categories, or if categories aren't provided, search names or create a\n * new category (#2522).\n *\n * @private\n * @function Highcharts.Axis#nameToX\n *\n * @param {Highcharts.Point} point\n * The point to inspect.\n *\n * @return {number}\n * The X value that the point is given.\n */\n Axis.prototype.nameToX = function (point) {\n var explicitCategories = Axis_isArray(this.options.categories),\n names = explicitCategories ? this.categories : this.names;\n var nameX = point.options.x,\n x;\n point.series.requireSorting = false;\n if (!Axis_defined(nameX)) {\n nameX = this.uniqueNames && names ?\n (explicitCategories ?\n names.indexOf(point.name) :\n Axis_pick(names.keys[point.name], -1)) :\n point.series.autoIncrement();\n }\n if (nameX === -1) { // Not found in current categories\n if (!explicitCategories && names) {\n x = names.length;\n }\n }\n else if (Axis_isNumber(nameX)) {\n x = nameX;\n }\n // Write the last point's name to the names array\n if (typeof x !== 'undefined') {\n this.names[x] = point.name;\n // Backwards mapping is much faster than array searching (#7725)\n this.names.keys[point.name] = x;\n }\n else if (point.x) {\n x = point.x; // #17438\n }\n return x;\n };\n /**\n * When changes have been done to series data, update the axis.names.\n *\n * @private\n * @function Highcharts.Axis#updateNames\n */\n Axis.prototype.updateNames = function () {\n var axis = this,\n names = this.names,\n i = names.length;\n if (i > 0) {\n Object.keys(names.keys).forEach(function (key) {\n delete (names.keys)[key];\n });\n names.length = 0;\n this.minRange = this.userMinRange; // Reset\n (this.series || []).forEach(function (series) {\n // Reset incrementer (#5928)\n series.xIncrement = null;\n // When adding a series, points are not yet generated\n if (!series.points || series.isDirtyData) {\n // When we're updating the series with data that is longer\n // than it was, and cropThreshold is passed, we need to make\n // sure that the axis.max is increased _before_ running the\n // premature processData. Otherwise this early iteration of\n // processData will crop the points to axis.max, and the\n // names array will be too short (#5857).\n axis.max = Math.max(axis.max || 0, series.dataTable.rowCount - 1);\n series.processData();\n series.generatePoints();\n }\n var xData = series.getColumn('x').slice();\n series.data.forEach(function (point, i) {\n var x = xData[i];\n if ((point === null || point === void 0 ? void 0 : point.options) &&\n typeof point.name !== 'undefined' // #9562\n ) {\n x = axis.nameToX(point);\n if (typeof x !== 'undefined' && x !== point.x) {\n xData[i] = point.x = x;\n }\n }\n });\n series.dataTable.setColumn('x', xData);\n });\n }\n };\n /**\n * Update translation information.\n *\n * @private\n * @function Highcharts.Axis#setAxisTranslation\n *\n * @emits Highcharts.Axis#event:afterSetAxisTranslation\n */\n Axis.prototype.setAxisTranslation = function () {\n var axis = this,\n range = axis.max - axis.min,\n linkedParent = axis.linkedParent,\n hasCategories = !!axis.categories,\n isXAxis = axis.isXAxis;\n var pointRange = axis.axisPointRange || 0,\n closestPointRange,\n minPointOffset = 0,\n pointRangePadding = 0,\n ordinalCorrection,\n transA = axis.transA;\n // Adjust translation for padding. Y axis with categories need to go\n // through the same (#1784).\n if (isXAxis || hasCategories || pointRange) {\n // Get the closest points\n closestPointRange = axis.getClosest();\n if (linkedParent) {\n minPointOffset = linkedParent.minPointOffset;\n pointRangePadding = linkedParent.pointRangePadding;\n }\n else {\n axis.series.forEach(function (series) {\n var seriesPointRange = hasCategories ?\n 1 :\n (isXAxis ?\n Axis_pick(series.options.pointRange,\n closestPointRange, 0) :\n (axis.axisPointRange || 0)), // #2806\n pointPlacement = series.options.pointPlacement;\n pointRange = Math.max(pointRange, seriesPointRange);\n if (!axis.single || hasCategories) {\n // TODO: series should internally set x- and y-\n // pointPlacement to simplify this logic.\n var isPointPlacementAxis = series.is('xrange') ?\n !isXAxis :\n isXAxis;\n // The `minPointOffset` is the value padding to the left\n // of the axis in order to make room for points with a\n // pointRange, typically columns, or line/scatter points\n // on a category axis. When the `pointPlacement` option\n // is 'between' or 'on', this padding does not apply.\n minPointOffset = Math.max(minPointOffset, isPointPlacementAxis && Axis_isString(pointPlacement) ?\n 0 :\n seriesPointRange / 2);\n // Determine the total padding needed to the length of\n // the axis to make room for the pointRange. If the\n // series' pointPlacement is 'on', no padding is added.\n pointRangePadding = Math.max(pointRangePadding, isPointPlacementAxis && pointPlacement === 'on' ?\n 0 :\n seriesPointRange);\n }\n });\n }\n // Record minPointOffset and pointRangePadding\n ordinalCorrection = (axis.ordinal && axis.ordinal.slope && closestPointRange) ?\n axis.ordinal.slope / closestPointRange :\n 1; // #988, #1853\n axis.minPointOffset = minPointOffset =\n minPointOffset * ordinalCorrection;\n axis.pointRangePadding =\n pointRangePadding = pointRangePadding * ordinalCorrection;\n // The `pointRange` is the width reserved for each point, like in a\n // column chart\n axis.pointRange = Math.min(pointRange, axis.single && hasCategories ? 1 : range);\n // The `closestPointRange` is the closest distance between points.\n // In columns it is mostly equal to pointRange, but in lines\n // pointRange is 0 while closestPointRange is some other value\n if (isXAxis && closestPointRange) {\n axis.closestPointRange = closestPointRange;\n }\n }\n // Secondary values\n axis.translationSlope = axis.transA = transA =\n axis.staticScale ||\n axis.len / ((range + pointRangePadding) || 1);\n // Translation addend\n axis.transB = axis.horiz ? axis.left : axis.bottom;\n axis.minPixelPadding = transA * minPointOffset;\n Axis_fireEvent(this, 'afterSetAxisTranslation');\n };\n /**\n * @private\n * @function Highcharts.Axis#minFromRange\n */\n Axis.prototype.minFromRange = function () {\n var _a = this,\n max = _a.max,\n min = _a.min;\n return Axis_isNumber(max) && Axis_isNumber(min) && max - min || void 0;\n };\n /**\n * Set the tick positions to round values and optionally extend the extremes\n * to the nearest tick.\n *\n * @private\n * @function Highcharts.Axis#setTickInterval\n *\n * @param {boolean} secondPass\n * TO-DO: parameter description\n *\n * @emits Highcharts.Axis#event:foundExtremes\n */\n Axis.prototype.setTickInterval = function (secondPass) {\n var _a,\n _b,\n _c,\n _d;\n var axis = this,\n categories = axis.categories,\n chart = axis.chart,\n dataMax = axis.dataMax,\n dataMin = axis.dataMin,\n dateTime = axis.dateTime,\n isXAxis = axis.isXAxis,\n logarithmic = axis.logarithmic,\n options = axis.options,\n softThreshold = axis.softThreshold,\n time = chart.time,\n threshold = Axis_isNumber(axis.threshold) ? axis.threshold : void 0,\n minRange = axis.minRange || 0,\n ceiling = options.ceiling,\n floor = options.floor,\n linkedTo = options.linkedTo,\n softMax = options.softMax,\n softMin = options.softMin,\n linkedParent = Axis_isNumber(linkedTo) && ((_a = chart[axis.coll]) === null || _a === void 0 ? void 0 : _a[linkedTo]),\n tickPixelIntervalOption = options.tickPixelInterval;\n var maxPadding = options.maxPadding,\n minPadding = options.minPadding,\n range = 0,\n linkedParentExtremes, \n // Only non-negative tickInterval is valid, #12961\n tickIntervalOption = Axis_isNumber(options.tickInterval) && options.tickInterval >= 0 ?\n options.tickInterval : void 0,\n thresholdMin,\n thresholdMax,\n hardMin,\n hardMax;\n if (!dateTime && !categories && !linkedParent) {\n this.getTickAmount();\n }\n // Min or max set either by zooming/setExtremes or initial options\n hardMin = Axis_pick(axis.userMin, time.parse(options.min));\n hardMax = Axis_pick(axis.userMax, time.parse(options.max));\n // Linked axis gets the extremes from the parent axis\n if (linkedParent) {\n axis.linkedParent = linkedParent;\n linkedParentExtremes = linkedParent.getExtremes();\n axis.min = Axis_pick(linkedParentExtremes.min, linkedParentExtremes.dataMin);\n axis.max = Axis_pick(linkedParentExtremes.max, linkedParentExtremes.dataMax);\n if (this.type !== linkedParent.type) {\n // Can't link axes of different type\n Axis_error(11, true, chart);\n }\n // Initial min and max from the extreme data values\n }\n else {\n // Adjust to hard threshold\n if (softThreshold &&\n Axis_defined(threshold) &&\n Axis_isNumber(dataMax) &&\n Axis_isNumber(dataMin)) {\n if (dataMin >= threshold) {\n thresholdMin = threshold;\n minPadding = 0;\n }\n else if (dataMax <= threshold) {\n thresholdMax = threshold;\n maxPadding = 0;\n }\n }\n axis.min = Axis_pick(hardMin, thresholdMin, dataMin);\n axis.max = Axis_pick(hardMax, thresholdMax, dataMax);\n }\n if (Axis_isNumber(axis.max) && Axis_isNumber(axis.min)) {\n if (logarithmic) {\n if (axis.positiveValuesOnly &&\n !secondPass &&\n Math.min(axis.min, Axis_pick(dataMin, axis.min)) <= 0) { // #978\n // Can't plot negative values on log axis\n Axis_error(10, true, chart);\n }\n // The correctFloat cures #934, float errors on full tens. But\n // it was too aggressive for #4360 because of conversion back to\n // lin, therefore use precision 15.\n axis.min = Axis_correctFloat(logarithmic.log2lin(axis.min), 16);\n axis.max = Axis_correctFloat(logarithmic.log2lin(axis.max), 16);\n }\n // Handle zoomed range\n if (axis.range && Axis_isNumber(dataMin)) {\n // #618, #6773:\n axis.userMin = axis.min = hardMin = Math.max(dataMin, axis.minFromRange() || 0);\n axis.userMax = hardMax = axis.max;\n axis.range = void 0; // Don't use it when running setExtremes\n }\n }\n // Hook for Highcharts Stock Scroller and bubble axis padding\n Axis_fireEvent(axis, 'foundExtremes');\n // Adjust min and max for the minimum range\n axis.adjustForMinRange();\n if (Axis_isNumber(axis.min) && Axis_isNumber(axis.max)) {\n // Handle options for floor, ceiling, softMin and softMax (#6359)\n if (!Axis_isNumber(axis.userMin) &&\n Axis_isNumber(softMin) &&\n softMin < axis.min) {\n axis.min = hardMin = softMin; // #6894\n }\n if (!Axis_isNumber(axis.userMax) &&\n Axis_isNumber(softMax) &&\n softMax > axis.max) {\n axis.max = hardMax = softMax; // #6894\n }\n // Pad the values to get clear of the chart's edges. To avoid\n // tickInterval taking the padding into account, we do this after\n // computing tick interval (#1337).\n if (!categories &&\n !axis.axisPointRange &&\n !((_b = axis.stacking) === null || _b === void 0 ? void 0 : _b.usePercentage) &&\n !linkedParent) {\n range = axis.max - axis.min;\n if (range) {\n if (!Axis_defined(hardMin) && minPadding) {\n axis.min -= range * minPadding;\n }\n if (!Axis_defined(hardMax) && maxPadding) {\n axis.max += range * maxPadding;\n }\n }\n }\n if (!Axis_isNumber(axis.userMin) && Axis_isNumber(floor)) {\n axis.min = Math.max(axis.min, floor);\n }\n if (!Axis_isNumber(axis.userMax) && Axis_isNumber(ceiling)) {\n axis.max = Math.min(axis.max, ceiling);\n }\n // When the threshold is soft, adjust the extreme value only if the\n // data extreme and the padded extreme land on either side of the\n // threshold. For example, a series of [0, 1, 2, 3] would make the\n // yAxis add a tick for -1 because of the default `minPadding` and\n // `startOnTick` options. This is prevented by the `softThreshold`\n // option.\n if (softThreshold &&\n Axis_isNumber(dataMin) &&\n Axis_isNumber(dataMax)) {\n var numThreshold = threshold || 0;\n if (!Axis_defined(hardMin) &&\n axis.min < numThreshold &&\n dataMin >= numThreshold) {\n axis.min = options.minRange ?\n Math.min(numThreshold, axis.max - minRange) :\n numThreshold;\n }\n else if (!Axis_defined(hardMax) &&\n axis.max > numThreshold &&\n dataMax <= numThreshold) {\n axis.max = options.minRange ?\n Math.max(numThreshold, axis.min + minRange) :\n numThreshold;\n }\n }\n // If min is bigger than highest, or if max less than lowest value,\n // the chart should not render points. (#14417)\n if (!chart.polar && axis.min > axis.max) {\n if (Axis_defined(options.min)) {\n axis.max = axis.min;\n }\n else if (Axis_defined(options.max)) {\n axis.min = axis.max;\n }\n }\n range = axis.max - axis.min;\n }\n // Get tickInterval\n if (axis.min === axis.max ||\n !Axis_isNumber(axis.min) ||\n !Axis_isNumber(axis.max)) {\n axis.tickInterval = 1;\n }\n else if (linkedParent &&\n !tickIntervalOption &&\n tickPixelIntervalOption === linkedParent.options.tickPixelInterval) {\n axis.tickInterval = tickIntervalOption = linkedParent.tickInterval;\n }\n else {\n axis.tickInterval = Axis_pick(tickIntervalOption, this.tickAmount ?\n range / Math.max(this.tickAmount - 1, 1) :\n void 0, \n // For categorized axis, 1 is default, for linear axis use\n // tickPix\n categories ?\n 1 :\n // Don't let it be more than the data range\n range * tickPixelIntervalOption /\n Math.max(axis.len, tickPixelIntervalOption));\n }\n // Now we're finished detecting min and max, crop and group series data.\n // This is in turn needed in order to find tick positions in ordinal\n // axes.\n if (isXAxis && !secondPass) {\n var hasExtremesChanged_1 = axis.min !== ((_c = axis.old) === null || _c === void 0 ? void 0 : _c.min) ||\n axis.max !== ((_d = axis.old) === null || _d === void 0 ? void 0 : _d.max);\n // First process all series assigned to that axis.\n axis.series.forEach(function (series) {\n var _a;\n // Allows filtering out points outside the plot area.\n series.forceCrop = (_a = series.forceCropping) === null || _a === void 0 ? void 0 : _a.call(series);\n series.processData(hasExtremesChanged_1);\n });\n // Then apply grouping if needed. The hasExtremesChanged helps to\n // decide if the data grouping should be skipped in the further\n // calculations #16319.\n Axis_fireEvent(this, 'postProcessData', { hasExtremesChanged: hasExtremesChanged_1 });\n }\n // Set the translation factor used in translate function\n axis.setAxisTranslation();\n // Hook for ordinal axes and radial axes\n Axis_fireEvent(this, 'initialAxisTranslation');\n // In column-like charts, don't cramp in more ticks than there are\n // points (#1943, #4184)\n if (axis.pointRange && !tickIntervalOption) {\n axis.tickInterval = Math.max(axis.pointRange, axis.tickInterval);\n }\n // Before normalizing the tick interval, handle minimum tick interval.\n // This applies only if tickInterval is not defined.\n var minTickInterval = Axis_pick(options.minTickInterval, \n // In datetime axes, don't go below the data interval, except when\n // there are scatter-like series involved (#13369).\n dateTime &&\n !axis.series.some(function (s) { return !s.sorted; }) ?\n axis.closestPointRange : 0);\n if (!tickIntervalOption && axis.tickInterval < minTickInterval) {\n axis.tickInterval = minTickInterval;\n }\n // For linear axes, normalize the interval\n if (!dateTime && !logarithmic && !tickIntervalOption) {\n axis.tickInterval = getNormalizedTickInterval(axis, axis.tickInterval);\n }\n // Prevent ticks from getting so close that we can't draw the labels\n if (!this.tickAmount) {\n axis.tickInterval = axis.unsquish();\n }\n this.setTickPositions();\n };\n /**\n * Now we have computed the normalized tickInterval, get the tick positions.\n *\n * @private\n * @function Highcharts.Axis#setTickPositions\n *\n * @emits Highcharts.Axis#event:afterSetTickPositions\n */\n Axis.prototype.setTickPositions = function () {\n var _a,\n _b;\n var axis = this,\n options = this.options,\n tickPositionsOption = options.tickPositions,\n tickPositioner = options.tickPositioner,\n minorTickIntervalOption = this.getMinorTickInterval(),\n allowEndOnTick = !this.isPanning,\n startOnTick = allowEndOnTick && options.startOnTick,\n endOnTick = allowEndOnTick && options.endOnTick;\n var tickPositions = [],\n tickPositionerResult;\n // Set the tickmarkOffset\n this.tickmarkOffset = (this.categories &&\n options.tickmarkPlacement === 'between' &&\n this.tickInterval === 1) ? 0.5 : 0; // #3202\n // When there is only one point, or all points have the same value on\n // this axis, then min and max are equal and tickPositions.length is 0\n // or 1. In this case, add some padding in order to center the point,\n // but leave it with one tick. #1337.\n this.single =\n this.min === this.max &&\n Axis_defined(this.min) &&\n !this.tickAmount &&\n (\n // Data is on integer (#6563)\n this.min % 1 === 0 ||\n // Between integers and decimals are not allowed (#6274)\n options.allowDecimals !== false);\n /**\n * Contains the current positions that are laid out on the axis. The\n * positions are numbers in terms of axis values. In a category axis\n * they are integers, in a datetime axis they are also integers, but\n * designating milliseconds.\n *\n * This property is read only - for modifying the tick positions, use\n * the `tickPositioner` callback or [axis.tickPositions(\n * https://api.highcharts.com/highcharts/xAxis.tickPositions) option\n * instead.\n *\n * @name Highcharts.Axis#tickPositions\n * @type {Highcharts.AxisTickPositionsArray|undefined}\n */\n if (tickPositionsOption) {\n // Find the tick positions. Work on a copy (#1565)\n tickPositions = tickPositionsOption.slice();\n }\n else if (Axis_isNumber(this.min) && Axis_isNumber(this.max)) {\n // Too many ticks (#6405). Create a friendly warning and provide two\n // ticks so at least we can show the data series.\n if (!((_a = axis.ordinal) === null || _a === void 0 ? void 0 : _a.positions) &&\n ((this.max - this.min) /\n this.tickInterval >\n Math.max(2 * this.len, 200))) {\n tickPositions = [this.min, this.max];\n Axis_error(19, false, this.chart);\n }\n else if (axis.dateTime) {\n tickPositions = axis.getTimeTicks(axis.dateTime.normalizeTimeTickInterval(this.tickInterval, options.units), this.min, this.max, options.startOfWeek, (_b = axis.ordinal) === null || _b === void 0 ? void 0 : _b.positions, this.closestPointRange, true);\n }\n else if (axis.logarithmic) {\n tickPositions = axis.logarithmic.getLogTickPositions(this.tickInterval, this.min, this.max);\n }\n else {\n var startingTickInterval = this.tickInterval;\n var adjustedTickInterval = startingTickInterval;\n while (adjustedTickInterval <= startingTickInterval * 2) {\n tickPositions = this.getLinearTickPositions(this.tickInterval, this.min, this.max);\n // If there are more tick positions than the set tickAmount,\n // increase the tickInterval and continue until it fits.\n // (#17100)\n if (this.tickAmount &&\n tickPositions.length > this.tickAmount) {\n this.tickInterval = getNormalizedTickInterval(this, adjustedTickInterval *= 1.1);\n }\n else {\n break;\n }\n }\n }\n // Too dense ticks, keep only the first and last (#4477)\n if (tickPositions.length > this.len) {\n tickPositions = [\n tickPositions[0],\n tickPositions[tickPositions.length - 1]\n ];\n // Reduce doubled value (#7339)\n if (tickPositions[0] === tickPositions[1]) {\n tickPositions.length = 1;\n }\n }\n // Run the tick positioner callback, that allows modifying auto tick\n // positions.\n if (tickPositioner) {\n // Make it available to the positioner\n this.tickPositions = tickPositions;\n tickPositionerResult = tickPositioner.apply(axis, [this.min, this.max]);\n if (tickPositionerResult) {\n tickPositions = tickPositionerResult;\n }\n }\n }\n this.tickPositions = tickPositions;\n // Get minorTickInterval\n this.minorTickInterval =\n minorTickIntervalOption === 'auto' && this.tickInterval ?\n this.tickInterval / options.minorTicksPerMajor :\n minorTickIntervalOption;\n // Reset min/max or remove extremes based on start/end on tick\n this.paddedTicks = tickPositions.slice(0); // Used for logarithmic minor\n this.trimTicks(tickPositions, startOnTick, endOnTick);\n if (!this.isLinked && Axis_isNumber(this.min) && Axis_isNumber(this.max)) {\n // Substract half a unit (#2619, #2846, #2515, #3390), but not in\n // case of multiple ticks (#6897)\n if (this.single &&\n tickPositions.length < 2 &&\n !this.categories &&\n !this.series.some(function (s) {\n return (s.is('heatmap') && s.options.pointPlacement === 'between');\n })) {\n this.min -= 0.5;\n this.max += 0.5;\n }\n if (!tickPositionsOption && !tickPositionerResult) {\n this.adjustTickAmount();\n }\n }\n Axis_fireEvent(this, 'afterSetTickPositions');\n };\n /**\n * Handle startOnTick and endOnTick by either adapting to padding min/max or\n * rounded min/max. Also handle single data points.\n *\n * @private\n * @function Highcharts.Axis#trimTicks\n *\n * @param {Array<number>} tickPositions\n * TO-DO: parameter description\n *\n * @param {boolean} [startOnTick]\n * TO-DO: parameter description\n *\n * @param {boolean} [endOnTick]\n * TO-DO: parameter description\n */\n Axis.prototype.trimTicks = function (tickPositions, startOnTick, endOnTick) {\n var roundedMin = tickPositions[0],\n roundedMax = tickPositions[tickPositions.length - 1],\n minPointOffset = (!this.isOrdinal && this.minPointOffset) || 0; // (#12716)\n Axis_fireEvent(this, 'trimTicks');\n if (!this.isLinked) {\n if (startOnTick && roundedMin !== -Infinity) { // #6502\n this.min = roundedMin;\n }\n else {\n while (this.min - minPointOffset > tickPositions[0]) {\n tickPositions.shift();\n }\n }\n if (endOnTick) {\n this.max = roundedMax;\n }\n else {\n while (this.max + minPointOffset <\n tickPositions[tickPositions.length - 1]) {\n tickPositions.pop();\n }\n }\n // If no tick are left, set one tick in the middle (#3195)\n if (tickPositions.length === 0 &&\n Axis_defined(roundedMin) &&\n !this.options.tickPositions) {\n tickPositions.push((roundedMax + roundedMin) / 2);\n }\n }\n };\n /**\n * Check if there are multiple axes in the same pane.\n *\n * @private\n * @function Highcharts.Axis#alignToOthers\n *\n * @return {boolean|undefined}\n * True if there are other axes.\n */\n Axis.prototype.alignToOthers = function () {\n var axis = this,\n chart = axis.chart,\n alignedAxes = [this],\n options = axis.options,\n chartOptions = chart.options.chart,\n alignThresholds = (this.coll === 'yAxis' &&\n chartOptions.alignThresholds),\n thresholdAlignments = [];\n var hasOther;\n axis.thresholdAlignment = void 0;\n if ((\n // Only if alignTicks or alignThresholds is true\n (chartOptions.alignTicks !== false && options.alignTicks) ||\n alignThresholds) &&\n // Disabled when startOnTick or endOnTick are false (#7604)\n options.startOnTick !== false &&\n options.endOnTick !== false &&\n // Don't try to align ticks on a log axis, they are not evenly\n // spaced (#6021)\n !axis.logarithmic) {\n // Get a key identifying which pane the axis belongs to\n var getKey_1 = function (axis) {\n var horiz = axis.horiz,\n options = axis.options;\n return [\n horiz ? options.left : options.top,\n options.width,\n options.height,\n options.pane\n ].join(',');\n };\n var thisKey_1 = getKey_1(this);\n chart[this.coll].forEach(function (otherAxis) {\n var series = otherAxis.series;\n if (\n // #4442\n series.length &&\n series.some(function (s) { return s.visible; }) &&\n otherAxis !== axis &&\n getKey_1(otherAxis) === thisKey_1) {\n hasOther = true; // #4201\n alignedAxes.push(otherAxis);\n }\n });\n }\n if (hasOther && alignThresholds) {\n // Handle alignThresholds. The `thresholdAlignments` array keeps\n // records of where each axis in the group wants its threshold, from\n // 0 which is on `axis.min`, to 1 which is on `axis.max`.\n alignedAxes.forEach(function (otherAxis) {\n var threshAlign = otherAxis.getThresholdAlignment(axis);\n if (Axis_isNumber(threshAlign)) {\n thresholdAlignments.push(threshAlign);\n }\n });\n // For each of the axes in the group, record the average\n // `thresholdAlignment`.\n var thresholdAlignment_1 = thresholdAlignments.length > 1 ?\n thresholdAlignments.reduce(function (sum,\n n) { return (sum += n); }, 0) / thresholdAlignments.length :\n void 0;\n alignedAxes.forEach(function (axis) {\n axis.thresholdAlignment = thresholdAlignment_1;\n });\n }\n return hasOther;\n };\n /**\n * Where the axis wants its threshold, from 0 which is on `axis.min`, to 1 which\n * is on `axis.max`.\n *\n * @private\n * @function Highcharts.Axis#getThresholdAlignment\n */\n Axis.prototype.getThresholdAlignment = function (callerAxis) {\n if (!Axis_isNumber(this.dataMin) ||\n (this !== callerAxis &&\n this.series.some(function (s) { return (s.isDirty || s.isDirtyData); }))) {\n this.getSeriesExtremes();\n }\n if (Axis_isNumber(this.threshold)) {\n var thresholdAlignment = Axis_clamp(((this.threshold - (this.dataMin || 0)) /\n ((this.dataMax || 0) - (this.dataMin || 0))), 0, 1);\n if (this.options.reversed) {\n thresholdAlignment = 1 - thresholdAlignment;\n }\n return thresholdAlignment;\n }\n };\n /**\n * Find the max ticks of either the x and y axis collection, and record it\n * in `this.tickAmount`.\n *\n * @private\n * @function Highcharts.Axis#getTickAmount\n */\n Axis.prototype.getTickAmount = function () {\n var axis = this,\n options = this.options,\n tickPixelInterval = options.tickPixelInterval;\n var tickAmount = options.tickAmount;\n if (!Axis_defined(options.tickInterval) &&\n !tickAmount &&\n this.len < tickPixelInterval &&\n !this.isRadial &&\n !axis.logarithmic &&\n options.startOnTick &&\n options.endOnTick) {\n tickAmount = 2;\n }\n if (!tickAmount && this.alignToOthers()) {\n // Add 1 because 4 tick intervals require 5 ticks (including first\n // and last)\n tickAmount = Math.ceil(this.len / tickPixelInterval) + 1;\n }\n // For tick amounts of 2 and 3, compute five ticks and remove the\n // intermediate ones. This prevents the axis from adding ticks that are\n // too far away from the data extremes.\n if (tickAmount < 4) {\n this.finalTickAmt = tickAmount;\n tickAmount = 5;\n }\n this.tickAmount = tickAmount;\n };\n /**\n * When using multiple axes, adjust the number of ticks to match the highest\n * number of ticks in that group.\n *\n * @private\n * @function Highcharts.Axis#adjustTickAmount\n */\n Axis.prototype.adjustTickAmount = function () {\n var axis = this,\n finalTickAmt = axis.finalTickAmt,\n max = axis.max,\n min = axis.min,\n options = axis.options,\n tickPositions = axis.tickPositions,\n tickAmount = axis.tickAmount,\n thresholdAlignment = axis.thresholdAlignment,\n currentTickAmount = tickPositions === null || tickPositions === void 0 ? void 0 : tickPositions.length,\n threshold = Axis_pick(axis.threshold,\n axis.softThreshold ? 0 : null);\n var len,\n i,\n tickInterval = axis.tickInterval,\n thresholdTickIndex;\n var \n // Extend the tickPositions by appending a position\n append = function () { return tickPositions.push(Axis_correctFloat(tickPositions[tickPositions.length - 1] +\n tickInterval)); }, \n // Extend the tickPositions by prepending a position\n prepend = function () { return tickPositions.unshift(Axis_correctFloat(tickPositions[0] - tickInterval)); };\n // If `thresholdAlignment` is a number, it means the `alignThresholds`\n // option is true. The `thresholdAlignment` is a scalar value between 0\n // and 1 for where the threshold should be relative to `axis.min` and\n // `axis.max`. Now that we know the tick amount, convert this to the\n // tick index. Unless `thresholdAlignment` is exactly 0 or 1, avoid the\n // first or last tick because that would lead to series being clipped.\n if (Axis_isNumber(thresholdAlignment)) {\n thresholdTickIndex = thresholdAlignment < 0.5 ?\n Math.ceil(thresholdAlignment * (tickAmount - 1)) :\n Math.floor(thresholdAlignment * (tickAmount - 1));\n if (options.reversed) {\n thresholdTickIndex = tickAmount - 1 - thresholdTickIndex;\n }\n }\n if (axis.hasData() && Axis_isNumber(min) && Axis_isNumber(max)) { // #14769\n // Adjust extremes and translation to the modified tick positions\n var adjustExtremes = function () {\n axis.transA *= (currentTickAmount - 1) / (tickAmount - 1);\n // Do not crop when ticks are not extremes (#9841)\n axis.min = options.startOnTick ?\n tickPositions[0] :\n Math.min(min, tickPositions[0]);\n axis.max = options.endOnTick ?\n tickPositions[tickPositions.length - 1] :\n Math.max(max, tickPositions[tickPositions.length - 1]);\n };\n // When the axis is subject to the alignThresholds option. Use\n // axis.threshold because the local threshold includes the\n // `softThreshold`.\n if (Axis_isNumber(thresholdTickIndex) && Axis_isNumber(axis.threshold)) {\n // Throw away the previously computed tickPositions and start\n // from scratch with only the threshold itself, then add ticks\n // below the threshold first, then fill up above the threshold.\n // If we are not able to fill up to axis.max, double the\n // tickInterval and run again.\n while (tickPositions[thresholdTickIndex] !== threshold ||\n tickPositions.length !== tickAmount ||\n tickPositions[0] > min ||\n tickPositions[tickPositions.length - 1] < max) {\n tickPositions.length = 0;\n tickPositions.push(axis.threshold);\n while (tickPositions.length < tickAmount) {\n if (\n // Start by prepending positions until the threshold\n // is at the required index...\n tickPositions[thresholdTickIndex] === void 0 ||\n tickPositions[thresholdTickIndex] > axis.threshold) {\n prepend();\n }\n else {\n // ... then append positions until we have the\n // required length\n append();\n }\n }\n // Safety vent\n if (tickInterval > axis.tickInterval * 8) {\n break;\n }\n tickInterval *= 2;\n }\n adjustExtremes();\n }\n else if (currentTickAmount < tickAmount) {\n while (tickPositions.length < tickAmount) {\n // Extend evenly for both sides unless we're on the\n // threshold (#3965)\n if (tickPositions.length % 2 || min === threshold) {\n append();\n }\n else {\n prepend();\n }\n }\n adjustExtremes();\n }\n // The finalTickAmt property is set in getTickAmount\n if (Axis_defined(finalTickAmt)) {\n i = len = tickPositions.length;\n while (i--) {\n if (\n // Remove every other tick\n (finalTickAmt === 3 && i % 2 === 1) ||\n // Remove all but first and last\n (finalTickAmt <= 2 && i > 0 && i < len - 1)) {\n tickPositions.splice(i, 1);\n }\n }\n axis.finalTickAmt = void 0;\n }\n }\n };\n /**\n * Set the scale based on data min and max, user set min and max or options.\n *\n * @private\n * @function Highcharts.Axis#setScale\n *\n * @emits Highcharts.Axis#event:afterSetScale\n */\n Axis.prototype.setScale = function () {\n var _a,\n _b;\n var axis = this,\n coll = axis.coll,\n stacking = axis.stacking;\n var isDirtyData = false,\n isXAxisDirty = false;\n axis.series.forEach(function (series) {\n isDirtyData = isDirtyData || series.isDirtyData || series.isDirty;\n // When x axis is dirty, we need new data extremes for y as\n // well:\n isXAxisDirty = (isXAxisDirty ||\n (series.xAxis && series.xAxis.isDirty) ||\n false);\n });\n // Set the new axisLength\n axis.setAxisSize();\n var isDirtyAxisLength = axis.len !== (axis.old && axis.old.len);\n // Do we really need to go through all this?\n if (isDirtyAxisLength ||\n isDirtyData ||\n isXAxisDirty ||\n axis.isLinked ||\n axis.forceRedraw ||\n axis.userMin !== (axis.old && axis.old.userMin) ||\n axis.userMax !== (axis.old && axis.old.userMax) ||\n axis.alignToOthers()) {\n if (stacking && coll === 'yAxis') {\n stacking.buildStacks();\n }\n axis.forceRedraw = false;\n // #18066 delete minRange property to ensure that it will be\n // calculated again after dirty data in series\n if (!axis.userMinRange) {\n axis.minRange = void 0;\n }\n // Get data extremes if needed\n axis.getSeriesExtremes();\n // Get fixed positions based on tickInterval\n axis.setTickInterval();\n if (stacking && coll === 'xAxis') {\n stacking.buildStacks();\n }\n // Mark as dirty if it is not already set to dirty and extremes have\n // changed. #595.\n if (!axis.isDirty) {\n axis.isDirty =\n isDirtyAxisLength ||\n axis.min !== ((_a = axis.old) === null || _a === void 0 ? void 0 : _a.min) ||\n axis.max !== ((_b = axis.old) === null || _b === void 0 ? void 0 : _b.max);\n }\n }\n else if (stacking) {\n stacking.cleanStacks();\n }\n // Recalculate all extremes object when the data has changed. It is\n // required when vertical panning is enabled.\n if (isDirtyData) {\n delete axis.allExtremes;\n }\n Axis_fireEvent(this, 'afterSetScale');\n };\n /**\n * Set the minimum and maximum of the axes after render time. If the\n * `startOnTick` and `endOnTick` options are true, the minimum and maximum\n * values are rounded off to the nearest tick. To prevent this, these\n * options can be set to false before calling setExtremes. Also, setExtremes\n * will not allow a range lower than the `minRange` option, which by default\n * is the range of five points.\n *\n * @sample highcharts/members/axis-setextremes/\n * Set extremes from a button\n * @sample highcharts/members/axis-setextremes-datetime/\n * Set extremes on a datetime axis\n * @sample highcharts/members/axis-setextremes-off-ticks/\n * Set extremes off ticks\n * @sample stock/members/axis-setextremes/\n * Set extremes in Highcharts Stock\n *\n * @function Highcharts.Axis#setExtremes\n *\n * @param {number|string} [newMin]\n * The new minimum value. For datetime axes, date strings are accepted.\n *\n * @param {number|string} [newMax]\n * The new maximum value. For datetime axes, date strings are accepted.\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart or wait for an explicit call to\n * {@link Highcharts.Chart#redraw}\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation=true]\n * Enable or modify animations.\n *\n * @param {*} [eventArguments]\n * Arguments to be accessed in event handler.\n *\n * @emits Highcharts.Axis#event:setExtremes\n */\n Axis.prototype.setExtremes = function (min, max, redraw, animation, eventArguments) {\n var _this = this;\n if (redraw === void 0) { redraw = true; }\n var chart = this.chart;\n this.series.forEach(function (serie) {\n delete serie.kdTree;\n });\n min = chart.time.parse(min);\n max = chart.time.parse(max);\n // Extend the arguments with min and max\n eventArguments = Axis_extend(eventArguments, { min: min, max: max });\n // Fire the event\n Axis_fireEvent(this, 'setExtremes', eventArguments, function (e) {\n _this.userMin = e.min;\n _this.userMax = e.max;\n _this.eventArgs = e;\n if (redraw) {\n chart.redraw(animation);\n }\n });\n };\n /**\n * Update the axis metrics.\n *\n * @private\n * @function Highcharts.Axis#setAxisSize\n */\n Axis.prototype.setAxisSize = function () {\n var chart = this.chart,\n options = this.options, \n // [top, right, bottom, left]\n offsets = options.offsets || [0, 0, 0, 0],\n horiz = this.horiz, \n // Check for percentage based input values. Rounding fixes problems\n // with column overflow and plot line filtering (#4898, #4899)\n width = this.width = Math.round(Axis_relativeLength(Axis_pick(options.width,\n chart.plotWidth - offsets[3] + offsets[1]),\n chart.plotWidth)),\n height = this.height = Math.round(Axis_relativeLength(Axis_pick(options.height,\n chart.plotHeight - offsets[0] + offsets[2]),\n chart.plotHeight)),\n top = this.top = Math.round(Axis_relativeLength(Axis_pick(options.top,\n chart.plotTop + offsets[0]),\n chart.plotHeight,\n chart.plotTop)),\n left = this.left = Math.round(Axis_relativeLength(Axis_pick(options.left,\n chart.plotLeft + offsets[3]),\n chart.plotWidth,\n chart.plotLeft));\n // Expose basic values to use in Series object and navigator\n this.bottom = chart.chartHeight - height - top;\n this.right = chart.chartWidth - width - left;\n // Direction agnostic properties\n this.len = Math.max(horiz ? width : height, 0); // Math.max fixes #905\n /**\n * The position of the axis in terms of pixels, compared to the chart\n * edge. In a horizontal axis it is the same as `chart.plotLeft` unless\n * the axis is explicitly positioned, and in a default vertical axis it\n * is the same as `chart.plotTop`.\n *\n * @name Highcharts.Axis#pos\n * @type {number}\n */\n this.pos = horiz ? left : top; // Distance from SVG origin\n };\n /**\n * Get the current extremes for the axis.\n *\n * @sample highcharts/members/axis-getextremes/\n * Report extremes by click on a button\n *\n * @function Highcharts.Axis#getExtremes\n *\n * @return {Highcharts.ExtremesObject}\n * An object containing extremes information.\n */\n Axis.prototype.getExtremes = function () {\n var axis = this,\n log = axis.logarithmic;\n return {\n min: log ?\n Axis_correctFloat(log.lin2log(axis.min)) :\n axis.min,\n max: log ?\n Axis_correctFloat(log.lin2log(axis.max)) :\n axis.max,\n dataMin: axis.dataMin,\n dataMax: axis.dataMax,\n userMin: axis.userMin,\n userMax: axis.userMax\n };\n };\n /**\n * Get the zero plane either based on zero or on the min or max value.\n * Used in bar and area plots.\n *\n * @function Highcharts.Axis#getThreshold\n *\n * @param {number} threshold\n * The threshold in axis values.\n *\n * @return {number}\n * The translated threshold position in terms of pixels, and corrected to\n * stay within the axis bounds.\n */\n Axis.prototype.getThreshold = function (threshold) {\n var axis = this,\n log = axis.logarithmic,\n realMin = log ? log.lin2log(axis.min) : axis.min,\n realMax = log ? log.lin2log(axis.max) : axis.max;\n if (threshold === null || threshold === -Infinity) {\n threshold = realMin;\n }\n else if (threshold === Infinity) {\n threshold = realMax;\n }\n else if (realMin > threshold) {\n threshold = realMin;\n }\n else if (realMax < threshold) {\n threshold = realMax;\n }\n return axis.translate(threshold, 0, 1, 0, 1);\n };\n /**\n * Compute auto alignment for the axis label based on which side the axis is\n * on and the given rotation for the label.\n *\n * @private\n * @function Highcharts.Axis#autoLabelAlign\n *\n * @param {number} rotation\n * The rotation in degrees as set by either the `rotation` or `autoRotation`\n * options.\n *\n * @return {Highcharts.AlignValue}\n * Can be `\"center\"`, `\"left\"` or `\"right\"`.\n */\n Axis.prototype.autoLabelAlign = function (rotation) {\n var angle = (Axis_pick(rotation, 0) - (this.side * 90) + 720) % 360,\n evt = { align: 'center' };\n Axis_fireEvent(this, 'autoLabelAlign', evt, function (e) {\n if (angle > 15 && angle < 165) {\n e.align = 'right';\n }\n else if (angle > 195 && angle < 345) {\n e.align = 'left';\n }\n });\n return evt.align;\n };\n /**\n * Get the tick length and width for the axis based on axis options.\n *\n * @private\n * @function Highcharts.Axis#tickSize\n *\n * @param {string} [prefix]\n * 'tick' or 'minorTick'\n *\n * @return {Array<number,number>|undefined}\n * An array of tickLength and tickWidth\n */\n Axis.prototype.tickSize = function (prefix) {\n var options = this.options,\n tickWidth = Axis_pick(options[prefix === 'tick' ? 'tickWidth' : 'minorTickWidth'], \n // Default to 1 on linear and datetime X axes\n prefix === 'tick' && this.isXAxis && !this.categories ? 1 : 0);\n var tickLength = options[prefix === 'tick' ? 'tickLength' : 'minorTickLength'],\n tickSize;\n if (tickWidth && tickLength) {\n // Negate the length\n if (options[prefix + 'Position'] === 'inside') {\n tickLength = -tickLength;\n }\n tickSize = [tickLength, tickWidth];\n }\n var e = { tickSize: tickSize };\n Axis_fireEvent(this, 'afterTickSize', e);\n return e.tickSize;\n };\n /**\n * Return the size of the labels.\n *\n * @private\n * @function Highcharts.Axis#labelMetrics\n */\n Axis.prototype.labelMetrics = function () {\n var renderer = this.chart.renderer,\n ticks = this.ticks,\n tick = ticks[Object.keys(ticks)[0]] || {};\n return this.chart.renderer.fontMetrics(tick.label ||\n tick.movedLabel ||\n renderer.box);\n };\n /**\n * Prevent the ticks from getting so close we can't draw the labels. On a\n * horizontal axis, this is handled by rotating the labels, removing ticks\n * and adding ellipsis. On a vertical axis remove ticks and add ellipsis.\n *\n * @private\n * @function Highcharts.Axis#unsquish\n */\n Axis.prototype.unsquish = function () {\n var labelOptions = this.options.labels,\n padding = labelOptions.padding || 0,\n horiz = this.horiz,\n tickInterval = this.tickInterval,\n slotSize = this.len / (((this.categories ? 1 : 0) +\n this.max -\n this.min) /\n tickInterval),\n rotationOption = labelOptions.rotation, \n // We don't know the actual rendered line height at this point, but\n // it defaults to 0.8em\n lineHeight = Axis_correctFloat(this.labelMetrics().h * 0.8),\n range = Math.max(this.max - this.min, 0), \n // Return the multiple of tickInterval that is needed to avoid\n // collision\n getStep = function (spaceNeeded) {\n var step = (spaceNeeded + 2 * padding) / (slotSize || 1);\n step = step > 1 ? Math.ceil(step) : 1;\n // Guard for very small or negative angles (#9835)\n if (step * tickInterval > range &&\n spaceNeeded !== Infinity &&\n slotSize !== Infinity &&\n range) {\n step = Math.ceil(range / tickInterval);\n }\n return Axis_correctFloat(step * tickInterval);\n };\n var newTickInterval = tickInterval,\n rotation,\n bestScore = Number.MAX_VALUE,\n autoRotation;\n if (horiz) {\n if (!labelOptions.staggerLines) {\n if (Axis_isNumber(rotationOption)) {\n autoRotation = [rotationOption];\n }\n else if (slotSize < labelOptions.autoRotationLimit) {\n autoRotation = labelOptions.autoRotation;\n }\n }\n if (autoRotation) {\n var step = void 0,\n score = void 0;\n // Loop over the given autoRotation options, and determine which\n // gives the best score. The best score is that with the lowest\n // number of steps and a rotation closest to horizontal.\n for (var _i = 0, autoRotation_1 = autoRotation; _i < autoRotation_1.length; _i++) {\n var rot = autoRotation_1[_i];\n if (rot === rotationOption ||\n (rot && rot >= -90 && rot <= 90)) { // #3891\n step = getStep(Math.abs(lineHeight / Math.sin(Axis_deg2rad * rot)));\n score = step + Math.abs(rot / 360);\n if (score < bestScore) {\n bestScore = score;\n rotation = rot;\n newTickInterval = step;\n }\n }\n }\n }\n }\n else { // #4411\n newTickInterval = getStep(lineHeight * 0.75);\n }\n this.autoRotation = autoRotation;\n this.labelRotation = Axis_pick(rotation, Axis_isNumber(rotationOption) ? rotationOption : 0);\n return labelOptions.step ? tickInterval : newTickInterval;\n };\n /**\n * Get the general slot width for labels/categories on this axis. This may\n * change between the pre-render (from Axis.getOffset) and the final tick\n * rendering and placement.\n *\n * @private\n * @function Highcharts.Axis#getSlotWidth\n *\n * @param {Highcharts.Tick} [tick] Optionally, calculate the slot width\n * basing on tick label. It is used in highcharts-3d module, where the slots\n * has different widths depending on perspective angles.\n *\n * @return {number}\n * The pixel width allocated to each axis label.\n */\n Axis.prototype.getSlotWidth = function (tick) {\n // #5086, #1580, #1931\n var chart = this.chart,\n horiz = this.horiz,\n labelOptions = this.options.labels,\n slotCount = Math.max(this.tickPositions.length - (this.categories ? 0 : 1), 1),\n marginLeft = chart.margin[3];\n // Used by grid axis\n if (tick && Axis_isNumber(tick.slotWidth)) { // #13221, can be 0\n return tick.slotWidth;\n }\n if (horiz && labelOptions.step < 2 && !this.isRadial) {\n if (labelOptions.rotation) { // #4415\n return 0;\n }\n return ((this.staggerLines || 1) * this.len) / slotCount;\n }\n if (!horiz) {\n // #7028\n var cssWidth = labelOptions.style.width;\n if (cssWidth !== void 0) {\n return parseInt(String(cssWidth), 10);\n }\n if (marginLeft) {\n return marginLeft - chart.spacing[3];\n }\n }\n // Last resort, a fraction of the available size\n return chart.chartWidth * 0.33;\n };\n /**\n * Render the axis labels and determine whether ellipsis or rotation need to\n * be applied.\n *\n * @private\n * @function Highcharts.Axis#renderUnsquish\n */\n Axis.prototype.renderUnsquish = function () {\n var chart = this.chart,\n renderer = chart.renderer,\n tickPositions = this.tickPositions,\n ticks = this.ticks,\n labelOptions = this.options.labels,\n labelStyleOptions = labelOptions.style,\n horiz = this.horiz,\n slotWidth = this.getSlotWidth(),\n innerWidth = Math.max(1,\n Math.round(slotWidth - (horiz ?\n 2 * (labelOptions.padding || 0) :\n labelOptions.distance || 0 // #21172\n ))),\n attr = {},\n labelMetrics = this.labelMetrics(),\n lineClampOption = labelStyleOptions.lineClamp;\n var commonWidth,\n lineClamp = lineClampOption !== null && lineClampOption !== void 0 ? lineClampOption : (Math.floor(this.len / (tickPositions.length * labelMetrics.h)) || 1),\n maxLabelLength = 0;\n // Set rotation option unless it is \"auto\", like in gauges\n if (!Axis_isString(labelOptions.rotation)) {\n // #4443\n attr.rotation = labelOptions.rotation || 0;\n }\n // Get the longest label length\n tickPositions.forEach(function (tickPosition) {\n var _a;\n var tick = ticks[tickPosition];\n // Replace label - sorting animation\n if (tick.movedLabel) {\n tick.replaceMovedLabel();\n }\n var textPxLength = ((_a = tick.label) === null || _a === void 0 ? void 0 : _a.textPxLength) || 0;\n if (textPxLength > maxLabelLength) {\n maxLabelLength = textPxLength;\n }\n });\n this.maxLabelLength = maxLabelLength;\n // Handle auto rotation on horizontal axis\n if (this.autoRotation) {\n // Apply rotation only if the label is too wide for the slot, and\n // the label is wider than its height.\n if (maxLabelLength > innerWidth &&\n maxLabelLength > labelMetrics.h) {\n attr.rotation = this.labelRotation;\n }\n else {\n this.labelRotation = 0;\n }\n // Handle word-wrap or ellipsis on vertical axis\n }\n else if (slotWidth) {\n // For word-wrap or ellipsis\n commonWidth = innerWidth;\n }\n // Add ellipsis if the label length is significantly longer than ideal\n if (attr.rotation) {\n commonWidth = (maxLabelLength > chart.chartHeight * 0.5 ?\n chart.chartHeight * 0.33 :\n maxLabelLength);\n if (!lineClampOption) {\n lineClamp = 1;\n }\n }\n // Set the explicit or automatic label alignment\n this.labelAlign = labelOptions.align ||\n this.autoLabelAlign(this.labelRotation);\n if (this.labelAlign) {\n attr.align = this.labelAlign;\n }\n // Apply general and specific CSS\n tickPositions.forEach(function (pos) {\n var tick = ticks[pos],\n label = tick && tick.label,\n widthOption = labelStyleOptions.width,\n css = {};\n if (label) {\n // This needs to go before the CSS in old IE (#4502)\n label.attr(attr);\n if (tick.shortenLabel) {\n tick.shortenLabel();\n }\n else if (commonWidth &&\n !widthOption &&\n // Setting width in this case messes with the bounding box\n // (#7975)\n labelStyleOptions.whiteSpace !== 'nowrap' &&\n (\n // Speed optimizing, #7656\n commonWidth < (label.textPxLength || 0) ||\n // Resetting CSS, #4928\n label.element.tagName === 'SPAN')) {\n label.css(Axis_extend(css, {\n width: \"\" + commonWidth + \"px\",\n lineClamp: lineClamp\n }));\n // Reset previously shortened label (#8210)\n }\n else if (label.styles.width && !css.width && !widthOption) {\n label.css({ width: 'auto' });\n }\n tick.rotation = attr.rotation;\n }\n }, this);\n // Note: Why is this not part of getLabelPosition?\n this.tickRotCorr = renderer.rotCorr(labelMetrics.b, this.labelRotation || 0, this.side !== 0);\n };\n /**\n * Return true if the axis has associated data.\n *\n * @function Highcharts.Axis#hasData\n *\n * @return {boolean}\n * True if the axis has associated visible series and those series have\n * either valid data points or explicit `min` and `max` settings.\n */\n Axis.prototype.hasData = function () {\n return this.series.some(function (s) {\n return s.hasData();\n }) ||\n (this.options.showEmpty &&\n Axis_defined(this.min) &&\n Axis_defined(this.max));\n };\n /**\n * Adds the title defined in axis.options.title.\n *\n * @function Highcharts.Axis#addTitle\n *\n * @param {boolean} [display]\n * Whether or not to display the title.\n */\n Axis.prototype.addTitle = function (display) {\n var axis = this,\n renderer = axis.chart.renderer,\n horiz = axis.horiz,\n opposite = axis.opposite,\n options = axis.options,\n axisTitleOptions = options.title,\n styledMode = axis.chart.styledMode;\n var textAlign;\n if (!axis.axisTitle) {\n textAlign = axisTitleOptions.textAlign;\n if (!textAlign) {\n textAlign = (horiz ? {\n low: 'left',\n middle: 'center',\n high: 'right'\n } : {\n low: opposite ? 'right' : 'left',\n middle: 'center',\n high: opposite ? 'left' : 'right'\n })[axisTitleOptions.align];\n }\n axis.axisTitle = renderer\n .text(axisTitleOptions.text || '', 0, 0, axisTitleOptions.useHTML)\n .attr({\n zIndex: 7,\n rotation: axisTitleOptions.rotation || 0,\n align: textAlign\n })\n .addClass('highcharts-axis-title');\n // #7814, don't mutate style option\n if (!styledMode) {\n axis.axisTitle.css(Axis_merge(axisTitleOptions.style));\n }\n axis.axisTitle.add(axis.axisGroup);\n axis.axisTitle.isNew = true;\n }\n // Max width defaults to the length of the axis\n if (!styledMode &&\n !axisTitleOptions.style.width &&\n !axis.isRadial) {\n axis.axisTitle.css({\n width: axis.len + 'px'\n });\n }\n // Hide or show the title depending on whether showEmpty is set\n axis.axisTitle[display ? 'show' : 'hide'](display);\n };\n /**\n * Generates a tick for initial positioning.\n *\n * @private\n * @function Highcharts.Axis#generateTick\n *\n * @param {number} pos\n * The tick position in axis values.\n *\n * @param {number} [i]\n * The index of the tick in {@link Axis.tickPositions}.\n */\n Axis.prototype.generateTick = function (pos) {\n var axis = this,\n ticks = axis.ticks;\n if (!ticks[pos]) {\n ticks[pos] = new Axis_Tick(axis, pos);\n }\n else {\n ticks[pos].addLabel(); // Update labels depending on tick interval\n }\n };\n /**\n * Create the axisGroup and gridGroup elements on first iteration.\n *\n * @private\n * @function Highcharts.Axis#getOffset\n *\n * @emits Highcharts.Axis#event:afterGetOffset\n */\n Axis.prototype.createGroups = function () {\n var _this = this;\n var _a = this,\n axisParent = _a.axisParent, // Used in color axis\n chart = _a.chart,\n coll = _a.coll,\n options = _a.options,\n renderer = chart.renderer;\n var createGroup = function (name, suffix, zIndex) { return renderer.g(name)\n .attr({ zIndex: zIndex })\n .addClass(\"highcharts-\".concat(coll.toLowerCase()).concat(suffix, \" \") +\n (_this.isRadial ? \"highcharts-radial-axis\".concat(suffix, \" \") : '') +\n (options.className || ''))\n .add(axisParent); };\n if (!this.axisGroup) {\n this.gridGroup = createGroup('grid', '-grid', options.gridZIndex);\n this.axisGroup = createGroup('axis', '', options.zIndex);\n this.labelGroup = createGroup('axis-labels', '-labels', options.labels.zIndex);\n }\n };\n /**\n * Render the tick labels to a preliminary position to get their sizes\n *\n * @private\n * @function Highcharts.Axis#getOffset\n *\n * @emits Highcharts.Axis#event:afterGetOffset\n */\n Axis.prototype.getOffset = function () {\n var axis = this,\n chart = axis.chart,\n horiz = axis.horiz,\n options = axis.options,\n side = axis.side,\n ticks = axis.ticks,\n tickPositions = axis.tickPositions,\n coll = axis.coll,\n invertedSide = (chart.inverted && !axis.isZAxis ?\n [1, 0, 3, 2][side] :\n side),\n hasData = axis.hasData(),\n axisTitleOptions = options.title,\n labelOptions = options.labels,\n hasCrossing = Axis_isNumber(options.crossing),\n axisOffset = chart.axisOffset,\n clipOffset = chart.clipOffset,\n directionFactor = [-1, 1, 1, -1][side];\n var showAxis,\n titleOffset = 0,\n titleOffsetOption,\n titleMargin = 0,\n labelOffset = 0, // Reset\n labelOffsetPadded,\n lineHeightCorrection;\n // For reuse in Axis.render\n axis.showAxis = showAxis = hasData || options.showEmpty;\n // Set/reset staggerLines\n axis.staggerLines = (axis.horiz && labelOptions.staggerLines) || void 0;\n axis.createGroups();\n if (hasData || axis.isLinked) {\n // Generate ticks\n tickPositions.forEach(function (pos) {\n axis.generateTick(pos);\n });\n axis.renderUnsquish();\n // Left side must be align: right and right side must\n // have align: left for labels\n axis.reserveSpaceDefault = (side === 0 ||\n side === 2 ||\n { 1: 'left', 3: 'right' }[side] === axis.labelAlign);\n if (Axis_pick(labelOptions.reserveSpace, hasCrossing ? false : null, axis.labelAlign === 'center' ? true : null, axis.reserveSpaceDefault)) {\n tickPositions.forEach(function (pos) {\n // Get the highest offset\n labelOffset = Math.max(ticks[pos].getLabelSize(), labelOffset);\n });\n }\n if (axis.staggerLines) {\n labelOffset *= axis.staggerLines;\n }\n axis.labelOffset = labelOffset * (axis.opposite ? -1 : 1);\n }\n else { // Doesn't have data\n Axis_objectEach(ticks, function (tick, n) {\n tick.destroy();\n delete ticks[n];\n });\n }\n if ((axisTitleOptions === null || axisTitleOptions === void 0 ? void 0 : axisTitleOptions.text) &&\n axisTitleOptions.enabled !== false) {\n axis.addTitle(showAxis);\n if (showAxis &&\n !hasCrossing &&\n axisTitleOptions.reserveSpace !== false) {\n axis.titleOffset = titleOffset =\n axis.axisTitle.getBBox()[horiz ? 'height' : 'width'];\n titleOffsetOption = axisTitleOptions.offset;\n titleMargin = Axis_defined(titleOffsetOption) ?\n 0 :\n Axis_pick(axisTitleOptions.margin, horiz ? 5 : 10);\n }\n }\n // Render the axis line\n axis.renderLine();\n // Handle automatic or user set offset\n axis.offset = directionFactor * Axis_pick(options.offset, axisOffset[side] ? axisOffset[side] + (options.margin || 0) : 0);\n axis.tickRotCorr = axis.tickRotCorr || { x: 0, y: 0 }; // Polar\n if (side === 0) {\n lineHeightCorrection = -axis.labelMetrics().h;\n }\n else if (side === 2) {\n lineHeightCorrection = axis.tickRotCorr.y;\n }\n else {\n lineHeightCorrection = 0;\n }\n // Find the padded label offset\n labelOffsetPadded = Math.abs(labelOffset) + titleMargin;\n if (labelOffset) {\n labelOffsetPadded -= lineHeightCorrection;\n labelOffsetPadded += directionFactor * (horiz ?\n Axis_pick(labelOptions.y, axis.tickRotCorr.y +\n directionFactor * labelOptions.distance) :\n Axis_pick(labelOptions.x, directionFactor * labelOptions.distance));\n }\n axis.axisTitleMargin = Axis_pick(titleOffsetOption, labelOffsetPadded);\n if (axis.getMaxLabelDimensions) {\n axis.maxLabelDimensions = axis.getMaxLabelDimensions(ticks, tickPositions);\n }\n // Due to GridAxis.tickSize, tickSize should be calculated after ticks\n // has rendered.\n if (coll !== 'colorAxis' && clipOffset) {\n var tickSize = this.tickSize('tick');\n axisOffset[side] = Math.max(axisOffset[side], (axis.axisTitleMargin || 0) + titleOffset +\n directionFactor * axis.offset, labelOffsetPadded, // #3027\n tickPositions && tickPositions.length && tickSize ?\n tickSize[0] + directionFactor * axis.offset :\n 0 // #4866\n );\n // Decide the clipping needed to keep the graph inside\n // the plot area and axis lines\n var clip = !axis.axisLine || options.offset ?\n 0 :\n // #4308, #4371\n axis.axisLine.strokeWidth() / 2;\n clipOffset[invertedSide] = Math.max(clipOffset[invertedSide], clip);\n }\n Axis_fireEvent(this, 'afterGetOffset');\n };\n /**\n * Internal function to get the path for the axis line. Extended for polar\n * charts.\n *\n * @function Highcharts.Axis#getLinePath\n *\n * @param {number} lineWidth\n * The line width in pixels.\n *\n * @return {Highcharts.SVGPathArray}\n * The SVG path definition in array form.\n */\n Axis.prototype.getLinePath = function (lineWidth) {\n var chart = this.chart,\n opposite = this.opposite,\n offset = this.offset,\n horiz = this.horiz,\n lineLeft = this.left + (opposite ? this.width : 0) + offset,\n lineTop = chart.chartHeight - this.bottom -\n (opposite ? this.height : 0) + offset;\n if (opposite) {\n lineWidth *= -1; // Crispify the other way - #1480, #1687\n }\n return chart.renderer\n .crispLine([\n [\n 'M',\n horiz ?\n this.left :\n lineLeft,\n horiz ?\n lineTop :\n this.top\n ],\n [\n 'L',\n horiz ?\n chart.chartWidth - this.right :\n lineLeft,\n horiz ?\n lineTop :\n chart.chartHeight - this.bottom\n ]\n ], lineWidth);\n };\n /**\n * Render the axis line. Called internally when rendering and redrawing the\n * axis.\n *\n * @function Highcharts.Axis#renderLine\n */\n Axis.prototype.renderLine = function () {\n if (!this.axisLine) {\n this.axisLine = this.chart.renderer.path()\n .addClass('highcharts-axis-line')\n .add(this.axisGroup);\n if (!this.chart.styledMode) {\n this.axisLine.attr({\n stroke: this.options.lineColor,\n 'stroke-width': this.options.lineWidth,\n zIndex: 7\n });\n }\n }\n };\n /**\n * Position the axis title.\n *\n * @private\n * @function Highcharts.Axis#getTitlePosition\n *\n * @return {Highcharts.PositionObject}\n * X and Y positions for the title.\n */\n Axis.prototype.getTitlePosition = function (axisTitle) {\n // Compute anchor points for each of the title align options\n var horiz = this.horiz,\n axisLeft = this.left,\n axisTop = this.top,\n axisLength = this.len,\n axisTitleOptions = this.options.title,\n margin = horiz ? axisLeft : axisTop,\n opposite = this.opposite,\n offset = this.offset,\n xOption = axisTitleOptions.x,\n yOption = axisTitleOptions.y,\n fontMetrics = this.chart.renderer.fontMetrics(axisTitle), \n // The part of a multiline text that is below the baseline of the\n // first line. Subtract 1 to preserve pixel-perfectness from the\n // old behaviour (v5.0.12), where only one line was allowed.\n textHeightOvershoot = axisTitle ? Math.max(axisTitle.getBBox(false, 0).height - fontMetrics.h - 1, 0) : 0, \n // The position in the length direction of the axis\n alongAxis = ({\n low: margin + (horiz ? 0 : axisLength),\n middle: margin + axisLength / 2,\n high: margin + (horiz ? axisLength : 0)\n })[axisTitleOptions.align], \n // The position in the perpendicular direction of the axis\n offAxis = (horiz ? axisTop + this.height : axisLeft) +\n (horiz ? 1 : -1) * // Horizontal axis reverses the margin\n (opposite ? -1 : 1) * // So does opposite axes\n (this.axisTitleMargin || 0) +\n [\n -textHeightOvershoot, // Top\n textHeightOvershoot, // Right\n fontMetrics.f, // Bottom\n -textHeightOvershoot // Left\n ][this.side],\n titlePosition = {\n x: horiz ?\n alongAxis + xOption :\n offAxis + (opposite ? this.width : 0) + offset + xOption,\n y: horiz ?\n offAxis + yOption - (opposite ? this.height : 0) + offset :\n alongAxis + yOption\n };\n Axis_fireEvent(this, 'afterGetTitlePosition', { titlePosition: titlePosition });\n return titlePosition;\n };\n /**\n * Render a minor tick into the given position. If a minor tick already\n * exists in this position, move it.\n *\n * @function Highcharts.Axis#renderMinorTick\n *\n * @param {number} pos\n * The position in axis values.\n *\n * @param {boolean} slideIn\n * Whether the tick should animate in from last computed position\n */\n Axis.prototype.renderMinorTick = function (pos, slideIn) {\n var axis = this;\n var minorTicks = axis.minorTicks;\n if (!minorTicks[pos]) {\n minorTicks[pos] = new Axis_Tick(axis, pos, 'minor');\n }\n // Render new ticks in old position\n if (slideIn && minorTicks[pos].isNew) {\n minorTicks[pos].render(null, true);\n }\n minorTicks[pos].render(null, false, 1);\n };\n /**\n * Render a major tick into the given position. If a tick already exists\n * in this position, move it.\n *\n * @function Highcharts.Axis#renderTick\n *\n * @param {number} pos\n * The position in axis values.\n *\n * @param {number} i\n * The tick index.\n *\n * @param {boolean} slideIn\n * Whether the tick should animate in from last computed position\n */\n Axis.prototype.renderTick = function (pos, i, slideIn) {\n var axis = this,\n isLinked = axis.isLinked,\n ticks = axis.ticks;\n // Linked axes need an extra check to find out if\n if (!isLinked ||\n (pos >= axis.min && pos <= axis.max) ||\n (axis.grid && axis.grid.isColumn)) {\n if (!ticks[pos]) {\n ticks[pos] = new Axis_Tick(axis, pos);\n }\n // NOTE this seems like overkill. Could be handled in tick.render by\n // setting old position in attr, then set new position in animate.\n // render new ticks in old position\n if (slideIn && ticks[pos].isNew) {\n // Start with negative opacity so that it is visible from\n // halfway into the animation\n ticks[pos].render(i, true, -1);\n }\n ticks[pos].render(i);\n }\n };\n /**\n * Render the axis.\n *\n * @private\n * @function Highcharts.Axis#render\n *\n * @emits Highcharts.Axis#event:afterRender\n */\n Axis.prototype.render = function () {\n var axis = this,\n chart = axis.chart,\n log = axis.logarithmic,\n renderer = chart.renderer,\n options = axis.options,\n isLinked = axis.isLinked,\n tickPositions = axis.tickPositions,\n axisTitle = axis.axisTitle,\n ticks = axis.ticks,\n minorTicks = axis.minorTicks,\n alternateBands = axis.alternateBands,\n stackLabelOptions = options.stackLabels,\n alternateGridColor = options.alternateGridColor,\n crossing = options.crossing,\n tickmarkOffset = axis.tickmarkOffset,\n axisLine = axis.axisLine,\n showAxis = axis.showAxis,\n animation = Axis_animObject(renderer.globalAnimation);\n var from,\n to;\n // Reset\n axis.labelEdge.length = 0;\n axis.overlap = false;\n // Mark all elements inActive before we go over and mark the active ones\n [ticks, minorTicks, alternateBands].forEach(function (coll) {\n Axis_objectEach(coll, function (tick) {\n tick.isActive = false;\n });\n });\n // Crossing\n if (Axis_isNumber(crossing)) {\n var otherAxis = this.isXAxis ? chart.yAxis[0] : chart.xAxis[0],\n directionFactor = [1, -1, -1, 1][this.side];\n if (otherAxis) {\n var px = otherAxis.toPixels(crossing,\n true);\n if (axis.horiz) {\n px = otherAxis.len - px;\n }\n axis.offset = directionFactor * px;\n }\n }\n // If the series has data draw the ticks. Else only the line and title\n if (axis.hasData() || isLinked) {\n var slideInTicks_1 = axis.chart.hasRendered &&\n axis.old && Axis_isNumber(axis.old.min);\n // Minor ticks\n if (axis.minorTickInterval && !axis.categories) {\n axis.getMinorTickPositions().forEach(function (pos) {\n axis.renderMinorTick(pos, slideInTicks_1);\n });\n }\n // Major ticks. Pull out the first item and render it last so that\n // we can get the position of the neighbour label. #808.\n if (tickPositions.length) { // #1300\n tickPositions.forEach(function (pos, i) {\n axis.renderTick(pos, i, slideInTicks_1);\n });\n // In a categorized axis, the tick marks are displayed\n // between labels. So we need to add a tick mark and\n // grid line at the left edge of the X axis.\n if (tickmarkOffset && (axis.min === 0 || axis.single)) {\n if (!ticks[-1]) {\n ticks[-1] = new Axis_Tick(axis, -1, null, true);\n }\n ticks[-1].render(-1);\n }\n }\n // Alternate grid color\n if (alternateGridColor) {\n tickPositions.forEach(function (pos, i) {\n to = typeof tickPositions[i + 1] !== 'undefined' ?\n tickPositions[i + 1] + tickmarkOffset :\n axis.max - tickmarkOffset;\n if (i % 2 === 0 &&\n pos < axis.max &&\n to <= axis.max + (chart.polar ?\n -tickmarkOffset :\n tickmarkOffset)) { // #2248, #4660\n if (!alternateBands[pos]) {\n // Should be imported from PlotLineOrBand.js, but\n // the dependency cycle with axis is a problem\n alternateBands[pos] = new Core_Globals.PlotLineOrBand(axis, {});\n }\n from = pos + tickmarkOffset; // #949\n alternateBands[pos].options = {\n from: log ? log.lin2log(from) : from,\n to: log ? log.lin2log(to) : to,\n color: alternateGridColor,\n className: 'highcharts-alternate-grid'\n };\n alternateBands[pos].render();\n alternateBands[pos].isActive = true;\n }\n });\n }\n // Custom plot lines and bands\n if (!axis._addedPlotLB) { // Only first time\n axis._addedPlotLB = true;\n (options.plotLines || [])\n .concat(options.plotBands || [])\n .forEach(function (plotLineOptions) {\n axis\n .addPlotBandOrLine(plotLineOptions);\n });\n }\n } // End if hasData\n // Remove inactive ticks\n [ticks, minorTicks, alternateBands].forEach(function (coll) {\n var forDestruction = [],\n delay = animation.duration,\n destroyInactiveItems = function () {\n var i = forDestruction.length;\n while (i--) {\n // When resizing rapidly, the same items\n // may be destroyed in different timeouts,\n // or the may be reactivated\n if (coll[forDestruction[i]] &&\n !coll[forDestruction[i]].isActive) {\n coll[forDestruction[i]].destroy();\n delete coll[forDestruction[i]];\n }\n }\n };\n Axis_objectEach(coll, function (tick, pos) {\n if (!tick.isActive) {\n // Render to zero opacity\n tick.render(pos, false, 0);\n tick.isActive = false;\n forDestruction.push(pos);\n }\n });\n // When the objects are finished fading out, destroy them\n Axis_syncTimeout(destroyInactiveItems, coll === alternateBands ||\n !chart.hasRendered ||\n !delay ?\n 0 :\n delay);\n });\n // Set the axis line path\n if (axisLine) {\n axisLine[axisLine.isPlaced ? 'animate' : 'attr']({\n d: this.getLinePath(axisLine.strokeWidth())\n });\n axisLine.isPlaced = true;\n // Show or hide the line depending on options.showEmpty\n axisLine[showAxis ? 'show' : 'hide'](showAxis);\n }\n if (axisTitle && showAxis) {\n axisTitle[axisTitle.isNew ? 'attr' : 'animate'](axis.getTitlePosition(axisTitle));\n axisTitle.isNew = false;\n }\n // Stacked totals:\n if (stackLabelOptions && stackLabelOptions.enabled && axis.stacking) {\n axis.stacking.renderStackTotals();\n }\n // End stacked totals\n // Record old scaling for updating/animation. Pinch base must be\n // preserved until the pinch ends.\n axis.old = {\n len: axis.len,\n max: axis.max,\n min: axis.min,\n transA: axis.transA,\n userMax: axis.userMax,\n userMin: axis.userMin\n };\n axis.isDirty = false;\n Axis_fireEvent(this, 'afterRender');\n };\n /**\n * Redraw the axis to reflect changes in the data or axis extremes. Called\n * internally from Highcharts.Chart#redraw.\n *\n * @private\n * @function Highcharts.Axis#redraw\n */\n Axis.prototype.redraw = function () {\n if (this.visible) {\n // Render the axis\n this.render();\n // Move plot lines and bands\n this.plotLinesAndBands.forEach(function (plotLine) {\n plotLine.render();\n });\n }\n // Mark associated series as dirty and ready for redraw\n this.series.forEach(function (series) {\n series.isDirty = true;\n });\n };\n /**\n * Returns an array of axis properties, that should be untouched during\n * reinitialization.\n *\n * @private\n * @function Highcharts.Axis#getKeepProps\n */\n Axis.prototype.getKeepProps = function () {\n return (this.keepProps || Axis.keepProps);\n };\n /**\n * Destroys an Axis instance. See {@link Axis#remove} for the API endpoint\n * to fully remove the axis.\n *\n * @private\n * @function Highcharts.Axis#destroy\n *\n * @param {boolean} [keepEvents]\n * Whether to preserve events, used internally in Axis.update.\n */\n Axis.prototype.destroy = function (keepEvents) {\n var axis = this,\n plotLinesAndBands = axis.plotLinesAndBands,\n eventOptions = this.eventOptions;\n Axis_fireEvent(this, 'destroy', { keepEvents: keepEvents });\n // Remove the events\n if (!keepEvents) {\n Axis_removeEvent(axis);\n }\n // Destroy collections\n [axis.ticks, axis.minorTicks, axis.alternateBands].forEach(function (coll) {\n Axis_destroyObjectProperties(coll);\n });\n if (plotLinesAndBands) {\n var i = plotLinesAndBands.length;\n while (i--) { // #1975\n plotLinesAndBands[i].destroy();\n }\n }\n // Destroy elements\n [\n 'axisLine', 'axisTitle', 'axisGroup',\n 'gridGroup', 'labelGroup', 'cross', 'scrollbar'\n ].forEach(function (prop) {\n if (axis[prop]) {\n axis[prop] = axis[prop].destroy();\n }\n });\n // Destroy each generated group for plotlines and plotbands\n for (var plotGroup in axis.plotLinesAndBandsGroups) { // eslint-disable-line guard-for-in\n axis.plotLinesAndBandsGroups[plotGroup] =\n axis.plotLinesAndBandsGroups[plotGroup].destroy();\n }\n // Delete all properties and fall back to the prototype.\n Axis_objectEach(axis, function (val, key) {\n if (axis.getKeepProps().indexOf(key) === -1) {\n delete axis[key];\n }\n });\n this.eventOptions = eventOptions;\n };\n /**\n * Internal function to draw a crosshair.\n *\n * @function Highcharts.Axis#drawCrosshair\n *\n * @param {Highcharts.PointerEventObject} [e]\n * The event arguments from the modified pointer event, extended with\n * `chartX` and `chartY`\n *\n * @param {Highcharts.Point} [point]\n * The Point object if the crosshair snaps to points.\n *\n * @emits Highcharts.Axis#event:afterDrawCrosshair\n * @emits Highcharts.Axis#event:drawCrosshair\n */\n Axis.prototype.drawCrosshair = function (e, point) {\n var options = this.crosshair,\n snap = Axis_pick(options && options.snap,\n true),\n chart = this.chart;\n var path,\n pos,\n categorized,\n graphic = this.cross,\n crossOptions;\n Axis_fireEvent(this, 'drawCrosshair', { e: e, point: point });\n // Use last available event when updating non-snapped crosshairs without\n // mouse interaction (#5287)\n if (!e) {\n e = this.cross && this.cross.e;\n }\n if (\n // Disabled in options\n !options ||\n // Snap\n ((Axis_defined(point) || !snap) === false)) {\n this.hideCrosshair();\n }\n else {\n // Get the path\n if (!snap) {\n pos = e &&\n (this.horiz ?\n e.chartX - this.pos :\n this.len - e.chartY + this.pos);\n }\n else if (Axis_defined(point)) {\n // #3834\n pos = Axis_pick(this.coll !== 'colorAxis' ?\n point.crosshairPos : // 3D axis extension\n null, this.isXAxis ?\n point.plotX :\n this.len - point.plotY);\n }\n if (Axis_defined(pos)) {\n crossOptions = {\n // Value, only used on radial\n value: point && (this.isXAxis ?\n point.x :\n Axis_pick(point.stackY, point.y)),\n translatedValue: pos\n };\n if (chart.polar) {\n // Additional information required for crosshairs in\n // polar chart\n Axis_extend(crossOptions, {\n isCrosshair: true,\n chartX: e && e.chartX,\n chartY: e && e.chartY,\n point: point\n });\n }\n path = this.getPlotLinePath(crossOptions) ||\n null; // #3189\n }\n if (!Axis_defined(path)) {\n this.hideCrosshair();\n return;\n }\n categorized = this.categories && !this.isRadial;\n // Draw the cross\n if (!graphic) {\n this.cross = graphic = chart.renderer\n .path()\n .addClass('highcharts-crosshair highcharts-crosshair-' +\n (categorized ? 'category ' : 'thin ') +\n (options.className || ''))\n .attr({\n zIndex: Axis_pick(options.zIndex, 2)\n })\n .add();\n // Presentational attributes\n if (!chart.styledMode) {\n graphic.attr({\n stroke: options.color ||\n (categorized ?\n Color_Color\n .parse(\"#ccd3ff\" /* Palette.highlightColor20 */)\n .setOpacity(0.25)\n .get() :\n \"#cccccc\" /* Palette.neutralColor20 */),\n 'stroke-width': Axis_pick(options.width, 1)\n }).css({\n 'pointer-events': 'none'\n });\n if (options.dashStyle) {\n graphic.attr({\n dashstyle: options.dashStyle\n });\n }\n }\n }\n graphic.show().attr({\n d: path\n });\n if (categorized && !options.width) {\n graphic.attr({\n 'stroke-width': this.transA\n });\n }\n this.cross.e = e;\n }\n Axis_fireEvent(this, 'afterDrawCrosshair', { e: e, point: point });\n };\n /**\n * Hide the crosshair if visible.\n *\n * @function Highcharts.Axis#hideCrosshair\n */\n Axis.prototype.hideCrosshair = function () {\n if (this.cross) {\n this.cross.hide();\n }\n Axis_fireEvent(this, 'afterHideCrosshair');\n };\n /**\n * Update an axis object with a new set of options. The options are merged\n * with the existing options, so only new or altered options need to be\n * specified.\n *\n * @sample highcharts/members/axis-update/\n * Axis update demo\n *\n * @function Highcharts.Axis#update\n *\n * @param {Highcharts.AxisOptions} options\n * The new options that will be merged in with existing options on the axis.\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart after the axis is altered. If doing more\n * operations on the chart, it is a good idea to set redraw to false and\n * call {@link Chart#redraw} after.\n */\n Axis.prototype.update = function (options, redraw) {\n var chart = this.chart;\n options = Axis_merge(this.userOptions, options);\n this.destroy(true);\n this.init(chart, options);\n chart.isDirtyBox = true;\n if (Axis_pick(redraw, true)) {\n chart.redraw();\n }\n };\n /**\n * Remove the axis from the chart.\n *\n * @sample highcharts/members/chart-addaxis/\n * Add and remove axes\n *\n * @function Highcharts.Axis#remove\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart following the remove.\n */\n Axis.prototype.remove = function (redraw) {\n var chart = this.chart,\n coll = this.coll,\n axisSeries = this.series;\n var i = axisSeries.length;\n // Remove associated series (#2687)\n while (i--) {\n if (axisSeries[i]) {\n axisSeries[i].remove(false);\n }\n }\n // Remove the axis\n Axis_erase(chart.axes, this);\n Axis_erase(chart[coll] || [], this);\n chart.orderItems(coll);\n this.destroy();\n chart.isDirtyBox = true;\n if (Axis_pick(redraw, true)) {\n chart.redraw();\n }\n };\n /**\n * Update the axis title by options after render time.\n *\n * @sample highcharts/members/axis-settitle/\n * Set a new Y axis title\n *\n * @function Highcharts.Axis#setTitle\n *\n * @param {Highcharts.AxisTitleOptions} titleOptions\n * The additional title options.\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart after setting the title.\n */\n Axis.prototype.setTitle = function (titleOptions, redraw) {\n this.update({ title: titleOptions }, redraw);\n };\n /**\n * Set new axis categories and optionally redraw.\n *\n * @sample highcharts/members/axis-setcategories/\n * Set categories by click on a button\n *\n * @function Highcharts.Axis#setCategories\n *\n * @param {Array<string>} categories\n * The new categories.\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart.\n */\n Axis.prototype.setCategories = function (categories, redraw) {\n this.update({ categories: categories }, redraw);\n };\n /* *\n *\n * Static Properties\n *\n * */\n // Properties to survive after destroy, needed for Axis.update (#4317,\n // #5773, #5881).\n Axis.keepProps = [\n 'coll',\n 'extKey',\n 'hcEvents',\n 'len',\n 'names',\n 'series',\n 'userMax',\n 'userMin'\n ];\n return Axis;\n}());\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Axis_Axis = (Axis);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Options for the path on the Axis to be calculated.\n * @interface Highcharts.AxisPlotLinePathOptionsObject\n */ /**\n* Axis value.\n* @name Highcharts.AxisPlotLinePathOptionsObject#value\n* @type {number|undefined}\n*/ /**\n* Line width used for calculation crisp line coordinates. Defaults to 1.\n* @name Highcharts.AxisPlotLinePathOptionsObject#lineWidth\n* @type {number|undefined}\n*/ /**\n* If `false`, the function will return null when it falls outside the axis\n* bounds. If `true`, the function will return a path aligned to the plot area\n* sides if it falls outside. If `pass`, it will return a path outside.\n* @name Highcharts.AxisPlotLinePathOptionsObject#force\n* @type {string|boolean|undefined}\n*/ /**\n* Used in Highcharts Stock. When `true`, plot paths\n* (crosshair, plotLines, gridLines)\n* will be rendered on all axes when defined on the first axis.\n* @name Highcharts.AxisPlotLinePathOptionsObject#acrossPanes\n* @type {boolean|undefined}\n*/ /**\n* Use old coordinates (for resizing and rescaling).\n* If not set, defaults to `false`.\n* @name Highcharts.AxisPlotLinePathOptionsObject#old\n* @type {boolean|undefined}\n*/ /**\n* If given, return the plot line path of a pixel position on the axis.\n* @name Highcharts.AxisPlotLinePathOptionsObject#translatedValue\n* @type {number|undefined}\n*/ /**\n* Used in Polar axes. Reverse the positions for concatenation of polygonal\n* plot bands\n* @name Highcharts.AxisPlotLinePathOptionsObject#reverse\n* @type {boolean|undefined}\n*/\n/**\n * Options for crosshairs on axes.\n *\n * @product highstock\n *\n * @typedef {Highcharts.XAxisCrosshairOptions|Highcharts.YAxisCrosshairOptions} Highcharts.AxisCrosshairOptions\n */\n/**\n * @typedef {\"navigator\"|\"pan\"|\"rangeSelectorButton\"|\"rangeSelectorInput\"|\"scrollbar\"|\"traverseUpButton\"|\"zoom\"} Highcharts.AxisExtremesTriggerValue\n */\n/**\n * @callback Highcharts.AxisEventCallbackFunction\n *\n * @param {Highcharts.Axis} this\n */\n/**\n * @callback Highcharts.AxisLabelsFormatterCallbackFunction\n *\n * @param {Highcharts.AxisLabelsFormatterContextObject} this\n *\n * @param {Highcharts.AxisLabelsFormatterContextObject} ctx\n *\n * @return {string}\n */\n/**\n * @interface Highcharts.AxisLabelsFormatterContextObject\n */ /**\n* The axis item of the label\n* @name Highcharts.AxisLabelsFormatterContextObject#axis\n* @type {Highcharts.Axis}\n*/ /**\n* The chart instance.\n* @name Highcharts.AxisLabelsFormatterContextObject#chart\n* @type {Highcharts.Chart}\n*/ /**\n* Default formatting of date/time labels.\n* @name Highcharts.AxisLabelsFormatterContextObject#dateTimeLabelFormat\n* @type {string|undefined}\n*/ /**\n* Whether the label belongs to the first tick on the axis.\n* @name Highcharts.AxisLabelsFormatterContextObject#isFirst\n* @type {boolean}\n*/ /**\n* Whether the label belongs to the last tick on the axis.\n* @name Highcharts.AxisLabelsFormatterContextObject#isLast\n* @type {boolean}\n*/ /**\n* The position on the axis in terms of axis values. For category axes, a\n* zero-based index. For datetime axes, the JavaScript time in milliseconds\n* since 1970.\n* @name Highcharts.AxisLabelsFormatterContextObject#pos\n* @type {number}\n*/ /**\n* The preformatted text as the result of the default formatting. For example\n* dates will be formatted as strings, and numbers with language-specific comma\n* separators, thousands separators and numeric symbols like `k` or `M`.\n* @name Highcharts.AxisLabelsFormatterContextObject#text\n* @type {string|undefined}\n*/ /**\n* The Tick instance.\n* @name Highcharts.AxisLabelsFormatterContextObject#tick\n* @type {Highcharts.Tick}\n*/ /**\n* This can be either a numeric value or a category string.\n* @name Highcharts.AxisLabelsFormatterContextObject#value\n* @type {number|string}\n*/\n/**\n * Options for axes.\n *\n * @typedef {Highcharts.XAxisOptions|Highcharts.YAxisOptions|Highcharts.ZAxisOptions} Highcharts.AxisOptions\n */\n/**\n * @callback Highcharts.AxisPointBreakEventCallbackFunction\n *\n * @param {Highcharts.Axis} this\n *\n * @param {Highcharts.AxisPointBreakEventObject} evt\n */\n/**\n * @interface Highcharts.AxisPointBreakEventObject\n */ /**\n* @name Highcharts.AxisPointBreakEventObject#brk\n* @type {Highcharts.Dictionary<number>}\n*/ /**\n* @name Highcharts.AxisPointBreakEventObject#point\n* @type {Highcharts.Point}\n*/ /**\n* @name Highcharts.AxisPointBreakEventObject#preventDefault\n* @type {Function}\n*/ /**\n* @name Highcharts.AxisPointBreakEventObject#target\n* @type {Highcharts.SVGElement}\n*/ /**\n* @name Highcharts.AxisPointBreakEventObject#type\n* @type {\"pointBreak\"|\"pointInBreak\"}\n*/\n/**\n * @callback Highcharts.AxisSetExtremesEventCallbackFunction\n *\n * @param {Highcharts.Axis} this\n *\n * @param {Highcharts.AxisSetExtremesEventObject} evt\n */\n/**\n * @interface Highcharts.AxisSetExtremesEventObject\n * @extends Highcharts.ExtremesObject\n */ /**\n* @name Highcharts.AxisSetExtremesEventObject#preventDefault\n* @type {Function}\n*/ /**\n* @name Highcharts.AxisSetExtremesEventObject#target\n* @type {Highcharts.SVGElement}\n*/ /**\n* @name Highcharts.AxisSetExtremesEventObject#trigger\n* @type {Highcharts.AxisExtremesTriggerValue|string}\n*/ /**\n* @name Highcharts.AxisSetExtremesEventObject#type\n* @type {\"setExtremes\"}\n*/\n/**\n * @callback Highcharts.AxisTickPositionerCallbackFunction\n *\n * @param {Highcharts.Axis} this\n *\n * @return {Highcharts.AxisTickPositionsArray}\n */\n/**\n * @interface Highcharts.AxisTickPositionsArray\n * @augments Array<number>\n */\n/**\n * @typedef {\"high\"|\"low\"|\"middle\"} Highcharts.AxisTitleAlignValue\n */\n/**\n * @typedef {Highcharts.XAxisTitleOptions|Highcharts.YAxisTitleOptions|Highcharts.ZAxisTitleOptions} Highcharts.AxisTitleOptions\n */\n/**\n * @typedef {\"linear\"|\"logarithmic\"|\"datetime\"|\"category\"|\"treegrid\"} Highcharts.AxisTypeValue\n */\n/**\n * The returned object literal from the {@link Highcharts.Axis#getExtremes}\n * function.\n *\n * @interface Highcharts.ExtremesObject\n */ /**\n* The maximum value of the axis' associated series.\n* @name Highcharts.ExtremesObject#dataMax\n* @type {number}\n*/ /**\n* The minimum value of the axis' associated series.\n* @name Highcharts.ExtremesObject#dataMin\n* @type {number}\n*/ /**\n* The maximum axis value, either automatic or set manually. If the `max` option\n* is not set, `maxPadding` is 0 and `endOnTick` is false, this value will be\n* the same as `dataMax`.\n* @name Highcharts.ExtremesObject#max\n* @type {number}\n*/ /**\n* The minimum axis value, either automatic or set manually. If the `min` option\n* is not set, `minPadding` is 0 and `startOnTick` is false, this value will be\n* the same as `dataMin`.\n* @name Highcharts.ExtremesObject#min\n* @type {number}\n*/ /**\n* The user defined maximum, either from the `max` option or from a zoom or\n* `setExtremes` action.\n* @name Highcharts.ExtremesObject#userMax\n* @type {number|undefined}\n*/ /**\n* The user defined minimum, either from the `min` option or from a zoom or\n* `setExtremes` action.\n* @name Highcharts.ExtremesObject#userMin\n* @type {number|undefined}\n*/\n/**\n * Formatter function for the text of a crosshair label.\n *\n * @callback Highcharts.XAxisCrosshairLabelFormatterCallbackFunction\n *\n * @param {Highcharts.Axis} this\n * Axis context\n *\n * @param {number} value\n * Y value of the data point\n *\n * @return {string}\n */\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Axis/DateTimeAxis.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar DateTimeAxis_addEvent = Core_Utilities.addEvent, DateTimeAxis_getMagnitude = Core_Utilities.getMagnitude, DateTimeAxis_normalizeTickInterval = Core_Utilities.normalizeTickInterval, DateTimeAxis_timeUnits = Core_Utilities.timeUnits;\n/* *\n *\n * Composition\n *\n * */\n/* eslint-disable valid-jsdoc */\nvar DateTimeAxis;\n(function (DateTimeAxis) {\n /* *\n *\n * Declarations\n *\n * */\n /* *\n *\n * Functions\n *\n * */\n /**\n * Extends axis class with date and time support.\n * @private\n */\n function compose(AxisClass) {\n if (!AxisClass.keepProps.includes('dateTime')) {\n AxisClass.keepProps.push('dateTime');\n var axisProto = AxisClass.prototype;\n axisProto.getTimeTicks = getTimeTicks;\n DateTimeAxis_addEvent(AxisClass, 'afterSetType', onAfterSetType);\n }\n return AxisClass;\n }\n DateTimeAxis.compose = compose;\n /**\n * Set the tick positions to a time unit that makes sense, for example\n * on the first of each month or on every Monday. Return an array with\n * the time positions. Used in datetime axes as well as for grouping\n * data on a datetime axis.\n *\n * @private\n * @function Highcharts.Axis#getTimeTicks\n * @param {Highcharts.TimeNormalizeObject} normalizedInterval\n * The interval in axis values (ms) and the count.\n * @param {number} min\n * The minimum in axis values.\n * @param {number} max\n * The maximum in axis values.\n */\n function getTimeTicks() {\n return this.chart.time.getTimeTicks.apply(this.chart.time, arguments);\n }\n /**\n * @private\n */\n function onAfterSetType() {\n if (this.type !== 'datetime') {\n this.dateTime = void 0;\n return;\n }\n if (!this.dateTime) {\n this.dateTime = new Additions(this);\n }\n }\n /* *\n *\n * Classes\n *\n * */\n var Additions = /** @class */ (function () {\n /* *\n *\n * Constructors\n *\n * */\n function Additions(axis) {\n this.axis = axis;\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Get a normalized tick interval for dates. Returns a configuration\n * object with unit range (interval), count and name. Used to prepare\n * data for `getTimeTicks`. Previously this logic was part of\n * getTimeTicks, but as `getTimeTicks` now runs of segments in stock\n * charts, the normalizing logic was extracted in order to prevent it\n * for running over again for each segment having the same interval.\n * #662, #697.\n * @private\n */\n Additions.prototype.normalizeTimeTickInterval = function (tickInterval, unitsOption) {\n var units = (unitsOption || [[\n // Unit name\n 'millisecond',\n // Allowed multiples\n [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]\n ],\n [\n 'second',\n [1, 2, 5, 10, 15, 30]\n ],\n [\n 'minute',\n [1, 2, 5, 10, 15, 30]\n ],\n [\n 'hour',\n [1, 2, 3, 4, 6, 8, 12]\n ],\n [\n 'day',\n [1, 2]\n ],\n [\n 'week',\n [1, 2]\n ],\n [\n 'month',\n [1, 2, 3, 4, 6]\n ],\n [\n 'year',\n null\n ]]);\n var unit = units[units.length - 1], // Default unit is years\n interval = DateTimeAxis_timeUnits[unit[0]],\n multiples = unit[1],\n i;\n // Loop through the units to find the one that best fits the\n // tickInterval\n for (i = 0; i < units.length; i++) {\n unit = units[i];\n interval = DateTimeAxis_timeUnits[unit[0]];\n multiples = unit[1];\n if (units[i + 1]) {\n // `lessThan` is in the middle between the highest multiple\n // and the next unit.\n var lessThan = (interval *\n multiples[multiples.length - 1] +\n DateTimeAxis_timeUnits[units[i + 1][0]]) / 2;\n // Break and keep the current unit\n if (tickInterval <= lessThan) {\n break;\n }\n }\n }\n // Prevent 2.5 years intervals, though 25, 250 etc. are allowed\n if (interval === DateTimeAxis_timeUnits.year && tickInterval < 5 * interval) {\n multiples = [1, 2, 5];\n }\n // Get the count\n var count = DateTimeAxis_normalizeTickInterval(tickInterval / interval, multiples, unit[0] === 'year' ? // #1913, #2360\n Math.max(DateTimeAxis_getMagnitude(tickInterval / interval), 1) :\n 1);\n return {\n unitRange: interval,\n count: count,\n unitName: unit[0]\n };\n };\n /**\n * Get the best date format for a specific X value based on the closest\n * point range on the axis.\n *\n * @private\n */\n Additions.prototype.getXDateFormat = function (x, dateTimeLabelFormats) {\n var axis = this.axis,\n time = axis.chart.time;\n return axis.closestPointRange ?\n time.getDateFormat(axis.closestPointRange, x, axis.options.startOfWeek, dateTimeLabelFormats) ||\n // #2546, 2581\n time.resolveDTLFormat(dateTimeLabelFormats.year).main :\n time.resolveDTLFormat(dateTimeLabelFormats.day).main;\n };\n return Additions;\n }());\n DateTimeAxis.Additions = Additions;\n})(DateTimeAxis || (DateTimeAxis = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Axis_DateTimeAxis = (DateTimeAxis);\n\n;// ./code/es5/es-modules/Core/Axis/LogarithmicAxis.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar LogarithmicAxis_addEvent = Core_Utilities.addEvent, LogarithmicAxis_normalizeTickInterval = Core_Utilities.normalizeTickInterval, LogarithmicAxis_pick = Core_Utilities.pick;\n/* *\n *\n * Class\n *\n * */\n/**\n * @private\n */\nvar LogarithmicAxis;\n(function (LogarithmicAxis) {\n /* *\n *\n * Declarations\n *\n * */\n /* *\n *\n * Functions\n *\n * */\n /**\n * Provides logarithmic support for axes.\n * @private\n */\n function compose(AxisClass) {\n if (!AxisClass.keepProps.includes('logarithmic')) {\n AxisClass.keepProps.push('logarithmic');\n LogarithmicAxis_addEvent(AxisClass, 'afterSetType', onAfterSetType);\n LogarithmicAxis_addEvent(AxisClass, 'afterInit', onAfterInit);\n }\n return AxisClass;\n }\n LogarithmicAxis.compose = compose;\n /**\n * @private\n */\n function onAfterSetType() {\n var _a;\n if (this.type !== 'logarithmic') {\n this.logarithmic = void 0;\n }\n else {\n (_a = this.logarithmic) !== null && _a !== void 0 ? _a : (this.logarithmic = new Additions(this));\n }\n }\n /**\n * @private\n */\n function onAfterInit() {\n var axis = this;\n var log = axis.logarithmic;\n // Extend logarithmic axis\n if (log) {\n axis.lin2val = function (num) {\n return log.lin2log(num);\n };\n axis.val2lin = function (num) {\n return log.log2lin(num);\n };\n }\n }\n /* *\n *\n * Class\n *\n * */\n /**\n * Provides logarithmic support for axes.\n * @private\n * @class\n */\n var Additions = /** @class */ (function () {\n /* *\n *\n * Constructors\n *\n * */\n function Additions(axis) {\n this.axis = axis;\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Set the tick positions of a logarithmic axis.\n */\n Additions.prototype.getLogTickPositions = function (interval, min, max, minor) {\n var log = this;\n var axis = log.axis;\n var axisLength = axis.len;\n var options = axis.options;\n // Since we use this method for both major and minor ticks,\n // use a local variable and return the result\n var positions = [];\n // Reset\n if (!minor) {\n log.minorAutoInterval = void 0;\n }\n // First case: All ticks fall on whole logarithms: 1, 10, 100 etc.\n if (interval >= 0.5) {\n interval = Math.round(interval);\n positions = axis.getLinearTickPositions(interval, min, max);\n // Second case: We need intermediary ticks. For example\n // 1, 2, 4, 6, 8, 10, 20, 40 etc.\n }\n else if (interval >= 0.08) {\n var roundedMin = Math.floor(min);\n var intermediate = void 0,\n i = void 0,\n j = void 0,\n len = void 0,\n pos = void 0,\n lastPos = void 0,\n break2 = void 0;\n if (interval > 0.3) {\n intermediate = [1, 2, 4];\n // 0.2 equals five minor ticks per 1, 10, 100 etc\n }\n else if (interval > 0.15) {\n intermediate = [1, 2, 4, 6, 8];\n }\n else { // 0.1 equals ten minor ticks per 1, 10, 100 etc\n intermediate = [1, 2, 3, 4, 5, 6, 7, 8, 9];\n }\n for (i = roundedMin; i < max + 1 && !break2; i++) {\n len = intermediate.length;\n for (j = 0; j < len && !break2; j++) {\n pos = log.log2lin(log.lin2log(i) * intermediate[j]);\n // #1670, lastPos is #3113\n if (pos > min &&\n (!minor || lastPos <= max) &&\n typeof lastPos !== 'undefined') {\n positions.push(lastPos);\n }\n if (lastPos > max) {\n break2 = true;\n }\n lastPos = pos;\n }\n }\n // Third case: We are so deep in between whole logarithmic values,\n // that we might as well handle the tick positions like a linear\n // axis. For example 1.01, 1.02, 1.03, 1.04.\n }\n else {\n var realMin = log.lin2log(min),\n realMax = log.lin2log(max),\n tickIntervalOption = minor ?\n axis.getMinorTickInterval() :\n options.tickInterval,\n filteredTickIntervalOption = tickIntervalOption === 'auto' ?\n null :\n tickIntervalOption,\n tickPixelIntervalOption = options.tickPixelInterval / (minor ? 5 : 1),\n totalPixelLength = minor ?\n axisLength / axis.tickPositions.length :\n axisLength;\n interval = LogarithmicAxis_pick(filteredTickIntervalOption, log.minorAutoInterval, (realMax - realMin) *\n tickPixelIntervalOption / (totalPixelLength || 1));\n interval = LogarithmicAxis_normalizeTickInterval(interval);\n positions = axis.getLinearTickPositions(interval, realMin, realMax).map(log.log2lin);\n if (!minor) {\n log.minorAutoInterval = interval / 5;\n }\n }\n // Set the axis-level tickInterval variable\n if (!minor) {\n axis.tickInterval = interval;\n }\n return positions;\n };\n Additions.prototype.lin2log = function (num) {\n return Math.pow(10, num);\n };\n Additions.prototype.log2lin = function (num) {\n return Math.log(num) / Math.LN10;\n };\n return Additions;\n }());\n LogarithmicAxis.Additions = Additions;\n})(LogarithmicAxis || (LogarithmicAxis = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Axis_LogarithmicAxis = (LogarithmicAxis);\n\n;// ./code/es5/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar PlotLineOrBandAxis_erase = Core_Utilities.erase, PlotLineOrBandAxis_extend = Core_Utilities.extend, PlotLineOrBandAxis_isNumber = Core_Utilities.isNumber;\n/* *\n *\n * Composition\n *\n * */\nvar PlotLineOrBandAxis;\n(function (PlotLineOrBandAxis) {\n /* *\n *\n * Declarations\n *\n * */\n /* *\n *\n * Variables\n *\n * */\n var PlotLineOrBandClass;\n /* *\n *\n * Functions\n *\n * */\n /**\n * Add a plot band after render time.\n *\n * @sample highcharts/members/axis-addplotband/\n * Toggle the plot band from a button\n *\n * @function Highcharts.Axis#addPlotBand\n *\n * @param {Highcharts.AxisPlotBandsOptions} options\n * A configuration object for the plot band, as defined in\n * [xAxis.plotBands](https://api.highcharts.com/highcharts/xAxis.plotBands).\n *\n * @return {Highcharts.PlotLineOrBand|undefined}\n * The added plot band, or `undefined` if the options are not valid.\n */\n function addPlotBand(options) {\n return this.addPlotBandOrLine(options, 'plotBands');\n }\n /**\n * Add a plot band or plot line after render time. Called from\n * addPlotBand and addPlotLine internally.\n *\n * @private\n * @function Highcharts.Axis#addPlotBandOrLine\n * @param {Highcharts.AxisPlotBandsOptions|Highcharts.AxisPlotLinesOptions} options\n * The plotBand or plotLine configuration object.\n */\n function addPlotBandOrLine(options, coll) {\n var _this = this;\n var userOptions = this.userOptions;\n var obj = new PlotLineOrBandClass(this,\n options);\n if (this.visible) {\n obj = obj.render();\n }\n if (obj) { // #2189\n if (!this._addedPlotLB) {\n this._addedPlotLB = true;\n (userOptions.plotLines || [])\n .concat(userOptions.plotBands || [])\n .forEach(function (plotLineOptions) {\n _this.addPlotBandOrLine(plotLineOptions);\n });\n }\n // Add it to the user options for exporting and Axis.update\n if (coll) {\n // Workaround Microsoft/TypeScript issue #32693\n var updatedOptions = (userOptions[coll] || []);\n updatedOptions.push(options);\n userOptions[coll] = updatedOptions;\n }\n this.plotLinesAndBands.push(obj);\n }\n return obj;\n }\n /**\n * Add a plot line after render time.\n *\n * @sample highcharts/members/axis-addplotline/\n * Toggle the plot line from a button\n *\n * @function Highcharts.Axis#addPlotLine\n *\n * @param {Highcharts.AxisPlotLinesOptions} options\n * A configuration object for the plot line, as defined in\n * [xAxis.plotLines](https://api.highcharts.com/highcharts/xAxis.plotLines).\n *\n * @return {Highcharts.PlotLineOrBand|undefined}\n * The added plot line, or `undefined` if the options are not valid.\n */\n function addPlotLine(options) {\n return this.addPlotBandOrLine(options, 'plotLines');\n }\n /**\n * @private\n */\n function compose(PlotLineOrBandType, AxisClass) {\n var axisProto = AxisClass.prototype;\n if (!axisProto.addPlotBand) {\n PlotLineOrBandClass = PlotLineOrBandType;\n PlotLineOrBandAxis_extend(axisProto, {\n addPlotBand: addPlotBand,\n addPlotLine: addPlotLine,\n addPlotBandOrLine: addPlotBandOrLine,\n getPlotBandPath: getPlotBandPath,\n removePlotBand: removePlotBand,\n removePlotLine: removePlotLine,\n removePlotBandOrLine: removePlotBandOrLine\n });\n }\n return AxisClass;\n }\n PlotLineOrBandAxis.compose = compose;\n /**\n * Internal function to create the SVG path definition for a plot band.\n *\n * @function Highcharts.Axis#getPlotBandPath\n *\n * @param {number} from\n * The axis value to start from.\n *\n * @param {number} to\n * The axis value to end on.\n *\n * @param {Highcharts.AxisPlotBandsOptions|Highcharts.AxisPlotLinesOptions} options\n * The plotBand or plotLine configuration object.\n *\n * @return {Highcharts.SVGPathArray}\n * The SVG path definition in array form.\n */\n function getPlotBandPath(from, to, options) {\n options = options || this.options;\n var toPath = this.getPlotLinePath({\n value: to,\n force: true,\n acrossPanes: options.acrossPanes\n }),\n result = [],\n horiz = this.horiz,\n outside = !PlotLineOrBandAxis_isNumber(this.min) ||\n !PlotLineOrBandAxis_isNumber(this.max) ||\n (from < this.min && to < this.min) ||\n (from > this.max && to > this.max),\n path = this.getPlotLinePath({\n value: from,\n force: true,\n acrossPanes: options.acrossPanes\n });\n var i, \n // #4964 check if chart is inverted or plotband is on yAxis\n plus = 1,\n isFlat;\n if (path && toPath) {\n // Flat paths don't need labels (#3836)\n if (outside) {\n isFlat = path.toString() === toPath.toString();\n plus = 0;\n }\n // Go over each subpath - for panes in Highcharts Stock\n for (i = 0; i < path.length; i += 2) {\n var pathStart = path[i],\n pathEnd = path[i + 1],\n toPathStart = toPath[i],\n toPathEnd = toPath[i + 1];\n // Type checking all affected path segments. Consider\n // something smarter.\n if ((pathStart[0] === 'M' || pathStart[0] === 'L') &&\n (pathEnd[0] === 'M' || pathEnd[0] === 'L') &&\n (toPathStart[0] === 'M' || toPathStart[0] === 'L') &&\n (toPathEnd[0] === 'M' || toPathEnd[0] === 'L')) {\n // Add 1 pixel when coordinates are the same\n if (horiz && toPathStart[1] === pathStart[1]) {\n toPathStart[1] += plus;\n toPathEnd[1] += plus;\n }\n else if (!horiz && toPathStart[2] === pathStart[2]) {\n toPathStart[2] += plus;\n toPathEnd[2] += plus;\n }\n result.push(['M', pathStart[1], pathStart[2]], ['L', pathEnd[1], pathEnd[2]], ['L', toPathEnd[1], toPathEnd[2]], ['L', toPathStart[1], toPathStart[2]], ['Z']);\n }\n result.isFlat = isFlat;\n }\n }\n return result;\n }\n /**\n * Remove a plot band by its id.\n *\n * @sample highcharts/members/axis-removeplotband/\n * Remove plot band by id\n * @sample highcharts/members/axis-addplotband/\n * Toggle the plot band from a button\n *\n * @function Highcharts.Axis#removePlotBand\n *\n * @param {string} id\n * The plot band's `id` as given in the original configuration\n * object or in the `addPlotBand` option.\n */\n function removePlotBand(id) {\n this.removePlotBandOrLine(id);\n }\n /**\n * Remove a plot band or plot line from the chart by id. Called\n * internally from `removePlotBand` and `removePlotLine`.\n * @private\n * @function Highcharts.Axis#removePlotBandOrLine\n */\n function removePlotBandOrLine(id) {\n var plotLinesAndBands = this.plotLinesAndBands,\n options = this.options,\n userOptions = this.userOptions;\n if (plotLinesAndBands) { // #15639\n var i_1 = plotLinesAndBands.length;\n while (i_1--) {\n if (plotLinesAndBands[i_1].id === id) {\n plotLinesAndBands[i_1].destroy();\n }\n }\n ([\n options.plotLines || [],\n userOptions.plotLines || [],\n options.plotBands || [],\n userOptions.plotBands || []\n ]).forEach(function (arr) {\n i_1 = arr.length;\n while (i_1--) {\n if ((arr[i_1] || {}).id === id) {\n PlotLineOrBandAxis_erase(arr, arr[i_1]);\n }\n }\n });\n }\n }\n /**\n * Remove a plot line by its id.\n *\n * @sample highcharts/xaxis/plotlines-id/\n * Remove plot line by id\n * @sample highcharts/members/axis-addplotline/\n * Toggle the plot line from a button\n *\n * @function Highcharts.Axis#removePlotLine\n *\n * @param {string} id\n * The plot line's `id` as given in the original configuration\n * object or in the `addPlotLine` option.\n */\n function removePlotLine(id) {\n this.removePlotBandOrLine(id);\n }\n})(PlotLineOrBandAxis || (PlotLineOrBandAxis = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var PlotLineOrBand_PlotLineOrBandAxis = (PlotLineOrBandAxis);\n\n;// ./code/es5/es-modules/Core/Axis/PlotLineOrBand/PlotLineOrBand.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar PlotLineOrBand_assign = (undefined && undefined.__assign) || function () {\n PlotLineOrBand_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return PlotLineOrBand_assign.apply(this, arguments);\n};\n\n\nvar PlotLineOrBand_addEvent = Core_Utilities.addEvent, PlotLineOrBand_arrayMax = Core_Utilities.arrayMax, PlotLineOrBand_arrayMin = Core_Utilities.arrayMin, PlotLineOrBand_defined = Core_Utilities.defined, PlotLineOrBand_destroyObjectProperties = Core_Utilities.destroyObjectProperties, PlotLineOrBand_erase = Core_Utilities.erase, PlotLineOrBand_fireEvent = Core_Utilities.fireEvent, PlotLineOrBand_merge = Core_Utilities.merge, PlotLineOrBand_objectEach = Core_Utilities.objectEach, PlotLineOrBand_pick = Core_Utilities.pick;\n/* *\n *\n * Class\n *\n * */\n/**\n * The object wrapper for plot lines and plot bands\n *\n * @class\n * @name Highcharts.PlotLineOrBand\n *\n * @param {Highcharts.Axis} axis\n * Related axis.\n *\n * @param {Highcharts.AxisPlotLinesOptions|Highcharts.AxisPlotBandsOptions} [options]\n * Options to use.\n */\nvar PlotLineOrBand = /** @class */ (function () {\n /* *\n *\n * Constructor\n *\n * */\n function PlotLineOrBand(axis, options) {\n /**\n * Related axis.\n *\n * @name Highcharts.PlotLineOrBand#axis\n * @type {Highcharts.Axis}\n */\n this.axis = axis;\n /**\n * Options of the plot line or band.\n *\n * @name Highcharts.PlotLineOrBand#options\n * @type {AxisPlotBandsOptions|AxisPlotLinesOptions}\n */\n this.options = options;\n this.id = options.id;\n }\n /* *\n *\n * Static Functions\n *\n * */\n PlotLineOrBand.compose = function (ChartClass, AxisClass) {\n PlotLineOrBand_addEvent(ChartClass, 'afterInit', function () {\n var _this = this;\n this.labelCollectors.push(function () {\n var _a;\n var labels = [];\n for (var _i = 0, _b = _this.axes; _i < _b.length; _i++) {\n var axis = _b[_i];\n for (var _c = 0, _d = axis.plotLinesAndBands; _c < _d.length; _c++) {\n var _e = _d[_c],\n label = _e.label,\n options = _e.options;\n if (label && !((_a = options === null || options === void 0 ? void 0 : options.label) === null || _a === void 0 ? void 0 : _a.allowOverlap)) {\n labels.push(label);\n }\n }\n }\n return labels;\n });\n });\n return PlotLineOrBand_PlotLineOrBandAxis.compose(PlotLineOrBand, AxisClass);\n };\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable no-invalid-this, valid-jsdoc */\n /**\n * Render the plot line or plot band. If it is already existing,\n * move it.\n * @private\n * @function Highcharts.PlotLineOrBand#render\n */\n PlotLineOrBand.prototype.render = function () {\n var _this = this;\n var _a,\n _b,\n _c;\n PlotLineOrBand_fireEvent(this, 'render');\n var _d = this,\n axis = _d.axis,\n options = _d.options,\n horiz = axis.horiz,\n logarithmic = axis.logarithmic,\n color = options.color,\n events = options.events,\n _e = options.zIndex,\n zIndex = _e === void 0 ? 0 : _e,\n _f = axis.chart,\n renderer = _f.renderer,\n time = _f.time,\n groupAttribs = {}, \n // These properties only exist on either band or line\n to = time.parse(options.to),\n from = time.parse(options.from),\n value = time.parse(options.value),\n borderWidth = options.borderWidth;\n var optionsLabel = options.label,\n _g = this,\n label = _g.label,\n svgElem = _g.svgElem,\n path = [],\n group;\n var isBand = PlotLineOrBand_defined(from) && PlotLineOrBand_defined(to),\n isLine = PlotLineOrBand_defined(value),\n isNew = !svgElem,\n attribs = {\n 'class': 'highcharts-plot-' + (isBand ? 'band ' : 'line ') +\n (options.className || '')\n };\n var groupName = isBand ? 'bands' : 'lines';\n // Set the presentational attributes\n if (!axis.chart.styledMode) {\n if (isLine) {\n attribs.stroke = color || \"#999999\" /* Palette.neutralColor40 */;\n attribs['stroke-width'] = PlotLineOrBand_pick(options.width, 1);\n if (options.dashStyle) {\n attribs.dashstyle = options.dashStyle;\n }\n }\n else if (isBand) { // Plot band\n attribs.fill = color || \"#e6e9ff\" /* Palette.highlightColor10 */;\n if (borderWidth) {\n attribs.stroke = options.borderColor;\n attribs['stroke-width'] = borderWidth;\n }\n }\n }\n // Grouping and zIndex\n groupAttribs.zIndex = zIndex;\n groupName += '-' + zIndex;\n group = axis.plotLinesAndBandsGroups[groupName];\n if (!group) {\n axis.plotLinesAndBandsGroups[groupName] = group =\n renderer.g('plot-' + groupName)\n .attr(groupAttribs).add();\n }\n // Create the path\n if (!svgElem) {\n /**\n * SVG element of the plot line or band.\n *\n * @name Highcharts.PlotLineOrBand#svgElem\n * @type {Highcharts.SVGElement}\n */\n this.svgElem = svgElem = renderer\n .path()\n .attr(attribs)\n .add(group);\n }\n // Set the path or return\n if (PlotLineOrBand_defined(value)) { // Plot line\n path = axis.getPlotLinePath({\n value: (_a = logarithmic === null || logarithmic === void 0 ? void 0 : logarithmic.log2lin(value)) !== null && _a !== void 0 ? _a : value,\n lineWidth: svgElem.strokeWidth(),\n acrossPanes: options.acrossPanes\n });\n }\n else if (PlotLineOrBand_defined(from) && PlotLineOrBand_defined(to)) { // Plot band\n path = axis.getPlotBandPath((_b = logarithmic === null || logarithmic === void 0 ? void 0 : logarithmic.log2lin(from)) !== null && _b !== void 0 ? _b : from, (_c = logarithmic === null || logarithmic === void 0 ? void 0 : logarithmic.log2lin(to)) !== null && _c !== void 0 ? _c : to, options);\n }\n else {\n return;\n }\n // Common for lines and bands. Add events only if they were not added\n // before.\n if (!this.eventsAdded && events) {\n PlotLineOrBand_objectEach(events, function (event, eventType) {\n svgElem === null || svgElem === void 0 ? void 0 : svgElem.on(eventType, function (e) {\n events[eventType].apply(_this, [e]);\n });\n });\n this.eventsAdded = true;\n }\n if ((isNew || !svgElem.d) && (path === null || path === void 0 ? void 0 : path.length)) {\n svgElem.attr({ d: path });\n }\n else if (svgElem) {\n if (path) {\n svgElem.show();\n svgElem.animate({ d: path });\n }\n else if (svgElem.d) {\n svgElem.hide();\n if (label) {\n this.label = label = label.destroy();\n }\n }\n }\n // The plot band/line label\n if (optionsLabel &&\n (PlotLineOrBand_defined(optionsLabel.text) || PlotLineOrBand_defined(optionsLabel.formatter)) &&\n (path === null || path === void 0 ? void 0 : path.length) &&\n axis.width > 0 &&\n axis.height > 0 &&\n !path.isFlat) {\n // Apply defaults\n optionsLabel = PlotLineOrBand_merge(PlotLineOrBand_assign({ align: horiz && isBand ? 'center' : void 0, x: horiz ? !isBand && 4 : 10, verticalAlign: !horiz && isBand ? 'middle' : void 0, y: horiz ? isBand ? 16 : 10 : isBand ? 6 : -4, rotation: horiz && !isBand ? 90 : 0 }, (isBand ? { inside: true } : {})), optionsLabel);\n this.renderLabel(optionsLabel, path, isBand, zIndex);\n // Move out of sight\n }\n else if (label) {\n label.hide();\n }\n // Chainable\n return this;\n };\n /**\n * Render and align label for plot line or band.\n * @private\n * @function Highcharts.PlotLineOrBand#renderLabel\n */\n PlotLineOrBand.prototype.renderLabel = function (optionsLabel, path, isBand, zIndex) {\n var _a;\n var plotLine = this,\n axis = plotLine.axis,\n renderer = axis.chart.renderer,\n inside = optionsLabel.inside;\n var label = plotLine.label;\n // Add the SVG element\n if (!label) {\n /**\n * SVG element of the label.\n *\n * @name Highcharts.PlotLineOrBand#label\n * @type {Highcharts.SVGElement}\n */\n plotLine.label = label = renderer\n .text(this.getLabelText(optionsLabel), 0, 0, optionsLabel.useHTML)\n .attr({\n align: optionsLabel.textAlign || optionsLabel.align,\n rotation: optionsLabel.rotation,\n 'class': 'highcharts-plot-' + (isBand ? 'band' : 'line') +\n '-label ' + (optionsLabel.className || ''),\n zIndex: zIndex\n });\n if (!axis.chart.styledMode) {\n label.css(PlotLineOrBand_merge({\n fontSize: '0.8em',\n textOverflow: (isBand && !inside) ? '' : 'ellipsis'\n }, optionsLabel.style));\n }\n label.add();\n }\n // Get the bounding box and align the label\n // #3000 changed to better handle choice between plotband or plotline\n var xBounds = path.xBounds ||\n [path[0][1],\n path[1][1], (isBand ? path[2][1] : path[0][1])],\n yBounds = path.yBounds ||\n [path[0][2],\n path[1][2], (isBand ? path[2][2] : path[0][2])],\n x = PlotLineOrBand_arrayMin(xBounds),\n y = PlotLineOrBand_arrayMin(yBounds),\n bBoxWidth = PlotLineOrBand_arrayMax(xBounds) - x;\n label.align(optionsLabel, false, {\n x: x,\n y: y,\n width: bBoxWidth,\n height: PlotLineOrBand_arrayMax(yBounds) - y\n });\n if (!label.alignValue ||\n label.alignValue === 'left' ||\n PlotLineOrBand_defined(inside)) {\n label.css({\n width: (((_a = optionsLabel.style) === null || _a === void 0 ? void 0 : _a.width) || ((!isBand ||\n !inside) ? (label.rotation === 90 ?\n axis.height - (label.alignAttr.y -\n axis.top) : (optionsLabel.clip ?\n axis.width :\n axis.chart.chartWidth) - (label.alignAttr.x - axis.left)) :\n bBoxWidth)) + 'px'\n });\n }\n label.show(true);\n };\n /**\n * Get label's text content.\n * @private\n * @function Highcharts.PlotLineOrBand#getLabelText\n */\n PlotLineOrBand.prototype.getLabelText = function (optionsLabel) {\n return PlotLineOrBand_defined(optionsLabel.formatter) ?\n optionsLabel.formatter\n .call(this) :\n optionsLabel.text;\n };\n /**\n * Remove the plot line or band.\n *\n * @function Highcharts.PlotLineOrBand#destroy\n */\n PlotLineOrBand.prototype.destroy = function () {\n // Remove it from the lookup\n PlotLineOrBand_erase(this.axis.plotLinesAndBands, this);\n delete this.axis;\n PlotLineOrBand_destroyObjectProperties(this);\n };\n return PlotLineOrBand;\n}());\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var PlotLineOrBand_PlotLineOrBand = (PlotLineOrBand);\n/* *\n *\n * API Options\n *\n * */\n/**\n * Options for plot bands on axes.\n *\n * @typedef {Highcharts.XAxisPlotBandsOptions|Highcharts.YAxisPlotBandsOptions|Highcharts.ZAxisPlotBandsOptions} Highcharts.AxisPlotBandsOptions\n */\n/**\n * Options for plot band labels on axes.\n *\n * @typedef {Highcharts.XAxisPlotBandsLabelOptions|Highcharts.YAxisPlotBandsLabelOptions|Highcharts.ZAxisPlotBandsLabelOptions} Highcharts.AxisPlotBandsLabelOptions\n */\n/**\n * Options for plot lines on axes.\n *\n * @typedef {Highcharts.XAxisPlotLinesOptions|Highcharts.YAxisPlotLinesOptions|Highcharts.ZAxisPlotLinesOptions} Highcharts.AxisPlotLinesOptions\n */\n/**\n * Options for plot line labels on axes.\n *\n * @typedef {Highcharts.XAxisPlotLinesLabelOptions|Highcharts.YAxisPlotLinesLabelOptions|Highcharts.ZAxisPlotLinesLabelOptions} Highcharts.AxisPlotLinesLabelOptions\n */\n('');\n/* *\n *\n * API Options\n *\n * */\n/**\n * An array of colored bands stretching across the plot area marking an\n * interval on the axis.\n *\n * In styled mode, the plot bands are styled by the `.highcharts-plot-band`\n * class in addition to the `className` option.\n *\n * @productdesc {highcharts}\n * In a gauge, a plot band on the Y axis (value axis) will stretch along the\n * perimeter of the gauge.\n *\n * @type {Array<*>}\n * @product highcharts highstock gantt\n * @apioption xAxis.plotBands\n */\n/**\n * Flag to decide if plotBand should be rendered across all panes.\n *\n * @since 7.1.2\n * @product highstock\n * @type {boolean}\n * @default true\n * @apioption xAxis.plotBands.acrossPanes\n */\n/**\n * Border color for the plot band. Also requires `borderWidth` to be set.\n *\n * @type {Highcharts.ColorString}\n * @apioption xAxis.plotBands.borderColor\n */\n/**\n * Border radius for the plot band. Applies only to gauges. Can be a pixel\n * value or a percentage, for example `50%`.\n *\n * @type {number|string}\n * @since 11.4.2\n * @sample {highcharts} highcharts/xaxis/plotbands-gauge-borderradius\n * Angular gauge with rounded plot bands\n * @apioption xAxis.plotBands.borderRadius\n */\n/**\n * Border width for the plot band. Also requires `borderColor` to be set.\n *\n * @type {number}\n * @default 0\n * @apioption xAxis.plotBands.borderWidth\n */\n/**\n * A custom class name, in addition to the default `highcharts-plot-band`,\n * to apply to each individual band.\n *\n * @type {string}\n * @since 5.0.0\n * @apioption xAxis.plotBands.className\n */\n/**\n * The color of the plot band.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-color/\n * Color band\n * @sample {highstock} stock/xaxis/plotbands/\n * Plot band on Y axis\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @default ${palette.highlightColor10}\n * @apioption xAxis.plotBands.color\n */\n/**\n * An object defining mouse events for the plot band. Supported properties\n * are `click`, `mouseover`, `mouseout`, `mousemove`.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-events/\n * Mouse events demonstrated\n *\n * @since 1.2\n * @apioption xAxis.plotBands.events\n */\n/**\n * Click event on a plot band.\n *\n * @type {Highcharts.EventCallbackFunction<Highcharts.PlotLineOrBand>}\n * @apioption xAxis.plotBands.events.click\n */\n/**\n * Mouse move event on a plot band.\n *\n * @type {Highcharts.EventCallbackFunction<Highcharts.PlotLineOrBand>}\n * @apioption xAxis.plotBands.events.mousemove\n */\n/**\n * Mouse out event on the corner of a plot band.\n *\n * @type {Highcharts.EventCallbackFunction<Highcharts.PlotLineOrBand>}\n * @apioption xAxis.plotBands.events.mouseout\n */\n/**\n * Mouse over event on a plot band.\n *\n * @type {Highcharts.EventCallbackFunction<Highcharts.PlotLineOrBand>}\n * @apioption xAxis.plotBands.events.mouseover\n */\n/**\n * The start position of the plot band in axis units.\n *\n * On datetime axes, the value can be given as a timestamp or a date string.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-color/\n * Datetime axis\n * @sample {highcharts} highcharts/xaxis/plotbands-from/\n * Categorized axis\n * @sample {highstock} stock/xaxis/plotbands/\n * Plot band on Y axis\n *\n * @type {number|string}\n * @apioption xAxis.plotBands.from\n */\n/**\n * An id used for identifying the plot band in Axis.removePlotBand.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-id/\n * Remove plot band by id\n * @sample {highstock} highcharts/xaxis/plotbands-id/\n * Remove plot band by id\n *\n * @type {string}\n * @apioption xAxis.plotBands.id\n */\n/**\n * The end position of the plot band in axis units.\n *\n * On datetime axes, the value can be given as a timestamp or a date string.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-color/\n * Datetime axis\n * @sample {highcharts} highcharts/xaxis/plotbands-from/\n * Categorized axis\n * @sample {highstock} stock/xaxis/plotbands/\n * Plot band on Y axis\n *\n * @type {number|string}\n * @apioption xAxis.plotBands.to\n */\n/**\n * The z index of the plot band within the chart, relative to other\n * elements. Using the same z index as another element may give\n * unpredictable results, as the last rendered element will be on top.\n * Values from 0 to 20 make sense.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-color/\n * Behind plot lines by default\n * @sample {highcharts} highcharts/xaxis/plotbands-zindex/\n * Above plot lines\n * @sample {highcharts} highcharts/xaxis/plotbands-zindex-above-series/\n * Above plot lines and series\n *\n * @type {number}\n * @since 1.2\n * @apioption xAxis.plotBands.zIndex\n */\n/**\n * Text labels for the plot bands\n *\n * @product highcharts highstock gantt\n * @apioption xAxis.plotBands.label\n */\n/**\n * Horizontal alignment of the label. Can be one of \"left\", \"center\" or\n * \"right\".\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-align/\n * Aligned to the right\n * @sample {highstock} stock/xaxis/plotbands-label/\n * Plot band with labels\n *\n * @type {Highcharts.AlignValue}\n * @default center\n * @since 2.1\n * @apioption xAxis.plotBands.label.align\n */\n/**\n * Whether or not the label can be hidden if it overlaps with another label.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-allowoverlap/\n * A Plotband label overlapping another\n *\n * @type {boolean}\n * @default undefined\n * @since 11.4.8\n * @apioption xAxis.plotBands.label.allowOverlap\n */\n/**\n * Wether or not the text of the label can exceed the width of the label.\n *\n * @type {boolean}\n * @product highcharts highstock gantt\n * @sample {highcharts} highcharts/xaxis/plotbands-label-textwidth/\n * Displaying text with text-wrapping/ellipsis, or the full text.\n *\n * @default true\n * @since 11.4.6\n * @apioption xAxis.plotBands.label.inside\n */\n/**\n * Rotation of the text label in degrees .\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-rotation/\n * Vertical text\n *\n * @type {number}\n * @default 0\n * @since 2.1\n * @apioption xAxis.plotBands.label.rotation\n */\n/**\n * CSS styles for the text label.\n *\n * In styled mode, the labels are styled by the\n * `.highcharts-plot-band-label` class.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-style/\n * Blue and bold label\n *\n * @type {Highcharts.CSSObject}\n * @since 2.1\n * @apioption xAxis.plotBands.label.style\n */\n/**\n * The string text itself. A subset of HTML is supported.\n *\n * @type {string}\n * @since 2.1\n * @apioption xAxis.plotBands.label.text\n */\n/**\n * The text alignment for the label. While `align` determines where the\n * texts anchor point is placed within the plot band, `textAlign` determines\n * how the text is aligned against its anchor point. Possible values are\n * \"left\", \"center\" and \"right\". Defaults to the same as the `align` option.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-rotation/\n * Vertical text in center position but text-aligned left\n *\n * @type {Highcharts.AlignValue}\n * @since 2.1\n * @apioption xAxis.plotBands.label.textAlign\n */\n/**\n * Whether to [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n * to render the labels.\n *\n * @type {boolean}\n * @default false\n * @since 3.0.3\n * @apioption xAxis.plotBands.label.useHTML\n */\n/**\n * Vertical alignment of the label relative to the plot band. Can be one of\n * \"top\", \"middle\" or \"bottom\".\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-verticalalign/\n * Vertically centered label\n * @sample {highstock} stock/xaxis/plotbands-label/\n * Plot band with labels\n *\n * @type {Highcharts.VerticalAlignValue}\n * @default top\n * @since 2.1\n * @apioption xAxis.plotBands.label.verticalAlign\n */\n/**\n * Horizontal position relative the alignment. Default varies by\n * orientation.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-align/\n * Aligned 10px from the right edge\n * @sample {highstock} stock/xaxis/plotbands-label/\n * Plot band with labels\n *\n * @type {number}\n * @since 2.1\n * @apioption xAxis.plotBands.label.x\n */\n/**\n * Vertical position of the text baseline relative to the alignment. Default\n * varies by orientation.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-label-y/\n * Label on x axis\n * @sample {highstock} stock/xaxis/plotbands-label/\n * Plot band with labels\n *\n * @type {number}\n * @since 2.1\n * @apioption xAxis.plotBands.label.y\n */\n/**\n * An array of lines stretching across the plot area, marking a specific\n * value on one of the axes.\n *\n * In styled mode, the plot lines are styled by the\n * `.highcharts-plot-line` class in addition to the `className` option.\n *\n * @type {Array<*>}\n * @product highcharts highstock gantt\n * @sample {highcharts} highcharts/xaxis/plotlines-color/\n * Basic plot line\n * @sample {highcharts} highcharts/series-solidgauge/labels-auto-aligned/\n * Solid gauge plot line\n * @apioption xAxis.plotLines\n */\n/**\n * Flag to decide if plotLine should be rendered across all panes.\n *\n * @sample {highstock} stock/xaxis/plotlines-acrosspanes/\n * Plot lines on different panes\n *\n * @since 7.1.2\n * @product highstock\n * @type {boolean}\n * @default true\n * @apioption xAxis.plotLines.acrossPanes\n */\n/**\n * A custom class name, in addition to the default `highcharts-plot-line`,\n * to apply to each individual line.\n *\n * @type {string}\n * @since 5.0.0\n * @apioption xAxis.plotLines.className\n */\n/**\n * The color of the line.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-color/\n * A red line from X axis\n * @sample {highstock} stock/xaxis/plotlines/\n * Plot line on Y axis\n *\n * @type {Highcharts.ColorString}\n * @default ${palette.neutralColor40}\n * @apioption xAxis.plotLines.color\n */\n/**\n * The dashing or dot style for the plot line. For possible values see\n * [this overview](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/plotoptions/series-dashstyle-all/).\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-dashstyle/\n * Dash and dot pattern\n * @sample {highstock} stock/xaxis/plotlines/\n * Plot line on Y axis\n *\n * @type {Highcharts.DashStyleValue}\n * @default Solid\n * @since 1.2\n * @apioption xAxis.plotLines.dashStyle\n */\n/**\n * An object defining mouse events for the plot line. Supported\n * properties are `click`, `mouseover`, `mouseout`, `mousemove`.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-events/\n * Mouse events demonstrated\n *\n * @since 1.2\n * @apioption xAxis.plotLines.events\n */\n/**\n * Click event on a plot band.\n *\n * @type {Highcharts.EventCallbackFunction<Highcharts.PlotLineOrBand>}\n * @apioption xAxis.plotLines.events.click\n */\n/**\n * Mouse move event on a plot band.\n *\n * @type {Highcharts.EventCallbackFunction<Highcharts.PlotLineOrBand>}\n * @apioption xAxis.plotLines.events.mousemove\n */\n/**\n * Mouse out event on the corner of a plot band.\n *\n * @type {Highcharts.EventCallbackFunction<Highcharts.PlotLineOrBand>}\n * @apioption xAxis.plotLines.events.mouseout\n */\n/**\n * Mouse over event on a plot band.\n *\n * @type {Highcharts.EventCallbackFunction<Highcharts.PlotLineOrBand>}\n * @apioption xAxis.plotLines.events.mouseover\n */\n/**\n * An id used for identifying the plot line in Axis.removePlotLine.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-id/\n * Remove plot line by id\n *\n * @type {string}\n * @apioption xAxis.plotLines.id\n */\n/**\n * The position of the line in axis units.\n *\n * On datetime axes, the value can be given as a timestamp or a date string.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-color/\n * Between two categories on X axis\n * @sample {highstock} stock/xaxis/plotlines/\n * Plot line on Y axis\n *\n * @type {number|string}\n * @apioption xAxis.plotLines.value\n */\n/**\n * The width or thickness of the plot line.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-color/\n * 2px wide line from X axis\n * @sample {highstock} stock/xaxis/plotlines/\n * Plot line on Y axis\n *\n * @type {number}\n * @default 2\n * @apioption xAxis.plotLines.width\n */\n/**\n * The z index of the plot line within the chart.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-zindex-behind/\n * Behind plot lines by default\n * @sample {highcharts} highcharts/xaxis/plotlines-zindex-above/\n * Above plot lines\n * @sample {highcharts} highcharts/xaxis/plotlines-zindex-above-all/\n * Above plot lines and series\n *\n * @type {number}\n * @since 1.2\n * @apioption xAxis.plotLines.zIndex\n */\n/**\n * Text labels for the plot bands\n *\n * @apioption xAxis.plotLines.label\n */\n/**\n * Horizontal alignment of the label. Can be one of \"left\", \"center\" or\n * \"right\".\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-label-align-right/\n * Aligned to the right\n * @sample {highstock} stock/xaxis/plotlines/\n * Plot line on Y axis\n *\n * @type {Highcharts.AlignValue}\n * @default left\n * @since 2.1\n * @apioption xAxis.plotLines.label.align\n */\n/**\n * Whether to hide labels that are outside the plot area.\n *\n * @type {boolean}\n * @default false\n * @since 10.3.3\n * @apioption xAxis.plotLines.labels.clip\n */\n/**\n * Callback JavaScript function to format the label. Useful properties like\n * the value of plot line or the range of plot band (`from` & `to`\n * properties) can be found in `this.options` object.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-plotbands-label-formatter\n * Label formatters for plot line and plot band.\n * @type {Highcharts.FormatterCallbackFunction<Highcharts.PlotLineOrBand>}\n * @apioption xAxis.plotLines.label.formatter\n */\n/**\n * Rotation of the text label in degrees. Defaults to 0 for horizontal plot\n * lines and 90 for vertical lines.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-label-verticalalign-middle/\n * Slanted text\n *\n * @type {number}\n * @since 2.1\n * @apioption xAxis.plotLines.label.rotation\n */\n/**\n * CSS styles for the text label.\n *\n * In styled mode, the labels are styled by the\n * `.highcharts-plot-line-label` class.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-label-style/\n * Blue and bold label\n *\n * @type {Highcharts.CSSObject}\n * @since 2.1\n * @apioption xAxis.plotLines.label.style\n */\n/**\n * The text itself. A subset of HTML is supported.\n *\n * @type {string}\n * @since 2.1\n * @apioption xAxis.plotLines.label.text\n */\n/**\n * The text alignment for the label. While `align` determines where the\n * texts anchor point is placed within the plot band, `textAlign` determines\n * how the text is aligned against its anchor point. Possible values are\n * \"left\", \"center\" and \"right\". Defaults to the same as the `align` option.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-label-textalign/\n * Text label in bottom position\n *\n * @type {Highcharts.AlignValue}\n * @since 2.1\n * @apioption xAxis.plotLines.label.textAlign\n */\n/**\n * Whether to [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n * to render the labels.\n *\n * @type {boolean}\n * @default false\n * @since 3.0.3\n * @apioption xAxis.plotLines.label.useHTML\n */\n/**\n * Vertical alignment of the label relative to the plot line. Can be\n * one of \"top\", \"middle\" or \"bottom\".\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-label-verticalalign-middle/\n * Vertically centered label\n *\n * @type {Highcharts.VerticalAlignValue}\n * @default {highcharts} top\n * @default {highstock} top\n * @since 2.1\n * @apioption xAxis.plotLines.label.verticalAlign\n */\n/**\n * Horizontal position relative the alignment. Default varies by\n * orientation.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-label-align-right/\n * Aligned 10px from the right edge\n * @sample {highstock} stock/xaxis/plotlines/\n * Plot line on Y axis\n *\n * @type {number}\n * @since 2.1\n * @apioption xAxis.plotLines.label.x\n */\n/**\n * Vertical position of the text baseline relative to the alignment. Default\n * varies by orientation.\n *\n * @sample {highcharts} highcharts/xaxis/plotlines-label-y/\n * Label below the plot line\n * @sample {highstock} stock/xaxis/plotlines/\n * Plot line on Y axis\n *\n * @type {number}\n * @since 2.1\n * @apioption xAxis.plotLines.label.y\n */\n/**\n * @type {Array<*>}\n * @extends xAxis.plotBands\n * @apioption yAxis.plotBands\n */\n/**\n * In a gauge chart, this option determines the inner radius of the\n * plot band that stretches along the perimeter. It can be given as\n * a percentage string, like `\"100%\"`, or as a pixel number, like `100`.\n * By default, the inner radius is controlled by the [thickness](\n * #yAxis.plotBands.thickness) option.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-gauge\n * Gauge plot band\n *\n * @type {number|string}\n * @since 2.3\n * @product highcharts\n * @apioption yAxis.plotBands.innerRadius\n */\n/**\n * In a gauge chart, this option determines the outer radius of the\n * plot band that stretches along the perimeter. It can be given as\n * a percentage string, like `\"100%\"`, or as a pixel number, like `100`.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-gauge\n * Gauge plot band\n *\n * @type {number|string}\n * @default 100%\n * @since 2.3\n * @product highcharts\n * @apioption yAxis.plotBands.outerRadius\n */\n/**\n * In a gauge chart, this option sets the width of the plot band\n * stretching along the perimeter. It can be given as a percentage\n * string, like `\"10%\"`, or as a pixel number, like `10`. The default\n * value 10 is the same as the default [tickLength](#yAxis.tickLength),\n * thus making the plot band act as a background for the tick markers.\n *\n * @sample {highcharts} highcharts/xaxis/plotbands-gauge\n * Gauge plot band\n *\n * @type {number|string}\n * @default 10\n * @since 2.3\n * @product highcharts\n * @apioption yAxis.plotBands.thickness\n */\n/**\n * @type {Array<*>}\n * @extends xAxis.plotLines\n * @apioption yAxis.plotLines\n */\n(''); // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Tooltip.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar Tooltip_animObject = AnimationUtilities.animObject;\n\nvar Tooltip_format = Core_Templating.format;\n\nvar Tooltip_composed = Core_Globals.composed, dateFormats = Core_Globals.dateFormats, Tooltip_doc = Core_Globals.doc, isSafari = Core_Globals.isSafari;\n\nvar distribute = Renderer_RendererUtilities.distribute;\n\n\nvar Tooltip_addEvent = Core_Utilities.addEvent, Tooltip_clamp = Core_Utilities.clamp, Tooltip_css = Core_Utilities.css, Tooltip_discardElement = Core_Utilities.discardElement, Tooltip_extend = Core_Utilities.extend, Tooltip_fireEvent = Core_Utilities.fireEvent, Tooltip_isArray = Core_Utilities.isArray, Tooltip_isNumber = Core_Utilities.isNumber, Tooltip_isObject = Core_Utilities.isObject, Tooltip_isString = Core_Utilities.isString, Tooltip_merge = Core_Utilities.merge, Tooltip_pick = Core_Utilities.pick, Tooltip_pushUnique = Core_Utilities.pushUnique, Tooltip_splat = Core_Utilities.splat, Tooltip_syncTimeout = Core_Utilities.syncTimeout;\n/* *\n *\n * Class\n *\n * */\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/**\n * Tooltip of a chart.\n *\n * @class\n * @name Highcharts.Tooltip\n *\n * @param {Highcharts.Chart} chart\n * The chart instance.\n *\n * @param {Highcharts.TooltipOptions} options\n * Tooltip options.\n *\n * @param {Highcharts.Pointer} pointer\n * The pointer instance.\n */\nvar Tooltip = /** @class */ (function () {\n /* *\n *\n * Constructors\n *\n * */\n function Tooltip(chart, options, pointer) {\n /* *\n *\n * Properties\n *\n * */\n this.allowShared = true;\n this.crosshairs = [];\n this.distance = 0;\n this.isHidden = true;\n this.isSticky = false;\n this.options = {};\n this.outside = false;\n this.chart = chart;\n this.init(chart, options);\n this.pointer = pointer;\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Build the body (lines) of the tooltip by iterating over the items and\n * returning one entry for each item, abstracting this functionality allows\n * to easily overwrite and extend it.\n *\n * @private\n * @function Highcharts.Tooltip#bodyFormatter\n */\n Tooltip.prototype.bodyFormatter = function (points) {\n return points.map(function (point) {\n var tooltipOptions = point.series.tooltipOptions,\n formatPrefix = point.formatPrefix || 'point';\n return (tooltipOptions[formatPrefix + 'Formatter'] ||\n point.tooltipFormatter).call(point, tooltipOptions[formatPrefix + 'Format'] || '');\n });\n };\n /**\n * Destroy the single tooltips in a split tooltip.\n * If the tooltip is active then it is not destroyed, unless forced to.\n *\n * @private\n * @function Highcharts.Tooltip#cleanSplit\n *\n * @param {boolean} [force]\n * Force destroy all tooltips.\n */\n Tooltip.prototype.cleanSplit = function (force) {\n this.chart.series.forEach(function (series) {\n var tt = series && series.tt;\n if (tt) {\n if (!tt.isActive || force) {\n series.tt = tt.destroy();\n }\n else {\n tt.isActive = false;\n }\n }\n });\n };\n /**\n * In case no user defined formatter is given, this will be used. Note that\n * the context here is an object holding point, series, x, y etc.\n *\n * @function Highcharts.Tooltip#defaultFormatter\n *\n * @param {Highcharts.Tooltip} tooltip\n *\n * @return {string|Array<string>}\n * Returns a string (single tooltip and shared)\n * or an array of strings (split tooltip)\n */\n Tooltip.prototype.defaultFormatter = function (tooltip) {\n var hoverPoints = this.points || Tooltip_splat(this);\n var s;\n // Build the header\n s = [tooltip.headerFooterFormatter(hoverPoints[0])];\n // Build the values\n s = s.concat(tooltip.bodyFormatter(hoverPoints));\n // Footer\n s.push(tooltip.headerFooterFormatter(hoverPoints[0], true));\n return s;\n };\n /**\n * Removes and destroys the tooltip and its elements.\n *\n * @function Highcharts.Tooltip#destroy\n */\n Tooltip.prototype.destroy = function () {\n // Destroy and clear local variables\n if (this.label) {\n this.label = this.label.destroy();\n }\n if (this.split) {\n this.cleanSplit(true);\n if (this.tt) {\n this.tt = this.tt.destroy();\n }\n }\n if (this.renderer) {\n this.renderer = this.renderer.destroy();\n Tooltip_discardElement(this.container);\n }\n Core_Utilities.clearTimeout(this.hideTimer);\n };\n /**\n * Extendable method to get the anchor position of the tooltip\n * from a point or set of points\n *\n * @private\n * @function Highcharts.Tooltip#getAnchor\n */\n Tooltip.prototype.getAnchor = function (points, mouseEvent) {\n var _a = this,\n chart = _a.chart,\n pointer = _a.pointer,\n inverted = chart.inverted,\n plotTop = chart.plotTop,\n plotLeft = chart.plotLeft;\n var ret;\n points = Tooltip_splat(points);\n // If reversedStacks are false the tooltip position should be taken from\n // the last point (#17948)\n if (points[0].series &&\n points[0].series.yAxis &&\n !points[0].series.yAxis.options.reversedStacks) {\n points = points.slice().reverse();\n }\n // When tooltip follows mouse, relate the position to the mouse\n if (this.followPointer && mouseEvent) {\n if (typeof mouseEvent.chartX === 'undefined') {\n mouseEvent = pointer.normalize(mouseEvent);\n }\n ret = [\n mouseEvent.chartX - plotLeft,\n mouseEvent.chartY - plotTop\n ];\n // Some series types use a specificly calculated tooltip position for\n // each point\n }\n else if (points[0].tooltipPos) {\n ret = points[0].tooltipPos;\n // Calculate the average position and adjust for axis positions\n }\n else {\n var chartX_1 = 0,\n chartY_1 = 0;\n points.forEach(function (point) {\n var pos = point.pos(true);\n if (pos) {\n chartX_1 += pos[0];\n chartY_1 += pos[1];\n }\n });\n chartX_1 /= points.length;\n chartY_1 /= points.length;\n // When shared, place the tooltip next to the mouse (#424)\n if (this.shared && points.length > 1 && mouseEvent) {\n if (inverted) {\n chartX_1 = mouseEvent.chartX;\n }\n else {\n chartY_1 = mouseEvent.chartY;\n }\n }\n // Use the average position for multiple points\n ret = [chartX_1 - plotLeft, chartY_1 - plotTop];\n }\n return ret.map(Math.round);\n };\n /**\n * Get the CSS class names for the tooltip's label. Styles the label\n * by `colorIndex` or user-defined CSS.\n *\n * @function Highcharts.Tooltip#getClassName\n *\n * @return {string}\n * The class names.\n */\n Tooltip.prototype.getClassName = function (point, isSplit, isHeader) {\n var options = this.options,\n series = point.series,\n seriesOptions = series.options;\n return [\n options.className,\n 'highcharts-label',\n isHeader && 'highcharts-tooltip-header',\n isSplit ? 'highcharts-tooltip-box' : 'highcharts-tooltip',\n !isHeader && 'highcharts-color-' + Tooltip_pick(point.colorIndex, series.colorIndex),\n (seriesOptions && seriesOptions.className)\n ].filter(Tooltip_isString).join(' ');\n };\n /**\n * Creates the Tooltip label element if it does not exist, then returns it.\n *\n * @function Highcharts.Tooltip#getLabel\n *\n * @return {Highcharts.SVGElement}\n * Tooltip label\n */\n Tooltip.prototype.getLabel = function (_a) {\n var _b = _a === void 0 ? { anchorX: 0,\n anchorY: 0 } : _a,\n anchorX = _b.anchorX,\n anchorY = _b.anchorY;\n var tooltip = this,\n styledMode = this.chart.styledMode,\n options = this.options,\n doSplit = this.split && this.allowShared;\n var container = this.container,\n renderer = this.chart.renderer;\n // If changing from a split tooltip to a non-split tooltip, we must\n // destroy it in order to get the SVG right. #13868.\n if (this.label) {\n var wasSplit = !this.label.hasClass('highcharts-label');\n if ((!doSplit && wasSplit) || (doSplit && !wasSplit)) {\n this.destroy();\n }\n }\n if (!this.label) {\n if (this.outside) {\n var chart = this.chart,\n chartStyle = chart.options.chart.style,\n Renderer = Renderer_RendererRegistry.getRendererType();\n /**\n * Reference to the tooltip's container, when\n * [Highcharts.Tooltip#outside] is set to true, otherwise\n * it's undefined.\n *\n * @name Highcharts.Tooltip#container\n * @type {Highcharts.HTMLDOMElement|undefined}\n */\n this.container = container = Core_Globals.doc.createElement('div');\n container.className = ('highcharts-tooltip-container ' +\n (chart.renderTo.className.match(/(highcharts[a-zA-Z0-9-]+)\\s?/gm) || [].join(' ')));\n // We need to set pointerEvents = 'none' as otherwise it makes\n // the area under the tooltip non-hoverable even after the\n // tooltip disappears, #19035.\n Tooltip_css(container, {\n position: 'absolute',\n top: '1px',\n pointerEvents: 'none',\n zIndex: Math.max(this.options.style.zIndex || 0, (chartStyle && chartStyle.zIndex || 0) + 3)\n });\n /**\n * Reference to the tooltip's renderer, when\n * [Highcharts.Tooltip#outside] is set to true, otherwise\n * it's undefined.\n *\n * @name Highcharts.Tooltip#renderer\n * @type {Highcharts.SVGRenderer|undefined}\n */\n this.renderer = renderer = new Renderer(container, 0, 0, chartStyle, void 0, void 0, renderer.styledMode);\n }\n // Create the label\n if (doSplit) {\n this.label = renderer.g('tooltip');\n }\n else {\n this.label = renderer\n .label('', anchorX, anchorY, options.shape, void 0, void 0, options.useHTML, void 0, 'tooltip')\n .attr({\n padding: options.padding,\n r: options.borderRadius\n });\n if (!styledMode) {\n this.label\n .attr({\n fill: options.backgroundColor,\n 'stroke-width': options.borderWidth || 0\n })\n // #2301, #2657\n .css(options.style)\n .css({\n pointerEvents: (options.style.pointerEvents ||\n (this.shouldStickOnContact() ? 'auto' : 'none'))\n });\n }\n }\n // Split tooltip use updateTooltipContainer to position the tooltip\n // container.\n if (tooltip.outside) {\n var label_1 = this.label;\n [label_1.xSetter, label_1.ySetter].forEach(function (setter, i) {\n label_1[i ? 'ySetter' : 'xSetter'] = function (value) {\n setter.call(label_1, tooltip.distance);\n label_1[i ? 'y' : 'x'] = value;\n if (container) {\n container.style[i ? 'top' : 'left'] = \"\" + value + \"px\";\n }\n };\n });\n }\n this.label\n .attr({ zIndex: 8 })\n .shadow(options.shadow)\n .add();\n }\n if (container && !container.parentElement) {\n Core_Globals.doc.body.appendChild(container);\n }\n return this.label;\n };\n /**\n * Get the total area available area to place the tooltip\n *\n * @private\n */\n Tooltip.prototype.getPlayingField = function () {\n var body = Tooltip_doc.body,\n documentElement = Tooltip_doc.documentElement,\n _a = this,\n chart = _a.chart,\n distance = _a.distance,\n outside = _a.outside;\n return {\n width: outside ?\n // Subtract distance to prevent scrollbars\n Math.max(body.scrollWidth, documentElement.scrollWidth, body.offsetWidth, documentElement.offsetWidth, documentElement.clientWidth) - (2 * distance) - 2 :\n chart.chartWidth,\n height: outside ?\n Math.max(body.scrollHeight, documentElement.scrollHeight, body.offsetHeight, documentElement.offsetHeight, documentElement.clientHeight) :\n chart.chartHeight\n };\n };\n /**\n * Place the tooltip in a chart without spilling over and not covering the\n * point itself.\n *\n * @function Highcharts.Tooltip#getPosition\n *\n * @param {number} boxWidth\n * Width of the tooltip box.\n *\n * @param {number} boxHeight\n * Height of the tooltip box.\n *\n * @param {Highcharts.Point} point\n * Tooltip related point.\n *\n * @return {Highcharts.PositionObject}\n * Recommended position of the tooltip.\n */\n Tooltip.prototype.getPosition = function (boxWidth, boxHeight, point) {\n var _a,\n _b;\n var _c = this, distance = _c.distance, chart = _c.chart, outside = _c.outside, pointer = _c.pointer, inverted = chart.inverted, plotLeft = chart.plotLeft, plotTop = chart.plotTop, polar = chart.polar, _d = point.plotX, plotX = _d === void 0 ? 0 : _d, _e = point.plotY, plotY = _e === void 0 ? 0 : _e, ret = {}, \n // Don't use h if chart isn't inverted (#7242) ???\n h = (inverted && point.h) || 0, // #4117 ???\n _f = this.getPlayingField(), outerHeight = _f.height, outerWidth = _f.width, chartPosition = pointer.getChartPosition(), scaleX = function (val) { return (val * chartPosition.scaleX); }, scaleY = function (val) { return (val * chartPosition.scaleY); }, \n // Build parameter arrays for firstDimension()/secondDimension()\n buildDimensionArray = function (dim) {\n var isX = dim === 'x';\n return [\n dim, // Dimension - x or y\n isX ? outerWidth : outerHeight,\n isX ? boxWidth : boxHeight\n ].concat(outside ? [\n // If we are using tooltip.outside, we need to scale the\n // position to match scaling of the container in case there\n // is a transform/zoom on the container. #11329\n isX ? scaleX(boxWidth) : scaleY(boxHeight),\n isX ? chartPosition.left - distance +\n scaleX(plotX + plotLeft) :\n chartPosition.top - distance +\n scaleY(plotY + plotTop),\n 0,\n isX ? outerWidth : outerHeight\n ] : [\n // Not outside, no scaling is needed\n isX ? boxWidth : boxHeight,\n isX ? plotX + plotLeft : plotY + plotTop,\n isX ? plotLeft : plotTop,\n isX ? plotLeft + chart.plotWidth :\n plotTop + chart.plotHeight\n ]);\n };\n var first = buildDimensionArray('y'), second = buildDimensionArray('x'), swapped;\n // Handle negative points or reversed axis (#13780)\n var flipped = !!point.negative;\n if (!polar &&\n ((_b = (_a = chart.hoverSeries) === null || _a === void 0 ? void 0 : _a.yAxis) === null || _b === void 0 ? void 0 : _b.reversed)) {\n flipped = !flipped;\n }\n // The far side is right or bottom\n var preferFarSide = !this.followPointer &&\n Tooltip_pick(point.ttBelow,\n polar ? false : !inverted === flipped), // #4984\n /*\n * Handle the preferred dimension. When the preferred dimension is\n * tooltip on top or bottom of the point,\n it will look for space\n * there.\n *\n * @private\n */\n firstDimension = function (dim,\n outerSize,\n innerSize,\n scaledInnerSize, // #11329\n point,\n min,\n max) {\n var scaledDist = outside ?\n (dim === 'y' ? scaleY(distance) : scaleX(distance)) :\n distance,\n scaleDiff = (innerSize - scaledInnerSize) / 2,\n roomLeft = scaledInnerSize < point - distance,\n roomRight = point + distance + scaledInnerSize < outerSize,\n alignedLeft = point - scaledDist - innerSize + scaleDiff,\n alignedRight = point + scaledDist - scaleDiff;\n if (preferFarSide && roomRight) {\n ret[dim] = alignedRight;\n }\n else if (!preferFarSide && roomLeft) {\n ret[dim] = alignedLeft;\n }\n else if (roomLeft) {\n ret[dim] = Math.min(max - scaledInnerSize, alignedLeft - h < 0 ? alignedLeft : alignedLeft - h);\n }\n else if (roomRight) {\n ret[dim] = Math.max(min, alignedRight + h + innerSize > outerSize ?\n alignedRight :\n alignedRight + h);\n }\n else {\n return false;\n }\n }, \n /*\n * Handle the secondary dimension. If the preferred dimension is\n * tooltip on top or bottom of the point, the second dimension is to\n * align the tooltip above the point, trying to align center but\n * allowing left or right align within the chart box.\n *\n * @private\n */\n secondDimension = function (dim, outerSize, innerSize, scaledInnerSize, // #11329\n point) {\n // Too close to the edge, return false and swap dimensions\n if (point < distance || point > outerSize - distance) {\n return false;\n }\n // Align left/top\n if (point < innerSize / 2) {\n ret[dim] = 1;\n // Align right/bottom\n }\n else if (point > outerSize - scaledInnerSize / 2) {\n ret[dim] = outerSize - scaledInnerSize - 2;\n // Align center\n }\n else {\n ret[dim] = point - innerSize / 2;\n }\n }, \n /*\n * Swap the dimensions\n */\n swap = function (count) {\n var _a;\n _a = [second, first], first = _a[0], second = _a[1];\n swapped = count;\n }, run = function () {\n if (firstDimension.apply(0, first) !== false) {\n if (secondDimension.apply(0, second) === false &&\n !swapped) {\n swap(true);\n run();\n }\n }\n else if (!swapped) {\n swap(true);\n run();\n }\n else {\n ret.x = ret.y = 0;\n }\n };\n // Under these conditions, prefer the tooltip on the side of the point\n if ((inverted && !polar) || this.len > 1) {\n swap();\n }\n run();\n return ret;\n };\n /**\n * Hides the tooltip with a fade out animation.\n *\n * @function Highcharts.Tooltip#hide\n *\n * @param {number} [delay]\n * The fade out in milliseconds. If no value is provided the value\n * of the tooltip.hideDelay option is used. A value of 0 disables\n * the fade out animation.\n */\n Tooltip.prototype.hide = function (delay) {\n var tooltip = this;\n // Disallow duplicate timers (#1728, #1766)\n Core_Utilities.clearTimeout(this.hideTimer);\n delay = Tooltip_pick(delay, this.options.hideDelay);\n if (!this.isHidden) {\n this.hideTimer = Tooltip_syncTimeout(function () {\n var label = tooltip.getLabel();\n // If there is a delay, fade out with the default duration. If\n // the hideDelay is 0, we assume no animation is wanted, so we\n // pass 0 duration. #12994.\n tooltip.getLabel().animate({\n opacity: 0\n }, {\n duration: delay ? 150 : delay,\n complete: function () {\n // #3088, assuming we're only using this for tooltips\n label.hide();\n // Clear the container for outside tooltip (#18490)\n if (tooltip.container) {\n tooltip.container.remove();\n }\n }\n });\n tooltip.isHidden = true;\n }, delay);\n }\n };\n /**\n * Initialize tooltip.\n *\n * @private\n * @function Highcharts.Tooltip#init\n *\n * @param {Highcharts.Chart} chart\n * The chart instance.\n *\n * @param {Highcharts.TooltipOptions} options\n * Tooltip options.\n */\n Tooltip.prototype.init = function (chart, options) {\n /**\n * Chart of the tooltip.\n *\n * @readonly\n * @name Highcharts.Tooltip#chart\n * @type {Highcharts.Chart}\n */\n this.chart = chart;\n /**\n * Used tooltip options.\n *\n * @readonly\n * @name Highcharts.Tooltip#options\n * @type {Highcharts.TooltipOptions}\n */\n this.options = options;\n /**\n * List of crosshairs.\n *\n * @private\n * @readonly\n * @name Highcharts.Tooltip#crosshairs\n * @type {Array<null>}\n */\n this.crosshairs = [];\n /**\n * Tooltips are initially hidden.\n *\n * @private\n * @readonly\n * @name Highcharts.Tooltip#isHidden\n * @type {boolean}\n */\n this.isHidden = true;\n /**\n * True, if the tooltip is split into one label per series, with the\n * header close to the axis.\n *\n * @readonly\n * @name Highcharts.Tooltip#split\n * @type {boolean|undefined}\n */\n this.split = options.split && !chart.inverted && !chart.polar;\n /**\n * When the tooltip is shared, the entire plot area will capture mouse\n * movement or touch events.\n *\n * @readonly\n * @name Highcharts.Tooltip#shared\n * @type {boolean|undefined}\n */\n this.shared = options.shared || this.split;\n /**\n * Whether to allow the tooltip to render outside the chart's SVG\n * element box. By default (false), the tooltip is rendered within the\n * chart's SVG element, which results in the tooltip being aligned\n * inside the chart area.\n *\n * @readonly\n * @name Highcharts.Tooltip#outside\n * @type {boolean}\n *\n * @todo\n * Split tooltip does not support outside in the first iteration. Should\n * not be too complicated to implement.\n */\n this.outside = Tooltip_pick(options.outside, Boolean(chart.scrollablePixelsX || chart.scrollablePixelsY));\n };\n Tooltip.prototype.shouldStickOnContact = function (pointerEvent) {\n return !!(!this.followPointer &&\n this.options.stickOnContact &&\n (!pointerEvent || this.pointer.inClass(pointerEvent.target, 'highcharts-tooltip')));\n };\n /**\n * Moves the tooltip with a soft animation to a new position.\n *\n * @private\n * @function Highcharts.Tooltip#move\n *\n * @param {number} x\n *\n * @param {number} y\n *\n * @param {number} anchorX\n *\n * @param {number} anchorY\n */\n Tooltip.prototype.move = function (x, y, anchorX, anchorY) {\n var tooltip = this,\n animation = Tooltip_animObject(!tooltip.isHidden && tooltip.options.animation),\n skipAnchor = tooltip.followPointer || (tooltip.len || 0) > 1,\n attr = { x: x,\n y: y };\n if (!skipAnchor) {\n attr.anchorX = anchorX;\n attr.anchorY = anchorY;\n }\n animation.step = function () { return tooltip.drawTracker(); };\n tooltip.getLabel().animate(attr, animation);\n };\n /**\n * Refresh the tooltip's text and position.\n *\n * @function Highcharts.Tooltip#refresh\n *\n * @param {Highcharts.Point|Array<Highcharts.Point>} pointOrPoints\n * Either a point or an array of points.\n *\n * @param {Highcharts.PointerEventObject} [mouseEvent]\n * Mouse event, that is responsible for the refresh and should be\n * used for the tooltip update.\n */\n Tooltip.prototype.refresh = function (pointOrPoints, mouseEvent) {\n var tooltip = this,\n _a = this,\n chart = _a.chart,\n options = _a.options,\n pointer = _a.pointer,\n shared = _a.shared,\n points = Tooltip_splat(pointOrPoints),\n point = points[0],\n formatString = options.format,\n formatter = options.formatter || tooltip.defaultFormatter,\n styledMode = chart.styledMode;\n var wasShared = tooltip.allowShared;\n if (!options.enabled || !point.series) { // #16820\n return;\n }\n Core_Utilities.clearTimeout(this.hideTimer);\n // A switch saying if this specific tooltip configuration allows shared\n // or split modes\n tooltip.allowShared = !(!Tooltip_isArray(pointOrPoints) &&\n pointOrPoints.series &&\n pointOrPoints.series.noSharedTooltip);\n wasShared = wasShared && !tooltip.allowShared;\n // Get the reference point coordinates (pie charts use tooltipPos)\n tooltip.followPointer = (!tooltip.split && point.series.tooltipOptions.followPointer);\n var anchor = tooltip.getAnchor(pointOrPoints,\n mouseEvent),\n x = anchor[0],\n y = anchor[1];\n // Shared tooltip, array is sent over\n if (shared && tooltip.allowShared) {\n pointer.applyInactiveState(points);\n // Now set hover state for the chosen ones:\n points.forEach(function (item) { return item.setState('hover'); });\n point.points = points;\n }\n this.len = points.length; // #6128\n var text = Tooltip_isString(formatString) ?\n Tooltip_format(formatString,\n point,\n chart) :\n formatter.call(point,\n tooltip);\n // Reset the preliminary circular references\n point.points = void 0;\n // Register the current series\n var currentSeries = point.series;\n this.distance = Tooltip_pick(currentSeries.tooltipOptions.distance, 16);\n // Update the inner HTML\n if (text === false) {\n this.hide();\n }\n else {\n // Update text\n if (tooltip.split && tooltip.allowShared) { // #13868\n this.renderSplit(text, points);\n }\n else {\n var checkX_1 = x;\n var checkY_1 = y;\n if (mouseEvent && pointer.isDirectTouch) {\n checkX_1 = mouseEvent.chartX - chart.plotLeft;\n checkY_1 = mouseEvent.chartY - chart.plotTop;\n }\n // #11493, #13095\n if (chart.polar ||\n currentSeries.options.clip === false ||\n points.some(function (p) {\n return pointer.isDirectTouch || // ##17929\n p.series.shouldShowTooltip(checkX_1, checkY_1);\n })) {\n var label = tooltip.getLabel(wasShared && tooltip.tt || {});\n // Prevent the tooltip from flowing over the chart box\n // (#6659)\n if (!options.style.width || styledMode) {\n label.css({\n width: (this.outside ?\n this.getPlayingField() :\n chart.spacingBox).width + 'px'\n });\n }\n label.attr({\n // Add class before the label BBox calculation (#21035)\n 'class': tooltip.getClassName(point),\n text: text && text.join ?\n text.join('') :\n text\n });\n // When the length of the label has increased, immediately\n // update the x position to prevent tooltip from flowing\n // outside the viewport during animation (#21371)\n if (this.outside) {\n label.attr({\n x: Tooltip_clamp(label.x || 0, 0, this.getPlayingField().width -\n (label.width || 0) -\n 1)\n });\n }\n if (!styledMode) {\n label.attr({\n stroke: (options.borderColor ||\n point.color ||\n currentSeries.color ||\n \"#666666\" /* Palette.neutralColor60 */)\n });\n }\n tooltip.updatePosition({\n plotX: x,\n plotY: y,\n negative: point.negative,\n ttBelow: point.ttBelow,\n h: anchor[2] || 0\n });\n }\n else {\n tooltip.hide();\n return;\n }\n }\n // Show it\n if (tooltip.isHidden && tooltip.label) {\n tooltip.label.attr({\n opacity: 1\n }).show();\n }\n tooltip.isHidden = false;\n }\n Tooltip_fireEvent(this, 'refresh');\n };\n /**\n * Render the split tooltip. Loops over each point's text and adds\n * a label next to the point, then uses the distribute function to\n * find best non-overlapping positions.\n *\n * @private\n * @function Highcharts.Tooltip#renderSplit\n *\n * @param {string|Array<(boolean|string)>} labels\n *\n * @param {Array<Highcharts.Point>} points\n */\n Tooltip.prototype.renderSplit = function (labels, points) {\n var _a;\n var tooltip = this;\n var chart = tooltip.chart,\n _b = tooltip.chart,\n chartWidth = _b.chartWidth,\n chartHeight = _b.chartHeight,\n plotHeight = _b.plotHeight,\n plotLeft = _b.plotLeft,\n plotTop = _b.plotTop,\n _c = _b.scrollablePixelsY,\n scrollablePixelsY = _c === void 0 ? 0 : _c,\n scrollablePixelsX = _b.scrollablePixelsX,\n styledMode = _b.styledMode,\n distance = tooltip.distance,\n options = tooltip.options,\n positioner = tooltip.options.positioner,\n pointer = tooltip.pointer;\n var _d = ((_a = chart.scrollablePlotArea) === null || _a === void 0 ? void 0 : _a.scrollingContainer) || {},\n _e = _d.scrollLeft,\n scrollLeft = _e === void 0 ? 0 : _e,\n _f = _d.scrollTop,\n scrollTop = _f === void 0 ? 0 : _f;\n // The area which the tooltip should be limited to. Limit to scrollable\n // plot area if enabled, otherwise limit to the chart container. If\n // outside is true it should be the whole viewport\n var bounds = (tooltip.outside &&\n typeof scrollablePixelsX !== 'number') ?\n Tooltip_doc.documentElement.getBoundingClientRect() : {\n left: scrollLeft,\n right: scrollLeft + chartWidth,\n top: scrollTop,\n bottom: scrollTop + chartHeight\n };\n var tooltipLabel = tooltip.getLabel();\n var ren = this.renderer || chart.renderer;\n var headerTop = Boolean(chart.xAxis[0] && chart.xAxis[0].opposite);\n var _g = pointer.getChartPosition(),\n chartLeft = _g.left,\n chartTop = _g.top;\n var distributionBoxTop = plotTop + scrollTop;\n var headerHeight = 0;\n var adjustedPlotHeight = plotHeight - scrollablePixelsY;\n /**\n * Calculates the anchor position for the partial tooltip\n *\n * @private\n * @param {Highcharts.Point} point The point related to the tooltip\n * @return {Object} Returns an object with anchorX and anchorY\n */\n function getAnchor(point) {\n var isHeader = point.isHeader,\n _a = point.plotX,\n plotX = _a === void 0 ? 0 : _a,\n _b = point.plotY,\n plotY = _b === void 0 ? 0 : _b,\n series = point.series;\n var anchorX;\n var anchorY;\n if (isHeader) {\n // Set anchorX to plotX\n anchorX = Math.max(plotLeft + plotX, plotLeft);\n // Set anchorY to center of visible plot area.\n anchorY = plotTop + plotHeight / 2;\n }\n else {\n var xAxis = series.xAxis,\n yAxis = series.yAxis;\n // Set anchorX to plotX. Limit to within xAxis.\n anchorX = xAxis.pos + Tooltip_clamp(plotX, -distance, xAxis.len + distance);\n // Set anchorY, limit to the scrollable plot area\n if (series.shouldShowTooltip(0, yAxis.pos - plotTop + plotY, {\n ignoreX: true\n })) {\n anchorY = yAxis.pos + plotY;\n }\n }\n // Limit values to plot area\n anchorX = Tooltip_clamp(anchorX, bounds.left - distance, bounds.right + distance);\n return { anchorX: anchorX, anchorY: anchorY };\n }\n /**\n * Calculates the position of the partial tooltip\n *\n * @private\n * @param {number} anchorX\n * The partial tooltip anchor x position\n *\n * @param {number} anchorY\n * The partial tooltip anchor y position\n *\n * @param {boolean|undefined} isHeader\n * Whether the partial tooltip is a header\n *\n * @param {number} boxWidth\n * Width of the partial tooltip\n *\n * @return {Highcharts.PositionObject}\n * Returns the partial tooltip x and y position\n */\n function defaultPositioner(anchorX, anchorY, isHeader, boxWidth, alignedLeft) {\n if (alignedLeft === void 0) { alignedLeft = true; }\n var y;\n var x;\n if (isHeader) {\n y = headerTop ? 0 : adjustedPlotHeight;\n x = Tooltip_clamp(anchorX - (boxWidth / 2), bounds.left, bounds.right - boxWidth - (tooltip.outside ? chartLeft : 0));\n }\n else {\n y = anchorY - distributionBoxTop;\n x = alignedLeft ?\n anchorX - boxWidth - distance :\n anchorX + distance;\n x = Tooltip_clamp(x, alignedLeft ? x : bounds.left, bounds.right);\n }\n // NOTE: y is relative to distributionBoxTop\n return { x: x, y: y };\n }\n /**\n * Updates the attributes and styling of the partial tooltip. Creates a\n * new partial tooltip if it does not exists.\n *\n * @private\n * @param {Highcharts.SVGElement|undefined} partialTooltip\n * The partial tooltip to update\n * @param {Highcharts.Point} point\n * The point related to the partial tooltip\n * @param {boolean|string} str The text for the partial tooltip\n * @return {Highcharts.SVGElement} Returns the updated partial tooltip\n */\n function updatePartialTooltip(partialTooltip, point, str) {\n var _a;\n var tt = partialTooltip;\n var isHeader = point.isHeader,\n series = point.series;\n if (!tt) {\n var attribs = {\n padding: options.padding,\n r: options.borderRadius\n };\n if (!styledMode) {\n attribs.fill = options.backgroundColor;\n attribs['stroke-width'] = (_a = options.borderWidth) !== null && _a !== void 0 ? _a : 1;\n }\n tt = ren\n .label('', 0, 0, (options[isHeader ? 'headerShape' : 'shape']), void 0, void 0, options.useHTML)\n .addClass(tooltip.getClassName(point, true, isHeader))\n .attr(attribs)\n .add(tooltipLabel);\n }\n tt.isActive = true;\n tt.attr({\n text: str\n });\n if (!styledMode) {\n tt.css(options.style)\n .attr({\n stroke: (options.borderColor ||\n point.color ||\n series.color ||\n \"#333333\" /* Palette.neutralColor80 */)\n });\n }\n return tt;\n }\n // Graceful degradation for legacy formatters\n if (Tooltip_isString(labels)) {\n labels = [false, labels];\n }\n // Create the individual labels for header and points, ignore footer\n var boxes = labels.slice(0,\n points.length + 1).reduce(function (boxes,\n str,\n i) {\n if (str !== false && str !== '') {\n var point = (points[i - 1] ||\n {\n // Item 0 is the header. Instead of this, we could also\n // use the crosshair label\n isHeader: true,\n plotX: points[0].plotX,\n plotY: plotHeight,\n series: {}\n });\n var isHeader = point.isHeader;\n // Store the tooltip label reference on the series\n var owner = isHeader ? tooltip : point.series;\n var tt = owner.tt = updatePartialTooltip(owner.tt,\n point,\n str.toString());\n // Get X position now, so we can move all to the other side in\n // case of overflow\n var bBox = tt.getBBox();\n var boxWidth = bBox.width + tt.strokeWidth();\n if (isHeader) {\n headerHeight = bBox.height;\n adjustedPlotHeight += headerHeight;\n if (headerTop) {\n distributionBoxTop -= headerHeight;\n }\n }\n var _a = getAnchor(point),\n anchorX = _a.anchorX,\n anchorY = _a.anchorY;\n if (typeof anchorY === 'number') {\n var size = bBox.height + 1;\n var boxPosition = (positioner ?\n positioner.call(tooltip,\n boxWidth,\n size,\n point) :\n defaultPositioner(anchorX,\n anchorY,\n isHeader,\n boxWidth));\n boxes.push({\n // 0-align to the top, 1-align to the bottom\n align: positioner ? 0 : void 0,\n anchorX: anchorX,\n anchorY: anchorY,\n boxWidth: boxWidth,\n point: point,\n rank: Tooltip_pick(boxPosition.rank, isHeader ? 1 : 0),\n size: size,\n target: boxPosition.y,\n tt: tt,\n x: boxPosition.x\n });\n }\n else {\n // Hide tooltips which anchorY is outside the visible plot\n // area\n tt.isActive = false;\n }\n }\n return boxes;\n }, []);\n // Realign the tooltips towards the right if there is not enough space\n // to the left and there is space to the right\n if (!positioner && boxes.some(function (box) {\n // Always realign if the beginning of a label is outside bounds\n var outside = tooltip.outside;\n var boxStart = (outside ? chartLeft : 0) + box.anchorX;\n if (boxStart < bounds.left &&\n boxStart + box.boxWidth < bounds.right) {\n return true;\n }\n // Otherwise, check if there is more space available to the right\n return boxStart < (chartLeft - bounds.left) + box.boxWidth &&\n bounds.right - boxStart > boxStart;\n })) {\n boxes = boxes.map(function (box) {\n var _a = defaultPositioner(box.anchorX,\n box.anchorY,\n box.point.isHeader,\n box.boxWidth,\n false),\n x = _a.x,\n y = _a.y;\n return Tooltip_extend(box, {\n target: y,\n x: x\n });\n });\n }\n // Clean previous run (for missing points)\n tooltip.cleanSplit();\n // Distribute and put in place\n distribute(boxes, adjustedPlotHeight);\n var boxExtremes = {\n left: chartLeft,\n right: chartLeft\n };\n // Get the extremes from series tooltips\n boxes.forEach(function (box) {\n var x = box.x,\n boxWidth = box.boxWidth,\n isHeader = box.isHeader;\n if (!isHeader) {\n if (tooltip.outside && chartLeft + x < boxExtremes.left) {\n boxExtremes.left = chartLeft + x;\n }\n if (!isHeader &&\n tooltip.outside &&\n boxExtremes.left + boxWidth > boxExtremes.right) {\n boxExtremes.right = chartLeft + x;\n }\n }\n });\n boxes.forEach(function (box) {\n var x = box.x,\n anchorX = box.anchorX,\n anchorY = box.anchorY,\n pos = box.pos,\n isHeader = box.point.isHeader;\n var attributes = {\n visibility: typeof pos === 'undefined' ? 'hidden' : 'inherit',\n x: x,\n /* NOTE: y should equal pos to be consistent with !split\n * tooltip,\n but is currently relative to plotTop. Is left as is\n * to avoid breaking change. Remove distributionBoxTop to make\n * it consistent.\n */\n y: (pos || 0) + distributionBoxTop,\n anchorX: anchorX,\n anchorY: anchorY\n };\n // Handle left-aligned tooltips overflowing the chart area\n if (tooltip.outside && x < anchorX) {\n var offset = chartLeft - boxExtremes.left;\n // Skip this if there is no overflow\n if (offset > 0) {\n if (!isHeader) {\n attributes.x = x + offset;\n attributes.anchorX = anchorX + offset;\n }\n if (isHeader) {\n attributes.x = (boxExtremes.right - boxExtremes.left) / 2;\n attributes.anchorX = anchorX + offset;\n }\n }\n }\n // Put the label in place\n box.tt.attr(attributes);\n });\n /* If we have a separate tooltip container, then update the necessary\n * container properties.\n * Test that tooltip has its own container and renderer before executing\n * the operation.\n */\n var container = tooltip.container,\n outside = tooltip.outside,\n renderer = tooltip.renderer;\n if (outside && container && renderer) {\n // Set container size to fit the bounds\n var _h = tooltipLabel.getBBox(),\n width = _h.width,\n height = _h.height,\n x = _h.x,\n y = _h.y;\n renderer.setSize(width + x, height + y, false);\n // Position the tooltip container to the chart container\n container.style.left = boxExtremes.left + 'px';\n container.style.top = chartTop + 'px';\n }\n // Workaround for #18927, artefacts left by the shadows of split\n // tooltips in Safari v16 (2023). Check again with later versions if we\n // can remove this.\n if (isSafari) {\n tooltipLabel.attr({\n // Force a redraw of the whole group by chaining the opacity\n // slightly\n opacity: tooltipLabel.opacity === 1 ? 0.999 : 1\n });\n }\n };\n /**\n * If the `stickOnContact` option is active, this will add a tracker shape.\n *\n * @private\n * @function Highcharts.Tooltip#drawTracker\n */\n Tooltip.prototype.drawTracker = function () {\n var tooltip = this;\n if (!this.shouldStickOnContact()) {\n if (tooltip.tracker) {\n tooltip.tracker = tooltip.tracker.destroy();\n }\n return;\n }\n var chart = tooltip.chart;\n var label = tooltip.label;\n var points = tooltip.shared ? chart.hoverPoints : chart.hoverPoint;\n if (!label || !points) {\n return;\n }\n var box = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n // Combine anchor and tooltip\n var anchorPos = this.getAnchor(points);\n var labelBBox = label.getBBox();\n anchorPos[0] += chart.plotLeft - (label.translateX || 0);\n anchorPos[1] += chart.plotTop - (label.translateY || 0);\n // When the mouse pointer is between the anchor point and the label,\n // the label should stick.\n box.x = Math.min(0, anchorPos[0]);\n box.y = Math.min(0, anchorPos[1]);\n box.width = (anchorPos[0] < 0 ?\n Math.max(Math.abs(anchorPos[0]), labelBBox.width - anchorPos[0]) :\n Math.max(Math.abs(anchorPos[0]), labelBBox.width));\n box.height = (anchorPos[1] < 0 ?\n Math.max(Math.abs(anchorPos[1]), labelBBox.height - Math.abs(anchorPos[1])) :\n Math.max(Math.abs(anchorPos[1]), labelBBox.height));\n if (tooltip.tracker) {\n tooltip.tracker.attr(box);\n }\n else {\n tooltip.tracker = label.renderer\n .rect(box)\n .addClass('highcharts-tracker')\n .add(label);\n if (!chart.styledMode) {\n tooltip.tracker.attr({\n fill: 'rgba(0,0,0,0)'\n });\n }\n }\n };\n /**\n * @private\n */\n Tooltip.prototype.styledModeFormat = function (formatString) {\n return formatString\n .replace('style=\"font-size: 0.8em\"', 'class=\"highcharts-header\"')\n .replace(/style=\"color:{(point|series)\\.color}\"/g, 'class=\"highcharts-color-{$1.colorIndex} ' +\n '{series.options.className} ' +\n '{point.options.className}\"');\n };\n /**\n * Format the footer/header of the tooltip\n * #3397: abstraction to enable formatting of footer and header\n *\n * @private\n * @function Highcharts.Tooltip#headerFooterFormatter\n */\n Tooltip.prototype.headerFooterFormatter = function (point, isFooter) {\n var series = point.series,\n tooltipOptions = series.tooltipOptions,\n xAxis = series.xAxis,\n dateTime = xAxis && xAxis.dateTime,\n e = {\n isFooter: isFooter,\n point: point\n };\n var xDateFormat = tooltipOptions.xDateFormat || '', formatString = tooltipOptions[isFooter ? 'footerFormat' : 'headerFormat'];\n Tooltip_fireEvent(this, 'headerFormatter', e, function (e) {\n // Guess the best date format based on the closest point distance\n // (#568, #3418)\n if (dateTime && !xDateFormat && Tooltip_isNumber(point.key)) {\n xDateFormat = dateTime.getXDateFormat(point.key, tooltipOptions.dateTimeLabelFormats);\n }\n // Insert the footer date format if any\n if (dateTime && xDateFormat) {\n if (Tooltip_isObject(xDateFormat)) {\n var format_1 = xDateFormat;\n dateFormats[0] = function (timestamp) {\n return series.chart.time.dateFormat(format_1, timestamp);\n };\n xDateFormat = '%0';\n }\n (point.tooltipDateKeys || ['key']).forEach(function (key) {\n formatString = formatString.replace(new RegExp('point\\\\.' + key + '([ \\\\)}])', ''), \"(point.\".concat(key, \":\").concat(xDateFormat, \")$1\"));\n });\n }\n // Replace default header style with class name\n if (series.chart.styledMode) {\n formatString = this.styledModeFormat(formatString);\n }\n e.text = Tooltip_format(formatString, point, this.chart);\n });\n return e.text || '';\n };\n /**\n * Updates the tooltip with the provided tooltip options.\n *\n * @function Highcharts.Tooltip#update\n *\n * @param {Highcharts.TooltipOptions} options\n * The tooltip options to update.\n */\n Tooltip.prototype.update = function (options) {\n this.destroy();\n this.init(this.chart, Tooltip_merge(true, this.options, options));\n };\n /**\n * Find the new position and perform the move\n *\n * @private\n * @function Highcharts.Tooltip#updatePosition\n *\n * @param {Highcharts.Point} point\n */\n Tooltip.prototype.updatePosition = function (point) {\n var _a = this,\n chart = _a.chart,\n container = _a.container,\n distance = _a.distance,\n options = _a.options,\n pointer = _a.pointer,\n renderer = _a.renderer,\n _b = this.getLabel(),\n _c = _b.height,\n height = _c === void 0 ? 0 : _c,\n _d = _b.width,\n width = _d === void 0 ? 0 : _d, \n // Needed for outside: true (#11688)\n _e = pointer.getChartPosition(),\n left = _e.left,\n top = _e.top,\n scaleX = _e.scaleX,\n scaleY = _e.scaleY,\n pos = (options.positioner || this.getPosition).call(this,\n width,\n height,\n point),\n doc = Core_Globals.doc;\n var anchorX = (point.plotX || 0) + chart.plotLeft,\n anchorY = (point.plotY || 0) + chart.plotTop,\n pad;\n // Set the renderer size dynamically to prevent document size to change.\n // Renderer only exists when tooltip is outside.\n if (renderer && container) {\n // Corrects positions, occurs with tooltip positioner (#16944)\n if (options.positioner) {\n pos.x += left - distance;\n pos.y += top - distance;\n }\n // Pad it by the border width and distance. Add 2 to make room for\n // the default shadow (#19314).\n pad = (options.borderWidth || 0) + 2 * distance + 2;\n renderer.setSize(\n // Clamp width to keep tooltip in viewport (#21698)\n // and subtract one since tooltip container has 'left: 1px;'\n Tooltip_clamp(width + pad, 0, doc.documentElement.clientWidth) - 1, height + pad, false);\n // Anchor and tooltip container need scaling if chart container has\n // scale transform/css zoom. #11329.\n if (scaleX !== 1 || scaleY !== 1) {\n Tooltip_css(container, {\n transform: \"scale(\".concat(scaleX, \", \").concat(scaleY, \")\")\n });\n anchorX *= scaleX;\n anchorY *= scaleY;\n }\n anchorX += left - pos.x;\n anchorY += top - pos.y;\n }\n // Do the move\n this.move(Math.round(pos.x), Math.round(pos.y || 0), // Can be undefined (#3977)\n anchorX, anchorY);\n };\n return Tooltip;\n}());\n/* *\n *\n * Class namespace\n *\n * */\n(function (Tooltip) {\n /* *\n *\n * Declarations\n *\n * */\n /* *\n *\n * Functions\n *\n * */\n /**\n * @private\n */\n function compose(PointerClass) {\n if (Tooltip_pushUnique(Tooltip_composed, 'Core.Tooltip')) {\n Tooltip_addEvent(PointerClass, 'afterInit', function () {\n var chart = this.chart;\n if (chart.options.tooltip) {\n /**\n * Tooltip object for points of series.\n *\n * @name Highcharts.Chart#tooltip\n * @type {Highcharts.Tooltip}\n */\n chart.tooltip = new Tooltip(chart, chart.options.tooltip, this);\n }\n });\n }\n }\n Tooltip.compose = compose;\n})(Tooltip || (Tooltip = {}));\n/* *\n *\n * Default export\n *\n * */\n/* harmony default export */ var Core_Tooltip = (Tooltip);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Callback function to format the text of the tooltip from scratch.\n *\n * In case of single or shared tooltips, a string should be returned. In case\n * of split tooltips, it should return an array where the first item is the\n * header, and subsequent items are mapped to the points. Return `false` to\n * disable tooltip for a specific point on series.\n *\n * @callback Highcharts.TooltipFormatterCallbackFunction\n *\n * @param {Highcharts.Point} this\n * The formatter's context is the hovered `Point` instance. In case of shared or\n * split tooltips, all points are available in `this.points`.\n *\n * @param {Highcharts.Tooltip} tooltip\n * The tooltip instance\n *\n * @return {false|string|Array<(string|null|undefined)>|null|undefined}\n * Formatted text or false\n */\n/**\n * A callback function to place the tooltip in a specific position.\n *\n * @callback Highcharts.TooltipPositionerCallbackFunction\n *\n * @param {Highcharts.Tooltip} this\n * Tooltip context of the callback.\n *\n * @param {number} labelWidth\n * Width of the tooltip.\n *\n * @param {number} labelHeight\n * Height of the tooltip.\n *\n * @param {Highcharts.TooltipPositionerPointObject} point\n * Point information for positioning a tooltip.\n *\n * @return {Highcharts.PositionObject}\n * New position for the tooltip.\n */\n/**\n * Point information for positioning a tooltip.\n *\n * @interface Highcharts.TooltipPositionerPointObject\n * @extends Highcharts.Point\n */ /**\n* If `tooltip.split` option is enabled and positioner is called for each of the\n* boxes separately, this property indicates the call on the xAxis header, which\n* is not a point itself.\n* @name Highcharts.TooltipPositionerPointObject#isHeader\n* @type {boolean}\n*/ /**\n* The reference point relative to the plot area. Add chart.plotLeft to get the\n* full coordinates.\n* @name Highcharts.TooltipPositionerPointObject#plotX\n* @type {number}\n*/ /**\n* The reference point relative to the plot area. Add chart.plotTop to get the\n* full coordinates.\n* @name Highcharts.TooltipPositionerPointObject#plotY\n* @type {number}\n*/\n/**\n * @typedef {\"callout\"|\"circle\"|\"rect\"} Highcharts.TooltipShapeValue\n */\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Series/Point.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar Point_animObject = AnimationUtilities.animObject;\n\nvar Point_defaultOptions = Defaults.defaultOptions;\n\nvar Point_format = Core_Templating.format;\n\nvar Point_addEvent = Core_Utilities.addEvent, Point_crisp = Core_Utilities.crisp, Point_erase = Core_Utilities.erase, Point_extend = Core_Utilities.extend, Point_fireEvent = Core_Utilities.fireEvent, Point_getNestedProperty = Core_Utilities.getNestedProperty, Point_isArray = Core_Utilities.isArray, Point_isFunction = Core_Utilities.isFunction, Point_isNumber = Core_Utilities.isNumber, Point_isObject = Core_Utilities.isObject, Point_merge = Core_Utilities.merge, Point_pick = Core_Utilities.pick, Point_syncTimeout = Core_Utilities.syncTimeout, Point_removeEvent = Core_Utilities.removeEvent, Point_uniqueKey = Core_Utilities.uniqueKey;\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/* *\n *\n * Class\n *\n * */\n/**\n * The Point object. The point objects are generated from the `series.data`\n * configuration objects or raw numbers. They can be accessed from the\n * `Series.points` array. Other ways to instantiate points are through {@link\n * Highcharts.Series#addPoint} or {@link Highcharts.Series#setData}.\n *\n * @class\n * @name Highcharts.Point\n */\nvar Point = /** @class */ (function () {\n /**\n * Initialize the point. Called internally based on the `series.data`\n * option.\n *\n * @function Highcharts.Point#init\n *\n * @param {Highcharts.Series} series\n * The series object containing this point.\n *\n * @param {Highcharts.PointOptionsType} options\n * The data in either number, array or object format.\n *\n * @param {number} [x]\n * Optionally, the X value of the point.\n *\n * @return {Highcharts.Point}\n * The Point instance.\n *\n * @emits Highcharts.Point#event:afterInit\n */\n function Point(series, options, x) {\n var _a;\n this.formatPrefix = 'point';\n this.visible = true;\n // For tooltip and data label formatting\n this.point = this;\n this.series = series;\n this.applyOptions(options, x);\n // Add a unique ID to the point if none is assigned\n (_a = this.id) !== null && _a !== void 0 ? _a : (this.id = Point_uniqueKey());\n this.resolveColor();\n series.chart.pointCount++;\n Point_fireEvent(this, 'afterInit');\n }\n /**\n * For categorized axes this property holds the category name for the\n * point. For other axes it holds the X value.\n *\n * @name Highcharts.Point#category\n * @type {number|string}\n */\n /**\n * The name of the point. The name can be given as the first position of the\n * point configuration array, or as a `name` property in the configuration:\n *\n * @example\n * // Array config\n * data: [\n * ['John', 1],\n * ['Jane', 2]\n * ]\n *\n * // Object config\n * data: [{\n * name: 'John',\n * y: 1\n * }, {\n * name: 'Jane',\n * y: 2\n * }]\n *\n * @name Highcharts.Point#name\n * @type {string}\n */\n /**\n * The point's name if it is defined, or its category in case of a category,\n * otherwise the x value. Convenient for tooltip and data label formatting.\n *\n * @name Highcharts.Point#key\n * @type {number|string}\n */\n /**\n * The point's options as applied in the initial configuration, or\n * extended through `Point.update`.\n *\n * In TypeScript you have to extend `PointOptionsObject` via an\n * additional interface to allow custom data options:\n *\n * ```\n * declare interface PointOptionsObject {\n * customProperty: string;\n * }\n * ```\n *\n * @name Highcharts.Point#options\n * @type {Highcharts.PointOptionsObject}\n */\n /**\n * The percentage for points in a stacked series, pies or gauges.\n *\n * @name Highcharts.Point#percentage\n * @type {number|undefined}\n */\n /**\n * The series object associated with the point.\n *\n * @name Highcharts.Point#series\n * @type {Highcharts.Series}\n */\n /**\n * The attributes of the rendered SVG shape like in `column` or `pie`\n * series.\n *\n * @readonly\n * @name Highcharts.Point#shapeArgs\n * @type {Readonly<Highcharts.SVGAttributes>|undefined}\n */\n /**\n * The total of values in either a stack for stacked series, or a pie in a\n * pie series.\n *\n * @name Highcharts.Point#total\n * @type {number|undefined}\n */\n /**\n * For certain series types, like pie charts, where individual points can\n * be shown or hidden.\n *\n * @name Highcharts.Point#visible\n * @type {boolean}\n * @default true\n */\n /* *\n *\n * Functions\n *\n * */\n /**\n * Animate SVG elements associated with the point.\n *\n * @private\n * @function Highcharts.Point#animateBeforeDestroy\n */\n Point.prototype.animateBeforeDestroy = function () {\n var point = this,\n animateParams = { x: point.startXPos,\n opacity: 0 },\n graphicalProps = point.getGraphicalProps();\n graphicalProps.singular.forEach(function (prop) {\n var isDataLabel = prop === 'dataLabel';\n point[prop] = point[prop].animate(isDataLabel ? {\n x: point[prop].startXPos,\n y: point[prop].startYPos,\n opacity: 0\n } : animateParams);\n });\n graphicalProps.plural.forEach(function (plural) {\n point[plural].forEach(function (item) {\n if (item.element) {\n item.animate(Point_extend({ x: point.startXPos }, (item.startYPos ? {\n x: item.startXPos,\n y: item.startYPos\n } : {})));\n }\n });\n });\n };\n /**\n * Apply the options containing the x and y data and possible some extra\n * properties. Called on point init or from point.update.\n *\n * @private\n * @function Highcharts.Point#applyOptions\n *\n * @param {Highcharts.PointOptionsType} options\n * The point options as defined in series.data.\n *\n * @param {number} [x]\n * Optionally, the x value.\n *\n * @return {Highcharts.Point}\n * The Point instance.\n */\n Point.prototype.applyOptions = function (options, x) {\n var point = this,\n series = point.series,\n pointValKey = series.options.pointValKey || series.pointValKey;\n options = Point.prototype.optionsToObject.call(this, options);\n // Copy options directly to point\n Point_extend(point, options);\n point.options = point.options ?\n Point_extend(point.options, options) :\n options;\n // Since options are copied into the Point instance, some accidental\n // options must be shielded (#5681)\n if (options.group) {\n delete point.group;\n }\n if (options.dataLabels) {\n delete point.dataLabels;\n }\n /**\n * The y value of the point.\n * @name Highcharts.Point#y\n * @type {number|undefined}\n */\n // For higher dimension series types. For instance, for ranges, point.y\n // is mapped to point.low.\n if (pointValKey) {\n point.y = Point.prototype.getNestedProperty.call(point, pointValKey);\n }\n // The point is initially selected by options (#5777)\n if (point.selected) {\n point.state = 'select';\n }\n /**\n * The x value of the point.\n * @name Highcharts.Point#x\n * @type {number}\n */\n // If no x is set by now, get auto incremented value. All points must\n // have an x value, however the y value can be null to create a gap in\n // the series\n if ('name' in point &&\n typeof x === 'undefined' &&\n series.xAxis &&\n series.xAxis.hasNames) {\n point.x = series.xAxis.nameToX(point);\n }\n if (typeof point.x === 'undefined' && series) {\n point.x = x !== null && x !== void 0 ? x : series.autoIncrement();\n }\n else if (Point_isNumber(options.x) && series.options.relativeXValue) {\n point.x = series.autoIncrement(options.x);\n // If x is a string, try to parse it to a datetime\n }\n else if (typeof point.x === 'string') {\n x !== null && x !== void 0 ? x : (x = series.chart.time.parse(point.x));\n if (Point_isNumber(x)) {\n point.x = x;\n }\n }\n point.isNull = this.isValid && !this.isValid();\n point.formatPrefix = point.isNull ? 'null' : 'point'; // #9233, #10874\n return point;\n };\n /**\n * Destroy a point to clear memory. Its reference still stays in\n * `series.data`.\n *\n * @private\n * @function Highcharts.Point#destroy\n */\n Point.prototype.destroy = function () {\n if (!this.destroyed) {\n var point_1 = this,\n series = point_1.series,\n chart = series.chart,\n dataSorting = series.options.dataSorting,\n hoverPoints = chart.hoverPoints,\n globalAnimation = point_1.series.chart.renderer.globalAnimation,\n animation = Point_animObject(globalAnimation);\n /**\n * Allow to call after animation.\n * @private\n */\n var destroyPoint = function () {\n // Remove all events and elements\n if (point_1.graphic ||\n point_1.graphics ||\n point_1.dataLabel ||\n point_1.dataLabels) {\n Point_removeEvent(point_1);\n point_1.destroyElements();\n }\n for (var prop in point_1) { // eslint-disable-line guard-for-in\n delete point_1[prop];\n }\n };\n if (point_1.legendItem) {\n // Pies have legend items\n chart.legend.destroyItem(point_1);\n }\n if (hoverPoints) {\n point_1.setState();\n Point_erase(hoverPoints, point_1);\n if (!hoverPoints.length) {\n chart.hoverPoints = null;\n }\n }\n if (point_1 === chart.hoverPoint) {\n point_1.onMouseOut();\n }\n // Remove properties after animation\n if (!dataSorting || !dataSorting.enabled) {\n destroyPoint();\n }\n else {\n this.animateBeforeDestroy();\n Point_syncTimeout(destroyPoint, animation.duration);\n }\n chart.pointCount--;\n }\n this.destroyed = true;\n };\n /**\n * Destroy SVG elements associated with the point.\n *\n * @private\n * @function Highcharts.Point#destroyElements\n * @param {Highcharts.Dictionary<number>} [kinds]\n */\n Point.prototype.destroyElements = function (kinds) {\n var point = this,\n props = point.getGraphicalProps(kinds);\n props.singular.forEach(function (prop) {\n point[prop] = point[prop].destroy();\n });\n props.plural.forEach(function (plural) {\n point[plural].forEach(function (item) {\n if (item && item.element) {\n item.destroy();\n }\n });\n delete point[plural];\n });\n };\n /**\n * Fire an event on the Point object.\n *\n * @private\n * @function Highcharts.Point#firePointEvent\n *\n * @param {string} eventType\n * Type of the event.\n *\n * @param {Highcharts.Dictionary<any>|Event} [eventArgs]\n * Additional event arguments.\n *\n * @param {Highcharts.EventCallbackFunction<Highcharts.Point>|Function} [defaultFunction]\n * Default event handler.\n *\n * @emits Highcharts.Point#event:*\n */\n Point.prototype.firePointEvent = function (eventType, eventArgs, defaultFunction) {\n var point = this,\n series = this.series,\n seriesOptions = series.options;\n // Load event handlers on demand to save time on mouseover/out\n point.manageEvent(eventType);\n // Add default handler if in selection mode\n if (eventType === 'click' && seriesOptions.allowPointSelect) {\n defaultFunction = function (event) {\n // Control key is for Windows, meta (= Cmd key) for Mac, Shift\n // for Opera.\n if (!point.destroyed && point.select) { // #2911, #19075\n point.select(null, event.ctrlKey || event.metaKey || event.shiftKey);\n }\n };\n }\n Point_fireEvent(point, eventType, eventArgs, defaultFunction);\n };\n /**\n * Get the CSS class names for individual points. Used internally where the\n * returned value is set on every point.\n *\n * @function Highcharts.Point#getClassName\n *\n * @return {string}\n * The class names.\n */\n Point.prototype.getClassName = function () {\n var point = this;\n return 'highcharts-point' +\n (point.selected ? ' highcharts-point-select' : '') +\n (point.negative ? ' highcharts-negative' : '') +\n (point.isNull ? ' highcharts-null-point' : '') +\n (typeof point.colorIndex !== 'undefined' ?\n ' highcharts-color-' + point.colorIndex : '') +\n (point.options.className ? ' ' + point.options.className : '') +\n (point.zone && point.zone.className ? ' ' +\n point.zone.className.replace('highcharts-negative', '') : '');\n };\n /**\n * Get props of all existing graphical point elements.\n *\n * @private\n * @function Highcharts.Point#getGraphicalProps\n */\n Point.prototype.getGraphicalProps = function (kinds) {\n var point = this,\n props = [],\n graphicalProps = { singular: [],\n plural: [] };\n var prop,\n i;\n kinds = kinds || { graphic: 1, dataLabel: 1 };\n if (kinds.graphic) {\n props.push('graphic', 'connector' // Used by dumbbell\n );\n }\n if (kinds.dataLabel) {\n props.push('dataLabel', 'dataLabelPath', 'dataLabelUpper');\n }\n i = props.length;\n while (i--) {\n prop = props[i];\n if (point[prop]) {\n graphicalProps.singular.push(prop);\n }\n }\n [\n 'graphic',\n 'dataLabel'\n ].forEach(function (prop) {\n var plural = prop + 's';\n if (kinds[prop] && point[plural]) {\n graphicalProps.plural.push(plural);\n }\n });\n return graphicalProps;\n };\n /**\n * Returns the value of the point property for a given value.\n * @private\n */\n Point.prototype.getNestedProperty = function (key) {\n if (!key) {\n return;\n }\n if (key.indexOf('custom.') === 0) {\n return Point_getNestedProperty(key, this.options);\n }\n return this[key];\n };\n /**\n * In a series with `zones`, return the zone that the point belongs to.\n *\n * @function Highcharts.Point#getZone\n *\n * @return {Highcharts.SeriesZonesOptionsObject}\n * The zone item.\n */\n Point.prototype.getZone = function () {\n var series = this.series,\n zones = series.zones,\n zoneAxis = series.zoneAxis || 'y';\n var zone,\n i = 0;\n zone = zones[i];\n while (this[zoneAxis] >= zone.value) {\n zone = zones[++i];\n }\n // For resetting or reusing the point (#8100)\n if (!this.nonZonedColor) {\n this.nonZonedColor = this.color;\n }\n if (zone && zone.color && !this.options.color) {\n this.color = zone.color;\n }\n else {\n this.color = this.nonZonedColor;\n }\n return zone;\n };\n /**\n * Utility to check if point has new shape type. Used in column series and\n * all others that are based on column series.\n * @private\n */\n Point.prototype.hasNewShapeType = function () {\n var point = this;\n var oldShapeType = point.graphic &&\n (point.graphic.symbolName || point.graphic.element.nodeName);\n return oldShapeType !== this.shapeType;\n };\n /**\n * Determine if point is valid.\n * @private\n * @function Highcharts.Point#isValid\n */\n Point.prototype.isValid = function () {\n return ((Point_isNumber(this.x) ||\n this.x instanceof Date) &&\n Point_isNumber(this.y));\n };\n /**\n * Transform number or array configs into objects. Also called for object\n * configs. Used internally to unify the different configuration formats for\n * points. For example, a simple number `10` in a line series will be\n * transformed to `{ y: 10 }`, and an array config like `[1, 10]` in a\n * scatter series will be transformed to `{ x: 1, y: 10 }`.\n *\n * @function Highcharts.Point#optionsToObject\n *\n * @param {Highcharts.PointOptionsType} options\n * Series data options.\n *\n * @return {Highcharts.Dictionary<*>}\n * Transformed point options.\n */\n Point.prototype.optionsToObject = function (options) {\n var _a;\n var series = this.series,\n keys = series.options.keys,\n pointArrayMap = keys || series.pointArrayMap || ['y'],\n valueCount = pointArrayMap.length;\n var ret = {},\n firstItemType,\n i = 0,\n j = 0;\n if (Point_isNumber(options) || options === null) {\n ret[pointArrayMap[0]] = options;\n }\n else if (Point_isArray(options)) {\n // With leading x value\n if (!keys && options.length > valueCount) {\n firstItemType = typeof options[0];\n if (firstItemType === 'string') {\n if ((_a = series.xAxis) === null || _a === void 0 ? void 0 : _a.dateTime) {\n ret.x = series.chart.time.parse(options[0]);\n }\n else {\n ret.name = options[0];\n }\n }\n else if (firstItemType === 'number') {\n ret.x = options[0];\n }\n i++;\n }\n while (j < valueCount) {\n // Skip undefined positions for keys\n if (!keys || typeof options[i] !== 'undefined') {\n if (pointArrayMap[j].indexOf('.') > 0) {\n // Handle nested keys, e.g. ['color.pattern.image']\n // Avoid function call unless necessary.\n Point.prototype.setNestedProperty(ret, options[i], pointArrayMap[j]);\n }\n else {\n ret[pointArrayMap[j]] = options[i];\n }\n }\n i++;\n j++;\n }\n }\n else if (typeof options === 'object') {\n ret = options;\n // This is the fastest way to detect if there are individual point\n // dataLabels that need to be considered in drawDataLabels. These\n // can only occur in object configs.\n if (options.dataLabels) {\n // Override the prototype function to always return true,\n // regardless of whether data labels are enabled series-wide\n series.hasDataLabels = function () { return true; };\n }\n // Same approach as above for markers\n if (options.marker) {\n series._hasPointMarkers = true;\n }\n }\n return ret;\n };\n /**\n * Get the pixel position of the point relative to the plot area.\n * @function Highcharts.Point#pos\n *\n * @sample highcharts/point/position\n * Get point's position in pixels.\n *\n * @param {boolean} chartCoordinates\n * If true, the returned position is relative to the full chart area.\n * If false, it is relative to the plot area determined by the axes.\n *\n * @param {number|undefined} plotY\n * A custom plot y position to be computed. Used internally for some\n * series types that have multiple `y` positions, like area range (low\n * and high values).\n *\n * @return {Array<number>|undefined}\n * Coordinates of the point if the point exists.\n */\n Point.prototype.pos = function (chartCoordinates, plotY) {\n if (plotY === void 0) { plotY = this.plotY; }\n if (!this.destroyed) {\n var _a = this,\n plotX = _a.plotX,\n series = _a.series,\n chart = series.chart,\n xAxis = series.xAxis,\n yAxis = series.yAxis;\n var posX = 0,\n posY = 0;\n if (Point_isNumber(plotX) && Point_isNumber(plotY)) {\n if (chartCoordinates) {\n posX = xAxis ? xAxis.pos : chart.plotLeft;\n posY = yAxis ? yAxis.pos : chart.plotTop;\n }\n return chart.inverted && xAxis && yAxis ?\n [yAxis.len - plotY + posY, xAxis.len - plotX + posX] :\n [plotX + posX, plotY + posY];\n }\n }\n };\n /**\n * @private\n * @function Highcharts.Point#resolveColor\n */\n Point.prototype.resolveColor = function () {\n var series = this.series,\n optionsChart = series.chart.options.chart,\n styledMode = series.chart.styledMode;\n var color,\n colors,\n colorCount = optionsChart.colorCount,\n colorIndex;\n // Remove points nonZonedColor for later recalculation\n delete this.nonZonedColor;\n if (series.options.colorByPoint) {\n if (!styledMode) {\n colors = series.options.colors || series.chart.options.colors;\n color = colors[series.colorCounter];\n colorCount = colors.length;\n }\n colorIndex = series.colorCounter;\n series.colorCounter++;\n // Loop back to zero\n if (series.colorCounter === colorCount) {\n series.colorCounter = 0;\n }\n }\n else {\n if (!styledMode) {\n color = series.color;\n }\n colorIndex = series.colorIndex;\n }\n /**\n * The point's current color index, used in styled mode instead of\n * `color`. The color index is inserted in class names used for styling.\n *\n * @name Highcharts.Point#colorIndex\n * @type {number|undefined}\n */\n this.colorIndex = Point_pick(this.options.colorIndex, colorIndex);\n /**\n * The point's current color.\n *\n * @name Highcharts.Point#color\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject|undefined}\n */\n this.color = Point_pick(this.options.color, color);\n };\n /**\n * Set a value in an object, on the property defined by key. The key\n * supports nested properties using dot notation. The function modifies the\n * input object and does not make a copy.\n *\n * @function Highcharts.Point#setNestedProperty<T>\n *\n * @param {T} object\n * The object to set the value on.\n *\n * @param {*} value\n * The value to set.\n *\n * @param {string} key\n * Key to the property to set.\n *\n * @return {T}\n * The modified object.\n */\n Point.prototype.setNestedProperty = function (object, value, key) {\n var nestedKeys = key.split('.');\n nestedKeys.reduce(function (result, key, i, arr) {\n var isLastKey = arr.length - 1 === i;\n result[key] = (isLastKey ?\n value :\n Point_isObject(result[key], true) ?\n result[key] :\n {});\n return result[key];\n }, object);\n return object;\n };\n Point.prototype.shouldDraw = function () {\n return !this.isNull;\n };\n /**\n * Extendable method for formatting each point's tooltip line.\n *\n * @function Highcharts.Point#tooltipFormatter\n *\n * @param {string} pointFormat\n * The point format.\n *\n * @return {string}\n * A string to be concatenated in to the common tooltip text.\n */\n Point.prototype.tooltipFormatter = function (pointFormat) {\n var _a;\n // Insert options for valueDecimals, valuePrefix, and valueSuffix\n var _b = this.series, chart = _b.chart, _c = _b.pointArrayMap, pointArrayMap = _c === void 0 ? ['y'] : _c, tooltipOptions = _b.tooltipOptions, _d = tooltipOptions.valueDecimals, valueDecimals = _d === void 0 ? '' : _d, _e = tooltipOptions.valuePrefix, valuePrefix = _e === void 0 ? '' : _e, _f = tooltipOptions.valueSuffix, valueSuffix = _f === void 0 ? '' : _f;\n // Replace default point style with class name\n if (chart.styledMode) {\n pointFormat = ((_a = chart.tooltip) === null || _a === void 0 ? void 0 : _a.styledModeFormat(pointFormat)) ||\n pointFormat;\n }\n // Loop over the point array map and replace unformatted values with\n // sprintf formatting markup\n pointArrayMap.forEach(function (key) {\n key = '{point.' + key; // Without the closing bracket\n if (valuePrefix || valueSuffix) {\n pointFormat = pointFormat.replace(RegExp(key + '}', 'g'), valuePrefix + key + '}' + valueSuffix);\n }\n pointFormat = pointFormat.replace(RegExp(key + '}', 'g'), key + ':,.' + valueDecimals + 'f}');\n });\n return Point_format(pointFormat, this, chart);\n };\n /**\n * Update point with new options (typically x/y data) and optionally redraw\n * the series.\n *\n * @sample highcharts/members/point-update-column/\n * Update column value\n * @sample highcharts/members/point-update-pie/\n * Update pie slice\n * @sample maps/members/point-update/\n * Update map area value in Highmaps\n *\n * @function Highcharts.Point#update\n *\n * @param {Highcharts.PointOptionsType} options\n * The point options. Point options are handled as described under\n * the `series.type.data` item for each series type. For example\n * for a line series, if options is a single number, the point will\n * be given that number as the marin y value. If it is an array, it\n * will be interpreted as x and y values respectively. If it is an\n * object, advanced options are applied.\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart after the point is updated. If doing\n * more operations on the chart, it is best practice to set\n * `redraw` to false and call `chart.redraw()` after.\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation=true]\n * Whether to apply animation, and optionally animation\n * configuration.\n *\n * @emits Highcharts.Point#event:update\n */\n Point.prototype.update = function (options, redraw, animation, runEvent) {\n var point = this,\n series = point.series,\n graphic = point.graphic,\n chart = series.chart,\n seriesOptions = series.options;\n var i;\n redraw = Point_pick(redraw, true);\n /**\n * @private\n */\n function update() {\n point.applyOptions(options);\n // Update visuals, #4146\n // Handle mock graphic elements for a11y, #12718\n var hasMockGraphic = graphic && point.hasMockGraphic;\n var shouldDestroyGraphic = point.y === null ?\n !hasMockGraphic :\n hasMockGraphic;\n if (graphic && shouldDestroyGraphic) {\n point.graphic = graphic.destroy();\n delete point.hasMockGraphic;\n }\n if (Point_isObject(options, true)) {\n // Destroy so we can get new elements\n if (graphic && graphic.element) {\n // \"null\" is also a valid symbol\n if (options &&\n options.marker &&\n typeof options.marker.symbol !== 'undefined') {\n point.graphic = graphic.destroy();\n }\n }\n if ((options === null || options === void 0 ? void 0 : options.dataLabels) && point.dataLabel) {\n point.dataLabel = point.dataLabel.destroy(); // #2468\n }\n }\n // Record changes in the data table\n i = point.index;\n var row = {};\n for (var _i = 0, _a = series.dataColumnKeys(); _i < _a.length; _i++) {\n var key = _a[_i];\n row[key] = point[key];\n }\n series.dataTable.setRow(row, i);\n // Record the options to options.data. If the old or the new config\n // is an object, use point options, otherwise use raw options\n // (#4701, #4916).\n seriesOptions.data[i] = (Point_isObject(seriesOptions.data[i], true) ||\n Point_isObject(options, true)) ?\n point.options :\n Point_pick(options, seriesOptions.data[i]);\n // Redraw\n series.isDirty = series.isDirtyData = true;\n if (!series.fixedBox && series.hasCartesianSeries) { // #1906, #2320\n chart.isDirtyBox = true;\n }\n if (seriesOptions.legendType === 'point') { // #1831, #1885\n chart.isDirtyLegend = true;\n }\n if (redraw) {\n chart.redraw(animation);\n }\n }\n // Fire the event with a default handler of doing the update\n if (runEvent === false) { // When called from setData\n update();\n }\n else {\n point.firePointEvent('update', { options: options }, update);\n }\n };\n /**\n * Remove a point and optionally redraw the series and if necessary the axes\n *\n * @sample highcharts/plotoptions/series-point-events-remove/\n * Remove point and confirm\n * @sample highcharts/members/point-remove/\n * Remove pie slice\n * @sample maps/members/point-remove/\n * Remove selected points in Highmaps\n *\n * @function Highcharts.Point#remove\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart or wait for an explicit call. When\n * doing more operations on the chart, for example running\n * `point.remove()` in a loop, it is best practice to set `redraw`\n * to false and call `chart.redraw()` after.\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation=false]\n * Whether to apply animation, and optionally animation\n * configuration.\n */\n Point.prototype.remove = function (redraw, animation) {\n this.series.removePoint(this.series.data.indexOf(this), redraw, animation);\n };\n /**\n * Toggle the selection status of a point.\n *\n * @see Highcharts.Chart#getSelectedPoints\n *\n * @sample highcharts/members/point-select/\n * Select a point from a button\n * @sample highcharts/members/point-select-lasso/\n * Lasso selection\n * @sample highcharts/chart/events-selection-points/\n * Rectangle selection\n * @sample maps/series/data-id/\n * Select a point in Highmaps\n *\n * @function Highcharts.Point#select\n *\n * @param {boolean} [selected]\n * When `true`, the point is selected. When `false`, the point is\n * unselected. When `null` or `undefined`, the selection state is toggled.\n *\n * @param {boolean} [accumulate=false]\n * When `true`, the selection is added to other selected points.\n * When `false`, other selected points are deselected. Internally in\n * Highcharts, when\n * [allowPointSelect](https://api.highcharts.com/highcharts/plotOptions.series.allowPointSelect)\n * is `true`, selected points are accumulated on Control, Shift or Cmd\n * clicking the point.\n *\n * @emits Highcharts.Point#event:select\n * @emits Highcharts.Point#event:unselect\n */\n Point.prototype.select = function (selected, accumulate) {\n var point = this,\n series = point.series,\n chart = series.chart;\n selected = Point_pick(selected, !point.selected);\n this.selectedStaging = selected;\n // Fire the event with the default handler\n point.firePointEvent(selected ? 'select' : 'unselect', { accumulate: accumulate }, function () {\n /**\n * Whether the point is selected or not.\n *\n * @see Point#select\n * @see Chart#getSelectedPoints\n *\n * @name Highcharts.Point#selected\n * @type {boolean}\n */\n point.selected = point.options.selected = selected;\n series.options.data[series.data.indexOf(point)] =\n point.options;\n point.setState(selected && 'select');\n // Unselect all other points unless Ctrl or Cmd + click\n if (!accumulate) {\n chart.getSelectedPoints().forEach(function (loopPoint) {\n var loopSeries = loopPoint.series;\n if (loopPoint.selected && loopPoint !== point) {\n loopPoint.selected = loopPoint.options.selected =\n false;\n loopSeries.options.data[loopSeries.data.indexOf(loopPoint)] = loopPoint.options;\n // Programmatically selecting a point should restore\n // normal state, but when click happened on other\n // point, set inactive state to match other points\n loopPoint.setState(chart.hoverPoints &&\n loopSeries.options.inactiveOtherPoints ?\n 'inactive' : '');\n loopPoint.firePointEvent('unselect');\n }\n });\n }\n });\n delete this.selectedStaging;\n };\n /**\n * Runs on mouse over the point. Called internally from mouse and touch\n * events.\n *\n * @function Highcharts.Point#onMouseOver\n *\n * @param {Highcharts.PointerEventObject} [e]\n * The event arguments.\n */\n Point.prototype.onMouseOver = function (e) {\n var point = this,\n series = point.series,\n _a = series.chart,\n inverted = _a.inverted,\n pointer = _a.pointer;\n if (pointer) {\n e = e ?\n pointer.normalize(e) :\n // In cases where onMouseOver is called directly without an\n // event\n pointer.getChartCoordinatesFromPoint(point, inverted);\n pointer.runPointActions(e, point);\n }\n };\n /**\n * Runs on mouse out from the point. Called internally from mouse and touch\n * events.\n *\n * @function Highcharts.Point#onMouseOut\n * @emits Highcharts.Point#event:mouseOut\n */\n Point.prototype.onMouseOut = function () {\n var point = this,\n chart = point.series.chart;\n point.firePointEvent('mouseOut');\n if (!point.series.options.inactiveOtherPoints) {\n (chart.hoverPoints || []).forEach(function (p) {\n p.setState();\n });\n }\n chart.hoverPoints = chart.hoverPoint = null;\n };\n /**\n * Manage specific event from the series' and point's options. Only do it on\n * demand, to save processing time on hovering.\n *\n * @private\n * @function Highcharts.Point#importEvents\n */\n Point.prototype.manageEvent = function (eventType) {\n var _a,\n _b,\n _c,\n _d,\n _e,\n _f,\n _g;\n var point = this,\n options = Point_merge(point.series.options.point,\n point.options),\n userEvent = (_a = options.events) === null || _a === void 0 ? void 0 : _a[eventType];\n if (Point_isFunction(userEvent) &&\n (!((_b = point.hcEvents) === null || _b === void 0 ? void 0 : _b[eventType]) ||\n // Some HC modules, like marker-clusters, draggable-poins etc.\n // use events in their logic, so we need to be sure, that\n // callback function is different\n ((_d = (_c = point.hcEvents) === null || _c === void 0 ? void 0 : _c[eventType]) === null || _d === void 0 ? void 0 : _d.map(function (el) { return el.fn; }).indexOf(userEvent)) === -1)) {\n // While updating the existing callback event the old one should be\n // removed\n (_e = point.importedUserEvent) === null || _e === void 0 ? void 0 : _e.call(point);\n point.importedUserEvent = Point_addEvent(point, eventType, userEvent);\n if (point.hcEvents) {\n point.hcEvents[eventType].userEvent = true;\n }\n }\n else if (point.importedUserEvent &&\n !userEvent &&\n ((_f = point.hcEvents) === null || _f === void 0 ? void 0 : _f[eventType]) &&\n ((_g = point.hcEvents) === null || _g === void 0 ? void 0 : _g[eventType].userEvent)) {\n Point_removeEvent(point, eventType);\n delete point.hcEvents[eventType];\n if (!Object.keys(point.hcEvents)) {\n delete point.importedUserEvent;\n }\n }\n };\n /**\n * Set the point's state.\n *\n * @function Highcharts.Point#setState\n *\n * @param {Highcharts.PointStateValue|\"\"} [state]\n * The new state, can be one of `'hover'`, `'select'`, `'inactive'`,\n * or `''` (an empty string), `'normal'` or `undefined` to set to\n * normal state.\n * @param {boolean} [move]\n * State for animation.\n *\n * @emits Highcharts.Point#event:afterSetState\n */\n Point.prototype.setState = function (state, move) {\n var _a;\n var point = this,\n series = point.series,\n previousState = point.state,\n stateOptions = (series.options.states[state || 'normal'] ||\n {}),\n markerOptions = (Point_defaultOptions.plotOptions[series.type].marker &&\n series.options.marker),\n normalDisabled = (markerOptions && markerOptions.enabled === false),\n markerStateOptions = ((markerOptions &&\n markerOptions.states &&\n markerOptions.states[state || 'normal']) || {}),\n stateDisabled = markerStateOptions.enabled === false,\n pointMarker = point.marker || {},\n chart = series.chart,\n hasMarkers = (markerOptions && series.markerAttribs);\n var halo = series.halo,\n markerAttribs,\n pointAttribs,\n pointAttribsAnimation,\n stateMarkerGraphic = series.stateMarkerGraphic,\n newSymbol;\n state = state || ''; // Empty string\n if (\n // Already has this state\n (state === point.state && !move) ||\n // Selected points don't respond to hover\n (point.selected && state !== 'select') ||\n // Series' state options is disabled\n (stateOptions.enabled === false) ||\n // General point marker's state options is disabled\n (state && (stateDisabled ||\n (normalDisabled &&\n markerStateOptions.enabled === false))) ||\n // Individual point marker's state options is disabled\n (state &&\n pointMarker.states &&\n pointMarker.states[state] &&\n pointMarker.states[state].enabled === false) // #1610\n ) {\n return;\n }\n point.state = state;\n if (hasMarkers) {\n markerAttribs = series.markerAttribs(point, state);\n }\n // Apply hover styles to the existing point\n // Prevent from mocked null points (#14966)\n if (point.graphic && !point.hasMockGraphic) {\n if (previousState) {\n point.graphic.removeClass('highcharts-point-' + previousState);\n }\n if (state) {\n point.graphic.addClass('highcharts-point-' + state);\n }\n if (!chart.styledMode) {\n pointAttribs = series.pointAttribs(point, state);\n pointAttribsAnimation = Point_pick(chart.options.chart.animation, stateOptions.animation);\n var opacity_1 = pointAttribs.opacity;\n // Some inactive points (e.g. slices in pie) should apply\n // opacity also for their labels\n if (series.options.inactiveOtherPoints && Point_isNumber(opacity_1)) {\n (point.dataLabels || []).forEach(function (label) {\n if (label &&\n !label.hasClass('highcharts-data-label-hidden')) {\n label.animate({ opacity: opacity_1 }, pointAttribsAnimation);\n if (label.connector) {\n label.connector.animate({ opacity: opacity_1 }, pointAttribsAnimation);\n }\n }\n });\n }\n point.graphic.animate(pointAttribs, pointAttribsAnimation);\n }\n if (markerAttribs) {\n point.graphic.animate(markerAttribs, Point_pick(\n // Turn off globally:\n chart.options.chart.animation, markerStateOptions.animation, markerOptions.animation));\n }\n // Zooming in from a range with no markers to a range with markers\n if (stateMarkerGraphic) {\n stateMarkerGraphic.hide();\n }\n }\n else {\n // If a graphic is not applied to each point in the normal state,\n // create a shared graphic for the hover state\n if (state && markerStateOptions) {\n newSymbol = pointMarker.symbol || series.symbol;\n // If the point has another symbol than the previous one, throw\n // away the state marker graphic and force a new one (#1459)\n if (stateMarkerGraphic &&\n stateMarkerGraphic.currentSymbol !== newSymbol) {\n stateMarkerGraphic = stateMarkerGraphic.destroy();\n }\n // Add a new state marker graphic\n if (markerAttribs) {\n if (!stateMarkerGraphic) {\n if (newSymbol) {\n series.stateMarkerGraphic = stateMarkerGraphic =\n chart.renderer\n .symbol(newSymbol, markerAttribs.x, markerAttribs.y, markerAttribs.width, markerAttribs.height, Point_merge(markerOptions, markerStateOptions))\n .add(series.markerGroup);\n stateMarkerGraphic.currentSymbol = newSymbol;\n }\n // Move the existing graphic\n }\n else {\n stateMarkerGraphic[move ? 'animate' : 'attr']({\n x: markerAttribs.x,\n y: markerAttribs.y\n });\n }\n }\n if (!chart.styledMode && stateMarkerGraphic &&\n point.state !== 'inactive') {\n stateMarkerGraphic.attr(series.pointAttribs(point, state));\n }\n }\n if (stateMarkerGraphic) {\n stateMarkerGraphic[state && point.isInside ? 'show' : 'hide'](); // #2450\n stateMarkerGraphic.element.point = point; // #4310\n stateMarkerGraphic.addClass(point.getClassName(), true);\n }\n }\n // Show me your halo\n var haloOptions = stateOptions.halo;\n var markerGraphic = (point.graphic || stateMarkerGraphic);\n var markerVisibility = (markerGraphic && markerGraphic.visibility || 'inherit');\n if (haloOptions &&\n haloOptions.size &&\n markerGraphic &&\n markerVisibility !== 'hidden' &&\n !point.isCluster) {\n if (!halo) {\n series.halo = halo = chart.renderer.path()\n // #5818, #5903, #6705\n .add(markerGraphic.parentGroup);\n }\n halo.show()[move ? 'animate' : 'attr']({\n d: point.haloPath(haloOptions.size)\n });\n halo.attr({\n 'class': 'highcharts-halo highcharts-color-' +\n Point_pick(point.colorIndex, series.colorIndex) +\n (point.className ? ' ' + point.className : ''),\n 'visibility': markerVisibility,\n 'zIndex': -1 // #4929, #8276\n });\n halo.point = point; // #6055\n if (!chart.styledMode) {\n halo.attr(Point_extend({\n 'fill': point.color || series.color,\n 'fill-opacity': haloOptions.opacity\n }, HTML_AST.filterUserAttributes(haloOptions.attributes || {})));\n }\n }\n else if (((_a = halo === null || halo === void 0 ? void 0 : halo.point) === null || _a === void 0 ? void 0 : _a.haloPath) &&\n !halo.point.destroyed) {\n // Animate back to 0 on the current halo point (#6055)\n halo.animate({ d: halo.point.haloPath(0) }, null, \n // Hide after unhovering. The `complete` callback runs in the\n // halo's context (#7681).\n halo.hide);\n }\n Point_fireEvent(point, 'afterSetState', { state: state });\n };\n /**\n * Get the path definition for the halo, which is usually a shadow-like\n * circle around the currently hovered point.\n *\n * @function Highcharts.Point#haloPath\n *\n * @param {number} size\n * The radius of the circular halo.\n *\n * @return {Highcharts.SVGPathArray}\n * The path definition.\n */\n Point.prototype.haloPath = function (size) {\n var pos = this.pos();\n return pos ? this.series.chart.renderer.symbols.circle(Point_crisp(pos[0], 1) - size, pos[1] - size, size * 2, size * 2) : [];\n };\n return Point;\n}());\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Series_Point = (Point);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Function callback when a series point is clicked. Return false to cancel the\n * action.\n *\n * @callback Highcharts.PointClickCallbackFunction\n *\n * @param {Highcharts.Point} this\n * The point where the event occurred.\n *\n * @param {Highcharts.PointClickEventObject} event\n * Event arguments.\n */\n/**\n * Common information for a click event on a series point.\n *\n * @interface Highcharts.PointClickEventObject\n * @extends Highcharts.PointerEventObject\n */ /**\n* Clicked point.\n* @name Highcharts.PointClickEventObject#point\n* @type {Highcharts.Point}\n*/\n/**\n * Gets fired when the mouse leaves the area close to the point.\n *\n * @callback Highcharts.PointMouseOutCallbackFunction\n *\n * @param {Highcharts.Point} this\n * Point where the event occurred.\n *\n * @param {global.PointerEvent} event\n * Event that occurred.\n */\n/**\n * Gets fired when the mouse enters the area close to the point.\n *\n * @callback Highcharts.PointMouseOverCallbackFunction\n *\n * @param {Highcharts.Point} this\n * Point where the event occurred.\n *\n * @param {global.Event} event\n * Event that occurred.\n */\n/**\n * The generic point options for all series.\n *\n * In TypeScript you have to extend `PointOptionsObject` with an additional\n * declaration to allow custom data options:\n *\n * ```\n * declare interface PointOptionsObject {\n * customProperty: string;\n * }\n * ```\n *\n * @interface Highcharts.PointOptionsObject\n */\n/**\n * Possible option types for a data point. Use `null` to indicate a gap.\n *\n * @typedef {number|string|Highcharts.PointOptionsObject|Array<(number|string|null)>|null} Highcharts.PointOptionsType\n */\n/**\n * Gets fired when the point is removed using the `.remove()` method.\n *\n * @callback Highcharts.PointRemoveCallbackFunction\n *\n * @param {Highcharts.Point} this\n * Point where the event occurred.\n *\n * @param {global.Event} event\n * Event that occurred.\n */\n/**\n * Possible key values for the point state options.\n *\n * @typedef {\"hover\"|\"inactive\"|\"normal\"|\"select\"} Highcharts.PointStateValue\n */\n/**\n * Gets fired when the point is updated programmatically through the `.update()`\n * method.\n *\n * @callback Highcharts.PointUpdateCallbackFunction\n *\n * @param {Highcharts.Point} this\n * Point where the event occurred.\n *\n * @param {Highcharts.PointUpdateEventObject} event\n * Event that occurred.\n */\n/**\n * Information about the update event.\n *\n * @interface Highcharts.PointUpdateEventObject\n * @extends global.Event\n */ /**\n* Options data of the update event.\n* @name Highcharts.PointUpdateEventObject#options\n* @type {Highcharts.PointOptionsType}\n*/\n/**\n * @interface Highcharts.PointEventsOptionsObject\n */ /**\n* Fires when the point is selected either programmatically or following a click\n* on the point. One parameter, `event`, is passed to the function. Returning\n* `false` cancels the operation.\n* @name Highcharts.PointEventsOptionsObject#select\n* @type {Highcharts.PointSelectCallbackFunction|undefined}\n*/ /**\n* Fires when the point is unselected either programmatically or following a\n* click on the point. One parameter, `event`, is passed to the function.\n* Returning `false` cancels the operation.\n* @name Highcharts.PointEventsOptionsObject#unselect\n* @type {Highcharts.PointUnselectCallbackFunction|undefined}\n*/\n/**\n * Information about the select/unselect event.\n *\n * @interface Highcharts.PointInteractionEventObject\n * @extends global.Event\n */ /**\n* @name Highcharts.PointInteractionEventObject#accumulate\n* @type {boolean}\n*/\n/**\n * Gets fired when the point is selected either programmatically or following a\n * click on the point.\n *\n * @callback Highcharts.PointSelectCallbackFunction\n *\n * @param {Highcharts.Point} this\n * Point where the event occurred.\n *\n * @param {Highcharts.PointInteractionEventObject} event\n * Event that occurred.\n */\n/**\n * Fires when the point is unselected either programmatically or following a\n * click on the point.\n *\n * @callback Highcharts.PointUnselectCallbackFunction\n *\n * @param {Highcharts.Point} this\n * Point where the event occurred.\n *\n * @param {Highcharts.PointInteractionEventObject} event\n * Event that occurred.\n */\n''; // Keeps doclets above in JS file.\n\n;// ./code/es5/es-modules/Core/Pointer.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar Pointer_assign = (undefined && undefined.__assign) || function () {\n Pointer_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return Pointer_assign.apply(this, arguments);\n};\n\nvar Pointer_color = Color_Color.parse;\n\nvar Pointer_charts = Core_Globals.charts, Pointer_composed = Core_Globals.composed, Pointer_isTouchDevice = Core_Globals.isTouchDevice;\n\nvar Pointer_addEvent = Core_Utilities.addEvent, Pointer_attr = Core_Utilities.attr, Pointer_css = Core_Utilities.css, Pointer_extend = Core_Utilities.extend, Pointer_find = Core_Utilities.find, Pointer_fireEvent = Core_Utilities.fireEvent, Pointer_isNumber = Core_Utilities.isNumber, Pointer_isObject = Core_Utilities.isObject, Pointer_objectEach = Core_Utilities.objectEach, Pointer_offset = Core_Utilities.offset, Pointer_pick = Core_Utilities.pick, Pointer_pushUnique = Core_Utilities.pushUnique, Pointer_splat = Core_Utilities.splat;\n/* *\n *\n * Class\n *\n * */\n/**\n * The mouse and touch tracker object. Each {@link Chart} item has one\n * associated Pointer item that can be accessed from the {@link Chart.pointer}\n * property.\n *\n * @class\n * @name Highcharts.Pointer\n *\n * @param {Highcharts.Chart} chart\n * The chart instance.\n *\n * @param {Highcharts.Options} options\n * The root options object. The pointer uses options from the chart and tooltip\n * structures.\n */\nvar Pointer = /** @class */ (function () {\n /**\n * Initialize the Pointer.\n *\n * @private\n * @function Highcharts.Pointer#init\n *\n * @param {Highcharts.Chart} chart\n * The Chart instance.\n *\n * @param {Highcharts.Options} options\n * The root options object. The pointer uses options from the chart and\n * tooltip structures.\n */\n function Pointer(chart, options) {\n var _a;\n this.hasDragged = 0;\n this.pointerCaptureEventsToUnbind = [];\n this.eventsToUnbind = [];\n // Store references\n this.options = options;\n this.chart = chart;\n // Do we need to handle click on a touch device?\n this.runChartClick = Boolean((_a = options.chart.events) === null || _a === void 0 ? void 0 : _a.click);\n this.pinchDown = [];\n this.setDOMEvents();\n Pointer_fireEvent(this, 'afterInit');\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Set inactive state to all series that are not currently hovered,\n * or, if `inactiveOtherPoints` is set to true, set inactive state to\n * all points within that series.\n *\n * @private\n * @function Highcharts.Pointer#applyInactiveState\n *\n * @param {Array<Highcharts.Point>} points\n * Currently hovered points\n */\n Pointer.prototype.applyInactiveState = function (points) {\n var activeSeries = [],\n series;\n // Get all active series from the hovered points\n (points || []).forEach(function (item) {\n series = item.series;\n // Include itself\n activeSeries.push(series);\n // Include parent series\n if (series.linkedParent) {\n activeSeries.push(series.linkedParent);\n }\n // Include all child series\n if (series.linkedSeries) {\n activeSeries = activeSeries.concat(series.linkedSeries);\n }\n // Include navigator series\n if (series.navigatorSeries) {\n activeSeries.push(series.navigatorSeries);\n }\n });\n // Now loop over all series, filtering out active series\n this.chart.series.forEach(function (inactiveSeries) {\n if (activeSeries.indexOf(inactiveSeries) === -1) {\n // Inactive series\n inactiveSeries.setState('inactive', true);\n }\n else if (inactiveSeries.options.inactiveOtherPoints) {\n // Active series, but other points should be inactivated\n inactiveSeries.setAllPointsToState('inactive');\n }\n });\n };\n /**\n * Destroys the Pointer object and disconnects DOM events.\n *\n * @function Highcharts.Pointer#destroy\n */\n Pointer.prototype.destroy = function () {\n var pointer = this;\n this.eventsToUnbind.forEach(function (unbind) { return unbind(); });\n this.eventsToUnbind = [];\n if (!Core_Globals.chartCount) {\n Pointer.unbindDocumentMouseUp.forEach(function (el) { return el.unbind(); });\n Pointer.unbindDocumentMouseUp.length = 0;\n if (Pointer.unbindDocumentTouchEnd) {\n Pointer.unbindDocumentTouchEnd = (Pointer.unbindDocumentTouchEnd());\n }\n }\n // Memory and CPU leak\n clearInterval(pointer.tooltipTimeout);\n Pointer_objectEach(pointer, function (_val, prop) {\n pointer[prop] = void 0;\n });\n };\n /**\n * Calculate attrs for selection marker.\n * @private\n * @function Highcharts.Pointer#getSelectionMarkerAttrs\n * @emits getSelectionMarkerAttrs\n */\n Pointer.prototype.getSelectionMarkerAttrs = function (chartX, chartY) {\n var _this = this;\n var e = {\n args: { chartX: chartX,\n chartY: chartY },\n attrs: {},\n shapeType: 'rect'\n };\n Pointer_fireEvent(this, 'getSelectionMarkerAttrs', e, function (e) {\n var _a = _this,\n chart = _a.chart,\n zoomHor = _a.zoomHor,\n zoomVert = _a.zoomVert,\n _b = chart.mouseDownX,\n mouseDownX = _b === void 0 ? 0 : _b,\n _c = chart.mouseDownY,\n mouseDownY = _c === void 0 ? 0 : _c,\n attrs = e.attrs;\n var size;\n attrs.x = chart.plotLeft;\n attrs.y = chart.plotTop;\n attrs.width = zoomHor ? 1 : chart.plotWidth;\n attrs.height = zoomVert ? 1 : chart.plotHeight;\n // Adjust the width of the selection marker. Firefox needs at\n // least one pixel width or height in order to return a bounding\n // box.\n if (zoomHor) {\n size = chartX - mouseDownX;\n attrs.width = Math.max(1, Math.abs(size));\n attrs.x = (size > 0 ? 0 : size) + mouseDownX;\n }\n // Adjust the height of the selection marker\n if (zoomVert) {\n size = chartY - mouseDownY;\n attrs.height = Math.max(1, Math.abs(size));\n attrs.y = (size > 0 ? 0 : size) + mouseDownY;\n }\n });\n return e;\n };\n /**\n * Perform a drag operation in response to a mousemove event while the mouse\n * is down.\n * @private\n * @function Highcharts.Pointer#drag\n */\n Pointer.prototype.drag = function (e) {\n var chart = this.chart,\n _a = chart.mouseDownX,\n mouseDownX = _a === void 0 ? 0 : _a,\n _b = chart.mouseDownY,\n mouseDownY = _b === void 0 ? 0 : _b,\n _c = chart.options.chart,\n panning = _c.panning,\n panKey = _c.panKey,\n selectionMarkerFill = _c.selectionMarkerFill,\n plotLeft = chart.plotLeft,\n plotTop = chart.plotTop,\n plotWidth = chart.plotWidth,\n plotHeight = chart.plotHeight,\n panningEnabled = Pointer_isObject(panning) ?\n panning.enabled :\n panning,\n panKeyPressed = panKey && e[\"\" + panKey + \"Key\"];\n var chartX = e.chartX,\n chartY = e.chartY,\n clickedInside,\n selectionMarker = this.selectionMarker;\n // If the device supports both touch and mouse (like IE11), and we are\n // touch-dragging inside the plot area, don't handle the mouse event.\n // #4339.\n if (selectionMarker && selectionMarker.touch) {\n return;\n }\n // If the mouse is outside the plot area, adjust to coordinates\n // inside to prevent the selection marker from going outside\n if (chartX < plotLeft) {\n chartX = plotLeft;\n }\n else if (chartX > plotLeft + plotWidth) {\n chartX = plotLeft + plotWidth;\n }\n if (chartY < plotTop) {\n chartY = plotTop;\n }\n else if (chartY > plotTop + plotHeight) {\n chartY = plotTop + plotHeight;\n }\n // Determine if the mouse has moved more than 10px\n this.hasDragged = Math.sqrt(Math.pow(mouseDownX - chartX, 2) +\n Math.pow(mouseDownY - chartY, 2));\n if (this.hasDragged > 10) {\n clickedInside = chart.isInsidePlot(mouseDownX - plotLeft, mouseDownY - plotTop, {\n visiblePlotOnly: true\n });\n var _d = this.getSelectionMarkerAttrs(chartX,\n chartY),\n shapeType = _d.shapeType,\n attrs = _d.attrs;\n // Make a selection\n if ((chart.hasCartesianSeries || chart.mapView) &&\n this.hasZoom &&\n clickedInside &&\n !panKeyPressed) {\n if (!selectionMarker) {\n this.selectionMarker = selectionMarker =\n chart.renderer[shapeType]();\n selectionMarker\n .attr({\n 'class': 'highcharts-selection-marker',\n zIndex: 7\n })\n .add();\n if (!chart.styledMode) {\n selectionMarker.attr({\n fill: selectionMarkerFill ||\n Pointer_color(\"#334eff\" /* Palette.highlightColor80 */)\n .setOpacity(0.25).get()\n });\n }\n }\n }\n if (selectionMarker) {\n selectionMarker.attr(attrs);\n }\n // Panning\n if (clickedInside && !selectionMarker && panningEnabled) {\n chart.pan(e, panning);\n }\n }\n };\n /**\n * Start a drag operation.\n * @private\n * @function Highcharts.Pointer#dragStart\n */\n Pointer.prototype.dragStart = function (e) {\n var chart = this.chart;\n // Record the start position\n chart.mouseIsDown = e.type;\n chart.cancelClick = false;\n chart.mouseDownX = e.chartX;\n chart.mouseDownY = e.chartY;\n };\n /**\n * Get selection box to calculate extremes\n * @private\n * @function Highcharts.Pointer#getSelectionBox\n * @emits getSelectionBox\n */\n Pointer.prototype.getSelectionBox = function (marker) {\n var e = {\n args: { marker: marker },\n result: marker.getBBox()\n };\n Pointer_fireEvent(this, 'getSelectionBox', e);\n return e.result;\n };\n /**\n * On mouse up or touch end across the entire document, drop the selection.\n * @private\n * @function Highcharts.Pointer#drop\n */\n Pointer.prototype.drop = function (e) {\n var _this = this;\n var _a = this,\n chart = _a.chart,\n selectionMarker = _a.selectionMarker;\n // During a mouse, touch or mousewheel pan, the `startOnTick` and\n // `endOnTick` options are ignored. Otherwise the zooming or panning\n // would be jumpy, or even not performed because the end ticks would\n // block it. After the touch has ended, we undo this and render again.\n var redraw;\n for (var _i = 0, _b = chart.axes; _i < _b.length; _i++) {\n var axis = _b[_i];\n if (axis.isPanning) {\n axis.isPanning = false;\n if (axis.options.startOnTick ||\n axis.options.endOnTick ||\n axis.series.some(function (s) { return s.boosted; })) {\n axis.forceRedraw = true;\n axis.setExtremes(axis.userMin, axis.userMax, false);\n redraw = true;\n }\n }\n }\n if (redraw) {\n chart.redraw();\n }\n if (selectionMarker && e) {\n // A selection has been made\n if (this.hasDragged) {\n var from = this.getSelectionBox(selectionMarker);\n chart.transform({\n axes: chart.axes.filter(function (a) {\n return a.zoomEnabled &&\n ((a.coll === 'xAxis' && _this.zoomX) ||\n (a.coll === 'yAxis' && _this.zoomY));\n }),\n selection: Pointer_assign({ originalEvent: e, xAxis: [], yAxis: [] }, from),\n from: from\n });\n }\n if (Pointer_isNumber(chart.index)) {\n this.selectionMarker = selectionMarker.destroy();\n }\n }\n // Reset all. Check isNumber because it may be destroyed on mouse up\n // (#877)\n if (chart && Pointer_isNumber(chart.index)) {\n Pointer_css(chart.container, { cursor: chart._cursor });\n chart.cancelClick = this.hasDragged > 10; // #370\n chart.mouseIsDown = false;\n this.hasDragged = 0;\n this.pinchDown = [];\n }\n };\n /**\n * Finds the closest point to a set of coordinates, using the k-d-tree\n * algorithm.\n *\n * @function Highcharts.Pointer#findNearestKDPoint\n *\n * @param {Array<Highcharts.Series>} series\n * All the series to search in.\n *\n * @param {boolean|undefined} shared\n * Whether it is a shared tooltip or not.\n *\n * @param {Highcharts.PointerEventObject} e\n * The pointer event object, containing chart coordinates of the pointer.\n *\n * @return {Highcharts.Point|undefined}\n * The point closest to given coordinates.\n */\n Pointer.prototype.findNearestKDPoint = function (series, shared, e) {\n var closest;\n /** @private */\n function sort(p1, p2) {\n var _a,\n _b;\n var isCloserX = p1.distX - p2.distX,\n isCloser = p1.dist - p2.dist,\n isAbove = (((_a = p2.series.group) === null || _a === void 0 ? void 0 : _a.zIndex) -\n ((_b = p1.series.group) === null || _b === void 0 ? void 0 : _b.zIndex));\n var result;\n // We have two points which are not in the same place on xAxis\n // and shared tooltip:\n if (isCloserX !== 0 && shared) { // #5721\n result = isCloserX;\n // Points are not exactly in the same place on x/yAxis:\n }\n else if (isCloser !== 0) {\n result = isCloser;\n // The same xAxis and yAxis position, sort by z-index:\n }\n else if (isAbove !== 0) {\n result = isAbove;\n // The same zIndex, sort by array index:\n }\n else {\n result =\n p1.series.index > p2.series.index ?\n -1 :\n 1;\n }\n return result;\n }\n series.forEach(function (s) {\n var noSharedTooltip = s.noSharedTooltip && shared,\n compareX = (!noSharedTooltip &&\n s.options.findNearestPointBy.indexOf('y') < 0),\n point = s.searchPoint(e,\n compareX);\n if ( // Check that we actually found a point on the series.\n Pointer_isObject(point, true) && point.series &&\n // Use the new point if it is closer.\n (!Pointer_isObject(closest, true) ||\n (sort(closest, point) > 0))) {\n closest = point;\n }\n });\n return closest;\n };\n /**\n * @private\n * @function Highcharts.Pointer#getChartCoordinatesFromPoint\n */\n Pointer.prototype.getChartCoordinatesFromPoint = function (point, inverted) {\n var _a,\n _b;\n var _c = point.series,\n xAxis = _c.xAxis,\n yAxis = _c.yAxis,\n shapeArgs = point.shapeArgs;\n if (xAxis && yAxis) {\n var x = (_b = (_a = point.clientX) !== null && _a !== void 0 ? _a : point.plotX) !== null && _b !== void 0 ? _b : 0,\n y = point.plotY || 0;\n if (point.isNode &&\n shapeArgs &&\n Pointer_isNumber(shapeArgs.x) &&\n Pointer_isNumber(shapeArgs.y)) {\n x = shapeArgs.x;\n y = shapeArgs.y;\n }\n return inverted ? {\n chartX: yAxis.len + yAxis.pos - y,\n chartY: xAxis.len + xAxis.pos - x\n } : {\n chartX: x + xAxis.pos,\n chartY: y + yAxis.pos\n };\n }\n if (shapeArgs && shapeArgs.x && shapeArgs.y) {\n // E.g. pies do not have axes\n return {\n chartX: shapeArgs.x,\n chartY: shapeArgs.y\n };\n }\n };\n /**\n * Return the cached chartPosition if it is available on the Pointer,\n * otherwise find it. Running offset is quite expensive, so it should be\n * avoided when we know the chart hasn't moved.\n *\n * @function Highcharts.Pointer#getChartPosition\n *\n * @return {Highcharts.ChartPositionObject}\n * The offset of the chart container within the page\n */\n Pointer.prototype.getChartPosition = function () {\n if (this.chartPosition) {\n return this.chartPosition;\n }\n var container = this.chart.container;\n var pos = Pointer_offset(container);\n this.chartPosition = {\n left: pos.left,\n top: pos.top,\n scaleX: 1,\n scaleY: 1\n };\n var offsetHeight = container.offsetHeight,\n offsetWidth = container.offsetWidth;\n // #13342 - tooltip was not visible in Chrome, when chart\n // updates height.\n if (offsetWidth > 2 && // #13342\n offsetHeight > 2 // #13342\n ) {\n this.chartPosition.scaleX = pos.width / offsetWidth;\n this.chartPosition.scaleY = pos.height / offsetHeight;\n }\n return this.chartPosition;\n };\n /**\n * Get the click position in terms of axis values.\n *\n * @function Highcharts.Pointer#getCoordinates\n *\n * @param {Highcharts.PointerEventObject} e\n * Pointer event, extended with `chartX` and `chartY` properties.\n *\n * @return {Highcharts.PointerAxisCoordinatesObject}\n * Axis coordinates.\n */\n Pointer.prototype.getCoordinates = function (e) {\n var coordinates = {\n xAxis: [],\n yAxis: []\n };\n for (var _i = 0, _a = this.chart.axes; _i < _a.length; _i++) {\n var axis = _a[_i];\n coordinates[axis.isXAxis ? 'xAxis' : 'yAxis'].push({\n axis: axis,\n value: axis.toValue(e[axis.horiz ? 'chartX' : 'chartY'])\n });\n }\n return coordinates;\n };\n /**\n * Calculates what is the current hovered point/points and series.\n *\n * @private\n * @function Highcharts.Pointer#getHoverData\n *\n * @param {Highcharts.Point|undefined} existingHoverPoint\n * The point currently being hovered.\n *\n * @param {Highcharts.Series|undefined} existingHoverSeries\n * The series currently being hovered.\n *\n * @param {Array<Highcharts.Series>} series\n * All the series in the chart.\n *\n * @param {boolean} isDirectTouch\n * Is the pointer directly hovering the point.\n *\n * @param {boolean|undefined} shared\n * Whether it is a shared tooltip or not.\n *\n * @param {Highcharts.PointerEventObject} [e]\n * The triggering event, containing chart coordinates of the pointer.\n *\n * @return {Object}\n * Object containing resulting hover data: hoverPoint, hoverSeries, and\n * hoverPoints.\n */\n Pointer.prototype.getHoverData = function (existingHoverPoint, existingHoverSeries, series, isDirectTouch, shared, e) {\n var hoverPoints = [],\n useExisting = !!(isDirectTouch && existingHoverPoint),\n filter = function (s) {\n return (s.visible &&\n !(!shared && s.directTouch) && // #3821\n Pointer_pick(s.options.enableMouseTracking,\n true));\n };\n var hoverSeries = existingHoverSeries, \n // Which series to look in for the hover point\n searchSeries, \n // Parameters needed for beforeGetHoverData event.\n eventArgs = {\n chartX: e ? e.chartX : void 0,\n chartY: e ? e.chartY : void 0,\n shared: shared\n };\n // Find chart.hoverPane and update filter method in polar.\n Pointer_fireEvent(this, 'beforeGetHoverData', eventArgs);\n var notSticky = hoverSeries && !hoverSeries.stickyTracking;\n searchSeries = notSticky ?\n // Only search on hovered series if it has stickyTracking false\n [hoverSeries] :\n // Filter what series to look in.\n series.filter(function (s) { return s.stickyTracking &&\n (eventArgs.filter || filter)(s); });\n // Use existing hovered point or find the one closest to coordinates.\n var hoverPoint = useExisting || !e ?\n existingHoverPoint :\n this.findNearestKDPoint(searchSeries,\n shared,\n e);\n // Assign hover series\n hoverSeries = hoverPoint && hoverPoint.series;\n // If we have a hoverPoint, assign hoverPoints.\n if (hoverPoint) {\n // When tooltip is shared, it displays more than one point\n if (shared && !hoverSeries.noSharedTooltip) {\n searchSeries = series.filter(function (s) {\n return eventArgs.filter ?\n eventArgs.filter(s) : filter(s) && !s.noSharedTooltip;\n });\n // Get all points with the same x value as the hoverPoint\n searchSeries.forEach(function (s) {\n var point = Pointer_find(s.points,\n function (p) {\n return p.x === hoverPoint.x && !p.isNull;\n });\n if (Pointer_isObject(point)) {\n /*\n * Boost returns a minimal point. Convert it to a usable\n * point for tooltip and states.\n */\n if (s.boosted && s.boost) {\n point = s.boost.getPoint(point);\n }\n hoverPoints.push(point);\n }\n });\n }\n else {\n hoverPoints.push(hoverPoint);\n }\n }\n // Check whether the hoverPoint is inside pane we are hovering over.\n eventArgs = { hoverPoint: hoverPoint };\n Pointer_fireEvent(this, 'afterGetHoverData', eventArgs);\n return {\n hoverPoint: eventArgs.hoverPoint,\n hoverSeries: hoverSeries,\n hoverPoints: hoverPoints\n };\n };\n /**\n * @private\n * @function Highcharts.Pointer#getPointFromEvent\n */\n Pointer.prototype.getPointFromEvent = function (e) {\n var target = e.target,\n point;\n while (target && !point) {\n point = target.point;\n target = target.parentNode;\n }\n return point;\n };\n /**\n * @private\n * @function Highcharts.Pointer#onTrackerMouseOut\n */\n Pointer.prototype.onTrackerMouseOut = function (e) {\n var chart = this.chart;\n var relatedTarget = e.relatedTarget;\n var series = chart.hoverSeries;\n this.isDirectTouch = false;\n if (series &&\n relatedTarget &&\n !series.stickyTracking &&\n !this.inClass(relatedTarget, 'highcharts-tooltip') &&\n (!this.inClass(relatedTarget, 'highcharts-series-' + series.index) || // #2499, #4465, #5553\n !this.inClass(relatedTarget, 'highcharts-tracker'))) {\n series.onMouseOut();\n }\n };\n /**\n * Utility to detect whether an element has, or has a parent with, a\n * specific class name. Used on detection of tracker objects and on deciding\n * whether hovering the tooltip should cause the active series to mouse out.\n *\n * @function Highcharts.Pointer#inClass\n *\n * @param {Highcharts.SVGDOMElement|Highcharts.HTMLDOMElement} element\n * The element to investigate.\n *\n * @param {string} className\n * The class name to look for.\n *\n * @return {boolean|undefined}\n * True if either the element or one of its parents has the given class\n * name.\n */\n Pointer.prototype.inClass = function (element, className) {\n var elem = element,\n elemClassName;\n while (elem) {\n elemClassName = Pointer_attr(elem, 'class');\n if (elemClassName) {\n if (elemClassName.indexOf(className) !== -1) {\n return true;\n }\n if (elemClassName.indexOf('highcharts-container') !== -1) {\n return false;\n }\n }\n elem = elem.parentElement;\n }\n };\n /**\n * Takes a browser event object and extends it with custom Highcharts\n * properties `chartX` and `chartY` in order to work on the internal\n * coordinate system.\n *\n * On map charts, the properties `lon` and `lat` are added to the event\n * object given that the chart has projection information.\n *\n * @function Highcharts.Pointer#normalize\n *\n * @param {global.MouseEvent|global.PointerEvent|global.TouchEvent} e\n * Event object in standard browsers.\n *\n * @param {Highcharts.OffsetObject} [chartPosition]\n * Additional chart offset.\n *\n * @return {Highcharts.PointerEventObject}\n * A browser event with extended properties `chartX` and `chartY`.\n */\n Pointer.prototype.normalize = function (e, chartPosition) {\n var touches = e.touches;\n // Position for iOS (#2757)\n var ePos = (touches ?\n touches.length ?\n touches.item(0) :\n (Pointer_pick(// #13534\n touches.changedTouches,\n e.changedTouches))[0] :\n e);\n // Get mouse position\n if (!chartPosition) {\n chartPosition = this.getChartPosition();\n }\n var chartX = ePos.pageX - chartPosition.left,\n chartY = ePos.pageY - chartPosition.top;\n // #11329 - when there is scaling on a parent element, we need to take\n // this into account\n chartX /= chartPosition.scaleX;\n chartY /= chartPosition.scaleY;\n return Pointer_extend(e, {\n chartX: Math.round(chartX),\n chartY: Math.round(chartY)\n });\n };\n /**\n * @private\n * @function Highcharts.Pointer#onContainerClick\n */\n Pointer.prototype.onContainerClick = function (e) {\n var chart = this.chart;\n var hoverPoint = chart.hoverPoint;\n var pEvt = this.normalize(e);\n var plotLeft = chart.plotLeft;\n var plotTop = chart.plotTop;\n if (!chart.cancelClick) {\n // On tracker click, fire the series and point events. #783, #1583\n if (hoverPoint &&\n this.inClass(pEvt.target, 'highcharts-tracker')) {\n // The series click event\n Pointer_fireEvent(hoverPoint.series, 'click', Pointer_extend(pEvt, {\n point: hoverPoint\n }));\n // The point click event\n if (chart.hoverPoint) { // It may be destroyed (#1844)\n hoverPoint.firePointEvent('click', pEvt);\n }\n // When clicking outside a tracker, fire a chart event\n }\n else {\n Pointer_extend(pEvt, this.getCoordinates(pEvt));\n // Fire a click event in the chart\n if (chart.isInsidePlot(pEvt.chartX - plotLeft, pEvt.chartY - plotTop, {\n visiblePlotOnly: true\n })) {\n Pointer_fireEvent(chart, 'click', pEvt);\n }\n }\n }\n };\n /**\n * @private\n * @function Highcharts.Pointer#onContainerMouseDown\n */\n Pointer.prototype.onContainerMouseDown = function (e) {\n var _a;\n var isPrimaryButton = ((e.buttons || e.button) & 1) === 1;\n e = this.normalize(e);\n // #11635, Firefox does not reliably fire move event after click scroll\n if (Core_Globals.isFirefox &&\n e.button !== 0) {\n this.onContainerMouseMove(e);\n }\n // #11635, limiting to primary button\n if (typeof e.button === 'undefined' ||\n isPrimaryButton) {\n this.zoomOption(e);\n // #295, #13737 solve conflict between container drag and chart zoom\n if (isPrimaryButton) {\n (_a = e.preventDefault) === null || _a === void 0 ? void 0 : _a.call(e);\n }\n this.dragStart(e);\n }\n };\n /**\n * When mouse leaves the container, hide the tooltip.\n * @private\n * @function Highcharts.Pointer#onContainerMouseLeave\n */\n Pointer.prototype.onContainerMouseLeave = function (e) {\n var pointer = (Pointer_charts[Pointer_pick(Pointer.hoverChartIndex, -1)] || {}).pointer;\n e = this.normalize(e);\n this.onContainerMouseMove(e);\n // #4886, MS Touch end fires mouseleave but with no related target\n if (pointer &&\n !this.inClass(e.relatedTarget, 'highcharts-tooltip')) {\n pointer.reset();\n // Also reset the chart position, used in #149 fix\n pointer.chartPosition = void 0;\n }\n };\n /**\n * When mouse enters the container, delete pointer's chartPosition.\n * @private\n * @function Highcharts.Pointer#onContainerMouseEnter\n */\n Pointer.prototype.onContainerMouseEnter = function () {\n delete this.chartPosition;\n };\n /**\n * The mousemove, touchmove and touchstart event handler\n * @private\n * @function Highcharts.Pointer#onContainerMouseMove\n */\n Pointer.prototype.onContainerMouseMove = function (e) {\n var chart = this.chart,\n tooltip = chart.tooltip,\n pEvt = this.normalize(e);\n this.setHoverChartIndex(e);\n if (chart.mouseIsDown === 'mousedown' || this.touchSelect(pEvt)) {\n this.drag(pEvt);\n }\n // Show the tooltip and run mouse over events (#977)\n if (!chart.openMenu &&\n (this.inClass(pEvt.target, 'highcharts-tracker') ||\n chart.isInsidePlot(pEvt.chartX - chart.plotLeft, pEvt.chartY - chart.plotTop, {\n visiblePlotOnly: true\n })) &&\n // If the tooltip has stickOnContact enabled, do nothing. This\n // applies regardless of any combinations of the `split` and\n // `useHTML` options.\n !(tooltip &&\n tooltip.shouldStickOnContact(pEvt))) {\n if (this.inClass(pEvt.target, 'highcharts-no-tooltip')) {\n this.reset(false, 0);\n }\n else {\n this.runPointActions(pEvt);\n }\n }\n };\n /**\n * @private\n * @function Highcharts.Pointer#onDocumentTouchEnd\n */\n Pointer.prototype.onDocumentTouchEnd = function (e) {\n this.onDocumentMouseUp(e);\n };\n /**\n * @private\n * @function Highcharts.Pointer#onContainerTouchMove\n */\n Pointer.prototype.onContainerTouchMove = function (e) {\n if (this.touchSelect(e)) {\n this.onContainerMouseMove(e);\n }\n else {\n this.touch(e);\n }\n };\n /**\n * @private\n * @function Highcharts.Pointer#onContainerTouchStart\n */\n Pointer.prototype.onContainerTouchStart = function (e) {\n if (this.touchSelect(e)) {\n this.onContainerMouseDown(e);\n }\n else {\n this.zoomOption(e);\n this.touch(e, true);\n }\n };\n /**\n * Special handler for mouse move that will hide the tooltip when the mouse\n * leaves the plotarea. Issue #149 workaround. The mouseleave event does not\n * always fire.\n * @private\n * @function Highcharts.Pointer#onDocumentMouseMove\n */\n Pointer.prototype.onDocumentMouseMove = function (e) {\n var chart = this.chart;\n var tooltip = chart.tooltip;\n var chartPosition = this.chartPosition;\n var pEvt = this.normalize(e,\n chartPosition);\n // If we're outside, hide the tooltip\n if (chartPosition &&\n !chart.isInsidePlot(pEvt.chartX - chart.plotLeft, pEvt.chartY - chart.plotTop, {\n visiblePlotOnly: true\n }) &&\n !(tooltip &&\n tooltip.shouldStickOnContact(pEvt)) && (pEvt.target === chart.container.ownerDocument ||\n !this.inClass(pEvt.target, 'highcharts-tracker'))) {\n this.reset();\n }\n };\n /**\n * @private\n * @function Highcharts.Pointer#onDocumentMouseUp\n */\n Pointer.prototype.onDocumentMouseUp = function (e) {\n var _a,\n _b;\n (_b = (_a = Pointer_charts[Pointer_pick(Pointer.hoverChartIndex, -1)]) === null || _a === void 0 ? void 0 : _a.pointer) === null || _b === void 0 ? void 0 : _b.drop(e);\n };\n /**\n * Handle touch events with two touches\n * @private\n * @function Highcharts.Pointer#pinch\n */\n Pointer.prototype.pinch = function (e) {\n var _this = this;\n var pointer = this,\n chart = pointer.chart,\n hasZoom = pointer.hasZoom,\n lastTouches = pointer.lastTouches,\n touches = [].map.call(e.touches || [], \n // Normalize each touch\n function (touch) { return pointer.normalize(touch); }),\n touchesLength = touches.length,\n fireClickEvent = touchesLength === 1 && ((pointer.inClass(e.target, 'highcharts-tracker') &&\n chart.runTrackerClick) ||\n pointer.runChartClick),\n tooltip = chart.tooltip,\n followTouchMove = touchesLength === 1 &&\n Pointer_pick(tooltip === null || tooltip === void 0 ? void 0 : tooltip.options.followTouchMove,\n true);\n // Don't initiate panning until the user has pinched. This prevents us\n // from blocking page scrolling as users scroll down a long page\n // (#4210).\n if (touchesLength > 1) {\n pointer.initiated = true;\n }\n else if (followTouchMove) {\n // #16119: Prevent blocking scroll when single-finger panning is\n // not enabled\n pointer.initiated = false;\n }\n // On touch devices, only proceed to trigger click if a handler is\n // defined\n if (hasZoom &&\n pointer.initiated &&\n !fireClickEvent &&\n e.cancelable !== false) {\n e.preventDefault();\n }\n // Register the touch start position\n if (e.type === 'touchstart') {\n pointer.pinchDown = touches;\n pointer.res = true; // Reset on next move\n chart.mouseDownX = e.chartX;\n // Optionally move the tooltip on touchmove\n }\n else if (followTouchMove) {\n this.runPointActions(pointer.normalize(e));\n // Event type is touchmove, handle panning and pinching. The length can\n // be 0 when releasing, if touchend fires first\n }\n else if (lastTouches) {\n Pointer_fireEvent(chart, 'touchpan', {\n originalEvent: e,\n touches: touches\n }, function () {\n var boxFromTouches = function (touches) {\n var finger0 = touches[0],\n finger1 = touches[1] || finger0;\n return {\n x: finger0.chartX,\n y: finger0.chartY,\n width: finger1.chartX - finger0.chartX,\n height: finger1.chartY - finger0.chartY\n };\n };\n chart.transform({\n axes: chart.axes\n .filter(function (axis) {\n return axis.zoomEnabled &&\n ((_this.zoomHor && axis.horiz) ||\n (_this.zoomVert && !axis.horiz));\n }),\n to: boxFromTouches(touches),\n from: boxFromTouches(lastTouches),\n trigger: e.type\n });\n });\n if (pointer.res) {\n pointer.res = false;\n this.reset(false, 0);\n }\n }\n pointer.lastTouches = touches;\n };\n /**\n * Run translation operations\n * @private\n * @function Highcharts.Pointer#pinchTranslate\n * /\n public pinchTranslate(\n pinchDown: Array<any>,\n touches: Array<PointerEvent>,\n transform: any,\n selectionMarker: any,\n clip: any,\n lastValidTouch: any\n ): void {\n if (this.zoomHor) {\n this.pinchTranslateDirection(\n true,\n pinchDown,\n touches,\n transform,\n selectionMarker,\n clip,\n lastValidTouch\n );\n }\n if (this.zoomVert) {\n this.pinchTranslateDirection(\n false,\n pinchDown,\n touches,\n transform,\n selectionMarker,\n clip,\n lastValidTouch\n );\n }\n }\n */\n /**\n * Run translation operations for each direction (horizontal and vertical)\n * independently.\n * @private\n * @function Highcharts.Pointer#pinchTranslateDirection\n * /\n public pinchTranslateDirection(\n horiz: boolean,\n pinchDown: Array<any>,\n touches: Array<PointerEvent>,\n transform: any,\n selectionMarker: any,\n clip: any,\n lastValidTouch: any,\n forcedScale?: number\n ): void {\n const chart = this.chart,\n xy: ('x'|'y') = horiz ? 'x' : 'y',\n XY: ('X'|'Y') = horiz ? 'X' : 'Y',\n sChartXY: ('chartX'|'chartY') = ('chart' + XY) as any,\n wh = horiz ? 'width' : 'height',\n plotLeftTop = (chart as any)['plot' + (horiz ? 'Left' : 'Top')],\n inverted = chart.inverted,\n bounds = chart.bounds[horiz ? 'h' : 'v'],\n singleTouch = pinchDown.length === 1,\n touch0Start = pinchDown[0][sChartXY],\n touch1Start = !singleTouch && pinchDown[1][sChartXY],\n setScale = function (): void {\n // Don't zoom if fingers are too close on this axis\n if (\n typeof touch1Now === 'number' &&\n Math.abs(touch0Start - touch1Start) > 20\n ) {\n scale = forcedScale ||\n Math.abs(touch0Now - touch1Now) /\n Math.abs(touch0Start - touch1Start);\n }\n\n clipXY = ((plotLeftTop - touch0Now) / scale) + touch0Start;\n selectionWH = (chart as any)[\n 'plot' + (horiz ? 'Width' : 'Height')\n ] / scale;\n };\n\n let selectionWH: any,\n selectionXY,\n clipXY: any,\n scale = forcedScale || 1,\n touch0Now = touches[0][sChartXY],\n touch1Now = !singleTouch && touches[1][sChartXY],\n outOfBounds;\n\n // Set the scale, first pass\n setScale();\n\n // The clip position (x or y) is altered if out of bounds, the selection\n // position is not\n selectionXY = clipXY;\n\n // Out of bounds\n if (selectionXY < bounds.min) {\n selectionXY = bounds.min;\n outOfBounds = true;\n } else if (selectionXY + selectionWH > bounds.max) {\n selectionXY = bounds.max - selectionWH;\n outOfBounds = true;\n }\n\n // Is the chart dragged off its bounds, determined by dataMin and\n // dataMax?\n if (outOfBounds) {\n\n // Modify the touchNow position in order to create an elastic drag\n // movement. This indicates to the user that the chart is responsive\n // but can't be dragged further.\n touch0Now -= 0.8 * (touch0Now - lastValidTouch[xy][0]);\n if (typeof touch1Now === 'number') {\n touch1Now -= 0.8 * (touch1Now - lastValidTouch[xy][1]);\n }\n\n // Set the scale, second pass to adapt to the modified touchNow\n // positions\n setScale();\n\n } else {\n lastValidTouch[xy] = [touch0Now, touch1Now];\n }\n\n // Set geometry for clipping, selection and transformation\n if (!inverted) {\n clip[xy] = clipXY - plotLeftTop;\n clip[wh] = selectionWH;\n }\n const scaleKey = inverted ?\n (horiz ? 'scaleY' : 'scaleX') : 'scale' + XY;\n const transformScale = inverted ? 1 / scale : scale;\n\n selectionMarker[wh] = selectionWH;\n selectionMarker[xy] = selectionXY;\n // Invert scale if needed (#19217)\n transform[scaleKey] = scale * (inverted && !horiz ? -1 : 1);\n transform['translate' + XY] = (transformScale * plotLeftTop) +\n (touch0Now - (transformScale * touch0Start));\n }\n */\n /**\n * Reset the tracking by hiding the tooltip, the hover series state and the\n * hover point\n *\n * @function Highcharts.Pointer#reset\n *\n * @param {boolean} [allowMove]\n * Instead of destroying the tooltip altogether, allow moving it if\n * possible.\n *\n * @param {number} [delay]\n */\n Pointer.prototype.reset = function (allowMove, delay) {\n var pointer = this,\n chart = pointer.chart,\n hoverSeries = chart.hoverSeries,\n hoverPoint = chart.hoverPoint,\n hoverPoints = chart.hoverPoints,\n tooltip = chart.tooltip,\n tooltipPoints = tooltip && tooltip.shared ?\n hoverPoints :\n hoverPoint;\n // Check if the points have moved outside the plot area (#1003, #4736,\n // #5101)\n if (allowMove && tooltipPoints) {\n Pointer_splat(tooltipPoints).forEach(function (point) {\n if (point.series.isCartesian &&\n typeof point.plotX === 'undefined') {\n allowMove = false;\n }\n });\n }\n // Just move the tooltip, #349\n if (allowMove) {\n if (tooltip && tooltipPoints && Pointer_splat(tooltipPoints).length) {\n tooltip.refresh(tooltipPoints);\n if (tooltip.shared && hoverPoints) { // #8284\n hoverPoints.forEach(function (point) {\n point.setState(point.state, true);\n if (point.series.isCartesian) {\n if (point.series.xAxis.crosshair) {\n point.series.xAxis\n .drawCrosshair(null, point);\n }\n if (point.series.yAxis.crosshair) {\n point.series.yAxis\n .drawCrosshair(null, point);\n }\n }\n });\n }\n else if (hoverPoint) { // #2500\n hoverPoint.setState(hoverPoint.state, true);\n chart.axes.forEach(function (axis) {\n if (axis.crosshair &&\n hoverPoint.series[axis.coll] === axis) {\n axis.drawCrosshair(null, hoverPoint);\n }\n });\n }\n }\n // Full reset\n }\n else {\n if (hoverPoint) {\n hoverPoint.onMouseOut();\n }\n if (hoverPoints) {\n hoverPoints.forEach(function (point) {\n point.setState();\n });\n }\n if (hoverSeries) {\n hoverSeries.onMouseOut();\n }\n if (tooltip) {\n tooltip.hide(delay);\n }\n if (pointer.unDocMouseMove) {\n pointer.unDocMouseMove = pointer.unDocMouseMove();\n }\n // Remove crosshairs\n chart.axes.forEach(function (axis) {\n axis.hideCrosshair();\n });\n chart.hoverPoints = chart.hoverPoint = void 0;\n }\n };\n /**\n * With line type charts with a single tracker, get the point closest to the\n * mouse. Run Point.onMouseOver and display tooltip for the point or points.\n *\n * @private\n * @function Highcharts.Pointer#runPointActions\n *\n * @emits Highcharts.Point#event:mouseOut\n * @emits Highcharts.Point#event:mouseOver\n */\n Pointer.prototype.runPointActions = function (e, p, force) {\n var pointer = this,\n chart = pointer.chart,\n series = chart.series,\n tooltip = (chart.tooltip && chart.tooltip.options.enabled ?\n chart.tooltip :\n void 0),\n shared = (tooltip ?\n tooltip.shared :\n false);\n var hoverPoint = p || chart.hoverPoint,\n hoverSeries = hoverPoint && hoverPoint.series || chart.hoverSeries;\n var // `onMouseOver` or already hovering a series with directTouch\n isDirectTouch = (!e || e.type !== 'touchmove') && (!!p || ((hoverSeries && hoverSeries.directTouch) &&\n pointer.isDirectTouch)),\n hoverData = this.getHoverData(hoverPoint,\n hoverSeries,\n series,\n isDirectTouch,\n shared,\n e);\n // Update variables from hoverData.\n hoverPoint = hoverData.hoverPoint;\n hoverSeries = hoverData.hoverSeries;\n var points = hoverData.hoverPoints,\n followPointer = hoverSeries &&\n hoverSeries.tooltipOptions.followPointer &&\n !hoverSeries.tooltipOptions.split,\n useSharedTooltip = (shared &&\n hoverSeries &&\n !hoverSeries.noSharedTooltip);\n // Refresh tooltip for kdpoint if new hover point or tooltip was hidden\n // #3926, #4200\n if (hoverPoint &&\n (force ||\n hoverPoint !== chart.hoverPoint ||\n (tooltip && tooltip.isHidden))) {\n (chart.hoverPoints || []).forEach(function (p) {\n if (points.indexOf(p) === -1) {\n p.setState();\n }\n });\n // Set normal state to previous series\n if (chart.hoverSeries !== hoverSeries) {\n hoverSeries.onMouseOver();\n }\n pointer.applyInactiveState(points);\n // Do mouseover on all points (#3919, #3985, #4410, #5622)\n (points || []).forEach(function (p) {\n p.setState('hover');\n });\n // If tracking is on series in stead of on each point,\n // fire mouseOver on hover point. // #4448\n if (chart.hoverPoint) {\n chart.hoverPoint.firePointEvent('mouseOut');\n }\n // Hover point may have been destroyed in the event handlers (#7127)\n if (!hoverPoint.series) {\n return;\n }\n /**\n * Contains all hovered points.\n *\n * @name Highcharts.Chart#hoverPoints\n * @type {Array<Highcharts.Point>|null}\n */\n chart.hoverPoints = points;\n /**\n * Contains the original hovered point.\n *\n * @name Highcharts.Chart#hoverPoint\n * @type {Highcharts.Point|null}\n */\n chart.hoverPoint = hoverPoint;\n /**\n * Hover state should not be lost when axis is updated (#12569)\n * Axis.update runs pointer.reset which uses chart.hoverPoint.state\n * to apply state which does not exist in hoverPoint yet.\n * The mouseOver event should be triggered when hoverPoint\n * is correct.\n */\n hoverPoint.firePointEvent('mouseOver', void 0, function () {\n // Draw tooltip if necessary\n if (tooltip && hoverPoint) {\n tooltip.refresh(useSharedTooltip ? points : hoverPoint, e);\n }\n });\n // Update positions (regardless of kdpoint or hoverPoint)\n }\n else if (followPointer && tooltip && !tooltip.isHidden) {\n var anchor = tooltip.getAnchor([{}],\n e);\n if (chart.isInsidePlot(anchor[0], anchor[1], {\n visiblePlotOnly: true\n })) {\n tooltip.updatePosition({ plotX: anchor[0], plotY: anchor[1] });\n }\n }\n // Start the event listener to pick up the tooltip and crosshairs\n if (!pointer.unDocMouseMove) {\n pointer.unDocMouseMove = Pointer_addEvent(chart.container.ownerDocument, 'mousemove', function (e) {\n var _a,\n _b,\n _c;\n return (_c = (_b = Pointer_charts[(_a = Pointer.hoverChartIndex) !== null && _a !== void 0 ? _a : -1]) === null || _b === void 0 ? void 0 : _b.pointer) === null || _c === void 0 ? void 0 : _c.onDocumentMouseMove(e);\n });\n pointer.eventsToUnbind.push(pointer.unDocMouseMove);\n }\n // Issues related to crosshair #4927, #5269 #5066, #5658\n chart.axes.forEach(function drawAxisCrosshair(axis) {\n var snap = Pointer_pick((axis.crosshair || {}).snap,\n true);\n var point;\n if (snap) {\n point = chart.hoverPoint; // #13002\n if (!point || point.series[axis.coll] !== axis) {\n point = Pointer_find(points, function (p) {\n return p.series && p.series[axis.coll] === axis;\n });\n }\n }\n // Axis has snapping crosshairs, and one of the hover points belongs\n // to axis. Always call drawCrosshair when it is not snap.\n if (point || !snap) {\n axis.drawCrosshair(e, point);\n // Axis has snapping crosshairs, but no hover point belongs to axis\n }\n else {\n axis.hideCrosshair();\n }\n });\n };\n /**\n * Set the JS DOM events on the container and document. This method should\n * contain a one-to-one assignment between methods and their handlers. Any\n * advanced logic should be moved to the handler reflecting the event's\n * name.\n * @private\n * @function Highcharts.Pointer#setDOMEvents\n */\n Pointer.prototype.setDOMEvents = function () {\n var _this = this;\n var container = this.chart.container,\n ownerDoc = container.ownerDocument;\n container.onmousedown = this.onContainerMouseDown.bind(this);\n container.onmousemove = this.onContainerMouseMove.bind(this);\n container.onclick = this.onContainerClick.bind(this);\n this.eventsToUnbind.push(Pointer_addEvent(container, 'mouseenter', this.onContainerMouseEnter.bind(this)), Pointer_addEvent(container, 'mouseleave', this.onContainerMouseLeave.bind(this)));\n if (!Pointer.unbindDocumentMouseUp.some(function (el) { return el.doc === ownerDoc; })) {\n Pointer.unbindDocumentMouseUp.push({\n doc: ownerDoc,\n unbind: Pointer_addEvent(ownerDoc, 'mouseup', this.onDocumentMouseUp.bind(this))\n });\n }\n // In case we are dealing with overflow, reset the chart position when\n // scrolling parent elements\n var parent = this.chart.renderTo.parentElement;\n while (parent && parent.tagName !== 'BODY') {\n this.eventsToUnbind.push(Pointer_addEvent(parent, 'scroll', function () {\n delete _this.chartPosition;\n }));\n parent = parent.parentElement;\n }\n this.eventsToUnbind.push(Pointer_addEvent(container, 'touchstart', this.onContainerTouchStart.bind(this), { passive: false }), Pointer_addEvent(container, 'touchmove', this.onContainerTouchMove.bind(this), { passive: false }));\n if (!Pointer.unbindDocumentTouchEnd) {\n Pointer.unbindDocumentTouchEnd = Pointer_addEvent(ownerDoc, 'touchend', this.onDocumentTouchEnd.bind(this), { passive: false });\n }\n this.setPointerCapture();\n Pointer_addEvent(this.chart, 'redraw', this.setPointerCapture.bind(this));\n };\n /**\n * Sets, or removes on update, pointer events using pointer capture for\n * tooltip.followTouchMove if any series has findNearestPointBy that\n * includes the y dimension.\n * @private\n * @function Highcharts.Pointer#setPointerCapture\n */\n Pointer.prototype.setPointerCapture = function () {\n var _a,\n _b;\n // Only for touch\n if (!Pointer_isTouchDevice) {\n return;\n }\n var pointer = this,\n events = pointer.pointerCaptureEventsToUnbind,\n chart = pointer.chart,\n container = chart.container,\n followTouchMove = Pointer_pick((_a = chart.options.tooltip) === null || _a === void 0 ? void 0 : _a.followTouchMove,\n true),\n shouldHave = followTouchMove && chart.series.some(function (series) { return series.options.findNearestPointBy\n .indexOf('y') > -1; });\n if (!pointer.hasPointerCapture && shouldHave) {\n // Add\n // Bind\n events.push(Pointer_addEvent(container, 'pointerdown', function (e) {\n var _a,\n _b;\n if ((_a = e.target) === null || _a === void 0 ? void 0 : _a.hasPointerCapture(e.pointerId)) {\n (_b = e.target) === null || _b === void 0 ? void 0 : _b.releasePointerCapture(e.pointerId);\n }\n }), Pointer_addEvent(container, 'pointermove', function (e) {\n var _a,\n _b;\n (_b = (_a = chart.pointer) === null || _a === void 0 ? void 0 : _a.getPointFromEvent(e)) === null || _b === void 0 ? void 0 : _b.onMouseOver(e);\n }));\n if (!chart.styledMode) {\n Pointer_css(container, { 'touch-action': 'none' });\n }\n // Mostly for styled mode\n container.className += ' highcharts-no-touch-action';\n pointer.hasPointerCapture = true;\n }\n else if (pointer.hasPointerCapture && !shouldHave) {\n // Remove\n // Unbind\n events.forEach(function (e) { return e(); });\n events.length = 0;\n if (!chart.styledMode) {\n Pointer_css(container, {\n 'touch-action': Pointer_pick((_b = chart.options.chart.style) === null || _b === void 0 ? void 0 : _b['touch-action'], 'manipulation')\n });\n }\n // Mostly for styled mode\n container.className = container.className.replace(' highcharts-no-touch-action', '');\n pointer.hasPointerCapture = false;\n }\n };\n /**\n * Sets the index of the hovered chart and leaves the previous hovered\n * chart, to reset states like tooltip.\n * @private\n * @function Highcharts.Pointer#setHoverChartIndex\n */\n Pointer.prototype.setHoverChartIndex = function (e) {\n var _a;\n var chart = this.chart;\n var hoverChart = Core_Globals.charts[Pointer_pick(Pointer.hoverChartIndex, -1)];\n if (hoverChart &&\n hoverChart !== chart) {\n var relatedTargetObj = { relatedTarget: chart.container };\n if (e && !(e === null || e === void 0 ? void 0 : e.relatedTarget)) {\n // #17192, Non-enumerable properties of \"e\" are dropped with\n // spreading (...e). Using Object.assign ensures integrity.\n Object.assign({}, e, relatedTargetObj);\n }\n (_a = hoverChart.pointer) === null || _a === void 0 ? void 0 : _a.onContainerMouseLeave(e || relatedTargetObj);\n }\n if (!hoverChart ||\n !hoverChart.mouseIsDown) {\n Pointer.hoverChartIndex = chart.index;\n }\n };\n /**\n * General touch handler shared by touchstart and touchmove.\n * @private\n * @function Highcharts.Pointer#touch\n */\n Pointer.prototype.touch = function (e, start) {\n var _a = this,\n chart = _a.chart,\n _b = _a.pinchDown,\n pinchDown = _b === void 0 ? [] : _b;\n var hasMoved,\n isInside;\n this.setHoverChartIndex();\n e = this.normalize(e);\n if (e.touches.length === 1) {\n isInside = chart.isInsidePlot(e.chartX - chart.plotLeft, e.chartY - chart.plotTop, {\n visiblePlotOnly: true\n });\n if (isInside && !chart.openMenu) {\n // Run mouse events and display tooltip etc\n if (start) {\n this.runPointActions(e);\n }\n // Android fires touchmove events after the touchstart even if\n // the finger hasn't moved, or moved only a pixel or two. In iOS\n // however, the touchmove doesn't fire unless the finger moves\n // more than ~4px. So we emulate this behaviour in Android by\n // checking how much it moved, and cancelling on small\n // distances. #3450. Tested and still relevant as of 2024.\n if (e.type === 'touchmove') {\n hasMoved = pinchDown[0] ? // #5266\n (Math.pow(pinchDown[0].chartX - e.chartX, 2) +\n Math.pow(pinchDown[0].chartY - e.chartY, 2)) >= 16 :\n false;\n }\n if (Pointer_pick(hasMoved, true)) {\n this.pinch(e);\n }\n }\n else if (start) {\n // Hide the tooltip on touching outside the plot area (#1203)\n this.reset();\n }\n }\n else if (e.touches.length === 2) {\n this.pinch(e);\n }\n };\n /**\n * Returns true if the chart is set up for zooming by single touch and the\n * event is capable\n * @private\n * @function Highcharts.Pointer#touchSelect\n */\n Pointer.prototype.touchSelect = function (e) {\n return Boolean(this.chart.zooming.singleTouch &&\n e.touches &&\n e.touches.length === 1);\n };\n /**\n * Resolve the zoomType option, this is reset on all touch start and mouse\n * down events.\n * @private\n * @function Highcharts.Pointer#zoomOption\n */\n Pointer.prototype.zoomOption = function (e) {\n var chart = this.chart,\n inverted = chart.inverted;\n var zoomType = chart.zooming.type || '',\n zoomX,\n zoomY;\n // Look for the pinchType option\n if (/touch/.test(e.type)) {\n zoomType = Pointer_pick(chart.zooming.pinchType, zoomType);\n }\n this.zoomX = zoomX = /x/.test(zoomType);\n this.zoomY = zoomY = /y/.test(zoomType);\n this.zoomHor = (zoomX && !inverted) || (zoomY && inverted);\n this.zoomVert = (zoomY && !inverted) || (zoomX && inverted);\n this.hasZoom = zoomX || zoomY;\n };\n Pointer.unbindDocumentMouseUp = [];\n return Pointer;\n}());\n/* *\n *\n * Class Namespace\n *\n * */\n(function (Pointer) {\n /* *\n *\n * Declarations\n *\n * */\n /* *\n *\n * Functions\n *\n * */\n /**\n * @private\n */\n function compose(ChartClass) {\n if (Pointer_pushUnique(Pointer_composed, 'Core.Pointer')) {\n Pointer_addEvent(ChartClass, 'beforeRender', function () {\n /**\n * The Pointer that keeps track of mouse and touch\n * interaction.\n *\n * @memberof Highcharts.Chart\n * @name pointer\n * @type {Highcharts.Pointer}\n * @instance\n */\n this.pointer = new Pointer(this, this.options);\n });\n }\n }\n Pointer.compose = compose;\n})(Pointer || (Pointer = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Core_Pointer = (Pointer);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Chart position and scale.\n *\n * @interface Highcharts.ChartPositionObject\n */ /**\n* @name Highcharts.ChartPositionObject#left\n* @type {number}\n*/ /**\n* @name Highcharts.ChartPositionObject#scaleX\n* @type {number}\n*/ /**\n* @name Highcharts.ChartPositionObject#scaleY\n* @type {number}\n*/ /**\n* @name Highcharts.ChartPositionObject#top\n* @type {number}\n*/\n/**\n * One position in relation to an axis.\n *\n * @interface Highcharts.PointerAxisCoordinateObject\n */ /**\n* Related axis.\n*\n* @name Highcharts.PointerAxisCoordinateObject#axis\n* @type {Highcharts.Axis}\n*/ /**\n* Axis value.\n*\n* @name Highcharts.PointerAxisCoordinateObject#value\n* @type {number}\n*/\n/**\n * Positions in terms of axis values.\n *\n * @interface Highcharts.PointerAxisCoordinatesObject\n */ /**\n* Positions on the x-axis.\n* @name Highcharts.PointerAxisCoordinatesObject#xAxis\n* @type {Array<Highcharts.PointerAxisCoordinateObject>}\n*/ /**\n* Positions on the y-axis.\n* @name Highcharts.PointerAxisCoordinatesObject#yAxis\n* @type {Array<Highcharts.PointerAxisCoordinateObject>}\n*/\n/**\n * Pointer coordinates.\n *\n * @interface Highcharts.PointerCoordinatesObject\n */ /**\n* @name Highcharts.PointerCoordinatesObject#chartX\n* @type {number}\n*/ /**\n* @name Highcharts.PointerCoordinatesObject#chartY\n* @type {number}\n*/\n/**\n * A native browser mouse or touch event, extended with position information\n * relative to the {@link Chart.container}.\n *\n * @interface Highcharts.PointerEventObject\n * @extends global.PointerEvent\n */ /**\n* The X coordinate of the pointer interaction relative to the chart.\n*\n* @name Highcharts.PointerEventObject#chartX\n* @type {number}\n*/ /**\n* The Y coordinate of the pointer interaction relative to the chart.\n*\n* @name Highcharts.PointerEventObject#chartY\n* @type {number}\n*/\n/**\n * Axis-specific data of a selection.\n *\n * @interface Highcharts.SelectDataObject\n */ /**\n* The selected Axis.\n* @name Highcharts.SelectDataObject#axis\n* @type {Highcharts.Axis}\n*/ /**\n* The maximum axis value, either automatic or set manually.\n* @name Highcharts.SelectDataObject#max\n* @type {number}\n*/ /**\n* The minimum axis value, either automatic or set manually.\n* @name Highcharts.SelectDataObject#min\n* @type {number}\n*/\n/**\n * Object for select events.\n * The primary axes are `xAxis[0]` and `yAxis[0]`. Remember the unit of a\n * datetime axis is milliseconds since 1970-01-01 00:00:00.\n *\n * @interface Highcharts.SelectEventObject\n */ /**\n* The related browser event.\n* @name Highcharts.SelectEventObject#originalEvent\n* @type {global.Event}\n*/ /**\n* Prevents the default action for the event, if called.\n* @name Highcharts.SelectEventObject#preventDefault\n* @type {Function}\n*/ /**\n* Indicates a reset event to restore default state.\n* @name Highcharts.SelectEventObject#resetSelection\n* @type {boolean|undefined}\n*/ /**\n* Arrays containing the axes of each dimension and each axis' min and max\n* values.\n* @name Highcharts.SelectEventObject#xAxis\n* @type {Array<Highcharts.SelectDataObject>}\n*/ /**\n* Arrays containing the axes of each dimension and each axis' min and max\n* values.\n* @name Highcharts.SelectEventObject#yAxis\n* @type {Array<Highcharts.SelectDataObject>}\n*/\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Data/DataTableCore.js\n/* *\n *\n * (c) 2009-2024 Highsoft AS\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * Authors:\n * - Sophie Bremer\n * - Gøran Slettemark\n * - Torstein Hønsi\n *\n * */\n\n\nvar DataTableCore_fireEvent = Core_Utilities.fireEvent, DataTableCore_isArray = Core_Utilities.isArray, DataTableCore_objectEach = Core_Utilities.objectEach, DataTableCore_uniqueKey = Core_Utilities.uniqueKey;\n/* *\n *\n * Class\n *\n * */\n/**\n * Class to manage columns and rows in a table structure. It provides methods\n * to add, remove, and manipulate columns and rows, as well as to retrieve data\n * from specific cells.\n *\n * @class\n * @name Highcharts.DataTable\n *\n * @param {Highcharts.DataTableOptions} [options]\n * Options to initialize the new DataTable instance.\n */\nvar DataTableCore = /** @class */ (function () {\n /**\n * Constructs an instance of the DataTable class.\n *\n * @example\n * const dataTable = new Highcharts.DataTableCore({\n * columns: {\n * year: [2020, 2021, 2022, 2023],\n * cost: [11, 13, 12, 14],\n * revenue: [12, 15, 14, 18]\n * }\n * });\n\n *\n * @param {Highcharts.DataTableOptions} [options]\n * Options to initialize the new DataTable instance.\n */\n function DataTableCore(options) {\n if (options === void 0) { options = {}; }\n var _this = this;\n /**\n * Whether the ID was automatic generated or given in the constructor.\n *\n * @name Highcharts.DataTable#autoId\n * @type {boolean}\n */\n this.autoId = !options.id;\n this.columns = {};\n /**\n * ID of the table for indentification purposes.\n *\n * @name Highcharts.DataTable#id\n * @type {string}\n */\n this.id = (options.id || DataTableCore_uniqueKey());\n this.modified = this;\n this.rowCount = 0;\n this.versionTag = DataTableCore_uniqueKey();\n var rowCount = 0;\n DataTableCore_objectEach(options.columns || {}, function (column, columnName) {\n _this.columns[columnName] = column.slice();\n rowCount = Math.max(rowCount, column.length);\n });\n this.applyRowCount(rowCount);\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Applies a row count to the table by setting the `rowCount` property and\n * adjusting the length of all columns.\n *\n * @private\n * @param {number} rowCount The new row count.\n */\n DataTableCore.prototype.applyRowCount = function (rowCount) {\n this.rowCount = rowCount;\n DataTableCore_objectEach(this.columns, function (column) {\n if (DataTableCore_isArray(column)) { // Not on typed array\n column.length = rowCount;\n }\n });\n };\n /**\n * Fetches the given column by the canonical column name. Simplified version\n * of the full `DataTable.getRow` method, always returning by reference.\n *\n * @param {string} columnName\n * Name of the column to get.\n *\n * @return {Highcharts.DataTableColumn|undefined}\n * A copy of the column, or `undefined` if not found.\n */\n DataTableCore.prototype.getColumn = function (columnName, \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n asReference) {\n return this.columns[columnName];\n };\n /**\n * Retrieves all or the given columns. Simplified version of the full\n * `DataTable.getColumns` method, always returning by reference.\n *\n * @param {Array<string>} [columnNames]\n * Column names to retrieve.\n *\n * @return {Highcharts.DataTableColumnCollection}\n * Collection of columns. If a requested column was not found, it is\n * `undefined`.\n */\n DataTableCore.prototype.getColumns = function (columnNames, \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n asReference) {\n var _this = this;\n return (columnNames || Object.keys(this.columns)).reduce(function (columns, columnName) {\n columns[columnName] = _this.columns[columnName];\n return columns;\n }, {});\n };\n /**\n * Retrieves the row at a given index.\n *\n * @param {number} rowIndex\n * Row index to retrieve. First row has index 0.\n *\n * @param {Array<string>} [columnNames]\n * Column names to retrieve.\n *\n * @return {Record<string, number|string|undefined>|undefined}\n * Returns the row values, or `undefined` if not found.\n */\n DataTableCore.prototype.getRow = function (rowIndex, columnNames) {\n var _this = this;\n return (columnNames || Object.keys(this.columns)).map(function (key) { var _a; return (_a = _this.columns[key]) === null || _a === void 0 ? void 0 : _a[rowIndex]; });\n };\n /**\n * Sets cell values for a column. Will insert a new column, if not found.\n *\n * @param {string} columnName\n * Column name to set.\n *\n * @param {Highcharts.DataTableColumn} [column]\n * Values to set in the column.\n *\n * @param {number} [rowIndex=0]\n * Index of the first row to change. (Default: 0)\n *\n * @param {Record<string, (boolean|number|string|null|undefined)>} [eventDetail]\n * Custom information for pending events.\n *\n * @emits #setColumns\n * @emits #afterSetColumns\n */\n DataTableCore.prototype.setColumn = function (columnName, column, rowIndex, eventDetail) {\n var _a;\n if (column === void 0) { column = []; }\n if (rowIndex === void 0) { rowIndex = 0; }\n this.setColumns((_a = {}, _a[columnName] = column, _a), rowIndex, eventDetail);\n };\n /**\n * * Sets cell values for multiple columns. Will insert new columns, if not\n * found. Simplified version of the full `DataTable.setColumns`, limited to\n * full replacement of the columns (undefined `rowIndex`).\n *\n * @param {Highcharts.DataTableColumnCollection} columns\n * Columns as a collection, where the keys are the column names.\n *\n * @param {number} [rowIndex]\n * Index of the first row to change. Keep undefined to reset.\n *\n * @param {Record<string, (boolean|number|string|null|undefined)>} [eventDetail]\n * Custom information for pending events.\n *\n * @emits #setColumns\n * @emits #afterSetColumns\n */\n DataTableCore.prototype.setColumns = function (columns, rowIndex, eventDetail) {\n var _this = this;\n var rowCount = this.rowCount;\n DataTableCore_objectEach(columns, function (column, columnName) {\n _this.columns[columnName] = column.slice();\n rowCount = column.length;\n });\n this.applyRowCount(rowCount);\n if (!(eventDetail === null || eventDetail === void 0 ? void 0 : eventDetail.silent)) {\n DataTableCore_fireEvent(this, 'afterSetColumns');\n this.versionTag = DataTableCore_uniqueKey();\n }\n };\n /**\n * Sets cell values of a row. Will insert a new row if no index was\n * provided, or if the index is higher than the total number of table rows.\n * A simplified version of the full `DateTable.setRow`, limited to objects.\n *\n * @param {Record<string, number|string|undefined>} row\n * Cell values to set.\n *\n * @param {number} [rowIndex]\n * Index of the row to set. Leave `undefind` to add as a new row.\n *\n * @param {boolean} [insert]\n * Whether to insert the row at the given index, or to overwrite the row.\n *\n * @param {Record<string, (boolean|number|string|null|undefined)>} [eventDetail]\n * Custom information for pending events.\n *\n * @emits #afterSetRows\n */\n DataTableCore.prototype.setRow = function (row, rowIndex, insert, eventDetail) {\n if (rowIndex === void 0) { rowIndex = this.rowCount; }\n var columns = this.columns,\n indexRowCount = insert ? this.rowCount + 1 : rowIndex + 1;\n DataTableCore_objectEach(row, function (cellValue, columnName) {\n var column = columns[columnName] ||\n (eventDetail === null || eventDetail === void 0 ? void 0 : eventDetail.addColumns) !== false && new Array(indexRowCount);\n if (column) {\n if (insert) {\n column.splice(rowIndex, 0, cellValue);\n }\n else {\n column[rowIndex] = cellValue;\n }\n columns[columnName] = column;\n }\n });\n if (indexRowCount > this.rowCount) {\n this.applyRowCount(indexRowCount);\n }\n if (!(eventDetail === null || eventDetail === void 0 ? void 0 : eventDetail.silent)) {\n DataTableCore_fireEvent(this, 'afterSetRows');\n this.versionTag = DataTableCore_uniqueKey();\n }\n };\n return DataTableCore;\n}());\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Data_DataTableCore = (DataTableCore);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * A column of values in a data table.\n * @typedef {Array<boolean|null|number|string|undefined>} Highcharts.DataTableColumn\n */ /**\n* A collection of data table columns defined by a object where the key is the\n* column name and the value is an array of the column values.\n* @typedef {Record<string, Highcharts.DataTableColumn>} Highcharts.DataTableColumnCollection\n*/\n/**\n * Options for the `DataTable` or `DataTableCore` classes.\n * @interface Highcharts.DataTableOptions\n */ /**\n* The column options for the data table. The columns are defined by an object\n* where the key is the column ID and the value is an array of the column\n* values.\n*\n* @name Highcharts.DataTableOptions.columns\n* @type {Highcharts.DataTableColumnCollection|undefined}\n*/ /**\n* Custom ID to identify the new DataTable instance.\n*\n* @name Highcharts.DataTableOptions.id\n* @type {string|undefined}\n*/\n(''); // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Legend/LegendSymbol.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar LegendSymbol_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\nvar LegendSymbol_extend = Core_Utilities.extend, LegendSymbol_merge = Core_Utilities.merge, LegendSymbol_pick = Core_Utilities.pick;\n/* *\n *\n * Namespace\n *\n * */\nvar LegendSymbol;\n(function (LegendSymbol) {\n /* *\n *\n * Functions\n *\n * */\n /**\n * Draw a line, a point marker and an area in the legend.\n *\n * @private\n * @function Highcharts.LegendSymbolMixin.areaMarker\n *\n * @param {Highcharts.Legend} legend\n * The legend object.\n */\n function areaMarker(legend, item) {\n lineMarker.call(this, legend, item, true);\n }\n LegendSymbol.areaMarker = areaMarker;\n /**\n * Draw a line and a point marker in the legend.\n *\n * @private\n * @function Highcharts.LegendSymbolMixin.lineMarker\n *\n * @param {Highcharts.Legend} legend\n * The legend object.\n */\n function lineMarker(legend, item, hasArea) {\n var _a,\n _b;\n var legendItem = this.legendItem = this.legendItem || {},\n _c = this,\n chart = _c.chart,\n options = _c.options,\n _d = legend.baseline,\n baseline = _d === void 0 ? 0 : _d,\n symbolWidth = legend.symbolWidth,\n symbolHeight = legend.symbolHeight,\n symbol = this.symbol || 'circle',\n generalRadius = symbolHeight / 2,\n renderer = chart.renderer,\n legendItemGroup = legendItem.group,\n verticalCenter = baseline - Math.round((((_a = legend.fontMetrics) === null || _a === void 0 ? void 0 : _a.b) || symbolHeight) *\n // Render line and marker slightly higher to make room for the\n // area\n (hasArea ? 0.4 : 0.3)),\n attr = {};\n var legendSymbol,\n markerOptions = options.marker,\n lineSizer = 0;\n // Draw the line\n if (!chart.styledMode) {\n attr['stroke-width'] = Math.min(options.lineWidth || 0, 24);\n if (options.dashStyle) {\n attr.dashstyle = options.dashStyle;\n }\n else if (options.linecap !== 'square') {\n attr['stroke-linecap'] = 'round';\n }\n }\n legendItem.line = renderer\n .path()\n .addClass('highcharts-graph')\n .attr(attr)\n .add(legendItemGroup);\n if (hasArea) {\n legendItem.area = renderer\n .path()\n .addClass('highcharts-area')\n .add(legendItemGroup);\n }\n if (attr['stroke-linecap']) {\n lineSizer = Math.min(legendItem.line.strokeWidth(), symbolWidth) / 2;\n }\n if (symbolWidth) {\n var d = [\n ['M',\n lineSizer,\n verticalCenter],\n ['L',\n symbolWidth - lineSizer,\n verticalCenter]\n ];\n legendItem.line.attr({ d: d });\n (_b = legendItem.area) === null || _b === void 0 ? void 0 : _b.attr({\n d: LegendSymbol_spreadArray(LegendSymbol_spreadArray([], d, true), [\n ['L', symbolWidth - lineSizer, baseline],\n ['L', lineSizer, baseline]\n ], false)\n });\n }\n // Draw the marker\n if (markerOptions && markerOptions.enabled !== false && symbolWidth) {\n // Do not allow the marker to be larger than the symbolHeight\n var radius = Math.min(LegendSymbol_pick(markerOptions.radius,\n generalRadius),\n generalRadius);\n // Restrict symbol markers size\n if (symbol.indexOf('url') === 0) {\n markerOptions = LegendSymbol_merge(markerOptions, {\n width: symbolHeight,\n height: symbolHeight\n });\n radius = 0;\n }\n legendItem.symbol = legendSymbol = renderer\n .symbol(symbol, (symbolWidth / 2) - radius, verticalCenter - radius, 2 * radius, 2 * radius, LegendSymbol_extend({ context: 'legend' }, markerOptions))\n .addClass('highcharts-point')\n .add(legendItemGroup);\n legendSymbol.isMarker = true;\n }\n }\n LegendSymbol.lineMarker = lineMarker;\n /**\n * Get the series' symbol in the legend.\n *\n * This method should be overridable to create custom symbols through\n * Highcharts.seriesTypes[type].prototype.drawLegendSymbol.\n *\n * @private\n * @function Highcharts.LegendSymbolMixin.rectangle\n *\n * @param {Highcharts.Legend} legend\n * The legend object\n *\n * @param {Highcharts.Point|Highcharts.Series} item\n * The series (this) or point\n */\n function rectangle(legend, item) {\n var legendItem = item.legendItem || {},\n options = legend.options,\n symbolHeight = legend.symbolHeight,\n square = options.squareSymbol,\n symbolWidth = square ? symbolHeight : legend.symbolWidth;\n legendItem.symbol = this.chart.renderer\n .rect(square ? (legend.symbolWidth - symbolHeight) / 2 : 0, legend.baseline - symbolHeight + 1, // #3988\n symbolWidth, symbolHeight, LegendSymbol_pick(legend.options.symbolRadius, symbolHeight / 2))\n .addClass('highcharts-point')\n .attr({\n zIndex: 3\n })\n .add(legendItem.group);\n }\n LegendSymbol.rectangle = rectangle;\n})(LegendSymbol || (LegendSymbol = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Legend_LegendSymbol = (LegendSymbol);\n\n;// ./code/es5/es-modules/Core/Series/SeriesDefaults.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n * API Options\n *\n * */\n/**\n * General options for all series types.\n *\n * @optionparent plotOptions.series\n */\nvar seriesDefaults = {\n // Base series options\n /**\n * The SVG value used for the `stroke-linecap` and `stroke-linejoin`\n * of a line graph. Round means that lines are rounded in the ends and\n * bends.\n *\n * @type {Highcharts.SeriesLinecapValue}\n * @default round\n * @since 3.0.7\n * @apioption plotOptions.line.linecap\n */\n /**\n * Pixel width of the graph line.\n *\n * @see In styled mode, the line stroke-width can be set with the\n * `.highcharts-graph` class name.\n *\n * @sample {highcharts} highcharts/plotoptions/series-linewidth-general/\n * On all series\n * @sample {highcharts} highcharts/plotoptions/series-linewidth-specific/\n * On one single series\n *\n * @product highcharts highstock\n */\n lineWidth: 2,\n /**\n * For some series, there is a limit that shuts down animation\n * by default when the total number of points in the chart is too high.\n * For example, for a column chart and its derivatives, animation does\n * not run if there is more than 250 points totally. To disable this\n * cap, set `animationLimit` to `Infinity`. This option works if animation\n * is fired on individual points, not on a group of points like e.g. during\n * the initial animation.\n *\n * @sample {highcharts} highcharts/plotoptions/series-animationlimit/\n * Animation limit on updating individual points\n *\n * @type {number}\n * @apioption plotOptions.series.animationLimit\n */\n /**\n * Allow this series' points to be selected by clicking on the graphic\n * (columns, point markers, pie slices, map areas etc).\n *\n * The selected points can be handled by point select and unselect\n * events, or collectively by the [getSelectedPoints\n * ](/class-reference/Highcharts.Chart#getSelectedPoints) function.\n *\n * And alternative way of selecting points is through dragging.\n *\n * @sample {highcharts} highcharts/plotoptions/series-allowpointselect-line/\n * Line\n * @sample {highcharts} highcharts/plotoptions/series-allowpointselect-column/\n * Column\n * @sample {highcharts} highcharts/plotoptions/series-allowpointselect-pie/\n * Pie\n * @sample {highcharts} highcharts/chart/events-selection-points/\n * Select a range of points through a drag selection\n * @sample {highmaps} maps/plotoptions/series-allowpointselect/\n * Map area\n * @sample {highmaps} maps/plotoptions/mapbubble-allowpointselect/\n * Map bubble\n *\n * @since 1.2.0\n *\n * @private\n */\n allowPointSelect: false,\n /**\n * When true, each point or column edge is rounded to its nearest pixel\n * in order to render sharp on screen. In some cases, when there are a\n * lot of densely packed columns, this leads to visible difference\n * in column widths or distance between columns. In these cases,\n * setting `crisp` to `false` may look better, even though each column\n * is rendered blurry.\n *\n * @sample {highcharts} highcharts/plotoptions/column-crisp-false/\n * Crisp is false\n *\n * @since 5.0.10\n * @product highcharts highstock gantt\n *\n * @private\n */\n crisp: true,\n /**\n * If true, a checkbox is displayed next to the legend item to allow\n * selecting the series. The state of the checkbox is determined by\n * the `selected` option.\n *\n * @productdesc {highmaps}\n * Note that if a `colorAxis` is defined, the color axis is represented\n * in the legend, not the series.\n *\n * @sample {highcharts} highcharts/plotoptions/series-showcheckbox-true/\n * Show select box\n *\n * @since 1.2.0\n *\n * @private\n */\n showCheckbox: false,\n /**\n * Enable or disable the initial animation when a series is displayed.\n * The animation can also be set as a configuration object. Please\n * note that this option only applies to the initial animation of the\n * series itself. For other animations, see [chart.animation](\n * #chart.animation) and the animation parameter under the API methods.\n * The following properties are supported:\n *\n * - `defer`: The animation delay time in milliseconds.\n *\n * - `duration`: The duration of the animation in milliseconds. (Defaults to\n * `1000`)\n *\n * - `easing`: Can be a string reference to an easing function set on\n * the `Math` object or a function. See the _Custom easing function_\n * demo below. (Defaults to `easeInOutSine`)\n *\n * Due to poor performance, animation is disabled in old IE browsers\n * for several chart types.\n *\n * @sample {highcharts} highcharts/plotoptions/series-animation-disabled/\n * Animation disabled\n * @sample {highcharts} highcharts/plotoptions/series-animation-slower/\n * Slower animation\n * @sample {highcharts} highcharts/plotoptions/series-animation-easing/\n * Custom easing function\n * @sample {highstock} stock/plotoptions/animation-slower/\n * Slower animation\n * @sample {highstock} stock/plotoptions/animation-easing/\n * Custom easing function\n * @sample {highmaps} maps/plotoptions/series-animation-true/\n * Animation enabled on map series\n * @sample {highmaps} maps/plotoptions/mapbubble-animation-false/\n * Disabled on mapbubble series\n *\n * @type {boolean|Highcharts.AnimationOptionsObject}\n * @default {highcharts} true\n * @default {highstock} true\n * @default {highmaps} false\n *\n * @private\n */\n animation: {\n /** @ignore-option */\n duration: 1000\n },\n /**\n * An additional class name to apply to the series' graphical elements.\n * This option does not replace default class names of the graphical\n * element. Changes to the series' color will also be reflected in a\n * chart's legend and tooltip.\n *\n * @sample {highcharts} highcharts/css/point-series-classname\n * Series and point class name\n *\n * @type {string}\n * @since 5.0.0\n * @apioption plotOptions.series.className\n */\n /**\n * Disable this option to allow series rendering in the whole plotting\n * area.\n *\n * **Note:** Clipping should be always enabled when\n * [chart.zoomType](#chart.zoomType) is set\n *\n * @sample {highcharts} highcharts/plotoptions/series-clip/\n * Disabled clipping\n *\n * @default true\n * @type {boolean}\n * @since 3.0.0\n * @apioption plotOptions.series.clip\n */\n /**\n * The main color of the series. In line type series it applies to the\n * line and the point markers unless otherwise specified. In bar type\n * series it applies to the bars unless a color is specified per point.\n * The default value is pulled from the `options.colors` array.\n *\n * In styled mode, the color can be defined by the\n * [colorIndex](#plotOptions.series.colorIndex) option. Also, the series\n * color can be set with the `.highcharts-series`,\n * `.highcharts-color-{n}`, `.highcharts-{type}-series` or\n * `.highcharts-series-{n}` class, or individual classes given by the\n * `className` option.\n *\n * @productdesc {highmaps}\n * In maps, the series color is rarely used, as most choropleth maps use\n * the color to denote the value of each point. The series color can\n * however be used in a map with multiple series holding categorized\n * data.\n *\n * @sample {highcharts} highcharts/plotoptions/series-color-general/\n * General plot option\n * @sample {highcharts} highcharts/plotoptions/series-color-specific/\n * One specific series\n * @sample {highcharts} highcharts/plotoptions/series-color-area/\n * Area color\n * @sample {highcharts} highcharts/series/infographic/\n * Pattern fill\n * @sample {highmaps} maps/demo/category-map/\n * Category map by multiple series\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @apioption plotOptions.series.color\n */\n /**\n * Styled mode only. A specific color index to use for the series, so its\n * graphic representations are given the class name `highcharts-color-{n}`.\n *\n * Since v11, CSS variables on the form `--highcharts-color-{n}` make\n * changing the color scheme very convenient.\n *\n * @sample {highcharts} highcharts/css/colorindex/ Series and point color\n * index\n *\n * @type {number}\n * @since 5.0.0\n * @apioption plotOptions.series.colorIndex\n */\n /**\n * Whether to connect a graph line across null points, or render a gap\n * between the two points on either side of the null.\n *\n * In stacked area chart, if `connectNulls` is set to true,\n * null points are interpreted as 0.\n *\n * @sample {highcharts} highcharts/plotoptions/series-connectnulls-false/\n * False by default\n * @sample {highcharts} highcharts/plotoptions/series-connectnulls-true/\n * True\n *\n * @type {boolean}\n * @default false\n * @product highcharts highstock\n * @apioption plotOptions.series.connectNulls\n */\n /**\n * You can set the cursor to \"pointer\" if you have click events attached\n * to the series, to signal to the user that the points and lines can\n * be clicked.\n *\n * In styled mode, the series cursor can be set with the same classes\n * as listed under [series.color](#plotOptions.series.color).\n *\n * @sample {highcharts} highcharts/plotoptions/series-cursor-line/\n * On line graph\n * @sample {highcharts} highcharts/plotoptions/series-cursor-column/\n * On columns\n * @sample {highcharts} highcharts/plotoptions/series-cursor-scatter/\n * On scatter markers\n * @sample {highstock} stock/plotoptions/cursor/\n * Pointer on a line graph\n * @sample {highmaps} maps/plotoptions/series-allowpointselect/\n * Map area\n * @sample {highmaps} maps/plotoptions/mapbubble-allowpointselect/\n * Map bubble\n *\n * @type {string|Highcharts.CursorValue}\n * @apioption plotOptions.series.cursor\n */\n /**\n * A reserved subspace to store options and values for customized\n * functionality. Here you can add additional data for your own event\n * callbacks and formatter callbacks.\n *\n * @sample {highcharts} highcharts/point/custom/\n * Point and series with custom data\n *\n * @type {Highcharts.Dictionary<*>}\n * @apioption plotOptions.series.custom\n */\n /**\n * Name of the dash style to use for the graph, or for some series types\n * the outline of each shape.\n *\n * In styled mode, the\n * [stroke dash-array](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/css/series-dashstyle/)\n * can be set with the same classes as listed under\n * [series.color](#plotOptions.series.color).\n *\n * @sample {highcharts} highcharts/plotoptions/series-dashstyle-all/\n * Possible values demonstrated\n * @sample {highcharts} highcharts/plotoptions/series-dashstyle/\n * Chart suitable for printing in black and white\n * @sample {highstock} highcharts/plotoptions/series-dashstyle-all/\n * Possible values demonstrated\n * @sample {highmaps} highcharts/plotoptions/series-dashstyle-all/\n * Possible values demonstrated\n * @sample {highmaps} maps/plotoptions/series-dashstyle/\n * Dotted borders on a map\n *\n * @type {Highcharts.DashStyleValue}\n * @default Solid\n * @since 2.1\n * @apioption plotOptions.series.dashStyle\n */\n /**\n * A description of the series to add to the screen reader information\n * about the series.\n *\n * @type {string}\n * @since 5.0.0\n * @requires modules/accessibility\n * @apioption plotOptions.series.description\n */\n /**\n * Options for the series data sorting.\n *\n * @type {Highcharts.DataSortingOptionsObject}\n * @since 8.0.0\n * @product highcharts highstock\n * @apioption plotOptions.series.dataSorting\n */\n /**\n * Enable or disable data sorting for the series. Use [xAxis.reversed](\n * #xAxis.reversed) to change the sorting order.\n *\n * @sample {highcharts} highcharts/datasorting/animation/\n * Data sorting in scatter-3d\n * @sample {highcharts} highcharts/datasorting/labels-animation/\n * Axis labels animation\n * @sample {highcharts} highcharts/datasorting/dependent-sorting/\n * Dependent series sorting\n * @sample {highcharts} highcharts/datasorting/independent-sorting/\n * Independent series sorting\n *\n * @type {boolean}\n * @since 8.0.0\n * @apioption plotOptions.series.dataSorting.enabled\n */\n /**\n * Whether to allow matching points by name in an update. If this option\n * is disabled, points will be matched by order.\n *\n * @sample {highcharts} highcharts/datasorting/match-by-name/\n * Enabled match by name\n *\n * @type {boolean}\n * @since 8.0.0\n * @apioption plotOptions.series.dataSorting.matchByName\n */\n /**\n * Determines what data value should be used to sort by.\n *\n * @sample {highcharts} highcharts/datasorting/sort-key/\n * Sort key as `z` value\n *\n * @type {string}\n * @since 8.0.0\n * @default y\n * @apioption plotOptions.series.dataSorting.sortKey\n */\n /**\n * Enable or disable the mouse tracking for a specific series. This\n * includes point tooltips and click events on graphs and points. For\n * large datasets it improves performance.\n *\n * @sample {highcharts} highcharts/plotoptions/series-enablemousetracking-false/\n * No mouse tracking\n * @sample {highmaps} maps/plotoptions/series-enablemousetracking-false/\n * No mouse tracking\n *\n * @type {boolean}\n * @default true\n * @apioption plotOptions.series.enableMouseTracking\n */\n enableMouseTracking: true,\n /**\n * Whether to use the Y extremes of the total chart width or only the\n * zoomed area when zooming in on parts of the X axis. By default, the\n * Y axis adjusts to the min and max of the visible data. Cartesian\n * series only.\n *\n * @type {boolean}\n * @default false\n * @since 4.1.6\n * @product highcharts highstock gantt\n * @apioption plotOptions.series.getExtremesFromAll\n */\n /**\n * Highlight only the hovered point and fade the remaining points.\n *\n * Scatter-type series require enabling the 'inactive' marker state and\n * adjusting opacity. Note that this approach could affect performance\n * with large datasets.\n *\n * @sample {highcharts} highcharts/plotoptions/series-inactiveotherpoints-enabled/\n * Chart with inactiveOtherPoints option enabled.\n *\n * @type {boolean}\n * @default false\n * @apioption plotOptions.series.inactiveOtherPoints\n */\n /**\n * An array specifying which option maps to which key in the data point\n * array. This makes it convenient to work with unstructured data arrays\n * from different sources.\n *\n * @see [series.data](#series.line.data)\n *\n * @sample {highcharts|highstock} highcharts/series/data-keys/\n * An extended data array with keys\n * @sample {highcharts|highstock} highcharts/series/data-nested-keys/\n * Nested keys used to access object properties\n *\n * @type {Array<string>}\n * @since 4.1.6\n * @apioption plotOptions.series.keys\n */\n /**\n * The line cap used for line ends and line joins on the graph.\n *\n * @sample highcharts/series-line/linecap/\n * Line cap comparison\n *\n * @type {Highcharts.SeriesLinecapValue}\n * @default round\n * @product highcharts highstock\n * @apioption plotOptions.series.linecap\n */\n /**\n * The [id](#series.id) of another series to link to. Additionally,\n * the value can be \":previous\" to link to the previous series. When\n * two series are linked, only the first one appears in the legend.\n * Toggling the visibility of this also toggles the linked series.\n *\n * If master series uses data sorting and linked series does not have\n * its own sorting definition, the linked series will be sorted in the\n * same order as the master one.\n *\n * @sample {highcharts|highstock} highcharts/demo/arearange-line/\n * Linked series\n *\n * @type {string}\n * @since 3.0\n * @product highcharts highstock gantt\n * @apioption plotOptions.series.linkedTo\n */\n /**\n * Options for the corresponding navigator series if `showInNavigator`\n * is `true` for this series. Available options are the same as any\n * series, documented at [plotOptions](#plotOptions.series) and\n * [series](#series).\n *\n * These options are merged with options in [navigator.series](\n * #navigator.series), and will take precedence if the same option is\n * defined both places.\n *\n * @see [navigator.series](#navigator.series)\n *\n * @type {Highcharts.PlotSeriesOptions}\n * @since 5.0.0\n * @product highstock\n * @apioption plotOptions.series.navigatorOptions\n */\n /**\n * The color for the parts of the graph or points that are below the\n * [threshold](#plotOptions.series.threshold). Note that `zones` takes\n * precedence over the negative color. Using `negativeColor` is\n * equivalent to applying a zone with value of 0.\n *\n * @see In styled mode, a negative color is applied by setting this option\n * to `true` combined with the `.highcharts-negative` class name.\n *\n * @sample {highcharts} highcharts/plotoptions/series-negative-color/\n * Spline, area and column\n * @sample {highcharts} highcharts/plotoptions/arearange-negativecolor/\n * Arearange\n * @sample {highcharts} highcharts/css/series-negative-color/\n * Styled mode\n * @sample {highstock} highcharts/plotoptions/series-negative-color/\n * Spline, area and column\n * @sample {highstock} highcharts/plotoptions/arearange-negativecolor/\n * Arearange\n * @sample {highmaps} highcharts/plotoptions/series-negative-color/\n * Spline, area and column\n * @sample {highmaps} highcharts/plotoptions/arearange-negativecolor/\n * Arearange\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @since 3.0\n * @apioption plotOptions.series.negativeColor\n */\n /**\n * Same as\n * [accessibility.point.descriptionFormat](#accessibility.point.descriptionFormat),\n * but for an individual series. Overrides the chart wide configuration.\n *\n * @type {Function}\n * @since 11.1.0\n * @apioption plotOptions.series.pointDescriptionFormat\n */\n /**\n * Same as\n * [accessibility.series.descriptionFormatter](#accessibility.series.descriptionFormatter),\n * but for an individual series. Overrides the chart wide configuration.\n *\n * @type {Function}\n * @since 5.0.12\n * @apioption plotOptions.series.pointDescriptionFormatter\n */\n /**\n * If no x values are given for the points in a series, `pointInterval`\n * defines the interval of the x values. For example, if a series\n * contains one value every decade starting from year 0, set\n * `pointInterval` to `10`. In true `datetime` axes, the `pointInterval`\n * is set in milliseconds.\n *\n * It can be also be combined with `pointIntervalUnit` to draw irregular\n * time intervals.\n *\n * If combined with `relativeXValue`, an x value can be set on each\n * point, and the `pointInterval` is added x times to the `pointStart`\n * setting.\n *\n * Please note that this options applies to the _series data_, not the\n * interval of the axis ticks, which is independent.\n *\n * @sample {highcharts} highcharts/plotoptions/series-pointstart-datetime/\n * Datetime X axis\n * @sample {highcharts} highcharts/plotoptions/series-relativexvalue/\n * Relative x value\n * @sample {highstock} stock/plotoptions/pointinterval-pointstart/\n * Using pointStart and pointInterval\n * @sample {highstock} stock/plotoptions/relativexvalue/\n * Relative x value\n *\n * @type {number}\n * @default 1\n * @product highcharts highstock gantt\n * @apioption plotOptions.series.pointInterval\n */\n /**\n * On datetime series, this allows for setting the\n * [pointInterval](#plotOptions.series.pointInterval) to irregular time\n * units, `day`, `month` and `year`. A day is usually the same as 24\n * hours, but `pointIntervalUnit` also takes the DST crossover into\n * consideration when dealing with local time. Combine this option with\n * `pointInterval` to draw weeks, quarters, 6 months, 10 years etc.\n *\n * Please note that this options applies to the _series data_, not the\n * interval of the axis ticks, which is independent.\n *\n * @sample {highcharts} highcharts/plotoptions/series-pointintervalunit/\n * One point a month\n * @sample {highstock} highcharts/plotoptions/series-pointintervalunit/\n * One point a month\n *\n * @type {string}\n * @since 4.1.0\n * @product highcharts highstock gantt\n * @validvalue [\"day\", \"month\", \"year\"]\n * @apioption plotOptions.series.pointIntervalUnit\n */\n /**\n * Possible values: `\"on\"`, `\"between\"`, `number`.\n *\n * In a column chart, when pointPlacement is `\"on\"`, the point will not\n * create any padding of the X axis. In a polar column chart this means\n * that the first column points directly north. If the pointPlacement is\n * `\"between\"`, the columns will be laid out between ticks. This is\n * useful for example for visualising an amount between two points in\n * time or in a certain sector of a polar chart.\n *\n * Since Highcharts 3.0.2, the point placement can also be numeric,\n * where 0 is on the axis value, -0.5 is between this value and the\n * previous, and 0.5 is between this value and the next. Unlike the\n * textual options, numeric point placement options won't affect axis\n * padding.\n *\n * Note that pointPlacement needs a [pointRange](\n * #plotOptions.series.pointRange) to work. For column series this is\n * computed, but for line-type series it needs to be set.\n *\n * For the `xrange` series type and gantt charts, if the Y axis is a\n * category axis, the `pointPlacement` applies to the Y axis rather than\n * the (typically datetime) X axis.\n *\n * Defaults to `undefined` in cartesian charts, `\"between\"` in polar\n * charts.\n *\n * @see [xAxis.tickmarkPlacement](#xAxis.tickmarkPlacement)\n *\n * @sample {highcharts|highstock} highcharts/plotoptions/series-pointplacement-between/\n * Between in a column chart\n * @sample {highcharts|highstock} highcharts/plotoptions/series-pointplacement-numeric/\n * Numeric placement for custom layout\n * @sample {highcharts|highstock} maps/plotoptions/heatmap-pointplacement/\n * Placement in heatmap\n *\n * @type {string|number}\n * @since 2.3.0\n * @product highcharts highstock gantt\n * @apioption plotOptions.series.pointPlacement\n */\n /**\n * If no x values are given for the points in a series, `pointStart`\n * defines on what value to start. For example, if a series contains one\n * yearly value starting from 1945, set `pointStart` to 1945.\n *\n * The `pointStart` setting can be a number, or a datetime string that is\n * parsed according to the `time.timezone` setting.\n *\n * If combined with `relativeXValue`, an x value can be set on each\n * point. The x value from the point options is multiplied by\n * `pointInterval` and added to `pointStart` to produce a modified x\n * value.\n *\n * @sample {highcharts} highcharts/plotoptions/series-pointstart-linear/\n * Linear\n * @sample {highcharts} highcharts/plotoptions/series-pointstart-datetime/\n * Datetime\n * @sample {highcharts} highcharts/plotoptions/series-relativexvalue/\n * Relative x value\n * @sample {highstock} stock/plotoptions/pointinterval-pointstart/\n * Using pointStart and pointInterval\n * @sample {highstock} stock/plotoptions/relativexvalue/\n * Relative x value\n *\n * @type {number|string}\n * @default 0\n * @product highcharts highstock gantt\n * @apioption plotOptions.series.pointStart\n */\n /**\n * When true, X values in the data set are relative to the current\n * `pointStart`, `pointInterval` and `pointIntervalUnit` settings. This\n * allows compression of the data for datasets with irregular X values.\n *\n * The real X values are computed on the formula `f(x) = ax + b`, where\n * `a` is the `pointInterval` (optionally with a time unit given by\n * `pointIntervalUnit`), and `b` is the `pointStart`.\n *\n * @sample {highcharts} highcharts/plotoptions/series-relativexvalue/\n * Relative X value\n * @sample {highstock} stock/plotoptions/relativexvalue/\n * Relative X value\n *\n * @type {boolean}\n * @default false\n * @product highcharts highstock\n * @apioption plotOptions.series.relativeXValue\n */\n /**\n * Whether to select the series initially. If `showCheckbox` is true,\n * the checkbox next to the series name in the legend will be checked\n * for a selected series.\n *\n * @sample {highcharts} highcharts/plotoptions/series-selected/\n * One out of two series selected\n *\n * @type {boolean}\n * @default false\n * @since 1.2.0\n * @apioption plotOptions.series.selected\n */\n /**\n * Whether to apply a drop shadow to the graph line. Since 2.3 the\n * shadow can be an object configuration containing `color`, `offsetX`,\n * `offsetY`, `opacity` and `width`.\n *\n * Note that in some cases, like stacked columns or other dense layouts, the\n * series may cast shadows on each other. In that case, the\n * `chart.seriesGroupShadow` allows applying a common drop shadow to the\n * whole series group.\n *\n * @sample {highcharts} highcharts/plotoptions/series-shadow/\n * Shadow enabled\n *\n * @type {boolean|Highcharts.ShadowOptionsObject}\n * @default false\n * @apioption plotOptions.series.shadow\n */\n /**\n * Whether to display this particular series or series type in the\n * legend. Standalone series are shown in legend by default, and linked\n * series are not. Since v7.2.0 it is possible to show series that use\n * colorAxis by setting this option to `true`.\n *\n * @sample {highcharts} highcharts/plotoptions/series-showinlegend/\n * One series in the legend, one hidden\n *\n * @type {boolean}\n * @apioption plotOptions.series.showInLegend\n */\n /**\n * Whether or not to show the series in the navigator. Takes precedence\n * over [navigator.baseSeries](#navigator.baseSeries) if defined.\n *\n * @type {boolean}\n * @since 5.0.0\n * @product highstock\n * @apioption plotOptions.series.showInNavigator\n */\n /**\n * If set to `true`, the accessibility module will skip past the points\n * in this series for keyboard navigation.\n *\n * @type {boolean}\n * @since 5.0.12\n * @apioption plotOptions.series.skipKeyboardNavigation\n */\n /**\n * Whether to stack the values of each series on top of each other.\n * Possible values are `undefined` to disable, `\"normal\"` to stack by\n * value or `\"percent\"`.\n *\n * When stacking is enabled, data must be sorted\n * in ascending X order.\n *\n * Some stacking options are related to specific series types. In the\n * streamgraph series type, the stacking option is set to `\"stream\"`.\n * The second one is `\"overlap\"`, which only applies to waterfall\n * series.\n *\n * @see [yAxis.reversedStacks](#yAxis.reversedStacks)\n *\n * @sample {highcharts} highcharts/plotoptions/series-stacking-line/\n * Line\n * @sample {highcharts} highcharts/plotoptions/series-stacking-column/\n * Column\n * @sample {highcharts} highcharts/plotoptions/series-stacking-bar/\n * Bar\n * @sample {highcharts} highcharts/plotoptions/series-stacking-area/\n * Area\n * @sample {highcharts} highcharts/plotoptions/series-stacking-percent-line/\n * Line\n * @sample {highcharts} highcharts/plotoptions/series-stacking-percent-column/\n * Column\n * @sample {highcharts} highcharts/plotoptions/series-stacking-percent-bar/\n * Bar\n * @sample {highcharts} highcharts/plotoptions/series-stacking-percent-area/\n * Area\n * @sample {highcharts} highcharts/plotoptions/series-waterfall-with-normal-stacking\n * Waterfall with normal stacking\n * @sample {highcharts} highcharts/plotoptions/series-waterfall-with-overlap-stacking\n * Waterfall with overlap stacking\n * @sample {highstock} stock/plotoptions/stacking/\n * Area\n *\n * @type {string}\n * @product highcharts highstock\n * @validvalue [\"normal\", \"overlap\", \"percent\", \"stream\"]\n * @apioption plotOptions.series.stacking\n */\n /**\n * Whether to apply steps to the line. Possible values are `left`,\n * `center` and `right`.\n *\n * @sample {highcharts} highcharts/plotoptions/line-step/\n * Different step line options\n * @sample {highcharts} highcharts/plotoptions/area-step/\n * Stepped, stacked area\n * @sample {highstock} stock/plotoptions/line-step/\n * Step line\n *\n * @type {string}\n * @since 1.2.5\n * @product highcharts highstock\n * @validvalue [\"left\", \"center\", \"right\"]\n * @apioption plotOptions.series.step\n */\n /**\n * The threshold, also called zero level or base level. For line type\n * series this is only used in conjunction with\n * [negativeColor](#plotOptions.series.negativeColor).\n *\n * @see [softThreshold](#plotOptions.series.softThreshold).\n *\n * @type {number|null}\n * @default 0\n * @since 3.0\n * @product highcharts highstock\n * @apioption plotOptions.series.threshold\n */\n /**\n * Set the initial visibility of the series.\n *\n * @sample {highcharts} highcharts/plotoptions/series-visible/\n * Two series, one hidden and one visible\n * @sample {highstock} stock/plotoptions/series-visibility/\n * Hidden series\n *\n * @type {boolean}\n * @default true\n * @apioption plotOptions.series.visible\n */\n /**\n * Defines the Axis on which the zones are applied.\n *\n * @see [zones](#plotOptions.series.zones)\n *\n * @sample {highcharts} highcharts/series/color-zones-zoneaxis-x/\n * Zones on the X-Axis\n * @sample {highstock} highcharts/series/color-zones-zoneaxis-x/\n * Zones on the X-Axis\n *\n * @type {string}\n * @default y\n * @since 4.1.0\n * @product highcharts highstock\n * @apioption plotOptions.series.zoneAxis\n */\n /**\n * General event handlers for the series items. These event hooks can\n * also be attached to the series at run time using the\n * `Highcharts.addEvent` function.\n *\n * @declare Highcharts.SeriesEventsOptionsObject\n *\n * @private\n */\n events: {},\n /**\n * Fires after the series has finished its initial animation, or in case\n * animation is disabled, immediately as the series is displayed.\n *\n * @sample {highcharts} highcharts/plotoptions/series-events-afteranimate/\n * Show label after animate\n * @sample {highstock} highcharts/plotoptions/series-events-afteranimate/\n * Show label after animate\n *\n * @type {Highcharts.SeriesAfterAnimateCallbackFunction}\n * @since 4.0\n * @product highcharts highstock gantt\n * @context Highcharts.Series\n * @apioption plotOptions.series.events.afterAnimate\n */\n /**\n * Fires when the checkbox next to the series' name in the legend is\n * clicked. One parameter, `event`, is passed to the function. The state\n * of the checkbox is found by `event.checked`. The checked item is\n * found by `event.item`. Return `false` to prevent the default action\n * which is to toggle the select state of the series.\n *\n * @sample {highcharts} highcharts/plotoptions/series-events-checkboxclick/\n * Alert checkbox status\n *\n * @type {Highcharts.SeriesCheckboxClickCallbackFunction}\n * @since 1.2.0\n * @context Highcharts.Series\n * @apioption plotOptions.series.events.checkboxClick\n */\n /**\n * Fires when the series is clicked. One parameter, `event`, is passed\n * to the function, containing common event information. Additionally,\n * `event.point` holds a pointer to the nearest point on the graph.\n *\n * @sample {highcharts} highcharts/plotoptions/series-events-click/\n * Alert click info\n * @sample {highstock} stock/plotoptions/series-events-click/\n * Alert click info\n * @sample {highmaps} maps/plotoptions/series-events-click/\n * Display click info in subtitle\n *\n * @type {Highcharts.SeriesClickCallbackFunction}\n * @context Highcharts.Series\n * @apioption plotOptions.series.events.click\n */\n /**\n * Fires when the series is hidden after chart generation time, either\n * by clicking the legend item or by calling `.hide()`.\n *\n * @sample {highcharts} highcharts/plotoptions/series-events-hide/\n * Alert when the series is hidden by clicking the legend item\n *\n * @type {Highcharts.SeriesHideCallbackFunction}\n * @since 1.2.0\n * @context Highcharts.Series\n * @apioption plotOptions.series.events.hide\n */\n /**\n * Fires when the legend item belonging to the series is clicked. One\n * parameter, `event`, is passed to the function. The default action\n * is to toggle the visibility of the series. This can be prevented\n * by returning `false` or calling `event.preventDefault()`.\n *\n * **Note:** This option is deprecated in favor of\n * [legend.events.itemClick](#legend.events.itemClick).\n *\n * @type {Highcharts.SeriesLegendItemClickCallbackFunction}\n * @deprecated 11.4.4\n * @context Highcharts.Series\n * @apioption plotOptions.series.events.legendItemClick\n */\n /**\n * Fires when the mouse leaves the graph. One parameter, `event`, is\n * passed to the function, containing common event information. If the\n * [stickyTracking](#plotOptions.series) option is true, `mouseOut`\n * doesn't happen before the mouse enters another graph or leaves the\n * plot area.\n *\n * @sample {highcharts} highcharts/plotoptions/series-events-mouseover-sticky/\n * With sticky tracking by default\n * @sample {highcharts} highcharts/plotoptions/series-events-mouseover-no-sticky/\n * Without sticky tracking\n *\n * @type {Highcharts.SeriesMouseOutCallbackFunction}\n * @context Highcharts.Series\n * @apioption plotOptions.series.events.mouseOut\n */\n /**\n * Fires when the mouse enters the graph. One parameter, `event`, is\n * passed to the function, containing common event information.\n *\n * @sample {highcharts} highcharts/plotoptions/series-events-mouseover-sticky/\n * With sticky tracking by default\n * @sample {highcharts} highcharts/plotoptions/series-events-mouseover-no-sticky/\n * Without sticky tracking\n *\n * @type {Highcharts.SeriesMouseOverCallbackFunction}\n * @context Highcharts.Series\n * @apioption plotOptions.series.events.mouseOver\n */\n /**\n * Fires when the series is shown after chart generation time, either\n * by clicking the legend item or by calling `.show()`.\n *\n * @sample {highcharts} highcharts/plotoptions/series-events-show/\n * Alert when the series is shown by clicking the legend item.\n *\n * @type {Highcharts.SeriesShowCallbackFunction}\n * @since 1.2.0\n * @context Highcharts.Series\n * @apioption plotOptions.series.events.show\n */\n /**\n * Options for the point markers of line and scatter-like series. Properties\n * like `fillColor`, `lineColor` and `lineWidth` define the visual\n * appearance of the markers. The `symbol` option defines the shape. Other\n * series types, like column series, don't have markers, but have visual\n * options on the series level instead.\n *\n * In styled mode, the markers can be styled with the `.highcharts-point`,\n * `.highcharts-point-hover` and `.highcharts-point-select` class names.\n *\n * @declare Highcharts.PointMarkerOptionsObject\n *\n * @sample {highmaps} maps/demo/mappoint-mapmarker\n * Using the mapmarker symbol for points\n *\n * @private\n */\n marker: {\n /**\n * Enable or disable the point marker. If `undefined`, the markers\n * are hidden when the data is dense, and shown for more widespread\n * data points.\n *\n * @sample {highcharts} highcharts/plotoptions/series-marker-enabled/\n * Disabled markers\n * @sample {highcharts} highcharts/plotoptions/series-marker-enabled-false/\n * Disabled in normal state but enabled on hover\n * @sample {highstock} stock/plotoptions/series-marker/\n * Enabled markers\n *\n * @type {boolean}\n * @default {highcharts} undefined\n * @default {highstock} false\n * @apioption plotOptions.series.marker.enabled\n */\n /**\n * The threshold for how dense the point markers should be before\n * they are hidden, given that `enabled` is not defined. The number\n * indicates the horizontal distance between the two closest points\n * in the series, as multiples of the `marker.radius`. In other\n * words, the default value of 2 means points are hidden if\n * overlapping horizontally.\n *\n * @sample highcharts/plotoptions/series-marker-enabledthreshold\n * A higher threshold\n *\n * @since 6.0.5\n */\n enabledThreshold: 2,\n /**\n * The fill color of the point marker. When `undefined`, the series'\n * or point's color is used.\n *\n * @sample {highcharts} highcharts/plotoptions/series-marker-fillcolor/\n * White fill\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @apioption plotOptions.series.marker.fillColor\n */\n /**\n * Image markers only. Set the image width explicitly. When using\n * this option, a `width` must also be set.\n *\n * @sample {highcharts} highcharts/plotoptions/series-marker-width-height/\n * Fixed width and height\n * @sample {highstock} highcharts/plotoptions/series-marker-width-height/\n * Fixed width and height\n *\n * @type {number}\n * @since 4.0.4\n * @apioption plotOptions.series.marker.height\n */\n /**\n * The color of the point marker's outline. When `undefined`, the\n * series' or point's color is used.\n *\n * @sample {highcharts} highcharts/plotoptions/series-marker-fillcolor/\n * Inherit from series color (undefined)\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n */\n lineColor: \"#ffffff\" /* Palette.backgroundColor */,\n /**\n * The width of the point marker's outline.\n *\n * @sample {highcharts} highcharts/plotoptions/series-marker-fillcolor/\n * 2px blue marker\n */\n lineWidth: 0,\n /**\n * The radius of the point marker.\n *\n * @sample {highcharts} highcharts/plotoptions/series-marker-radius/\n * Bigger markers\n *\n * @default {highstock} 2\n * @default {highcharts} 4\n *\n */\n radius: 4,\n /**\n * A predefined shape or symbol for the marker. When undefined, the\n * symbol is pulled from options.symbols. Other possible values are\n * `'circle'`, `'square'`,`'diamond'`, `'triangle'` and\n * `'triangle-down'`.\n *\n * Additionally, the URL to a graphic can be given on this form:\n * `'url(graphic.png)'`. Note that for the image to be applied to\n * exported charts, its URL needs to be accessible by the export\n * server.\n *\n * Custom callbacks for symbol path generation can also be added to\n * `Highcharts.SVGRenderer.prototype.symbols`. The callback is then\n * used by its method name, as shown in the demo.\n *\n * @sample {highcharts} highcharts/plotoptions/series-marker-symbol/\n * Predefined, graphic and custom markers\n * @sample {highstock} highcharts/plotoptions/series-marker-symbol/\n * Predefined, graphic and custom markers\n * @sample {highmaps} maps/demo/mappoint-mapmarker\n * Using the mapmarker symbol for points\n *\n * @type {string}\n * @apioption plotOptions.series.marker.symbol\n */\n /**\n * Image markers only. Set the image width explicitly. When using\n * this option, a `height` must also be set.\n *\n * @sample {highcharts} highcharts/plotoptions/series-marker-width-height/\n * Fixed width and height\n * @sample {highstock} highcharts/plotoptions/series-marker-width-height/\n * Fixed width and height\n *\n * @type {number}\n * @since 4.0.4\n * @apioption plotOptions.series.marker.width\n */\n /**\n * States for a single point marker.\n *\n * @declare Highcharts.PointStatesOptionsObject\n */\n states: {\n /**\n * The normal state of a single point marker. Currently only\n * used for setting animation when returning to normal state\n * from hover.\n *\n * @declare Highcharts.PointStatesNormalOptionsObject\n */\n normal: {\n /**\n * Animation when returning to normal state after hovering.\n *\n * @type {boolean|Partial<Highcharts.AnimationOptionsObject>}\n */\n animation: true\n },\n /**\n * The hover state for a single point marker.\n *\n * @declare Highcharts.PointStatesHoverOptionsObject\n */\n hover: {\n /**\n * Animation when hovering over the marker.\n *\n * @type {boolean|Partial<Highcharts.AnimationOptionsObject>}\n */\n animation: {\n /** @internal */\n duration: 150\n },\n /**\n * Enable or disable the point marker.\n *\n * @sample {highcharts} highcharts/plotoptions/series-marker-states-hover-enabled/\n * Disabled hover state\n */\n enabled: true,\n /**\n * The fill color of the marker in hover state. When\n * `undefined`, the series' or point's fillColor for normal\n * state is used.\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @apioption plotOptions.series.marker.states.hover.fillColor\n */\n /**\n * The color of the point marker's outline. When\n * `undefined`, the series' or point's lineColor for normal\n * state is used.\n *\n * @sample {highcharts} highcharts/plotoptions/series-marker-states-hover-linecolor/\n * White fill color, black line color\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @apioption plotOptions.series.marker.states.hover.lineColor\n */\n /**\n * The width of the point marker's outline. When\n * `undefined`, the series' or point's lineWidth for normal\n * state is used.\n *\n * @sample {highcharts} highcharts/plotoptions/series-marker-states-hover-linewidth/\n * 3px line width\n *\n * @type {number}\n * @apioption plotOptions.series.marker.states.hover.lineWidth\n */\n /**\n * The radius of the point marker. In hover state, it\n * defaults to the normal state's radius + 2 as per the\n * [radiusPlus](#plotOptions.series.marker.states.hover.radiusPlus)\n * option.\n *\n * @sample {highcharts} highcharts/plotoptions/series-marker-states-hover-radius/\n * 10px radius\n *\n * @type {number}\n * @apioption plotOptions.series.marker.states.hover.radius\n */\n /**\n * The number of pixels to increase the radius of the\n * hovered point.\n *\n * @sample {highcharts} highcharts/plotoptions/series-states-hover-linewidthplus/\n * 5 pixels greater radius on hover\n * @sample {highstock} highcharts/plotoptions/series-states-hover-linewidthplus/\n * 5 pixels greater radius on hover\n *\n * @since 4.0.3\n */\n radiusPlus: 2,\n /**\n * The additional line width for a hovered point.\n *\n * @sample {highcharts} highcharts/plotoptions/series-states-hover-linewidthplus/\n * 2 pixels wider on hover\n * @sample {highstock} highcharts/plotoptions/series-states-hover-linewidthplus/\n * 2 pixels wider on hover\n *\n * @since 4.0.3\n */\n lineWidthPlus: 1\n },\n /**\n * The appearance of the point marker when selected. In order to\n * allow a point to be selected, set the\n * `series.allowPointSelect` option to true.\n *\n * @declare Highcharts.PointStatesSelectOptionsObject\n */\n select: {\n /**\n * Enable or disable visible feedback for selection.\n *\n * @sample {highcharts} highcharts/plotoptions/series-marker-states-select-enabled/\n * Disabled select state\n *\n * @type {boolean}\n * @default true\n * @apioption plotOptions.series.marker.states.select.enabled\n */\n /**\n * The radius of the point marker. In hover state, it\n * defaults to the normal state's radius + 2.\n *\n * @sample {highcharts} highcharts/plotoptions/series-marker-states-select-radius/\n * 10px radius for selected points\n *\n * @type {number}\n * @apioption plotOptions.series.marker.states.select.radius\n */\n /**\n * The fill color of the point marker.\n *\n * @sample {highcharts} highcharts/plotoptions/series-marker-states-select-fillcolor/\n * Solid red discs for selected points\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n */\n fillColor: \"#cccccc\" /* Palette.neutralColor20 */,\n /**\n * The color of the point marker's outline. When\n * `undefined`, the series' or point's color is used.\n *\n * @sample {highcharts} highcharts/plotoptions/series-marker-states-select-linecolor/\n * Red line color for selected points\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n */\n lineColor: \"#000000\" /* Palette.neutralColor100 */,\n /**\n * The width of the point marker's outline.\n *\n * @sample {highcharts} highcharts/plotoptions/series-marker-states-select-linewidth/\n * 3px line width for selected points\n */\n lineWidth: 2\n }\n }\n },\n /**\n * Properties for each single point.\n *\n * @declare Highcharts.PlotSeriesPointOptions\n *\n * @private\n */\n point: {\n /**\n * Fires when a point is clicked. One parameter, `event`, is passed\n * to the function, containing common event information.\n *\n * If the `series.allowPointSelect` option is true, the default\n * action for the point's click event is to toggle the point's\n * select state. Returning `false` cancels this action.\n *\n * @sample {highcharts} highcharts/plotoptions/series-point-events-click/\n * Click marker to alert values\n * @sample {highcharts} highcharts/plotoptions/series-point-events-click-column/\n * Click column\n * @sample {highcharts} highcharts/plotoptions/series-point-events-click-url/\n * Go to URL\n * @sample {highmaps} maps/plotoptions/series-point-events-click/\n * Click marker to display values\n * @sample {highmaps} maps/plotoptions/series-point-events-click-url/\n * Go to URL\n *\n * @type {Highcharts.PointClickCallbackFunction}\n * @context Highcharts.Point\n * @apioption plotOptions.series.point.events.click\n */\n /**\n * Fires when the mouse leaves the area close to the point. One\n * parameter, `event`, is passed to the function, containing common\n * event information.\n *\n * @sample {highcharts} highcharts/plotoptions/series-point-events-mouseover/\n * Show values in the chart's corner on mouse over\n *\n * @type {Highcharts.PointMouseOutCallbackFunction}\n * @context Highcharts.Point\n * @apioption plotOptions.series.point.events.mouseOut\n */\n /**\n * Fires when the mouse enters the area close to the point. One\n * parameter, `event`, is passed to the function, containing common\n * event information.\n *\n * Returning `false` cancels the default behavior, which is to show a\n * tooltip for the point.\n *\n * @sample {highcharts} highcharts/plotoptions/series-point-events-mouseover/\n * Show values in the chart's corner on mouse over\n *\n * @type {Highcharts.PointMouseOverCallbackFunction}\n * @context Highcharts.Point\n * @apioption plotOptions.series.point.events.mouseOver\n */\n /**\n * Fires when the point is removed using the `.remove()` method. One\n * parameter, `event`, is passed to the function. Returning `false`\n * cancels the operation.\n *\n * @sample {highcharts} highcharts/plotoptions/series-point-events-remove/\n * Remove point and confirm\n *\n * @type {Highcharts.PointRemoveCallbackFunction}\n * @since 1.2.0\n * @context Highcharts.Point\n * @apioption plotOptions.series.point.events.remove\n */\n /**\n * Fires when the point is selected either programmatically or\n * following a click on the point. One parameter, `event`, is passed\n * to the function. Returning `false` cancels the operation.\n *\n * @sample {highcharts} highcharts/plotoptions/series-point-events-select/\n * Report the last selected point\n * @sample {highmaps} maps/plotoptions/series-allowpointselect/\n * Report select and unselect\n *\n * @type {Highcharts.PointSelectCallbackFunction}\n * @since 1.2.0\n * @context Highcharts.Point\n * @apioption plotOptions.series.point.events.select\n */\n /**\n * Fires when the point is unselected either programmatically or\n * following a click on the point. One parameter, `event`, is passed\n * to the function.\n * Returning `false` cancels the operation.\n *\n * @sample {highcharts} highcharts/plotoptions/series-point-events-unselect/\n * Report the last unselected point\n * @sample {highmaps} maps/plotoptions/series-allowpointselect/\n * Report select and unselect\n *\n * @type {Highcharts.PointUnselectCallbackFunction}\n * @since 1.2.0\n * @context Highcharts.Point\n * @apioption plotOptions.series.point.events.unselect\n */\n /**\n * Fires when the point is updated programmatically through the\n * `.update()` method. One parameter, `event`, is passed to the\n * function. The new point options can be accessed through\n * `event.options`. Returning `false` cancels the operation.\n *\n * @sample {highcharts} highcharts/plotoptions/series-point-events-update/\n * Confirm point updating\n *\n * @type {Highcharts.PointUpdateCallbackFunction}\n * @since 1.2.0\n * @context Highcharts.Point\n * @apioption plotOptions.series.point.events.update\n */\n /**\n * Events for each single point.\n *\n * @declare Highcharts.PointEventsOptionsObject\n */\n events: {}\n },\n /**\n * Options for the series data labels, appearing next to each data\n * point.\n *\n * Since v6.2.0, multiple data labels can be applied to each single\n * point by defining them as an array of configs.\n *\n * In styled mode, the data labels can be styled with the\n * `.highcharts-data-label-box` and `.highcharts-data-label` class names\n * ([see example](https://www.highcharts.com/samples/highcharts/css/series-datalabels)).\n *\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-enabled\n * Data labels enabled\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-multiple\n * Multiple data labels on a bar series\n * @sample {highcharts} highcharts/css/series-datalabels\n * Styled mode example\n * @sample {highmaps} maps/demo/color-axis\n * Choropleth map with data labels\n * @sample {highmaps} maps/demo/mappoint-datalabels-mapmarker\n * Using data labels as map markers\n *\n * @type {*|Array<*>}\n * @product highcharts highstock highmaps gantt\n *\n * @private\n */\n dataLabels: {\n /**\n * Enable or disable the initial animation when a series is displayed\n * for the `dataLabels`. The animation can also be set as a\n * configuration object. Please note that this option only applies to\n * the initial animation.\n *\n * For other animations, see [chart.animation](#chart.animation) and the\n * animation parameter under the API methods. The following properties\n * are supported:\n *\n * - `defer`: The animation delay time in milliseconds.\n *\n * @sample {highcharts} highcharts/plotoptions/animation-defer/\n * Animation defer settings\n *\n * @type {boolean|Partial<Highcharts.AnimationOptionsObject>}\n * @since 8.2.0\n * @apioption plotOptions.series.dataLabels.animation\n */\n animation: {},\n /**\n * The animation delay time in milliseconds. Set to `0` to render the\n * data labels immediately. As `undefined` inherits defer time from the\n * [series.animation.defer](#plotOptions.series.animation.defer).\n *\n * @type {number}\n * @since 8.2.0\n * @apioption plotOptions.series.dataLabels.animation.defer\n */\n /**\n * The alignment of the data label compared to the point. If `right`,\n * the right side of the label should be touching the point. For points\n * with an extent, like columns, the alignments also dictates how to\n * align it inside the box, as given with the\n * [inside](#plotOptions.column.dataLabels.inside) option. Can be one of\n * `left`, `center` or `right`.\n *\n * @sample {highcharts}\n * highcharts/plotoptions/series-datalabels-align-left/ Left\n * aligned\n * @sample {highcharts}\n * highcharts/plotoptions/bar-datalabels-align-inside-bar/ Data\n * labels inside the bar\n *\n * @type {Highcharts.AlignValue|null}\n */\n align: 'center',\n /**\n * Alignment method for data labels. If set to `plotEdges`, the labels\n * are aligned within the plot area in the direction of the y-axis. So\n * in a regular column chart, the labels are aligned vertically\n * according to the `verticalAlign` setting. In a bar chart, which is\n * inverted, the labels are aligned horizontally according to the\n * `align` setting. Applies to cartesian series only.\n *\n * @sample {highcharts} highcharts/series-bar/datalabels-alignto/\n * Align to plot edges\n *\n * @type {string}\n * @since 11.4.2\n * @apioption plotOptions.series.dataLabels.alignTo\n */\n /**\n * Whether to allow data labels to overlap. To make the labels less\n * sensitive for overlapping, the\n * [dataLabels.padding](#plotOptions.series.dataLabels.padding)\n * can be set to 0.\n *\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-allowoverlap-false/\n * Don't allow overlap\n *\n * @type {boolean}\n * @default false\n * @since 4.1.0\n * @apioption plotOptions.series.dataLabels.allowOverlap\n */\n /**\n * The background color or gradient for the data label. Setting it to\n * `auto` will use the point's color.\n *\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-box/\n * Data labels box options\n * @sample {highmaps} maps/plotoptions/series-datalabels-box/\n * Data labels box options\n * @sample {highmaps} maps/demo/mappoint-datalabels-mapmarker\n * Data labels as map markers\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @since 2.2.1\n * @apioption plotOptions.series.dataLabels.backgroundColor\n */\n /**\n * The border color for the data label. Setting it to `auto` will use\n * the point's color. Defaults to `undefined`.\n *\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-box/\n * Data labels box options\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @since 2.2.1\n * @apioption plotOptions.series.dataLabels.borderColor\n */\n /**\n * The border radius in pixels for the data label.\n *\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-box/\n * Data labels box options\n * @sample {highmaps} maps/plotoptions/series-datalabels-box/\n * Data labels box options\n *\n * @type {number}\n * @default 0\n * @since 2.2.1\n * @apioption plotOptions.series.dataLabels.borderRadius\n */\n /**\n * The border width in pixels for the data label.\n *\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-box/\n * Data labels box options\n *\n * @type {number}\n * @default 0\n * @since 2.2.1\n * @apioption plotOptions.series.dataLabels.borderWidth\n */\n borderWidth: 0,\n /**\n * A class name for the data label. Particularly in styled mode,\n * this can be used to give each series' or point's data label\n * unique styling. In addition to this option, a default color class\n * name is added so that we can give the labels a contrast text\n * shadow.\n *\n * @sample {highcharts} highcharts/css/data-label-contrast/\n * Contrast text shadow\n * @sample {highcharts} highcharts/css/series-datalabels/\n * Styling by CSS\n *\n * @type {string}\n * @since 5.0.0\n * @apioption plotOptions.series.dataLabels.className\n */\n /**\n * This options is deprecated.\n * Use [style.color](#plotOptions.series.dataLabels.style) instead.\n *\n * The text color for the data labels. Defaults to `undefined`. For\n * certain series types, like column or map, the data labels can be\n * drawn inside the points. In this case the data label will be\n * drawn with maximum contrast by default. Additionally, it will be\n * given a `text-outline` style with the opposite color, to further\n * increase the contrast. This can be overridden by setting the\n * `text-outline` style to `none` in the `dataLabels.style` option.\n *\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-color/\n * Red data labels\n * @sample {highmaps} maps/demo/color-axis/\n * White data labels\n *\n * @see [style.color](#plotOptions.series.dataLabels.style)\n *\n * @type {Highcharts.ColorType}\n * @deprecated 10.3\n * @apioption plotOptions.series.dataLabels.color\n */\n /**\n * Whether to hide data labels that are outside the plot area. By\n * default, the data label is moved inside the plot area according\n * to the\n * [overflow](#plotOptions.series.dataLabels.overflow)\n * option.\n *\n * @type {boolean}\n * @default true\n * @since 2.3.3\n * @apioption plotOptions.series.dataLabels.crop\n */\n /**\n * Whether to defer displaying the data labels until the initial\n * series animation has finished. Setting to `false` renders the\n * data label immediately. If set to `true` inherits the defer\n * time set in [plotOptions.series.animation](#plotOptions.series.animation).\n *\n * @since 4.0.0\n * @type {boolean}\n * @product highcharts highstock gantt\n */\n defer: true,\n /**\n * Enable or disable the data labels.\n *\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-enabled/\n * Data labels enabled\n * @sample {highmaps} maps/demo/color-axis/\n * Data labels enabled\n *\n * @type {boolean}\n * @default false\n * @apioption plotOptions.series.dataLabels.enabled\n */\n /**\n * A declarative filter to control of which data labels to display.\n * The declarative filter is designed for use when callback\n * functions are not available, like when the chart options require\n * a pure JSON structure or for use with graphical editors. For\n * programmatic control, use the `formatter` instead, and return\n * `undefined` to disable a single data label.\n *\n * @example\n * filter: {\n * property: 'percentage',\n * operator: '>',\n * value: 4\n * }\n *\n * @sample {highcharts} highcharts/demo/pie-monochrome\n * Data labels filtered by percentage\n *\n * @declare Highcharts.DataLabelsFilterOptionsObject\n * @since 6.0.3\n * @apioption plotOptions.series.dataLabels.filter\n */\n /**\n * The operator to compare by. Can be one of `>`, `<`, `>=`, `<=`,\n * `==`, `===`, `!=` and `!==`.\n *\n * @type {string}\n * @validvalue [\">\", \"<\", \">=\", \"<=\", \"==\", \"===\", \"!=\", \"!==\"]\n * @apioption plotOptions.series.dataLabels.filter.operator\n */\n /**\n * The point property to filter by. Point options are passed\n * directly to properties, additionally there are `y` value,\n * `percentage` and others listed under {@link Highcharts.Point}\n * members.\n *\n * @type {string}\n * @apioption plotOptions.series.dataLabels.filter.property\n */\n /**\n * The value to compare against.\n *\n * @type {number}\n * @apioption plotOptions.series.dataLabels.filter.value\n */\n /**\n * A\n * [format string](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting)\n * for the data label. Available variables are the same as for\n * `formatter`.\n *\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-format/\n * Add a unit\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-format-subexpression/\n * Complex logic in the format string\n * @sample {highmaps} maps/plotoptions/series-datalabels-format/\n * Formatted value in the data label\n *\n * @type {string}\n * @default y\n * @default point.value\n * @since 3.0\n * @apioption plotOptions.series.dataLabels.format\n */\n // eslint-disable-next-line valid-jsdoc\n /**\n * Callback JavaScript function to format the data label. Note that if a\n * `format` is defined, the format takes precedence and the formatter is\n * ignored.\n *\n * @sample {highmaps} maps/plotoptions/series-datalabels-format/\n * Formatted value\n *\n * @type {Highcharts.DataLabelsFormatterCallbackFunction}\n */\n formatter: function () {\n var numberFormatter = this.series.chart.numberFormatter;\n return typeof this.y !== 'number' ?\n '' : numberFormatter(this.y, -1);\n },\n /**\n * For points with an extent, like columns or map areas, whether to\n * align the data label inside the box or to the actual value point.\n * Defaults to `false` in most cases, `true` in stacked columns.\n *\n * @type {boolean}\n * @since 3.0\n * @apioption plotOptions.series.dataLabels.inside\n */\n /**\n * Format for points with the value of null. Works analogously to\n * [format](#plotOptions.series.dataLabels.format). `nullFormat` can\n * be applied only to series which support displaying null points\n * i.e `heatmap` or `tilemap`. Does not work with series that don't\n * display null points, like `line`, `column`, `bar` or `pie`.\n *\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-nullformat/\n * Format data label for null points in heat map\n *\n * @type {boolean|string}\n * @since 7.1.0\n * @apioption plotOptions.series.dataLabels.nullFormat\n */\n /**\n * Callback JavaScript function that defines formatting for points\n * with the value of null. Works analogously to\n * [formatter](#plotOptions.series.dataLabels.formatter).\n * `nullFormatter` can be applied only to series which support\n * displaying null points i.e `heatmap` or `tilemap`. Does not work\n * with series that don't display null points, like `line`, `column`,\n * `bar` or `pie`.\n *\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-nullformat/\n * Format data label for null points in heat map\n *\n * @type {Highcharts.DataLabelsFormatterCallbackFunction}\n * @since 7.1.0\n * @apioption plotOptions.series.dataLabels.nullFormatter\n */\n /**\n * How to handle data labels that flow outside the plot area. The\n * default is `\"justify\"`, which aligns them inside the plot area.\n * For columns and bars, this means it will be moved inside the bar.\n * To display data labels outside the plot area, set `crop` to\n * `false` and `overflow` to `\"allow\"`.\n *\n * @type {Highcharts.DataLabelsOverflowValue}\n * @default justify\n * @since 3.0.6\n * @apioption plotOptions.series.dataLabels.overflow\n */\n /**\n * When either the `borderWidth` or the `backgroundColor` is set,\n * this is the padding within the box.\n *\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-box/\n * Data labels box options\n * @sample {highmaps} maps/plotoptions/series-datalabels-box/\n * Data labels box options\n *\n * @since 2.2.1\n */\n padding: 5,\n /**\n * Aligns data labels relative to points. If `center` alignment is\n * not possible, it defaults to `right`.\n *\n * @type {Highcharts.AlignValue}\n * @default center\n * @apioption plotOptions.series.dataLabels.position\n */\n /**\n * Text rotation in degrees. Note that due to a more complex\n * structure, backgrounds, borders and padding will be lost on a\n * rotated data label.\n *\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-rotation/\n * Vertical labels\n *\n * @type {number}\n * @default 0\n * @apioption plotOptions.series.dataLabels.rotation\n */\n /**\n * The shadow of the box. Works best with `borderWidth` or\n * `backgroundColor`. Since 2.3 the shadow can be an object\n * configuration containing `color`, `offsetX`, `offsetY`, `opacity`\n * and `width`.\n *\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-box/\n * Data labels box options\n *\n * @type {boolean|Highcharts.ShadowOptionsObject}\n * @default false\n * @since 2.2.1\n * @apioption plotOptions.series.dataLabels.shadow\n */\n /**\n * The name of a symbol to use for the border around the label.\n * Symbols are predefined functions on the Renderer object.\n *\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-shape/\n * A callout for annotations\n *\n * @type {string}\n * @default square\n * @since 4.1.2\n * @apioption plotOptions.series.dataLabels.shape\n */\n /**\n * Styles for the label. The default `color` setting is\n * `\"contrast\"`, which is a pseudo color that Highcharts picks up\n * and applies the maximum contrast to the underlying point item,\n * for example the bar in a bar chart.\n *\n * The `textOutline` is a pseudo property that applies an outline of\n * the given width with the given color, which by default is the\n * maximum contrast to the text. So a bright text color will result\n * in a black text outline for maximum readability on a mixed\n * background. In some cases, especially with grayscale text, the\n * text outline doesn't work well, in which cases it can be disabled\n * by setting it to `\"none\"`. When `useHTML` is true, the\n * `textOutline` will not be picked up. In this, case, the same\n * effect can be acheived through the `text-shadow` CSS property.\n *\n * For some series types, where each point has an extent, like for\n * example tree maps, the data label may overflow the point. There\n * are two strategies for handling overflow. By default, the text\n * will wrap to multiple lines. The other strategy is to set\n * `style.textOverflow` to `ellipsis`, which will keep the text on\n * one line plus it will break inside long words.\n *\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-style/\n * Bold labels\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-overflow/\n * Long labels truncated with an ellipsis in a pie\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-overflow-wrap/\n * Long labels are wrapped in a pie\n * @sample {highmaps} maps/demo/color-axis/\n * Bold labels\n *\n * @type {Highcharts.CSSObject}\n * @since 4.1.0\n * @apioption plotOptions.series.dataLabels.style\n */\n style: {\n /** @internal */\n fontSize: '0.7em',\n /** @internal */\n fontWeight: 'bold',\n /** @internal */\n color: 'contrast',\n /** @internal */\n textOutline: '1px contrast'\n },\n /**\n * Options for a label text which should follow marker's shape.\n * Border and background are disabled for a label that follows a\n * path.\n *\n * **Note:** Only SVG-based renderer supports this option. Setting\n * `useHTML` to true will disable this option.\n *\n * @declare Highcharts.DataLabelsTextPathOptionsObject\n * @since 7.1.0\n * @apioption plotOptions.series.dataLabels.textPath\n */\n /**\n * Presentation attributes for the text path.\n *\n * @type {Highcharts.SVGAttributes}\n * @since 7.1.0\n * @apioption plotOptions.series.dataLabels.textPath.attributes\n */\n /**\n * Enable or disable `textPath` option for link's or marker's data\n * labels.\n *\n * @type {boolean}\n * @since 7.1.0\n * @apioption plotOptions.series.dataLabels.textPath.enabled\n */\n /**\n * Whether to\n * [use HTML](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting#html)\n * to render the labels.\n *\n * @type {boolean}\n * @default false\n * @apioption plotOptions.series.dataLabels.useHTML\n */\n /**\n * The vertical alignment of a data label. Can be one of `top`,\n * `middle` or `bottom`. The default value depends on the data, for\n * instance in a column chart, the label is above positive values\n * and below negative values.\n *\n * @type {Highcharts.VerticalAlignValue|null}\n * @since 2.3.3\n */\n verticalAlign: 'bottom',\n /**\n * The x position offset of the label relative to the point in\n * pixels.\n *\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-rotation/\n * Vertical and positioned\n * @sample {highcharts} highcharts/plotoptions/bar-datalabels-align-inside-bar/\n * Data labels inside the bar\n */\n x: 0,\n /**\n * The z index of the data labels. Use a `zIndex` of 6 to display it above\n * the series, or use a `zIndex` of 2 to display it behind the series.\n *\n * @type {number}\n * @default 6\n * @since 2.3.5\n * @apioption plotOptions.series.dataLabels.zIndex\n */\n /**\n * The y position offset of the label relative to the point in\n * pixels.\n *\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-rotation/\n * Vertical and positioned\n */\n y: 0\n },\n /**\n * When the series contains less points than the crop threshold, all\n * points are drawn, even if the points fall outside the visible plot\n * area at the current zoom. The advantage of drawing all points\n * (including markers and columns), is that animation is performed on\n * updates. On the other hand, when the series contains more points than\n * the crop threshold, the series data is cropped to only contain points\n * that fall within the plot area. The advantage of cropping away\n * invisible points is to increase performance on large series.\n *\n * @since 2.2\n * @product highcharts highstock\n *\n * @private\n */\n cropThreshold: 300,\n /**\n * Opacity of a series parts: line, fill (e.g. area) and dataLabels.\n *\n * @see [states.inactive.opacity](#plotOptions.series.states.inactive.opacity)\n *\n * @since 7.1.0\n *\n * @private\n */\n opacity: 1,\n /**\n * The width of each point on the x axis. For example in a column chart\n * with one value each day, the pointRange would be 1 day (= 24 * 3600\n * * 1000 milliseconds). This is normally computed automatically, but\n * this option can be used to override the automatic value.\n *\n * @product highstock\n *\n * @private\n */\n pointRange: 0,\n /**\n * When this is true, the series will not cause the Y axis to cross\n * the zero plane (or [threshold](#plotOptions.series.threshold) option)\n * unless the data actually crosses the plane.\n *\n * For example, if `softThreshold` is `false`, a series of 0, 1, 2,\n * 3 will make the Y axis show negative values according to the\n * `minPadding` option. If `softThreshold` is `true`, the Y axis starts\n * at 0.\n *\n * @since 4.1.9\n * @product highcharts highstock\n *\n * @private\n */\n softThreshold: true,\n /**\n * @declare Highcharts.SeriesStatesOptionsObject\n *\n * @private\n */\n states: {\n /**\n * The normal state of a series, or for point items in column, pie\n * and similar series. Currently only used for setting animation\n * when returning to normal state from hover.\n *\n * @declare Highcharts.SeriesStatesNormalOptionsObject\n */\n normal: {\n /**\n * Animation when returning to normal state after hovering.\n *\n * @type {boolean|Partial<Highcharts.AnimationOptionsObject>}\n */\n animation: true\n },\n /**\n * Options for the hovered series. These settings override the\n * normal state options when a series is moused over or touched.\n *\n * @declare Highcharts.SeriesStatesHoverOptionsObject\n */\n hover: {\n /**\n * Enable separate styles for the hovered series to visualize\n * that the user hovers either the series itself or the legend.\n *\n * @sample {highcharts} highcharts/plotoptions/series-states-hover-enabled/\n * Line\n * @sample {highcharts} highcharts/plotoptions/series-states-hover-enabled-column/\n * Column\n * @sample {highcharts} highcharts/plotoptions/series-states-hover-enabled-pie/\n * Pie\n *\n * @type {boolean}\n * @default true\n * @since 1.2\n * @apioption plotOptions.series.states.hover.enabled\n */\n /**\n * Animation setting for hovering the graph in line-type series.\n *\n * @type {boolean|Partial<Highcharts.AnimationOptionsObject>}\n * @since 5.0.8\n * @product highcharts highstock\n */\n animation: {\n /**\n * The duration of the hover animation in milliseconds. By\n * default the hover state animates quickly in, and slowly\n * back to normal.\n *\n * @internal\n */\n duration: 150\n },\n /**\n * Pixel width of the graph line. By default this property is\n * undefined, and the `lineWidthPlus` property dictates how much\n * to increase the linewidth from normal state.\n *\n * @sample {highcharts} highcharts/plotoptions/series-states-hover-linewidth/\n * 5px line on hover\n *\n * @type {number}\n * @product highcharts highstock\n * @apioption plotOptions.series.states.hover.lineWidth\n */\n /**\n * The additional line width for the graph of a hovered series.\n *\n * @sample {highcharts} highcharts/plotoptions/series-states-hover-linewidthplus/\n * 5 pixels wider\n * @sample {highstock} highcharts/plotoptions/series-states-hover-linewidthplus/\n * 5 pixels wider\n *\n * @since 4.0.3\n * @product highcharts highstock\n */\n lineWidthPlus: 1,\n /**\n * In Highcharts 1.0, the appearance of all markers belonging\n * to the hovered series. For settings on the hover state of the\n * individual point, see\n * [marker.states.hover](#plotOptions.series.marker.states.hover).\n *\n * @deprecated\n *\n * @extends plotOptions.series.marker\n * @excluding states, symbol\n * @product highcharts highstock\n */\n marker: {\n // `lineWidth: base + 1`,\n // `radius: base + 1`\n },\n /**\n * Options for the halo appearing around the hovered point in\n * line-type series as well as outside the hovered slice in pie\n * charts. By default the halo is filled by the current point or\n * series color with an opacity of 0.25\\. The halo can be\n * disabled by setting the `halo` option to `null`.\n *\n * In styled mode, the halo is styled with the\n * `.highcharts-halo` class, with colors inherited from\n * `.highcharts-color-{n}`.\n *\n * @sample {highcharts} highcharts/plotoptions/halo/\n * Halo options\n * @sample {highstock} highcharts/plotoptions/halo/\n * Halo options\n *\n * @declare Highcharts.SeriesStatesHoverHaloOptionsObject\n * @type {null|*}\n * @since 4.0\n * @product highcharts highstock\n */\n halo: {\n /**\n * A collection of SVG attributes to override the appearance\n * of the halo, for example `fill`, `stroke` and\n * `stroke-width`.\n *\n * @type {Highcharts.SVGAttributes}\n * @since 4.0\n * @product highcharts highstock\n * @apioption plotOptions.series.states.hover.halo.attributes\n */\n /**\n * The pixel size of the halo. For point markers this is the\n * radius of the halo. For pie slices it is the width of the\n * halo outside the slice. For bubbles it defaults to 5 and\n * is the width of the halo outside the bubble.\n *\n * @since 4.0\n * @product highcharts highstock\n */\n size: 10,\n /**\n * Opacity for the halo unless a specific fill is overridden\n * using the `attributes` setting. Note that Highcharts is\n * only able to apply opacity to colors of hex or rgb(a)\n * formats.\n *\n * @since 4.0\n * @product highcharts highstock\n */\n opacity: 0.25\n }\n },\n /**\n * Specific options for point in selected states, after being\n * selected by\n * [allowPointSelect](#plotOptions.series.allowPointSelect)\n * or programmatically.\n *\n * @sample maps/plotoptions/series-allowpointselect/\n * Allow point select demo\n *\n * @declare Highcharts.SeriesStatesSelectOptionsObject\n * @extends plotOptions.series.states.hover\n * @excluding brightness\n */\n select: {\n animation: {\n /** @internal */\n duration: 0\n }\n },\n /**\n * The opposite state of a hover for series.\n *\n * @sample highcharts/plotoptions/series-states-inactive-disabled\n * Disabled inactive state\n *\n * @declare Highcharts.SeriesStatesInactiveOptionsObject\n */\n inactive: {\n /**\n * Enable or disable the inactive state for a series\n *\n * @sample highcharts/plotoptions/series-states-inactive-disabled\n * Disabled inactive state\n *\n * @type {boolean}\n * @default true\n * @apioption plotOptions.series.states.inactive.enabled\n */\n /**\n * The animation for entering the inactive state.\n *\n * @type {boolean|Partial<Highcharts.AnimationOptionsObject>}\n */\n animation: {\n /** @internal */\n duration: 150\n },\n /**\n * Opacity of series elements (dataLabels, line, area).\n *\n * @type {number}\n */\n opacity: 0.2\n }\n },\n /**\n * Sticky tracking of mouse events. When true, the `mouseOut` event on a\n * series isn't triggered until the mouse moves over another series, or\n * out of the plot area. When false, the `mouseOut` event on a series is\n * triggered when the mouse leaves the area around the series' graph or\n * markers. This also implies the tooltip when not shared. When\n * `stickyTracking` is false and `tooltip.shared` is false, the tooltip\n * will be hidden when moving the mouse between series. Defaults to true\n * for line and area type series, but to false for columns, pies etc.\n *\n * **Note:** The boost module will force this option because of\n * technical limitations.\n *\n * @sample {highcharts} highcharts/plotoptions/series-stickytracking-true/\n * True by default\n * @sample {highcharts} highcharts/plotoptions/series-stickytracking-false/\n * False\n *\n * @default {highcharts} true\n * @default {highstock} true\n * @default {highmaps} false\n * @since 2.0\n *\n * @private\n */\n stickyTracking: true,\n /**\n * A configuration object for the tooltip rendering of each single\n * series. Properties are inherited from [tooltip](#tooltip), but only\n * the following properties can be defined on a series level.\n *\n * @declare Highcharts.SeriesTooltipOptionsObject\n * @since 2.3\n * @extends tooltip\n * @excluding animation, backgroundColor, borderColor, borderRadius,\n * borderWidth, className, crosshairs, enabled, formatter,\n * headerShape, hideDelay, outside, padding, positioner,\n * shadow, shape, shared, snap, split, stickOnContact,\n * style, useHTML\n * @apioption plotOptions.series.tooltip\n */\n /**\n * When a series contains a `data` array that is longer than this, the\n * Series class looks for data configurations of plain numbers or arrays of\n * numbers. The first and last valid points are checked. If found, the rest\n * of the data is assumed to be the same. This saves expensive data checking\n * and indexing in long series, and makes data-heavy charts render faster.\n *\n * Set it to `0` disable.\n *\n * Note:\n * - In boost mode turbo threshold is forced. Only array of numbers or two\n * dimensional arrays are allowed.\n * - In version 11.4.3 and earlier, if object configurations were passed\n * beyond the turbo threshold, a warning was logged in the console and the\n * data series didn't render.\n *\n * @since 2.2\n * @product highcharts highstock gantt\n *\n * @private\n */\n turboThreshold: 1000,\n /**\n * An array defining zones within a series. Zones can be applied to the\n * X axis, Y axis or Z axis for bubbles, according to the `zoneAxis`\n * option. The zone definitions have to be in ascending order regarding\n * to the value.\n *\n * In styled mode, the color zones are styled with the\n * `.highcharts-zone-{n}` class, or custom classed from the `className`\n * option\n * ([view live demo](https://jsfiddle.net/gh/get/library/pure/highcharts/highcharts/tree/master/samples/highcharts/css/color-zones/)).\n *\n * @see [zoneAxis](#plotOptions.series.zoneAxis)\n *\n * @sample {highcharts} highcharts/series/color-zones-simple/\n * Color zones\n * @sample {highstock} highcharts/series/color-zones-simple/\n * Color zones\n *\n * @declare Highcharts.SeriesZonesOptionsObject\n * @type {Array<*>}\n * @since 4.1.0\n * @product highcharts highstock\n * @apioption plotOptions.series.zones\n */\n /**\n * Styled mode only. A custom class name for the zone.\n *\n * @sample highcharts/css/color-zones/\n * Zones styled by class name\n *\n * @type {string}\n * @since 5.0.0\n * @apioption plotOptions.series.zones.className\n */\n /**\n * Defines the color of the series.\n *\n * @see [series color](#plotOptions.series.color)\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @since 4.1.0\n * @product highcharts highstock\n * @apioption plotOptions.series.zones.color\n */\n /**\n * A name for the dash style to use for the graph.\n *\n * @see [plotOptions.series.dashStyle](#plotOptions.series.dashStyle)\n *\n * @sample {highcharts|highstock} highcharts/series/color-zones-dashstyle-dot/\n * Dashed line indicates prognosis\n *\n * @type {Highcharts.DashStyleValue}\n * @since 4.1.0\n * @product highcharts highstock\n * @apioption plotOptions.series.zones.dashStyle\n */\n /**\n * Defines the fill color for the series (in area type series)\n *\n * @see [fillColor](#plotOptions.area.fillColor)\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @since 4.1.0\n * @product highcharts highstock\n * @apioption plotOptions.series.zones.fillColor\n */\n /**\n * The value up to where the zone extends, if undefined the zones\n * stretches to the last value in the series.\n *\n * @type {number}\n * @since 4.1.0\n * @product highcharts highstock\n * @apioption plotOptions.series.zones.value\n */\n /**\n * When using dual or multiple color axes, this number defines which\n * colorAxis the particular series is connected to. It refers to\n * either the\n * {@link #colorAxis.id|axis id}\n * or the index of the axis in the colorAxis array, with 0 being the\n * first. Set this option to false to prevent a series from connecting\n * to the default color axis.\n *\n * Since v7.2.0 the option can also be an axis id or an axis index\n * instead of a boolean flag.\n *\n * @sample highcharts/coloraxis/coloraxis-with-pie/\n * Color axis with pie series\n * @sample highcharts/coloraxis/multiple-coloraxis/\n * Multiple color axis\n *\n * @type {number|string|boolean}\n * @default 0\n * @product highcharts highstock highmaps\n * @apioption plotOptions.series.colorAxis\n */\n /**\n * Determines what data value should be used to calculate point color\n * if `colorAxis` is used. Requires to set `min` and `max` if some\n * custom point property is used or if approximation for data grouping\n * is set to `'sum'`.\n *\n * @sample highcharts/coloraxis/custom-color-key/\n * Custom color key\n * @sample highcharts/coloraxis/color-key-with-stops/\n * Custom colorKey with color axis stops\n * @sample highcharts/coloraxis/changed-default-color-key/\n * Changed default color key\n *\n * @type {string}\n * @default y\n * @since 7.2.0\n * @product highcharts highstock highmaps\n * @apioption plotOptions.series.colorKey\n */\n /**\n * What type of legend symbol to render for this series. Can be one of\n * `areaMarker`, `lineMarker` or `rectangle`.\n *\n * @validvalue [\"areaMarker\", \"lineMarker\", \"rectangle\"]\n *\n * @sample {highcharts} highcharts/series/legend-symbol/\n * Change the legend symbol\n *\n * @type {string}\n * @default rectangle\n * @since 11.0.1\n * @apioption plotOptions.series.legendSymbol\n */\n /**\n * Defines the color of the legend symbol for this series. Defaults to\n * undefined, in which case the series color is used. Does not work with\n * styled mode.\n *\n * @sample {highcharts|highstock} highcharts/series/legend-symbol-color/\n * Change the legend symbol color\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @default undefined\n * @since 12.0.0\n * @product highcharts highstock highmaps\n * @apioption plotOptions.series.legendSymbolColor\n */\n /**\n * Determines whether the series should look for the nearest point\n * in both dimensions or just the x-dimension when hovering the series.\n * Defaults to `'xy'` for scatter series and `'x'` for most other\n * series. If the data has duplicate x-values, it is recommended to\n * set this to `'xy'` to allow hovering over all points.\n *\n * Applies only to series types using nearest neighbor search (not\n * direct hover) for tooltip.\n *\n * @sample {highcharts} highcharts/series/findnearestpointby/\n * Different hover behaviors\n * @sample {highstock} highcharts/series/findnearestpointby/\n * Different hover behaviors\n * @sample {highmaps} highcharts/series/findnearestpointby/\n * Different hover behaviors\n *\n * @since 5.0.10\n * @validvalue [\"x\", \"xy\"]\n *\n * @private\n */\n findNearestPointBy: 'x'\n};\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var SeriesDefaults = (seriesDefaults);\n\n;// ./code/es5/es-modules/Core/Series/SeriesRegistry.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar SeriesRegistry_extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d,\n b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d,\n b) { d.__proto__ = b; }) ||\n function (d,\n b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\nvar SeriesRegistry_defaultOptions = Defaults.defaultOptions;\n\n\nvar SeriesRegistry_extend = Core_Utilities.extend, SeriesRegistry_extendClass = Core_Utilities.extendClass, SeriesRegistry_merge = Core_Utilities.merge;\n/* *\n *\n * Namespace\n *\n * */\nvar SeriesRegistry;\n(function (SeriesRegistry) {\n /* *\n *\n * Properties\n *\n * */\n /**\n * @internal\n * @todo Move `Globals.seriesTypes` code to her.\n */\n SeriesRegistry.seriesTypes = Core_Globals.seriesTypes;\n /* *\n *\n * Functions\n *\n * */\n /**\n * Registers class pattern of a series.\n *\n * @private\n */\n function registerSeriesType(seriesType, SeriesClass) {\n var defaultPlotOptions = SeriesRegistry_defaultOptions.plotOptions || {},\n seriesOptions = SeriesClass.defaultOptions,\n seriesProto = SeriesClass.prototype;\n seriesProto.type = seriesType;\n if (!seriesProto.pointClass) {\n seriesProto.pointClass = Series_Point;\n }\n if (SeriesRegistry.seriesTypes[seriesType]) {\n return false;\n }\n if (seriesOptions) {\n defaultPlotOptions[seriesType] = seriesOptions;\n }\n SeriesRegistry.seriesTypes[seriesType] = SeriesClass;\n return true;\n }\n SeriesRegistry.registerSeriesType = registerSeriesType;\n /**\n * Old factory to create new series prototypes.\n *\n * @deprecated\n * @function Highcharts.seriesType\n *\n * @param {string} type\n * The series type name.\n *\n * @param {string} parent\n * The parent series type name. Use `line` to inherit from the basic\n * {@link Series} object.\n *\n * @param {Highcharts.SeriesOptionsType|Highcharts.Dictionary<*>} options\n * The additional default options that are merged with the parent's options.\n *\n * @param {Highcharts.Dictionary<*>} [props]\n * The properties (functions and primitives) to set on the new prototype.\n *\n * @param {Highcharts.Dictionary<*>} [pointProps]\n * Members for a series-specific extension of the {@link Point} prototype if\n * needed.\n *\n * @return {Highcharts.Series}\n * The newly created prototype as extended from {@link Series} or its\n * derivatives.\n */\n function seriesType(type, parent, options, seriesProto, pointProto) {\n var defaultPlotOptions = SeriesRegistry_defaultOptions.plotOptions || {};\n parent = parent || '';\n // Merge the options\n defaultPlotOptions[type] = SeriesRegistry_merge(defaultPlotOptions[parent], options);\n // Create the class\n delete SeriesRegistry.seriesTypes[type];\n registerSeriesType(type, SeriesRegistry_extendClass(SeriesRegistry.seriesTypes[parent] || function () { }, seriesProto));\n SeriesRegistry.seriesTypes[type].prototype.type = type;\n // Create the point class if needed\n if (pointProto) {\n var PointClass = /** @class */ (function (_super) {\n SeriesRegistry_extends(PointClass, _super);\n function PointClass() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return PointClass;\n }(Series_Point));\n SeriesRegistry_extend(PointClass.prototype, pointProto);\n SeriesRegistry.seriesTypes[type].prototype.pointClass = PointClass;\n }\n return SeriesRegistry.seriesTypes[type];\n }\n SeriesRegistry.seriesType = seriesType;\n})(SeriesRegistry || (SeriesRegistry = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Series_SeriesRegistry = (SeriesRegistry);\n\n;// ./code/es5/es-modules/Core/Series/Series.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar Series_assign = (undefined && undefined.__assign) || function () {\n Series_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return Series_assign.apply(this, arguments);\n};\nvar Series_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\nvar Series_animObject = AnimationUtilities.animObject, Series_setAnimation = AnimationUtilities.setAnimation;\n\n\nvar Series_defaultOptions = Defaults.defaultOptions;\n\nvar Series_registerEventOptions = Core_Foundation.registerEventOptions;\n\nvar Series_svg = Core_Globals.svg, Series_win = Core_Globals.win;\n\n\n\n\nvar seriesTypes = Series_SeriesRegistry.seriesTypes;\n\n\nvar Series_arrayMax = Core_Utilities.arrayMax, Series_arrayMin = Core_Utilities.arrayMin, Series_clamp = Core_Utilities.clamp, Series_correctFloat = Core_Utilities.correctFloat, Series_crisp = Core_Utilities.crisp, Series_defined = Core_Utilities.defined, Series_destroyObjectProperties = Core_Utilities.destroyObjectProperties, Series_diffObjects = Core_Utilities.diffObjects, Series_erase = Core_Utilities.erase, Series_error = Core_Utilities.error, Series_extend = Core_Utilities.extend, Series_find = Core_Utilities.find, Series_fireEvent = Core_Utilities.fireEvent, Series_getClosestDistance = Core_Utilities.getClosestDistance, Series_getNestedProperty = Core_Utilities.getNestedProperty, Series_insertItem = Core_Utilities.insertItem, Series_isArray = Core_Utilities.isArray, Series_isNumber = Core_Utilities.isNumber, Series_isString = Core_Utilities.isString, Series_merge = Core_Utilities.merge, Series_objectEach = Core_Utilities.objectEach, Series_pick = Core_Utilities.pick, Series_removeEvent = Core_Utilities.removeEvent, Series_syncTimeout = Core_Utilities.syncTimeout;\n/* *\n *\n * Class\n *\n * */\n/**\n * This is the base series prototype that all other series types inherit from.\n * A new series is initialized either through the\n * [series](https://api.highcharts.com/highcharts/series)\n * option structure, or after the chart is initialized, through\n * {@link Highcharts.Chart#addSeries}.\n *\n * The object can be accessed in a number of ways. All series and point event\n * handlers give a reference to the `series` object. The chart object has a\n * {@link Highcharts.Chart#series|series} property that is a collection of all\n * the chart's series. The point objects and axis objects also have the same\n * reference.\n *\n * Another way to reference the series programmatically is by `id`. Add an id\n * in the series configuration options, and get the series object by\n * {@link Highcharts.Chart#get}.\n *\n * Configuration options for the series are given in three levels. Options for\n * all series in a chart are given in the\n * [plotOptions.series](https://api.highcharts.com/highcharts/plotOptions.series)\n * object. Then options for all series of a specific type\n * are given in the plotOptions of that type, for example `plotOptions.line`.\n * Next, options for one single series are given in the series array, or as\n * arguments to `chart.addSeries`.\n *\n * The data in the series is stored in various arrays.\n *\n * - First, `series.options.data` contains all the original config options for\n * each point whether added by options or methods like `series.addPoint`.\n *\n * - The `series.dataTable` refers to an instance of [DataTableCore](https://api.highcharts.com/class-reference/Highcharts.Data)\n * or `DataTable` that contains the data in a tabular format. Individual\n * columns can be read from `series.getColumn()`.\n *\n * - Next, `series.data` contains those values converted to points, but in case\n * the series data length exceeds the `cropThreshold`, or if the data is\n * grouped, `series.data` doesn't contain all the points. It only contains the\n * points that have been created on demand.\n *\n * - Then there's `series.points` that contains all currently visible point\n * objects. In case of cropping, the cropped-away points are not part of this\n * array. The `series.points` array starts at `series.cropStart` compared to\n * `series.data` and `series.options.data`. If however the series data is\n * grouped, these can't be correlated one to one.\n *\n * @class\n * @name Highcharts.Series\n *\n * @param {Highcharts.Chart} chart\n * The chart instance.\n *\n * @param {Highcharts.SeriesOptionsType|object} options\n * The series options.\n */\nvar Series = /** @class */ (function () {\n function Series() {\n /* *\n *\n * Static Properties\n *\n * */\n this.zoneAxis = 'y';\n // eslint-enable valid-jsdoc\n }\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n Series.prototype.init = function (chart, userOptions) {\n var _a;\n Series_fireEvent(this, 'init', { options: userOptions });\n // Create the data table\n (_a = this.dataTable) !== null && _a !== void 0 ? _a : (this.dataTable = new Data_DataTableCore());\n var series = this,\n chartSeries = chart.series;\n // The 'eventsToUnbind' property moved from prototype into the\n // Series init to avoid reference to the same array between\n // the different series and charts. #12959, #13937\n this.eventsToUnbind = [];\n /**\n * Read only. The chart that the series belongs to.\n *\n * @name Highcharts.Series#chart\n * @type {Highcharts.Chart}\n */\n series.chart = chart;\n /**\n * Read only. The series' type, like \"line\", \"area\", \"column\" etc.\n * The type in the series options anc can be altered using\n * {@link Series#update}.\n *\n * @name Highcharts.Series#type\n * @type {string}\n */\n /**\n * Read only. The series' current options. To update, use\n * {@link Series#update}.\n *\n * @name Highcharts.Series#options\n * @type {Highcharts.SeriesOptionsType}\n */\n series.options = series.setOptions(userOptions);\n var options = series.options,\n visible = options.visible !== false;\n /**\n * All child series that are linked to the current series through the\n * [linkedTo](https://api.highcharts.com/highcharts/series.line.linkedTo)\n * option.\n *\n * @name Highcharts.Series#linkedSeries\n * @type {Array<Highcharts.Series>}\n * @readonly\n */\n series.linkedSeries = [];\n // Bind the axes\n series.bindAxes();\n Series_extend(series, {\n /**\n * The series name as given in the options. Defaults to\n * \"Series {n}\".\n *\n * @name Highcharts.Series#name\n * @type {string}\n */\n name: options.name,\n state: '',\n /**\n * Read only. The series' visibility state as set by {@link\n * Series#show}, {@link Series#hide}, or in the initial\n * configuration.\n *\n * @name Highcharts.Series#visible\n * @type {boolean}\n */\n visible: visible, // True by default\n /**\n * Read only. The series' selected state as set by {@link\n * Highcharts.Series#select}.\n *\n * @name Highcharts.Series#selected\n * @type {boolean}\n */\n selected: options.selected === true // False by default\n });\n Series_registerEventOptions(this, options);\n var events = options.events;\n if ((events && events.click) ||\n (options.point &&\n options.point.events &&\n options.point.events.click) ||\n options.allowPointSelect) {\n chart.runTrackerClick = true;\n }\n series.getColor();\n series.getSymbol();\n // Mark cartesian\n if (series.isCartesian) {\n chart.hasCartesianSeries = true;\n }\n // Get the index and register the series in the chart. The index is\n // one more than the current latest series index (#5960).\n var lastSeries;\n if (chartSeries.length) {\n lastSeries = chartSeries[chartSeries.length - 1];\n }\n series._i = Series_pick(lastSeries && lastSeries._i, -1) + 1;\n series.opacity = series.options.opacity;\n // Insert the series and re-order all series above the insertion\n // point.\n chart.orderItems('series', Series_insertItem(this, chartSeries));\n // Set options for series with sorting and set data later.\n if (options.dataSorting && options.dataSorting.enabled) {\n series.setDataSortingOptions();\n }\n else if (!series.points && !series.data) {\n series.setData(options.data, false);\n }\n Series_fireEvent(this, 'afterInit');\n };\n /**\n * Check whether the series item is itself or inherits from a certain\n * series type.\n *\n * @function Highcharts.Series#is\n * @param {string} type The type of series to check for, can be either\n * featured or custom series types. For example `column`, `pie`,\n * `ohlc` etc.\n *\n * @return {boolean}\n * True if this item is or inherits from the given type.\n */\n Series.prototype.is = function (type) {\n return seriesTypes[type] && this instanceof seriesTypes[type];\n };\n /**\n * Set the xAxis and yAxis properties of cartesian series, and register\n * the series in the `axis.series` array.\n *\n * @private\n * @function Highcharts.Series#bindAxes\n */\n Series.prototype.bindAxes = function () {\n var series = this,\n seriesOptions = series.options,\n chart = series.chart;\n var axisOptions;\n Series_fireEvent(this, 'bindAxes', null, function () {\n // Repeat for xAxis and yAxis\n (series.axisTypes || []).forEach(function (coll) {\n // Loop through the chart's axis objects\n (chart[coll] || []).forEach(function (axis) {\n axisOptions = axis.options;\n // Apply if the series xAxis or yAxis option matches\n // the number of the axis, or if undefined, use the\n // first axis\n if (Series_pick(seriesOptions[coll], 0) === axis.index ||\n (typeof seriesOptions[coll] !==\n 'undefined' &&\n seriesOptions[coll] === axisOptions.id)) {\n // Register this series in the axis.series lookup\n Series_insertItem(series, axis.series);\n // Set this series.xAxis or series.yAxis reference\n /**\n * Read only. The unique xAxis object associated\n * with the series.\n *\n * @name Highcharts.Series#xAxis\n * @type {Highcharts.Axis}\n */\n /**\n * Read only. The unique yAxis object associated\n * with the series.\n *\n * @name Highcharts.Series#yAxis\n * @type {Highcharts.Axis}\n */\n series[coll] = axis;\n // Mark dirty for redraw\n axis.isDirty = true;\n }\n });\n // The series needs an X and an Y axis\n if (!series[coll] &&\n series.optionalAxis !== coll) {\n Series_error(18, true, chart);\n }\n });\n });\n Series_fireEvent(this, 'afterBindAxes');\n };\n /**\n * Define hasData functions for series. These return true if there\n * are data points on this series within the plot area.\n *\n * @private\n * @function Highcharts.Series#hasData\n */\n Series.prototype.hasData = function () {\n return ((this.visible &&\n typeof this.dataMax !== 'undefined' &&\n typeof this.dataMin !== 'undefined') || ( // #3703\n this.visible &&\n this.dataTable.rowCount > 0 // #9758\n ));\n };\n /**\n * Determine whether the marker in a series has changed.\n *\n * @private\n * @function Highcharts.Series#hasMarkerChanged\n */\n Series.prototype.hasMarkerChanged = function (options, oldOptions) {\n var marker = options.marker,\n oldMarker = oldOptions.marker || {};\n return marker && ((oldMarker.enabled && !marker.enabled) ||\n oldMarker.symbol !== marker.symbol || // #10870, #15946\n oldMarker.height !== marker.height || // #16274\n oldMarker.width !== marker.width // #16274\n );\n };\n /**\n * Return an auto incremented x value based on the pointStart and\n * pointInterval options. This is only used if an x value is not given\n * for the point that calls autoIncrement.\n *\n * @private\n * @function Highcharts.Series#autoIncrement\n */\n Series.prototype.autoIncrement = function (x) {\n var _a,\n _b;\n var options = this.options,\n _c = this.options,\n pointIntervalUnit = _c.pointIntervalUnit,\n relativeXValue = _c.relativeXValue,\n time = this.chart.time,\n xIncrement = (_b = (_a = this.xIncrement) !== null && _a !== void 0 ? _a : time.parse(options.pointStart)) !== null && _b !== void 0 ? _b : 0;\n var pointInterval;\n this.pointInterval = pointInterval = Series_pick(this.pointInterval, options.pointInterval, 1);\n if (relativeXValue && Series_isNumber(x)) {\n pointInterval *= x;\n }\n // Added code for pointInterval strings\n if (pointIntervalUnit) {\n var d = time.toParts(xIncrement);\n if (pointIntervalUnit === 'day') {\n d[2] += pointInterval;\n }\n else if (pointIntervalUnit === 'month') {\n d[1] += pointInterval;\n }\n else if (pointIntervalUnit === 'year') {\n d[0] += pointInterval;\n }\n pointInterval = time.makeTime.apply(time, d) - xIncrement;\n }\n if (relativeXValue && Series_isNumber(x)) {\n return xIncrement + pointInterval;\n }\n this.xIncrement = xIncrement + pointInterval;\n return xIncrement;\n };\n /**\n * Internal function to set properties for series if data sorting is\n * enabled.\n *\n * @private\n * @function Highcharts.Series#setDataSortingOptions\n */\n Series.prototype.setDataSortingOptions = function () {\n var options = this.options;\n Series_extend(this, {\n requireSorting: false,\n sorted: false,\n enabledDataSorting: true,\n allowDG: false\n });\n // To allow unsorted data for column series.\n if (!Series_defined(options.pointRange)) {\n options.pointRange = 1;\n }\n };\n /**\n * Set the series options by merging from the options tree. Called\n * internally on initializing and updating series. This function will\n * not redraw the series. For API usage, use {@link Series#update}.\n * @private\n * @function Highcharts.Series#setOptions\n * @param {Highcharts.SeriesOptionsType} itemOptions\n * The series options.\n * @emits Highcharts.Series#event:afterSetOptions\n */\n Series.prototype.setOptions = function (itemOptions) {\n var _a,\n _b;\n var chart = this.chart,\n chartOptions = chart.options,\n plotOptions = chartOptions.plotOptions,\n userOptions = chart.userOptions || {},\n seriesUserOptions = Series_merge(itemOptions),\n styledMode = chart.styledMode,\n e = {\n plotOptions: plotOptions,\n userOptions: seriesUserOptions\n };\n var zone;\n Series_fireEvent(this, 'setOptions', e);\n // These may be modified by the event\n var typeOptions = e.plotOptions[this.type],\n userPlotOptions = (userOptions.plotOptions || {}),\n userPlotOptionsSeries = userPlotOptions.series || {},\n defaultPlotOptionsType = (Series_defaultOptions.plotOptions[this.type] || {}),\n userPlotOptionsType = userPlotOptions[this.type] || {};\n // Use copy to prevent undetected changes (#9762)\n /**\n * Contains series options by the user without defaults.\n * @name Highcharts.Series#userOptions\n * @type {Highcharts.SeriesOptionsType}\n */\n this.userOptions = e.userOptions;\n var options = Series_merge(typeOptions,\n plotOptions.series, \n // #3881, chart instance plotOptions[type] should trump\n // plotOptions.series\n userPlotOptionsType,\n seriesUserOptions);\n // The tooltip options are merged between global and series specific\n // options. Importance order asscendingly:\n // globals: (1)tooltip, (2)plotOptions.series,\n // (3)plotOptions[this.type]\n // init userOptions with possible later updates: 4-6 like 1-3 and\n // (7)this series options\n this.tooltipOptions = Series_merge(Series_defaultOptions.tooltip, // 1\n (_a = Series_defaultOptions.plotOptions.series) === null || _a === void 0 ? void 0 : _a.tooltip, // 2\n defaultPlotOptionsType === null || defaultPlotOptionsType === void 0 ? void 0 : defaultPlotOptionsType.tooltip, // 3\n chart.userOptions.tooltip, // 4\n (_b = userPlotOptions.series) === null || _b === void 0 ? void 0 : _b.tooltip, // 5\n userPlotOptionsType.tooltip, // 6\n seriesUserOptions.tooltip // 7\n );\n // When shared tooltip, stickyTracking is true by default,\n // unless user says otherwise.\n this.stickyTracking = Series_pick(seriesUserOptions.stickyTracking, userPlotOptionsType.stickyTracking, userPlotOptionsSeries.stickyTracking, (this.tooltipOptions.shared && !this.noSharedTooltip ?\n true :\n options.stickyTracking));\n // Delete marker object if not allowed (#1125)\n if (typeOptions.marker === null) {\n delete options.marker;\n }\n // Handle color zones\n this.zoneAxis = options.zoneAxis || 'y';\n var zones = this.zones = // #20440, create deep copy of zones options\n (options.zones || []).map(function (z) { return (Series_assign({},\n z)); });\n if ((options.negativeColor || options.negativeFillColor) &&\n !options.zones) {\n zone = {\n value: options[this.zoneAxis + 'Threshold'] ||\n options.threshold ||\n 0,\n className: 'highcharts-negative'\n };\n if (!styledMode) {\n zone.color = options.negativeColor;\n zone.fillColor = options.negativeFillColor;\n }\n zones.push(zone);\n }\n // Push one extra zone for the rest\n if (zones.length && Series_defined(zones[zones.length - 1].value)) {\n zones.push(styledMode ? {} : {\n color: this.color,\n fillColor: this.fillColor\n });\n }\n Series_fireEvent(this, 'afterSetOptions', { options: options });\n return options;\n };\n /**\n * Return series name in \"Series {Number}\" format or the one defined by\n * a user. This method can be simply overridden as series name format\n * can vary (e.g. technical indicators).\n *\n * @function Highcharts.Series#getName\n *\n * @return {string}\n * The series name.\n */\n Series.prototype.getName = function () {\n // #4119\n return Series_pick(this.options.name, 'Series ' + (this.index + 1));\n };\n /**\n * @private\n * @function Highcharts.Series#getCyclic\n */\n Series.prototype.getCyclic = function (prop, value, defaults) {\n var chart = this.chart, indexName = \"\" + prop + \"Index\", counterName = \"\" + prop + \"Counter\", len = (\n // Symbol count\n (defaults === null || defaults === void 0 ? void 0 : defaults.length) ||\n // Color count\n chart.options.chart.colorCount);\n var i,\n setting;\n if (!value) {\n // Pick up either the colorIndex option, or the series.colorIndex\n // after Series.update()\n setting = Series_pick(prop === 'color' ? this.options.colorIndex : void 0, this[indexName]);\n if (Series_defined(setting)) { // After Series.update()\n i = setting;\n }\n else {\n // #6138\n if (!chart.series.length) {\n chart[counterName] = 0;\n }\n i = chart[counterName] % len;\n chart[counterName] += 1;\n }\n if (defaults) {\n value = defaults[i];\n }\n }\n // Set the colorIndex\n if (typeof i !== 'undefined') {\n this[indexName] = i;\n }\n this[prop] = value;\n };\n /**\n * Get the series' color based on either the options or pulled from\n * global options.\n *\n * @private\n * @function Highcharts.Series#getColor\n */\n Series.prototype.getColor = function () {\n if (this.chart.styledMode) {\n this.getCyclic('color');\n }\n else if (this.options.colorByPoint) {\n this.color = \"#cccccc\" /* Palette.neutralColor20 */;\n }\n else {\n this.getCyclic('color', this.options.color ||\n Series_defaultOptions.plotOptions[this.type].color, this.chart.options.colors);\n }\n };\n /**\n * Get all points' instances created for this series.\n *\n * @private\n * @function Highcharts.Series#getPointsCollection\n */\n Series.prototype.getPointsCollection = function () {\n return (this.hasGroupedData ? this.points : this.data) || [];\n };\n /**\n * Get the series' symbol based on either the options or pulled from\n * global options.\n *\n * @private\n * @function Highcharts.Series#getSymbol\n */\n Series.prototype.getSymbol = function () {\n var seriesMarkerOption = this.options.marker;\n this.getCyclic('symbol', seriesMarkerOption.symbol, this.chart.options.symbols);\n };\n /**\n * Shorthand to get one of the series' data columns from `Series.dataTable`.\n *\n * @private\n * @function Highcharts.Series#getColumn\n */\n Series.prototype.getColumn = function (columnName, modified) {\n return (modified ? this.dataTable.modified : this.dataTable)\n .getColumn(columnName, true) || [];\n };\n /**\n * Finds the index of an existing point that matches the given point\n * options.\n *\n * @private\n * @function Highcharts.Series#findPointIndex\n * @param {Highcharts.PointOptionsObject} optionsObject\n * The options of the point.\n * @param {number} fromIndex\n * The index to start searching from, used for optimizing series with\n * required sorting.\n * @return {number|undefined}\n * Returns the index of a matching point, or undefined if no match is found.\n */\n Series.prototype.findPointIndex = function (optionsObject, fromIndex) {\n var id = optionsObject.id,\n x = optionsObject.x,\n oldData = this.points,\n dataSorting = this.options.dataSorting;\n var matchingPoint,\n matchedById,\n pointIndex;\n if (id) {\n var item = this.chart.get(id);\n if (item instanceof Series_Point) {\n matchingPoint = item;\n }\n }\n else if (this.linkedParent ||\n this.enabledDataSorting ||\n this.options.relativeXValue) {\n var matcher = function (oldPoint) { return !oldPoint.touched &&\n oldPoint.index === optionsObject.index; };\n if (dataSorting && dataSorting.matchByName) {\n matcher = function (oldPoint) { return !oldPoint.touched &&\n oldPoint.name === optionsObject.name; };\n }\n else if (this.options.relativeXValue) {\n matcher = function (oldPoint) { return !oldPoint.touched &&\n oldPoint.options.x === optionsObject.x; };\n }\n matchingPoint = Series_find(oldData, matcher);\n // Add unmatched point as a new point\n if (!matchingPoint) {\n return void 0;\n }\n }\n if (matchingPoint) {\n pointIndex = matchingPoint && matchingPoint.index;\n if (typeof pointIndex !== 'undefined') {\n matchedById = true;\n }\n }\n // Search for the same X in the existing data set\n if (typeof pointIndex === 'undefined' && Series_isNumber(x)) {\n pointIndex = this.getColumn('x').indexOf(x, fromIndex);\n }\n // Reduce pointIndex if data is cropped\n if (pointIndex !== -1 &&\n typeof pointIndex !== 'undefined' &&\n this.cropped) {\n pointIndex = (pointIndex >= this.cropStart) ?\n pointIndex - this.cropStart : pointIndex;\n }\n if (!matchedById &&\n Series_isNumber(pointIndex) &&\n oldData[pointIndex] && oldData[pointIndex].touched) {\n pointIndex = void 0;\n }\n return pointIndex;\n };\n /**\n * Internal function called from setData. If the point count is the same\n * as it was, or if there are overlapping X values, just run\n * Point.update which is cheaper, allows animation, and keeps references\n * to points. This also allows adding or removing points if the X-es\n * don't match.\n *\n * @private\n * @function Highcharts.Series#updateData\n */\n Series.prototype.updateData = function (data, animation) {\n var options = this.options,\n dataSorting = options.dataSorting,\n oldData = this.points,\n pointsToAdd = [],\n requireSorting = this.requireSorting,\n equalLength = data.length === oldData.length;\n var hasUpdatedByKey,\n i,\n point,\n lastIndex,\n succeeded = true;\n this.xIncrement = null;\n // Iterate the new data\n data.forEach(function (pointOptions, i) {\n var optionsObject = (Series_defined(pointOptions) &&\n this.pointClass.prototype.optionsToObject.call({ series: this },\n pointOptions)) || {};\n var pointIndex;\n // Get the x of the new data point\n var x = optionsObject.x,\n id = optionsObject.id;\n if (id || Series_isNumber(x)) {\n pointIndex = this.findPointIndex(optionsObject, lastIndex);\n // Matching X not found\n // or used already due to ununique x values (#8995),\n // add point (but later)\n if (pointIndex === -1 ||\n typeof pointIndex === 'undefined') {\n pointsToAdd.push(pointOptions);\n // Matching X found, update\n }\n else if (oldData[pointIndex] &&\n pointOptions !== options.data[pointIndex]) {\n oldData[pointIndex].update(pointOptions, false, null, false);\n // Mark it touched, below we will remove all points that\n // are not touched.\n oldData[pointIndex].touched = true;\n // Speed optimize by only searching after last known\n // index. Performs ~20% bettor on large data sets.\n if (requireSorting) {\n lastIndex = pointIndex + 1;\n }\n // Point exists, no changes, don't remove it\n }\n else if (oldData[pointIndex]) {\n oldData[pointIndex].touched = true;\n }\n // If the length is equal and some of the nodes had a\n // match in the same position, we don't want to remove\n // non-matches.\n if (!equalLength ||\n i !== pointIndex ||\n (dataSorting && dataSorting.enabled) ||\n this.hasDerivedData) {\n hasUpdatedByKey = true;\n }\n }\n else {\n // Gather all points that are not matched\n pointsToAdd.push(pointOptions);\n }\n }, this);\n // Remove points that don't exist in the updated data set\n if (hasUpdatedByKey) {\n i = oldData.length;\n while (i--) {\n point = oldData[i];\n if (point && !point.touched && point.remove) {\n point.remove(false, animation);\n }\n }\n // If we did not find keys (ids or x-values), and the length is the\n // same, update one-to-one\n }\n else if (equalLength && (!dataSorting || !dataSorting.enabled)) {\n data.forEach(function (point, i) {\n // .update doesn't exist on a linked, hidden series (#3709)\n // (#10187)\n if (point !== oldData[i].y && !oldData[i].destroyed) {\n oldData[i].update(point, false, null, false);\n }\n });\n // Don't add new points since those configs are used above\n pointsToAdd.length = 0;\n // Did not succeed in updating data\n }\n else {\n succeeded = false;\n }\n oldData.forEach(function (point) {\n if (point) {\n point.touched = false;\n }\n });\n if (!succeeded) {\n return false;\n }\n // Add new points\n pointsToAdd.forEach(function (point) {\n this.addPoint(point, false, null, null, false);\n }, this);\n var xData = this.getColumn('x');\n if (this.xIncrement === null &&\n xData.length) {\n this.xIncrement = Series_arrayMax(xData);\n this.autoIncrement();\n }\n return true;\n };\n Series.prototype.dataColumnKeys = function () {\n return Series_spreadArray(['x'], (this.pointArrayMap || ['y']), true);\n };\n /**\n * Apply a new set of data to the series and optionally redraw it. The\n * new data array is passed by reference (except in case of\n * `updatePoints`), and may later be mutated when updating the chart\n * data.\n *\n * Note the difference in behaviour when setting the same amount of\n * points, or a different amount of points, as handled by the\n * `updatePoints` parameter.\n *\n * @sample highcharts/members/series-setdata/\n * Set new data from a button\n * @sample highcharts/members/series-setdata-pie/\n * Set data in a pie\n * @sample stock/members/series-setdata/\n * Set new data in Highcharts Stock\n * @sample maps/members/series-setdata/\n * Set new data in Highmaps\n *\n * @function Highcharts.Series#setData\n *\n * @param {Array<Highcharts.PointOptionsType>} data\n * Takes an array of data in the same format as described under\n * `series.{type}.data` for the given series type, for example a\n * line series would take data in the form described under\n * [series.line.data](https://api.highcharts.com/highcharts/series.line.data).\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart after the series is altered. If\n * doing more operations on the chart, it is a good idea to set\n * redraw to false and call {@link Chart#redraw} after.\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n * When the updated data is the same length as the existing data,\n * points will be updated by default, and animation visualizes\n * how the points are changed. Set false to disable animation, or\n * a configuration object to set duration or easing.\n *\n * @param {boolean} [updatePoints=true]\n * When this is true, points will be updated instead of replaced\n * whenever possible. This occurs a) when the updated data is the\n * same length as the existing data, b) when points are matched\n * by their id's, or c) when points can be matched by X values.\n * This allows updating with animation and performs better. In\n * this case, the original array is not passed by reference. Set\n * `false` to prevent.\n */\n Series.prototype.setData = function (data, redraw, animation, updatePoints) {\n var _a,\n _b;\n var _c,\n _d;\n if (redraw === void 0) { redraw = true; }\n var series = this,\n oldData = series.points,\n oldDataLength = (oldData && oldData.length) || 0,\n options = series.options,\n chart = series.chart,\n dataSorting = options.dataSorting,\n xAxis = series.xAxis,\n turboThreshold = options.turboThreshold,\n table = this.dataTable,\n dataColumnKeys = this.dataColumnKeys(),\n pointValKey = series.pointValKey || 'y',\n pointArrayMap = series.pointArrayMap || [],\n valueCount = pointArrayMap.length,\n keys = options.keys;\n var i,\n updatedData,\n indexOfX = 0,\n indexOfY = 1,\n copiedData;\n if (!chart.options.chart.allowMutatingData) { // #4259\n // Remove old reference\n if (options.data) {\n delete series.options.data;\n }\n if (series.userOptions.data) {\n delete series.userOptions.data;\n }\n copiedData = Series_merge(true, data);\n }\n data = copiedData || data || [];\n var dataLength = data.length;\n if (dataSorting && dataSorting.enabled) {\n data = this.sortData(data);\n }\n // First try to run Point.update which is cheaper, allows animation, and\n // keeps references to points.\n if (chart.options.chart.allowMutatingData &&\n updatePoints !== false &&\n dataLength &&\n oldDataLength &&\n !series.cropped &&\n !series.hasGroupedData &&\n series.visible &&\n // Soft updating has no benefit in boost, and causes JS error\n // (#8355)\n !series.boosted) {\n updatedData = this.updateData(data, animation);\n }\n if (!updatedData) {\n // Reset properties\n series.xIncrement = null;\n series.colorCounter = 0; // For series with colorByPoint (#1547)\n // In turbo mode, look for one- or twodimensional arrays of numbers.\n // The first and the last valid value are tested, and we assume that\n // all the rest are defined the same way. Although the 'for' loops\n // are similar, they are repeated inside each if-else conditional\n // for max performance.\n var runTurbo = turboThreshold && dataLength > turboThreshold;\n if (runTurbo) {\n var firstPoint = series.getFirstValidPoint(data),\n lastPoint = series.getFirstValidPoint(data,\n dataLength - 1, -1),\n isShortArray = function (a) { return Boolean(Series_isArray(a) && (keys || Series_isNumber(a[0]))); };\n // Assume all points are numbers\n if (Series_isNumber(firstPoint) && Series_isNumber(lastPoint)) {\n var x = [],\n valueData = [];\n for (var _e = 0, data_1 = data; _e < data_1.length; _e++) {\n var value = data_1[_e];\n x.push(this.autoIncrement());\n valueData.push(value);\n }\n table.setColumns((_a = {\n x: x\n },\n _a[pointValKey] = valueData,\n _a));\n // Assume all points are arrays when first point is\n }\n else if (isShortArray(firstPoint) &&\n isShortArray(lastPoint)) {\n if (valueCount) { // [x, low, high] or [x, o, h, l, c]\n // When autoX is 1, the x is skipped: [low, high]. When\n // autoX is 0, the x is included: [x, low, high]\n var autoX = firstPoint.length === valueCount ?\n 1 : 0,\n colArray_1 = new Array(dataColumnKeys.length)\n .fill(0).map(function () { return []; });\n for (var _f = 0, _g = data; _f < _g.length; _f++) {\n var pt = _g[_f];\n if (autoX) {\n colArray_1[0].push(this.autoIncrement());\n }\n for (var j = autoX; j <= valueCount; j++) {\n (_c = colArray_1[j]) === null || _c === void 0 ? void 0 : _c.push(pt[j - autoX]);\n }\n }\n table.setColumns(dataColumnKeys.reduce(function (columns, columnName, i) {\n columns[columnName] = colArray_1[i];\n return columns;\n }, {}));\n }\n else { // [x, y]\n if (keys) {\n indexOfX = keys.indexOf('x');\n indexOfY = keys.indexOf('y');\n indexOfX = indexOfX >= 0 ? indexOfX : 0;\n indexOfY = indexOfY >= 0 ? indexOfY : 1;\n }\n if (firstPoint.length === 1) {\n indexOfY = 0;\n }\n var xData = [],\n valueData = [];\n if (indexOfX === indexOfY) {\n for (var _h = 0, data_2 = data; _h < data_2.length; _h++) {\n var pt = data_2[_h];\n xData.push(this.autoIncrement());\n valueData.push(pt[indexOfY]);\n }\n }\n else {\n for (var _j = 0, data_3 = data; _j < data_3.length; _j++) {\n var pt = data_3[_j];\n xData.push(pt[indexOfX]);\n valueData.push(pt[indexOfY]);\n }\n }\n table.setColumns((_b = {\n x: xData\n },\n _b[pointValKey] = valueData,\n _b));\n }\n }\n else {\n // Highcharts expects configs to be numbers or arrays in\n // turbo mode\n runTurbo = false;\n }\n }\n if (!runTurbo) {\n var columns = dataColumnKeys.reduce(function (columns,\n columnName) {\n columns[columnName] = [];\n return columns;\n }, {});\n for (i = 0; i < dataLength; i++) {\n var pt = series.pointClass.prototype.applyOptions.apply({ series: series },\n [data[i]]);\n for (var _k = 0, dataColumnKeys_1 = dataColumnKeys; _k < dataColumnKeys_1.length; _k++) {\n var key = dataColumnKeys_1[_k];\n columns[key][i] = pt[key];\n }\n }\n table.setColumns(columns);\n }\n // Forgetting to cast strings to numbers is a common caveat when\n // handling CSV or JSON\n if (Series_isString(this.getColumn('y')[0])) {\n Series_error(14, true, chart);\n }\n series.data = [];\n series.options.data = series.userOptions.data = data;\n // Destroy old points\n i = oldDataLength;\n while (i--) {\n (_d = oldData[i]) === null || _d === void 0 ? void 0 : _d.destroy();\n }\n // Reset minRange (#878)\n if (xAxis) {\n xAxis.minRange = xAxis.userMinRange;\n }\n // Redraw\n series.isDirty = chart.isDirtyBox = true;\n series.isDirtyData = !!oldData;\n animation = false;\n }\n // Typically for pie series, points need to be processed and\n // generated prior to rendering the legend\n if (options.legendType === 'point') {\n this.processData();\n this.generatePoints();\n }\n if (redraw) {\n chart.redraw(animation);\n }\n };\n /**\n * Internal function to sort series data\n *\n * @private\n * @function Highcharts.Series#sortData\n * @param {Array<Highcharts.PointOptionsType>} data\n * Force data grouping.\n */\n Series.prototype.sortData = function (data) {\n var series = this,\n options = series.options,\n dataSorting = options.dataSorting,\n sortKey = dataSorting.sortKey || 'y',\n getPointOptionsObject = function (series,\n pointOptions) {\n return (Series_defined(pointOptions) &&\n series.pointClass.prototype.optionsToObject.call({\n series: series\n },\n pointOptions)) || {};\n };\n data.forEach(function (pointOptions, i) {\n data[i] = getPointOptionsObject(series, pointOptions);\n data[i].index = i;\n }, this);\n // Sorting\n var sortedData = data.concat().sort(function (a,\n b) {\n var aValue = Series_getNestedProperty(sortKey,\n a);\n var bValue = Series_getNestedProperty(sortKey,\n b);\n return bValue < aValue ? -1 : bValue > aValue ? 1 : 0;\n });\n // Set x value depending on the position in the array\n sortedData.forEach(function (point, i) {\n point.x = i;\n }, this);\n // Set the same x for linked series points if they don't have their\n // own sorting\n if (series.linkedSeries) {\n series.linkedSeries.forEach(function (linkedSeries) {\n var options = linkedSeries.options,\n seriesData = options.data;\n if ((!options.dataSorting ||\n !options.dataSorting.enabled) &&\n seriesData) {\n seriesData.forEach(function (pointOptions, i) {\n seriesData[i] = getPointOptionsObject(linkedSeries, pointOptions);\n if (data[i]) {\n seriesData[i].x = data[i].x;\n seriesData[i].index = i;\n }\n });\n linkedSeries.setData(seriesData, false);\n }\n });\n }\n return data;\n };\n /**\n * Internal function to process the data by cropping away unused data\n * points if the series is longer than the crop threshold. This saves\n * computing time for large series.\n *\n * @private\n * @function Highcharts.Series#getProcessedData\n * @param {boolean} [forceExtremesFromAll]\n * Force getting extremes of a total series data range.\n */\n Series.prototype.getProcessedData = function (forceExtremesFromAll) {\n var series = this,\n table = series.dataTable,\n isCartesian = series.isCartesian,\n options = series.options,\n xAxis = series.xAxis,\n cropThreshold = options.cropThreshold,\n getExtremesFromAll = forceExtremesFromAll ||\n // X-range series etc, #21003\n series.getExtremesFromAll,\n logarithmic = xAxis === null || xAxis === void 0 ? void 0 : xAxis.logarithmic,\n dataLength = table.rowCount;\n var croppedData,\n cropped,\n cropStart = 0,\n xExtremes,\n min,\n max,\n xData = series.getColumn('x'),\n modified = table,\n updatingNames = false;\n if (xAxis) {\n // Corrected for log axis (#3053)\n xExtremes = xAxis.getExtremes();\n min = xExtremes.min;\n max = xExtremes.max;\n updatingNames = !!(xAxis.categories && !xAxis.names.length);\n // Optionally filter out points outside the plot area\n if (isCartesian &&\n series.sorted &&\n !getExtremesFromAll &&\n (!cropThreshold ||\n dataLength > cropThreshold ||\n series.forceCrop)) {\n // It's outside current extremes\n if (xData[dataLength - 1] < min ||\n xData[0] > max) {\n modified = new Data_DataTableCore();\n // Only crop if it's actually spilling out\n }\n else if (\n // Don't understand why this condition is needed\n series.getColumn(series.pointValKey || 'y').length && (xData[0] < min ||\n xData[dataLength - 1] > max)) {\n croppedData = this.cropData(table, min, max);\n modified = croppedData.modified;\n cropStart = croppedData.start;\n cropped = true;\n }\n }\n }\n // Find the closest distance between processed points\n xData = modified.getColumn('x') || [];\n var closestPointRange = Series_getClosestDistance([\n logarithmic ?\n xData.map(logarithmic.log2lin) :\n xData\n ], \n // Unsorted data is not supported by the line tooltip, as well as\n // data grouping and navigation in Stock charts (#725) and width\n // calculation of columns (#1900). Avoid warning during the\n // premature processing pass in updateNames (#16104).\n function () { return (series.requireSorting &&\n !updatingNames &&\n Series_error(15,\n false,\n series.chart)); });\n return {\n modified: modified,\n cropped: cropped,\n cropStart: cropStart,\n closestPointRange: closestPointRange\n };\n };\n /**\n * Internal function to apply processed data.\n * In Highcharts Stock, this function is extended to provide data grouping.\n *\n * @private\n * @function Highcharts.Series#processData\n * @param {boolean} [force]\n * Force data grouping.\n */\n Series.prototype.processData = function (force) {\n var series = this,\n xAxis = series.xAxis,\n table = series.dataTable;\n // If the series data or axes haven't changed, don't go through\n // this. Return false to pass the message on to override methods\n // like in data grouping.\n if (series.isCartesian &&\n !series.isDirty &&\n !xAxis.isDirty &&\n !series.yAxis.isDirty &&\n !force) {\n return false;\n }\n var processedData = series.getProcessedData();\n // Record the properties\n table.modified = processedData.modified;\n series.cropped = processedData.cropped; // Undefined or true\n series.cropStart = processedData.cropStart;\n series.closestPointRange = (series.basePointRange = processedData.closestPointRange);\n Series_fireEvent(series, 'afterProcessData');\n };\n /**\n * Iterate over xData and crop values between min and max. Returns\n * object containing crop start/end cropped xData with corresponding\n * part of yData, dataMin and dataMax within the cropped range.\n *\n * @private\n * @function Highcharts.Series#cropData\n */\n Series.prototype.cropData = function (table, min, max) {\n var xData = table.getColumn('x',\n true) || [],\n dataLength = xData.length,\n columns = {};\n var i,\n j,\n start = 0,\n end = dataLength;\n // Iterate up to find slice start\n for (i = 0; i < dataLength; i++) {\n if (xData[i] >= min) {\n start = Math.max(0, i - 1);\n break;\n }\n }\n // Proceed to find slice end\n for (j = i; j < dataLength; j++) {\n if (xData[j] > max) {\n end = j + 1;\n break;\n }\n }\n for (var _a = 0, _b = this.dataColumnKeys(); _a < _b.length; _a++) {\n var key = _b[_a];\n var column = table.getColumn(key,\n true);\n if (column) {\n columns[key] = column.slice(start, end);\n }\n }\n return {\n modified: new Data_DataTableCore({ columns: columns }),\n start: start,\n end: end\n };\n };\n /**\n * Generate the data point after the data has been processed by cropping\n * away unused points and optionally grouped in Highcharts Stock.\n *\n * @private\n * @function Highcharts.Series#generatePoints\n */\n Series.prototype.generatePoints = function () {\n var _a,\n _b,\n _c,\n _d;\n var series = this,\n options = series.options,\n dataOptions = series.processedData || options.data,\n table = series.dataTable.modified,\n xData = series.getColumn('x',\n true),\n PointClass = series.pointClass,\n processedDataLength = table.rowCount,\n cropStart = series.cropStart || 0,\n hasGroupedData = series.hasGroupedData,\n keys = options.keys,\n points = [],\n groupCropStartIndex = (options.dataGrouping &&\n options.dataGrouping.groupAll ?\n cropStart :\n 0),\n categories = (_a = series.xAxis) === null || _a === void 0 ? void 0 : _a.categories,\n pointArrayMap = series.pointArrayMap || ['y'], \n // Create a configuration object out of a data row\n dataColumnKeys = this.dataColumnKeys();\n var dataLength,\n cursor,\n point,\n i,\n data = series.data,\n pOptions;\n if (!data && !hasGroupedData) {\n var arr = [];\n arr.length = (dataOptions === null || dataOptions === void 0 ? void 0 : dataOptions.length) || 0;\n data = series.data = arr;\n }\n if (keys && hasGroupedData) {\n // Grouped data has already applied keys (#6590)\n series.options.keys = false;\n }\n for (i = 0; i < processedDataLength; i++) {\n cursor = cropStart + i;\n if (!hasGroupedData) {\n point = data[cursor];\n pOptions = dataOptions ?\n dataOptions[cursor] :\n table.getRow(i, pointArrayMap);\n // #970:\n if (!point &&\n pOptions !== void 0) {\n data[cursor] = point = new PointClass(series, pOptions, xData[i]);\n }\n }\n else {\n // Splat the y data in case of ohlc data array\n point = new PointClass(series, table.getRow(i, dataColumnKeys) || []);\n point.dataGroup = series.groupMap[groupCropStartIndex + i];\n if ((_b = point.dataGroup) === null || _b === void 0 ? void 0 : _b.options) {\n point.options = point.dataGroup.options;\n Series_extend(point, point.dataGroup.options);\n // Collision of props and options (#9770)\n delete point.dataLabels;\n }\n }\n if (point) { // #6279\n /**\n * Contains the point's index in the `Series.points` array.\n *\n * @name Highcharts.Point#index\n * @type {number}\n * @readonly\n */\n // For faster access in Point.update\n point.index = hasGroupedData ?\n (groupCropStartIndex + i) : cursor;\n points[i] = point;\n // Set point properties for convenient access in tooltip and\n // data labels\n point.category = (_c = categories === null || categories === void 0 ? void 0 : categories[point.x]) !== null && _c !== void 0 ? _c : point.x;\n point.key = (_d = point.name) !== null && _d !== void 0 ? _d : point.category;\n }\n }\n // Restore keys options (#6590)\n series.options.keys = keys;\n // Hide cropped-away points - this only runs when the number of\n // points is above cropThreshold, or when switching view from\n // non-grouped data to grouped data (#637)\n if (data &&\n (processedDataLength !== (dataLength = data.length) ||\n hasGroupedData)) {\n for (i = 0; i < dataLength; i++) {\n // When has grouped data, clear all points\n if (i === cropStart && !hasGroupedData) {\n i += processedDataLength;\n }\n if (data[i]) {\n data[i].destroyElements();\n data[i].plotX = void 0; // #1003\n }\n }\n }\n /**\n * Read only. An array containing those values converted to points.\n * In case the series data length exceeds the `cropThreshold`, or if\n * the data is grouped, `series.data` doesn't contain all the\n * points. Also, in case a series is hidden, the `data` array may be\n * empty. In case of cropping, the `data` array may contain `undefined`\n * values, instead of points. To access raw values,\n * `series.options.data` will always be up to date. `Series.data` only\n * contains the points that have been created on demand. To modify the\n * data, use\n * {@link Highcharts.Series#setData} or\n * {@link Highcharts.Point#update}.\n *\n * @see Series.points\n *\n * @name Highcharts.Series#data\n * @type {Array<Highcharts.Point>}\n */\n series.data = data;\n /**\n * An array containing all currently visible point objects. In case\n * of cropping, the cropped-away points are not part of this array.\n * The `series.points` array starts at `series.cropStart` compared\n * to `series.data` and `series.options.data`. If however the series\n * data is grouped, these can't be correlated one to one. To modify\n * the data, use {@link Highcharts.Series#setData} or\n * {@link Highcharts.Point#update}.\n *\n * @name Highcharts.Series#points\n * @type {Array<Highcharts.Point>}\n */\n series.points = points;\n Series_fireEvent(this, 'afterGeneratePoints');\n };\n /**\n * Get current X extremes for the visible data.\n *\n * @private\n * @function Highcharts.Series#getXExtremes\n * @param {Array<number>} xData\n * The data to inspect. Defaults to the current data within the visible\n * range.\n */\n Series.prototype.getXExtremes = function (xData) {\n return {\n min: Series_arrayMin(xData),\n max: Series_arrayMax(xData)\n };\n };\n /**\n * Calculate Y extremes for the visible data. The result is returned\n * as an object with `dataMin` and `dataMax` properties.\n *\n * @private\n * @function Highcharts.Series#getExtremes\n * @param {Array<number>} [yData]\n * The data to inspect. Defaults to the current data within the visible\n * range.\n * @param {boolean} [forceExtremesFromAll]\n * Force getting extremes of a total series data range.\n */\n Series.prototype.getExtremes = function (yData, forceExtremesFromAll) {\n var _a;\n var _b = this, xAxis = _b.xAxis, yAxis = _b.yAxis, getExtremesFromAll = forceExtremesFromAll ||\n this.getExtremesFromAll ||\n this.options.getExtremesFromAll, // #4599, #21003\n table = getExtremesFromAll && this.cropped ?\n this.dataTable :\n this.dataTable.modified, rowCount = table.rowCount, customData = yData || this.stackedYData, yAxisData = customData ?\n [customData] :\n ((_a = (this.keysAffectYAxis || this.pointArrayMap || ['y'])) === null || _a === void 0 ? void 0 : _a.map(function (key) { return table.getColumn(key, true) || []; })) || [], xData = this.getColumn('x', true), activeYData = [], \n // Handle X outside the viewed area. This does not work with\n // non-sorted data like scatter (#7639).\n shoulder = this.requireSorting && !this.is('column') ?\n 1 : 0, \n // #2117, need to compensate for log X axis\n positiveValuesOnly = yAxis ? yAxis.positiveValuesOnly : false, doAll = getExtremesFromAll ||\n this.cropped ||\n !xAxis; // For colorAxis support\n var xExtremes, x, i, xMin = 0, xMax = 0;\n if (xAxis) {\n xExtremes = xAxis.getExtremes();\n xMin = xExtremes.min;\n xMax = xExtremes.max;\n }\n for (i = 0; i < rowCount; i++) {\n x = xData[i];\n // Check if it is within the selected x axis range\n if (doAll ||\n ((xData[i + shoulder] || x) >= xMin &&\n (xData[i - shoulder] || x) <= xMax)) {\n for (var _c = 0, yAxisData_1 = yAxisData; _c < yAxisData_1.length; _c++) {\n var values = yAxisData_1[_c];\n var val = values[i];\n // For points within the visible range, including the\n // first point outside the visible range (#7061),\n // consider y extremes.\n if (Series_isNumber(val) &&\n (val > 0 || !positiveValuesOnly)) {\n activeYData.push(val);\n }\n }\n }\n }\n var dataExtremes = {\n activeYData: activeYData, // Needed for Stock Cumulative Sum\n dataMin: Series_arrayMin(activeYData),\n dataMax: Series_arrayMax(activeYData)\n };\n Series_fireEvent(this, 'afterGetExtremes', { dataExtremes: dataExtremes });\n return dataExtremes;\n };\n /**\n * Set the current data extremes as `dataMin` and `dataMax` on the\n * Series item. Use this only when the series properties should be\n * updated.\n *\n * @private\n * @function Highcharts.Series#applyExtremes\n */\n Series.prototype.applyExtremes = function () {\n var dataExtremes = this.getExtremes();\n /**\n * Contains the minimum value of the series' data point. Some series\n * types like `networkgraph` do not support this property as they\n * lack a `y`-value.\n * @name Highcharts.Series#dataMin\n * @type {number|undefined}\n * @readonly\n */\n this.dataMin = dataExtremes.dataMin;\n /**\n * Contains the maximum value of the series' data point. Some series\n * types like `networkgraph` do not support this property as they\n * lack a `y`-value.\n * @name Highcharts.Series#dataMax\n * @type {number|undefined}\n * @readonly\n */\n this.dataMax = dataExtremes.dataMax;\n return dataExtremes;\n };\n /**\n * Find and return the first non nullish point in the data\n *\n * @private\n * @function Highcharts.Series.getFirstValidPoint\n * @param {Array<Highcharts.PointOptionsType>} data\n * Array of options for points\n * @param {number} [start=0]\n * Index to start searching from\n * @param {number} [increment=1]\n * Index increment, set -1 to search backwards\n */\n Series.prototype.getFirstValidPoint = function (data, start, increment) {\n if (start === void 0) { start = 0; }\n if (increment === void 0) { increment = 1; }\n var dataLength = data.length;\n var i = start;\n while (i >= 0 && i < dataLength) {\n if (Series_defined(data[i])) {\n return data[i];\n }\n i += increment;\n }\n };\n /**\n * Translate data points from raw data values to chart specific\n * positioning data needed later in the `drawPoints` and `drawGraph`\n * functions. This function can be overridden in plugins and custom\n * series type implementations.\n *\n * @function Highcharts.Series#translate\n *\n * @emits Highcharts.Series#events:translate\n */\n Series.prototype.translate = function () {\n var _a;\n this.generatePoints();\n var series = this,\n options = series.options,\n stacking = options.stacking,\n xAxis = series.xAxis,\n enabledDataSorting = series.enabledDataSorting,\n yAxis = series.yAxis,\n points = series.points,\n dataLength = points.length,\n pointPlacement = series.pointPlacementToXValue(), // #7860\n dynamicallyPlaced = Boolean(pointPlacement),\n threshold = options.threshold,\n stackThreshold = options.startFromThreshold ? threshold : 0;\n var i,\n plotX,\n lastPlotX,\n stackIndicator,\n closestPointRangePx = Number.MAX_VALUE;\n /**\n * Plotted coordinates need to be within a limited range. Drawing\n * too far outside the viewport causes various rendering issues\n * (#3201, #3923, #7555).\n * @private\n */\n function limitedRange(val) {\n return Series_clamp(val, -1e9, 1e9);\n }\n // Translate each point\n for (i = 0; i < dataLength; i++) {\n var point = points[i],\n xValue = point.x;\n var stackItem = void 0,\n stackValues = void 0,\n yValue = point.y,\n lowValue = point.low;\n var stacks = stacking && ((_a = yAxis.stacking) === null || _a === void 0 ? void 0 : _a.stacks[(series.negStacks &&\n yValue <\n (stackThreshold ? 0 : threshold) ?\n '-' :\n '') + series.stackKey]);\n plotX = xAxis.translate(// #3923\n xValue, false, false, false, true, pointPlacement);\n /**\n * The translated X value for the point in terms of pixels. Relative\n * to the X axis position if the series has one, otherwise relative\n * to the plot area. Depending on the series type this value might\n * not be defined.\n *\n * In an inverted chart the x-axis is going from the bottom to the\n * top so the `plotX` value is the number of pixels from the bottom\n * of the axis.\n *\n * @see Highcharts.Point#pos\n * @name Highcharts.Point#plotX\n * @type {number|undefined}\n */\n point.plotX = Series_isNumber(plotX) ? Series_correctFloat(// #5236\n limitedRange(plotX) // #3923\n ) : void 0;\n // Calculate the bottom y value for stacked series\n if (stacking &&\n series.visible &&\n stacks &&\n stacks[xValue]) {\n stackIndicator = series.getStackIndicator(stackIndicator, xValue, series.index);\n if (!point.isNull && stackIndicator.key) {\n stackItem = stacks[xValue];\n stackValues = stackItem.points[stackIndicator.key];\n }\n if (stackItem && Series_isArray(stackValues)) {\n lowValue = stackValues[0];\n yValue = stackValues[1];\n if (lowValue === stackThreshold &&\n stackIndicator.key === stacks[xValue].base) {\n lowValue = Series_pick(Series_isNumber(threshold) ? threshold : yAxis.min);\n }\n // #1200, #1232\n if (yAxis.positiveValuesOnly &&\n Series_defined(lowValue) &&\n lowValue <= 0) {\n lowValue = void 0;\n }\n point.total = point.stackTotal = Series_pick(stackItem.total);\n point.percentage = Series_defined(point.y) && stackItem.total ?\n (point.y / stackItem.total * 100) : void 0;\n point.stackY = yValue;\n // In case of variwide series (where widths of points are\n // different in most cases), stack labels are positioned\n // wrongly, so the call of the setOffset is omitted here and\n // labels are correctly positioned later, at the end of the\n // variwide's translate function (#10962)\n if (!series.irregularWidths) {\n stackItem.setOffset(series.pointXOffset || 0, series.barW || 0, void 0, void 0, void 0, series.xAxis);\n }\n }\n }\n // Set translated yBottom or remove it\n point.yBottom = Series_defined(lowValue) ?\n limitedRange(yAxis.translate(lowValue, false, true, false, true)) :\n void 0;\n // General hook, used for Highcharts Stock compare and cumulative\n if (series.dataModify) {\n yValue = series.dataModify.modifyValue(yValue, i);\n }\n // Set the plotY value, reset it for redraws #3201, #18422\n var plotY = void 0;\n if (Series_isNumber(yValue) && point.plotX !== void 0) {\n plotY = yAxis.translate(yValue, false, true, false, true);\n plotY = Series_isNumber(plotY) ? limitedRange(plotY) : void 0;\n }\n /**\n * The translated Y value for the point in terms of pixels. Relative\n * to the Y axis position if the series has one, otherwise relative\n * to the plot area. Depending on the series type this value might\n * not be defined.\n *\n * In an inverted chart the y-axis is going from right to left\n * so the `plotY` value is the number of pixels from the right\n * of the `yAxis`.\n *\n * @see Highcharts.Point#pos\n * @name Highcharts.Point#plotY\n * @type {number|undefined}\n */\n point.plotY = plotY;\n point.isInside = this.isPointInside(point);\n // Set client related positions for mouse tracking\n point.clientX = dynamicallyPlaced ?\n Series_correctFloat(xAxis.translate(xValue, false, false, false, true, pointPlacement)) :\n plotX; // #1514, #5383, #5518\n // Negative points #19028\n point.negative = (point.y || 0) < (threshold || 0);\n // Determine auto enabling of markers (#3635, #5099)\n if (!point.isNull && point.visible !== false) {\n if (typeof lastPlotX !== 'undefined') {\n closestPointRangePx = Math.min(closestPointRangePx, Math.abs(plotX - lastPlotX));\n }\n lastPlotX = plotX;\n }\n // Find point zone\n point.zone = this.zones.length ? point.getZone() : void 0;\n // Animate new points with data sorting\n if (!point.graphic && series.group && enabledDataSorting) {\n point.isNew = true;\n }\n }\n series.closestPointRangePx = closestPointRangePx;\n Series_fireEvent(this, 'afterTranslate');\n };\n /**\n * Return the series points with null points filtered out.\n *\n * @function Highcharts.Series#getValidPoints\n *\n * @param {Array<Highcharts.Point>} [points]\n * The points to inspect, defaults to {@link Series.points}.\n *\n * @param {boolean} [insideOnly=false]\n * Whether to inspect only the points that are inside the visible view.\n *\n * @param {boolean} [allowNull=false]\n * Whether to allow null points to pass as valid points.\n *\n * @return {Array<Highcharts.Point>}\n * The valid points.\n */\n Series.prototype.getValidPoints = function (points, insideOnly, allowNull) {\n var chart = this.chart;\n // #3916, #5029, #5085\n return (points || this.points || []).filter(function (point) {\n var plotX = point.plotX,\n plotY = point.plotY, \n // Undefined plotY is treated as null when negative values\n // in log axis (#18422)\n asNull = !allowNull && (point.isNull || !Series_isNumber(plotY));\n if (asNull || (insideOnly && !chart.isInsidePlot(plotX, plotY, { inverted: chart.inverted }))) {\n return false;\n }\n return point.visible !== false;\n });\n };\n /**\n * Get the clipping for the series. Could be called for a series to\n * initiate animating the clip or to set the final clip (only width\n * and x).\n *\n * @private\n * @function Highcharts.Series#getClip\n */\n Series.prototype.getClipBox = function () {\n var _a;\n var _b = this,\n chart = _b.chart,\n xAxis = _b.xAxis,\n yAxis = _b.yAxis;\n // If no axes on the series, use global clipBox\n var _c = Series_merge(chart.clipBox),\n x = _c.x,\n y = _c.y,\n width = _c.width,\n height = _c.height;\n // Otherwise, use clipBox.width which is corrected for plotBorderWidth\n // and clipOffset\n if (xAxis && xAxis.len !== chart.plotSizeX) {\n width = xAxis.len;\n }\n if (yAxis && yAxis.len !== chart.plotSizeY) {\n height = yAxis.len;\n }\n // If the chart is inverted and the series is not invertible, the chart\n // clip box should be inverted, but not the series clip box (#20264)\n if (chart.inverted && !this.invertible) {\n _a = [height, width], width = _a[0], height = _a[1];\n }\n return { x: x, y: y, width: width, height: height };\n };\n /**\n * Get the shared clip key, creating it if it doesn't exist.\n *\n * @private\n * @function Highcharts.Series#getSharedClipKey\n */\n Series.prototype.getSharedClipKey = function () {\n this.sharedClipKey = (this.options.xAxis || 0) + ',' +\n (this.options.yAxis || 0);\n return this.sharedClipKey;\n };\n /**\n * Set the clipping for the series. For animated series the clip is later\n * modified.\n *\n * @private\n * @function Highcharts.Series#setClip\n */\n Series.prototype.setClip = function () {\n var _a = this,\n chart = _a.chart,\n group = _a.group,\n markerGroup = _a.markerGroup,\n sharedClips = chart.sharedClips,\n renderer = chart.renderer,\n clipBox = this.getClipBox(),\n sharedClipKey = this.getSharedClipKey(); // #4526\n var clipRect = sharedClips[sharedClipKey];\n // If a clipping rectangle for the same set of axes does not exist,\n // create it\n if (!clipRect) {\n sharedClips[sharedClipKey] = clipRect = renderer.clipRect(clipBox);\n // When setting chart size, or when the series is rendered again before\n // starting animating, in compliance to a responsive rule\n }\n else {\n clipRect.animate(clipBox);\n }\n if (group) {\n // When clip is false, reset to no clip after animation\n group.clip(this.options.clip === false ? void 0 : clipRect);\n }\n // Unclip temporary animation clip\n if (markerGroup) {\n markerGroup.clip();\n }\n };\n /**\n * Animate in the series. Called internally twice. First with the `init`\n * parameter set to true, which sets up the initial state of the\n * animation. Then when ready, it is called with the `init` parameter\n * undefined, in order to perform the actual animation.\n *\n * @function Highcharts.Series#animate\n *\n * @param {boolean} [init]\n * Initialize the animation.\n */\n Series.prototype.animate = function (init) {\n var _a = this, chart = _a.chart, group = _a.group, markerGroup = _a.markerGroup, inverted = chart.inverted, animation = Series_animObject(this.options.animation), \n // The key for temporary animation clips\n animationClipKey = [\n this.getSharedClipKey(),\n animation.duration,\n animation.easing,\n animation.defer\n ].join(',');\n var animationClipRect = chart.sharedClips[animationClipKey],\n markerAnimationClipRect = chart.sharedClips[animationClipKey + 'm'];\n // Initialize the animation. Set up the clipping rectangle.\n if (init && group) {\n var clipBox = this.getClipBox();\n // Create temporary animation clips\n if (!animationClipRect) {\n clipBox.width = 0;\n if (inverted) {\n clipBox.x = chart.plotHeight;\n }\n animationClipRect = chart.renderer.clipRect(clipBox);\n chart.sharedClips[animationClipKey] = animationClipRect;\n // The marker clip box. The number 99 is a safe margin to avoid\n // markers being clipped during animation.\n var markerClipBox = {\n x: inverted ? -99 : -99,\n y: inverted ? -99 : -99,\n width: inverted ? chart.plotWidth + 199 : 99,\n height: inverted ? 99 : chart.plotHeight + 199\n };\n markerAnimationClipRect = chart.renderer.clipRect(markerClipBox);\n chart.sharedClips[animationClipKey + 'm'] = markerAnimationClipRect;\n }\n else {\n // When height changes during animation, typically due to\n // responsive settings\n animationClipRect.attr('height', clipBox.height);\n }\n group.clip(animationClipRect);\n markerGroup === null || markerGroup === void 0 ? void 0 : markerGroup.clip(markerAnimationClipRect);\n // Run the animation\n }\n else if (animationClipRect &&\n // Only first series in this pane\n !animationClipRect.hasClass('highcharts-animating')) {\n var finalBox = this.getClipBox(),\n step_1 = animation.step;\n // Only do this when there are actually markers, or we have multiple\n // series (#20473)\n if ((markerGroup === null || markerGroup === void 0 ? void 0 : markerGroup.element.childNodes.length) ||\n chart.series.length > 1) {\n // To provide as smooth animation as possible, update the marker\n // group clipping in steps of the main group animation\n animation.step = function (val, fx) {\n if (step_1) {\n step_1.apply(fx, arguments);\n }\n if (fx.prop === 'width' &&\n (markerAnimationClipRect === null || markerAnimationClipRect === void 0 ? void 0 : markerAnimationClipRect.element)) {\n markerAnimationClipRect.attr(inverted ? 'height' : 'width', val + 99);\n }\n };\n }\n animationClipRect\n .addClass('highcharts-animating')\n .animate(finalBox, animation);\n }\n };\n /**\n * This runs after animation to land on the final plot clipping.\n *\n * @private\n * @function Highcharts.Series#afterAnimate\n *\n * @emits Highcharts.Series#event:afterAnimate\n */\n Series.prototype.afterAnimate = function () {\n var _this = this;\n this.setClip();\n // Destroy temporary clip rectangles that are no longer in use\n Series_objectEach(this.chart.sharedClips, function (clip, key, sharedClips) {\n if (clip && !_this.chart.container.querySelector(\"[clip-path=\\\"url(#\".concat(clip.id, \")\\\"]\"))) {\n clip.destroy();\n delete sharedClips[key];\n }\n });\n this.finishedAnimating = true;\n Series_fireEvent(this, 'afterAnimate');\n };\n /**\n * Draw the markers for line-like series types, and columns or other\n * graphical representation for {@link Point} objects for other series\n * types. The resulting element is typically stored as\n * {@link Point.graphic}, and is created on the first call and updated\n * and moved on subsequent calls.\n *\n * @function Highcharts.Series#drawPoints\n */\n Series.prototype.drawPoints = function (points) {\n if (points === void 0) { points = this.points; }\n var series = this,\n chart = series.chart,\n styledMode = chart.styledMode,\n colorAxis = series.colorAxis,\n options = series.options,\n seriesMarkerOptions = options.marker,\n markerGroup = series[series.specialGroup || 'markerGroup'],\n xAxis = series.xAxis,\n globallyEnabled = Series_pick(seriesMarkerOptions.enabled, !xAxis || xAxis.isRadial ? true : null, \n // Use larger or equal as radius is null in bubbles (#6321)\n series.closestPointRangePx >= (seriesMarkerOptions.enabledThreshold *\n seriesMarkerOptions.radius));\n var i,\n point,\n graphic,\n verb,\n pointMarkerOptions,\n hasPointMarker,\n markerAttribs;\n if (seriesMarkerOptions.enabled !== false ||\n series._hasPointMarkers) {\n for (i = 0; i < points.length; i++) {\n point = points[i];\n graphic = point.graphic;\n verb = graphic ? 'animate' : 'attr';\n pointMarkerOptions = point.marker || {};\n hasPointMarker = !!point.marker;\n var shouldDrawMarker = ((globallyEnabled &&\n typeof pointMarkerOptions.enabled === 'undefined') || pointMarkerOptions.enabled) && !point.isNull && point.visible !== false;\n // Only draw the point if y is defined\n if (shouldDrawMarker) {\n // Shortcuts\n var symbol = Series_pick(pointMarkerOptions.symbol,\n series.symbol, 'rect');\n markerAttribs = series.markerAttribs(point, (point.selected && 'select'));\n // Set starting position for point sliding animation.\n if (series.enabledDataSorting) {\n point.startXPos = xAxis.reversed ?\n -(markerAttribs.width || 0) :\n xAxis.width;\n }\n var isInside = point.isInside !== false;\n if (!graphic &&\n isInside &&\n ((markerAttribs.width || 0) > 0 || point.hasImage)) {\n /**\n * SVG graphic representing the point in the chart. In\n * some cases it may be a hidden graphic to improve\n * accessibility.\n *\n * Typically this is a simple shape, like a `rect`\n * for column charts or `path` for line markers, but\n * for some complex series types like boxplot or 3D\n * charts, the graphic may be a `g` element\n * containing other shapes. The graphic is generated\n * the first time {@link Series#drawPoints} runs,\n * and updated and moved on subsequent runs.\n *\n * @see Highcharts.Point#graphics\n *\n * @name Highcharts.Point#graphic\n * @type {Highcharts.SVGElement|undefined}\n */\n point.graphic = graphic = chart.renderer\n .symbol(symbol, markerAttribs.x, markerAttribs.y, markerAttribs.width, markerAttribs.height, hasPointMarker ?\n pointMarkerOptions :\n seriesMarkerOptions)\n .add(markerGroup);\n // Sliding animation for new points\n if (series.enabledDataSorting &&\n chart.hasRendered) {\n graphic.attr({\n x: point.startXPos\n });\n verb = 'animate';\n }\n }\n if (graphic && verb === 'animate') { // Update\n // Since the marker group isn't clipped, each\n // individual marker must be toggled\n graphic[isInside ? 'show' : 'hide'](isInside)\n .animate(markerAttribs);\n }\n // Presentational attributes\n if (graphic) {\n var pointAttr = series.pointAttribs(point, ((styledMode || !point.selected) ?\n void 0 :\n 'select'));\n if (!styledMode) {\n graphic[verb](pointAttr);\n }\n else if (colorAxis) { // #14114\n graphic['css']({\n fill: pointAttr.fill\n });\n }\n }\n if (graphic) {\n graphic.addClass(point.getClassName(), true);\n }\n }\n else if (graphic) {\n point.graphic = graphic.destroy(); // #1269\n }\n }\n }\n };\n /**\n * Get non-presentational attributes for a point. Used internally for\n * both styled mode and classic. Can be overridden for different series\n * types.\n *\n * @see Series#pointAttribs\n *\n * @function Highcharts.Series#markerAttribs\n *\n * @param {Highcharts.Point} point\n * The Point to inspect.\n *\n * @param {string} [state]\n * The state, can be either `hover`, `select` or undefined.\n *\n * @return {Highcharts.SVGAttributes}\n * A hash containing those attributes that are not settable from CSS.\n */\n Series.prototype.markerAttribs = function (point, state) {\n var seriesOptions = this.options,\n seriesMarkerOptions = seriesOptions.marker,\n pointMarkerOptions = point.marker || {},\n symbol = (pointMarkerOptions.symbol ||\n seriesMarkerOptions.symbol),\n attribs = {};\n var seriesStateOptions,\n pointStateOptions,\n radius = Series_pick(pointMarkerOptions.radius,\n seriesMarkerOptions && seriesMarkerOptions.radius);\n // Handle hover and select states\n if (state) {\n seriesStateOptions = seriesMarkerOptions.states[state];\n pointStateOptions = pointMarkerOptions.states &&\n pointMarkerOptions.states[state];\n radius = Series_pick(pointStateOptions && pointStateOptions.radius, seriesStateOptions && seriesStateOptions.radius, radius && radius + (seriesStateOptions && seriesStateOptions.radiusPlus ||\n 0));\n }\n point.hasImage = symbol && symbol.indexOf('url') === 0;\n if (point.hasImage) {\n radius = 0; // And subsequently width and height is not set\n }\n var pos = point.pos();\n if (Series_isNumber(radius) && pos) {\n if (seriesOptions.crisp) {\n pos[0] = Series_crisp(pos[0], point.hasImage ?\n 0 :\n symbol === 'rect' ?\n // Rectangle symbols need crisp edges, others don't\n (seriesMarkerOptions === null || seriesMarkerOptions === void 0 ? void 0 : seriesMarkerOptions.lineWidth) || 0 :\n 1);\n }\n attribs.x = pos[0] - radius;\n attribs.y = pos[1] - radius;\n }\n if (radius) {\n attribs.width = attribs.height = 2 * radius;\n }\n return attribs;\n };\n /**\n * Internal function to get presentational attributes for each point.\n * Unlike {@link Series#markerAttribs}, this function should return\n * those attributes that can also be set in CSS. In styled mode,\n * `pointAttribs` won't be called.\n *\n * @private\n * @function Highcharts.Series#pointAttribs\n *\n * @param {Highcharts.Point} [point]\n * The point instance to inspect.\n *\n * @param {string} [state]\n * The point state, can be either `hover`, `select` or 'normal'. If\n * undefined, normal state is assumed.\n *\n * @return {Highcharts.SVGAttributes}\n * The presentational attributes to be set on the point.\n */\n Series.prototype.pointAttribs = function (point, state) {\n var seriesMarkerOptions = this.options.marker,\n pointOptions = point && point.options,\n pointMarkerOptions = ((pointOptions && pointOptions.marker) || {}),\n pointColorOption = pointOptions && pointOptions.color,\n pointColor = point && point.color,\n zoneColor = point && point.zone && point.zone.color;\n var seriesStateOptions,\n pointStateOptions,\n color = this.color,\n fill,\n stroke,\n strokeWidth = Series_pick(pointMarkerOptions.lineWidth,\n seriesMarkerOptions.lineWidth),\n opacity = 1;\n color = (pointColorOption ||\n zoneColor ||\n pointColor ||\n color);\n fill = (pointMarkerOptions.fillColor ||\n seriesMarkerOptions.fillColor ||\n color);\n stroke = (pointMarkerOptions.lineColor ||\n seriesMarkerOptions.lineColor ||\n color);\n // Handle hover and select states\n state = state || 'normal';\n if (state) {\n seriesStateOptions = (seriesMarkerOptions.states[state] || {});\n pointStateOptions = (pointMarkerOptions.states &&\n pointMarkerOptions.states[state]) || {};\n strokeWidth = Series_pick(pointStateOptions.lineWidth, seriesStateOptions.lineWidth, strokeWidth + Series_pick(pointStateOptions.lineWidthPlus, seriesStateOptions.lineWidthPlus, 0));\n fill = (pointStateOptions.fillColor ||\n seriesStateOptions.fillColor ||\n fill);\n stroke = (pointStateOptions.lineColor ||\n seriesStateOptions.lineColor ||\n stroke);\n opacity = Series_pick(pointStateOptions.opacity, seriesStateOptions.opacity, opacity);\n }\n return {\n 'stroke': stroke,\n 'stroke-width': strokeWidth,\n 'fill': fill,\n 'opacity': opacity\n };\n };\n /**\n * Clear DOM objects and free up memory.\n *\n * @private\n * @function Highcharts.Series#destroy\n *\n * @emits Highcharts.Series#event:destroy\n */\n Series.prototype.destroy = function (keepEventsForUpdate) {\n var series = this, chart = series.chart, issue134 = /AppleWebKit\\/533/.test(Series_win.navigator.userAgent), data = series.data || [];\n var destroy,\n i,\n point,\n axis;\n // Add event hook\n Series_fireEvent(series, 'destroy', { keepEventsForUpdate: keepEventsForUpdate });\n // Remove events\n this.removeEvents(keepEventsForUpdate);\n // Erase from axes\n (series.axisTypes || []).forEach(function (AXIS) {\n axis = series[AXIS];\n if (axis && axis.series) {\n Series_erase(axis.series, series);\n axis.isDirty = axis.forceRedraw = true;\n }\n });\n // Remove legend items\n if (series.legendItem) {\n series.chart.legend.destroyItem(series);\n }\n // Destroy all points with their elements\n i = data.length;\n while (i--) {\n point = data[i];\n if (point && point.destroy) {\n point.destroy();\n }\n }\n for (var _a = 0, _b = series.zones; _a < _b.length; _a++) {\n var zone = _b[_a];\n // Destroy SVGElement's but preserve primitive props (#20426)\n Series_destroyObjectProperties(zone, void 0, true);\n }\n // Clear the animation timeout if we are destroying the series\n // during initial animation\n Core_Utilities.clearTimeout(series.animationTimeout);\n // Destroy all SVGElements associated to the series\n Series_objectEach(series, function (val, prop) {\n // Survive provides a hook for not destroying\n if (val instanceof SVG_SVGElement && !val.survive) {\n // Issue 134 workaround\n destroy = issue134 && prop === 'group' ?\n 'hide' :\n 'destroy';\n val[destroy]();\n }\n });\n // Remove from hoverSeries\n if (chart.hoverSeries === series) {\n chart.hoverSeries = void 0;\n }\n Series_erase(chart.series, series);\n chart.orderItems('series');\n // Clear all members\n Series_objectEach(series, function (val, prop) {\n if (!keepEventsForUpdate || prop !== 'hcEvents') {\n delete series[prop];\n }\n });\n };\n /**\n * Clip the graphs into zones for colors and styling.\n *\n * @private\n * @function Highcharts.Series#applyZones\n */\n Series.prototype.applyZones = function () {\n var series = this,\n area = series.area,\n chart = series.chart,\n graph = series.graph,\n zones = series.zones,\n points = series.points,\n xAxis = series.xAxis,\n yAxis = series.yAxis,\n zoneAxis = series.zoneAxis,\n inverted = chart.inverted,\n renderer = chart.renderer,\n axis = this[\"\" + zoneAxis + \"Axis\"],\n _a = axis || {},\n isXAxis = _a.isXAxis,\n _b = _a.len,\n len = _b === void 0 ? 0 : _b,\n _c = _a.minPointOffset,\n minPointOffset = _c === void 0 ? 0 : _c,\n halfWidth = ((graph === null || graph === void 0 ? void 0 : graph.strokeWidth()) || 0) / 2 + 1, \n // Avoid points that are so close to the threshold that the graph\n // line would be split\n avoidClose = function (zone,\n plotX,\n plotY) {\n if (plotX === void 0) { plotX = 0; }\n if (plotY === void 0) { plotY = 0; }\n if (inverted) {\n plotY = len - plotY;\n }\n var _a = zone.translated,\n translated = _a === void 0 ? 0 : _a,\n lineClip = zone.lineClip,\n distance = plotY - translated;\n lineClip === null || lineClip === void 0 ? void 0 : lineClip.push([\n 'L',\n plotX,\n Math.abs(distance) < halfWidth ?\n plotY - halfWidth * (distance <= 0 ? -1 : 1) :\n translated\n ]);\n };\n if (zones.length &&\n (graph || area) &&\n axis &&\n Series_isNumber(axis.min)) {\n var axisMax_1 = axis.getExtremes().max + minPointOffset, \n // Invert the x and y coordinates of inverted charts\n invertPath_1 = function (path) {\n path.forEach(function (segment,\n i) {\n if (segment[0] === 'M' || segment[0] === 'L') {\n path[i] = [\n segment[0],\n isXAxis ? len - segment[1] : segment[1],\n isXAxis ? segment[2] : len - segment[2]\n ];\n }\n });\n };\n // Reset\n zones.forEach(function (zone) {\n zone.lineClip = [];\n zone.translated = Series_clamp(axis.toPixels(Series_pick(zone.value, axisMax_1), true) || 0, 0, len);\n });\n // The use of the Color Threshold assumes there are no gaps so it is\n // safe to hide the original graph and area unless it is not\n // waterfall series, then use showLine property to set lines between\n // columns to be visible (#7862)\n if (graph && !this.showLine) {\n graph.hide();\n }\n if (area) {\n area.hide();\n }\n // Prepare for adaptive clips, avoiding segments close to the\n // threshold (#19709)\n if (zoneAxis === 'y' &&\n // Overheat protection\n points.length < xAxis.len) {\n for (var _d = 0, points_1 = points; _d < points_1.length; _d++) {\n var point = points_1[_d];\n var plotX = point.plotX,\n plotY = point.plotY,\n zone = point.zone,\n zoneBelow = zone && zones[zones.indexOf(zone) - 1];\n // Close to upper boundary\n if (zone) {\n avoidClose(zone, plotX, plotY);\n }\n // Close to lower boundary\n if (zoneBelow) {\n avoidClose(zoneBelow, plotX, plotY);\n }\n }\n }\n // Compute and apply the clips\n var lastLineClip_1 = [], \n // Starting point of the first zone. Offset for category axis\n // (#22188).\n lastTranslated_1 = axis.toPixels(axis.getExtremes().min - minPointOffset,\n true);\n zones.forEach(function (zone) {\n var _a,\n _b;\n var lineClip = zone.lineClip || [],\n translated = Math.round(zone.translated || 0);\n if (xAxis.reversed) {\n lineClip.reverse();\n }\n var clip = zone.clip,\n simpleClip = zone.simpleClip,\n x1 = 0,\n y1 = 0,\n x2 = xAxis.len,\n y2 = yAxis.len;\n if (isXAxis) {\n x1 = translated;\n x2 = lastTranslated_1;\n }\n else {\n y1 = translated;\n y2 = lastTranslated_1;\n }\n // Adaptive clips\n var simplePath = [\n ['M',\n x1,\n y1],\n ['L',\n x2,\n y1],\n ['L',\n x2,\n y2],\n ['L',\n x1,\n y2],\n ['Z']\n ],\n adaptivePath = Series_spreadArray(Series_spreadArray(Series_spreadArray(Series_spreadArray([\n simplePath[0]\n ],\n lineClip,\n true),\n [\n simplePath[1],\n simplePath[2]\n ],\n false),\n lastLineClip_1,\n true),\n [\n simplePath[3],\n simplePath[4]\n ],\n false);\n lastLineClip_1 = lineClip.reverse();\n lastTranslated_1 = translated;\n if (inverted) {\n invertPath_1(adaptivePath);\n if (area) {\n invertPath_1(simplePath);\n }\n }\n /* Debug clip paths\n zone.path?.destroy();\n zone.path = chart.renderer.path(adaptivePath)\n .attr({\n stroke: zone.color || this.color || 'gray',\n 'stroke-width': 1,\n 'dashstyle': 'Dash'\n })\n .add(series.group);\n // */\n if (clip) {\n clip.animate({ d: adaptivePath });\n simpleClip === null || simpleClip === void 0 ? void 0 : simpleClip.animate({ d: simplePath });\n }\n else {\n clip = zone.clip = renderer.path(adaptivePath);\n if (area) {\n simpleClip = zone.simpleClip = renderer.path(simplePath);\n }\n }\n // When no data, graph zone is not applied and after setData\n // clip was ignored. As a result, it should be applied each\n // time.\n if (graph) {\n (_a = zone.graph) === null || _a === void 0 ? void 0 : _a.clip(clip);\n }\n if (area) {\n (_b = zone.area) === null || _b === void 0 ? void 0 : _b.clip(simpleClip);\n }\n });\n }\n else if (series.visible) {\n // If zones were removed, restore graph and area\n if (graph) {\n graph.show();\n }\n if (area) {\n area.show();\n }\n }\n };\n /**\n * General abstraction for creating plot groups like series.group,\n * series.dataLabelsGroup and series.markerGroup. On subsequent calls,\n * the group will only be adjusted to the updated plot size.\n *\n * @private\n * @function Highcharts.Series#plotGroup\n */\n Series.prototype.plotGroup = function (prop, name, visibility, zIndex, parent) {\n var group = this[prop];\n var isNew = !group,\n attrs = {\n visibility: visibility,\n zIndex: zIndex || 0.1 // Pointer logic uses this\n };\n // Avoid setting undefined opacity, or in styled mode\n if (Series_defined(this.opacity) &&\n !this.chart.styledMode && this.state !== 'inactive' // #13719\n ) {\n attrs.opacity = this.opacity;\n }\n // Generate it on first call\n if (!group) {\n this[prop] = group = this.chart.renderer\n .g()\n .add(parent);\n }\n // Add the class names, and replace existing ones as response to\n // Series.update (#6660)\n group.addClass(('highcharts-' + name +\n ' highcharts-series-' + this.index +\n ' highcharts-' + this.type + '-series ' +\n (Series_defined(this.colorIndex) ?\n 'highcharts-color-' + this.colorIndex + ' ' :\n '') +\n (this.options.className || '') +\n (group.hasClass('highcharts-tracker') ?\n ' highcharts-tracker' :\n '')), true);\n // Place it on first and subsequent (redraw) calls\n group.attr(attrs)[isNew ? 'attr' : 'animate'](this.getPlotBox(name));\n return group;\n };\n /**\n * Get the translation and scale for the plot area of this series.\n *\n * @function Highcharts.Series#getPlotBox\n */\n Series.prototype.getPlotBox = function (name) {\n var horAxis = this.xAxis,\n vertAxis = this.yAxis;\n var chart = this.chart,\n inverted = (chart.inverted &&\n !chart.polar &&\n horAxis &&\n this.invertible &&\n name === 'series');\n // Swap axes for inverted (#2339)\n if (chart.inverted) {\n horAxis = vertAxis;\n vertAxis = this.xAxis;\n }\n return {\n translateX: horAxis ? horAxis.left : chart.plotLeft,\n translateY: vertAxis ? vertAxis.top : chart.plotTop,\n rotation: inverted ? 90 : 0,\n rotationOriginX: inverted ?\n (horAxis.len - vertAxis.len) / 2 :\n 0,\n rotationOriginY: inverted ?\n (horAxis.len + vertAxis.len) / 2 :\n 0,\n scaleX: inverted ? -1 : 1, // #1623\n scaleY: 1\n };\n };\n /**\n * Removes the event handlers attached previously with addEvents.\n * @private\n * @function Highcharts.Series#removeEvents\n */\n Series.prototype.removeEvents = function (keepEventsForUpdate) {\n var eventsToUnbind = this.eventsToUnbind;\n if (!keepEventsForUpdate) {\n // Remove all events\n Series_removeEvent(this);\n }\n if (eventsToUnbind.length) {\n // Remove only internal events for proper update. #12355 solves\n // problem with multiple destroy events\n eventsToUnbind.forEach(function (unbind) {\n unbind();\n });\n eventsToUnbind.length = 0;\n }\n };\n /**\n * Render the graph and markers. Called internally when first rendering\n * and later when redrawing the chart. This function can be extended in\n * plugins, but normally shouldn't be called directly.\n *\n * @function Highcharts.Series#render\n *\n * @emits Highcharts.Series#event:afterRender\n */\n Series.prototype.render = function () {\n var _a,\n _b,\n _c,\n _d,\n _e;\n var series = this,\n chart = series.chart,\n options = series.options,\n hasRendered = series.hasRendered,\n animOptions = Series_animObject(options.animation),\n visibility = series.visible ?\n 'inherit' : 'hidden', // #2597\n zIndex = options.zIndex,\n chartSeriesGroup = chart.seriesGroup;\n var animDuration = series.finishedAnimating ?\n 0 : animOptions.duration;\n Series_fireEvent(this, 'render');\n // The group\n series.plotGroup('group', 'series', visibility, zIndex, chartSeriesGroup);\n series.markerGroup = series.plotGroup('markerGroup', 'markers', visibility, zIndex, chartSeriesGroup);\n // Initial clipping, applies to columns etc. (#3839).\n if (options.clip !== false) {\n series.setClip();\n }\n // Initialize the animation\n if (animDuration) {\n (_a = series.animate) === null || _a === void 0 ? void 0 : _a.call(series, true);\n }\n // Draw the graph if any\n if (series.drawGraph) {\n series.drawGraph();\n series.applyZones();\n }\n // Draw the points\n if (series.visible) {\n series.drawPoints();\n }\n // Draw the data labels\n (_b = series.drawDataLabels) === null || _b === void 0 ? void 0 : _b.call(series);\n // In pie charts, slices are added to the DOM, but actual rendering\n // is postponed until labels reserved their space\n (_c = series.redrawPoints) === null || _c === void 0 ? void 0 : _c.call(series);\n // Draw the mouse tracking area\n if (options.enableMouseTracking) {\n (_d = series.drawTracker) === null || _d === void 0 ? void 0 : _d.call(series);\n }\n // Run the animation\n if (animDuration) {\n (_e = series.animate) === null || _e === void 0 ? void 0 : _e.call(series);\n }\n // Call the afterAnimate function on animation complete (but don't\n // overwrite the animation.complete option which should be available\n // to the user).\n if (!hasRendered) {\n // Additional time if defer is defined before afterAnimate\n // will be triggered\n if (animDuration && animOptions.defer) {\n animDuration += animOptions.defer;\n }\n series.animationTimeout = Series_syncTimeout(function () {\n series.afterAnimate();\n }, animDuration || 0);\n }\n // Means data is in accordance with what you see\n series.isDirty = false;\n // (See #322) series.isDirty = series.isDirtyData = false; // means\n // data is in accordance with what you see\n series.hasRendered = true;\n Series_fireEvent(series, 'afterRender');\n };\n /**\n * Redraw the series. This function is called internally from\n * `chart.redraw` and normally shouldn't be called directly.\n * @private\n * @function Highcharts.Series#redraw\n */\n Series.prototype.redraw = function () {\n // Cache it here as it is set to false in render, but used after\n var wasDirty = this.isDirty || this.isDirtyData;\n this.translate();\n this.render();\n if (wasDirty) { // #3868, #3945\n delete this.kdTree;\n }\n };\n /**\n * Whether to reserve space for the series, either because it is visible or\n * because the `chart.ignoreHiddenSeries` option is false.\n *\n * @private\n */\n Series.prototype.reserveSpace = function () {\n return this.visible || !this.chart.options.chart.ignoreHiddenSeries;\n };\n /**\n * Find the nearest point from a pointer event. This applies to series that\n * use k-d-trees to get the nearest point. Native pointer events must be\n * normalized using `Pointer.normalize`, that adds `chartX` and `chartY`\n * properties.\n *\n * @sample highcharts/demo/synchronized-charts\n * Synchronized charts with tooltips\n *\n * @function Highcharts.Series#searchPoint\n *\n * @param {Highcharts.PointerEvent} e\n * The normalized pointer event\n * @param {boolean} [compareX=false]\n * Search only by the X value, not Y\n *\n * @return {Point|undefined}\n * The closest point to the pointer event\n */\n Series.prototype.searchPoint = function (e, compareX) {\n var _a = this,\n xAxis = _a.xAxis,\n yAxis = _a.yAxis,\n inverted = this.chart.inverted;\n return this.searchKDTree({\n clientX: inverted ?\n xAxis.len - e.chartY + xAxis.pos :\n e.chartX - xAxis.pos,\n plotY: inverted ?\n yAxis.len - e.chartX + yAxis.pos :\n e.chartY - yAxis.pos\n }, compareX, e);\n };\n /**\n * Build the k-d-tree that is used by mouse and touch interaction to get\n * the closest point. Line-like series typically have a one-dimensional\n * tree where points are searched along the X axis, while scatter-like\n * series typically search in two dimensions, X and Y.\n *\n * @private\n * @function Highcharts.Series#buildKDTree\n */\n Series.prototype.buildKDTree = function (e) {\n // Prevent multiple k-d-trees from being built simultaneously\n // (#6235)\n this.buildingKdTree = true;\n var series = this,\n dimensions = series.options.findNearestPointBy\n .indexOf('y') > -1 ? 2 : 1;\n /**\n * Internal function\n * @private\n */\n function kdtree(points, depth, dimensions) {\n var length = points === null || points === void 0 ? void 0 : points.length;\n var axis,\n median;\n if (length) {\n // Alternate between the axis\n axis = series.kdAxisArray[depth % dimensions];\n // Sort point array\n points.sort(function (a, b) { return (a[axis] || 0) - (b[axis] || 0); });\n median = Math.floor(length / 2);\n // Build and return node\n return {\n point: points[median],\n left: kdtree(points.slice(0, median), depth + 1, dimensions),\n right: kdtree(points.slice(median + 1), depth + 1, dimensions)\n };\n }\n }\n /**\n * Start the recursive build process with a clone of the points\n * array and null points filtered out. (#3873)\n * @private\n */\n function startRecursive() {\n series.kdTree = kdtree(series.getValidPoints(void 0, \n // For line-type series restrict to plot area, but\n // column-type series not (#3916, #4511)\n !series.directTouch), dimensions, dimensions);\n series.buildingKdTree = false;\n }\n delete series.kdTree;\n // For testing tooltips, don't build async. Also if touchstart, we may\n // be dealing with click events on mobile, so don't delay (#6817).\n Series_syncTimeout(startRecursive, series.options.kdNow || (e === null || e === void 0 ? void 0 : e.type) === 'touchstart' ? 0 : 1);\n };\n /**\n * @private\n * @function Highcharts.Series#searchKDTree\n */\n Series.prototype.searchKDTree = function (point, compareX, e, suppliedPointEvaluator, suppliedBSideCheckEvaluator) {\n var series = this, _a = this.kdAxisArray, kdX = _a[0], kdY = _a[1], kdComparer = compareX ? 'distX' : 'dist', kdDimensions = (series.options.findNearestPointBy || '')\n .indexOf('y') > -1 ? 2 : 1, useRadius = !!series.isBubble, pointEvaluator = suppliedPointEvaluator || (function (p1, p2, comparisonProp) { return [\n (p1[comparisonProp] || 0) < (p2[comparisonProp] || 0) ?\n p1 :\n p2,\n false\n ]; }), bSideCheckEvaluator = suppliedBSideCheckEvaluator || (function (a, b) { return a < b; });\n /**\n * Set the one and two dimensional distance on the point object.\n * @private\n */\n function setDistance(p1, p2) {\n var _a;\n var p1kdX = p1[kdX],\n p2kdX = p2[kdX],\n x = (Series_defined(p1kdX) && Series_defined(p2kdX)) ? p1kdX - p2kdX : null,\n p1kdY = p1[kdY],\n p2kdY = p2[kdY],\n y = (Series_defined(p1kdY) && Series_defined(p2kdY)) ? p1kdY - p2kdY : 0,\n radius = useRadius ? (((_a = p2.marker) === null || _a === void 0 ? void 0 : _a.radius) || 0) : 0;\n p2.dist = Math.sqrt(((x && x * x) || 0) + y * y) - radius;\n p2.distX = Series_defined(x) ? (Math.abs(x) - radius) : Number.MAX_VALUE;\n }\n /**\n * @private\n */\n function doSearch(search, tree, depth, dimensions) {\n var _a;\n var _b;\n var point = tree.point,\n axis = series.kdAxisArray[depth % dimensions];\n var ret = point,\n flip = false;\n setDistance(search, point);\n // Pick side based on distance to splitting point\n var tdist = (search[axis] || 0) - (point[axis] || 0) +\n (useRadius ? (((_b = point.marker) === null || _b === void 0 ? void 0 : _b.radius) || 0) : 0), sideA = tdist < 0 ? 'left' : 'right', sideB = tdist < 0 ? 'right' : 'left';\n // End of tree\n if (tree[sideA]) {\n _a = pointEvaluator(point, doSearch(search, tree[sideA], depth + 1, dimensions), kdComparer), ret = _a[0], flip = _a[1];\n }\n if (tree[sideB]) {\n var sqrtTDist = Math.sqrt(tdist * tdist),\n retDist = ret[kdComparer];\n // Compare distance to current best to splitting point to decide\n // whether to check side B or no\n if (bSideCheckEvaluator(sqrtTDist, retDist, flip)) {\n ret = pointEvaluator(ret, doSearch(search, tree[sideB], depth + 1, dimensions), kdComparer)[0];\n }\n }\n return ret;\n }\n if (!this.kdTree && !this.buildingKdTree) {\n this.buildKDTree(e);\n }\n if (this.kdTree) {\n return doSearch(point, this.kdTree, kdDimensions, kdDimensions);\n }\n };\n /**\n * @private\n * @function Highcharts.Series#pointPlacementToXValue\n */\n Series.prototype.pointPlacementToXValue = function () {\n var _a = this,\n options = _a.options,\n xAxis = _a.xAxis;\n var factor = options.pointPlacement;\n // Point placement is relative to each series pointRange (#5889)\n if (factor === 'between') {\n factor = xAxis.reversed ? -0.5 : 0.5; // #11955\n }\n return Series_isNumber(factor) ?\n factor * (options.pointRange || xAxis.pointRange) :\n 0;\n };\n /**\n * @private\n * @function Highcharts.Series#isPointInside\n */\n Series.prototype.isPointInside = function (point) {\n var _a = this,\n chart = _a.chart,\n xAxis = _a.xAxis,\n yAxis = _a.yAxis,\n _b = point.plotX,\n plotX = _b === void 0 ? -1 : _b,\n _c = point.plotY,\n plotY = _c === void 0 ? -1 : _c,\n isInside = (plotY >= 0 &&\n plotY <= (yAxis ? yAxis.len : chart.plotHeight) &&\n plotX >= 0 &&\n plotX <= (xAxis ? xAxis.len : chart.plotWidth));\n return isInside;\n };\n /**\n * Draw the tracker object that sits above all data labels and markers to\n * track mouse events on the graph or points. For the line type charts\n * the tracker uses the same graphPath, but with a greater stroke width\n * for better control.\n * @private\n */\n Series.prototype.drawTracker = function () {\n var _a;\n var series = this,\n options = series.options,\n trackByArea = options.trackByArea,\n trackerPath = [].concat((trackByArea ? series.areaPath : series.graphPath) || []),\n chart = series.chart,\n pointer = chart.pointer,\n renderer = chart.renderer,\n snap = ((_a = chart.options.tooltip) === null || _a === void 0 ? void 0 : _a.snap) || 0,\n onMouseOver = function () {\n if (options.enableMouseTracking &&\n chart.hoverSeries !== series) {\n series.onMouseOver();\n }\n }, \n /*\n * Empirical lowest possible opacities for TRACKER_FILL for an\n * element to stay invisible but clickable\n * IE9: 0.00000000001 (unlimited)\n * IE10: 0.0001 (exporting only)\n * FF: 0.00000000001 (unlimited)\n * Chrome: 0.000001\n * Safari: 0.000001\n * Opera: 0.00000000001 (unlimited)\n */\n TRACKER_FILL = 'rgba(192,192,192,' + (Series_svg ? 0.0001 : 0.002) + ')';\n var tracker = series.tracker;\n // Draw the tracker\n if (tracker) {\n tracker.attr({ d: trackerPath });\n }\n else if (series.graph) { // Create\n series.tracker = tracker = renderer.path(trackerPath)\n .attr({\n visibility: series.visible ? 'inherit' : 'hidden',\n zIndex: 2\n })\n .addClass(trackByArea ?\n 'highcharts-tracker-area' :\n 'highcharts-tracker-line')\n .add(series.group);\n if (!chart.styledMode) {\n tracker.attr({\n 'stroke-linecap': 'round',\n 'stroke-linejoin': 'round', // #1225\n stroke: TRACKER_FILL,\n fill: trackByArea ? TRACKER_FILL : 'none',\n 'stroke-width': series.graph.strokeWidth() +\n (trackByArea ? 0 : 2 * snap)\n });\n }\n // The tracker is added to the series group, which is clipped, but\n // is covered by the marker group. So the marker group also needs to\n // capture events.\n [\n series.tracker,\n series.markerGroup,\n series.dataLabelsGroup\n ].forEach(function (tracker) {\n if (tracker) {\n tracker.addClass('highcharts-tracker')\n .on('mouseover', onMouseOver)\n .on('mouseout', function (e) {\n pointer === null || pointer === void 0 ? void 0 : pointer.onTrackerMouseOut(e);\n });\n if (options.cursor && !chart.styledMode) {\n tracker.css({ cursor: options.cursor });\n }\n tracker.on('touchstart', onMouseOver);\n }\n });\n }\n Series_fireEvent(this, 'afterDrawTracker');\n };\n /**\n * Add a point to the series after render time. The point can be added at\n * the end, or by giving it an X value, to the start or in the middle of the\n * series.\n *\n * @sample highcharts/members/series-addpoint-append/\n * Append point\n * @sample highcharts/members/series-addpoint-append-and-shift/\n * Append and shift\n * @sample highcharts/members/series-addpoint-x-and-y/\n * Both X and Y values given\n * @sample highcharts/members/series-addpoint-pie/\n * Append pie slice\n * @sample stock/members/series-addpoint/\n * Append 100 points in Highcharts Stock\n * @sample stock/members/series-addpoint-shift/\n * Append and shift in Highcharts Stock\n * @sample maps/members/series-addpoint/\n * Add a point in Highmaps\n *\n * @function Highcharts.Series#addPoint\n *\n * @param {Highcharts.PointOptionsType} options\n * The point options. If options is a single number, a point with\n * that y value is appended to the series. If it is an array, it will\n * be interpreted as x and y values respectively. If it is an\n * object, advanced options as outlined under `series.data` are\n * applied.\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart after the point is added. When adding\n * more than one point, it is highly recommended that the redraw\n * option be set to false, and instead {@link Chart#redraw} is\n * explicitly called after the adding of points is finished.\n * Otherwise, the chart will redraw after adding each point.\n *\n * @param {boolean} [shift=false]\n * If true, a point is shifted off the start of the series as one is\n * appended to the end.\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n * Whether to apply animation, and optionally animation\n * configuration.\n *\n * @param {boolean} [withEvent=true]\n * Used internally, whether to fire the series `addPoint` event.\n *\n * @emits Highcharts.Series#event:addPoint\n */\n Series.prototype.addPoint = function (options, redraw, shift, animation, withEvent) {\n var series = this,\n seriesOptions = series.options,\n chart = series.chart,\n data = series.data,\n table = series.dataTable,\n xAxis = series.xAxis,\n names = xAxis && xAxis.hasNames && xAxis.names,\n dataOptions = seriesOptions.data,\n xData = series.getColumn('x');\n var isInTheMiddle,\n i;\n // Optional redraw, defaults to true\n redraw = Series_pick(redraw, true);\n // Get options and push the point to xData, yData and series.options. In\n // series.generatePoints the Point instance will be created on demand\n // and pushed to the series.data array.\n var point = { series: series };\n series.pointClass.prototype.applyOptions.apply(point, [options]);\n var x = point.x;\n // Get the insertion point\n i = xData.length;\n if (series.requireSorting && x < xData[i - 1]) {\n isInTheMiddle = true;\n while (i && xData[i - 1] > x) {\n i--;\n }\n }\n // Insert the row at the given index\n table.setRow(point, i, true, { addColumns: false });\n if (names && point.name) {\n names[x] = point.name;\n }\n dataOptions === null || dataOptions === void 0 ? void 0 : dataOptions.splice(i, 0, options);\n if (isInTheMiddle ||\n // When processedData is present we need to splice an empty slot\n // into series.data, otherwise generatePoints won't pick it up.\n series.processedData) {\n series.data.splice(i, 0, null);\n series.processData();\n }\n // Generate points to be added to the legend (#1329)\n if (seriesOptions.legendType === 'point') {\n series.generatePoints();\n }\n // Shift the first point off the parallel arrays\n if (shift) {\n if (data[0] && !!data[0].remove) {\n data[0].remove(false);\n }\n else {\n Series_spreadArray([\n data,\n dataOptions\n ], Object.values(table.getColumns()), true).filter(Series_defined).forEach(function (coll) {\n coll.shift();\n });\n table.rowCount -= 1;\n Series_fireEvent(table, 'afterDeleteRows');\n }\n }\n // Fire event\n if (withEvent !== false) {\n Series_fireEvent(series, 'addPoint', { point: point });\n }\n // Redraw\n series.isDirty = true;\n series.isDirtyData = true;\n if (redraw) {\n chart.redraw(animation); // Animation is set anyway on redraw, #5665\n }\n };\n /**\n * Remove a point from the series. Unlike the\n * {@link Highcharts.Point#remove} method, this can also be done on a point\n * that is not instantiated because it is outside the view or subject to\n * Highcharts Stock data grouping.\n *\n * @sample highcharts/members/series-removepoint/\n * Remove cropped point\n *\n * @function Highcharts.Series#removePoint\n *\n * @param {number} i\n * The index of the point in the {@link Highcharts.Series.data|data}\n * array.\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart after the point is added. When\n * removing more than one point, it is highly recommended that the\n * `redraw` option be set to `false`, and instead {@link\n * Highcharts.Chart#redraw} is explicitly called after the adding of\n * points is finished.\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n * Whether and optionally how the series should be animated.\n *\n * @emits Highcharts.Point#event:remove\n */\n Series.prototype.removePoint = function (i, redraw, animation) {\n var series = this,\n chart = series.chart,\n data = series.data,\n points = series.points,\n table = series.dataTable,\n point = data[i],\n remove = function () {\n // Splice out the point's data from all parallel arrays\n Series_spreadArray([\n // #4935\n (points === null || points === void 0 ? void 0 : points.length) === data.length ? points : void 0,\n data,\n series.options.data\n ],\n Object.values(table.getColumns()),\n true).filter(Series_defined).forEach(function (coll) {\n coll.splice(i, 1);\n });\n // Shorthand row deletion in order to avoid including the whole\n // `deleteRows` function in the DataTableCore module.\n table.rowCount -= 1;\n Series_fireEvent(table, 'afterDeleteRows');\n point === null || point === void 0 ? void 0 : point.destroy();\n // Redraw\n series.isDirty = true;\n series.isDirtyData = true;\n if (redraw) {\n chart.redraw();\n }\n };\n Series_setAnimation(animation, chart);\n redraw = Series_pick(redraw, true);\n // Fire the event with a default handler of removing the point\n if (point) {\n point.firePointEvent('remove', null, remove);\n }\n else {\n remove();\n }\n };\n /**\n * Remove a series and optionally redraw the chart.\n *\n * @sample highcharts/members/series-remove/\n * Remove first series from a button\n *\n * @function Highcharts.Series#remove\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart or wait for an explicit call to\n * {@link Highcharts.Chart#redraw}.\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n * Whether to apply animation, and optionally animation\n * configuration.\n *\n * @param {boolean} [withEvent=true]\n * Used internally, whether to fire the series `remove` event.\n *\n * @emits Highcharts.Series#event:remove\n */\n Series.prototype.remove = function (redraw, animation, withEvent, keepEvents) {\n var series = this,\n chart = series.chart;\n /**\n * @private\n */\n function remove() {\n // Destroy elements\n series.destroy(keepEvents);\n // Redraw\n chart.isDirtyLegend = chart.isDirtyBox = true;\n chart.linkSeries(keepEvents);\n if (Series_pick(redraw, true)) {\n chart.redraw(animation);\n }\n }\n // Fire the event with a default handler of removing the point\n if (withEvent !== false) {\n Series_fireEvent(series, 'remove', null, remove);\n }\n else {\n remove();\n }\n };\n /**\n * Update the series with a new set of options. For a clean and precise\n * handling of new options, all methods and elements from the series are\n * removed, and it is initialized from scratch. Therefore, this method is\n * more performance expensive than some other utility methods like {@link\n * Series#setData} or {@link Series#setVisible}.\n *\n * Note that `Series.update` may mutate the passed `data` options.\n *\n * @sample highcharts/members/series-update/\n * Updating series options\n * @sample maps/members/series-update/\n * Update series options in Highmaps\n *\n * @function Highcharts.Series#update\n *\n * @param {Highcharts.SeriesOptionsType} options\n * New options that will be merged with the series' existing options.\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart after the series is altered. If doing\n * more operations on the chart, it is a good idea to set redraw to\n * false and call {@link Chart#redraw} after.\n *\n * @emits Highcharts.Series#event:update\n * @emits Highcharts.Series#event:afterUpdate\n */\n Series.prototype.update = function (options, redraw) {\n var _a,\n _b,\n _c,\n _d;\n options = Series_diffObjects(options, this.userOptions);\n Series_fireEvent(this, 'update', { options: options });\n var series = this,\n chart = series.chart, \n // Must use user options when changing type because series.options\n // is merged in with type specific plotOptions\n oldOptions = series.userOptions,\n initialType = series.initialType || series.type,\n plotOptions = chart.options.plotOptions,\n initialSeriesProto = seriesTypes[initialType].prototype,\n groups = [\n 'group',\n 'markerGroup',\n 'dataLabelsGroup',\n 'transformGroup'\n ],\n optionsToCheck = [\n 'dataGrouping',\n 'pointStart',\n 'pointInterval',\n 'pointIntervalUnit',\n 'keys'\n ], \n // Animation must be enabled when calling update before the initial\n // animation has first run. This happens when calling update\n // directly after chart initialization, or when applying responsive\n // rules (#6912).\n animation = series.finishedAnimating && { animation: false },\n kinds = {};\n var seriesOptions,\n n,\n preserve = [\n 'colorIndex',\n 'eventOptions',\n 'navigatorSeries',\n 'symbolIndex',\n 'baseSeries'\n ],\n newType = (options.type ||\n oldOptions.type ||\n chart.options.chart.type);\n var keepPoints = !(\n // Indicators, histograms etc recalculate the data. It should be\n // possible to omit this.\n this.hasDerivedData ||\n // New type requires new point classes\n (newType && newType !== this.type) ||\n // New options affecting how the data points are built\n typeof options.keys !== 'undefined' ||\n typeof options.pointStart !== 'undefined' ||\n typeof options.pointInterval !== 'undefined' ||\n typeof options.relativeXValue !== 'undefined' ||\n options.joinBy ||\n options.mapData || // #11636\n // Changes to data grouping requires new points in new group\n optionsToCheck.some(function (option) { return series.hasOptionChanged(option); }));\n newType = newType || initialType;\n if (keepPoints) {\n preserve.push('data', 'isDirtyData', \n // GeoHeatMap interpolation\n 'isDirtyCanvas', 'points', 'dataTable', 'processedData', // #17057\n 'xIncrement', 'cropped', '_hasPointMarkers', 'hasDataLabels', \n // Networkgraph (#14397)\n 'nodes', 'layout', \n // Treemap\n 'level', \n // Map specific, consider moving it to series-specific preserve-\n // properties (#10617)\n 'mapMap', 'mapData', 'minY', 'maxY', 'minX', 'maxX', 'transformGroups' // #18857\n );\n if (options.visible !== false) {\n preserve.push('area', 'graph');\n }\n series.parallelArrays.forEach(function (key) {\n preserve.push(key + 'Data');\n });\n if (options.data) {\n // `setData` uses `dataSorting` options so we need to update\n // them earlier\n if (options.dataSorting) {\n Series_extend(series.options.dataSorting, options.dataSorting);\n }\n this.setData(options.data, false);\n }\n }\n else {\n this.dataTable.modified = this.dataTable;\n }\n // Do the merge, with some forced options\n options = Series_merge(oldOptions, {\n // When oldOptions.index is null it should't be cleared.\n // Otherwise navigator series will have wrong indexes (#10193).\n index: oldOptions.index === void 0 ?\n series.index : oldOptions.index,\n pointStart: \n // When updating from blank (#7933)\n (_c = (_b = (_a = plotOptions === null || plotOptions === void 0 ? void 0 : plotOptions.series) === null || _a === void 0 ? void 0 : _a.pointStart) !== null && _b !== void 0 ? _b : oldOptions.pointStart) !== null && _c !== void 0 ? _c : \n // When updating after addPoint\n series.getColumn('x')[0]\n }, !keepPoints && { data: series.options.data }, options, animation);\n // Merge does not merge arrays, but replaces them. Since points were\n // updated, `series.options.data` has correct merged options, use it:\n if (keepPoints && options.data) {\n options.data = series.options.data;\n }\n // Make sure preserved properties are not destroyed (#3094)\n preserve = groups.concat(preserve);\n preserve.forEach(function (prop) {\n preserve[prop] = series[prop];\n delete series[prop];\n });\n var casting = false;\n if (seriesTypes[newType]) {\n casting = newType !== series.type;\n // Destroy the series and delete all properties, it will be\n // reinserted within the `init` call below\n series.remove(false, false, false, true);\n if (casting) {\n // #20264: Re-detect a certain chart properties from new series\n chart.propFromSeries();\n // Modern browsers including IE11\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(series, seriesTypes[newType].prototype);\n // Legacy (IE < 11)\n }\n else {\n var ownEvents = Object.hasOwnProperty.call(series, 'hcEvents') && series.hcEvents;\n for (n in initialSeriesProto) { // eslint-disable-line guard-for-in\n series[n] = void 0;\n }\n // Reinsert all methods and properties from the new type\n // prototype (#2270, #3719).\n Series_extend(series, seriesTypes[newType].prototype);\n // The events are tied to the prototype chain, don't copy if\n // they're not the series' own\n if (ownEvents) {\n series.hcEvents = ownEvents;\n }\n else {\n delete series.hcEvents;\n }\n }\n }\n }\n else {\n Series_error(17, true, chart, { missingModuleFor: newType });\n }\n // Re-register groups (#3094) and other preserved properties\n preserve.forEach(function (prop) {\n series[prop] = preserve[prop];\n });\n series.init(chart, options);\n // Remove particular elements of the points. Check `series.options`\n // because we need to consider the options being set on plotOptions as\n // well.\n if (keepPoints && this.points) {\n seriesOptions = series.options;\n // What kind of elements to destroy\n if (seriesOptions.visible === false) {\n kinds.graphic = 1;\n kinds.dataLabel = 1;\n }\n else {\n // If the marker got disabled or changed its symbol, width or\n // height - destroy\n if (this.hasMarkerChanged(seriesOptions, oldOptions)) {\n kinds.graphic = 1;\n }\n if (!((_d = series.hasDataLabels) === null || _d === void 0 ? void 0 : _d.call(series))) {\n kinds.dataLabel = 1;\n }\n }\n for (var _e = 0, _f = this.points; _e < _f.length; _e++) {\n var point = _f[_e];\n if (point && point.series) {\n point.resolveColor();\n // Destroy elements in order to recreate based on updated\n // series options.\n if (Object.keys(kinds).length) {\n point.destroyElements(kinds);\n }\n if (seriesOptions.showInLegend === false &&\n point.legendItem) {\n chart.legend.destroyItem(point);\n }\n }\n }\n }\n series.initialType = initialType;\n chart.linkSeries(); // Links are lost in series.remove (#3028)\n // Set data for series with sorting enabled if it isn't set yet (#19715)\n chart.setSortedData();\n // #15383: Fire updatedData if the type has changed to keep linked\n // series such as indicators updated\n if (casting && series.linkedSeries.length) {\n series.isDirtyData = true;\n }\n Series_fireEvent(this, 'afterUpdate');\n if (Series_pick(redraw, true)) {\n chart.redraw(keepPoints ? void 0 : false);\n }\n };\n /**\n * Used from within series.update\n * @private\n */\n Series.prototype.setName = function (name) {\n this.name = this.options.name = this.userOptions.name = name;\n this.chart.isDirtyLegend = true;\n };\n /**\n * Check if the option has changed.\n * @private\n */\n Series.prototype.hasOptionChanged = function (optionName) {\n var _a,\n _b;\n var chart = this.chart,\n option = this.options[optionName],\n plotOptions = chart.options.plotOptions,\n oldOption = this.userOptions[optionName],\n plotOptionsOption = Series_pick((_a = plotOptions === null || plotOptions === void 0 ? void 0 : plotOptions[this.type]) === null || _a === void 0 ? void 0 : _a[optionName], (_b = plotOptions === null || plotOptions === void 0 ? void 0 : plotOptions.series) === null || _b === void 0 ? void 0 : _b[optionName]);\n // Check if `plotOptions` are defined already, #19203\n if (oldOption && !Series_defined(plotOptionsOption)) {\n return option !== oldOption;\n }\n return option !== Series_pick(plotOptionsOption, option);\n };\n /**\n * Runs on mouse over the series graphical items.\n *\n * @function Highcharts.Series#onMouseOver\n * @emits Highcharts.Series#event:mouseOver\n */\n Series.prototype.onMouseOver = function () {\n var series = this,\n chart = series.chart,\n hoverSeries = chart.hoverSeries,\n pointer = chart.pointer;\n pointer === null || pointer === void 0 ? void 0 : pointer.setHoverChartIndex();\n // Set normal state to previous series\n if (hoverSeries && hoverSeries !== series) {\n hoverSeries.onMouseOut();\n }\n // Trigger the event, but to save processing time,\n // only if defined\n if (series.options.events.mouseOver) {\n Series_fireEvent(series, 'mouseOver');\n }\n // Hover this\n series.setState('hover');\n /**\n * Contains the original hovered series.\n *\n * @name Highcharts.Chart#hoverSeries\n * @type {Highcharts.Series|null}\n */\n chart.hoverSeries = series;\n };\n /**\n * Runs on mouse out of the series graphical items.\n *\n * @function Highcharts.Series#onMouseOut\n *\n * @emits Highcharts.Series#event:mouseOut\n */\n Series.prototype.onMouseOut = function () {\n // Trigger the event only if listeners exist\n var series = this,\n options = series.options,\n chart = series.chart,\n tooltip = chart.tooltip,\n hoverPoint = chart.hoverPoint;\n // #182, set to null before the mouseOut event fires\n chart.hoverSeries = null;\n // Trigger mouse out on the point, which must be in this series\n if (hoverPoint) {\n hoverPoint.onMouseOut();\n }\n // Fire the mouse out event\n if (series && options.events.mouseOut) {\n Series_fireEvent(series, 'mouseOut');\n }\n // Hide the tooltip\n if (tooltip &&\n !series.stickyTracking &&\n (!tooltip.shared || series.noSharedTooltip)) {\n tooltip.hide();\n }\n // Reset all inactive states\n chart.series.forEach(function (s) {\n s.setState('', true);\n });\n };\n /**\n * Set the state of the series. Called internally on mouse interaction\n * operations, but it can also be called directly to visually\n * highlight a series.\n *\n * @function Highcharts.Series#setState\n *\n * @param {Highcharts.SeriesStateValue|\"\"} [state]\n * The new state, can be either `'hover'`, `'inactive'`, `'select'`,\n * or `''` (an empty string), `'normal'` or `undefined` to set to\n * normal state.\n * @param {boolean} [inherit]\n * Determines if state should be inherited by points too.\n */\n Series.prototype.setState = function (state, inherit) {\n var series = this, options = series.options, graph = series.graph, inactiveOtherPoints = options.inactiveOtherPoints, stateOptions = options.states, \n // By default a quick animation to hover/inactive,\n // slower to un-hover\n stateAnimation = Series_pick((stateOptions[state || 'normal'] &&\n stateOptions[state || 'normal'].animation), series.chart.options.chart.animation);\n var lineWidth = options.lineWidth,\n opacity = options.opacity;\n state = state || '';\n if (series.state !== state) {\n // Toggle class names\n [\n series.group,\n series.markerGroup,\n series.dataLabelsGroup\n ].forEach(function (group) {\n if (group) {\n // Old state\n if (series.state) {\n group.removeClass('highcharts-series-' + series.state);\n }\n // New state\n if (state) {\n group.addClass('highcharts-series-' + state);\n }\n }\n });\n series.state = state;\n if (!series.chart.styledMode) {\n if (stateOptions[state] &&\n stateOptions[state].enabled === false) {\n return;\n }\n if (state) {\n lineWidth = (stateOptions[state].lineWidth ||\n lineWidth + (stateOptions[state].lineWidthPlus || 0)); // #4035\n opacity = Series_pick(stateOptions[state].opacity, opacity);\n }\n if (graph && !graph.dashstyle && Series_isNumber(lineWidth)) {\n // Animate the graph stroke-width\n for (var _a = 0, _b = Series_spreadArray([\n graph\n ], this.zones.map(function (zone) { return zone.graph; }), true); _a < _b.length; _a++) {\n var graphElement = _b[_a];\n graphElement === null || graphElement === void 0 ? void 0 : graphElement.animate({\n 'stroke-width': lineWidth\n }, stateAnimation);\n }\n }\n // For some types (pie, networkgraph, sankey) opacity is\n // resolved on a point level\n if (!inactiveOtherPoints) {\n [\n series.group,\n series.markerGroup,\n series.dataLabelsGroup,\n series.labelBySeries\n ].forEach(function (group) {\n if (group) {\n group.animate({\n opacity: opacity\n }, stateAnimation);\n }\n });\n }\n }\n }\n // Don't loop over points on a series that doesn't apply inactive state\n // to siblings markers (e.g. line, column)\n if (inherit && inactiveOtherPoints && series.points) {\n series.setAllPointsToState(state || void 0);\n }\n };\n /**\n * Set the state for all points in the series.\n *\n * @function Highcharts.Series#setAllPointsToState\n *\n * @private\n *\n * @param {string} [state]\n * Can be either `hover` or undefined to set to normal state.\n */\n Series.prototype.setAllPointsToState = function (state) {\n this.points.forEach(function (point) {\n if (point.setState) {\n point.setState(state);\n }\n });\n };\n /**\n * Show or hide the series.\n *\n * @function Highcharts.Series#setVisible\n *\n * @param {boolean} [visible]\n * True to show the series, false to hide. If undefined, the visibility is\n * toggled.\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart after the series is altered. If doing more\n * operations on the chart, it is a good idea to set redraw to false and\n * call {@link Chart#redraw|chart.redraw()} after.\n *\n * @emits Highcharts.Series#event:hide\n * @emits Highcharts.Series#event:show\n */\n Series.prototype.setVisible = function (vis, redraw) {\n var _a;\n var series = this,\n chart = series.chart,\n ignoreHiddenSeries = chart.options.chart.ignoreHiddenSeries,\n oldVisibility = series.visible;\n // If called without an argument, toggle visibility\n series.visible =\n vis =\n series.options.visible =\n series.userOptions.visible =\n typeof vis === 'undefined' ? !oldVisibility : vis; // #5618\n var showOrHide = vis ? 'show' : 'hide';\n // Show or hide elements\n [\n 'group',\n 'dataLabelsGroup',\n 'markerGroup',\n 'tracker',\n 'tt'\n ].forEach(function (key) {\n var _a;\n (_a = series[key]) === null || _a === void 0 ? void 0 : _a[showOrHide]();\n });\n // Hide tooltip (#1361)\n if (chart.hoverSeries === series ||\n ((_a = chart.hoverPoint) === null || _a === void 0 ? void 0 : _a.series) === series) {\n series.onMouseOut();\n }\n if (series.legendItem) {\n chart.legend.colorizeItem(series, vis);\n }\n // Rescale or adapt to resized chart\n series.isDirty = true;\n // In a stack, all other series are affected\n if (series.options.stacking) {\n chart.series.forEach(function (otherSeries) {\n if (otherSeries.options.stacking && otherSeries.visible) {\n otherSeries.isDirty = true;\n }\n });\n }\n // Show or hide linked series\n series.linkedSeries.forEach(function (otherSeries) {\n otherSeries.setVisible(vis, false);\n });\n if (ignoreHiddenSeries) {\n chart.isDirtyBox = true;\n }\n Series_fireEvent(series, showOrHide);\n if (redraw !== false) {\n chart.redraw();\n }\n };\n /**\n * Show the series if hidden.\n *\n * @sample highcharts/members/series-hide/\n * Toggle visibility from a button\n *\n * @function Highcharts.Series#show\n * @emits Highcharts.Series#event:show\n */\n Series.prototype.show = function () {\n this.setVisible(true);\n };\n /**\n * Hide the series if visible. If the\n * [chart.ignoreHiddenSeries](https://api.highcharts.com/highcharts/chart.ignoreHiddenSeries)\n * option is true, the chart is redrawn without this series.\n *\n * @sample highcharts/members/series-hide/\n * Toggle visibility from a button\n *\n * @function Highcharts.Series#hide\n * @emits Highcharts.Series#event:hide\n */\n Series.prototype.hide = function () {\n this.setVisible(false);\n };\n /**\n * Select or unselect the series. This means its\n * {@link Highcharts.Series.selected|selected}\n * property is set, the checkbox in the legend is toggled and when selected,\n * the series is returned by the {@link Highcharts.Chart#getSelectedSeries}\n * function.\n *\n * @sample highcharts/members/series-select/\n * Select a series from a button\n *\n * @function Highcharts.Series#select\n *\n * @param {boolean} [selected]\n * True to select the series, false to unselect. If undefined, the selection\n * state is toggled.\n *\n * @emits Highcharts.Series#event:select\n * @emits Highcharts.Series#event:unselect\n */\n Series.prototype.select = function (selected) {\n var series = this;\n series.selected =\n selected =\n this.options.selected = (typeof selected === 'undefined' ?\n !series.selected :\n selected);\n if (series.checkbox) {\n series.checkbox.checked = selected;\n }\n Series_fireEvent(series, selected ? 'select' : 'unselect');\n };\n /**\n * Checks if a tooltip should be shown for a given point.\n *\n * @private\n */\n Series.prototype.shouldShowTooltip = function (plotX, plotY, options) {\n if (options === void 0) { options = {}; }\n options.series = this;\n options.visiblePlotOnly = true;\n return this.chart.isInsidePlot(plotX, plotY, options);\n };\n /**\n * Draws the legend symbol based on the legendSymbol user option.\n *\n * @private\n */\n Series.prototype.drawLegendSymbol = function (legend, item) {\n var _a;\n (_a = Legend_LegendSymbol[this.options.legendSymbol || 'rectangle']) === null || _a === void 0 ? void 0 : _a.call(this, legend, item);\n };\n Series.defaultOptions = SeriesDefaults;\n /**\n * Registry of all available series types.\n *\n * @name Highcharts.Series.types\n * @type {Highcharts.Dictionary<typeof_Highcharts.Series>}\n */\n Series.types = Series_SeriesRegistry.seriesTypes;\n /* *\n *\n * Static Functions\n *\n * */\n /**\n * Registers a series class to be accessible via `Series.types`.\n *\n * @function Highcharts.Series.registerType\n *\n * @param {string} seriesType\n * The series type as an identifier string in lower case.\n *\n * @param {Function} SeriesClass\n * The series class as a class pattern or a constructor function with\n * prototype.\n */\n Series.registerType = Series_SeriesRegistry.registerSeriesType;\n return Series;\n}());\nSeries_extend(Series.prototype, {\n axisTypes: ['xAxis', 'yAxis'],\n coll: 'series',\n colorCounter: 0,\n directTouch: false,\n invertible: true,\n isCartesian: true,\n kdAxisArray: ['clientX', 'plotY'],\n // Each point's x and y values are stored in this.xData and this.yData:\n parallelArrays: ['x', 'y'],\n pointClass: Series_Point,\n requireSorting: true,\n // Requires the data to be sorted:\n sorted: true\n});\n/* *\n *\n * Registry\n *\n * */\nSeries_SeriesRegistry.series = Series;\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Series_Series = (Series);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * This is a placeholder type of the possible series options for\n * [Highcharts](../highcharts/series), [Highcharts Stock](../highstock/series),\n * [Highmaps](../highmaps/series), and [Gantt](../gantt/series).\n *\n * In TypeScript is this dynamically generated to reference all possible types\n * of series options.\n *\n * @ignore-declaration\n * @typedef {Highcharts.SeriesOptions|Highcharts.Dictionary<*>} Highcharts.SeriesOptionsType\n */\n/**\n * Options for `dataSorting`.\n *\n * @interface Highcharts.DataSortingOptionsObject\n * @since 8.0.0\n */ /**\n* Enable or disable data sorting for the series.\n* @name Highcharts.DataSortingOptionsObject#enabled\n* @type {boolean|undefined}\n*/ /**\n* Whether to allow matching points by name in an update.\n* @name Highcharts.DataSortingOptionsObject#matchByName\n* @type {boolean|undefined}\n*/ /**\n* Determines what data value should be used to sort by.\n* @name Highcharts.DataSortingOptionsObject#sortKey\n* @type {string|undefined}\n*/\n/**\n * Function callback when a series has been animated.\n *\n * @callback Highcharts.SeriesAfterAnimateCallbackFunction\n *\n * @param {Highcharts.Series} this\n * The series where the event occurred.\n *\n * @param {Highcharts.SeriesAfterAnimateEventObject} event\n * Event arguments.\n */\n/**\n * Event information regarding completed animation of a series.\n *\n * @interface Highcharts.SeriesAfterAnimateEventObject\n */ /**\n* Animated series.\n* @name Highcharts.SeriesAfterAnimateEventObject#target\n* @type {Highcharts.Series}\n*/ /**\n* Event type.\n* @name Highcharts.SeriesAfterAnimateEventObject#type\n* @type {\"afterAnimate\"}\n*/\n/**\n * Function callback when the checkbox next to the series' name in the legend is\n * clicked.\n *\n * @callback Highcharts.SeriesCheckboxClickCallbackFunction\n *\n * @param {Highcharts.Series} this\n * The series where the event occurred.\n *\n * @param {Highcharts.SeriesCheckboxClickEventObject} event\n * Event arguments.\n */\n/**\n * Event information regarding check of a series box.\n *\n * @interface Highcharts.SeriesCheckboxClickEventObject\n */ /**\n* Whether the box has been checked.\n* @name Highcharts.SeriesCheckboxClickEventObject#checked\n* @type {boolean}\n*/ /**\n* Related series.\n* @name Highcharts.SeriesCheckboxClickEventObject#item\n* @type {Highcharts.Series}\n*/ /**\n* Related series.\n* @name Highcharts.SeriesCheckboxClickEventObject#target\n* @type {Highcharts.Series}\n*/ /**\n* Event type.\n* @name Highcharts.SeriesCheckboxClickEventObject#type\n* @type {\"checkboxClick\"}\n*/\n/**\n * Function callback when a series is clicked. Return false to cancel toogle\n * actions.\n *\n * @callback Highcharts.SeriesClickCallbackFunction\n *\n * @param {Highcharts.Series} this\n * The series where the event occurred.\n *\n * @param {Highcharts.SeriesClickEventObject} event\n * Event arguments.\n */\n/**\n * Common information for a click event on a series.\n *\n * @interface Highcharts.SeriesClickEventObject\n * @extends global.Event\n */ /**\n* Nearest point on the graph.\n* @name Highcharts.SeriesClickEventObject#point\n* @type {Highcharts.Point}\n*/\n/**\n * Gets fired when the series is hidden after chart generation time, either by\n * clicking the legend item or by calling `.hide()`.\n *\n * @callback Highcharts.SeriesHideCallbackFunction\n *\n * @param {Highcharts.Series} this\n * The series where the event occurred.\n *\n * @param {global.Event} event\n * The event that occurred.\n */\n/**\n * The SVG value used for the `stroke-linecap` and `stroke-linejoin` of a line\n * graph.\n *\n * @typedef {\"butt\"|\"round\"|\"square\"|string} Highcharts.SeriesLinecapValue\n */\n/**\n * Gets fired when the legend item belonging to the series is clicked. The\n * default action is to toggle the visibility of the series. This can be\n * prevented by returning `false` or calling `event.preventDefault()`.\n *\n * **Note:** This option is deprecated in favor of\n * Highcharts.LegendItemClickCallbackFunction.\n *\n * @deprecated 11.4.4\n * @callback Highcharts.SeriesLegendItemClickCallbackFunction\n *\n * @param {Highcharts.Series} this\n * The series where the event occurred.\n *\n * @param {Highcharts.SeriesLegendItemClickEventObject} event\n * The event that occurred.\n */\n/**\n * Information about the event.\n *\n * **Note:** This option is deprecated in favor of\n * Highcharts.LegendItemClickEventObject.\n *\n * @deprecated 11.4.4\n * @interface Highcharts.SeriesLegendItemClickEventObject\n */ /**\n* Related browser event.\n* @name Highcharts.SeriesLegendItemClickEventObject#browserEvent\n* @type {global.PointerEvent}\n*/ /**\n* Prevent the default action of toggle the visibility of the series.\n* @name Highcharts.SeriesLegendItemClickEventObject#preventDefault\n* @type {Function}\n*/ /**\n* Related series.\n* @name Highcharts.SeriesCheckboxClickEventObject#target\n* @type {Highcharts.Series}\n*/ /**\n* Event type.\n* @name Highcharts.SeriesCheckboxClickEventObject#type\n* @type {\"checkboxClick\"}\n*/\n/**\n * Gets fired when the mouse leaves the graph.\n *\n * @callback Highcharts.SeriesMouseOutCallbackFunction\n *\n * @param {Highcharts.Series} this\n * Series where the event occurred.\n *\n * @param {global.PointerEvent} event\n * Event that occurred.\n */\n/**\n * Gets fired when the mouse enters the graph.\n *\n * @callback Highcharts.SeriesMouseOverCallbackFunction\n *\n * @param {Highcharts.Series} this\n * Series where the event occurred.\n *\n * @param {global.PointerEvent} event\n * Event that occurred.\n */\n/**\n * Translation and scale for the plot area of a series.\n *\n * @interface Highcharts.SeriesPlotBoxObject\n */ /**\n* @name Highcharts.SeriesPlotBoxObject#scaleX\n* @type {number}\n*/ /**\n* @name Highcharts.SeriesPlotBoxObject#scaleY\n* @type {number}\n*/ /**\n* @name Highcharts.SeriesPlotBoxObject#translateX\n* @type {number}\n*/ /**\n* @name Highcharts.SeriesPlotBoxObject#translateY\n* @type {number}\n*/\n/**\n * Gets fired when the series is shown after chart generation time, either by\n * clicking the legend item or by calling `.show()`.\n *\n * @callback Highcharts.SeriesShowCallbackFunction\n *\n * @param {Highcharts.Series} this\n * Series where the event occurred.\n *\n * @param {global.Event} event\n * Event that occurred.\n */\n/**\n * Possible key values for the series state options.\n *\n * @typedef {\"hover\"|\"inactive\"|\"normal\"|\"select\"} Highcharts.SeriesStateValue\n */\n''; // Detach doclets above\n/* *\n *\n * API Options\n *\n * */\n/**\n * Series options for specific data and the data itself. In TypeScript you\n * have to cast the series options to specific series types, to get all\n * possible options for a series.\n *\n * @example\n * // TypeScript example\n * Highcharts.chart('container', {\n * series: [{\n * color: '#06C',\n * data: [[0, 1], [2, 3]]\n * } as Highcharts.SeriesLineOptions ]\n * });\n *\n * @type {Array<*>}\n * @apioption series\n */\n/**\n * An id for the series. This can be used after render time to get a pointer\n * to the series object through `chart.get()`.\n *\n * @sample {highcharts} highcharts/plotoptions/series-id/\n * Get series by id\n *\n * @type {string}\n * @since 1.2.0\n * @apioption series.id\n */\n/**\n * The index of the series in the chart, affecting the internal index in the\n * `chart.series` array, the visible Z index as well as the order in the\n * legend.\n *\n * @type {number}\n * @since 2.3.0\n * @apioption series.index\n */\n/**\n * The sequential index of the series in the legend.\n *\n * @see [legend.reversed](#legend.reversed),\n * [yAxis.reversedStacks](#yAxis.reversedStacks)\n *\n * @sample {highcharts|highstock} highcharts/series/legendindex/\n * Legend in opposite order\n *\n * @type {number}\n * @apioption series.legendIndex\n */\n/**\n * The name of the series as shown in the legend, tooltip etc.\n *\n * @sample {highcharts} highcharts/series/name/\n * Series name\n * @sample {highmaps} maps/demo/category-map/\n * Series name\n *\n * @type {string}\n * @apioption series.name\n */\n/**\n * This option allows grouping series in a stacked chart. The stack option\n * can be a string or anything else, as long as the grouped series' stack\n * options match each other after conversion into a string.\n *\n * @sample {highcharts} highcharts/series/stack/\n * Stacked and grouped columns\n * @sample {highcharts} highcharts/series/stack-centerincategory/\n * Stacked and grouped, centered in category\n *\n * @type {number|string}\n * @since 2.1\n * @product highcharts highstock\n * @apioption series.stack\n */\n/**\n * The type of series, for example `line` or `column`. By default, the\n * series type is inherited from [chart.type](#chart.type), so unless the\n * chart is a combination of series types, there is no need to set it on the\n * series level.\n *\n * @sample {highcharts} highcharts/series/type/\n * Line and column in the same chart\n * @sample highcharts/series/type-dynamic/\n * Dynamic types with button selector\n * @sample {highmaps} maps/demo/mapline-mappoint/\n * Multiple types in the same map\n *\n * @type {string}\n * @apioption series.type\n */\n/**\n * When using dual or multiple x axes, this number defines which xAxis the\n * particular series is connected to. It refers to either the\n * {@link #xAxis.id|axis id}\n * or the index of the axis in the xAxis array, with 0 being the first.\n *\n * @type {number|string}\n * @default 0\n * @product highcharts highstock\n * @apioption series.xAxis\n */\n/**\n * When using dual or multiple y axes, this number defines which yAxis the\n * particular series is connected to. It refers to either the\n * {@link #yAxis.id|axis id}\n * or the index of the axis in the yAxis array, with 0 being the first.\n *\n * @sample {highcharts} highcharts/series/yaxis/\n * Apply the column series to the secondary Y axis\n *\n * @type {number|string}\n * @default 0\n * @product highcharts highstock\n * @apioption series.yAxis\n */\n/**\n * Define the visual z index of the series.\n *\n * @sample {highcharts} highcharts/plotoptions/series-zindex-default/\n * With no z index, the series defined last are on top\n * @sample {highcharts} highcharts/plotoptions/series-zindex/\n * With a z index, the series with the highest z index is on top\n * @sample {highstock} highcharts/plotoptions/series-zindex-default/\n * With no z index, the series defined last are on top\n * @sample {highstock} highcharts/plotoptions/series-zindex/\n * With a z index, the series with the highest z index is on top\n *\n * @type {number}\n * @product highcharts highstock\n * @apioption series.zIndex\n */\n''; // Include precedent doclets in transpiled\n\n;// ./code/es5/es-modules/Core/Legend/Legend.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar Legend_animObject = AnimationUtilities.animObject, Legend_setAnimation = AnimationUtilities.setAnimation;\n\nvar Legend_registerEventOptions = Core_Foundation.registerEventOptions;\n\nvar Legend_composed = Core_Globals.composed, marginNames = Core_Globals.marginNames;\n\n\n\nvar Legend_distribute = Renderer_RendererUtilities.distribute;\n\nvar Legend_format = Core_Templating.format;\n\nvar Legend_addEvent = Core_Utilities.addEvent, Legend_createElement = Core_Utilities.createElement, Legend_css = Core_Utilities.css, Legend_defined = Core_Utilities.defined, Legend_discardElement = Core_Utilities.discardElement, Legend_find = Core_Utilities.find, Legend_fireEvent = Core_Utilities.fireEvent, Legend_isNumber = Core_Utilities.isNumber, Legend_merge = Core_Utilities.merge, Legend_pick = Core_Utilities.pick, Legend_pushUnique = Core_Utilities.pushUnique, Legend_relativeLength = Core_Utilities.relativeLength, Legend_stableSort = Core_Utilities.stableSort, Legend_syncTimeout = Core_Utilities.syncTimeout;\n/* *\n *\n * Class\n *\n * */\n/**\n * The overview of the chart's series. The legend object is instantiated\n * internally in the chart constructor, and is available from the `chart.legend`\n * property. Each chart has only one legend.\n *\n * @class\n * @name Highcharts.Legend\n *\n * @param {Highcharts.Chart} chart\n * The chart instance.\n *\n * @param {Highcharts.LegendOptions} options\n * Legend options.\n */\nvar Legend = /** @class */ (function () {\n /* *\n *\n * Functions\n *\n * */\n /**\n * Initialize the legend.\n *\n * @private\n * @function Highcharts.Legend#init\n *\n * @param {Highcharts.Chart} chart\n * The chart instance.\n *\n * @param {Highcharts.LegendOptions} options\n * Legend options.\n */\n function Legend(chart, options) {\n var _this = this;\n /* *\n *\n * Properties\n *\n * */\n this.allItems = [];\n this.initialItemY = 0;\n this.itemHeight = 0;\n this.itemMarginBottom = 0;\n this.itemMarginTop = 0;\n this.itemX = 0;\n this.itemY = 0;\n this.lastItemY = 0;\n this.lastLineHeight = 0;\n this.legendHeight = 0;\n this.legendWidth = 0;\n this.maxItemWidth = 0;\n this.maxLegendWidth = 0;\n this.offsetWidth = 0;\n this.padding = 0;\n this.pages = [];\n this.symbolHeight = 0;\n this.symbolWidth = 0;\n this.titleHeight = 0;\n this.totalItemWidth = 0;\n this.widthOption = 0;\n /**\n * Chart of this legend.\n *\n * @readonly\n * @name Highcharts.Legend#chart\n * @type {Highcharts.Chart}\n */\n this.chart = chart;\n this.setOptions(options);\n if (options.enabled) {\n // Render it\n this.render();\n Legend_registerEventOptions(this, options);\n // Move checkboxes\n Legend_addEvent(this.chart, 'endResize', function () {\n this.legend.positionCheckboxes();\n });\n }\n // On Legend.init and Legend.update, make sure that proximate layout\n // events are either added or removed (#18362).\n Legend_addEvent(this.chart, 'render', function () {\n if (_this.options.enabled && _this.proximate) {\n _this.proximatePositions();\n _this.positionItems();\n }\n });\n }\n /**\n * @private\n * @function Highcharts.Legend#setOptions\n * @param {Highcharts.LegendOptions} options\n */\n Legend.prototype.setOptions = function (options) {\n var padding = Legend_pick(options.padding, 8);\n /**\n * Legend options.\n *\n * @readonly\n * @name Highcharts.Legend#options\n * @type {Highcharts.LegendOptions}\n */\n this.options = options;\n if (!this.chart.styledMode) {\n this.itemStyle = options.itemStyle;\n this.itemHiddenStyle = Legend_merge(this.itemStyle, options.itemHiddenStyle);\n }\n this.itemMarginTop = options.itemMarginTop;\n this.itemMarginBottom = options.itemMarginBottom;\n this.padding = padding;\n this.initialItemY = padding - 5; // 5 is pixels above the text\n this.symbolWidth = Legend_pick(options.symbolWidth, 16);\n this.pages = [];\n this.proximate = options.layout === 'proximate' && !this.chart.inverted;\n // #12705: baseline has to be reset on every update\n this.baseline = void 0;\n };\n /**\n * Update the legend with new options. Equivalent to running `chart.update`\n * with a legend configuration option.\n *\n * @sample highcharts/legend/legend-update/\n * Legend update\n *\n * @function Highcharts.Legend#update\n *\n * @param {Highcharts.LegendOptions} options\n * Legend options.\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart after the axis is altered. If doing more\n * operations on the chart, it is a good idea to set redraw to false and\n * call {@link Chart#redraw} after. Whether to redraw the chart.\n *\n * @emits Highcharts.Legends#event:afterUpdate\n */\n Legend.prototype.update = function (options, redraw) {\n var chart = this.chart;\n this.setOptions(Legend_merge(true, this.options, options));\n if ('events' in this.options) {\n // Legend event handlers\n Legend_registerEventOptions(this, this.options);\n }\n this.destroy();\n chart.isDirtyLegend = chart.isDirtyBox = true;\n if (Legend_pick(redraw, true)) {\n chart.redraw();\n }\n Legend_fireEvent(this, 'afterUpdate', { redraw: redraw });\n };\n /**\n * Set the colors for the legend item.\n *\n * @private\n * @function Highcharts.Legend#colorizeItem\n * @param {Highcharts.BubbleLegendItem|Highcharts.Point|Highcharts.Series} item\n * A Series or Point instance\n * @param {boolean} [visible=false]\n * Dimmed or colored\n *\n * @todo\n * Make events official: Fires the event `afterColorizeItem`.\n */\n Legend.prototype.colorizeItem = function (item, visible) {\n var _a;\n var originalColor = item.color,\n _b = item.legendItem || {},\n area = _b.area,\n group = _b.group,\n label = _b.label,\n line = _b.line,\n symbol = _b.symbol;\n if (item instanceof Series_Series || item instanceof Series_Point) {\n item.color = ((_a = item.options) === null || _a === void 0 ? void 0 : _a.legendSymbolColor) || originalColor;\n }\n group === null || group === void 0 ? void 0 : group[visible ? 'removeClass' : 'addClass']('highcharts-legend-item-hidden');\n if (!this.chart.styledMode) {\n var _c = this.itemHiddenStyle,\n itemHiddenStyle = _c === void 0 ? {} : _c,\n hiddenColor_1 = itemHiddenStyle.color,\n _d = item.options,\n fillColor = _d.fillColor,\n fillOpacity = _d.fillOpacity,\n lineColor = _d.lineColor,\n marker = _d.marker,\n colorizeHidden = function (attr) {\n if (!visible) {\n if (attr.fill) {\n attr.fill = hiddenColor_1;\n }\n if (attr.stroke) {\n attr.stroke = hiddenColor_1;\n }\n }\n return attr;\n };\n label === null || label === void 0 ? void 0 : label.css(Legend_merge(visible ? this.itemStyle : itemHiddenStyle));\n line === null || line === void 0 ? void 0 : line.attr(colorizeHidden({ stroke: lineColor || item.color }));\n if (symbol) {\n // Apply marker options\n symbol.attr(colorizeHidden(marker && symbol.isMarker ? // #585\n item.pointAttribs() :\n { fill: item.color }));\n }\n area === null || area === void 0 ? void 0 : area.attr(colorizeHidden({\n fill: fillColor || item.color,\n 'fill-opacity': fillColor ? 1 : (fillOpacity !== null && fillOpacity !== void 0 ? fillOpacity : 0.75)\n }));\n }\n item.color = originalColor;\n Legend_fireEvent(this, 'afterColorizeItem', { item: item, visible: visible });\n };\n /**\n * @private\n * @function Highcharts.Legend#positionItems\n */\n Legend.prototype.positionItems = function () {\n // Now that the legend width and height are established, put the items\n // in the final position\n this.allItems.forEach(this.positionItem, this);\n if (!this.chart.isResizing) {\n this.positionCheckboxes();\n }\n };\n /**\n * Position the legend item.\n *\n * @private\n * @function Highcharts.Legend#positionItem\n * @param {Highcharts.BubbleLegendItem|Highcharts.Point|Highcharts.Series} item\n * The item to position\n */\n Legend.prototype.positionItem = function (item) {\n var _this = this;\n var legend = this,\n _a = item.legendItem || {},\n group = _a.group,\n _b = _a.x,\n x = _b === void 0 ? 0 : _b,\n _c = _a.y,\n y = _c === void 0 ? 0 : _c,\n options = legend.options,\n symbolPadding = options.symbolPadding,\n ltr = !options.rtl,\n checkbox = item.checkbox;\n if (group && group.element) {\n var attribs = {\n translateX: ltr ?\n x :\n legend.legendWidth - x - 2 * symbolPadding - 4,\n translateY: y\n };\n var complete = function () {\n Legend_fireEvent(_this, 'afterPositionItem', { item: item });\n };\n group[Legend_defined(group.translateY) ? 'animate' : 'attr'](attribs, void 0, complete);\n }\n if (checkbox) {\n checkbox.x = x;\n checkbox.y = y;\n }\n };\n /**\n * Destroy a single legend item, used internally on removing series items.\n *\n * @private\n * @function Highcharts.Legend#destroyItem\n * @param {Highcharts.BubbleLegendItem|Highcharts.Point|Highcharts.Series} item\n * The item to remove\n */\n Legend.prototype.destroyItem = function (item) {\n var checkbox = item.checkbox,\n legendItem = item.legendItem || {};\n // Destroy SVG elements\n for (var _i = 0, _a = ['group', 'label', 'line', 'symbol']; _i < _a.length; _i++) {\n var key = _a[_i];\n if (legendItem[key]) {\n legendItem[key] = legendItem[key].destroy();\n }\n }\n if (checkbox) {\n Legend_discardElement(checkbox);\n }\n item.legendItem = void 0;\n };\n /**\n * Destroy the legend. Used internally. To reflow objects, `chart.redraw`\n * must be called after destruction.\n *\n * @private\n * @function Highcharts.Legend#destroy\n */\n Legend.prototype.destroy = function () {\n var legend = this;\n // Destroy items\n for (var _i = 0, _a = this.getAllItems(); _i < _a.length; _i++) {\n var item = _a[_i];\n this.destroyItem(item);\n }\n // Destroy legend elements\n for (var _b = 0, _c = [\n 'clipRect',\n 'up',\n 'down',\n 'pager',\n 'nav',\n 'box',\n 'title',\n 'group'\n ]; _b < _c.length; _b++) {\n var key = _c[_b];\n if (legend[key]) {\n legend[key] = legend[key].destroy();\n }\n }\n this.display = null; // Reset in .render on update.\n };\n /**\n * Position the checkboxes after the width is determined.\n *\n * @private\n * @function Highcharts.Legend#positionCheckboxes\n */\n Legend.prototype.positionCheckboxes = function () {\n var alignAttr = this.group && this.group.alignAttr,\n clipHeight = this.clipHeight || this.legendHeight,\n titleHeight = this.titleHeight;\n var translateY;\n if (alignAttr) {\n translateY = alignAttr.translateY;\n this.allItems.forEach(function (item) {\n var checkbox = item.checkbox;\n var top;\n if (checkbox) {\n top = translateY + titleHeight + checkbox.y +\n (this.scrollOffset || 0) + 3;\n Legend_css(checkbox, {\n left: (alignAttr.translateX + item.checkboxOffset +\n checkbox.x - 20) + 'px',\n top: top + 'px',\n display: this.proximate || (top > translateY - 6 &&\n top < translateY + clipHeight - 6) ?\n '' :\n 'none'\n });\n }\n }, this);\n }\n };\n /**\n * Render the legend title on top of the legend.\n *\n * @private\n * @function Highcharts.Legend#renderTitle\n */\n Legend.prototype.renderTitle = function () {\n var options = this.options,\n padding = this.padding,\n titleOptions = options.title;\n var bBox,\n titleHeight = 0;\n if (titleOptions.text) {\n if (!this.title) {\n /**\n * SVG element of the legend title.\n *\n * @readonly\n * @name Highcharts.Legend#title\n * @type {Highcharts.SVGElement}\n */\n this.title = this.chart.renderer.label(titleOptions.text, padding - 3, padding - 4, void 0, void 0, void 0, options.useHTML, void 0, 'legend-title')\n .attr({ zIndex: 1 });\n if (!this.chart.styledMode) {\n this.title.css(titleOptions.style);\n }\n this.title.add(this.group);\n }\n // Set the max title width (#7253)\n if (!titleOptions.width) {\n this.title.css({\n width: this.maxLegendWidth + 'px'\n });\n }\n bBox = this.title.getBBox();\n titleHeight = bBox.height;\n this.offsetWidth = bBox.width; // #1717\n this.contentGroup.attr({ translateY: titleHeight });\n }\n this.titleHeight = titleHeight;\n };\n /**\n * Set the legend item text.\n *\n * @function Highcharts.Legend#setText\n * @param {Highcharts.Point|Highcharts.Series} item\n * The item for which to update the text in the legend.\n */\n Legend.prototype.setText = function (item) {\n var options = this.options;\n item.legendItem.label.attr({\n text: options.labelFormat ?\n Legend_format(options.labelFormat, item, this.chart) :\n options.labelFormatter.call(item)\n });\n };\n /**\n * Render a single specific legend item. Called internally from the `render`\n * function.\n *\n * @private\n * @function Highcharts.Legend#renderItem\n * @param {Highcharts.BubbleLegendItem|Highcharts.Point|Highcharts.Series} item\n * The item to render.\n */\n Legend.prototype.renderItem = function (item) {\n var legend = this,\n legendItem = item.legendItem = item.legendItem || {},\n chart = legend.chart,\n renderer = chart.renderer,\n options = legend.options,\n horizontal = options.layout === 'horizontal',\n symbolWidth = legend.symbolWidth,\n symbolPadding = options.symbolPadding || 0,\n itemStyle = legend.itemStyle,\n itemHiddenStyle = legend.itemHiddenStyle,\n itemDistance = horizontal ? Legend_pick(options.itemDistance, 20) : 0,\n ltr = !options.rtl,\n isSeries = !item.series,\n series = !isSeries && item.series.drawLegendSymbol ?\n item.series :\n item,\n seriesOptions = series.options,\n showCheckbox = (!!legend.createCheckboxForItem &&\n seriesOptions &&\n seriesOptions.showCheckbox),\n useHTML = options.useHTML,\n itemClassName = item.options.className;\n var label = legendItem.label, \n // Full width minus text width\n itemExtraWidth = symbolWidth + symbolPadding +\n itemDistance + (showCheckbox ? 20 : 0);\n if (!label) { // Generate it once, later move it\n // Generate the group box, a group to hold the symbol and text. Text\n // is to be appended in Legend class.\n legendItem.group = renderer\n .g('legend-item')\n .addClass('highcharts-' + series.type + '-series ' +\n 'highcharts-color-' + item.colorIndex +\n (itemClassName ? ' ' + itemClassName : '') +\n (isSeries ?\n ' highcharts-series-' + item.index :\n ''))\n .attr({ zIndex: 1 })\n .add(legend.scrollGroup);\n // Generate the list item text and add it to the group\n legendItem.label = label = renderer.text('', ltr ?\n symbolWidth + symbolPadding :\n -symbolPadding, legend.baseline || 0, useHTML);\n if (!chart.styledMode) {\n // Merge to prevent modifying original (#1021)\n label.css(Legend_merge(item.visible ?\n itemStyle :\n itemHiddenStyle));\n }\n label\n .attr({\n align: ltr ? 'left' : 'right',\n zIndex: 2\n })\n .add(legendItem.group);\n // Get the baseline for the first item - the font size is equal for\n // all\n if (!legend.baseline) {\n legend.fontMetrics = renderer.fontMetrics(label);\n legend.baseline =\n legend.fontMetrics.f + 3 + legend.itemMarginTop;\n label.attr('y', legend.baseline);\n legend.symbolHeight =\n Legend_pick(options.symbolHeight, legend.fontMetrics.f);\n if (options.squareSymbol) {\n legend.symbolWidth = Legend_pick(options.symbolWidth, Math.max(legend.symbolHeight, 16));\n itemExtraWidth = legend.symbolWidth + symbolPadding +\n itemDistance + (showCheckbox ? 20 : 0);\n if (ltr) {\n label.attr('x', legend.symbolWidth + symbolPadding);\n }\n }\n }\n // Draw the legend symbol inside the group box\n series.drawLegendSymbol(legend, item);\n if (legend.setItemEvents) {\n legend.setItemEvents(item, label, useHTML);\n }\n }\n // Add the HTML checkbox on top\n if (showCheckbox && !item.checkbox && legend.createCheckboxForItem) {\n legend.createCheckboxForItem(item);\n }\n // Colorize the items\n legend.colorizeItem(item, item.visible);\n // Take care of max width and text overflow (#6659)\n if (chart.styledMode || !itemStyle.width) {\n label.css({\n width: ((options.itemWidth ||\n legend.widthOption ||\n chart.spacingBox.width) - itemExtraWidth) + 'px'\n });\n }\n // Always update the text\n legend.setText(item);\n // Calculate the positions for the next line\n var bBox = label.getBBox();\n var fontMetricsH = (legend.fontMetrics && legend.fontMetrics.h) || 0;\n item.itemWidth = item.checkboxOffset =\n options.itemWidth ||\n legendItem.labelWidth ||\n bBox.width + itemExtraWidth;\n legend.maxItemWidth = Math.max(legend.maxItemWidth, item.itemWidth);\n legend.totalItemWidth += item.itemWidth;\n legend.itemHeight = item.itemHeight = Math.round(legendItem.labelHeight ||\n // Use bBox for multiline (#16398)\n (bBox.height > fontMetricsH * 1.5 ? bBox.height : fontMetricsH));\n };\n /**\n * Get the position of the item in the layout. We now know the\n * maxItemWidth from the previous loop.\n *\n * @private\n * @function Highcharts.Legend#layoutItem\n * @param {Highcharts.BubbleLegendItem|Highcharts.Point|Highcharts.Series} item\n */\n Legend.prototype.layoutItem = function (item) {\n var options = this.options,\n padding = this.padding,\n horizontal = options.layout === 'horizontal',\n itemHeight = item.itemHeight,\n itemMarginBottom = this.itemMarginBottom,\n itemMarginTop = this.itemMarginTop,\n itemDistance = horizontal ? Legend_pick(options.itemDistance, 20) : 0,\n maxLegendWidth = this.maxLegendWidth,\n itemWidth = (options.alignColumns &&\n this.totalItemWidth > maxLegendWidth) ?\n this.maxItemWidth :\n item.itemWidth,\n legendItem = item.legendItem || {};\n // If the item exceeds the width, start a new line\n if (horizontal &&\n this.itemX - padding + itemWidth > maxLegendWidth) {\n this.itemX = padding;\n if (this.lastLineHeight) { // Not for the first line (#10167)\n this.itemY += (itemMarginTop +\n this.lastLineHeight +\n itemMarginBottom);\n }\n this.lastLineHeight = 0; // Reset for next line (#915, #3976)\n }\n // Set the edge positions\n this.lastItemY = itemMarginTop + this.itemY + itemMarginBottom;\n this.lastLineHeight = Math.max(// #915\n itemHeight, this.lastLineHeight);\n // Cache the position of the newly generated or reordered items\n legendItem.x = this.itemX;\n legendItem.y = this.itemY;\n // Advance\n if (horizontal) {\n this.itemX += itemWidth;\n }\n else {\n this.itemY +=\n itemMarginTop + itemHeight + itemMarginBottom;\n this.lastLineHeight = itemHeight;\n }\n // The width of the widest item\n this.offsetWidth = this.widthOption || Math.max((horizontal ? this.itemX - padding - (item.checkbox ?\n // Decrease by itemDistance only when no checkbox #4853\n 0 :\n itemDistance) : itemWidth) + padding, this.offsetWidth);\n };\n /**\n * Get all items, which is one item per series for most series and one\n * item per point for pie series and its derivatives. Fires the event\n * `afterGetAllItems`.\n *\n * @private\n * @function Highcharts.Legend#getAllItems\n * @return {Array<(Highcharts.BubbleLegendItem|Highcharts.Point|Highcharts.Series)>}\n * The current items in the legend.\n * @emits Highcharts.Legend#event:afterGetAllItems\n */\n Legend.prototype.getAllItems = function () {\n var allItems = [];\n this.chart.series.forEach(function (series) {\n var seriesOptions = series && series.options;\n // Handle showInLegend. If the series is linked to another series,\n // defaults to false.\n if (series && Legend_pick(seriesOptions.showInLegend, !Legend_defined(seriesOptions.linkedTo) ? void 0 : false, true)) {\n // Use points or series for the legend item depending on\n // legendType\n allItems = allItems.concat((series.legendItem || {}).labels ||\n (seriesOptions.legendType === 'point' ?\n series.data :\n series));\n }\n });\n Legend_fireEvent(this, 'afterGetAllItems', { allItems: allItems });\n return allItems;\n };\n /**\n * Get a short, three letter string reflecting the alignment and layout.\n *\n * @private\n * @function Highcharts.Legend#getAlignment\n * @return {string}\n * The alignment, empty string if floating\n */\n Legend.prototype.getAlignment = function () {\n var options = this.options;\n // Use the first letter of each alignment option in order to detect\n // the side. (#4189 - use charAt(x) notation instead of [x] for IE7)\n if (this.proximate) {\n return options.align.charAt(0) + 'tv';\n }\n return options.floating ? '' : (options.align.charAt(0) +\n options.verticalAlign.charAt(0) +\n options.layout.charAt(0));\n };\n /**\n * Adjust the chart margins by reserving space for the legend on only one\n * side of the chart. If the position is set to a corner, top or bottom is\n * reserved for horizontal legends and left or right for vertical ones.\n *\n * @private\n * @function Highcharts.Legend#adjustMargins\n * @param {Array<number>} margin\n * @param {Array<number>} spacing\n */\n Legend.prototype.adjustMargins = function (margin, spacing) {\n var chart = this.chart,\n options = this.options,\n alignment = this.getAlignment();\n if (alignment) {\n ([\n /(lth|ct|rth)/,\n /(rtv|rm|rbv)/,\n /(rbh|cb|lbh)/,\n /(lbv|lm|ltv)/\n ]).forEach(function (alignments, side) {\n if (alignments.test(alignment) && !Legend_defined(margin[side])) {\n // Now we have detected on which side of the chart we should\n // reserve space for the legend\n chart[marginNames[side]] = Math.max(chart[marginNames[side]], (chart.legend[(side + 1) % 2 ? 'legendHeight' : 'legendWidth'] +\n [1, -1, -1, 1][side] * options[(side % 2) ? 'x' : 'y'] +\n Legend_pick(options.margin, 12) +\n spacing[side] +\n (chart.titleOffset[side] || 0)));\n }\n });\n }\n };\n /**\n * @private\n * @function Highcharts.Legend#proximatePositions\n */\n Legend.prototype.proximatePositions = function () {\n var chart = this.chart,\n boxes = [],\n alignLeft = this.options.align === 'left';\n this.allItems.forEach(function (item) {\n var lastPoint,\n height,\n useFirstPoint = alignLeft,\n target,\n top;\n if (item.yAxis) {\n if (item.xAxis.options.reversed) {\n useFirstPoint = !useFirstPoint;\n }\n if (item.points) {\n lastPoint = Legend_find(useFirstPoint ?\n item.points :\n item.points.slice(0).reverse(), function (item) {\n return Legend_isNumber(item.plotY);\n });\n }\n height = this.itemMarginTop +\n item.legendItem.label.getBBox().height +\n this.itemMarginBottom;\n top = item.yAxis.top - chart.plotTop;\n if (item.visible) {\n target = lastPoint ?\n lastPoint.plotY :\n item.yAxis.height;\n target += top - 0.3 * height;\n }\n else {\n target = top + item.yAxis.height;\n }\n boxes.push({\n target: target,\n size: height,\n item: item\n });\n }\n }, this);\n var legendItem;\n for (var _i = 0, _a = Legend_distribute(boxes, chart.plotHeight); _i < _a.length; _i++) {\n var box = _a[_i];\n legendItem = box.item.legendItem || {};\n if (Legend_isNumber(box.pos)) {\n legendItem.y = chart.plotTop - chart.spacing[0] + box.pos;\n }\n }\n };\n /**\n * Render the legend. This method can be called both before and after\n * `chart.render`. If called after, it will only rearrange items instead\n * of creating new ones. Called internally on initial render and after\n * redraws.\n *\n * @private\n * @function Highcharts.Legend#render\n */\n Legend.prototype.render = function () {\n var legend = this,\n chart = legend.chart,\n renderer = chart.renderer,\n options = legend.options,\n padding = legend.padding, \n // Add each series or point\n allItems = legend.getAllItems();\n var display,\n legendWidth,\n legendHeight,\n legendGroup = legend.group,\n allowedWidth,\n box = legend.box;\n legend.itemX = padding;\n legend.itemY = legend.initialItemY;\n legend.offsetWidth = 0;\n legend.lastItemY = 0;\n legend.widthOption = Legend_relativeLength(options.width, chart.spacingBox.width - padding);\n // Compute how wide the legend is allowed to be\n allowedWidth = chart.spacingBox.width - 2 * padding - options.x;\n if (['rm', 'lm'].indexOf(legend.getAlignment().substring(0, 2)) > -1) {\n allowedWidth /= 2;\n }\n legend.maxLegendWidth = legend.widthOption || allowedWidth;\n if (!legendGroup) {\n /**\n * SVG group of the legend.\n *\n * @readonly\n * @name Highcharts.Legend#group\n * @type {Highcharts.SVGElement}\n */\n legend.group = legendGroup = renderer\n .g('legend')\n .addClass(options.className || '')\n .attr({ zIndex: 7 })\n .add();\n legend.contentGroup = renderer\n .g()\n .attr({ zIndex: 1 }) // Above background\n .add(legendGroup);\n legend.scrollGroup = renderer\n .g()\n .add(legend.contentGroup);\n }\n legend.renderTitle();\n // Sort by legendIndex\n Legend_stableSort(allItems, function (a, b) {\n return ((a.options && a.options.legendIndex) || 0) -\n ((b.options && b.options.legendIndex) || 0);\n });\n // Reversed legend\n if (options.reversed) {\n allItems.reverse();\n }\n /**\n * All items for the legend, which is an array of series for most series\n * and an array of points for pie series and its derivatives.\n *\n * @readonly\n * @name Highcharts.Legend#allItems\n * @type {Array<(Highcharts.Point|Highcharts.Series)>}\n */\n legend.allItems = allItems;\n legend.display = display = !!allItems.length;\n // Render the items. First we run a loop to set the text and properties\n // and read all the bounding boxes. The next loop computes the item\n // positions based on the bounding boxes.\n legend.lastLineHeight = 0;\n legend.maxItemWidth = 0;\n legend.totalItemWidth = 0;\n legend.itemHeight = 0;\n allItems.forEach(legend.renderItem, legend);\n allItems.forEach(legend.layoutItem, legend);\n // Get the box\n legendWidth = (legend.widthOption || legend.offsetWidth) + padding;\n legendHeight = legend.lastItemY + legend.lastLineHeight +\n legend.titleHeight;\n legendHeight = legend.handleOverflow(legendHeight);\n legendHeight += padding;\n // Draw the border and/or background\n if (!box) {\n /**\n * SVG element of the legend box.\n *\n * @readonly\n * @name Highcharts.Legend#box\n * @type {Highcharts.SVGElement}\n */\n legend.box = box = renderer.rect()\n .addClass('highcharts-legend-box')\n .attr({\n r: options.borderRadius\n })\n .add(legendGroup);\n }\n // Presentational\n if (!chart.styledMode) {\n box\n .attr({\n stroke: options.borderColor,\n 'stroke-width': options.borderWidth || 0,\n fill: options.backgroundColor || 'none'\n })\n .shadow(options.shadow);\n }\n if (legendWidth > 0 && legendHeight > 0) {\n box[box.placed ? 'animate' : 'attr'](box.crisp.call({}, {\n x: 0,\n y: 0,\n width: legendWidth,\n height: legendHeight\n }, box.strokeWidth()));\n }\n // Hide the border if no items\n legendGroup[display ? 'show' : 'hide']();\n // Open for responsiveness\n if (chart.styledMode && legendGroup.getStyle('display') === 'none') {\n legendWidth = legendHeight = 0;\n }\n legend.legendWidth = legendWidth;\n legend.legendHeight = legendHeight;\n if (display) {\n legend.align();\n }\n if (!this.proximate) {\n this.positionItems();\n }\n Legend_fireEvent(this, 'afterRender');\n };\n /**\n * Align the legend to chart's box.\n *\n * @private\n * @function Highcharts.align\n * @param {Highcharts.BBoxObject} alignTo\n */\n Legend.prototype.align = function (alignTo) {\n if (alignTo === void 0) { alignTo = this.chart.spacingBox; }\n var chart = this.chart,\n options = this.options;\n // If aligning to the top and the layout is horizontal, adjust for\n // the title (#7428)\n var y = alignTo.y;\n if (/(lth|ct|rth)/.test(this.getAlignment()) &&\n chart.titleOffset[0] > 0) {\n y += chart.titleOffset[0];\n }\n else if (/(lbh|cb|rbh)/.test(this.getAlignment()) &&\n chart.titleOffset[2] > 0) {\n y -= chart.titleOffset[2];\n }\n if (y !== alignTo.y) {\n alignTo = Legend_merge(alignTo, { y: y });\n }\n if (!chart.hasRendered) {\n // Avoid animation when adjusting alignment for responsiveness and\n // colorAxis label layout\n this.group.placed = false;\n }\n this.group.align(Legend_merge(options, {\n width: this.legendWidth,\n height: this.legendHeight,\n verticalAlign: this.proximate ? 'top' : options.verticalAlign\n }), true, alignTo);\n };\n /**\n * Set up the overflow handling by adding navigation with up and down arrows\n * below the legend.\n *\n * @private\n * @function Highcharts.Legend#handleOverflow\n */\n Legend.prototype.handleOverflow = function (legendHeight) {\n var legend = this,\n chart = this.chart,\n renderer = chart.renderer,\n options = this.options,\n optionsY = options.y,\n alignTop = options.verticalAlign === 'top',\n padding = this.padding,\n maxHeight = options.maxHeight,\n navOptions = options.navigation,\n animation = Legend_pick(navOptions.animation,\n true),\n arrowSize = navOptions.arrowSize || 12,\n pages = this.pages,\n allItems = this.allItems,\n clipToHeight = function (height) {\n if (typeof height === 'number') {\n clipRect.attr({\n height: height\n });\n }\n else if (clipRect) { // Reset (#5912)\n legend.clipRect = clipRect.destroy();\n legend.contentGroup.clip();\n }\n // Use HTML\n if (legend.contentGroup.div) {\n legend.contentGroup.div.style.clip = height ?\n 'rect(' + padding + 'px,9999px,' +\n (padding + height) + 'px,0)' :\n 'auto';\n }\n }, addTracker = function (key) {\n legend[key] = renderer\n .circle(0, 0, arrowSize * 1.3)\n .translate(arrowSize / 2, arrowSize / 2)\n .add(nav);\n if (!chart.styledMode) {\n legend[key].attr('fill', 'rgba(0,0,0,0.0001)');\n }\n return legend[key];\n };\n var clipHeight,\n lastY,\n legendItem,\n spaceHeight = (chart.spacingBox.height +\n (alignTop ? -optionsY : optionsY) - padding),\n nav = this.nav,\n clipRect = this.clipRect;\n // Adjust the height\n if (options.layout === 'horizontal' &&\n options.verticalAlign !== 'middle' &&\n !options.floating) {\n spaceHeight /= 2;\n }\n if (maxHeight) {\n spaceHeight = Math.min(spaceHeight, maxHeight);\n }\n // Reset the legend height and adjust the clipping rectangle\n pages.length = 0;\n if (legendHeight &&\n spaceHeight > 0 &&\n legendHeight > spaceHeight &&\n navOptions.enabled !== false) {\n this.clipHeight = clipHeight =\n Math.max(spaceHeight - 20 - this.titleHeight - padding, 0);\n this.currentPage = Legend_pick(this.currentPage, 1);\n this.fullHeight = legendHeight;\n // Fill pages with Y positions so that the top of each a legend item\n // defines the scroll top for each page (#2098)\n allItems.forEach(function (item, i) {\n legendItem = item.legendItem || {};\n var y = legendItem.y || 0,\n h = Math.round(legendItem.label.getBBox().height);\n var len = pages.length;\n if (!len || (y - pages[len - 1] > clipHeight &&\n (lastY || y) !== pages[len - 1])) {\n pages.push(lastY || y);\n len++;\n }\n // Keep track of which page each item is on\n legendItem.pageIx = len - 1;\n if (lastY) {\n (allItems[i - 1].legendItem || {}).pageIx = len - 1;\n }\n // Add the last page if needed (#2617, #13683)\n if (\n // Check the last item\n i === allItems.length - 1 &&\n // If adding next page is needed (#18768)\n y + h - pages[len - 1] > clipHeight &&\n y > pages[len - 1]) {\n pages.push(y);\n legendItem.pageIx = len;\n }\n if (y !== lastY) {\n lastY = y;\n }\n });\n // Only apply clipping if needed. Clipping causes blurred legend in\n // PDF export (#1787)\n if (!clipRect) {\n clipRect = legend.clipRect =\n renderer.clipRect(0, padding - 2, 9999, 0);\n legend.contentGroup.clip(clipRect);\n }\n clipToHeight(clipHeight);\n // Add navigation elements\n if (!nav) {\n this.nav = nav = renderer.g()\n .attr({ zIndex: 1 })\n .add(this.group);\n this.up = renderer\n .symbol('triangle', 0, 0, arrowSize, arrowSize)\n .add(nav);\n addTracker('upTracker')\n .on('click', function () {\n legend.scroll(-1, animation);\n });\n this.pager = renderer.text('', 15, 10)\n .addClass('highcharts-legend-navigation');\n if (!chart.styledMode && navOptions.style) {\n this.pager.css(navOptions.style);\n }\n this.pager.add(nav);\n this.down = renderer\n .symbol('triangle-down', 0, 0, arrowSize, arrowSize)\n .add(nav);\n addTracker('downTracker')\n .on('click', function () {\n legend.scroll(1, animation);\n });\n }\n // Set initial position\n legend.scroll(0);\n legendHeight = spaceHeight;\n // Reset\n }\n else if (nav) {\n clipToHeight();\n this.nav = nav.destroy(); // #6322\n this.scrollGroup.attr({\n translateY: 1\n });\n this.clipHeight = 0; // #1379\n }\n return legendHeight;\n };\n /**\n * Scroll the legend by a number of pages.\n *\n * @private\n * @function Highcharts.Legend#scroll\n *\n * @param {number} scrollBy\n * The number of pages to scroll.\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n * Whether and how to apply animation.\n *\n */\n Legend.prototype.scroll = function (scrollBy, animation) {\n var _this = this;\n var chart = this.chart,\n pages = this.pages,\n pageCount = pages.length,\n clipHeight = this.clipHeight,\n navOptions = this.options.navigation,\n pager = this.pager,\n padding = this.padding;\n var currentPage = this.currentPage + scrollBy;\n // When resizing while looking at the last page\n if (currentPage > pageCount) {\n currentPage = pageCount;\n }\n if (currentPage > 0) {\n if (typeof animation !== 'undefined') {\n Legend_setAnimation(animation, chart);\n }\n this.nav.attr({\n translateX: padding,\n translateY: clipHeight + this.padding + 7 + this.titleHeight,\n visibility: 'inherit'\n });\n [this.up, this.upTracker].forEach(function (elem) {\n elem.attr({\n 'class': currentPage === 1 ?\n 'highcharts-legend-nav-inactive' :\n 'highcharts-legend-nav-active'\n });\n });\n pager.attr({\n text: currentPage + '/' + pageCount\n });\n [this.down, this.downTracker].forEach(function (elem) {\n elem.attr({\n // Adjust to text width\n x: 18 + this.pager.getBBox().width,\n 'class': currentPage === pageCount ?\n 'highcharts-legend-nav-inactive' :\n 'highcharts-legend-nav-active'\n });\n }, this);\n if (!chart.styledMode) {\n this.up\n .attr({\n fill: currentPage === 1 ?\n navOptions.inactiveColor :\n navOptions.activeColor\n });\n this.upTracker\n .css({\n cursor: currentPage === 1 ? 'default' : 'pointer'\n });\n this.down\n .attr({\n fill: currentPage === pageCount ?\n navOptions.inactiveColor :\n navOptions.activeColor\n });\n this.downTracker\n .css({\n cursor: currentPage === pageCount ?\n 'default' :\n 'pointer'\n });\n }\n this.scrollOffset = -pages[currentPage - 1] + this.initialItemY;\n this.scrollGroup.animate({\n translateY: this.scrollOffset\n });\n this.currentPage = currentPage;\n this.positionCheckboxes();\n // Fire event after scroll animation is complete\n var animOptions = Legend_animObject(Legend_pick(animation,\n chart.renderer.globalAnimation,\n true));\n Legend_syncTimeout(function () {\n Legend_fireEvent(_this, 'afterScroll', { currentPage: currentPage });\n }, animOptions.duration);\n }\n };\n /**\n * @private\n * @function Highcharts.Legend#setItemEvents\n * @param {Highcharts.BubbleLegendItem|Point|Highcharts.Series} item\n * @param {Highcharts.SVGElement} legendLabel\n * @param {boolean} [useHTML=false]\n * @emits Highcharts.Legend#event:itemClick\n */\n Legend.prototype.setItemEvents = function (item, legendLabel, useHTML) {\n var legend = this,\n legendItem = item.legendItem || {},\n boxWrapper = legend.chart.renderer.boxWrapper,\n isPoint = item instanceof Series_Point,\n isSeries = item instanceof Series_Series,\n activeClass = 'highcharts-legend-' +\n (isPoint ? 'point' : 'series') + '-active',\n styledMode = legend.chart.styledMode, \n // When `useHTML`, the symbol is rendered in other group, so\n // we need to apply events listeners to both places\n legendElements = useHTML ?\n [legendLabel,\n legendItem.symbol] :\n [legendItem.group];\n var setOtherItemsState = function (state) {\n legend.allItems.forEach(function (otherItem) {\n if (item !== otherItem) {\n [otherItem]\n .concat(otherItem.linkedSeries || [])\n .forEach(function (otherItem) {\n otherItem.setState(state, !isPoint);\n });\n }\n });\n };\n // Set the events on the item group, or in case of useHTML, the item\n // itself (#1249)\n for (var _i = 0, legendElements_1 = legendElements; _i < legendElements_1.length; _i++) {\n var element = legendElements_1[_i];\n if (element) {\n element\n .on('mouseover', function () {\n if (item.visible) {\n setOtherItemsState('inactive');\n }\n item.setState('hover');\n // A CSS class to dim or hide other than the hovered\n // series.\n // Works only if hovered series is visible (#10071).\n if (item.visible) {\n boxWrapper.addClass(activeClass);\n }\n if (!styledMode) {\n legendLabel.css(legend.options.itemHoverStyle);\n }\n })\n .on('mouseout', function () {\n if (!legend.chart.styledMode) {\n legendLabel.css(Legend_merge(item.visible ?\n legend.itemStyle :\n legend.itemHiddenStyle));\n }\n setOtherItemsState('');\n // A CSS class to dim or hide other than the hovered\n // series.\n boxWrapper.removeClass(activeClass);\n item.setState();\n })\n .on('click', function (event) {\n var defaultItemClick = function () {\n if (item.setVisible) {\n item.setVisible();\n }\n // Reset inactive state\n setOtherItemsState(item.visible ? 'inactive' : '');\n };\n // A CSS class to dim or hide other than the hovered\n // series. Event handling in iOS causes the activeClass\n // to be added prior to click in some cases (#7418).\n boxWrapper.removeClass(activeClass);\n Legend_fireEvent(legend, 'itemClick', {\n // Pass over the click/touch event. #4.\n browserEvent: event,\n legendItem: item\n }, defaultItemClick);\n // Deprecated logic\n // Click the name or symbol\n if (isPoint) {\n item.firePointEvent('legendItemClick', {\n browserEvent: event\n });\n }\n else if (isSeries) {\n Legend_fireEvent(item, 'legendItemClick', {\n browserEvent: event\n });\n }\n });\n }\n }\n };\n /**\n * @private\n * @function Highcharts.Legend#createCheckboxForItem\n * @param {Highcharts.BubbleLegendItem|Point|Highcharts.Series} item\n * @emits Highcharts.Series#event:checkboxClick\n */\n Legend.prototype.createCheckboxForItem = function (item) {\n var legend = this;\n item.checkbox = Legend_createElement('input', {\n type: 'checkbox',\n className: 'highcharts-legend-checkbox',\n checked: item.selected,\n defaultChecked: item.selected // Required by IE7\n }, legend.options.itemCheckboxStyle, legend.chart.container);\n Legend_addEvent(item.checkbox, 'click', function (event) {\n var target = event.target;\n Legend_fireEvent(item.series || item, 'checkboxClick', {\n checked: target.checked,\n item: item\n }, function () {\n item.select();\n });\n });\n };\n return Legend;\n}());\n/* *\n *\n * Class Namespace\n *\n * */\n(function (Legend) {\n /* *\n *\n * Declarations\n *\n * */\n /* *\n *\n * Functions\n *\n * */\n /**\n * @private\n */\n function compose(ChartClass) {\n if (Legend_pushUnique(Legend_composed, 'Core.Legend')) {\n Legend_addEvent(ChartClass, 'beforeMargins', function () {\n /**\n * The legend contains an interactive overview over chart items,\n * usually individual series or points depending on the series\n * type. The color axis and bubble legend are also rendered in\n * the chart legend.\n *\n * @name Highcharts.Chart#legend\n * @type {Highcharts.Legend}\n */\n this.legend = new Legend(this, this.options.legend);\n });\n }\n }\n Legend.compose = compose;\n})(Legend || (Legend = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Legend_Legend = (Legend);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * @interface Highcharts.LegendItemObject\n */ /**\n* @name Highcharts.LegendItemObject#item\n* @type {Highcharts.SVGElement|undefined}\n*/ /**\n* @name Highcharts.LegendItemObject#line\n* @type {Highcharts.SVGElement|undefined}\n*/ /**\n* @name Highcharts.LegendItemObject#symbol\n* @type {Highcharts.SVGElement|undefined}\n*/\n/**\n * Gets fired when the legend item is clicked. The default\n * action is to toggle the visibility of the series or point. This can be\n * prevented by returning `false` or calling `event.preventDefault()`.\n *\n * @callback Highcharts.LegendItemClickCallbackFunction\n *\n * @param {Highcharts.Legend} this\n * The legend on which the event occurred.\n *\n * @param {Highcharts.LegendItemClickEventObject} event\n * The event that occurred.\n */\n/**\n * Information about the legend click event.\n *\n * @interface Highcharts.LegendItemClickEventObject\n */ /**\n* Related browser event.\n* @name Highcharts.LegendItemClickEventObject#browserEvent\n* @type {Highcharts.PointerEvent}\n*/ /**\n* Prevent the default action of toggle the visibility of the series or point.\n* @name Highcharts.LegendItemClickEventObject#preventDefault\n* @type {Function}\n* */ /**\n* Related legend item, it can be series, point, color axis or data class from\n* color axis.\n* @name Highcharts.LegendItemClickEventObject#legendItem\n* @type {Highcharts.Series|Highcharts.Point|Highcharts.LegendItemObject}\n* */ /**\n* Related legend.\n* @name Highcharts.LegendItemClickEventObject#target\n* @type {Highcharts.Legend}\n*/ /**\n* Event type.\n* @name Highcharts.LegendItemClickEventObject#type\n* @type {\"itemClick\"}\n*/\n/**\n * Gets fired when the legend item belonging to a point is clicked. The default\n * action is to toggle the visibility of the point. This can be prevented by\n * returning `false` or calling `event.preventDefault()`.\n *\n * **Note:** This option is deprecated in favor of\n * Highcharts.LegendItemClickCallbackFunction.\n *\n * @deprecated 11.4.4\n * @callback Highcharts.PointLegendItemClickCallbackFunction\n *\n * @param {Highcharts.Point} this\n * The point on which the event occurred.\n *\n * @param {Highcharts.PointLegendItemClickEventObject} event\n * The event that occurred.\n */\n/**\n * Information about the legend click event.\n *\n * **Note:** This option is deprecated in favor of\n * Highcharts.LegendItemClickEventObject.\n *\n * @deprecated 11.4.4\n * @interface Highcharts.PointLegendItemClickEventObject\n */ /**\n* Related browser event.\n* @name Highcharts.PointLegendItemClickEventObject#browserEvent\n* @type {Highcharts.PointerEvent}\n*/ /**\n* Prevent the default action of toggle the visibility of the point.\n* @name Highcharts.PointLegendItemClickEventObject#preventDefault\n* @type {Function}\n*/ /**\n* Related point.\n* @name Highcharts.PointLegendItemClickEventObject#target\n* @type {Highcharts.Point}\n*/ /**\n* Event type.\n* @name Highcharts.PointLegendItemClickEventObject#type\n* @type {\"legendItemClick\"}\n*/\n/**\n * Series color as used by the legend and some series types.\n * @name Highcharts.Series#color\n * @type {Highcharts.ColorType|undefined}\n */ /**\n* Legend data for the series.\n* @name Highcharts.Series#legendItem\n* @type {Highcharts.LegendItemObject|undefined}\n* @since 10.3.0\n*/\n/**\n * Gets fired when the legend item belonging to a series is clicked. The default\n * action is to toggle the visibility of the series. This can be prevented by\n * returning `false` or calling `event.preventDefault()`.\n *\n * **Note:** This option is deprecated in favor of\n * Highcharts.LegendItemClickCallbackFunction.\n *\n * @deprecated 11.4.4\n * @callback Highcharts.SeriesLegendItemClickCallbackFunction\n *\n * @param {Highcharts.Series} this\n * The series where the event occurred.\n *\n * @param {Highcharts.SeriesLegendItemClickEventObject} event\n * The event that occurred.\n */\n/**\n * Information about the legend click event.\n *\n * **Note:** This option is deprecated in favor of\n * Highcharts.LegendItemClickEventObject.\n *\n * @deprecated 11.4.4\n * @interface Highcharts.SeriesLegendItemClickEventObject\n */ /**\n* Related browser event.\n* @name Highcharts.SeriesLegendItemClickEventObject#browserEvent\n* @type {Highcharts.PointerEvent}\n*/ /**\n* Prevent the default action of toggle the visibility of the series.\n* @name Highcharts.SeriesLegendItemClickEventObject#preventDefault\n* @type {Function}\n*/ /**\n* Related series.\n* @name Highcharts.SeriesLegendItemClickEventObject#target\n* @type {Highcharts.Series}\n*/ /**\n* Event type.\n* @name Highcharts.SeriesLegendItemClickEventObject#type\n* @type {\"legendItemClick\"}\n*/\n(''); // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Chart/Chart.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar Chart_assign = (undefined && undefined.__assign) || function () {\n Chart_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return Chart_assign.apply(this, arguments);\n};\nvar Chart_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\nvar Chart_animate = AnimationUtilities.animate, Chart_animObject = AnimationUtilities.animObject, Chart_setAnimation = AnimationUtilities.setAnimation;\n\n\nvar Chart_defaultOptions = Defaults.defaultOptions;\n\nvar Chart_numberFormat = Core_Templating.numberFormat;\n\nvar Chart_registerEventOptions = Core_Foundation.registerEventOptions;\n\nvar Chart_charts = Core_Globals.charts, Chart_doc = Core_Globals.doc, Chart_marginNames = Core_Globals.marginNames, Chart_svg = Core_Globals.svg, Chart_win = Core_Globals.win;\n\n\n\nvar Chart_seriesTypes = Series_SeriesRegistry.seriesTypes;\n\n\n\n\n\nvar Chart_addEvent = Core_Utilities.addEvent, Chart_attr = Core_Utilities.attr, Chart_createElement = Core_Utilities.createElement, Chart_css = Core_Utilities.css, Chart_defined = Core_Utilities.defined, Chart_diffObjects = Core_Utilities.diffObjects, Chart_discardElement = Core_Utilities.discardElement, Chart_erase = Core_Utilities.erase, Chart_error = Core_Utilities.error, Chart_extend = Core_Utilities.extend, Chart_find = Core_Utilities.find, Chart_fireEvent = Core_Utilities.fireEvent, Chart_getAlignFactor = Core_Utilities.getAlignFactor, Chart_getStyle = Core_Utilities.getStyle, Chart_isArray = Core_Utilities.isArray, Chart_isNumber = Core_Utilities.isNumber, Chart_isObject = Core_Utilities.isObject, Chart_isString = Core_Utilities.isString, Chart_merge = Core_Utilities.merge, Chart_objectEach = Core_Utilities.objectEach, Chart_pick = Core_Utilities.pick, Chart_pInt = Core_Utilities.pInt, Chart_relativeLength = Core_Utilities.relativeLength, Chart_removeEvent = Core_Utilities.removeEvent, Chart_splat = Core_Utilities.splat, Chart_syncTimeout = Core_Utilities.syncTimeout, Chart_uniqueKey = Core_Utilities.uniqueKey;\n/* *\n *\n * Class\n *\n * */\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/**\n * The Chart class. The recommended constructor is {@link Highcharts#chart}.\n *\n * @example\n * let chart = Highcharts.chart('container', {\n * title: {\n * text: 'My chart'\n * },\n * series: [{\n * data: [1, 3, 2, 4]\n * }]\n * })\n *\n * @class\n * @name Highcharts.Chart\n *\n * @param {string|Highcharts.HTMLDOMElement} [renderTo]\n * The DOM element to render to, or its id.\n *\n * @param {Highcharts.Options} options\n * The chart options structure.\n *\n * @param {Highcharts.ChartCallbackFunction} [callback]\n * Function to run when the chart has loaded and all external images\n * are loaded. Defining a\n * [chart.events.load](https://api.highcharts.com/highcharts/chart.events.load)\n * handler is equivalent.\n */\nvar Chart = /** @class */ (function () {\n // Implementation\n function Chart(a, \n /* eslint-disable @typescript-eslint/no-unused-vars */\n b, c\n /* eslint-enable @typescript-eslint/no-unused-vars */\n ) {\n this.sharedClips = {};\n var args = Chart_spreadArray([],\n arguments,\n true);\n // Remove the optional first argument, renderTo, and set it on this.\n if (Chart_isString(a) || a.nodeName) {\n this.renderTo = args.shift();\n }\n this.init(args[0], args[1]);\n }\n /**\n * Factory function for basic charts.\n *\n * @example\n * // Render a chart in to div#container\n * let chart = Highcharts.chart('container', {\n * title: {\n * text: 'My chart'\n * },\n * series: [{\n * data: [1, 3, 2, 4]\n * }]\n * });\n *\n * @function Highcharts.chart\n *\n * @param {string|Highcharts.HTMLDOMElement} [renderTo]\n * The DOM element to render to, or its id.\n *\n * @param {Highcharts.Options} options\n * The chart options structure.\n *\n * @param {Highcharts.ChartCallbackFunction} [callback]\n * Function to run when the chart has loaded and all external images are\n * loaded. Defining a\n * [chart.events.load](https://api.highcharts.com/highcharts/chart.events.load)\n * handler is equivalent.\n *\n * @return {Highcharts.Chart}\n * Returns the Chart object.\n */\n Chart.chart = function (a, b, c) {\n return new Chart(a, b, c);\n };\n /* *\n *\n * Functions\n *\n * */\n /**\n * Function setting zoom options after chart init and after chart update.\n * Offers support for deprecated options.\n *\n * @private\n * @function Highcharts.Chart#setZoomOptions\n */\n Chart.prototype.setZoomOptions = function () {\n var chart = this,\n options = chart.options.chart,\n zooming = options.zooming;\n chart.zooming = Chart_assign(Chart_assign({}, zooming), { type: Chart_pick(options.zoomType, zooming.type), key: Chart_pick(options.zoomKey, zooming.key), pinchType: Chart_pick(options.pinchType, zooming.pinchType), singleTouch: Chart_pick(options.zoomBySingleTouch, zooming.singleTouch, false), resetButton: Chart_merge(zooming.resetButton, options.resetZoomButton) });\n };\n /**\n * Overridable function that initializes the chart. The constructor's\n * arguments are passed on directly.\n *\n * @function Highcharts.Chart#init\n *\n * @param {Highcharts.Options} userOptions\n * Custom options.\n *\n * @param {Function} [callback]\n * Function to run when the chart has loaded and all external\n * images are loaded.\n *\n *\n * @emits Highcharts.Chart#event:init\n * @emits Highcharts.Chart#event:afterInit\n */\n Chart.prototype.init = function (userOptions, callback) {\n // Fire the event with a default function\n Chart_fireEvent(this, 'init', { args: arguments }, function () {\n var _a,\n _b;\n var options = Chart_merge(Chart_defaultOptions,\n userOptions), // Do the merge\n optionsChart = options.chart,\n renderTo = this.renderTo || optionsChart.renderTo;\n /**\n * The original options given to the constructor or a chart factory\n * like {@link Highcharts.chart} and {@link Highcharts.stockChart}.\n * The original options are shallow copied to avoid mutation. The\n * copy, `chart.userOptions`, may later be mutated to reflect\n * updated options throughout the lifetime of the chart.\n *\n * For collections, like `series`, `xAxis` and `yAxis`, the chart\n * user options should always be reflected by the item user option,\n * so for example the following should always be true:\n *\n * `chart.xAxis[0].userOptions === chart.userOptions.xAxis[0]`\n *\n * @name Highcharts.Chart#userOptions\n * @type {Highcharts.Options}\n */\n this.userOptions = Chart_extend({}, userOptions);\n if (!(this.renderTo = (Chart_isString(renderTo) ?\n Chart_doc.getElementById(renderTo) :\n renderTo))) {\n // Display an error if the renderTo is wrong\n Chart_error(13, true, this);\n }\n this.margin = [];\n this.spacing = [];\n // An array of functions that returns labels that should be\n // considered for anti-collision\n this.labelCollectors = [];\n this.callback = callback;\n this.isResizing = 0;\n /**\n * The options structure for the chart after merging\n * {@link #defaultOptions} and {@link #userOptions}. It contains\n * members for the sub elements like series, legend, tooltip etc.\n *\n * @name Highcharts.Chart#options\n * @type {Highcharts.Options}\n */\n this.options = options;\n /**\n * All the axes in the chart.\n *\n * @see Highcharts.Chart.xAxis\n * @see Highcharts.Chart.yAxis\n *\n * @name Highcharts.Chart#axes\n * @type {Array<Highcharts.Axis>}\n */\n this.axes = [];\n /**\n * All the current series in the chart.\n *\n * @name Highcharts.Chart#series\n * @type {Array<Highcharts.Series>}\n */\n this.series = [];\n this.locale = (_a = options.lang.locale) !== null && _a !== void 0 ? _a : (_b = this.renderTo.closest('[lang]')) === null || _b === void 0 ? void 0 : _b.lang;\n /**\n * The `Time` object associated with the chart. Since v6.0.5,\n * time settings can be applied individually for each chart. If\n * no individual settings apply, the `Time` object is shared by\n * all instances.\n *\n * @name Highcharts.Chart#time\n * @type {Highcharts.Time}\n */\n this.time = new Core_Time(Chart_extend(options.time || {}, {\n locale: this.locale\n }));\n options.time = this.time.options;\n /**\n * Callback function to override the default function that formats\n * all the numbers in the chart. Returns a string with the formatted\n * number.\n *\n * @name Highcharts.Chart#numberFormatter\n * @type {Highcharts.NumberFormatterCallbackFunction}\n */\n this.numberFormatter = (optionsChart.numberFormatter || Chart_numberFormat).bind(this);\n /**\n * Whether the chart is in styled mode, meaning all presentational\n * attributes are avoided.\n *\n * @name Highcharts.Chart#styledMode\n * @type {boolean}\n */\n this.styledMode = optionsChart.styledMode;\n this.hasCartesianSeries = optionsChart.showAxes;\n var chart = this;\n /**\n * Index position of the chart in the {@link Highcharts#charts}\n * property.\n *\n * @name Highcharts.Chart#index\n * @type {number}\n * @readonly\n */\n chart.index = Chart_charts.length; // Add the chart to the global lookup\n Chart_charts.push(chart);\n Core_Globals.chartCount++;\n // Chart event handlers\n Chart_registerEventOptions(this, optionsChart);\n /**\n * A collection of the X axes in the chart.\n *\n * @name Highcharts.Chart#xAxis\n * @type {Array<Highcharts.Axis>}\n */\n chart.xAxis = [];\n /**\n * A collection of the Y axes in the chart.\n *\n * @name Highcharts.Chart#yAxis\n * @type {Array<Highcharts.Axis>}\n *\n * @todo\n * Make events official: Fire the event `afterInit`.\n */\n chart.yAxis = [];\n chart.pointCount = chart.colorCounter = chart.symbolCounter = 0;\n this.setZoomOptions();\n // Fire after init but before first render, before axes and series\n // have been initialized.\n Chart_fireEvent(chart, 'afterInit');\n chart.firstRender();\n });\n };\n /**\n * Internal function to unitialize an individual series.\n *\n * @private\n * @function Highcharts.Chart#initSeries\n */\n Chart.prototype.initSeries = function (options) {\n var chart = this,\n optionsChart = chart.options.chart,\n type = (options.type ||\n optionsChart.type),\n SeriesClass = Chart_seriesTypes[type];\n // No such series type\n if (!SeriesClass) {\n Chart_error(17, true, chart, { missingModuleFor: type });\n }\n var series = new SeriesClass();\n if (typeof series.init === 'function') {\n series.init(chart, options);\n }\n return series;\n };\n /**\n * Internal function to set data for all series with enabled sorting.\n *\n * @private\n * @function Highcharts.Chart#setSortedData\n */\n Chart.prototype.setSortedData = function () {\n this.getSeriesOrderByLinks().forEach(function (series) {\n // We need to set data for series with sorting after series init\n if (!series.points && !series.data && series.enabledDataSorting) {\n series.setData(series.options.data, false);\n }\n });\n };\n /**\n * Sort and return chart series in order depending on the number of linked\n * series.\n *\n * @private\n * @function Highcharts.Series#getSeriesOrderByLinks\n */\n Chart.prototype.getSeriesOrderByLinks = function () {\n return this.series.concat().sort(function (a, b) {\n if (a.linkedSeries.length || b.linkedSeries.length) {\n return b.linkedSeries.length - a.linkedSeries.length;\n }\n return 0;\n });\n };\n /**\n * Order all series or axes above a given index. When series or axes are\n * added and ordered by configuration, only the last series is handled\n * (#248, #1123, #2456, #6112). This function is called on series and axis\n * initialization and destroy.\n *\n * @private\n * @function Highcharts.Chart#orderItems\n * @param {string} coll The collection name\n * @param {number} [fromIndex=0]\n * If this is given, only the series above this index are handled.\n */\n Chart.prototype.orderItems = function (coll, fromIndex) {\n if (fromIndex === void 0) { fromIndex = 0; }\n var collection = this[coll], \n // Item options should be reflected in chart.options.series,\n // chart.options.yAxis etc\n optionsArray = this.options[coll] = Chart_splat(this.options[coll])\n .slice(),\n userOptionsArray = this.userOptions[coll] = this.userOptions[coll] ?\n Chart_splat(this.userOptions[coll]).slice() :\n [];\n if (this.hasRendered) {\n // Remove all above index\n optionsArray.splice(fromIndex);\n userOptionsArray.splice(fromIndex);\n }\n if (collection) {\n for (var i = fromIndex, iEnd = collection.length; i < iEnd; ++i) {\n var item = collection[i];\n if (item) {\n /**\n * Contains the series' index in the `Chart.series` array.\n *\n * @name Highcharts.Series#index\n * @type {number}\n * @readonly\n */\n item.index = i;\n if (item instanceof Series_Series) {\n item.name = item.getName();\n }\n if (!item.options.isInternal) {\n optionsArray[i] = item.options;\n userOptionsArray[i] = item.userOptions;\n }\n }\n }\n }\n };\n /**\n * Check whether a given point is within the plot area.\n *\n * @function Highcharts.Chart#isInsidePlot\n *\n * @param {number} plotX\n * Pixel x relative to the plot area.\n *\n * @param {number} plotY\n * Pixel y relative to the plot area.\n *\n * @param {Highcharts.ChartIsInsideOptionsObject} [options]\n * Options object.\n *\n * @return {boolean}\n * Returns true if the given point is inside the plot area.\n */\n Chart.prototype.isInsidePlot = function (plotX, plotY, options) {\n var _a;\n if (options === void 0) { options = {}; }\n var _b = this,\n inverted = _b.inverted,\n plotBox = _b.plotBox,\n plotLeft = _b.plotLeft,\n plotTop = _b.plotTop,\n scrollablePlotBox = _b.scrollablePlotBox,\n _c = (options.visiblePlotOnly &&\n ((_a = this.scrollablePlotArea) === null || _a === void 0 ? void 0 : _a.scrollingContainer)) || {},\n _d = _c.scrollLeft,\n scrollLeft = _d === void 0 ? 0 : _d,\n _e = _c.scrollTop,\n scrollTop = _e === void 0 ? 0 : _e,\n series = options.series,\n box = (options.visiblePlotOnly && scrollablePlotBox) || plotBox,\n x = options.inverted ? plotY : plotX,\n y = options.inverted ? plotX : plotY,\n e = {\n x: x,\n y: y,\n isInsidePlot: true,\n options: options\n };\n if (!options.ignoreX) {\n var xAxis = (series &&\n (inverted && !this.polar ? series.yAxis : series.xAxis)) || {\n pos: plotLeft,\n len: Infinity\n };\n var chartX = options.paneCoordinates ?\n xAxis.pos + x : plotLeft + x;\n if (!(chartX >= Math.max(scrollLeft + plotLeft, xAxis.pos) &&\n chartX <= Math.min(scrollLeft + plotLeft + box.width, xAxis.pos + xAxis.len))) {\n e.isInsidePlot = false;\n }\n }\n if (!options.ignoreY && e.isInsidePlot) {\n var yAxis = (!inverted && options.axis &&\n !options.axis.isXAxis && options.axis) || (series && (inverted ? series.xAxis : series.yAxis)) || {\n pos: plotTop,\n len: Infinity\n };\n var chartY = options.paneCoordinates ?\n yAxis.pos + y : plotTop + y;\n if (!(chartY >= Math.max(scrollTop + plotTop, yAxis.pos) &&\n chartY <= Math.min(scrollTop + plotTop + box.height, yAxis.pos + yAxis.len))) {\n e.isInsidePlot = false;\n }\n }\n Chart_fireEvent(this, 'afterIsInsidePlot', e);\n return e.isInsidePlot;\n };\n /**\n * Redraw the chart after changes have been done to the data, axis extremes\n * chart size or chart elements. All methods for updating axes, series or\n * points have a parameter for redrawing the chart. This is `true` by\n * default. But in many cases you want to do more than one operation on the\n * chart before redrawing, for example add a number of points. In those\n * cases it is a waste of resources to redraw the chart for each new point\n * added. So you add the points and call `chart.redraw()` after.\n *\n * @function Highcharts.Chart#redraw\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n * If or how to apply animation to the redraw. When `undefined`, it applies\n * the animation that is set in the `chart.animation` option.\n *\n * @emits Highcharts.Chart#event:afterSetExtremes\n * @emits Highcharts.Chart#event:beforeRedraw\n * @emits Highcharts.Chart#event:predraw\n * @emits Highcharts.Chart#event:redraw\n * @emits Highcharts.Chart#event:render\n * @emits Highcharts.Chart#event:updatedData\n */\n Chart.prototype.redraw = function (animation) {\n Chart_fireEvent(this, 'beforeRedraw');\n var chart = this,\n axes = chart.hasCartesianSeries ? chart.axes : chart.colorAxis || [],\n series = chart.series,\n pointer = chart.pointer,\n legend = chart.legend,\n legendUserOptions = chart.userOptions.legend,\n renderer = chart.renderer,\n isHiddenChart = renderer.isHidden(),\n afterRedraw = [];\n var hasDirtyStacks,\n hasStackedSeries,\n i,\n isDirtyBox = chart.isDirtyBox,\n redrawLegend = chart.isDirtyLegend,\n serie;\n renderer.rootFontSize = renderer.boxWrapper.getStyle('font-size');\n // Handle responsive rules, not only on resize (#6130)\n if (chart.setResponsive) {\n chart.setResponsive(false);\n }\n // Set the global animation. When chart.hasRendered is not true, the\n // redraw call comes from a responsive rule and animation should not\n // occur.\n Chart_setAnimation(chart.hasRendered ? animation : false, chart);\n if (isHiddenChart) {\n chart.temporaryDisplay();\n }\n // Adjust title layout (reflow multiline text)\n chart.layOutTitles(false);\n // Link stacked series\n i = series.length;\n while (i--) {\n serie = series[i];\n if (serie.options.stacking || serie.options.centerInCategory) {\n hasStackedSeries = true;\n if (serie.isDirty) {\n hasDirtyStacks = true;\n break;\n }\n }\n }\n if (hasDirtyStacks) { // Mark others as dirty\n i = series.length;\n while (i--) {\n serie = series[i];\n if (serie.options.stacking) {\n serie.isDirty = true;\n }\n }\n }\n // Handle updated data in the series\n series.forEach(function (serie) {\n if (serie.isDirty) {\n if (serie.options.legendType === 'point') {\n if (typeof serie.updateTotals === 'function') {\n serie.updateTotals();\n }\n redrawLegend = true;\n }\n else if (legendUserOptions &&\n (!!legendUserOptions.labelFormatter ||\n legendUserOptions.labelFormat)) {\n redrawLegend = true; // #2165\n }\n }\n if (serie.isDirtyData) {\n Chart_fireEvent(serie, 'updatedData');\n }\n });\n // Handle added or removed series\n if (redrawLegend && legend && legend.options.enabled) {\n // Draw legend graphics\n legend.render();\n chart.isDirtyLegend = false;\n }\n // Reset stacks\n if (hasStackedSeries) {\n chart.getStacks();\n }\n // Set axes scales\n axes.forEach(function (axis) {\n axis.updateNames();\n axis.setScale();\n });\n chart.getMargins(); // #3098\n // If one axis is dirty, all axes must be redrawn (#792, #2169)\n axes.forEach(function (axis) {\n if (axis.isDirty) {\n isDirtyBox = true;\n }\n });\n // Redraw axes\n axes.forEach(function (axis) {\n // Fire 'afterSetExtremes' only if extremes are set\n var key = axis.min + ',' + axis.max;\n if (axis.extKey !== key) { // #821, #4452\n axis.extKey = key;\n // Prevent a recursive call to chart.redraw() (#1119)\n afterRedraw.push(function () {\n Chart_fireEvent(axis, 'afterSetExtremes', Chart_extend(axis.eventArgs, axis.getExtremes())); // #747, #751\n delete axis.eventArgs;\n });\n }\n if (isDirtyBox || hasStackedSeries) {\n axis.redraw();\n }\n });\n // The plot areas size has changed\n if (isDirtyBox) {\n chart.drawChartBox();\n }\n // Fire an event before redrawing series, used by the boost module to\n // clear previous series renderings.\n Chart_fireEvent(chart, 'predraw');\n // Redraw affected series\n series.forEach(function (serie) {\n if ((isDirtyBox || serie.isDirty) && serie.visible) {\n serie.redraw();\n }\n // Set it here, otherwise we will have unlimited 'updatedData' calls\n // for a hidden series after setData(). Fixes #6012\n serie.isDirtyData = false;\n });\n // Move tooltip or reset\n if (pointer) {\n pointer.reset(true);\n }\n // Redraw if canvas\n renderer.draw();\n // Fire the events\n Chart_fireEvent(chart, 'redraw');\n Chart_fireEvent(chart, 'render');\n if (isHiddenChart) {\n chart.temporaryDisplay(true);\n }\n // Fire callbacks that are put on hold until after the redraw\n afterRedraw.forEach(function (callback) {\n callback.call();\n });\n };\n /**\n * Get an axis, series or point object by `id` as given in the configuration\n * options. Returns `undefined` if no item is found.\n *\n * @sample highcharts/plotoptions/series-id/\n * Get series by id\n *\n * @function Highcharts.Chart#get\n *\n * @param {string} id\n * The id as given in the configuration options.\n *\n * @return {Highcharts.Axis|Highcharts.Series|Highcharts.Point|undefined}\n * The retrieved item.\n */\n Chart.prototype.get = function (id) {\n var series = this.series;\n /**\n * @private\n */\n function itemById(item) {\n return (item.id === id ||\n (item.options && item.options.id === id));\n }\n var ret = \n // Search axes\n Chart_find(this.axes,\n itemById) ||\n // Search series\n Chart_find(this.series,\n itemById);\n // Search points\n for (var i = 0; !ret && i < series.length; i++) {\n ret = Chart_find(series[i].points || [], itemById);\n }\n return ret;\n };\n /**\n * Create the Axis instances based on the config options.\n *\n * @private\n * @function Highcharts.Chart#createAxes\n * @emits Highcharts.Chart#event:afterCreateAxes\n * @emits Highcharts.Chart#event:createAxes\n */\n Chart.prototype.createAxes = function () {\n var options = this.userOptions;\n Chart_fireEvent(this, 'createAxes');\n for (var _i = 0, _a = ['xAxis', 'yAxis']; _i < _a.length; _i++) {\n var coll = _a[_i];\n var arr = options[coll] = Chart_splat(options[coll] || {});\n for (var _b = 0, arr_1 = arr; _b < arr_1.length; _b++) {\n var axisOptions = arr_1[_b];\n // eslint-disable-next-line no-new\n new Axis_Axis(this, axisOptions, coll);\n }\n }\n Chart_fireEvent(this, 'afterCreateAxes');\n };\n /**\n * Returns an array of all currently selected points in the chart. Points\n * can be selected by clicking or programmatically by the\n * {@link Highcharts.Point#select}\n * function.\n *\n * @sample highcharts/plotoptions/series-allowpointselect-line/\n * Get selected points\n * @sample highcharts/members/point-select-lasso/\n * Lasso selection\n * @sample highcharts/chart/events-selection-points/\n * Rectangle selection\n *\n * @function Highcharts.Chart#getSelectedPoints\n *\n * @return {Array<Highcharts.Point>}\n * The currently selected points.\n */\n Chart.prototype.getSelectedPoints = function () {\n return this.series.reduce(function (acc, series) {\n // For one-to-one points inspect series.data in order to retrieve\n // points outside the visible range (#6445). For grouped data,\n // inspect the generated series.points.\n series.getPointsCollection()\n .forEach(function (point) {\n if (Chart_pick(point.selectedStaging, point.selected)) {\n acc.push(point);\n }\n });\n return acc;\n }, []);\n };\n /**\n * Returns an array of all currently selected series in the chart. Series\n * can be selected either programmatically by the\n * {@link Highcharts.Series#select}\n * function or by checking the checkbox next to the legend item if\n * [series.showCheckBox](https://api.highcharts.com/highcharts/plotOptions.series.showCheckbox)\n * is true.\n *\n * @sample highcharts/members/chart-getselectedseries/\n * Get selected series\n *\n * @function Highcharts.Chart#getSelectedSeries\n *\n * @return {Array<Highcharts.Series>}\n * The currently selected series.\n */\n Chart.prototype.getSelectedSeries = function () {\n return this.series.filter(function (s) { return s.selected; });\n };\n /**\n * Set a new title or subtitle for the chart.\n *\n * @sample highcharts/members/chart-settitle/\n * Set title text and styles\n *\n * @function Highcharts.Chart#setTitle\n *\n * @param {Highcharts.TitleOptions} [titleOptions]\n * New title options. The title text itself is set by the\n * `titleOptions.text` property.\n *\n * @param {Highcharts.SubtitleOptions} [subtitleOptions]\n * New subtitle options. The subtitle text itself is set by the\n * `subtitleOptions.text` property.\n *\n * @param {boolean} [redraw]\n * Whether to redraw the chart or wait for a later call to\n * `chart.redraw()`.\n */\n Chart.prototype.setTitle = function (titleOptions, subtitleOptions, redraw) {\n this.applyDescription('title', titleOptions);\n this.applyDescription('subtitle', subtitleOptions);\n // The initial call also adds the caption. On update, chart.update will\n // relay to Chart.setCaption.\n this.applyDescription('caption', void 0);\n this.layOutTitles(redraw);\n };\n /**\n * Apply a title, subtitle or caption for the chart\n *\n * @private\n * @function Highcharts.Chart#applyDescription\n * @param key {string}\n * Either title, subtitle or caption\n * @param {Highcharts.TitleOptions|Highcharts.SubtitleOptions|Highcharts.CaptionOptions|undefined} explicitOptions\n * The options to set, will be merged with default options.\n */\n Chart.prototype.applyDescription = function (key, explicitOptions) {\n var _a;\n var chart = this;\n // Merge default options with explicit options\n var options = this.options[key] = Chart_merge(this.options[key],\n explicitOptions);\n var elem = this[key];\n if (elem && explicitOptions) {\n this[key] = elem = elem.destroy(); // Remove old\n }\n if (options && !elem) {\n elem = this.renderer.text(options.text, 0, 0, options.useHTML)\n .attr({\n align: options.align,\n 'class': 'highcharts-' + key,\n zIndex: options.zIndex || 4\n })\n .css({\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap'\n })\n .add();\n // Update methods, relay to `applyDescription`\n elem.update = function (updateOptions, redraw) {\n chart.applyDescription(key, updateOptions);\n chart.layOutTitles(redraw);\n };\n // Presentational\n if (!this.styledMode) {\n elem.css(Chart_extend(key === 'title' ? {\n // #2944\n fontSize: this.options.isStock ? '1em' : '1.2em'\n } : {}, options.style));\n }\n // Get unwrapped text length and reset\n elem.textPxLength = elem.getBBox().width;\n elem.css({ whiteSpace: (_a = options.style) === null || _a === void 0 ? void 0 : _a.whiteSpace });\n /**\n * The chart title. The title has an `update` method that allows\n * modifying the options directly or indirectly via\n * `chart.update`.\n *\n * @sample highcharts/members/title-update/\n * Updating titles\n *\n * @name Highcharts.Chart#title\n * @type {Highcharts.TitleObject}\n */\n /**\n * The chart subtitle. The subtitle has an `update` method that\n * allows modifying the options directly or indirectly via\n * `chart.update`.\n *\n * @name Highcharts.Chart#subtitle\n * @type {Highcharts.SubtitleObject}\n */\n this[key] = elem;\n }\n };\n /**\n * Internal function to lay out the chart title, subtitle and caption, and\n * cache the full offset height for use in `getMargins`. The result is\n * stored in `this.titleOffset`.\n *\n * @private\n * @function Highcharts.Chart#layOutTitles\n *\n * @param {boolean} [redraw=true]\n * @emits Highcharts.Chart#event:afterLayOutTitles\n */\n Chart.prototype.layOutTitles = function (redraw) {\n var _this = this;\n var _a,\n _b,\n _c,\n _d;\n if (redraw === void 0) { redraw = true; }\n var titleOffset = [0, 0, 0],\n _e = this,\n options = _e.options,\n renderer = _e.renderer,\n spacingBox = _e.spacingBox;\n // Lay out the title, subtitle and caption respectively\n ['title', 'subtitle', 'caption'].forEach(function (key) {\n var _a;\n var desc = _this[key],\n descOptions = _this.options[key],\n alignTo = Chart_merge(spacingBox),\n textPxLength = (desc === null || desc === void 0 ? void 0 : desc.textPxLength) || 0;\n if (desc && descOptions) {\n // Provide a hook for the exporting button to shift the title\n Chart_fireEvent(_this, 'layOutTitle', { alignTo: alignTo, key: key, textPxLength: textPxLength });\n var fontMetrics = renderer.fontMetrics(desc), baseline = fontMetrics.b, lineHeight = fontMetrics.h, verticalAlign = descOptions.verticalAlign || 'top', topAligned = verticalAlign === 'top', \n // Use minScale only for top-aligned titles. It is not\n // likely that we will need scaling for other positions, but\n // if it is requested, we need to adjust the vertical\n // position to the scale.\n minScale = topAligned && descOptions.minScale || 1, offset = key === 'title' ?\n topAligned ? -3 : 0 :\n // Floating subtitle (#6574)\n topAligned ? titleOffset[0] + 2 : 0, uncappedScale = Math.min(alignTo.width / textPxLength, 1), scale = Math.max(minScale, uncappedScale), alignAttr = Chart_merge({\n y: verticalAlign === 'bottom' ?\n baseline :\n offset + baseline\n }, {\n align: key === 'title' ?\n // Title defaults to center for short titles,\n // left for word-wrapped titles\n (uncappedScale < minScale ? 'left' : 'center') :\n // Subtitle defaults to the title.align\n (_a = _this.title) === null || _a === void 0 ? void 0 : _a.alignValue\n }, descOptions), width = descOptions.width || ((uncappedScale > minScale ?\n // One line\n _this.chartWidth :\n // Allow word wrap\n alignTo.width) / scale);\n // No animation when switching alignment\n if (desc.alignValue !== alignAttr.align) {\n desc.placed = false;\n }\n // Set the width and read the height\n var height = Math.round(desc\n .css({ width: \"\" + width + \"px\" })\n // Skip the cache for HTML (#3481, #11666)\n .getBBox(descOptions.useHTML).height);\n alignAttr.height = height;\n // Perform scaling and alignment\n desc\n .align(alignAttr, false, alignTo)\n .attr({\n align: alignAttr.align,\n scaleX: scale,\n scaleY: scale,\n 'transform-origin': \"\" + (alignTo.x +\n textPxLength *\n scale *\n Chart_getAlignFactor(alignAttr.align)) + \" \".concat(lineHeight)\n });\n // Adjust the rendered title offset\n if (!descOptions.floating) {\n var offset_1 = height * (\n // When scaling down the title, preserve the offset as\n // long as it's only one line, but scale down the offset\n // if the title wraps to multiple lines.\n height < lineHeight * 1.2 ? 1 : scale);\n if (verticalAlign === 'top') {\n titleOffset[0] = Math.ceil(titleOffset[0] + offset_1);\n }\n else if (verticalAlign === 'bottom') {\n titleOffset[2] = Math.ceil(titleOffset[2] + offset_1);\n }\n }\n }\n }, this);\n // Handle title.margin and caption.margin\n if (titleOffset[0] &&\n (((_a = options.title) === null || _a === void 0 ? void 0 : _a.verticalAlign) || 'top') === 'top') {\n titleOffset[0] += ((_b = options.title) === null || _b === void 0 ? void 0 : _b.margin) || 0;\n }\n if (titleOffset[2] &&\n ((_c = options.caption) === null || _c === void 0 ? void 0 : _c.verticalAlign) === 'bottom') {\n titleOffset[2] += ((_d = options.caption) === null || _d === void 0 ? void 0 : _d.margin) || 0;\n }\n var requiresDirtyBox = (!this.titleOffset ||\n this.titleOffset.join(',') !== titleOffset.join(','));\n // Used in getMargins\n this.titleOffset = titleOffset;\n Chart_fireEvent(this, 'afterLayOutTitles');\n if (!this.isDirtyBox && requiresDirtyBox) {\n this.isDirtyBox = this.isDirtyLegend = requiresDirtyBox;\n // Redraw if necessary (#2719, #2744)\n if (this.hasRendered && redraw && this.isDirtyBox) {\n this.redraw();\n }\n }\n };\n /**\n * Internal function to get the available size of the container element\n *\n * @private\n * @function Highcharts.Chart#getContainerBox\n */\n Chart.prototype.getContainerBox = function () {\n var _this = this;\n // Temporarily hide support divs from a11y and others, #21888\n var nonContainers = [].map.call(this.renderTo.children,\n function (child) {\n if (child !== _this.container) {\n var display = child.style.display;\n child.style.display = 'none';\n return [child, display];\n }\n }), box = {\n width: Chart_getStyle(this.renderTo, 'width', true) || 0,\n height: (Chart_getStyle(this.renderTo, 'height', true) || 0)\n };\n // Restore the non-containers\n nonContainers.filter(Boolean).forEach(function (_a) {\n var div = _a[0],\n display = _a[1];\n div.style.display = display;\n });\n return box;\n };\n /**\n * Internal function to get the chart width and height according to options\n * and container size. Sets {@link Chart.chartWidth} and\n * {@link Chart.chartHeight}.\n *\n * @private\n * @function Highcharts.Chart#getChartSize\n */\n Chart.prototype.getChartSize = function () {\n var _a;\n var chart = this,\n optionsChart = chart.options.chart,\n widthOption = optionsChart.width,\n heightOption = optionsChart.height,\n containerBox = chart.getContainerBox(),\n enableDefaultHeight = containerBox.height <= 1 ||\n ( // #21510, prevent infinite reflow\n !((_a = chart.renderTo.parentElement) === null || _a === void 0 ? void 0 : _a.style.height) &&\n chart.renderTo.style.height === '100%');\n /**\n * The current pixel width of the chart.\n *\n * @name Highcharts.Chart#chartWidth\n * @type {number}\n */\n chart.chartWidth = Math.max(// #1393\n 0, widthOption || containerBox.width || 600 // #1460\n );\n /**\n * The current pixel height of the chart.\n *\n * @name Highcharts.Chart#chartHeight\n * @type {number}\n */\n chart.chartHeight = Math.max(0, Chart_relativeLength(heightOption, chart.chartWidth) ||\n (enableDefaultHeight ? 400 : containerBox.height));\n chart.containerBox = containerBox;\n };\n /**\n * If the renderTo element has no offsetWidth, most likely one or more of\n * its parents are hidden. Loop up the DOM tree to temporarily display the\n * parents, then save the original display properties, and when the true\n * size is retrieved, reset them. Used on first render and on redraws.\n *\n * @private\n * @function Highcharts.Chart#temporaryDisplay\n *\n * @param {boolean} [revert]\n * Revert to the saved original styles.\n */\n Chart.prototype.temporaryDisplay = function (revert) {\n var node = this.renderTo,\n tempStyle;\n if (!revert) {\n while (node && node.style) {\n // When rendering to a detached node, it needs to be temporarily\n // attached in order to read styling and bounding boxes (#5783,\n // #7024).\n if (!Chart_doc.body.contains(node) && !node.parentNode) {\n node.hcOrigDetached = true;\n Chart_doc.body.appendChild(node);\n }\n if (Chart_getStyle(node, 'display', false) === 'none' ||\n node.hcOricDetached) {\n node.hcOrigStyle = {\n display: node.style.display,\n height: node.style.height,\n overflow: node.style.overflow\n };\n tempStyle = {\n display: 'block',\n overflow: 'hidden'\n };\n if (node !== this.renderTo) {\n tempStyle.height = 0;\n }\n Chart_css(node, tempStyle);\n // If it still doesn't have an offset width after setting\n // display to block, it probably has an !important priority\n // #2631, 6803\n if (!node.offsetWidth) {\n node.style.setProperty('display', 'block', 'important');\n }\n }\n node = node.parentNode;\n if (node === Chart_doc.body) {\n break;\n }\n }\n }\n else {\n while (node && node.style) {\n if (node.hcOrigStyle) {\n Chart_css(node, node.hcOrigStyle);\n delete node.hcOrigStyle;\n }\n if (node.hcOrigDetached) {\n Chart_doc.body.removeChild(node);\n node.hcOrigDetached = false;\n }\n node = node.parentNode;\n }\n }\n };\n /**\n * Set the {@link Chart.container|chart container's} class name, in\n * addition to `highcharts-container`.\n *\n * @function Highcharts.Chart#setClassName\n *\n * @param {string} [className]\n * The additional class name.\n */\n Chart.prototype.setClassName = function (className) {\n this.container.className = 'highcharts-container ' + (className || '');\n };\n /**\n * Get the containing element, determine the size and create the inner\n * container div to hold the chart.\n *\n * @private\n * @function Highcharts.Chart#afterGetContainer\n * @emits Highcharts.Chart#event:afterGetContainer\n */\n Chart.prototype.getContainer = function () {\n var _a;\n var chart = this,\n options = chart.options,\n optionsChart = options.chart,\n indexAttrName = 'data-highcharts-chart',\n containerId = Chart_uniqueKey(),\n renderTo = chart.renderTo;\n var containerStyle;\n // If the container already holds a chart, destroy it. The check for\n // hasRendered is there because web pages that are saved to disk from\n // the browser, will preserve the data-highcharts-chart attribute and\n // the SVG contents, but not an interactive chart. So in this case,\n // charts[oldChartIndex] will point to the wrong chart if any (#2609).\n var oldChartIndex = Chart_pInt(Chart_attr(renderTo,\n indexAttrName));\n if (Chart_isNumber(oldChartIndex) &&\n Chart_charts[oldChartIndex] &&\n Chart_charts[oldChartIndex].hasRendered) {\n Chart_charts[oldChartIndex].destroy();\n }\n // Make a reference to the chart from the div\n Chart_attr(renderTo, indexAttrName, chart.index);\n // Remove previous chart\n renderTo.innerHTML = HTML_AST.emptyHTML;\n // If the container doesn't have an offsetWidth, it has or is a child of\n // a node that has display:none. We need to temporarily move it out to a\n // visible state to determine the size, else the legend and tooltips\n // won't render properly. The skipClone option is used in sparklines as\n // a micro optimization, saving about 1-2 ms each chart.\n if (!optionsChart.skipClone && !renderTo.offsetWidth) {\n chart.temporaryDisplay();\n }\n // Get the width and height\n chart.getChartSize();\n var chartHeight = chart.chartHeight;\n var chartWidth = chart.chartWidth;\n // Allow table cells and flex-boxes to shrink without the chart blocking\n // them out (#6427)\n Chart_css(renderTo, { overflow: 'hidden' });\n // Create the inner container\n if (!chart.styledMode) {\n containerStyle = Chart_extend({\n position: 'relative',\n // Needed for context menu (avoidscrollbars) and content\n // overflow in IE\n overflow: 'hidden',\n width: chartWidth + 'px',\n height: chartHeight + 'px',\n textAlign: 'left',\n lineHeight: 'normal', // #427\n zIndex: 0, // #1072\n '-webkit-tap-highlight-color': 'rgba(0,0,0,0)',\n userSelect: 'none', // #13503\n 'touch-action': 'manipulation',\n outline: 'none',\n padding: '0px'\n }, optionsChart.style || {});\n }\n /**\n * The containing HTML element of the chart. The container is\n * dynamically inserted into the element given as the `renderTo`\n * parameter in the {@link Highcharts#chart} constructor.\n *\n * @name Highcharts.Chart#container\n * @type {Highcharts.HTMLDOMElement}\n */\n var container = Chart_createElement('div', {\n id: containerId\n },\n containerStyle,\n renderTo);\n chart.container = container;\n // Adjust width if setting height affected it (#20334)\n chart.getChartSize();\n if (chartWidth !== chart.chartWidth) {\n chartWidth = chart.chartWidth;\n if (!chart.styledMode) {\n Chart_css(container, {\n width: Chart_pick((_a = optionsChart.style) === null || _a === void 0 ? void 0 : _a.width, chartWidth + 'px')\n });\n }\n }\n chart.containerBox = chart.getContainerBox();\n // Cache the cursor (#1650)\n chart._cursor = container.style.cursor;\n // Initialize the renderer\n var Renderer = optionsChart.renderer || !Chart_svg ?\n Renderer_RendererRegistry.getRendererType(optionsChart.renderer) :\n SVG_SVGRenderer;\n /**\n * The renderer instance of the chart. Each chart instance has only one\n * associated renderer.\n *\n * @name Highcharts.Chart#renderer\n * @type {Highcharts.SVGRenderer}\n */\n chart.renderer = new Renderer(container, chartWidth, chartHeight, void 0, optionsChart.forExport, options.exporting && options.exporting.allowHTML, chart.styledMode);\n // Set the initial animation from the options\n Chart_setAnimation(void 0, chart);\n chart.setClassName(optionsChart.className);\n if (!chart.styledMode) {\n chart.renderer.setStyle(optionsChart.style);\n }\n else {\n // Initialize definitions\n for (var key in options.defs) { // eslint-disable-line guard-for-in\n this.renderer.definition(options.defs[key]);\n }\n }\n // Add a reference to the charts index\n chart.renderer.chartIndex = chart.index;\n Chart_fireEvent(this, 'afterGetContainer');\n };\n /**\n * Calculate margins by rendering axis labels in a preliminary position.\n * Title, subtitle and legend have already been rendered at this stage, but\n * will be moved into their final positions.\n *\n * @private\n * @function Highcharts.Chart#getMargins\n * @emits Highcharts.Chart#event:getMargins\n */\n Chart.prototype.getMargins = function (skipAxes) {\n var _a = this,\n spacing = _a.spacing,\n margin = _a.margin,\n titleOffset = _a.titleOffset;\n this.resetMargins();\n // Adjust for title and subtitle\n if (titleOffset[0] && !Chart_defined(margin[0])) {\n this.plotTop = Math.max(this.plotTop, titleOffset[0] + spacing[0]);\n }\n if (titleOffset[2] && !Chart_defined(margin[2])) {\n this.marginBottom = Math.max(this.marginBottom, titleOffset[2] + spacing[2]);\n }\n // Adjust for legend\n if (this.legend && this.legend.display) {\n this.legend.adjustMargins(margin, spacing);\n }\n Chart_fireEvent(this, 'getMargins');\n if (!skipAxes) {\n this.getAxisMargins();\n }\n };\n /**\n * @private\n * @function Highcharts.Chart#getAxisMargins\n */\n Chart.prototype.getAxisMargins = function () {\n var chart = this, \n // [top, right, bottom, left]\n axisOffset = chart.axisOffset = [0, 0, 0, 0],\n colorAxis = chart.colorAxis,\n margin = chart.margin,\n getOffset = function (axes) {\n axes.forEach(function (axis) {\n if (axis.visible) {\n axis.getOffset();\n }\n });\n };\n // Pre-render axes to get labels offset width\n if (chart.hasCartesianSeries) {\n getOffset(chart.axes);\n }\n else if (colorAxis && colorAxis.length) {\n getOffset(colorAxis);\n }\n // Add the axis offsets\n Chart_marginNames.forEach(function (m, side) {\n if (!Chart_defined(margin[side])) {\n chart[m] += axisOffset[side];\n }\n });\n chart.setChartSize();\n };\n /**\n * Return the current options of the chart, but only those that differ from\n * default options. Items that can be either an object or an array of\n * objects, like `series`, `xAxis` and `yAxis`, are always returned as\n * array.\n *\n * @sample highcharts/members/chart-getoptions\n *\n * @function Highcharts.Chart#getOptions\n *\n * @since 11.1.0\n */\n Chart.prototype.getOptions = function () {\n return Chart_diffObjects(this.userOptions, Chart_defaultOptions);\n };\n /**\n * Reflows the chart to its container. By default, the Resize Observer is\n * attached to the chart's div which allows to reflows the chart\n * automatically to its container, as per the\n * [chart.reflow](https://api.highcharts.com/highcharts/chart.reflow)\n * option.\n *\n * @sample highcharts/chart/events-container/\n * Pop up and reflow\n *\n * @function Highcharts.Chart#reflow\n *\n * @param {global.Event} [e]\n * Event arguments. Used primarily when the function is called\n * internally as a response to window resize.\n */\n Chart.prototype.reflow = function (e) {\n var _a;\n var chart = this,\n oldBox = chart.containerBox,\n containerBox = chart.getContainerBox();\n (_a = chart.pointer) === null || _a === void 0 ? true : delete _a.chartPosition;\n // Width and height checks for display:none. Target is doc in Opera\n // and win in Firefox, Chrome and IE9.\n if (!chart.isPrinting &&\n !chart.isResizing &&\n oldBox &&\n // When fired by resize observer inside hidden container\n containerBox.width) {\n if (containerBox.width !== oldBox.width ||\n containerBox.height !== oldBox.height) {\n Core_Utilities.clearTimeout(chart.reflowTimeout);\n // When called from window.resize, e is set, else it's called\n // directly (#2224)\n chart.reflowTimeout = Chart_syncTimeout(function () {\n // Set size, it may have been destroyed in the meantime\n // (#1257)\n if (chart.container) {\n chart.setSize(void 0, void 0, false);\n }\n }, e ? 100 : 0);\n }\n chart.containerBox = containerBox;\n }\n };\n /**\n * Toggle the event handlers necessary for auto resizing, depending on the\n * `chart.reflow` option.\n *\n * @private\n * @function Highcharts.Chart#setReflow\n */\n Chart.prototype.setReflow = function () {\n var chart = this;\n var runReflow = function (e) {\n var _a;\n if (((_a = chart.options) === null || _a === void 0 ? void 0 : _a.chart.reflow) && chart.hasLoaded) {\n chart.reflow(e);\n }\n };\n if (typeof ResizeObserver === 'function') {\n (new ResizeObserver(runReflow)).observe(chart.renderTo);\n // Fallback for more legacy browser versions.\n }\n else {\n var unbind = Chart_addEvent(Chart_win, 'resize',\n runReflow);\n Chart_addEvent(this, 'destroy', unbind);\n }\n };\n /**\n * Resize the chart to a given width and height. In order to set the width\n * only, the height argument may be skipped. To set the height only, pass\n * `undefined` for the width.\n *\n * @sample highcharts/members/chart-setsize-button/\n * Test resizing from buttons\n * @sample highcharts/members/chart-setsize-jquery-resizable/\n * Add a jQuery UI resizable\n * @sample stock/members/chart-setsize/\n * Highcharts Stock with UI resizable\n *\n * @function Highcharts.Chart#setSize\n *\n * @param {number|null} [width]\n * The new pixel width of the chart. Since v4.2.6, the argument can\n * be `undefined` in order to preserve the current value (when\n * setting height only), or `null` to adapt to the width of the\n * containing element.\n *\n * @param {number|null} [height]\n * The new pixel height of the chart. Since v4.2.6, the argument can\n * be `undefined` in order to preserve the current value, or `null`\n * in order to adapt to the height of the containing element.\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n * Whether and how to apply animation. When `undefined`, it applies\n * the animation that is set in the `chart.animation` option.\n *\n *\n * @emits Highcharts.Chart#event:endResize\n * @emits Highcharts.Chart#event:resize\n */\n Chart.prototype.setSize = function (width, height, animation) {\n var chart = this,\n renderer = chart.renderer;\n // Handle the isResizing counter\n chart.isResizing += 1;\n // Set the animation for the current process\n Chart_setAnimation(animation, chart);\n var globalAnimation = renderer.globalAnimation;\n chart.oldChartHeight = chart.chartHeight;\n chart.oldChartWidth = chart.chartWidth;\n if (typeof width !== 'undefined') {\n chart.options.chart.width = width;\n }\n if (typeof height !== 'undefined') {\n chart.options.chart.height = height;\n }\n chart.getChartSize();\n var chartWidth = chart.chartWidth,\n chartHeight = chart.chartHeight,\n _a = chart.scrollablePixelsX,\n scrollablePixelsX = _a === void 0 ? 0 : _a,\n _b = chart.scrollablePixelsY,\n scrollablePixelsY = _b === void 0 ? 0 : _b;\n // Avoid expensive redrawing if the computed size didn't change\n if (chart.isDirtyBox ||\n chartWidth !== chart.oldChartWidth ||\n chartHeight !== chart.oldChartHeight) {\n // Resize the container with the global animation applied if enabled\n // (#2503)\n if (!chart.styledMode) {\n (globalAnimation ? Chart_animate : Chart_css)(chart.container, {\n width: \"\" + (chartWidth + scrollablePixelsX) + \"px\",\n height: \"\" + (chartHeight + scrollablePixelsY) + \"px\"\n }, globalAnimation);\n }\n chart.setChartSize(true);\n renderer.setSize(chartWidth, chartHeight, globalAnimation);\n // Handle axes\n chart.axes.forEach(function (axis) {\n axis.isDirty = true;\n axis.setScale();\n });\n chart.isDirtyLegend = true; // Force legend redraw\n chart.isDirtyBox = true; // Force redraw of plot and chart border\n chart.layOutTitles(); // #2857\n chart.getMargins();\n chart.redraw(globalAnimation);\n chart.oldChartHeight = void 0;\n Chart_fireEvent(chart, 'resize');\n // Fire endResize and set isResizing back. If animation is disabled,\n // fire without delay, but in a new thread to avoid triggering the\n // resize observer (#19027).\n setTimeout(function () {\n if (chart) {\n Chart_fireEvent(chart, 'endResize');\n }\n }, Chart_animObject(globalAnimation).duration);\n }\n // Handle resizing counter even if we've re-rendered or not (#20548).\n chart.isResizing -= 1;\n };\n /**\n * Set the public chart properties. This is done before and after the\n * pre-render to determine margin sizes.\n *\n * @private\n * @function Highcharts.Chart#setChartSize\n * @emits Highcharts.Chart#event:afterSetChartSize\n */\n Chart.prototype.setChartSize = function (skipAxes) {\n var chart = this,\n chartHeight = chart.chartHeight,\n chartWidth = chart.chartWidth,\n inverted = chart.inverted,\n spacing = chart.spacing,\n renderer = chart.renderer,\n clipOffset = chart.clipOffset,\n clipRoundFunc = Math[inverted ? 'floor' : 'round'];\n var plotLeft,\n plotTop,\n plotWidth,\n plotHeight;\n /**\n * The current left position of the plot area in pixels.\n *\n * @name Highcharts.Chart#plotLeft\n * @type {number}\n */\n chart.plotLeft = plotLeft = Math.round(chart.plotLeft);\n /**\n * The current top position of the plot area in pixels.\n *\n * @name Highcharts.Chart#plotTop\n * @type {number}\n */\n chart.plotTop = plotTop = Math.round(chart.plotTop);\n /**\n * The current width of the plot area in pixels.\n *\n * @name Highcharts.Chart#plotWidth\n * @type {number}\n */\n chart.plotWidth = plotWidth = Math.max(0, Math.round(chartWidth - plotLeft - chart.marginRight));\n /**\n * The current height of the plot area in pixels.\n *\n * @name Highcharts.Chart#plotHeight\n * @type {number}\n */\n chart.plotHeight = plotHeight = Math.max(0, Math.round(chartHeight - plotTop - chart.marginBottom));\n chart.plotSizeX = inverted ? plotHeight : plotWidth;\n chart.plotSizeY = inverted ? plotWidth : plotHeight;\n // Set boxes used for alignment\n chart.spacingBox = renderer.spacingBox = {\n x: spacing[3],\n y: spacing[0],\n width: chartWidth - spacing[3] - spacing[1],\n height: chartHeight - spacing[0] - spacing[2]\n };\n chart.plotBox = renderer.plotBox = {\n x: plotLeft,\n y: plotTop,\n width: plotWidth,\n height: plotHeight\n };\n // Compute the clipping box\n if (clipOffset) {\n chart.clipBox = {\n x: clipRoundFunc(clipOffset[3]),\n y: clipRoundFunc(clipOffset[0]),\n width: clipRoundFunc(chart.plotSizeX - clipOffset[1] - clipOffset[3]),\n height: clipRoundFunc(chart.plotSizeY - clipOffset[0] - clipOffset[2])\n };\n }\n if (!skipAxes) {\n chart.axes.forEach(function (axis) {\n axis.setAxisSize();\n axis.setAxisTranslation();\n });\n renderer.alignElements();\n }\n Chart_fireEvent(chart, 'afterSetChartSize', { skipAxes: skipAxes });\n };\n /**\n * Initial margins before auto size margins are applied.\n *\n * @private\n * @function Highcharts.Chart#resetMargins\n */\n Chart.prototype.resetMargins = function () {\n Chart_fireEvent(this, 'resetMargins');\n var chart = this,\n chartOptions = chart.options.chart,\n plotBorderWidth = chartOptions.plotBorderWidth || 0,\n halfWidth = plotBorderWidth / 2;\n // Create margin and spacing array\n ['margin', 'spacing'].forEach(function splashArrays(target) {\n var value = chartOptions[target],\n values = Chart_isObject(value) ? value : [value,\n value,\n value,\n value];\n [\n 'Top',\n 'Right',\n 'Bottom',\n 'Left'\n ].forEach(function (sideName, side) {\n chart[target][side] = Chart_pick(chartOptions[target + sideName], values[side]);\n });\n });\n // Set margin names like chart.plotTop, chart.plotLeft,\n // chart.marginRight, chart.marginBottom.\n Chart_marginNames.forEach(function (m, side) {\n chart[m] = Chart_pick(chart.margin[side], chart.spacing[side]);\n });\n chart.axisOffset = [0, 0, 0, 0]; // Top, right, bottom, left\n chart.clipOffset = [\n halfWidth,\n halfWidth,\n halfWidth,\n halfWidth\n ];\n chart.plotBorderWidth = plotBorderWidth;\n };\n /**\n * Internal function to draw or redraw the borders and backgrounds for chart\n * and plot area.\n *\n * @private\n * @function Highcharts.Chart#drawChartBox\n * @emits Highcharts.Chart#event:afterDrawChartBox\n */\n Chart.prototype.drawChartBox = function () {\n var chart = this,\n optionsChart = chart.options.chart,\n renderer = chart.renderer,\n chartWidth = chart.chartWidth,\n chartHeight = chart.chartHeight,\n styledMode = chart.styledMode,\n plotBGImage = chart.plotBGImage,\n chartBackgroundColor = optionsChart.backgroundColor,\n plotBackgroundColor = optionsChart.plotBackgroundColor,\n plotBackgroundImage = optionsChart.plotBackgroundImage,\n plotLeft = chart.plotLeft,\n plotTop = chart.plotTop,\n plotWidth = chart.plotWidth,\n plotHeight = chart.plotHeight,\n plotBox = chart.plotBox,\n clipRect = chart.clipRect,\n clipBox = chart.clipBox;\n var chartBackground = chart.chartBackground,\n plotBackground = chart.plotBackground,\n plotBorder = chart.plotBorder,\n chartBorderWidth,\n mgn,\n bgAttr,\n verb = 'animate';\n // Chart area\n if (!chartBackground) {\n chart.chartBackground = chartBackground = renderer.rect()\n .addClass('highcharts-background')\n .add();\n verb = 'attr';\n }\n if (!styledMode) {\n // Presentational\n chartBorderWidth = optionsChart.borderWidth || 0;\n mgn = chartBorderWidth + (optionsChart.shadow ? 8 : 0);\n bgAttr = {\n fill: chartBackgroundColor || 'none'\n };\n if (chartBorderWidth || chartBackground['stroke-width']) { // #980\n bgAttr.stroke = optionsChart.borderColor;\n bgAttr['stroke-width'] = chartBorderWidth;\n }\n chartBackground\n .attr(bgAttr)\n .shadow(optionsChart.shadow);\n }\n else {\n chartBorderWidth = mgn = chartBackground.strokeWidth();\n }\n chartBackground[verb]({\n x: mgn / 2,\n y: mgn / 2,\n width: chartWidth - mgn - chartBorderWidth % 2,\n height: chartHeight - mgn - chartBorderWidth % 2,\n r: optionsChart.borderRadius\n });\n // Plot background\n verb = 'animate';\n if (!plotBackground) {\n verb = 'attr';\n chart.plotBackground = plotBackground = renderer.rect()\n .addClass('highcharts-plot-background')\n .add();\n }\n plotBackground[verb](plotBox);\n if (!styledMode) {\n // Presentational attributes for the background\n plotBackground\n .attr({\n fill: plotBackgroundColor || 'none'\n })\n .shadow(optionsChart.plotShadow);\n // Create the background image\n if (plotBackgroundImage) {\n if (!plotBGImage) {\n chart.plotBGImage = renderer.image(plotBackgroundImage, plotLeft, plotTop, plotWidth, plotHeight).add();\n }\n else {\n if (plotBackgroundImage !== plotBGImage.attr('href')) {\n plotBGImage.attr('href', plotBackgroundImage);\n }\n plotBGImage.animate(plotBox);\n }\n }\n }\n // Plot clip\n if (!clipRect) {\n chart.clipRect = renderer.clipRect(clipBox);\n }\n else {\n clipRect.animate({\n width: clipBox.width,\n height: clipBox.height\n });\n }\n // Plot area border\n verb = 'animate';\n if (!plotBorder) {\n verb = 'attr';\n chart.plotBorder = plotBorder = renderer.rect()\n .addClass('highcharts-plot-border')\n .attr({\n zIndex: 1 // Above the grid\n })\n .add();\n }\n if (!styledMode) {\n // Presentational\n plotBorder.attr({\n stroke: optionsChart.plotBorderColor,\n 'stroke-width': optionsChart.plotBorderWidth || 0,\n fill: 'none'\n });\n }\n plotBorder[verb](plotBorder.crisp({\n x: plotLeft,\n y: plotTop,\n width: plotWidth,\n height: plotHeight\n }, -plotBorder.strokeWidth())); // #3282 plotBorder should be negative;\n // reset\n chart.isDirtyBox = false;\n Chart_fireEvent(this, 'afterDrawChartBox');\n };\n /**\n * Detect whether a certain chart property is needed based on inspecting its\n * options and series. This mainly applies to the chart.inverted property,\n * and in extensions to the chart.angular and chart.polar properties.\n *\n * @private\n * @function Highcharts.Chart#propFromSeries\n */\n Chart.prototype.propFromSeries = function () {\n var chart = this,\n optionsChart = chart.options.chart,\n seriesOptions = chart.options.series;\n var i,\n klass,\n value;\n /**\n * The flag is set to `true` if a series of the chart is inverted.\n *\n * @name Highcharts.Chart#inverted\n * @type {boolean|undefined}\n */\n ['inverted', 'angular', 'polar'].forEach(function (key) {\n // The default series type's class\n klass = Chart_seriesTypes[optionsChart.type];\n // Get the value from available chart-wide properties\n value =\n // It is set in the options:\n optionsChart[key] ||\n // The default series class:\n (klass && klass.prototype[key]);\n // Requires it\n // 4. Check if any the chart's series require it\n i = seriesOptions && seriesOptions.length;\n while (!value && i--) {\n klass = Chart_seriesTypes[seriesOptions[i].type];\n if (klass && klass.prototype[key]) {\n value = true;\n }\n }\n // Set the chart property\n chart[key] = value;\n });\n };\n /**\n * Internal function to link two or more series together, based on the\n * `linkedTo` option. This is done from `Chart.render`, and after\n * `Chart.addSeries` and `Series.remove`.\n *\n * @private\n * @function Highcharts.Chart#linkSeries\n * @emits Highcharts.Chart#event:afterLinkSeries\n */\n Chart.prototype.linkSeries = function (isUpdating) {\n var chart = this,\n chartSeries = chart.series;\n // Reset links\n chartSeries.forEach(function (series) {\n series.linkedSeries.length = 0;\n });\n // Apply new links\n chartSeries.forEach(function (series) {\n var linkedTo = series.options.linkedTo;\n if (Chart_isString(linkedTo)) {\n var linkedParent = void 0;\n if (linkedTo === ':previous') {\n linkedParent = chart.series[series.index - 1];\n }\n else {\n linkedParent = chart.get(linkedTo);\n }\n // #3341 avoid mutual linking\n if (linkedParent &&\n linkedParent.linkedParent !== series) {\n linkedParent.linkedSeries.push(series);\n /**\n * The parent series of the current series, if the current\n * series has a [linkedTo](https://api.highcharts.com/highcharts/series.line.linkedTo)\n * setting.\n *\n * @name Highcharts.Series#linkedParent\n * @type {Highcharts.Series}\n * @readonly\n */\n series.linkedParent = linkedParent;\n if (linkedParent.enabledDataSorting) {\n series.setDataSortingOptions();\n }\n series.visible = Chart_pick(series.options.visible, linkedParent.options.visible, series.visible); // #3879\n }\n }\n });\n Chart_fireEvent(this, 'afterLinkSeries', { isUpdating: isUpdating });\n };\n /**\n * Render series for the chart.\n *\n * @private\n * @function Highcharts.Chart#renderSeries\n */\n Chart.prototype.renderSeries = function () {\n this.series.forEach(function (serie) {\n serie.translate();\n serie.render();\n });\n };\n /**\n * Render all graphics for the chart. Runs internally on initialization.\n *\n * @private\n * @function Highcharts.Chart#render\n */\n Chart.prototype.render = function () {\n var _a;\n var chart = this,\n axes = chart.axes,\n colorAxis = chart.colorAxis,\n renderer = chart.renderer,\n axisLayoutRuns = chart.options.chart.axisLayoutRuns || 2,\n renderAxes = function (axes) {\n axes.forEach(function (axis) {\n if (axis.visible) {\n axis.render();\n }\n });\n };\n var expectedSpace = 0, // Correction for X axis labels\n // If the plot area size has changed significantly, calculate tick\n // positions again\n redoHorizontal = true,\n redoVertical,\n run = 0;\n // Title\n chart.setTitle();\n // Fire an event before the margins are computed. This is where the\n // legend is assigned.\n Chart_fireEvent(chart, 'beforeMargins');\n // Get stacks\n (_a = chart.getStacks) === null || _a === void 0 ? void 0 : _a.call(chart);\n // Get chart margins\n chart.getMargins(true);\n chart.setChartSize();\n for (var _i = 0, axes_1 = axes; _i < axes_1.length; _i++) {\n var axis = axes_1[_i];\n var options = axis.options,\n labels = options.labels;\n if (chart.hasCartesianSeries && // #20948\n axis.horiz &&\n axis.visible &&\n labels.enabled &&\n axis.series.length &&\n axis.coll !== 'colorAxis' &&\n !chart.polar) {\n expectedSpace = options.tickLength;\n axis.createGroups();\n // Calculate expected space based on dummy tick\n var mockTick = new Axis_Tick(axis, 0, '', true), label = mockTick.createLabel('x', labels);\n mockTick.destroy();\n if (label &&\n Chart_pick(labels.reserveSpace, !Chart_isNumber(options.crossing))) {\n expectedSpace = label.getBBox().height +\n labels.distance +\n Math.max(options.offset || 0, 0);\n }\n if (expectedSpace) {\n label === null || label === void 0 ? void 0 : label.destroy();\n break;\n }\n }\n }\n // Use Math.max to prevent negative plotHeight\n chart.plotHeight = Math.max(chart.plotHeight - expectedSpace, 0);\n while ((redoHorizontal || redoVertical || axisLayoutRuns > 1) &&\n run < axisLayoutRuns // #19794\n ) {\n var tempWidth = chart.plotWidth,\n tempHeight = chart.plotHeight;\n for (var _b = 0, axes_2 = axes; _b < axes_2.length; _b++) {\n var axis = axes_2[_b];\n if (run === 0) {\n // Get margins by pre-rendering axes\n axis.setScale();\n }\n else if ((axis.horiz && redoHorizontal) ||\n (!axis.horiz && redoVertical)) {\n // Update to reflect the new margins\n axis.setTickInterval(true);\n }\n }\n if (run === 0) {\n chart.getAxisMargins();\n }\n else {\n // Check again for new, rotated or moved labels\n chart.getMargins();\n }\n redoHorizontal = (tempWidth / chart.plotWidth) > (run ? 1 : 1.1);\n redoVertical = (tempHeight / chart.plotHeight) > (run ? 1 : 1.05);\n run++;\n }\n // Draw the borders and backgrounds\n chart.drawChartBox();\n // Axes\n if (chart.hasCartesianSeries) {\n renderAxes(axes);\n }\n else if (colorAxis && colorAxis.length) {\n renderAxes(colorAxis);\n }\n // The series\n if (!chart.seriesGroup) {\n chart.seriesGroup = renderer.g('series-group')\n .attr({ zIndex: 3 })\n .shadow(chart.options.chart.seriesGroupShadow)\n .add();\n }\n chart.renderSeries();\n // Credits\n chart.addCredits();\n // Handle responsiveness\n if (chart.setResponsive) {\n chart.setResponsive();\n }\n // Set flag\n chart.hasRendered = true;\n };\n /**\n * Set a new credits label for the chart.\n *\n * @sample highcharts/credits/credits-update/\n * Add and update credits\n *\n * @function Highcharts.Chart#addCredits\n *\n * @param {Highcharts.CreditsOptions} [credits]\n * A configuration object for the new credits.\n */\n Chart.prototype.addCredits = function (credits) {\n var chart = this,\n creds = Chart_merge(true,\n this.options.credits,\n credits);\n if (creds.enabled && !this.credits) {\n /**\n * The chart's credits label. The label has an `update` method that\n * allows setting new options as per the\n * [credits options set](https://api.highcharts.com/highcharts/credits).\n *\n * @name Highcharts.Chart#credits\n * @type {Highcharts.SVGElement}\n */\n this.credits = this.renderer.text(creds.text + (this.mapCredits || ''), 0, 0)\n .addClass('highcharts-credits')\n .on('click', function () {\n if (creds.href) {\n Chart_win.location.href = creds.href;\n }\n })\n .attr({\n align: creds.position.align,\n zIndex: 8\n });\n if (!chart.styledMode) {\n this.credits.css(creds.style);\n }\n this.credits\n .add()\n .align(creds.position);\n // Dynamically update\n this.credits.update = function (options) {\n chart.credits = chart.credits.destroy();\n chart.addCredits(options);\n };\n }\n };\n /**\n * Remove the chart and purge memory. This method is called internally\n * before adding a second chart into the same container, as well as on\n * window unload to prevent leaks.\n *\n * @sample highcharts/members/chart-destroy/\n * Destroy the chart from a button\n * @sample stock/members/chart-destroy/\n * Destroy with Highcharts Stock\n *\n * @function Highcharts.Chart#destroy\n *\n * @emits Highcharts.Chart#event:destroy\n */\n Chart.prototype.destroy = function () {\n var chart = this,\n axes = chart.axes,\n series = chart.series,\n container = chart.container,\n parentNode = container && container.parentNode;\n var i;\n // Fire the chart.destroy event\n Chart_fireEvent(chart, 'destroy');\n // Delete the chart from charts lookup array\n if (chart.renderer.forExport) {\n Chart_erase(Chart_charts, chart); // #6569\n }\n else {\n Chart_charts[chart.index] = void 0;\n }\n Core_Globals.chartCount--;\n chart.renderTo.removeAttribute('data-highcharts-chart');\n // Remove events\n Chart_removeEvent(chart);\n // ==== Destroy collections:\n // Destroy axes\n i = axes.length;\n while (i--) {\n axes[i] = axes[i].destroy();\n }\n // Destroy scroller & scroller series before destroying base series\n if (this.scroller && this.scroller.destroy) {\n this.scroller.destroy();\n }\n // Destroy each series\n i = series.length;\n while (i--) {\n series[i] = series[i].destroy();\n }\n // ==== Destroy chart properties:\n [\n 'title', 'subtitle', 'chartBackground', 'plotBackground',\n 'plotBGImage', 'plotBorder', 'seriesGroup', 'clipRect', 'credits',\n 'pointer', 'rangeSelector', 'legend', 'resetZoomButton', 'tooltip',\n 'renderer'\n ].forEach(function (name) {\n var prop = chart[name];\n if (prop && prop.destroy) {\n chart[name] = prop.destroy();\n }\n });\n // Remove container and all SVG, check container as it can break in IE\n // when destroyed before finished loading\n if (container) {\n container.innerHTML = HTML_AST.emptyHTML;\n Chart_removeEvent(container);\n if (parentNode) {\n Chart_discardElement(container);\n }\n }\n // Clean it all up\n Chart_objectEach(chart, function (val, key) {\n delete chart[key];\n });\n };\n /**\n * Prepare for first rendering after all data are loaded.\n *\n * @private\n * @function Highcharts.Chart#firstRender\n * @emits Highcharts.Chart#event:beforeRender\n */\n Chart.prototype.firstRender = function () {\n var _a;\n var chart = this,\n options = chart.options;\n // Create the container\n chart.getContainer();\n chart.resetMargins();\n chart.setChartSize();\n // Set the common chart properties (mainly invert) from the given series\n chart.propFromSeries();\n // Get axes\n chart.createAxes();\n // Initialize the series\n var series = Chart_isArray(options.series) ? options.series : [];\n options.series = []; // Avoid mutation\n series.forEach(\n // #9680\n function (serieOptions) {\n chart.initSeries(serieOptions);\n });\n chart.linkSeries();\n chart.setSortedData();\n // Run an event after axes and series are initialized, but before\n // render. At this stage, the series data is indexed and cached in the\n // xData and yData arrays, so we can access those before rendering. Used\n // in Highcharts Stock.\n Chart_fireEvent(chart, 'beforeRender');\n chart.render();\n (_a = chart.pointer) === null || _a === void 0 ? void 0 : _a.getChartPosition(); // #14973\n // Fire the load event if there are no external images\n if (!chart.renderer.imgCount && !chart.hasLoaded) {\n chart.onload();\n }\n // If the chart was rendered outside the top container, put it back in\n // (#3679)\n chart.temporaryDisplay(true);\n };\n /**\n * Internal function that runs on chart load, async if any images are loaded\n * in the chart. Runs the callbacks and triggers the `load` and `render`\n * events.\n *\n * @private\n * @function Highcharts.Chart#onload\n * @emits Highcharts.Chart#event:load\n * @emits Highcharts.Chart#event:render\n */\n Chart.prototype.onload = function () {\n // Run callbacks, first the ones registered by modules, then user's one\n this.callbacks.concat([this.callback]).forEach(function (fn) {\n // Chart destroyed in its own callback (#3600)\n if (fn && typeof this.index !== 'undefined') {\n fn.apply(this, [this]);\n }\n }, this);\n Chart_fireEvent(this, 'load');\n Chart_fireEvent(this, 'render');\n // Set up auto resize, check for not destroyed (#6068)\n if (Chart_defined(this.index)) {\n this.setReflow();\n }\n this.warnIfA11yModuleNotLoaded();\n // Don't run again\n this.hasLoaded = true;\n };\n /**\n * Emit console warning if the a11y module is not loaded.\n * @private\n */\n Chart.prototype.warnIfA11yModuleNotLoaded = function () {\n var _a = this,\n options = _a.options,\n title = _a.title;\n if (options && !this.accessibility) {\n // Make chart behave as an image with the title as alt text\n this.renderer.boxWrapper.attr({\n role: 'img',\n 'aria-label': ((title && title.element.textContent) || ''\n // #17753, < is not allowed in SVG attributes\n ).replace(/</g, '<')\n });\n if (!(options.accessibility && options.accessibility.enabled === false)) {\n Chart_error('Highcharts warning: Consider including the ' +\n '\"accessibility.js\" module to make your chart more ' +\n 'usable for people with disabilities. Set the ' +\n '\"accessibility.enabled\" option to false to remove this ' +\n 'warning. See https://www.highcharts.com/docs/accessibility/accessibility-module.', false, this);\n }\n }\n };\n /**\n * Add a series to the chart after render time. Note that this method should\n * never be used when adding data synchronously at chart render time, as it\n * adds expense to the calculations and rendering. When adding data at the\n * same time as the chart is initialized, add the series as a configuration\n * option instead. With multiple axes, the `offset` is dynamically adjusted.\n *\n * @sample highcharts/members/chart-addseries/\n * Add a series from a button\n * @sample stock/members/chart-addseries/\n * Add a series in Highcharts Stock\n *\n * @function Highcharts.Chart#addSeries\n *\n * @param {Highcharts.SeriesOptionsType} options\n * The config options for the series.\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart after adding.\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n * Whether to apply animation, and optionally animation\n * configuration. When `undefined`, it applies the animation that is\n * set in the `chart.animation` option.\n *\n * @return {Highcharts.Series}\n * The newly created series object.\n *\n * @emits Highcharts.Chart#event:addSeries\n * @emits Highcharts.Chart#event:afterAddSeries\n */\n Chart.prototype.addSeries = function (options, redraw, animation) {\n var chart = this;\n var series;\n if (options) { // <- not necessary\n redraw = Chart_pick(redraw, true); // Defaults to true\n Chart_fireEvent(chart, 'addSeries', { options: options }, function () {\n series = chart.initSeries(options);\n chart.isDirtyLegend = true;\n chart.linkSeries();\n if (series.enabledDataSorting) {\n // We need to call `setData` after `linkSeries`\n series.setData(options.data, false);\n }\n Chart_fireEvent(chart, 'afterAddSeries', { series: series });\n if (redraw) {\n chart.redraw(animation);\n }\n });\n }\n return series;\n };\n /**\n * Add an axis to the chart after render time. Note that this method should\n * never be used when adding data synchronously at chart render time, as it\n * adds expense to the calculations and rendering. When adding data at the\n * same time as the chart is initialized, add the axis as a configuration\n * option instead.\n *\n * @sample highcharts/members/chart-addaxis/\n * Add and remove axes\n *\n * @function Highcharts.Chart#addAxis\n *\n * @param {Highcharts.AxisOptions} options\n * The axis options.\n *\n * @param {boolean} [isX=false]\n * Whether it is an X axis or a value axis.\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart after adding.\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n * Whether and how to apply animation in the redraw. When\n * `undefined`, it applies the animation that is set in the\n * `chart.animation` option.\n *\n * @return {Highcharts.Axis}\n * The newly generated Axis object.\n */\n Chart.prototype.addAxis = function (options, isX, redraw, animation) {\n return this.createAxis(isX ? 'xAxis' : 'yAxis', { axis: options, redraw: redraw, animation: animation });\n };\n /**\n * Add a color axis to the chart after render time. Note that this method\n * should never be used when adding data synchronously at chart render time,\n * as it adds expense to the calculations and rendering. When adding data at\n * the same time as the chart is initialized, add the axis as a\n * configuration option instead.\n *\n * @sample highcharts/members/chart-addaxis/\n * Add and remove axes\n *\n * @function Highcharts.Chart#addColorAxis\n *\n * @param {Highcharts.ColorAxisOptions} options\n * The axis options.\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart after adding.\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n * Whether and how to apply animation in the redraw. When\n * `undefined`, it applies the animation that is set in the\n * `chart.animation` option.\n *\n * @return {Highcharts.Axis}\n * The newly generated Axis object.\n */\n Chart.prototype.addColorAxis = function (options, redraw, animation) {\n return this.createAxis('colorAxis', { axis: options, redraw: redraw, animation: animation });\n };\n /**\n * Factory for creating different axis types.\n *\n * @private\n * @function Highcharts.Chart#createAxis\n *\n * @param {string} coll\n * An axis type.\n *\n * @param {...Array<*>} arguments\n * All arguments for the constructor.\n *\n * @return {Highcharts.Axis}\n * The newly generated Axis object.\n */\n Chart.prototype.createAxis = function (coll, options) {\n var axis = new Axis_Axis(this,\n options.axis,\n coll);\n if (Chart_pick(options.redraw, true)) {\n this.redraw(options.animation);\n }\n return axis;\n };\n /**\n * Dim the chart and show a loading text or symbol. Options for the loading\n * screen are defined in {@link\n * https://api.highcharts.com/highcharts/loading|the loading options}.\n *\n * @sample highcharts/members/chart-hideloading/\n * Show and hide loading from a button\n * @sample highcharts/members/chart-showloading/\n * Apply different text labels\n * @sample stock/members/chart-show-hide-loading/\n * Toggle loading in Highcharts Stock\n *\n * @function Highcharts.Chart#showLoading\n *\n * @param {string} [str]\n * An optional text to show in the loading label instead of the\n * default one. The default text is set in\n * [lang.loading](https://api.highcharts.com/highcharts/lang.loading).\n */\n Chart.prototype.showLoading = function (str) {\n var chart = this,\n options = chart.options,\n loadingOptions = options.loading,\n setLoadingSize = function () {\n if (loadingDiv) {\n Chart_css(loadingDiv, {\n left: chart.plotLeft + 'px',\n top: chart.plotTop + 'px',\n width: chart.plotWidth + 'px',\n height: chart.plotHeight + 'px'\n });\n }\n };\n var loadingDiv = chart.loadingDiv,\n loadingSpan = chart.loadingSpan;\n // Create the layer at the first call\n if (!loadingDiv) {\n chart.loadingDiv = loadingDiv = Chart_createElement('div', {\n className: 'highcharts-loading highcharts-loading-hidden'\n }, null, chart.container);\n }\n if (!loadingSpan) {\n chart.loadingSpan = loadingSpan = Chart_createElement('span', { className: 'highcharts-loading-inner' }, null, loadingDiv);\n Chart_addEvent(chart, 'redraw', setLoadingSize); // #1080\n }\n loadingDiv.className = 'highcharts-loading';\n // Update text\n HTML_AST.setElementHTML(loadingSpan, Chart_pick(str, options.lang.loading, ''));\n if (!chart.styledMode) {\n // Update visuals\n Chart_css(loadingDiv, Chart_extend(loadingOptions.style, {\n zIndex: 10\n }));\n Chart_css(loadingSpan, loadingOptions.labelStyle);\n // Show it\n if (!chart.loadingShown) {\n Chart_css(loadingDiv, {\n opacity: 0,\n display: ''\n });\n Chart_animate(loadingDiv, {\n opacity: loadingOptions.style.opacity || 0.5\n }, {\n duration: loadingOptions.showDuration || 0\n });\n }\n }\n chart.loadingShown = true;\n setLoadingSize();\n };\n /**\n * Hide the loading layer.\n *\n * @see Highcharts.Chart#showLoading\n *\n * @sample highcharts/members/chart-hideloading/\n * Show and hide loading from a button\n * @sample stock/members/chart-show-hide-loading/\n * Toggle loading in Highcharts Stock\n *\n * @function Highcharts.Chart#hideLoading\n */\n Chart.prototype.hideLoading = function () {\n var options = this.options,\n loadingDiv = this.loadingDiv;\n if (loadingDiv) {\n loadingDiv.className =\n 'highcharts-loading highcharts-loading-hidden';\n if (!this.styledMode) {\n Chart_animate(loadingDiv, {\n opacity: 0\n }, {\n duration: options.loading.hideDuration || 100,\n complete: function () {\n Chart_css(loadingDiv, { display: 'none' });\n }\n });\n }\n }\n this.loadingShown = false;\n };\n /**\n * A generic function to update any element of the chart. Elements can be\n * enabled and disabled, moved, re-styled, re-formatted etc.\n *\n * A special case is configuration objects that take arrays, for example\n * [xAxis](https://api.highcharts.com/highcharts/xAxis),\n * [yAxis](https://api.highcharts.com/highcharts/yAxis) or\n * [series](https://api.highcharts.com/highcharts/series). For these\n * collections, an `id` option is used to map the new option set to an\n * existing object. If an existing object of the same id is not found, the\n * corresponding item is updated. So for example, running `chart.update`\n * with a series item without an id, will cause the existing chart's series\n * with the same index in the series array to be updated. When the\n * `oneToOne` parameter is true, `chart.update` will also take care of\n * adding and removing items from the collection. Read more under the\n * parameter description below.\n *\n * Note that when changing series data, `chart.update` may mutate the passed\n * data options.\n *\n * See also the\n * [responsive option set](https://api.highcharts.com/highcharts/responsive).\n * Switching between `responsive.rules` basically runs `chart.update` under\n * the hood.\n *\n * @sample highcharts/members/chart-update/\n * Update chart geometry\n *\n * @function Highcharts.Chart#update\n *\n * @param {Highcharts.Options} options\n * A configuration object for the new chart options.\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart.\n *\n * @param {boolean} [oneToOne=false]\n * When `true`, the `series`, `xAxis`, `yAxis` and `annotations`\n * collections will be updated one to one, and items will be either\n * added or removed to match the new updated options. For example,\n * if the chart has two series and we call `chart.update` with a\n * configuration containing three series, one will be added. If we\n * call `chart.update` with one series, one will be removed. Setting\n * an empty `series` array will remove all series, but leaving out\n * the`series` property will leave all series untouched. If the\n * series have id's, the new series options will be matched by id,\n * and the remaining ones removed.\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n * Whether to apply animation, and optionally animation\n * configuration. When `undefined`, it applies the animation that is\n * set in the `chart.animation` option.\n *\n * @emits Highcharts.Chart#event:update\n * @emits Highcharts.Chart#event:afterUpdate\n */\n Chart.prototype.update = function (options, redraw, oneToOne, animation) {\n var chart = this,\n adders = {\n credits: 'addCredits',\n title: 'setTitle',\n subtitle: 'setSubtitle',\n caption: 'setCaption'\n },\n isResponsiveOptions = options.isResponsiveOptions,\n itemsForRemoval = [];\n var updateAllAxes,\n updateAllSeries,\n runSetSize;\n Chart_fireEvent(chart, 'update', { options: options });\n // If there are responsive rules in action, undo the responsive rules\n // before we apply the updated options and replay the responsive rules\n // on top from the chart.redraw function (#9617).\n if (!isResponsiveOptions) {\n chart.setResponsive(false, true);\n }\n options = Chart_diffObjects(options, chart.options);\n chart.userOptions = Chart_merge(chart.userOptions, options);\n // If the top-level chart option is present, some special updates are\n // required\n var optionsChart = options.chart;\n if (optionsChart) {\n Chart_merge(true, chart.options.chart, optionsChart);\n // Add support for deprecated zooming options like zoomType, #17861\n this.setZoomOptions();\n // Setter function\n if ('className' in optionsChart) {\n chart.setClassName(optionsChart.className);\n }\n if ('inverted' in optionsChart ||\n 'polar' in optionsChart ||\n 'type' in optionsChart) {\n // Parse options.chart.inverted and options.chart.polar together\n // with the available series.\n chart.propFromSeries();\n updateAllAxes = true;\n }\n if ('alignTicks' in optionsChart) { // #6452\n updateAllAxes = true;\n }\n if ('events' in optionsChart) {\n // Chart event handlers\n Chart_registerEventOptions(this, optionsChart);\n }\n Chart_objectEach(optionsChart, function (val, key) {\n if (chart.propsRequireUpdateSeries.indexOf('chart.' + key) !==\n -1) {\n updateAllSeries = true;\n }\n // Only dirty box\n if (chart.propsRequireDirtyBox.indexOf(key) !== -1) {\n chart.isDirtyBox = true;\n }\n // Chart setSize\n if (chart.propsRequireReflow.indexOf(key) !== -1) {\n chart.isDirtyBox = true;\n if (!isResponsiveOptions) {\n runSetSize = true;\n }\n }\n });\n if (!chart.styledMode && optionsChart.style) {\n chart.renderer.setStyle(chart.options.chart.style || {});\n }\n }\n // Moved up, because tooltip needs updated plotOptions (#6218)\n if (!chart.styledMode && options.colors) {\n this.options.colors = options.colors;\n }\n // Some option structures correspond one-to-one to chart objects that\n // have update methods, for example\n // options.credits => chart.credits\n // options.legend => chart.legend\n // options.title => chart.title\n // options.tooltip => chart.tooltip\n // options.subtitle => chart.subtitle\n // options.mapNavigation => chart.mapNavigation\n // options.navigator => chart.navigator\n // options.scrollbar => chart.scrollbar\n Chart_objectEach(options, function (val, key) {\n if (chart[key] &&\n typeof chart[key].update === 'function') {\n chart[key].update(val, false);\n // If a one-to-one object does not exist, look for an adder function\n }\n else if (typeof chart[adders[key]] === 'function') {\n chart[adders[key]](val);\n // Else, just merge the options. For nodes like loading, noData,\n // plotOptions\n }\n else if (key !== 'colors' &&\n chart.collectionsWithUpdate.indexOf(key) === -1) {\n Chart_merge(true, chart.options[key], options[key]);\n }\n if (key !== 'chart' &&\n chart.propsRequireUpdateSeries.indexOf(key) !== -1) {\n updateAllSeries = true;\n }\n });\n // Setters for collections. For axes and series, each item is referred\n // by an id. If the id is not found, it defaults to the corresponding\n // item in the collection, so setting one series without an id, will\n // update the first series in the chart. Setting two series without\n // an id will update the first and the second respectively (#6019)\n // chart.update and responsive.\n this.collectionsWithUpdate.forEach(function (coll) {\n if (options[coll]) {\n Chart_splat(options[coll]).forEach(function (newOptions, i) {\n var hasId = Chart_defined(newOptions.id);\n var item;\n // Match by id\n if (hasId) {\n item = chart.get(newOptions.id);\n }\n // No match by id found, match by index instead\n if (!item && chart[coll]) {\n item = chart[coll][Chart_pick(newOptions.index, i)];\n // Check if we grabbed an item with an existing but\n // different id (#13541). Check that the item in this\n // position is not internal (navigator).\n if (item && ((hasId && Chart_defined(item.options.id)) ||\n item.options.isInternal)) {\n item = void 0;\n }\n }\n if (item && item.coll === coll) {\n item.update(newOptions, false);\n if (oneToOne) {\n item.touched = true;\n }\n }\n // If oneToOne and no matching item is found, add one\n if (!item && oneToOne && chart.collectionsWithInit[coll]) {\n chart.collectionsWithInit[coll][0].apply(chart, \n // [newOptions, ...extraArguments, redraw=false]\n [\n newOptions\n ].concat(\n // Not all initializers require extra args\n chart.collectionsWithInit[coll][1] || []).concat([\n false\n ])).touched = true;\n }\n });\n // Add items for removal\n if (oneToOne) {\n chart[coll].forEach(function (item) {\n if (!item.touched && !item.options.isInternal) {\n itemsForRemoval.push(item);\n }\n else {\n delete item.touched;\n }\n });\n }\n }\n });\n itemsForRemoval.forEach(function (item) {\n if (item.chart && item.remove) { // #9097, avoid removing twice\n item.remove(false);\n }\n });\n if (updateAllAxes) {\n chart.axes.forEach(function (axis) {\n axis.update({}, false);\n });\n }\n // Certain options require the whole series structure to be thrown away\n // and rebuilt\n if (updateAllSeries) {\n chart.getSeriesOrderByLinks().forEach(function (series) {\n // Avoid removed navigator series\n if (series.chart) {\n series.update({}, false);\n }\n }, this);\n }\n // Update size. Redraw is forced.\n var newWidth = optionsChart && optionsChart.width;\n var newHeight = optionsChart && (Chart_isString(optionsChart.height) ?\n Chart_relativeLength(optionsChart.height,\n newWidth || chart.chartWidth) :\n optionsChart.height);\n if (\n // In this case, run chart.setSize with newWidth and newHeight which\n // are undefined, only for reflowing chart elements because margin\n // or spacing has been set (#8190)\n runSetSize ||\n // In this case, the size is actually set\n (Chart_isNumber(newWidth) && newWidth !== chart.chartWidth) ||\n (Chart_isNumber(newHeight) && newHeight !== chart.chartHeight)) {\n chart.setSize(newWidth, newHeight, animation);\n }\n else if (Chart_pick(redraw, true)) {\n chart.redraw(animation);\n }\n Chart_fireEvent(chart, 'afterUpdate', {\n options: options,\n redraw: redraw,\n animation: animation\n });\n };\n /**\n * Shortcut to set the subtitle options. This can also be done from {@link\n * Chart#update} or {@link Chart#setTitle}.\n *\n * @function Highcharts.Chart#setSubtitle\n *\n * @param {Highcharts.SubtitleOptions} options\n * New subtitle options. The subtitle text itself is set by the\n * `options.text` property.\n */\n Chart.prototype.setSubtitle = function (options, redraw) {\n this.applyDescription('subtitle', options);\n this.layOutTitles(redraw);\n };\n /**\n * Set the caption options. This can also be done from {@link\n * Chart#update}.\n *\n * @function Highcharts.Chart#setCaption\n *\n * @param {Highcharts.CaptionOptions} options\n * New caption options. The caption text itself is set by the\n * `options.text` property.\n */\n Chart.prototype.setCaption = function (options, redraw) {\n this.applyDescription('caption', options);\n this.layOutTitles(redraw);\n };\n /**\n * Display the zoom button, so users can reset zoom to the default view\n * settings.\n *\n * @function Highcharts.Chart#showResetZoom\n *\n * @emits Highcharts.Chart#event:afterShowResetZoom\n * @emits Highcharts.Chart#event:beforeShowResetZoom\n */\n Chart.prototype.showResetZoom = function () {\n var chart = this,\n lang = Chart_defaultOptions.lang,\n btnOptions = chart.zooming.resetButton,\n theme = btnOptions.theme,\n alignTo = (btnOptions.relativeTo === 'chart' ||\n btnOptions.relativeTo === 'spacingBox' ?\n null :\n 'plotBox');\n /**\n * @private\n */\n function zoomOut() {\n chart.zoomOut();\n }\n Chart_fireEvent(this, 'beforeShowResetZoom', null, function () {\n chart.resetZoomButton = chart.renderer\n .button(lang.resetZoom, null, null, zoomOut, theme)\n .attr({\n align: btnOptions.position.align,\n title: lang.resetZoomTitle\n })\n .addClass('highcharts-reset-zoom')\n .add()\n .align(btnOptions.position, false, alignTo);\n });\n Chart_fireEvent(this, 'afterShowResetZoom');\n };\n /**\n * Zoom the chart out after a user has zoomed in. See also\n * [Axis.setExtremes](/class-reference/Highcharts.Axis#setExtremes).\n *\n * @function Highcharts.Chart#zoomOut\n *\n * @emits Highcharts.Chart#event:selection\n */\n Chart.prototype.zoomOut = function () {\n var _this = this;\n Chart_fireEvent(this, 'selection', { resetSelection: true }, function () { return _this.transform({ reset: true, trigger: 'zoom' }); });\n };\n /**\n * Pan the chart by dragging the mouse across the pane. This function is\n * called on mouse move, and the distance to pan is computed from chartX\n * compared to the first chartX position in the dragging operation.\n *\n * @private\n * @function Highcharts.Chart#pan\n * @param {Highcharts.PointerEventObject} event\n * @param {string} panning\n */\n Chart.prototype.pan = function (event, panning) {\n var chart = this,\n panningOptions = (typeof panning === 'object' ?\n panning :\n {\n enabled: panning,\n type: 'x'\n }),\n type = panningOptions.type,\n axes = type && chart[{\n x: 'xAxis',\n xy: 'axes',\n y: 'yAxis'\n }[type]]\n .filter(function (axis) {\n return axis.options.panningEnabled && !axis.options.isInternal;\n }), chartOptions = chart.options.chart;\n if (chartOptions === null || chartOptions === void 0 ? void 0 : chartOptions.panning) {\n chartOptions.panning = panningOptions;\n }\n Chart_fireEvent(this, 'pan', { originalEvent: event }, function () {\n chart.transform({\n axes: axes,\n event: event,\n to: {\n x: event.chartX - (chart.mouseDownX || 0),\n y: event.chartY - (chart.mouseDownY || 0)\n },\n trigger: 'pan'\n });\n Chart_css(chart.container, { cursor: 'move' });\n });\n };\n /**\n * Pan and scale the chart. Used internally by mouse-pan, touch-pan,\n * touch-zoom, and mousewheel zoom.\n *\n * The main positioning logic is created around two imaginary boxes. What is\n * currently within the `from` rectangle, should be transformed to fill up\n * the `to` rectangle.\n * - In a mouse zoom, the `from` rectangle is the selection, while the `to`\n * rectangle is the full plot area.\n * - In a touch zoom, the `from` rectangle is made up of the last two-finger\n * touch, while the `to`` rectangle is the current touch.\n * - In a mousewheel zoom, the `to` rectangle is a 10x10 px square,\n * while the `to` rectangle reflects the scale around that.\n *\n * @private\n * @function Highcharts.Chart#transform\n */\n Chart.prototype.transform = function (params) {\n var _a;\n var _this = this;\n var _b,\n _c,\n _d;\n var _e = params.axes,\n axes = _e === void 0 ? this.axes : _e,\n event = params.event,\n _f = params.from,\n from = _f === void 0 ? {} : _f,\n reset = params.reset,\n selection = params.selection,\n _g = params.to,\n to = _g === void 0 ? {} : _g,\n trigger = params.trigger,\n _h = this,\n inverted = _h.inverted,\n time = _h.time;\n var hasZoomed = false,\n displayButton,\n isAnyAxisPanning;\n // Remove active points for shared tooltip\n (_b = this.hoverPoints) === null || _b === void 0 ? void 0 : _b.forEach(function (point) { return point.setState(); });\n for (var _i = 0, axes_3 = axes; _i < axes_3.length; _i++) {\n var axis = axes_3[_i];\n var horiz = axis.horiz, len = axis.len, _j = axis.minPointOffset, minPointOffset = _j === void 0 ? 0 : _j, options = axis.options, reversed = axis.reversed, wh = horiz ? 'width' : 'height', xy = horiz ? 'x' : 'y', toLength = Chart_pick(to[wh], axis.len), fromLength = Chart_pick(from[wh], axis.len), \n // If fingers pinched very close on this axis, treat as pan\n scale = Math.abs(toLength) < 10 ?\n 1 :\n toLength / fromLength, fromCenter = (from[xy] || 0) + fromLength / 2 - axis.pos, toCenter = ((_c = to[xy]) !== null && _c !== void 0 ? _c : axis.pos) +\n toLength / 2 - axis.pos, move = fromCenter - toCenter / scale, pointRangeDirection = (reversed && !inverted) ||\n (!reversed && inverted) ?\n -1 :\n 1, minPx = move;\n // Zooming in multiple panes, zoom only in the pane that receives\n // the input\n if (!reset && (fromCenter < 0 || fromCenter > axis.len)) {\n continue;\n }\n var newMin = axis.toValue(minPx,\n true) +\n // Don't apply offset for selection (#20784)\n (selection || axis.isOrdinal ?\n 0 : minPointOffset * pointRangeDirection),\n newMax = axis.toValue(minPx + len / scale,\n true) -\n (\n // Don't apply offset for selection (#20784)\n selection || axis.isOrdinal ?\n 0 :\n ((minPointOffset * pointRangeDirection) ||\n // Polar zoom tests failed when this was not\n // commented:\n // (axis.isXAxis && axis.pointRangePadding) ||\n 0)),\n allExtremes = axis.allExtremes;\n if (newMin > newMax) {\n _a = [newMax, newMin], newMin = _a[0], newMax = _a[1];\n }\n // General calculations of the full data extremes. It is calculated\n // on the first call to transform, then reused for subsequent\n // touch/pan calls. (#11315).\n if (scale === 1 &&\n !reset &&\n axis.coll === 'yAxis' &&\n !allExtremes) {\n for (var _k = 0, _l = axis.series; _k < _l.length; _k++) {\n var series = _l[_k];\n var seriesExtremes = series.getExtremes(series.getProcessedData(true).modified\n .getColumn('y') || [],\n true);\n allExtremes !== null && allExtremes !== void 0 ? allExtremes : (allExtremes = {\n dataMin: Number.MAX_VALUE,\n dataMax: -Number.MAX_VALUE\n });\n if (Chart_isNumber(seriesExtremes.dataMin) &&\n Chart_isNumber(seriesExtremes.dataMax)) {\n allExtremes.dataMin = Math.min(seriesExtremes.dataMin, allExtremes.dataMin);\n allExtremes.dataMax = Math.max(seriesExtremes.dataMax, allExtremes.dataMax);\n }\n }\n axis.allExtremes = allExtremes;\n }\n var _m = Chart_extend(axis.getExtremes(), allExtremes || {}), dataMin = _m.dataMin, dataMax = _m.dataMax, min = _m.min, max = _m.max, optionsMin = time.parse(options.min), optionsMax = time.parse(options.max), \n // For boosted chart where data extremes are skipped\n safeDataMin = dataMin !== null && dataMin !== void 0 ? dataMin : optionsMin, safeDataMax = dataMax !== null && dataMax !== void 0 ? dataMax : optionsMax, range = newMax - newMin, padRange = axis.categories ? 0 : Math.min(range, safeDataMax - safeDataMin), paddedMin = safeDataMin - padRange * (Chart_defined(optionsMin) ? 0 : options.minPadding), paddedMax = safeDataMax + padRange * (Chart_defined(optionsMax) ? 0 : options.maxPadding), \n // We're allowed to zoom outside the data extremes if we're\n // dealing with a bubble chart, if we're panning, or if we're\n // pinching or mousewheeling in.\n allowZoomOutside = axis.allowZoomOutside ||\n scale === 1 ||\n (trigger !== 'zoom' && scale > 1), \n // Calculate the floor and the ceiling\n floor = Math.min(optionsMin !== null && optionsMin !== void 0 ? optionsMin : paddedMin, paddedMin, allowZoomOutside ? min : paddedMin), ceiling = Math.max(optionsMax !== null && optionsMax !== void 0 ? optionsMax : paddedMax, paddedMax, allowZoomOutside ? max : paddedMax);\n // It is not necessary to calculate extremes on ordinal axis,\n // because they are already calculated, so we don't want to override\n // them.\n if (!axis.isOrdinal ||\n axis.options.overscroll || // #21316\n scale !== 1 ||\n reset) {\n // If the new range spills over, either to the min or max,\n // adjust it.\n if (newMin < floor) {\n newMin = floor;\n if (scale >= 1) {\n newMax = newMin + range;\n }\n }\n if (newMax > ceiling) {\n newMax = ceiling;\n if (scale >= 1) {\n newMin = newMax - range;\n }\n }\n // Set new extremes if they are actually new\n if (reset || (axis.series.length &&\n (newMin !== min || newMax !== max) &&\n newMin >= floor &&\n newMax <= ceiling)) {\n if (selection) {\n selection[axis.coll].push({\n axis: axis,\n min: newMin,\n max: newMax\n });\n }\n else {\n // Temporarily flag the axis as `isPanning` in order to\n // disallow certain axis padding options that would make\n // panning/zooming hard. Reset and redraw after the\n // operation has finished.\n axis.isPanning = trigger !== 'zoom';\n if (axis.isPanning) {\n isAnyAxisPanning = true; // #21319\n }\n axis.setExtremes(reset ? void 0 : newMin, reset ? void 0 : newMax, false, false, { move: move, trigger: trigger, scale: scale });\n if (!reset &&\n (newMin > floor || newMax < ceiling) &&\n trigger !== 'mousewheel') {\n displayButton = true;\n }\n }\n hasZoomed = true;\n }\n if (event) {\n this[horiz ? 'mouseDownX' : 'mouseDownY'] =\n event[horiz ? 'chartX' : 'chartY'];\n }\n }\n }\n if (hasZoomed) {\n if (selection) {\n Chart_fireEvent(this, 'selection', selection, \n // Run transform again, this time without the selection data\n // so that the transform is applied.\n function () {\n delete params.selection;\n params.trigger = 'zoom';\n _this.transform(params);\n });\n }\n else {\n // Show or hide the Reset zoom button, but not while panning\n if (displayButton &&\n !isAnyAxisPanning &&\n !this.resetZoomButton) {\n this.showResetZoom();\n }\n else if (!displayButton && this.resetZoomButton) {\n this.resetZoomButton = this.resetZoomButton.destroy();\n }\n this.redraw(trigger === 'zoom' &&\n ((_d = this.options.chart.animation) !== null && _d !== void 0 ? _d : this.pointCount < 100));\n }\n }\n return hasZoomed;\n };\n return Chart;\n}());\nChart_extend(Chart.prototype, {\n // Hook for adding callbacks in modules\n callbacks: [],\n /**\n * These collections (arrays) implement `Chart.addSomething` method used in\n * chart.update() to create new object in the collection. Equivalent for\n * deleting is resolved by simple `Something.remove()`.\n *\n * Note: We need to define these references after initializers are bound to\n * chart's prototype.\n *\n * @private\n */\n collectionsWithInit: {\n // CollectionName: [ initializingMethod, [extraArguments] ]\n xAxis: [Chart.prototype.addAxis, [true]],\n yAxis: [Chart.prototype.addAxis, [false]],\n series: [Chart.prototype.addSeries]\n },\n /**\n * These collections (arrays) implement update() methods with support for\n * one-to-one option.\n * @private\n */\n collectionsWithUpdate: [\n 'xAxis',\n 'yAxis',\n 'series'\n ],\n /**\n * These properties cause isDirtyBox to be set to true when updating. Can be\n * extended from plugins.\n * @private\n */\n propsRequireDirtyBox: [\n 'backgroundColor',\n 'borderColor',\n 'borderWidth',\n 'borderRadius',\n 'plotBackgroundColor',\n 'plotBackgroundImage',\n 'plotBorderColor',\n 'plotBorderWidth',\n 'plotShadow',\n 'shadow'\n ],\n /**\n * These properties require a full reflow of chart elements, best\n * implemented through running `Chart.setSize` internally (#8190).\n * @private\n */\n propsRequireReflow: [\n 'margin',\n 'marginTop',\n 'marginRight',\n 'marginBottom',\n 'marginLeft',\n 'spacing',\n 'spacingTop',\n 'spacingRight',\n 'spacingBottom',\n 'spacingLeft'\n ],\n /**\n * These properties cause all series to be updated when updating. Can be\n * extended from plugins.\n * @private\n */\n propsRequireUpdateSeries: [\n 'chart.inverted',\n 'chart.polar',\n 'chart.ignoreHiddenSeries',\n 'chart.type',\n 'colors',\n 'plotOptions',\n 'time',\n 'tooltip'\n ]\n});\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Chart_Chart = (Chart);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Callback for chart constructors.\n *\n * @callback Highcharts.ChartCallbackFunction\n *\n * @param {Highcharts.Chart} chart\n * Created chart.\n */\n/**\n * Format a number and return a string based on input settings.\n *\n * @callback Highcharts.NumberFormatterCallbackFunction\n *\n * @param {number} number\n * The input number to format.\n *\n * @param {number} decimals\n * The amount of decimals. A value of -1 preserves the amount in the\n * input number.\n *\n * @param {string} [decimalPoint]\n * The decimal point, defaults to the one given in the lang options, or\n * a dot.\n *\n * @param {string} [thousandsSep]\n * The thousands separator, defaults to the one given in the lang\n * options, or a space character.\n *\n * @return {string} The formatted number.\n */\n/**\n * The chart title. The title has an `update` method that allows modifying the\n * options directly or indirectly via `chart.update`.\n *\n * @interface Highcharts.TitleObject\n * @extends Highcharts.SVGElement\n */ /**\n* Modify options for the title.\n*\n* @function Highcharts.TitleObject#update\n*\n* @param {Highcharts.TitleOptions} titleOptions\n* Options to modify.\n*\n* @param {boolean} [redraw=true]\n* Whether to redraw the chart after the title is altered. If doing more\n* operations on the chart, it is a good idea to set redraw to false and\n* call {@link Chart#redraw} after.\n*/\n/**\n * The chart subtitle. The subtitle has an `update` method that\n * allows modifying the options directly or indirectly via\n * `chart.update`.\n *\n * @interface Highcharts.SubtitleObject\n * @extends Highcharts.SVGElement\n */ /**\n* Modify options for the subtitle.\n*\n* @function Highcharts.SubtitleObject#update\n*\n* @param {Highcharts.SubtitleOptions} subtitleOptions\n* Options to modify.\n*\n* @param {boolean} [redraw=true]\n* Whether to redraw the chart after the subtitle is altered. If doing\n* more operations on the chart, it is a good idea to set redraw to false\n* and call {@link Chart#redraw} after.\n*/\n/**\n * The chart caption. The caption has an `update` method that\n * allows modifying the options directly or indirectly via\n * `chart.update`.\n *\n * @interface Highcharts.CaptionObject\n * @extends Highcharts.SVGElement\n */ /**\n* Modify options for the caption.\n*\n* @function Highcharts.CaptionObject#update\n*\n* @param {Highcharts.CaptionOptions} captionOptions\n* Options to modify.\n*\n* @param {boolean} [redraw=true]\n* Whether to redraw the chart after the caption is altered. If doing\n* more operations on the chart, it is a good idea to set redraw to false\n* and call {@link Chart#redraw} after.\n*/\n/**\n * @interface Highcharts.ChartIsInsideOptionsObject\n */ /**\n* @name Highcharts.ChartIsInsideOptionsObject#axis\n* @type {Highcharts.Axis|undefined}\n*/ /**\n* @name Highcharts.ChartIsInsideOptionsObject#ignoreX\n* @type {boolean|undefined}\n*/ /**\n* @name Highcharts.ChartIsInsideOptionsObject#ignoreY\n* @type {boolean|undefined}\n*/ /**\n* @name Highcharts.ChartIsInsideOptionsObject#inverted\n* @type {boolean|undefined}\n*/ /**\n* @name Highcharts.ChartIsInsideOptionsObject#paneCoordinates\n* @type {boolean|undefined}\n*/ /**\n* @name Highcharts.ChartIsInsideOptionsObject#series\n* @type {Highcharts.Series|undefined}\n*/ /**\n* @name Highcharts.ChartIsInsideOptionsObject#visiblePlotOnly\n* @type {boolean|undefined}\n*/\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Extensions/ScrollablePlotArea.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * Highcharts feature to make the Y axis stay fixed when scrolling the chart\n * horizontally on mobile devices. Supports left and right side axes.\n */\n\n\nvar ScrollablePlotArea_stop = AnimationUtilities.stop;\n\nvar ScrollablePlotArea_composed = Core_Globals.composed;\n\n\nvar ScrollablePlotArea_addEvent = Core_Utilities.addEvent, ScrollablePlotArea_createElement = Core_Utilities.createElement, ScrollablePlotArea_css = Core_Utilities.css, ScrollablePlotArea_defined = Core_Utilities.defined, ScrollablePlotArea_erase = Core_Utilities.erase, ScrollablePlotArea_merge = Core_Utilities.merge, ScrollablePlotArea_pushUnique = Core_Utilities.pushUnique;\n/* *\n *\n * Functions\n *\n * */\n/** @private */\nfunction onChartRender() {\n var scrollablePlotArea = this.scrollablePlotArea;\n if ((this.scrollablePixelsX || this.scrollablePixelsY) &&\n !scrollablePlotArea) {\n this.scrollablePlotArea = scrollablePlotArea = new ScrollablePlotArea(this);\n }\n scrollablePlotArea === null || scrollablePlotArea === void 0 ? void 0 : scrollablePlotArea.applyFixed();\n}\n/** @private */\nfunction markDirty() {\n if (this.chart.scrollablePlotArea) {\n this.chart.scrollablePlotArea.isDirty = true;\n }\n}\nvar ScrollablePlotArea = /** @class */ (function () {\n function ScrollablePlotArea(chart) {\n var _a,\n _b;\n var chartOptions = chart.options.chart,\n Renderer = Renderer_RendererRegistry.getRendererType(),\n scrollableOptions = chartOptions.scrollablePlotArea || {},\n moveFixedElements = this.moveFixedElements.bind(this),\n styles = {\n WebkitOverflowScrolling: 'touch',\n overflowX: 'hidden',\n overflowY: 'hidden'\n };\n if (chart.scrollablePixelsX) {\n styles.overflowX = 'auto';\n }\n if (chart.scrollablePixelsY) {\n styles.overflowY = 'auto';\n }\n this.chart = chart;\n // Insert a container with relative position that scrolling and fixed\n // container renders to (#10555)\n var parentDiv = this.parentDiv = ScrollablePlotArea_createElement('div', {\n className: 'highcharts-scrolling-parent'\n }, {\n position: 'relative'\n },\n chart.renderTo), \n // Add the necessary divs to provide scrolling\n scrollingContainer = this.scrollingContainer = ScrollablePlotArea_createElement('div', {\n 'className': 'highcharts-scrolling'\n },\n styles,\n parentDiv),\n innerContainer = this.innerContainer = ScrollablePlotArea_createElement('div', {\n 'className': 'highcharts-inner-container'\n },\n void 0,\n scrollingContainer),\n fixedDiv = this.fixedDiv = ScrollablePlotArea_createElement('div', {\n className: 'highcharts-fixed'\n }, {\n position: 'absolute',\n overflow: 'hidden',\n pointerEvents: 'none',\n zIndex: (((_a = chartOptions.style) === null || _a === void 0 ? void 0 : _a.zIndex) || 0) + 2,\n top: 0\n },\n void 0,\n true),\n fixedRenderer = this.fixedRenderer = new Renderer(fixedDiv,\n chart.chartWidth,\n chart.chartHeight,\n chartOptions.style);\n // Mask\n this.mask = fixedRenderer\n .path()\n .attr({\n fill: chartOptions.backgroundColor || '#fff',\n 'fill-opacity': (_b = scrollableOptions.opacity) !== null && _b !== void 0 ? _b : 0.85,\n zIndex: -1\n })\n .addClass('highcharts-scrollable-mask')\n .add();\n scrollingContainer.parentNode.insertBefore(fixedDiv, scrollingContainer);\n ScrollablePlotArea_css(chart.renderTo, { overflow: 'visible' });\n ScrollablePlotArea_addEvent(chart, 'afterShowResetZoom', moveFixedElements);\n ScrollablePlotArea_addEvent(chart, 'afterApplyDrilldown', moveFixedElements);\n ScrollablePlotArea_addEvent(chart, 'afterLayOutTitles', moveFixedElements);\n // On scroll, reset the chart position because it applies to the\n // scrolled container\n var lastHoverPoint;\n ScrollablePlotArea_addEvent(scrollingContainer, 'scroll', function () {\n var pointer = chart.pointer,\n hoverPoint = chart.hoverPoint;\n if (pointer) {\n delete pointer.chartPosition;\n if (hoverPoint) {\n lastHoverPoint = hoverPoint;\n }\n pointer.runPointActions(void 0, lastHoverPoint, true);\n }\n });\n // Now move the container inside\n innerContainer.appendChild(chart.container);\n }\n ScrollablePlotArea.compose = function (AxisClass, ChartClass, SeriesClass) {\n var _this = this;\n if (ScrollablePlotArea_pushUnique(ScrollablePlotArea_composed, this.compose)) {\n ScrollablePlotArea_addEvent(AxisClass, 'afterInit', markDirty);\n ScrollablePlotArea_addEvent(ChartClass, 'afterSetChartSize', function (e) {\n return _this.afterSetSize(e.target, e);\n });\n ScrollablePlotArea_addEvent(ChartClass, 'render', onChartRender);\n ScrollablePlotArea_addEvent(SeriesClass, 'show', markDirty);\n }\n };\n ScrollablePlotArea.afterSetSize = function (chart, e) {\n var _a = chart.options.chart.scrollablePlotArea || {},\n minWidth = _a.minWidth,\n minHeight = _a.minHeight,\n clipBox = chart.clipBox,\n plotBox = chart.plotBox,\n inverted = chart.inverted,\n renderer = chart.renderer;\n var scrollablePixelsX,\n scrollablePixelsY,\n recalculateHoriz;\n if (!renderer.forExport) {\n // The amount of pixels to scroll, the difference between chart\n // width and scrollable width\n if (minWidth) {\n chart.scrollablePixelsX = scrollablePixelsX = Math.max(0, minWidth - chart.chartWidth);\n if (scrollablePixelsX) {\n chart.scrollablePlotBox = ScrollablePlotArea_merge(chart.plotBox);\n plotBox.width = chart.plotWidth += scrollablePixelsX;\n clipBox[inverted ? 'height' : 'width'] += scrollablePixelsX;\n recalculateHoriz = true;\n }\n // Currently we can only do either X or Y\n }\n else if (minHeight) {\n chart.scrollablePixelsY = scrollablePixelsY = Math.max(0, minHeight - chart.chartHeight);\n if (ScrollablePlotArea_defined(scrollablePixelsY)) {\n chart.scrollablePlotBox = ScrollablePlotArea_merge(chart.plotBox);\n plotBox.height = chart.plotHeight += scrollablePixelsY;\n clipBox[inverted ? 'width' : 'height'] += scrollablePixelsY;\n recalculateHoriz = false;\n }\n }\n if (ScrollablePlotArea_defined(recalculateHoriz) && !e.skipAxes) {\n for (var _i = 0, _b = chart.axes; _i < _b.length; _i++) {\n var axis = _b[_i];\n // Apply the corrected plot size to the axes of the other\n // orientation than the scrolling direction\n if (axis.horiz === recalculateHoriz ||\n // Or parallel axes\n (chart.hasParallelCoordinates && axis.coll === 'yAxis')) {\n axis.setAxisSize();\n axis.setAxisTranslation();\n }\n }\n }\n }\n };\n ScrollablePlotArea.prototype.applyFixed = function () {\n var _a;\n var _b = this,\n chart = _b.chart,\n fixedRenderer = _b.fixedRenderer,\n isDirty = _b.isDirty,\n scrollingContainer = _b.scrollingContainer,\n axisOffset = chart.axisOffset,\n chartWidth = chart.chartWidth,\n chartHeight = chart.chartHeight,\n container = chart.container,\n plotHeight = chart.plotHeight,\n plotLeft = chart.plotLeft,\n plotTop = chart.plotTop,\n plotWidth = chart.plotWidth,\n _c = chart.scrollablePixelsX,\n scrollablePixelsX = _c === void 0 ? 0 : _c,\n _d = chart.scrollablePixelsY,\n scrollablePixelsY = _d === void 0 ? 0 : _d,\n chartOptions = chart.options.chart,\n scrollableOptions = chartOptions.scrollablePlotArea || {},\n _e = scrollableOptions.scrollPositionX,\n scrollPositionX = _e === void 0 ? 0 : _e,\n _f = scrollableOptions.scrollPositionY,\n scrollPositionY = _f === void 0 ? 0 : _f,\n scrollableWidth = chartWidth + scrollablePixelsX,\n scrollableHeight = chartHeight + scrollablePixelsY;\n // Set the size of the fixed renderer to the visible width\n fixedRenderer.setSize(chartWidth, chartHeight);\n if (isDirty !== null && isDirty !== void 0 ? isDirty : true) {\n this.isDirty = false;\n this.moveFixedElements();\n }\n // Increase the size of the scrollable renderer and background\n ScrollablePlotArea_stop(chart.container);\n ScrollablePlotArea_css(container, {\n width: \"\" + scrollableWidth + \"px\",\n height: \"\" + scrollableHeight + \"px\"\n });\n chart.renderer.boxWrapper.attr({\n width: scrollableWidth,\n height: scrollableHeight,\n viewBox: [0, 0, scrollableWidth, scrollableHeight].join(' ')\n });\n (_a = chart.chartBackground) === null || _a === void 0 ? void 0 : _a.attr({\n width: scrollableWidth,\n height: scrollableHeight\n });\n ScrollablePlotArea_css(scrollingContainer, {\n width: \"\" + chartWidth + \"px\",\n height: \"\" + chartHeight + \"px\"\n });\n // Set scroll position the first time (this.isDirty was undefined at\n // the top of this function)\n if (!ScrollablePlotArea_defined(isDirty)) {\n scrollingContainer.scrollLeft = scrollablePixelsX * scrollPositionX;\n scrollingContainer.scrollTop = scrollablePixelsY * scrollPositionY;\n }\n // Mask behind the left and right side\n var maskTop = plotTop - axisOffset[0] - 1,\n maskLeft = plotLeft - axisOffset[3] - 1,\n maskBottom = plotTop + plotHeight + axisOffset[2] + 1,\n maskRight = plotLeft + plotWidth + axisOffset[1] + 1,\n maskPlotRight = plotLeft + plotWidth - scrollablePixelsX,\n maskPlotBottom = plotTop + plotHeight - scrollablePixelsY;\n var d = [['M', 0, 0]];\n if (scrollablePixelsX) {\n d = [\n // Left side\n ['M', 0, maskTop],\n ['L', plotLeft - 1, maskTop],\n ['L', plotLeft - 1, maskBottom],\n ['L', 0, maskBottom],\n ['Z'],\n // Right side\n ['M', maskPlotRight, maskTop],\n ['L', chartWidth, maskTop],\n ['L', chartWidth, maskBottom],\n ['L', maskPlotRight, maskBottom],\n ['Z']\n ];\n }\n else if (scrollablePixelsY) {\n d = [\n // Top side\n ['M', maskLeft, 0],\n ['L', maskLeft, plotTop - 1],\n ['L', maskRight, plotTop - 1],\n ['L', maskRight, 0],\n ['Z'],\n // Bottom side\n ['M', maskLeft, maskPlotBottom],\n ['L', maskLeft, chartHeight],\n ['L', maskRight, chartHeight],\n ['L', maskRight, maskPlotBottom],\n ['Z']\n ];\n }\n if (chart.redrawTrigger !== 'adjustHeight') {\n this.mask.attr({ d: d });\n }\n };\n /**\n * These elements are moved over to the fixed renderer and stay fixed when\n * the user scrolls the chart\n * @private\n */\n ScrollablePlotArea.prototype.moveFixedElements = function () {\n var _a = this.chart,\n container = _a.container,\n inverted = _a.inverted,\n scrollablePixelsX = _a.scrollablePixelsX,\n scrollablePixelsY = _a.scrollablePixelsY,\n fixedRenderer = this.fixedRenderer,\n fixedSelectors = ScrollablePlotArea.fixedSelectors;\n var axisClass;\n if (scrollablePixelsX && !inverted) {\n axisClass = '.highcharts-yaxis';\n }\n else if (scrollablePixelsX && inverted) {\n axisClass = '.highcharts-xaxis';\n }\n else if (scrollablePixelsY && !inverted) {\n axisClass = '.highcharts-xaxis';\n }\n else if (scrollablePixelsY && inverted) {\n axisClass = '.highcharts-yaxis';\n }\n if (axisClass && !(this.chart.hasParallelCoordinates &&\n axisClass === '.highcharts-yaxis')) {\n // Add if not added yet\n for (var _i = 0, _b = [\n \"\" + axisClass + \":not(.highcharts-radial-axis)\",\n \"\" + axisClass + \"-labels:not(.highcharts-radial-axis-labels)\"\n ]; _i < _b.length; _i++) {\n var className = _b[_i];\n ScrollablePlotArea_pushUnique(fixedSelectors, className);\n }\n }\n else {\n // Clear all axis related selectors\n for (var _c = 0, _d = [\n '.highcharts-xaxis',\n '.highcharts-yaxis'\n ]; _c < _d.length; _c++) {\n var classBase = _d[_c];\n for (var _e = 0, _f = [\n \"\" + classBase + \":not(.highcharts-radial-axis)\",\n \"\" + classBase + \"-labels:not(.highcharts-radial-axis-labels)\"\n ]; _e < _f.length; _e++) {\n var className = _f[_e];\n ScrollablePlotArea_erase(fixedSelectors, className);\n }\n }\n }\n for (var _g = 0, fixedSelectors_1 = fixedSelectors; _g < fixedSelectors_1.length; _g++) {\n var className = fixedSelectors_1[_g];\n [].forEach.call(container.querySelectorAll(className), function (elem) {\n (elem.namespaceURI === fixedRenderer.SVG_NS ?\n fixedRenderer.box :\n fixedRenderer.box.parentNode).appendChild(elem);\n elem.style.pointerEvents = 'auto';\n });\n }\n };\n ScrollablePlotArea.fixedSelectors = [\n '.highcharts-breadcrumbs-group',\n '.highcharts-contextbutton',\n '.highcharts-caption',\n '.highcharts-credits',\n '.highcharts-drillup-button',\n '.highcharts-legend',\n '.highcharts-legend-checkbox',\n '.highcharts-navigator-series',\n '.highcharts-navigator-xaxis',\n '.highcharts-navigator-yaxis',\n '.highcharts-navigator',\n '.highcharts-range-selector-group',\n '.highcharts-reset-zoom',\n '.highcharts-scrollbar',\n '.highcharts-subtitle',\n '.highcharts-title'\n ];\n return ScrollablePlotArea;\n}());\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Extensions_ScrollablePlotArea = (ScrollablePlotArea);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Options for a scrollable plot area. This feature provides a minimum size for\n * the plot area of the chart. If the size gets smaller than this, typically\n * on mobile devices, a native browser scrollbar is presented. This scrollbar\n * provides smooth scrolling for the contents of the plot area, whereas the\n * title, legend and unaffected axes are fixed.\n *\n * Since v7.1.2, a scrollable plot area can be defined for either horizontal or\n * vertical scrolling, depending on whether the `minWidth` or `minHeight`\n * option is set.\n *\n * @sample highcharts/chart/scrollable-plotarea\n * Scrollable plot area\n * @sample highcharts/chart/scrollable-plotarea-vertical\n * Vertically scrollable plot area\n * @sample {gantt} gantt/chart/scrollable-plotarea-vertical\n * Gantt chart with vertically scrollable plot area\n *\n * @since 6.1.0\n * @product highcharts gantt\n * @apioption chart.scrollablePlotArea\n */\n/**\n * The minimum height for the plot area. If it gets smaller than this, the plot\n * area will become scrollable.\n *\n * @type {number}\n * @since 7.1.2\n * @apioption chart.scrollablePlotArea.minHeight\n */\n/**\n * The minimum width for the plot area. If it gets smaller than this, the plot\n * area will become scrollable.\n *\n * @type {number}\n * @since 6.1.0\n * @apioption chart.scrollablePlotArea.minWidth\n */\n/**\n * The initial scrolling position of the scrollable plot area. Ranges from 0 to\n * 1, where 0 aligns the plot area to the left and 1 aligns it to the right.\n * Typically we would use 1 if the chart has right aligned Y axes.\n *\n * @type {number}\n * @since 6.1.0\n * @apioption chart.scrollablePlotArea.scrollPositionX\n */\n/**\n * The initial scrolling position of the scrollable plot area. Ranges from 0 to\n * 1, where 0 aligns the plot area to the top and 1 aligns it to the bottom.\n *\n * @type {number}\n * @since 7.1.2\n * @apioption chart.scrollablePlotArea.scrollPositionY\n */\n/**\n * The opacity of mask applied on one of the sides of the plot\n * area.\n *\n * @sample {highcharts} highcharts/chart/scrollable-plotarea-opacity\n * Disabled opacity for the mask\n *\n * @type {number}\n * @default 0.85\n * @since 7.1.1\n * @apioption chart.scrollablePlotArea.opacity\n */\n(''); // Keep doclets above in transpiled file\n\n;// ./code/es5/es-modules/Core/Axis/Stacking/StackItem.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar StackItem_format = Core_Templating.format;\n\nvar StackItem_Series = Series_SeriesRegistry.series;\n\nvar StackItem_destroyObjectProperties = Core_Utilities.destroyObjectProperties, StackItem_fireEvent = Core_Utilities.fireEvent, StackItem_getAlignFactor = Core_Utilities.getAlignFactor, StackItem_isNumber = Core_Utilities.isNumber, StackItem_pick = Core_Utilities.pick;\n/* *\n *\n * Class\n *\n * */\n/**\n * The class for stacks. Each stack, on a specific X value and either negative\n * or positive, has its own stack item.\n * @private\n */\nvar StackItem = /** @class */ (function () {\n /* *\n *\n * Constructor\n *\n * */\n function StackItem(axis, options, negativeValue, x, stackOption) {\n var inverted = axis.chart.inverted,\n reversed = axis.reversed;\n this.axis = axis;\n // The stack goes to the left either if the stack has negative value\n // or when axis is reversed. XOR operator.\n var isNegative = (this.isNegative = !!negativeValue !== !!reversed);\n // Save the options to be able to style the label\n this.options = options = options || {};\n // Save the x value to be able to position the label later\n this.x = x;\n // Initialize total value\n this.total = null;\n this.cumulative = null;\n // This will keep each points' extremes stored by series.index and point\n // index\n this.points = {};\n this.hasValidPoints = false;\n // Save the stack option on the series configuration object,\n // and whether to treat it as percent\n this.stack = stackOption;\n this.leftCliff = 0;\n this.rightCliff = 0;\n // The align options and text align varies on whether the stack is\n // negative and if the chart is inverted or not.\n // First test the user supplied value, then use the dynamic.\n this.alignOptions = {\n align: options.align ||\n (inverted ? (isNegative ? 'left' : 'right') : 'center'),\n verticalAlign: options.verticalAlign ||\n (inverted ? 'middle' : isNegative ? 'bottom' : 'top'),\n y: options.y,\n x: options.x\n };\n this.textAlign =\n options.textAlign ||\n (inverted ? (!isNegative ? 'left' : 'right') : 'center');\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * @private\n */\n StackItem.prototype.destroy = function () {\n StackItem_destroyObjectProperties(this, this.axis);\n };\n /**\n * Renders the stack total label and adds it to the stack label group.\n * @private\n */\n StackItem.prototype.render = function (group) {\n var chart = this.axis.chart,\n options = this.options,\n formatOption = options.format, \n // Format the text in the label.\n str = formatOption ?\n StackItem_format(formatOption,\n this,\n chart) :\n options.formatter.call(this);\n // Change the text to reflect the new total and set visibility to hidden\n // in case the series is hidden\n if (this.label) {\n this.label.attr({ text: str, visibility: 'hidden' });\n }\n else {\n // Create new label\n this.label = chart.renderer.label(str, null, void 0, options.shape, void 0, void 0, options.useHTML, false, 'stack-labels');\n var attr = {\n r: options.borderRadius || 0,\n text: str,\n // Set default padding to 5 as it is in datalabels #12308\n padding: StackItem_pick(options.padding, 5),\n visibility: 'hidden' // Hidden until setOffset is called\n };\n if (!chart.styledMode) {\n attr.fill = options.backgroundColor;\n attr.stroke = options.borderColor;\n attr['stroke-width'] = options.borderWidth;\n this.label.css(options.style || {});\n }\n this.label.attr(attr);\n if (!this.label.added) {\n this.label.add(group); // Add to the labels-group\n }\n }\n // Rank it higher than data labels (#8742)\n this.label.labelrank = chart.plotSizeY;\n StackItem_fireEvent(this, 'afterRender');\n };\n /**\n * Sets the offset that the stack has from the x value and repositions the\n * label.\n * @private\n */\n StackItem.prototype.setOffset = function (xOffset, width, boxBottom, boxTop, defaultX, xAxis) {\n var _a = this,\n alignOptions = _a.alignOptions,\n axis = _a.axis,\n label = _a.label,\n options = _a.options,\n textAlign = _a.textAlign,\n chart = axis.chart,\n stackBox = this.getStackBox({\n xOffset: xOffset,\n width: width,\n boxBottom: boxBottom,\n boxTop: boxTop,\n defaultX: defaultX,\n xAxis: xAxis\n }),\n verticalAlign = alignOptions.verticalAlign;\n if (label && stackBox) {\n var labelBox = label.getBBox(void 0, 0),\n padding = label.padding;\n var isJustify = StackItem_pick(options.overflow, 'justify') === 'justify',\n visible = void 0;\n // Reset alignOptions property after justify #12337\n alignOptions.x = options.x || 0;\n alignOptions.y = options.y || 0;\n // Calculate the adjusted Stack position, to take into consideration\n // The size if the labelBox and vertical alignment as\n // well as the text alignment. It's need to be done to work with\n // default SVGLabel.align/justify methods.\n var _b = this.adjustStackPosition({\n labelBox: labelBox,\n verticalAlign: verticalAlign,\n textAlign: textAlign\n }),\n x = _b.x,\n y = _b.y;\n stackBox.x -= x;\n stackBox.y -= y;\n // Align the label to the adjusted box.\n label.align(alignOptions, false, stackBox);\n // Check if label is inside the plotArea #12294\n visible = chart.isInsidePlot(label.alignAttr.x + alignOptions.x + x, label.alignAttr.y + alignOptions.y + y);\n if (!visible) {\n isJustify = false;\n }\n if (isJustify) {\n // Justify stackLabel into the alignBox\n StackItem_Series.prototype.justifyDataLabel.call(axis, label, alignOptions, label.alignAttr, labelBox, stackBox);\n }\n // Add attr to avoid the default animation of justifyDataLabel.\n // Also add correct rotation with its rotation origin. #15129\n label.attr({\n x: label.alignAttr.x,\n y: label.alignAttr.y,\n rotation: options.rotation,\n rotationOriginX: labelBox.width *\n StackItem_getAlignFactor(options.textAlign || 'center'),\n rotationOriginY: labelBox.height / 2\n });\n // Check if the dataLabel should be visible.\n if (StackItem_pick(!isJustify && options.crop, true)) {\n visible =\n StackItem_isNumber(label.x) &&\n StackItem_isNumber(label.y) &&\n chart.isInsidePlot(label.x - padding + (label.width || 0), label.y) &&\n chart.isInsidePlot(label.x + padding, label.y);\n }\n label[visible ? 'show' : 'hide']();\n }\n StackItem_fireEvent(this, 'afterSetOffset', { xOffset: xOffset, width: width });\n };\n /**\n * Adjust the stack BBox position, to take into consideration the alignment\n * of the dataLabel. This is necessary to make the stackDataLabel work with\n * core methods like `SVGLabel.adjust` and `Series.justifyDataLabel`.\n * @param AdjustStackPositionProps\n * @return {{x: number, y: number}} Adjusted BBox position of the stack.\n */\n StackItem.prototype.adjustStackPosition = function (_a) {\n var labelBox = _a.labelBox,\n verticalAlign = _a.verticalAlign,\n textAlign = _a.textAlign;\n return {\n x: labelBox.width / 2 +\n (labelBox.width / 2) * (2 * StackItem_getAlignFactor(textAlign) - 1),\n y: (labelBox.height / 2) * 2 * (1 - StackItem_getAlignFactor(verticalAlign))\n };\n };\n /**\n * Get the bbox of the stack.\n * @private\n * @function Highcharts.StackItem#getStackBox\n * @return {BBoxObject} The x, y, height, width of the stack.\n */\n StackItem.prototype.getStackBox = function (stackBoxProps) {\n var stackItem = this,\n axis = this.axis,\n chart = axis.chart,\n boxTop = stackBoxProps.boxTop,\n defaultX = stackBoxProps.defaultX,\n xOffset = stackBoxProps.xOffset,\n width = stackBoxProps.width,\n boxBottom = stackBoxProps.boxBottom,\n totalStackValue = axis.stacking.usePercentage ?\n 100 :\n StackItem_pick(boxTop,\n this.total, 0),\n y = axis.toPixels(totalStackValue),\n xAxis = stackBoxProps.xAxis || chart.xAxis[0],\n x = StackItem_pick(defaultX,\n xAxis.translate(this.x)) + xOffset,\n yZero = axis.toPixels(boxBottom ||\n (StackItem_isNumber(axis.min) &&\n axis.logarithmic &&\n axis.logarithmic.lin2log(axis.min)) ||\n 0),\n height = Math.abs(y - yZero),\n inverted = chart.inverted,\n neg = stackItem.isNegative;\n return inverted ?\n {\n x: (neg ? y : y - height) - chart.plotLeft,\n y: xAxis.height - x - width + xAxis.top - chart.plotTop,\n width: height,\n height: width\n } : {\n x: x + xAxis.transB - chart.plotLeft,\n y: (neg ? y - height : y) - chart.plotTop,\n width: width,\n height: height\n };\n };\n return StackItem;\n}());\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Stacking_StackItem = (StackItem);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Stack of data points\n *\n * @product highcharts\n *\n * @interface Highcharts.StackItemObject\n */ /**\n* Alignment settings\n* @name Highcharts.StackItemObject#alignOptions\n* @type {Highcharts.AlignObject}\n*/ /**\n* Related axis\n* @name Highcharts.StackItemObject#axis\n* @type {Highcharts.Axis}\n*/ /**\n* Cumulative value of the stacked data points\n* @name Highcharts.StackItemObject#cumulative\n* @type {number}\n*/ /**\n* True if on the negative side\n* @name Highcharts.StackItemObject#isNegative\n* @type {boolean}\n*/ /**\n* Related SVG element\n* @name Highcharts.StackItemObject#label\n* @type {Highcharts.SVGElement}\n*/ /**\n* Related stack options\n* @name Highcharts.StackItemObject#options\n* @type {Highcharts.YAxisStackLabelsOptions}\n*/ /**\n* Total value of the stacked data points\n* @name Highcharts.StackItemObject#total\n* @type {number}\n*/ /**\n* Shared x value of the stack\n* @name Highcharts.StackItemObject#x\n* @type {number}\n*/\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Axis/Stacking/StackingAxis.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar StackingAxis_getDeferredAnimation = AnimationUtilities.getDeferredAnimation;\n\n\nvar seriesProto = Series_SeriesRegistry.series.prototype;\n\n\nvar StackingAxis_addEvent = Core_Utilities.addEvent, StackingAxis_correctFloat = Core_Utilities.correctFloat, StackingAxis_defined = Core_Utilities.defined, StackingAxis_destroyObjectProperties = Core_Utilities.destroyObjectProperties, StackingAxis_fireEvent = Core_Utilities.fireEvent, StackingAxis_isNumber = Core_Utilities.isNumber, StackingAxis_objectEach = Core_Utilities.objectEach, StackingAxis_pick = Core_Utilities.pick;\n/* *\n *\n * Functions\n *\n * */\n/**\n * Generate stacks for each series and calculate stacks total values\n *\n * @private\n * @function Highcharts.Chart#getStacks\n */\nfunction chartGetStacks() {\n var chart = this,\n inverted = chart.inverted;\n // Reset stacks for each axis\n chart.axes.forEach(function (axis) {\n if (axis.stacking && axis.stacking.stacks && axis.hasVisibleSeries) {\n axis.stacking.oldStacks = axis.stacking.stacks;\n }\n });\n chart.series.forEach(function (series) {\n var xAxisOptions = series.xAxis && series.xAxis.options || {};\n if (series.options.stacking && series.reserveSpace()) {\n series.stackKey = [\n series.type,\n StackingAxis_pick(series.options.stack, ''),\n inverted ? xAxisOptions.top : xAxisOptions.left,\n inverted ? xAxisOptions.height : xAxisOptions.width\n ].join(',');\n }\n });\n}\n/**\n * @private\n */\nfunction onAxisDestroy() {\n var _a;\n var stacking = this.stacking;\n if (stacking) {\n var stacks_1 = stacking.stacks;\n // Destroy each stack total\n StackingAxis_objectEach(stacks_1, function (stack, stackKey) {\n StackingAxis_destroyObjectProperties(stack);\n delete stacks_1[stackKey];\n });\n (_a = stacking.stackTotalGroup) === null || _a === void 0 ? void 0 : _a.destroy();\n }\n}\n/**\n * @private\n */\nfunction onAxisInit() {\n if (!this.stacking) {\n this.stacking = new AxisAdditions(this);\n }\n}\n/**\n * Get stack indicator, according to it's x-value, to determine points with the\n * same x-value\n *\n * @private\n * @function Highcharts.Series#getStackIndicator\n */\nfunction seriesGetStackIndicator(stackIndicator, x, index, key) {\n // Update stack indicator, when:\n // first point in a stack || x changed || stack type (negative vs positive)\n // changed:\n if (!StackingAxis_defined(stackIndicator) ||\n stackIndicator.x !== x ||\n (key && stackIndicator.stackKey !== key)) {\n stackIndicator = {\n x: x,\n index: 0,\n key: key,\n stackKey: key\n };\n }\n else {\n stackIndicator.index++;\n }\n stackIndicator.key = [index, x, stackIndicator.index].join(',');\n return stackIndicator;\n}\n/**\n * Iterate over all stacks and compute the absolute values to percent\n *\n * @private\n * @function Highcharts.Series#modifyStacks\n */\nfunction seriesModifyStacks() {\n var series = this, yAxis = series.yAxis, stackKey = series.stackKey || '', stacks = yAxis.stacking.stacks, processedXData = series.getColumn('x', true), stacking = series.options.stacking, stacker = series[stacking + 'Stacker'];\n var stackIndicator;\n if (stacker) { // Modifier function exists (Series.percentStacker etc.)\n [stackKey, '-' + stackKey].forEach(function (key) {\n var _a;\n var i = processedXData.length,\n x,\n stackItem,\n pointExtremes;\n while (i--) {\n x = processedXData[i];\n stackIndicator = series.getStackIndicator(stackIndicator, x, series.index, key);\n stackItem = (_a = stacks[key]) === null || _a === void 0 ? void 0 : _a[x];\n pointExtremes = stackItem === null || stackItem === void 0 ? void 0 : stackItem.points[stackIndicator.key || ''];\n if (pointExtremes) {\n stacker.call(series, pointExtremes, stackItem, i);\n }\n }\n });\n }\n}\n/**\n * Modifier function for percent stacks. Blows up the stack to 100%.\n *\n * @private\n * @function Highcharts.Series#percentStacker\n */\nfunction seriesPercentStacker(pointExtremes, stack, i) {\n var totalFactor = stack.total ? 100 / stack.total : 0;\n // Y bottom value\n pointExtremes[0] = StackingAxis_correctFloat(pointExtremes[0] * totalFactor);\n // Y value\n pointExtremes[1] = StackingAxis_correctFloat(pointExtremes[1] * totalFactor);\n this.stackedYData[i] = pointExtremes[1];\n}\n/**\n * Set grouped points in a stack-like object. When `centerInCategory` is true,\n * and `stacking` is not enabled, we need a pseudo (horizontal) stack in order\n * to handle grouping of points within the same category.\n *\n * @private\n * @function Highcharts.Series#setGroupedPoints\n * @return {void}\n */\nfunction seriesSetGroupedPoints(axis) {\n // Only series types supporting centerInCategory need to do this. That also\n // applies to resetting (#20221).\n if (this.is('column') || this.is('columnrange')) {\n if (this.options.centerInCategory &&\n // With only one series, we don't need to consider centerInCategory\n this.chart.series.length > 1) {\n seriesProto.setStackedPoints.call(this, axis, 'group');\n // After updating, if we now have proper stacks, we must delete the\n // group pseudo stacks (#14980)\n }\n else {\n axis.stacking.resetStacks();\n }\n }\n}\n/**\n * Adds series' points value to corresponding stack\n *\n * @private\n * @function Highcharts.Series#setStackedPoints\n */\nfunction seriesSetStackedPoints(axis, stackingParam) {\n var _a,\n _b;\n var type = stackingParam || this.options.stacking;\n if (!type ||\n !this.reserveSpace() ||\n // Group stacks (centerInCategory) belong on the x-axis, other stacks on\n // the y-axis.\n ({ group: 'xAxis' }[type] || 'yAxis') !== axis.coll) {\n return;\n }\n var series = this, xData = series.getColumn('x', true), yData = series.getColumn(series.pointValKey || 'y', true), stackedYData = [], yDataLength = yData.length, seriesOptions = series.options, threshold = seriesOptions.threshold || 0, stackThreshold = seriesOptions.startFromThreshold ? threshold : 0, stackOption = seriesOptions.stack, stackKey = stackingParam ?\n \"\" + series.type + \",\".concat(type) : (series.stackKey || ''), negKey = '-' + stackKey, negStacks = series.negStacks, stacking = axis.stacking, stacks = stacking.stacks, oldStacks = stacking.oldStacks;\n var stackIndicator,\n isNegative,\n stack,\n other,\n key,\n pointKey,\n i;\n stacking.stacksTouched += 1;\n // Loop over the non-null y values and read them into a local array\n for (i = 0; i < yDataLength; i++) {\n var x = xData[i] || 0,\n y = yData[i],\n yNumber = StackingAxis_isNumber(y) && y || 0;\n stackIndicator = series.getStackIndicator(stackIndicator, x, series.index);\n pointKey = stackIndicator.key || '';\n // Read stacked values into a stack based on the x value,\n // the sign of y and the stack key. Stacking is also handled for null\n // values (#739)\n isNegative = negStacks && yNumber < (stackThreshold ? 0 : threshold);\n key = isNegative ? negKey : stackKey;\n // Create empty object for this stack if it doesn't exist yet\n if (!stacks[key]) {\n stacks[key] = {};\n }\n // Initialize StackItem for this x\n if (!stacks[key][x]) {\n if ((_a = oldStacks[key]) === null || _a === void 0 ? void 0 : _a[x]) {\n stacks[key][x] = oldStacks[key][x];\n stacks[key][x].total = null;\n }\n else {\n stacks[key][x] = new Stacking_StackItem(axis, axis.options.stackLabels, !!isNegative, x, stackOption);\n }\n }\n // If the StackItem doesn't exist, create it first\n stack = stacks[key][x];\n if (y !== null) {\n stack.points[pointKey] = stack.points[series.index] = [\n StackingAxis_pick(stack.cumulative, stackThreshold)\n ];\n // Record the base of the stack\n if (!StackingAxis_defined(stack.cumulative)) {\n stack.base = pointKey;\n }\n stack.touched = stacking.stacksTouched;\n // In area charts, if there are multiple points on the same X value,\n // let the area fill the full span of those points\n if (stackIndicator.index > 0 && series.singleStacks === false) {\n stack.points[pointKey][0] = stack.points[series.index + ',' + x + ',0'][0];\n }\n // When updating to null, reset the point stack (#7493)\n }\n else {\n delete stack.points[pointKey];\n delete stack.points[series.index];\n }\n // Add value to the stack total\n var total = stack.total || 0;\n if (type === 'percent') {\n // Percent stacked column, totals are the same for the positive and\n // negative stacks\n other = isNegative ? stackKey : negKey;\n if (negStacks && ((_b = stacks[other]) === null || _b === void 0 ? void 0 : _b[x])) {\n other = stacks[other][x];\n total = other.total = Math.max(other.total || 0, total) +\n Math.abs(yNumber);\n // Percent stacked areas\n }\n else {\n total = StackingAxis_correctFloat(total + Math.abs(yNumber));\n }\n }\n else if (type === 'group') {\n // In this stack, the total is the number of valid points\n if (StackingAxis_isNumber(y)) {\n total++;\n }\n }\n else {\n total = StackingAxis_correctFloat(total + yNumber);\n }\n if (type === 'group') {\n // This point's index within the stack, pushed to stack.points[1]\n stack.cumulative = (total || 1) - 1;\n }\n else {\n stack.cumulative = StackingAxis_correctFloat(StackingAxis_pick(stack.cumulative, stackThreshold) + yNumber);\n }\n stack.total = total;\n if (y !== null) {\n stack.points[pointKey].push(stack.cumulative);\n stackedYData[i] = stack.cumulative;\n stack.hasValidPoints = true;\n }\n }\n if (type === 'percent') {\n stacking.usePercentage = true;\n }\n if (type !== 'group') {\n this.stackedYData = stackedYData; // To be used in getExtremes\n }\n // Reset old stacks\n stacking.oldStacks = {};\n}\n/* *\n *\n * Classes\n *\n * */\n/**\n * Adds stacking support to axes.\n * @private\n * @class\n */\nvar AxisAdditions = /** @class */ (function () {\n /* *\n *\n * Constructors\n *\n * */\n function AxisAdditions(axis) {\n this.oldStacks = {};\n this.stacks = {};\n this.stacksTouched = 0;\n this.axis = axis;\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Build the stacks from top down\n * @private\n */\n AxisAdditions.prototype.buildStacks = function () {\n var stacking = this,\n axis = stacking.axis,\n axisSeries = axis.series,\n isXAxis = axis.coll === 'xAxis',\n reversedStacks = axis.options.reversedStacks,\n len = axisSeries.length;\n var actualSeries,\n i;\n this.resetStacks();\n stacking.usePercentage = false;\n i = len;\n while (i--) {\n actualSeries = axisSeries[reversedStacks ? i : len - i - 1];\n if (isXAxis) {\n actualSeries.setGroupedPoints(axis);\n }\n actualSeries.setStackedPoints(axis);\n }\n // Loop up again to compute percent and stream stack\n if (!isXAxis) {\n for (i = 0; i < len; i++) {\n axisSeries[i].modifyStacks();\n }\n }\n StackingAxis_fireEvent(axis, 'afterBuildStacks');\n };\n /**\n * @private\n */\n AxisAdditions.prototype.cleanStacks = function () {\n if (this.oldStacks) {\n this.stacks = this.oldStacks;\n // Reset stacks\n StackingAxis_objectEach(this.stacks, function (type) {\n StackingAxis_objectEach(type, function (stack) {\n stack.cumulative = stack.total;\n });\n });\n }\n };\n /**\n * Set all the stacks to initial states and destroy unused ones.\n * @private\n */\n AxisAdditions.prototype.resetStacks = function () {\n var _this = this;\n StackingAxis_objectEach(this.stacks, function (type) {\n StackingAxis_objectEach(type, function (stack, x) {\n // Clean up memory after point deletion (#1044, #4320)\n if (StackingAxis_isNumber(stack.touched) &&\n stack.touched < _this.stacksTouched) {\n stack.destroy();\n delete type[x];\n // Reset stacks\n }\n else {\n stack.total = null;\n stack.cumulative = null;\n }\n });\n });\n };\n /**\n * @private\n */\n AxisAdditions.prototype.renderStackTotals = function () {\n var _a;\n var stacking = this,\n axis = stacking.axis,\n chart = axis.chart,\n renderer = chart.renderer,\n stacks = stacking.stacks,\n stackLabelsAnim = (_a = axis.options.stackLabels) === null || _a === void 0 ? void 0 : _a.animation,\n animationConfig = StackingAxis_getDeferredAnimation(chart,\n stackLabelsAnim || false),\n stackTotalGroup = stacking.stackTotalGroup = (stacking.stackTotalGroup ||\n renderer\n .g('stack-labels')\n .attr({\n zIndex: 6,\n opacity: 0\n })\n .add());\n // The plotLeft/Top will change when y axis gets wider so we need to\n // translate the stackTotalGroup at every render call. See bug #506\n // and #516\n stackTotalGroup.translate(chart.plotLeft, chart.plotTop);\n // Render each stack total\n StackingAxis_objectEach(stacks, function (type) {\n StackingAxis_objectEach(type, function (stack) {\n stack.render(stackTotalGroup);\n });\n });\n stackTotalGroup.animate({\n opacity: 1\n }, animationConfig);\n };\n return AxisAdditions;\n}());\n/* *\n *\n * Composition\n *\n * */\nvar StackingAxis;\n(function (StackingAxis) {\n /* *\n *\n * Functions\n *\n * */\n /**\n * Extends axis with stacking support.\n * @private\n */\n function compose(AxisClass, ChartClass, SeriesClass) {\n var chartProto = ChartClass.prototype,\n seriesProto = SeriesClass.prototype;\n if (!chartProto.getStacks) {\n StackingAxis_addEvent(AxisClass, 'init', onAxisInit);\n StackingAxis_addEvent(AxisClass, 'destroy', onAxisDestroy);\n chartProto.getStacks = chartGetStacks;\n seriesProto.getStackIndicator = seriesGetStackIndicator;\n seriesProto.modifyStacks = seriesModifyStacks;\n seriesProto.percentStacker = seriesPercentStacker;\n seriesProto.setGroupedPoints = seriesSetGroupedPoints;\n seriesProto.setStackedPoints = seriesSetStackedPoints;\n }\n }\n StackingAxis.compose = compose;\n})(StackingAxis || (StackingAxis = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Stacking_StackingAxis = (StackingAxis);\n\n;// ./code/es5/es-modules/Series/Line/LineSeries.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar LineSeries_extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d,\n b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d,\n b) { d.__proto__ = b; }) ||\n function (d,\n b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar LineSeries_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\n\nvar LineSeries_defined = Core_Utilities.defined, LineSeries_merge = Core_Utilities.merge, LineSeries_isObject = Core_Utilities.isObject;\n/* *\n *\n * Class\n *\n * */\n/**\n * The line series is the base type and is therefor the series base prototype.\n *\n * @private\n */\nvar LineSeries = /** @class */ (function (_super) {\n LineSeries_extends(LineSeries, _super);\n function LineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Draw the graph. Called internally when rendering line-like series\n * types. The first time it generates the `series.graph` item and\n * optionally other series-wide items like `series.area` for area\n * charts. On subsequent calls these items are updated with new\n * positions and attributes.\n *\n * @function Highcharts.Series#drawGraph\n */\n LineSeries.prototype.drawGraph = function () {\n var _this = this;\n var options = this.options,\n graphPath = (this.gappedPath || this.getGraphPath).call(this),\n styledMode = this.chart.styledMode;\n // Draw the graph\n LineSeries_spreadArray([this], this.zones, true).forEach(function (owner, i) {\n var attribs,\n graph = owner.graph;\n var verb = graph ? 'animate' : 'attr',\n dashStyle = owner.dashStyle ||\n options.dashStyle;\n if (graph) {\n graph.endX = _this.preventGraphAnimation ?\n null :\n graphPath.xMap;\n graph.animate({ d: graphPath });\n }\n else if (graphPath.length) { // #1487\n /**\n * SVG element of line-based charts. Can be used for styling\n * purposes. If zones are configured, this element will be\n * hidden and replaced by multiple zone lines, accessible\n * via `series.zones[i].graph`.\n *\n * @name Highcharts.Series#graph\n * @type {Highcharts.SVGElement|undefined}\n */\n owner.graph = graph = _this.chart.renderer\n .path(graphPath)\n .addClass('highcharts-graph' +\n (i ? \" highcharts-zone-graph-\".concat(i - 1, \" \") : ' ') +\n ((i && owner.className) || ''))\n .attr({ zIndex: 1 }) // #1069\n .add(_this.group);\n }\n if (graph && !styledMode) {\n attribs = {\n 'stroke': ((!i && options.lineColor) || // Series only\n owner.color ||\n _this.color ||\n \"#cccccc\" /* Palette.neutralColor20 */),\n 'stroke-width': options.lineWidth || 0,\n // Polygon series use filled graph\n 'fill': (_this.fillGraph && _this.color) || 'none'\n };\n // Apply dash style\n if (dashStyle) {\n attribs.dashstyle = dashStyle;\n // The reason for the `else if` is that linecaps don't mix well\n // with dashstyle. The gaps get partially filled by the\n // linecap.\n }\n else if (options.linecap !== 'square') {\n attribs['stroke-linecap'] =\n attribs['stroke-linejoin'] = 'round';\n }\n graph[verb](attribs)\n // Add shadow to normal series as well as zones\n .shadow(options.shadow &&\n // If shadow is defined, call function with\n // `filterUnits: 'userSpaceOnUse'` to avoid known\n // SVG filter bug (#19093)\n LineSeries_merge({ filterUnits: 'userSpaceOnUse' }, LineSeries_isObject(options.shadow) ? options.shadow : {}));\n }\n // Helpers for animation\n if (graph) {\n graph.startX = graphPath.xMap;\n graph.isArea = graphPath.isArea; // For arearange animation\n }\n });\n };\n // eslint-disable-next-line valid-jsdoc\n /**\n * Get the graph path.\n *\n * @private\n */\n LineSeries.prototype.getGraphPath = function (points, nullsAsZeroes, connectCliffs) {\n var series = this,\n options = series.options,\n graphPath = [],\n xMap = [];\n var gap,\n step = options.step;\n points = points || series.points;\n // Bottom of a stack is reversed\n var reversed = points.reversed;\n if (reversed) {\n points.reverse();\n }\n // Reverse the steps (#5004)\n step = {\n right: 1,\n center: 2\n }[step] || (step && 3);\n if (step && reversed) {\n step = 4 - step;\n }\n // Remove invalid points, especially in spline (#5015)\n points = this.getValidPoints(points, false, !(options.connectNulls && !nullsAsZeroes && !connectCliffs));\n // Build the line\n points.forEach(function (point, i) {\n var plotX = point.plotX,\n plotY = point.plotY,\n lastPoint = points[i - 1],\n isNull = point.isNull || typeof plotY !== 'number';\n // The path to this point from the previous\n var pathToPoint;\n if ((point.leftCliff || (lastPoint && lastPoint.rightCliff)) &&\n !connectCliffs) {\n gap = true; // ... and continue\n }\n // Line series, nullsAsZeroes is not handled\n if (isNull && !LineSeries_defined(nullsAsZeroes) && i > 0) {\n gap = !options.connectNulls;\n // Area series, nullsAsZeroes is set\n }\n else if (isNull && !nullsAsZeroes) {\n gap = true;\n }\n else {\n if (i === 0 || gap) {\n pathToPoint = [[\n 'M',\n point.plotX,\n point.plotY\n ]];\n // Generate the spline as defined in the SplineSeries object\n }\n else if (series.getPointSpline) {\n pathToPoint = [series.getPointSpline(points, point, i)];\n }\n else if (step) {\n if (step === 1) { // Right\n pathToPoint = [[\n 'L',\n lastPoint.plotX,\n plotY\n ]];\n }\n else if (step === 2) { // Center\n pathToPoint = [[\n 'L',\n (lastPoint.plotX + plotX) / 2,\n lastPoint.plotY\n ], [\n 'L',\n (lastPoint.plotX + plotX) / 2,\n plotY\n ]];\n }\n else {\n pathToPoint = [[\n 'L',\n plotX,\n lastPoint.plotY\n ]];\n }\n pathToPoint.push([\n 'L',\n plotX,\n plotY\n ]);\n }\n else {\n // Normal line to next point\n pathToPoint = [[\n 'L',\n plotX,\n plotY\n ]];\n }\n // Prepare for animation. When step is enabled, there are\n // two path nodes for each x value.\n xMap.push(point.x);\n if (step) {\n xMap.push(point.x);\n if (step === 2) { // Step = center (#8073)\n xMap.push(point.x);\n }\n }\n graphPath.push.apply(graphPath, pathToPoint);\n gap = false;\n }\n });\n graphPath.xMap = xMap;\n series.graphPath = graphPath;\n return graphPath;\n };\n /* *\n *\n * Static Functions\n *\n * */\n LineSeries.defaultOptions = LineSeries_merge(Series_Series.defaultOptions, \n /**\n * General options for all series types.\n *\n * @optionparent plotOptions.series\n */\n {\n legendSymbol: 'lineMarker'\n });\n return LineSeries;\n}(Series_Series));\nSeries_SeriesRegistry.registerSeriesType('line', LineSeries);\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Line_LineSeries = ((/* unused pure expression or super */ null && (LineSeries)));\n/* *\n *\n * API Options\n *\n * */\n/**\n * A line series displays information as a series of data points connected by\n * straight line segments.\n *\n * @sample {highcharts} highcharts/demo/line-chart/\n * Line chart\n * @sample {highstock} stock/demo/basic-line/\n * Line chart\n *\n * @extends plotOptions.series\n * @product highcharts highstock\n * @apioption plotOptions.line\n */\n/**\n * The SVG value used for the `stroke-linecap` and `stroke-linejoin`\n * of a line graph. Round means that lines are rounded in the ends and\n * bends.\n *\n * @type {Highcharts.SeriesLinecapValue}\n * @default round\n * @since 3.0.7\n * @apioption plotOptions.line.linecap\n */\n/**\n * A `line` series. If the [type](#series.line.type) option is not\n * specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends series,plotOptions.line\n * @excluding dataParser,dataURL\n * @product highcharts highstock\n * @apioption series.line\n */\n/**\n * An array of data points for the series. For the `line` series type,\n * points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n * interpreted as `y` options. The `x` values will be automatically\n * calculated, either starting at 0 and incremented by 1, or from\n * `pointStart` and `pointInterval` given in the series options. If the axis\n * has categories, these will be used. Example:\n * ```js\n * data: [0, 5, 3, 5]\n * ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n * `x,y`. If the first value is a string, it is applied as the name of the\n * point, and the `x` value is inferred.\n * ```js\n * data: [\n * [0, 1],\n * [1, 2],\n * [2, 8]\n * ]\n * ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of\n * data points exceeds the series'\n * [turboThreshold](#series.line.turboThreshold),\n * this option is not available.\n * ```js\n * data: [{\n * x: 1,\n * y: 9,\n * name: \"Point2\",\n * color: \"#00FF00\"\n * }, {\n * x: 1,\n * y: 6,\n * name: \"Point1\",\n * color: \"#FF00FF\"\n * }]\n * ```\n *\n * **Note:** In TypeScript you have to extend `PointOptionsObject` with an\n * additional declaration to allow custom data types:\n * ```ts\n * declare module `highcharts` {\n * interface PointOptionsObject {\n * custom: Record<string, (boolean|number|string)>;\n * }\n * }\n * ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n * Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n * Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n * Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n * Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Config objects\n *\n * @declare Highcharts.PointOptionsObject\n * @type {Array<number|Array<(number|string),(number|null)>|null|*>}\n * @apioption series.line.data\n */\n/**\n * An additional, individual class name for the data point's graphic\n * representation. Changes to a point's color will also be reflected in a\n * chart's legend and tooltip.\n *\n * @sample {highcharts} highcharts/css/point-series-classname\n * Series and point class name\n *\n * @type {string}\n * @since 5.0.0\n * @product highcharts gantt\n * @apioption series.line.data.className\n */\n/**\n * Individual color for the point. By default the color is pulled from\n * the global `colors` array.\n *\n * In styled mode, the `color` option doesn't take effect. Instead, use\n * `colorIndex`.\n *\n * @sample {highcharts} highcharts/point/color/\n * Mark the highest point\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @product highcharts highstock gantt\n * @apioption series.line.data.color\n */\n/**\n * A specific color index to use for the point, so its graphic representations\n * are given the class name `highcharts-color-{n}`. In styled mode this will\n * change the color of the graphic. In non-styled mode, the color is set by the\n * `fill` attribute, so the change in class name won't have a visual effect by\n * default.\n *\n * Since v11, CSS variables on the form `--highcharts-color-{n}` make changing\n * the color scheme very convenient.\n *\n * @sample {highcharts} highcharts/css/colorindex/\n * Series and point color index\n *\n * @type {number}\n * @since 5.0.0\n * @product highcharts gantt\n * @apioption series.line.data.colorIndex\n */\n/**\n * A reserved subspace to store options and values for customized functionality.\n * Here you can add additional data for your own event callbacks and formatter\n * callbacks.\n *\n * @sample {highcharts} highcharts/point/custom/\n * Point and series with custom data\n *\n * @type {Highcharts.Dictionary<*>}\n * @apioption series.line.data.custom\n */\n/**\n * Individual data label for each point. The options are the same as\n * the ones for [plotOptions.series.dataLabels](\n * #plotOptions.series.dataLabels).\n *\n * @sample highcharts/point/datalabels/\n * Show a label for the last value\n *\n * @type {*|Array<*>}\n * @declare Highcharts.DataLabelsOptions\n * @extends plotOptions.line.dataLabels\n * @product highcharts highstock gantt\n * @apioption series.line.data.dataLabels\n */\n/**\n * A description of the point to add to the screen reader information\n * about the point.\n *\n * @type {string}\n * @since 5.0.0\n * @requires modules/accessibility\n * @apioption series.line.data.description\n */\n/**\n * An id for the point. This can be used after render time to get a\n * pointer to the point object through `chart.get()`.\n *\n * @sample {highcharts} highcharts/point/id/\n * Remove an id'd point\n *\n * @type {string}\n * @since 1.2.0\n * @product highcharts highstock gantt\n * @apioption series.line.data.id\n */\n/**\n * The rank for this point's data label in case of collision. If two\n * data labels are about to overlap, only the one with the highest `labelrank`\n * will be drawn.\n *\n * @type {number}\n * @apioption series.line.data.labelrank\n */\n/**\n * The name of the point as shown in the legend, tooltip, dataLabels, etc.\n *\n * @see [xAxis.uniqueNames](#xAxis.uniqueNames)\n *\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Point names\n *\n * @type {string}\n * @apioption series.line.data.name\n */\n/**\n * Whether the data point is selected initially.\n *\n * @type {boolean}\n * @default false\n * @product highcharts highstock gantt\n * @apioption series.line.data.selected\n */\n/**\n * The x value of the point.\n *\n * For datetime axes, a number value is the timestamp in milliseconds since\n * 1970, while a date string is parsed according to the [current time zone]\n * (https://api.highcharts.com/highcharts/time.timezone) of the\n * chart. Date strings are supported since v12.\n *\n * @type {number|string}\n * @product highcharts highstock\n * @apioption series.line.data.x\n */\n/**\n * The y value of the point.\n *\n * @type {number|null}\n * @product highcharts highstock\n * @apioption series.line.data.y\n */\n/**\n * The individual point events.\n *\n * @extends plotOptions.series.point.events\n * @product highcharts highstock gantt\n * @apioption series.line.data.events\n */\n/**\n * Options for the point markers of line-like series.\n *\n * @declare Highcharts.PointMarkerOptionsObject\n * @extends plotOptions.series.marker\n * @product highcharts highstock\n * @apioption series.line.data.marker\n */\n''; // Include precedent doclets in transpiled\n\n;// ./code/es5/es-modules/Series/Area/AreaSeriesDefaults.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n * API Options\n *\n * */\n/**\n * The area series type.\n *\n * @sample {highcharts} highcharts/demo/area-chart/\n * Area chart\n * @sample {highstock} stock/demo/area/\n * Area chart\n *\n * @extends plotOptions.line\n * @excluding useOhlcData\n * @product highcharts highstock\n * @optionparent plotOptions.area\n */\nvar AreaSeriesDefaults = {\n /**\n * @see [fillColor](#plotOptions.area.fillColor)\n * @see [fillOpacity](#plotOptions.area.fillOpacity)\n *\n * @apioption plotOptions.area.color\n */\n /**\n * Fill color or gradient for the area. When `undefined`, the series'\n * `color` is used with the series' `fillOpacity`.\n *\n * In styled mode, the fill color can be set with the `.highcharts-area`\n * class name.\n *\n * @see [color](#plotOptions.area.color)\n * @see [fillOpacity](#plotOptions.area.fillOpacity)\n *\n * @sample {highcharts} highcharts/plotoptions/area-fillcolor-default/\n * Undefined by default\n * @sample {highcharts} highcharts/plotoptions/area-fillcolor-gradient/\n * Gradient\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @product highcharts highstock\n * @apioption plotOptions.area.fillColor\n */\n /**\n * Fill opacity for the area. When you set an explicit `fillColor`,\n * the `fillOpacity` is not applied. Instead, you should define the\n * opacity in the `fillColor` with an rgba color definition. The\n * `fillOpacity` setting, also the default setting, overrides the alpha\n * component of the `color` setting.\n *\n * In styled mode, the fill opacity can be set with the\n * `.highcharts-area` class name.\n *\n * @see [color](#plotOptions.area.color)\n * @see [fillColor](#plotOptions.area.fillColor)\n *\n * @sample {highcharts} highcharts/plotoptions/area-fillopacity/\n * Automatic fill color and fill opacity of 0.1\n *\n * @type {number}\n * @default {highcharts} 0.75\n * @default {highstock} 0.75\n * @product highcharts highstock\n * @apioption plotOptions.area.fillOpacity\n */\n /**\n * A separate color for the graph line. By default the line takes the\n * `color` of the series, but the lineColor setting allows setting a\n * separate color for the line without altering the `fillColor`.\n *\n * In styled mode, the line stroke can be set with the\n * `.highcharts-graph` class name.\n *\n * @sample {highcharts} highcharts/plotoptions/area-linecolor/\n * Dark gray line\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @product highcharts highstock\n * @apioption plotOptions.area.lineColor\n */\n /**\n * A separate color for the negative part of the area. Note that `zones`\n * takes precedence over the negative fill color.\n *\n * In styled mode, a negative color is set with the\n * `.highcharts-negative` class name.\n *\n * @see [negativeColor](#plotOptions.area.negativeColor)\n *\n * @sample {highcharts} highcharts/css/series-negative-color/\n * Negative color in styled mode\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @since 3.0\n * @product highcharts\n * @apioption plotOptions.area.negativeFillColor\n */\n /**\n * Whether the whole area or just the line should respond to mouseover\n * tooltips and other mouse or touch events.\n *\n * @sample {highcharts|highstock} highcharts/plotoptions/area-trackbyarea/\n * Display the tooltip when the area is hovered\n *\n * @type {boolean}\n * @default false\n * @since 1.1.6\n * @product highcharts highstock\n * @apioption plotOptions.area.trackByArea\n */\n /**\n * The Y axis value to serve as the base for the area, for\n * distinguishing between values above and below a threshold. The area\n * between the graph and the threshold is filled.\n *\n * * If a number is given, the Y axis will scale to the threshold.\n * * If `null`, the scaling behaves like a line series with fill between\n * the graph and the Y axis minimum.\n * * If `Infinity` or `-Infinity`, the area between the graph and the\n * corresponding Y axis extreme is filled (since v6.1.0).\n *\n * @sample {highcharts} highcharts/plotoptions/area-threshold/\n * A threshold of 100\n * @sample {highcharts} highcharts/plotoptions/area-threshold-infinity/\n * A threshold of Infinity\n *\n * @type {number|null}\n * @since 2.0\n * @product highcharts highstock\n */\n threshold: 0,\n legendSymbol: 'areaMarker'\n};\n/**\n * A `area` series. If the [type](#series.area.type) option is not\n * specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends series,plotOptions.area\n * @excluding dataParser, dataURL, useOhlcData\n * @product highcharts highstock\n * @apioption series.area\n */\n/**\n * @see [fillColor](#series.area.fillColor)\n * @see [fillOpacity](#series.area.fillOpacity)\n *\n * @apioption series.area.color\n */\n/**\n * An array of data points for the series. For the `area` series type,\n * points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n * interpreted as `y` options. The `x` values will be automatically\n * calculated, either starting at 0 and incremented by 1, or from\n * `pointStart` * and `pointInterval` given in the series options. If the\n * axis has categories, these will be used. Example:\n * ```js\n * data: [0, 5, 3, 5]\n * ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n * `x,y`. If the first value is a string, it is applied as the name of the\n * point, and the `x` value is inferred.\n * ```js\n * data: [\n * [0, 9],\n * [1, 7],\n * [2, 6]\n * ]\n * ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of\n * data points exceeds the series'\n * [turboThreshold](#series.area.turboThreshold), this option is not\n * available.\n * ```js\n * data: [{\n * x: 1,\n * y: 9,\n * name: \"Point2\",\n * color: \"#00FF00\"\n * }, {\n * x: 1,\n * y: 6,\n * name: \"Point1\",\n * color: \"#FF00FF\"\n * }]\n * ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n * Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n * Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n * Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n * Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Config objects\n *\n * @type {Array<number|Array<(number|string),(number|null)>|null|*>}\n * @extends series.line.data\n * @product highcharts highstock\n * @apioption series.area.data\n */\n/**\n * @see [color](#series.area.color)\n * @see [fillOpacity](#series.area.fillOpacity)\n *\n * @apioption series.area.fillColor\n */\n/**\n * @see [color](#series.area.color)\n * @see [fillColor](#series.area.fillColor)\n *\n * @default {highcharts} 0.75\n * @default {highstock} 0.75\n * @apioption series.area.fillOpacity\n */\n''; // Adds doclets above to transpiled\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Area_AreaSeriesDefaults = (AreaSeriesDefaults);\n\n;// ./code/es5/es-modules/Series/Area/AreaSeries.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar AreaSeries_extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d,\n b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d,\n b) { d.__proto__ = b; }) ||\n function (d,\n b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar AreaSeries_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\n\nvar AreaSeries_LineSeries = Series_SeriesRegistry.seriesTypes.line;\n\nvar AreaSeries_extend = Core_Utilities.extend, AreaSeries_merge = Core_Utilities.merge, AreaSeries_objectEach = Core_Utilities.objectEach, AreaSeries_pick = Core_Utilities.pick;\n/* *\n *\n * Class\n *\n * */\n/**\n * Area series type.\n *\n * @private\n * @class\n * @name AreaSeries\n *\n * @augments LineSeries\n */\nvar AreaSeries = /** @class */ (function (_super) {\n AreaSeries_extends(AreaSeries, _super);\n function AreaSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /**\n * Draw the graph and the underlying area. This method calls the Series\n * base function and adds the area. The areaPath is calculated in the\n * getSegmentPath method called from Series.prototype.drawGraph.\n * @private\n */\n AreaSeries.prototype.drawGraph = function () {\n var _this = this;\n // Define or reset areaPath\n this.areaPath = [];\n // Call the base method\n _super.prototype.drawGraph.apply(this);\n // Define local variables\n var _a = this,\n areaPath = _a.areaPath,\n options = _a.options;\n AreaSeries_spreadArray([this], this.zones, true).forEach(function (owner, i) {\n var _a;\n var attribs = {},\n fillColor = owner.fillColor || options.fillColor;\n var area = owner.area;\n var verb = area ? 'animate' : 'attr';\n // Create or update the area\n if (area) { // Update\n area.endX = _this.preventGraphAnimation ?\n null :\n areaPath.xMap;\n area.animate({ d: areaPath });\n }\n else { // Create\n attribs.zIndex = 0; // #1069\n /**\n * SVG element of area-based charts. Can be used for styling\n * purposes. If zones are configured, this element will be\n * hidden and replaced by multiple zone areas, accessible\n * via `series.zones[i].area`.\n *\n * @name Highcharts.Series#area\n * @type {Highcharts.SVGElement|undefined}\n */\n area = owner.area = _this.chart.renderer\n .path(areaPath)\n .addClass('highcharts-area' +\n (i ? \" highcharts-zone-area-\".concat(i - 1, \" \") : ' ') +\n ((i && owner.className) || ''))\n .add(_this.group);\n area.isArea = true;\n }\n if (!_this.chart.styledMode) {\n // If there is fillColor defined for the area, set it.\n // Otherwise, we set it to the zone/series color and add\n // fill-opacity (#18939).\n attribs.fill = fillColor || owner.color || _this.color;\n attribs['fill-opacity'] = fillColor ?\n 1 : ((_a = options.fillOpacity) !== null && _a !== void 0 ? _a : 0.75);\n // Allow clicking through the area if sticky tracking is true\n // (#18744)\n area.css({\n pointerEvents: _this.stickyTracking ? 'none' : 'auto'\n });\n }\n area[verb](attribs);\n area.startX = areaPath.xMap;\n area.shiftUnit = options.step ? 2 : 1;\n });\n };\n /**\n * @private\n */\n AreaSeries.prototype.getGraphPath = function (points) {\n var getGraphPath = AreaSeries_LineSeries.prototype.getGraphPath, options = this.options, stacking = options.stacking, yAxis = this.yAxis, bottomPoints = [], graphPoints = [], seriesIndex = this.index, stacks = yAxis.stacking.stacks[this.stackKey], threshold = options.threshold, translatedThreshold = Math.round(// #10909\n yAxis.getThreshold(options.threshold)), connectNulls = AreaSeries_pick(// #10574\n options.connectNulls, stacking === 'percent'), \n // To display null points in underlying stacked series, this\n // series graph must be broken, and the area also fall down to\n // fill the gap left by the null point. #2069\n addDummyPoints = function (i, otherI, side) {\n var point = points[i], stackedValues = stacking &&\n stacks[point.x].points[seriesIndex], nullVal = point[side + 'Null'] || 0, cliffVal = point[side + 'Cliff'] || 0;\n var top,\n bottom,\n isNull = true;\n if (cliffVal || nullVal) {\n top = (nullVal ?\n stackedValues[0] :\n stackedValues[1]) + cliffVal;\n bottom = stackedValues[0] + cliffVal;\n isNull = !!nullVal;\n }\n else if (!stacking &&\n points[otherI] &&\n points[otherI].isNull) {\n top = bottom = threshold;\n }\n // Add to the top and bottom line of the area\n if (typeof top !== 'undefined') {\n graphPoints.push({\n plotX: plotX,\n plotY: top === null ?\n translatedThreshold :\n yAxis.getThreshold(top),\n isNull: isNull,\n isCliff: true\n });\n bottomPoints.push({\n plotX: plotX,\n plotY: bottom === null ?\n translatedThreshold :\n yAxis.getThreshold(bottom),\n doCurve: false // #1041, gaps in areaspline areas\n });\n }\n };\n var plotX,\n isNull,\n yBottom;\n // Find what points to use\n points = points || this.points;\n // Fill in missing points\n if (stacking) {\n points = this.getStackPoints(points);\n }\n for (var i = 0, iEnd = points.length; i < iEnd; ++i) {\n // Reset after series.update of stacking property (#12033)\n if (!stacking) {\n points[i].leftCliff = points[i].rightCliff =\n points[i].leftNull = points[i].rightNull = void 0;\n }\n isNull = points[i].isNull;\n plotX = AreaSeries_pick(points[i].rectPlotX, points[i].plotX);\n yBottom = stacking ?\n AreaSeries_pick(points[i].yBottom, translatedThreshold) :\n translatedThreshold;\n if (!isNull || connectNulls) {\n if (!connectNulls) {\n addDummyPoints(i, i - 1, 'left');\n }\n // Skip null point when stacking is false and connectNulls\n // true\n if (!(isNull && !stacking && connectNulls)) {\n graphPoints.push(points[i]);\n bottomPoints.push({\n x: i,\n plotX: plotX,\n plotY: yBottom\n });\n }\n if (!connectNulls) {\n addDummyPoints(i, i + 1, 'right');\n }\n }\n }\n var topPath = getGraphPath.call(this,\n graphPoints,\n true,\n true);\n bottomPoints.reversed = true;\n var bottomPath = getGraphPath.call(this,\n bottomPoints,\n true,\n true);\n var firstBottomPoint = bottomPath[0];\n if (firstBottomPoint && firstBottomPoint[0] === 'M') {\n bottomPath[0] = ['L', firstBottomPoint[1], firstBottomPoint[2]];\n }\n var areaPath = topPath.concat(bottomPath);\n if (areaPath.length) {\n areaPath.push(['Z']);\n }\n // TODO: don't set leftCliff and rightCliff when connectNulls?\n var graphPath = getGraphPath\n .call(this,\n graphPoints,\n false,\n connectNulls);\n if (this.chart.series.length > 1 &&\n stacking &&\n graphPoints.some(function (point) { return point.isCliff; })) {\n areaPath.hasStackedCliffs = graphPath.hasStackedCliffs = true;\n }\n areaPath.xMap = topPath.xMap;\n this.areaPath = areaPath;\n return graphPath;\n };\n /**\n * Return an array of stacked points, where null and missing points are\n * replaced by dummy points in order for gaps to be drawn correctly in\n * stacks.\n * @private\n */\n AreaSeries.prototype.getStackPoints = function (points) {\n var series = this,\n segment = [],\n keys = [],\n xAxis = this.xAxis,\n yAxis = this.yAxis,\n stack = yAxis.stacking.stacks[this.stackKey],\n pointMap = {},\n yAxisSeries = yAxis.series,\n seriesLength = yAxisSeries.length,\n upOrDown = yAxis.options.reversedStacks ? 1 : -1,\n seriesIndex = yAxisSeries.indexOf(series);\n points = points || this.points;\n if (this.options.stacking) {\n for (var i = 0; i < points.length; i++) {\n // Reset after point update (#7326)\n points[i].leftNull = points[i].rightNull = void 0;\n // Create a map where we can quickly look up the points by\n // their X values.\n pointMap[points[i].x] = points[i];\n }\n // Sort the keys (#1651)\n AreaSeries_objectEach(stack, function (stackX, x) {\n // Nulled after switching between\n // grouping and not (#1651, #2336)\n if (stackX.total !== null) {\n keys.push(x);\n }\n });\n keys.sort(function (a, b) {\n return a - b;\n });\n var visibleSeries_1 = yAxisSeries.map(function (s) { return s.visible; });\n keys.forEach(function (x, idx) {\n var y = 0,\n stackPoint,\n stackedValues;\n if (pointMap[x] && !pointMap[x].isNull) {\n segment.push(pointMap[x]);\n // Find left and right cliff. -1 goes left, 1 goes\n // right.\n [-1, 1].forEach(function (direction) {\n var nullName = direction === 1 ?\n 'rightNull' :\n 'leftNull',\n cliffName = direction === 1 ?\n 'rightCliff' :\n 'leftCliff',\n otherStack = stack[keys[idx + direction]];\n var cliff = 0;\n // If there is a stack next to this one,\n // to the left or to the right...\n if (otherStack) {\n var i = seriesIndex;\n // Can go either up or down,\n // depending on reversedStacks\n while (i >= 0 && i < seriesLength) {\n var si = yAxisSeries[i].index;\n stackPoint = otherStack.points[si];\n if (!stackPoint) {\n // If the next point in this series is\n // missing, mark the point with\n // point.leftNull or point.rightNull = true.\n if (si === series.index) {\n pointMap[x][nullName] = true;\n // If there are missing points in the next\n // stack in any of the series below this\n // one, we need to subtract the missing\n // values and add a hiatus to the left or\n // right.\n }\n else if (visibleSeries_1[i]) {\n stackedValues = stack[x].points[si];\n if (stackedValues) {\n cliff -= (stackedValues[1] -\n stackedValues[0]);\n }\n }\n }\n // When reversedStacks is true, loop up,\n // else loop down\n i += upOrDown;\n }\n }\n pointMap[x][cliffName] = cliff;\n });\n // There is no point for this X value in this series, so we\n // insert a dummy point in order for the areas to be drawn\n // correctly.\n }\n else {\n // Loop down the stack to find the series below this\n // one that has a value (#1991)\n var i = seriesIndex;\n while (i >= 0 && i < seriesLength) {\n var si = yAxisSeries[i].index;\n stackPoint = stack[x].points[si];\n if (stackPoint) {\n y = stackPoint[1];\n break;\n }\n // When reversedStacks is true, loop up, else loop\n // down\n i += upOrDown;\n }\n y = AreaSeries_pick(y, 0);\n y = yAxis.translate(// #6272\n y, 0, 1, 0, 1);\n segment.push({\n isNull: true,\n plotX: xAxis.translate(// #6272\n x, 0, 0, 0, 1),\n x: x,\n plotY: y,\n yBottom: y\n });\n }\n });\n }\n return segment;\n };\n /* *\n *\n * Static Properties\n *\n * */\n AreaSeries.defaultOptions = AreaSeries_merge(AreaSeries_LineSeries.defaultOptions, Area_AreaSeriesDefaults);\n return AreaSeries;\n}(AreaSeries_LineSeries));\nAreaSeries_extend(AreaSeries.prototype, {\n singleStacks: false\n});\nSeries_SeriesRegistry.registerSeriesType('area', AreaSeries);\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Area_AreaSeries = ((/* unused pure expression or super */ null && (AreaSeries)));\n\n;// ./code/es5/es-modules/Series/Spline/SplineSeries.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar SplineSeries_extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d,\n b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d,\n b) { d.__proto__ = b; }) ||\n function (d,\n b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\nvar SplineSeries_LineSeries = Series_SeriesRegistry.seriesTypes.line;\n\nvar SplineSeries_merge = Core_Utilities.merge, SplineSeries_pick = Core_Utilities.pick;\n/* *\n *\n * Class\n *\n * */\n/**\n * Spline series type.\n *\n * @private\n */\nvar SplineSeries = /** @class */ (function (_super) {\n SplineSeries_extends(SplineSeries, _super);\n function SplineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /**\n * Get the spline segment from a given point's previous neighbour to the\n * given point.\n *\n * @private\n * @function Highcharts.seriesTypes.spline#getPointSpline\n */\n SplineSeries.prototype.getPointSpline = function (points, point, i) {\n var \n // 1 means control points midway between points, 2 means 1/3\n // from the point, 3 is 1/4 etc\n smoothing = 1.5, denom = smoothing + 1, plotX = point.plotX || 0, plotY = point.plotY || 0, lastPoint = points[i - 1], nextPoint = points[i + 1];\n var leftContX,\n leftContY,\n rightContX,\n rightContY;\n /**\n * @private\n */\n function doCurve(otherPoint) {\n return otherPoint &&\n !otherPoint.isNull &&\n otherPoint.doCurve !== false &&\n // #6387, area splines next to null:\n !point.isCliff;\n }\n // Find control points\n if (doCurve(lastPoint) && doCurve(nextPoint)) {\n var lastX = lastPoint.plotX || 0,\n lastY = lastPoint.plotY || 0,\n nextX = nextPoint.plotX || 0,\n nextY = nextPoint.plotY || 0;\n var correction = 0;\n leftContX = (smoothing * plotX + lastX) / denom;\n leftContY = (smoothing * plotY + lastY) / denom;\n rightContX = (smoothing * plotX + nextX) / denom;\n rightContY = (smoothing * plotY + nextY) / denom;\n // Have the two control points make a straight line through main\n // point\n if (rightContX !== leftContX) { // #5016, division by zero\n correction = (((rightContY - leftContY) *\n (rightContX - plotX)) /\n (rightContX - leftContX) + plotY - rightContY);\n }\n leftContY += correction;\n rightContY += correction;\n // To prevent false extremes, check that control points are\n // between neighbouring points' y values\n if (leftContY > lastY && leftContY > plotY) {\n leftContY = Math.max(lastY, plotY);\n // Mirror of left control point\n rightContY = 2 * plotY - leftContY;\n }\n else if (leftContY < lastY && leftContY < plotY) {\n leftContY = Math.min(lastY, plotY);\n rightContY = 2 * plotY - leftContY;\n }\n if (rightContY > nextY && rightContY > plotY) {\n rightContY = Math.max(nextY, plotY);\n leftContY = 2 * plotY - rightContY;\n }\n else if (rightContY < nextY && rightContY < plotY) {\n rightContY = Math.min(nextY, plotY);\n leftContY = 2 * plotY - rightContY;\n }\n // Record for drawing in next point\n point.rightContX = rightContX;\n point.rightContY = rightContY;\n // Visualize control points for debugging\n /*\n if (leftContX) {\n this.chart.renderer\n .circle(\n leftContX + this.chart.plotLeft,\n leftContY + this.chart.plotTop,\n 2\n )\n .attr({\n stroke: 'red',\n 'stroke-width': 2,\n fill: 'none',\n zIndex: 9\n })\n .add();\n this.chart.renderer\n .path([['M', leftContX + this.chart.plotLeft,\n leftContY + this.chart.plotTop\n ], ['L', plotX + this.chart.plotLeft,\n plotY + this.chart.plotTop\n ]])\n .attr({\n stroke: 'red',\n 'stroke-width': 2,\n zIndex: 9\n })\n .add();\n }\n if (rightContX) {\n this.chart.renderer\n .circle(\n rightContX + this.chart.plotLeft,\n rightContY + this.chart.plotTop,\n 2\n )\n .attr({\n stroke: 'green',\n 'stroke-width': 2,\n fill: 'none',\n zIndex: 9\n })\n .add();\n this.chart.renderer\n .path([[\n 'M', rightContX + this.chart.plotLeft,\n rightContY + this.chart.plotTop\n ], [\n 'L', plotX + this.chart.plotLeft,\n plotY + this.chart.plotTop\n ]])\n .attr({\n stroke: 'green',\n 'stroke-width': 2,\n zIndex: 9\n })\n .add();\n }\n // */\n point.controlPoints = {\n low: [leftContX, leftContY],\n high: [rightContX, rightContY]\n };\n }\n var ret = [\n 'C',\n SplineSeries_pick(lastPoint.rightContX,\n lastPoint.plotX, 0),\n SplineSeries_pick(lastPoint.rightContY,\n lastPoint.plotY, 0),\n SplineSeries_pick(leftContX,\n plotX, 0),\n SplineSeries_pick(leftContY,\n plotY, 0),\n plotX,\n plotY\n ];\n // Reset for updating series later\n lastPoint.rightContX = lastPoint.rightContY = void 0;\n return ret;\n };\n /* *\n *\n * Static Properties\n *\n * */\n /**\n * A spline series is a special type of line series, where the segments\n * between the data points are smoothed.\n *\n * @sample {highcharts} highcharts/demo/spline-irregular-time/\n * Spline chart\n * @sample {highstock} stock/demo/spline/\n * Spline chart\n *\n * @extends plotOptions.series\n * @excluding step, boostThreshold, boostBlending\n * @product highcharts highstock\n * @optionparent plotOptions.spline\n */\n SplineSeries.defaultOptions = SplineSeries_merge(SplineSeries_LineSeries.defaultOptions);\n return SplineSeries;\n}(SplineSeries_LineSeries));\nSeries_SeriesRegistry.registerSeriesType('spline', SplineSeries);\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Spline_SplineSeries = (SplineSeries);\n/* *\n *\n * API Options\n *\n * */\n/**\n * A `spline` series. If the [type](#series.spline.type) option is\n * not specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends series,plotOptions.spline\n * @excluding dataParser, dataURL, step, boostThreshold, boostBlending\n * @product highcharts highstock\n * @apioption series.spline\n */\n/**\n * An array of data points for the series. For the `spline` series type,\n * points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n * interpreted as `y` options. The `x` values will be automatically\n * calculated, either starting at 0 and incremented by 1, or from\n * `pointStart` and `pointInterval` given in the series options. If the axis\n * has categories, these will be used. Example:\n * ```js\n * data: [0, 5, 3, 5]\n * ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n * `x,y`. If the first value is a string, it is applied as the name of the\n * point, and the `x` value is inferred.\n * ```js\n * data: [\n * [0, 9],\n * [1, 2],\n * [2, 8]\n * ]\n * ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of\n * data points exceeds the series'\n * [turboThreshold](#series.spline.turboThreshold),\n * this option is not available.\n * ```js\n * data: [{\n * x: 1,\n * y: 9,\n * name: \"Point2\",\n * color: \"#00FF00\"\n * }, {\n * x: 1,\n * y: 0,\n * name: \"Point1\",\n * color: \"#FF00FF\"\n * }]\n * ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n * Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n * Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n * Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n * Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Config objects\n *\n * @type {Array<number|Array<(number|string),(number|null)>|null|*>}\n * @extends series.line.data\n * @product highcharts highstock\n * @apioption series.spline.data\n */\n''; // Adds doclets above intro transpiled\n\n;// ./code/es5/es-modules/Series/AreaSpline/AreaSplineSeries.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar AreaSplineSeries_extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d,\n b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d,\n b) { d.__proto__ = b; }) ||\n function (d,\n b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\nvar _a = Series_SeriesRegistry.seriesTypes, AreaSplineSeries_AreaSeries = _a.area, areaProto = _a.area.prototype;\n\nvar AreaSplineSeries_extend = Core_Utilities.extend, AreaSplineSeries_merge = Core_Utilities.merge;\n/* *\n *\n * Class\n *\n * */\n/**\n * AreaSpline series type.\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.areaspline\n *\n * @augments Highcharts.Series\n */\nvar AreaSplineSeries = /** @class */ (function (_super) {\n AreaSplineSeries_extends(AreaSplineSeries, _super);\n function AreaSplineSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /* *\n *\n * Static Properties\n *\n * */\n AreaSplineSeries.defaultOptions = AreaSplineSeries_merge(Spline_SplineSeries.defaultOptions, AreaSplineSeries_AreaSeries.defaultOptions);\n return AreaSplineSeries;\n}(Spline_SplineSeries));\nAreaSplineSeries_extend(AreaSplineSeries.prototype, {\n getGraphPath: areaProto.getGraphPath,\n getStackPoints: areaProto.getStackPoints,\n drawGraph: areaProto.drawGraph\n});\nSeries_SeriesRegistry.registerSeriesType('areaspline', AreaSplineSeries);\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var AreaSpline_AreaSplineSeries = ((/* unused pure expression or super */ null && (AreaSplineSeries)));\n/* *\n *\n * API Options\n *\n * */\n/**\n * The area spline series is an area series where the graph between the\n * points is smoothed into a spline.\n *\n * @sample {highcharts} highcharts/demo/areaspline/\n * Area spline chart\n * @sample {highstock} stock/demo/areaspline/\n * Area spline chart\n *\n * @extends plotOptions.area\n * @excluding step, boostThreshold, boostBlending\n * @product highcharts highstock\n * @apioption plotOptions.areaspline\n */\n/**\n * @see [fillColor](#plotOptions.areaspline.fillColor)\n * @see [fillOpacity](#plotOptions.areaspline.fillOpacity)\n *\n * @apioption plotOptions.areaspline.color\n */\n/**\n * @see [color](#plotOptions.areaspline.color)\n * @see [fillOpacity](#plotOptions.areaspline.fillOpacity)\n *\n * @apioption plotOptions.areaspline.fillColor\n */\n/**\n * @see [color](#plotOptions.areaspline.color)\n * @see [fillColor](#plotOptions.areaspline.fillColor)\n *\n * @default 0.75\n * @apioption plotOptions.areaspline.fillOpacity\n */\n/**\n * A `areaspline` series. If the [type](#series.areaspline.type) option\n * is not specified, it is inherited from [chart.type](#chart.type).\n *\n *\n * @extends series,plotOptions.areaspline\n * @excluding dataParser, dataURL, step, boostThreshold, boostBlending\n * @product highcharts highstock\n * @apioption series.areaspline\n */\n/**\n * @see [fillColor](#series.areaspline.fillColor)\n * @see [fillOpacity](#series.areaspline.fillOpacity)\n *\n * @apioption series.areaspline.color\n */\n/**\n * An array of data points for the series. For the `areaspline` series\n * type, points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n * interpreted as `y` options. The `x` values will be automatically\n * calculated, either starting at 0 and incremented by 1, or from\n * `pointStart` and `pointInterval` given in the series options. If the axis\n * has categories, these will be used. Example:\n * ```js\n * data: [0, 5, 3, 5]\n * ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n * `x,y`. If the first value is a string, it is applied as the name of the\n * point, and the `x` value is inferred.\n * ```js\n * data: [\n * [0, 10],\n * [1, 9],\n * [2, 3]\n * ]\n * ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of\n * data points exceeds the series'\n * [turboThreshold](#series.areaspline.turboThreshold), this option is not\n * available.\n * ```js\n * data: [{\n * x: 1,\n * y: 4,\n * name: \"Point2\",\n * color: \"#00FF00\"\n * }, {\n * x: 1,\n * y: 4,\n * name: \"Point1\",\n * color: \"#FF00FF\"\n * }]\n * ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n * Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n * Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n * Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n * Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Config objects\n *\n * @type {Array<number|Array<(number|string),(number|null)>|null|*>}\n * @extends series.line.data\n * @product highcharts highstock\n * @apioption series.areaspline.data\n */\n/**\n * @see [color](#series.areaspline.color)\n * @see [fillOpacity](#series.areaspline.fillOpacity)\n *\n * @apioption series.areaspline.fillColor\n */\n/**\n * @see [color](#series.areaspline.color)\n * @see [fillColor](#series.areaspline.fillColor)\n *\n * @default 0.75\n * @apioption series.areaspline.fillOpacity\n */\n''; // Adds doclets above into transpiled\n\n;// ./code/es5/es-modules/Series/Column/ColumnSeriesDefaults.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n * API Options\n *\n * */\n/**\n * Column series display one column per value along an X axis.\n *\n * @sample {highcharts} highcharts/demo/column-basic/\n * Column chart\n * @sample {highstock} stock/demo/column/\n * Column chart\n *\n * @extends plotOptions.line\n * @excluding connectEnds, connectNulls, gapSize, gapUnit, linecap,\n * lineWidth, marker, step, useOhlcData\n * @product highcharts highstock\n * @optionparent plotOptions.column\n */\nvar ColumnSeriesDefaults = {\n /**\n * The corner radius of the border surrounding each column or bar. A number\n * signifies pixels. A percentage string, like for example `50%`, signifies\n * a relative size. For columns this is relative to the column width, for\n * pies it is relative to the radius and the inner radius.\n *\n * @sample {highcharts} highcharts/plotoptions/column-borderradius/\n * Rounded columns\n * @sample highcharts/plotoptions/series-border-radius\n * Column and pie with rounded border\n *\n * @type {number|string|Highcharts.BorderRadiusOptionsObject}\n * @product highcharts highstock gantt\n */\n borderRadius: 3,\n /**\n * When using automatic point colors pulled from the global\n * [colors](colors) or series-specific\n * [plotOptions.column.colors](series.colors) collections, this option\n * determines whether the chart should receive one color per series or\n * one color per point.\n *\n * In styled mode, the `colors` or `series.colors` arrays are not\n * supported, and instead this option gives the points individual color\n * class names on the form `highcharts-color-{n}`.\n *\n * @see [series colors](#plotOptions.column.colors)\n *\n * @sample {highcharts} highcharts/plotoptions/column-colorbypoint-false/\n * False by default\n * @sample {highcharts} highcharts/plotoptions/column-colorbypoint-true/\n * True\n *\n * @type {boolean}\n * @default false\n * @since 2.0\n * @product highcharts highstock gantt\n * @apioption plotOptions.column.colorByPoint\n */\n /**\n * A series specific or series type specific color set to apply instead\n * of the global [colors](#colors) when [colorByPoint](\n * #plotOptions.column.colorByPoint) is true.\n *\n * @type {Array<Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject>}\n * @since 3.0\n * @product highcharts highstock gantt\n * @apioption plotOptions.column.colors\n */\n /**\n * When `true`, the columns will center in the category, ignoring null\n * or missing points. When `false`, space will be reserved for null or\n * missing points.\n *\n * @sample {highcharts} highcharts/series-column/centerincategory/\n * Center in category\n * @sample {highcharts} highcharts/series/stack-centerincategory/\n * Center in category, stacked and grouped\n *\n * @since 8.0.1\n * @product highcharts highstock gantt\n */\n centerInCategory: false,\n /**\n * Padding between each value groups, in x axis units.\n *\n * @sample {highcharts} highcharts/plotoptions/column-grouppadding-default/\n * 0.2 by default\n * @sample {highcharts} highcharts/plotoptions/column-grouppadding-none/\n * No group padding - all columns are evenly spaced\n *\n * @product highcharts highstock gantt\n */\n groupPadding: 0.2,\n /**\n * Whether to group non-stacked columns or to let them render\n * independent of each other. Non-grouped columns will be laid out\n * individually and overlap each other.\n *\n * @sample {highcharts} highcharts/plotoptions/column-grouping-false/\n * Grouping disabled\n * @sample {highstock} highcharts/plotoptions/column-grouping-false/\n * Grouping disabled\n *\n * @type {boolean}\n * @default true\n * @since 2.3.0\n * @product highcharts highstock gantt\n * @apioption plotOptions.column.grouping\n */\n /** @ignore-option */\n marker: null, // Point options are specified in the base options\n /**\n * The maximum allowed pixel width for a column, translated to the\n * height of a bar in a bar chart. This prevents the columns from\n * becoming too wide when there is a small number of points in the\n * chart.\n *\n * @see [pointWidth](#plotOptions.column.pointWidth)\n *\n * @sample {highcharts} highcharts/plotoptions/column-maxpointwidth-20/\n * Limited to 50\n * @sample {highstock} highcharts/plotoptions/column-maxpointwidth-20/\n * Limited to 50\n *\n * @type {number}\n * @since 4.1.8\n * @product highcharts highstock gantt\n * @apioption plotOptions.column.maxPointWidth\n */\n /**\n * Padding between each column or bar, in x axis units.\n *\n * @sample {highcharts} highcharts/plotoptions/column-pointpadding-default/\n * 0.1 by default\n * @sample {highcharts} highcharts/plotoptions/column-pointpadding-025/\n * 0.25\n * @sample {highcharts} highcharts/plotoptions/column-pointpadding-none/\n * 0 for tightly packed columns\n *\n * @product highcharts highstock gantt\n */\n pointPadding: 0.1,\n /**\n * A pixel value specifying a fixed width for each column or bar point.\n * When set to `undefined`, the width is calculated from the\n * `pointPadding` and `groupPadding`. The width effects the dimension\n * that is not based on the point value. For column series it is the\n * horizontal length and for bar series it is the vertical length.\n *\n * @see [maxPointWidth](#plotOptions.column.maxPointWidth)\n *\n * @sample {highcharts} highcharts/plotoptions/column-pointwidth-20/\n * 20px wide columns regardless of chart width or the amount of\n * data points\n *\n * @type {number}\n * @since 1.2.5\n * @product highcharts highstock gantt\n * @apioption plotOptions.column.pointWidth\n */\n /**\n * A pixel value specifying a fixed width for the column or bar.\n * Overrides pointWidth on the series.\n *\n * @see [series.pointWidth](#plotOptions.column.pointWidth)\n *\n * @type {number}\n * @default undefined\n * @since 7.0.0\n * @product highcharts highstock gantt\n * @apioption series.column.data.pointWidth\n */\n /**\n * The minimal height for a column or width for a bar. By default,\n * 0 values are not shown. To visualize a 0 (or close to zero) point,\n * set the minimal point length to a pixel value like 3\\. In stacked\n * column charts, minPointLength might not be respected for tightly\n * packed values.\n *\n * @sample {highcharts} highcharts/plotoptions/column-minpointlength/\n * Zero base value\n * @sample {highcharts} highcharts/plotoptions/column-minpointlength-pos-and-neg/\n * Positive and negative close to zero values\n *\n * @product highcharts highstock gantt\n */\n minPointLength: 0,\n /**\n * When the series contains less points than the crop threshold, all\n * points are drawn, event if the points fall outside the visible plot\n * area at the current zoom. The advantage of drawing all points\n * (including markers and columns), is that animation is performed on\n * updates. On the other hand, when the series contains more points than\n * the crop threshold, the series data is cropped to only contain points\n * that fall within the plot area. The advantage of cropping away\n * invisible points is to increase performance on large series.\n *\n * @product highcharts highstock gantt\n */\n cropThreshold: 50,\n /**\n * The X axis range that each point is valid for. This determines the\n * width of the column. On a categorized axis, the range will be 1\n * by default (one category unit). On linear and datetime axes, the\n * range will be computed as the distance between the two closest data\n * points.\n *\n * The default `null` means it is computed automatically, but this\n * option can be used to override the automatic value.\n *\n * This option is set by default to 1 if data sorting is enabled.\n *\n * @sample {highcharts} highcharts/plotoptions/column-pointrange/\n * Set the point range to one day on a data set with one week\n * between the points\n *\n * @type {number|null}\n * @since 2.3\n * @product highcharts highstock gantt\n */\n pointRange: null,\n states: {\n /**\n * Options for the hovered point. These settings override the normal\n * state options when a point is moused over or touched.\n *\n * @extends plotOptions.series.states.hover\n * @excluding halo, lineWidth, lineWidthPlus, marker\n * @product highcharts highstock gantt\n */\n hover: {\n /** @ignore-option */\n halo: false,\n /**\n * A specific border color for the hovered point. Defaults to\n * inherit the normal state border color.\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @product highcharts gantt\n * @apioption plotOptions.column.states.hover.borderColor\n */\n /**\n * A specific color for the hovered point.\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @product highcharts gantt\n * @apioption plotOptions.column.states.hover.color\n */\n /**\n * How much to brighten the point on interaction. Requires the\n * main color to be defined in hex or rgb(a) format.\n *\n * In styled mode, the hover brightening is by default replaced\n * with a fill-opacity set in the `.highcharts-point:hover`\n * rule.\n *\n * @sample {highcharts} highcharts/plotoptions/column-states-hover-brightness/\n * Brighten by 0.5\n *\n * @product highcharts highstock gantt\n */\n brightness: 0.1\n },\n /**\n * Options for the selected point. These settings override the\n * normal state options when a point is selected.\n *\n * @extends plotOptions.series.states.select\n * @excluding halo, lineWidth, lineWidthPlus, marker\n * @product highcharts highstock gantt\n */\n select: {\n /**\n * A specific color for the selected point.\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @default #cccccc\n * @product highcharts highstock gantt\n */\n color: \"#cccccc\" /* Palette.neutralColor20 */,\n /**\n * A specific border color for the selected point.\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @default #000000\n * @product highcharts highstock gantt\n */\n borderColor: \"#000000\" /* Palette.neutralColor100 */\n }\n },\n dataLabels: {\n align: void 0,\n verticalAlign: void 0,\n /**\n * The y position offset of the label relative to the point in\n * pixels.\n *\n * @type {number}\n */\n y: void 0\n },\n // False doesn't work well: https://jsfiddle.net/highcharts/hz8fopan/14/\n /** @ignore-option */\n startFromThreshold: true,\n stickyTracking: false,\n tooltip: {\n distance: 6\n },\n /**\n * The Y axis value to serve as the base for the columns, for\n * distinguishing between values above and below a threshold. If `null`,\n * the columns extend from the padding Y axis minimum.\n *\n * @type {number|null}\n * @since 2.0\n * @product highcharts\n */\n threshold: 0,\n /**\n * The width of the border surrounding each column or bar. Defaults to\n * `1` when there is room for a border, but to `0` when the columns are\n * so dense that a border would cover the next column.\n *\n * In styled mode, the stroke width can be set with the\n * `.highcharts-point` rule.\n *\n * @sample {highcharts} highcharts/plotoptions/column-borderwidth/\n * 2px black border\n *\n * @type {number}\n * @default undefined\n * @product highcharts highstock gantt\n * @apioption plotOptions.column.borderWidth\n */\n /**\n * The color of the border surrounding each column or bar.\n *\n * In styled mode, the border stroke can be set with the\n * `.highcharts-point` rule.\n *\n * @sample {highcharts} highcharts/plotoptions/column-bordercolor/\n * Dark gray border\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @default #ffffff\n * @product highcharts highstock gantt\n */\n borderColor: \"#ffffff\" /* Palette.backgroundColor */\n};\n/**\n * A `column` series. If the [type](#series.column.type) option is\n * not specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends series,plotOptions.column\n * @excluding connectNulls, dataParser, dataURL, gapSize, gapUnit, linecap,\n * lineWidth, marker, connectEnds, step\n * @product highcharts highstock\n * @apioption series.column\n */\n/**\n * An array of data points for the series. For the `column` series type,\n * points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n * interpreted as `y` options. The `x` values will be automatically\n * calculated, either starting at 0 and incremented by 1, or from\n * `pointStart` and `pointInterval` given in the series options. If the axis\n * has categories, these will be used. Example:\n * ```js\n * data: [0, 5, 3, 5]\n * ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n * `x,y`. If the first value is a string, it is applied as the name of the\n * point, and the `x` value is inferred.\n * ```js\n * data: [\n * [0, 6],\n * [1, 2],\n * [2, 6]\n * ]\n * ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of\n * data points exceeds the series'\n * [turboThreshold](#series.column.turboThreshold), this option is not\n * available.\n * ```js\n * data: [{\n * x: 1,\n * y: 9,\n * name: \"Point2\",\n * color: \"#00FF00\"\n * }, {\n * x: 1,\n * y: 6,\n * name: \"Point1\",\n * color: \"#FF00FF\"\n * }]\n * ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n * Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n * Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n * Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n * Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Config objects\n *\n * @type {Array<number|Array<(number|string),(number|null)>|null|*>}\n * @extends series.line.data\n * @excluding marker\n * @product highcharts highstock\n * @apioption series.column.data\n */\n/**\n * The color of the border surrounding the column or bar.\n *\n * In styled mode, the border stroke can be set with the `.highcharts-point`\n * rule.\n *\n * @sample {highcharts} highcharts/plotoptions/column-bordercolor/\n * Dark gray border\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @product highcharts highstock\n * @apioption series.column.data.borderColor\n */\n/**\n * The width of the border surrounding the column or bar.\n *\n * In styled mode, the stroke width can be set with the `.highcharts-point`\n * rule.\n *\n * @sample {highcharts} highcharts/plotoptions/column-borderwidth/\n * 2px black border\n *\n * @type {number}\n * @product highcharts highstock\n * @apioption series.column.data.borderWidth\n */\n/**\n * A name for the dash style to use for the column or bar. Overrides\n * dashStyle on the series.\n *\n * In styled mode, the stroke dash-array can be set with the same classes as\n * listed under [data.color](#series.column.data.color).\n *\n * @see [series.pointWidth](#plotOptions.column.dashStyle)\n *\n * @type {Highcharts.DashStyleValue}\n * @apioption series.column.data.dashStyle\n */\n/**\n * A pixel value specifying a fixed width for the column or bar. Overrides\n * pointWidth on the series. The width effects the dimension that is not based\n * on the point value.\n *\n * @see [series.pointWidth](#plotOptions.column.pointWidth)\n *\n * @type {number}\n * @apioption series.column.data.pointWidth\n */\n/**\n * @excluding halo, lineWidth, lineWidthPlus, marker\n * @product highcharts highstock\n * @apioption series.column.states.hover\n */\n/**\n * @excluding halo, lineWidth, lineWidthPlus, marker\n * @product highcharts highstock\n * @apioption series.column.states.select\n */\n''; // Keeps doclets above in JS file\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Column_ColumnSeriesDefaults = (ColumnSeriesDefaults);\n\n;// ./code/es5/es-modules/Series/Column/ColumnSeries.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar ColumnSeries_extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d,\n b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d,\n b) { d.__proto__ = b; }) ||\n function (d,\n b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\nvar ColumnSeries_animObject = AnimationUtilities.animObject;\n\nvar ColumnSeries_color = Color_Color.parse;\n\n\nvar ColumnSeries_noop = Core_Globals.noop;\n\n\n\nvar ColumnSeries_clamp = Core_Utilities.clamp, ColumnSeries_crisp = Core_Utilities.crisp, ColumnSeries_defined = Core_Utilities.defined, ColumnSeries_extend = Core_Utilities.extend, ColumnSeries_fireEvent = Core_Utilities.fireEvent, ColumnSeries_isArray = Core_Utilities.isArray, ColumnSeries_isNumber = Core_Utilities.isNumber, ColumnSeries_merge = Core_Utilities.merge, ColumnSeries_pick = Core_Utilities.pick, ColumnSeries_objectEach = Core_Utilities.objectEach;\n/* *\n *\n * Class\n *\n * */\n/**\n * The column series type.\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.column\n *\n * @augments Highcharts.Series\n */\nvar ColumnSeries = /** @class */ (function (_super) {\n ColumnSeries_extends(ColumnSeries, _super);\n function ColumnSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /**\n * Animate the column heights one by one from zero.\n *\n * @private\n * @function Highcharts.seriesTypes.column#animate\n *\n * @param {boolean} init\n * Whether to initialize the animation or run it\n */\n ColumnSeries.prototype.animate = function (init) {\n var series = this,\n yAxis = this.yAxis,\n yAxisPos = yAxis.pos,\n reversed = yAxis.reversed,\n options = series.options,\n _a = this.chart,\n clipOffset = _a.clipOffset,\n inverted = _a.inverted,\n attr = {},\n translateProp = inverted ?\n 'translateX' :\n 'translateY';\n var translateStart,\n translatedThreshold;\n if (init && clipOffset) {\n attr.scaleY = 0.001;\n translatedThreshold = ColumnSeries_clamp(yAxis.toPixels(options.threshold || 0), yAxisPos, yAxisPos + yAxis.len);\n if (inverted) {\n // Make sure the columns don't cover the axis line during\n // entrance animation\n translatedThreshold += reversed ?\n -Math.floor(clipOffset[0]) :\n Math.ceil(clipOffset[2]);\n attr.translateX = translatedThreshold - yAxis.len;\n }\n else {\n // Make sure the columns don't cover the axis line during\n // entrance animation\n translatedThreshold += reversed ?\n Math.ceil(clipOffset[0]) :\n -Math.floor(clipOffset[2]);\n attr.translateY = translatedThreshold;\n }\n // Apply final clipping (used in Highcharts Stock) (#7083)\n // animation is done by scaleY, so clipping is for panes\n if (series.clipBox) {\n series.setClip();\n }\n series.group.attr(attr);\n }\n else { // Run the animation\n translateStart = Number(series.group.attr(translateProp));\n series.group.animate({ scaleY: 1 }, ColumnSeries_extend(ColumnSeries_animObject(series.options.animation), {\n // Do the scale synchronously to ensure smooth\n // updating (#5030, #7228)\n step: function (val, fx) {\n if (series.group) {\n attr[translateProp] = translateStart +\n fx.pos * (yAxisPos - translateStart);\n series.group.attr(attr);\n }\n }\n }));\n }\n };\n /**\n * Initialize the series. Extends the basic Series.init method by\n * marking other series of the same type as dirty.\n *\n * @private\n * @function Highcharts.seriesTypes.column#init\n */\n ColumnSeries.prototype.init = function (chart, \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n options) {\n _super.prototype.init.apply(this, arguments);\n var series = this;\n chart = series.chart;\n // If the series is added dynamically, force redraw of other\n // series affected by a new column\n if (chart.hasRendered) {\n chart.series.forEach(function (otherSeries) {\n if (otherSeries.type === series.type) {\n otherSeries.isDirty = true;\n }\n });\n }\n };\n /**\n * Return the width and x offset of the columns adjusted for grouping,\n * groupPadding, pointPadding, pointWidth etc.\n *\n * @private\n * @function Highcharts.seriesTypes.column#getColumnMetrics\n */\n ColumnSeries.prototype.getColumnMetrics = function () {\n var _a,\n _b;\n var series = this,\n options = series.options,\n xAxis = series.xAxis,\n yAxis = series.yAxis,\n reversedStacks = xAxis.options.reversedStacks, \n // Keep backward compatibility: reversed xAxis had reversed\n // stacks\n reverseStacks = (xAxis.reversed && !reversedStacks) ||\n (!xAxis.reversed && reversedStacks),\n stackGroups = {};\n var stackKey,\n columnCount = 0;\n // Get the total number of column type series. This is called on\n // every series. Consider moving this logic to a chart.orderStacks()\n // function and call it on init, addSeries and removeSeries\n if (options.grouping === false) {\n columnCount = 1;\n }\n else {\n series.chart.series.forEach(function (otherSeries) {\n var otherYAxis = otherSeries.yAxis,\n otherOptions = otherSeries.options;\n var columnIndex;\n if (otherSeries.type === series.type &&\n otherSeries.reserveSpace() &&\n yAxis.len === otherYAxis.len &&\n yAxis.pos === otherYAxis.pos) { // #642, #2086\n if (otherOptions.stacking &&\n otherOptions.stacking !== 'group') {\n stackKey = otherSeries.stackKey;\n if (typeof stackGroups[stackKey] ===\n 'undefined') {\n stackGroups[stackKey] = columnCount++;\n }\n columnIndex = stackGroups[stackKey];\n }\n else if (otherOptions.grouping !== false) { // #1162\n columnIndex = columnCount++;\n }\n otherSeries.columnIndex = columnIndex;\n }\n });\n }\n var categoryWidth = Math.min(Math.abs(xAxis.transA) * ((!((_a = xAxis.brokenAxis) === null || _a === void 0 ? void 0 : _a.hasBreaks) && ((_b = xAxis.ordinal) === null || _b === void 0 ? void 0 : _b.slope)) ||\n options.pointRange ||\n xAxis.closestPointRange ||\n xAxis.tickInterval ||\n 1), // #2610\n xAxis.len // #1535\n ), groupPadding = categoryWidth * options.groupPadding, groupWidth = categoryWidth - 2 * groupPadding, pointOffsetWidth = groupWidth / (columnCount || 1), pointWidth = Math.min(options.maxPointWidth || xAxis.len, ColumnSeries_pick(options.pointWidth, pointOffsetWidth * (1 - 2 * options.pointPadding))), pointPadding = (pointOffsetWidth - pointWidth) / 2, \n // #1251, #3737\n colIndex = (series.columnIndex || 0) + (reverseStacks ? 1 : 0), pointXOffset = pointPadding +\n (groupPadding +\n colIndex * pointOffsetWidth -\n (categoryWidth / 2)) * (reverseStacks ? -1 : 1);\n // Save it for reading in linked series (Error bars particularly)\n series.columnMetrics = {\n width: pointWidth,\n offset: pointXOffset,\n paddedWidth: pointOffsetWidth,\n columnCount: columnCount\n };\n return series.columnMetrics;\n };\n /**\n * Make the columns crisp. The edges are rounded to the nearest full\n * pixel.\n *\n * @private\n * @function Highcharts.seriesTypes.column#crispCol\n */\n ColumnSeries.prototype.crispCol = function (x, y, width, height) {\n var borderWidth = this.borderWidth,\n inverted = this.chart.inverted,\n bottom = ColumnSeries_crisp(y + height,\n borderWidth,\n inverted);\n // Vertical\n y = ColumnSeries_crisp(y, borderWidth, inverted);\n height = bottom - y;\n // Horizontal. We need to first compute the exact right edge, then\n // round it and compute the width from there.\n if (this.options.crisp) {\n var right = ColumnSeries_crisp(x + width,\n borderWidth);\n x = ColumnSeries_crisp(x, borderWidth);\n width = right - x;\n }\n return { x: x, y: y, width: width, height: height };\n };\n /**\n * Adjust for missing columns, according to the `centerInCategory`\n * option. Missing columns are either single points or stacks where the\n * point or points are either missing or null.\n *\n * @private\n * @function Highcharts.seriesTypes.column#adjustForMissingColumns\n * @param {number} x\n * The x coordinate of the column, left side\n *\n * @param {number} pointWidth\n * The pointWidth, already computed upstream\n *\n * @param {Highcharts.ColumnPoint} point\n * The point instance\n *\n * @param {Highcharts.ColumnMetricsObject} metrics\n * The series-wide column metrics\n *\n * @return {number}\n * The adjusted x position, or the original if not adjusted\n */\n ColumnSeries.prototype.adjustForMissingColumns = function (x, pointWidth, point, metrics) {\n var _this = this;\n var _a;\n if (!point.isNull && metrics.columnCount > 1) {\n var visibleSeries_1 = this.xAxis.series\n .filter(function (s) { return s.visible; })\n .map(function (s) { return s.index; });\n var indexInCategory_1 = 0,\n totalInCategory_1 = 0;\n // Loop over all the stacks on the Y axis. When stacking is enabled,\n // these are real point stacks. When stacking is not enabled, but\n // `centerInCategory` is true, there is one stack handling the\n // grouping of points in each category. This is done in the\n // `setGroupedPoints` function.\n ColumnSeries_objectEach((_a = this.xAxis.stacking) === null || _a === void 0 ? void 0 : _a.stacks, function (stack) {\n var _a;\n var points = typeof point.x === 'number' ?\n (_a = stack[point.x.toString()]) === null || _a === void 0 ? void 0 : _a.points :\n void 0,\n pointValues = points === null || points === void 0 ? void 0 : points[_this.index],\n yStackMap = {};\n // Look for the index\n if (points && ColumnSeries_isArray(pointValues)) {\n var baseIndex_1 = _this.index;\n // If there are multiple points with the same X then\n // gather all series in category, and assign index\n var seriesIndexes = Object\n .keys(points)\n .filter(function (pointKey) {\n // Filter out duplicate X's\n return !pointKey.match(',') &&\n // Filter out null points\n points[pointKey] &&\n points[pointKey].length > 1;\n })\n .map(parseFloat)\n .filter(function (index) {\n return visibleSeries_1.indexOf(index) !== -1;\n })\n // When the series `stack` option is defined, assign\n // all subsequent column of the same stack to the\n // same index as the base column of the stack, then\n // filter out the original series index so that\n // `seriesIndexes` is shortened to the amount of\n // stacks, not the amount of series (#20550).\n .filter(function (index) {\n var otherOptions = _this.chart.series[index]\n .options,\n yStack = otherOptions.stacking &&\n otherOptions.stack;\n if (ColumnSeries_defined(yStack)) {\n if (ColumnSeries_isNumber(yStackMap[yStack])) {\n if (baseIndex_1 === index) {\n baseIndex_1 = yStackMap[yStack];\n }\n return false;\n }\n yStackMap[yStack] = index;\n }\n return true;\n })\n .sort(function (a, b) { return b - a; });\n indexInCategory_1 = seriesIndexes.indexOf(baseIndex_1);\n totalInCategory_1 = seriesIndexes.length;\n }\n });\n indexInCategory_1 = this.xAxis.reversed ?\n totalInCategory_1 - 1 - indexInCategory_1 : indexInCategory_1;\n // Compute the adjusted x position\n var boxWidth = (totalInCategory_1 - 1) * metrics.paddedWidth +\n pointWidth;\n x = (point.plotX || 0) + boxWidth / 2 - pointWidth -\n indexInCategory_1 * metrics.paddedWidth;\n }\n return x;\n };\n /**\n * Translate each point to the plot area coordinate system and find\n * shape positions\n *\n * @private\n * @function Highcharts.seriesTypes.column#translate\n */\n ColumnSeries.prototype.translate = function () {\n var series = this,\n chart = series.chart,\n options = series.options,\n dense = series.dense =\n series.closestPointRange * series.xAxis.transA < 2,\n borderWidth = series.borderWidth = ColumnSeries_pick(options.borderWidth,\n dense ? 0 : 1 // #3635\n ),\n xAxis = series.xAxis,\n yAxis = series.yAxis,\n threshold = options.threshold,\n minPointLength = ColumnSeries_pick(options.minPointLength, 5),\n metrics = series.getColumnMetrics(),\n seriesPointWidth = metrics.width,\n seriesXOffset = series.pointXOffset = metrics.offset,\n dataMin = series.dataMin,\n dataMax = series.dataMax,\n translatedThreshold = series.translatedThreshold =\n yAxis.getThreshold(threshold);\n // Postprocessed for border width\n var seriesBarW = series.barW =\n Math.max(seriesPointWidth, 1 + 2 * borderWidth);\n // When the pointPadding is 0, we want the columns to be packed\n // tightly, so we allow individual columns to have individual sizes.\n // When pointPadding is greater, we strive for equal-width columns\n // (#2694).\n if (options.pointPadding && options.crisp) {\n seriesBarW = Math.ceil(seriesBarW);\n }\n Series_Series.prototype.translate.apply(series);\n // Record the new values\n series.points.forEach(function (point) {\n var yBottom = ColumnSeries_pick(point.yBottom,\n translatedThreshold),\n safeDistance = 999 + Math.abs(yBottom),\n plotX = point.plotX || 0, \n // Don't draw too far outside plot area (#1303, #2241,\n // #4264)\n plotY = ColumnSeries_clamp(point.plotY, -safeDistance,\n yAxis.len + safeDistance);\n var up,\n barY = Math.min(plotY,\n yBottom),\n barH = Math.max(plotY,\n yBottom) - barY,\n pointWidth = seriesPointWidth,\n barX = plotX + seriesXOffset,\n barW = seriesBarW;\n // Handle options.minPointLength\n if (minPointLength && Math.abs(barH) < minPointLength) {\n barH = minPointLength;\n up = (!yAxis.reversed && !point.negative) ||\n (yAxis.reversed && point.negative);\n // Reverse zeros if there's no positive value in the series\n // in visible range (#7046)\n if (ColumnSeries_isNumber(threshold) &&\n ColumnSeries_isNumber(dataMax) &&\n point.y === threshold &&\n dataMax <= threshold &&\n // And if there's room for it (#7311)\n (yAxis.min || 0) < threshold &&\n // If all points are the same value (i.e zero) not draw\n // as negative points (#10646), but only if there's room\n // for it (#14876)\n (dataMin !== dataMax || (yAxis.max || 0) <= threshold)) {\n up = !up;\n point.negative = !point.negative;\n }\n // If stacked...\n barY = (Math.abs(barY - translatedThreshold) > minPointLength ?\n // ...keep position\n yBottom - minPointLength :\n // #1485, #4051\n translatedThreshold -\n (up ? minPointLength : 0));\n }\n // Handle point.options.pointWidth\n // @todo Handle grouping/stacking too. Calculate offset properly\n if (ColumnSeries_defined(point.options.pointWidth)) {\n pointWidth = barW =\n Math.ceil(point.options.pointWidth);\n barX -= Math.round((pointWidth - seriesPointWidth) / 2);\n }\n // Adjust for null or missing points\n if (options.centerInCategory) {\n barX = series.adjustForMissingColumns(barX, pointWidth, point, metrics);\n }\n // Cache for access in polar\n point.barX = barX;\n point.pointWidth = pointWidth;\n // Fix the tooltip on center of grouped columns (#1216, #424,\n // #3648)\n point.tooltipPos = chart.inverted ?\n [\n ColumnSeries_clamp(yAxis.len + yAxis.pos - chart.plotLeft - plotY, yAxis.pos - chart.plotLeft, yAxis.len + yAxis.pos - chart.plotLeft),\n xAxis.len + xAxis.pos - chart.plotTop - barX - barW / 2,\n barH\n ] :\n [\n xAxis.left - chart.plotLeft + barX + barW / 2,\n ColumnSeries_clamp(plotY + yAxis.pos -\n chart.plotTop, yAxis.pos - chart.plotTop, yAxis.len + yAxis.pos - chart.plotTop),\n barH\n ];\n // Register shape type and arguments to be used in drawPoints. Allow\n // `shapeType` defined on `pointClass` level.\n point.shapeType = series.pointClass.prototype.shapeType ||\n 'roundedRect';\n point.shapeArgs = series.crispCol(barX, \n // #3169, drilldown from null must have a position to work from.\n // #6585, dataLabel should be placed on xAxis, not floating in\n // the middle of the chart.\n point.isNull ? translatedThreshold : barY, barW, point.isNull ? 0 : barH);\n });\n // Fire a specific event after column translate. We could instead apply\n // all the column logic in an `afterTranslate` event handler, but there\n // are so many other series types that use the column translation, that\n // it is more convenient to have a specific event for it.\n ColumnSeries_fireEvent(this, 'afterColumnTranslate');\n };\n /**\n * Columns have no graph\n *\n * @private\n * @function Highcharts.seriesTypes.column#drawGraph\n */\n ColumnSeries.prototype.drawGraph = function () {\n this.group[this.dense ? 'addClass' : 'removeClass']('highcharts-dense-data');\n };\n /**\n * Get presentational attributes\n *\n * @private\n * @function Highcharts.seriesTypes.column#pointAttribs\n */\n ColumnSeries.prototype.pointAttribs = function (point, state) {\n var options = this.options, p2o = this.pointAttrToOptions || {}, strokeOption = p2o.stroke || 'borderColor', strokeWidthOption = p2o['stroke-width'] || 'borderWidth';\n var stateOptions,\n zone,\n brightness,\n fill = (point && point.color) || this.color, \n // Set to fill when borderColor null:\n stroke = ((point && point[strokeOption]) ||\n options[strokeOption] ||\n fill),\n dashstyle = (point && point.options.dashStyle) || options.dashStyle,\n strokeWidth = (point && point[strokeWidthOption]) ||\n options[strokeWidthOption] ||\n this[strokeWidthOption] || 0,\n opacity = ColumnSeries_pick(point && point.opacity,\n options.opacity, 1);\n // Handle zone colors\n if (point && this.zones.length) {\n zone = point.getZone();\n // When zones are present, don't use point.color (#4267).\n // Changed order (#6527), added support for colorAxis (#10670)\n fill = (point.options.color ||\n (zone && (zone.color || point.nonZonedColor)) ||\n this.color);\n if (zone) {\n stroke = zone.borderColor || stroke;\n dashstyle = zone.dashStyle || dashstyle;\n strokeWidth = zone.borderWidth || strokeWidth;\n }\n }\n // Select or hover states\n if (state && point) {\n stateOptions = ColumnSeries_merge(options.states[state], \n // #6401\n point.options.states &&\n point.options.states[state] ||\n {});\n brightness = stateOptions.brightness;\n fill =\n stateOptions.color || (typeof brightness !== 'undefined' &&\n ColumnSeries_color(fill)\n .brighten(stateOptions.brightness)\n .get()) || fill;\n stroke = stateOptions[strokeOption] || stroke;\n strokeWidth =\n stateOptions[strokeWidthOption] || strokeWidth;\n dashstyle = stateOptions.dashStyle || dashstyle;\n opacity = ColumnSeries_pick(stateOptions.opacity, opacity);\n }\n var ret = {\n fill: fill,\n stroke: stroke,\n 'stroke-width': strokeWidth,\n opacity: opacity\n };\n if (dashstyle) {\n ret.dashstyle = dashstyle;\n }\n return ret;\n };\n /**\n * Draw the columns. For bars, the series.group is rotated, so the same\n * coordinates apply for columns and bars. This method is inherited by\n * scatter series.\n *\n * @private\n * @function Highcharts.seriesTypes.column#drawPoints\n */\n ColumnSeries.prototype.drawPoints = function (points) {\n if (points === void 0) { points = this.points; }\n var series = this,\n chart = this.chart,\n options = series.options,\n renderer = chart.renderer,\n animationLimit = options.animationLimit || 250;\n var shapeArgs;\n // Draw the columns\n points.forEach(function (point) {\n var plotY = point.plotY;\n var graphic = point.graphic,\n hasGraphic = !!graphic,\n verb = graphic && chart.pointCount < animationLimit ?\n 'animate' : 'attr';\n if (ColumnSeries_isNumber(plotY) && point.y !== null) {\n shapeArgs = point.shapeArgs;\n // When updating a series between 2d and 3d or cartesian and\n // polar, the shape type changes.\n if (graphic && point.hasNewShapeType()) {\n graphic = graphic.destroy();\n }\n // Set starting position for point sliding animation.\n if (series.enabledDataSorting) {\n point.startXPos = series.xAxis.reversed ?\n -(shapeArgs ? (shapeArgs.width || 0) : 0) :\n series.xAxis.width;\n }\n if (!graphic) {\n point.graphic = graphic =\n renderer[point.shapeType](shapeArgs)\n .add(point.group || series.group);\n if (graphic &&\n series.enabledDataSorting &&\n chart.hasRendered &&\n chart.pointCount < animationLimit) {\n graphic.attr({\n x: point.startXPos\n });\n hasGraphic = true;\n verb = 'animate';\n }\n }\n if (graphic && hasGraphic) { // Update\n graphic[verb](ColumnSeries_merge(shapeArgs));\n }\n // Presentational\n if (!chart.styledMode) {\n graphic[verb](series.pointAttribs(point, (point.selected && 'select')))\n .shadow(point.allowShadow !== false && options.shadow);\n }\n if (graphic) {\n graphic.addClass(point.getClassName(), true);\n graphic.attr({\n visibility: point.visible ? 'inherit' : 'hidden'\n });\n }\n }\n else if (graphic) {\n point.graphic = graphic.destroy(); // #1269\n }\n });\n };\n /**\n * Draw the tracker for a point.\n * @private\n */\n ColumnSeries.prototype.drawTracker = function (points) {\n if (points === void 0) { points = this.points; }\n var series = this,\n chart = series.chart,\n pointer = chart.pointer,\n onMouseOver = function (e) {\n pointer === null || pointer === void 0 ? void 0 : pointer.normalize(e);\n var point = pointer === null || pointer === void 0 ? void 0 : pointer.getPointFromEvent(e), \n // Run point events only for points inside plot area, #21136\n isInsidePlot = chart.scrollablePlotArea ?\n chart.isInsidePlot(e.chartX - chart.plotLeft,\n e.chartY - chart.plotTop, {\n visiblePlotOnly: true\n }) : true;\n // Undefined on graph in scatterchart\n if (pointer &&\n point &&\n series.options.enableMouseTracking &&\n isInsidePlot) {\n pointer.isDirectTouch = true;\n point.onMouseOver(e);\n }\n };\n var dataLabels;\n // Add reference to the point\n points.forEach(function (point) {\n dataLabels = (ColumnSeries_isArray(point.dataLabels) ?\n point.dataLabels :\n (point.dataLabel ? [point.dataLabel] : []));\n if (point.graphic) {\n point.graphic.element.point = point;\n }\n dataLabels.forEach(function (dataLabel) {\n (dataLabel.div || dataLabel.element).point = point;\n });\n });\n // Add the event listeners, we need to do this only once\n if (!series._hasTracking) {\n series.trackerGroups.forEach(function (key) {\n if (series[key]) {\n // We don't always have dataLabelsGroup\n series[key]\n .addClass('highcharts-tracker')\n .on('mouseover', onMouseOver)\n .on('mouseout', function (e) {\n pointer === null || pointer === void 0 ? void 0 : pointer.onTrackerMouseOut(e);\n })\n .on('touchstart', onMouseOver);\n if (!chart.styledMode && series.options.cursor) {\n series[key]\n .css({ cursor: series.options.cursor });\n }\n }\n });\n series._hasTracking = true;\n }\n ColumnSeries_fireEvent(this, 'afterDrawTracker');\n };\n /**\n * Remove this series from the chart\n *\n * @private\n * @function Highcharts.seriesTypes.column#remove\n */\n ColumnSeries.prototype.remove = function () {\n var series = this,\n chart = series.chart;\n // Column and bar series affects other series of the same type\n // as they are either stacked or grouped\n if (chart.hasRendered) {\n chart.series.forEach(function (otherSeries) {\n if (otherSeries.type === series.type) {\n otherSeries.isDirty = true;\n }\n });\n }\n Series_Series.prototype.remove.apply(series, arguments);\n };\n /* *\n *\n * Static Properties\n *\n * */\n ColumnSeries.defaultOptions = ColumnSeries_merge(Series_Series.defaultOptions, Column_ColumnSeriesDefaults);\n return ColumnSeries;\n}(Series_Series));\nColumnSeries_extend(ColumnSeries.prototype, {\n // When tooltip is not shared, this series (and derivatives) requires\n // direct touch/hover. KD-tree does not apply.\n directTouch: true,\n getSymbol: ColumnSeries_noop,\n // Use separate negative stacks, unlike area stacks where a negative\n // point is subtracted from previous (#1910)\n negStacks: true,\n trackerGroups: ['group', 'dataLabelsGroup']\n});\nSeries_SeriesRegistry.registerSeriesType('column', ColumnSeries);\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Column_ColumnSeries = (ColumnSeries);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Adjusted width and x offset of the columns for grouping.\n *\n * @private\n * @interface Highcharts.ColumnMetricsObject\n */ /**\n* Width of the columns.\n* @name Highcharts.ColumnMetricsObject#width\n* @type {number}\n*/ /**\n* Offset of the columns.\n* @name Highcharts.ColumnMetricsObject#offset\n* @type {number}\n*/\n''; // Detach doclets above\n\n;// ./code/es5/es-modules/Core/Series/DataLabel.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar DataLabel_getDeferredAnimation = AnimationUtilities.getDeferredAnimation;\n\nvar DataLabel_format = Core_Templating.format;\n\nvar DataLabel_defined = Core_Utilities.defined, DataLabel_extend = Core_Utilities.extend, DataLabel_fireEvent = Core_Utilities.fireEvent, DataLabel_getAlignFactor = Core_Utilities.getAlignFactor, DataLabel_isArray = Core_Utilities.isArray, DataLabel_isString = Core_Utilities.isString, DataLabel_merge = Core_Utilities.merge, DataLabel_objectEach = Core_Utilities.objectEach, DataLabel_pick = Core_Utilities.pick, DataLabel_pInt = Core_Utilities.pInt, DataLabel_splat = Core_Utilities.splat;\n/* *\n *\n * Composition\n *\n * */\nvar DataLabel;\n(function (DataLabel) {\n /* *\n *\n * Declarations\n *\n * */\n /* *\n *\n * Functions\n *\n * */\n /**\n * Check if this series has data labels, either a series-level setting, or\n * individual. In case of individual point labels, this method is overridden\n * to always return true.\n * @private\n */\n function hasDataLabels() {\n return mergedDataLabelOptions(this)\n .some(function (o) {\n return o === null || o === void 0 ? void 0 : o.enabled;\n });\n }\n /**\n * Align each individual data label.\n * @private\n */\n function alignDataLabel(point, dataLabel, options, alignTo, isNew) {\n var _a;\n var series = this,\n _b = this,\n chart = _b.chart,\n enabledDataSorting = _b.enabledDataSorting,\n inverted = this.isCartesian && chart.inverted,\n plotX = point.plotX,\n plotY = point.plotY,\n rotation = options.rotation || 0,\n isInsidePlot = DataLabel_defined(plotX) &&\n DataLabel_defined(plotY) &&\n chart.isInsidePlot(plotX,\n Math.round(plotY), {\n inverted: inverted,\n paneCoordinates: true,\n series: series\n }),\n setStartPos = function (alignOptions) {\n if (enabledDataSorting && series.xAxis && !justify) {\n series.setDataLabelStartPos(point,\n dataLabel,\n isNew,\n isInsidePlot,\n alignOptions);\n }\n }, justify = rotation === 0 ? DataLabel_pick(options.overflow, (enabledDataSorting ? 'none' : 'justify')) === 'justify' : false;\n // Math.round for rounding errors (#2683), alignTo to allow column\n // labels (#2700)\n var visible = this.visible &&\n point.visible !== false &&\n DataLabel_defined(plotX) &&\n (point.series.forceDL ||\n (enabledDataSorting && !justify) ||\n isInsidePlot ||\n (\n // If the data label is inside the align box, it is enough\n // that parts of the align box is inside the plot area\n // (#12370). When stacking, it is always inside regardless\n // of the option (#15148).\n DataLabel_pick(options.inside, !!this.options.stacking) &&\n alignTo &&\n chart.isInsidePlot(plotX,\n inverted ?\n alignTo.x + 1 :\n alignTo.y + alignTo.height - 1, {\n inverted: inverted,\n paneCoordinates: true,\n series: series\n })));\n var pos = point.pos();\n if (visible && pos) {\n var bBox = dataLabel.getBBox(),\n unrotatedbBox = dataLabel.getBBox(void 0, 0);\n // The alignment box is a singular point\n alignTo = DataLabel_extend({\n x: pos[0],\n y: Math.round(pos[1]),\n width: 0,\n height: 0\n }, alignTo || {});\n // Align to plot edges\n if (options.alignTo === 'plotEdges' && series.isCartesian) {\n alignTo[inverted ? 'x' : 'y'] = 0;\n alignTo[inverted ? 'width' : 'height'] = ((_a = this.yAxis) === null || _a === void 0 ? void 0 : _a.len) || 0;\n }\n // Add the text size for alignment calculation\n DataLabel_extend(options, {\n width: bBox.width,\n height: bBox.height\n });\n setStartPos(alignTo); // Data sorting\n // Align the label to the adjusted box with for unrotated bBox due\n // to rotationOrigin, which is based on unrotated label\n dataLabel.align(DataLabel_merge(options, {\n width: unrotatedbBox.width,\n height: unrotatedbBox.height\n }), false, alignTo, false);\n dataLabel.alignAttr.x += DataLabel_getAlignFactor(options.align) *\n (unrotatedbBox.width - bBox.width);\n dataLabel.alignAttr.y += DataLabel_getAlignFactor(options.verticalAlign) *\n (unrotatedbBox.height - bBox.height);\n dataLabel[dataLabel.placed ? 'animate' : 'attr']({\n 'text-align': dataLabel.alignAttr['text-align'] || 'center',\n x: dataLabel.alignAttr.x +\n (bBox.width - unrotatedbBox.width) / 2,\n y: dataLabel.alignAttr.y +\n (bBox.height - unrotatedbBox.height) / 2,\n rotationOriginX: (dataLabel.width || 0) / 2,\n rotationOriginY: (dataLabel.height || 0) / 2\n });\n // Uncomment this block to visualize the bounding boxes used for\n // determining visibility\n // chart.renderer.rect(\n // (dataLabel.alignAttr.x || 0) + chart.plotLeft,\n // (dataLabel.alignAttr.y || 0) + chart.plotTop,\n // bBox.width,\n // bBox.height\n // ).attr({\n // stroke: 'rgba(0, 0, 0, 0.3)',\n // 'stroke-width': 1,\n // zIndex: 20\n // }).add();\n // chart.renderer.circle(\n // chart.plotLeft + pick(dataLabel.alignAttr.x, 0),\n // chart.plotTop + pick(dataLabel.alignAttr.y, 0),\n // 2\n // ).attr({\n // fill: 'red',\n // zIndex: 20\n // }).add();\n if (justify && alignTo.height >= 0) { // #8830\n this.justifyDataLabel(dataLabel, options, dataLabel.alignAttr, bBox, alignTo, isNew);\n }\n else if (DataLabel_pick(options.crop, true)) {\n var _c = dataLabel.alignAttr,\n x = _c.x,\n y = _c.y,\n correction = 1;\n // Check if the dataLabel should be visible.\n visible =\n chart.isInsidePlot(x, y, {\n paneCoordinates: true,\n series: series\n }) &&\n chart.isInsidePlot(x + bBox.width - correction, y + bBox.height - correction, {\n paneCoordinates: true,\n series: series\n });\n }\n // When we're using a shape, make it possible with a connector or an\n // arrow pointing to this point\n if (options.shape && !rotation) {\n dataLabel[isNew ? 'attr' : 'animate']({\n anchorX: pos[0],\n anchorY: pos[1]\n });\n }\n }\n // To use alignAttr property in hideOverlappingLabels\n if (isNew && enabledDataSorting) {\n dataLabel.placed = false;\n }\n // Show or hide based on the final aligned position\n if (!visible && (!enabledDataSorting || justify)) {\n dataLabel.hide();\n dataLabel.placed = false; // Don't animate back in\n }\n else {\n dataLabel.show();\n dataLabel.placed = true; // Flag for overlapping logic\n }\n }\n /**\n * Handle the dataLabels.filter option.\n * @private\n */\n function applyFilter(point, options) {\n var filter = options.filter;\n if (filter) {\n var op = filter.operator,\n prop = point[filter.property],\n val = filter.value;\n if ((op === '>' && prop > val) ||\n (op === '<' && prop < val) ||\n (op === '>=' && prop >= val) ||\n (op === '<=' && prop <= val) ||\n (op === '==' && prop == val) || // eslint-disable-line eqeqeq\n (op === '===' && prop === val) ||\n (op === '!=' && prop != val) || // eslint-disable-line eqeqeq\n (op === '!==' && prop !== val)) {\n return true;\n }\n return false;\n }\n return true;\n }\n /**\n * @private\n */\n function compose(SeriesClass) {\n var seriesProto = SeriesClass.prototype;\n if (!seriesProto.initDataLabels) {\n seriesProto.initDataLabels = initDataLabels;\n seriesProto.initDataLabelsGroup = initDataLabelsGroup;\n seriesProto.alignDataLabel = alignDataLabel;\n seriesProto.drawDataLabels = drawDataLabels;\n seriesProto.justifyDataLabel = justifyDataLabel;\n seriesProto.setDataLabelStartPos = setDataLabelStartPos;\n seriesProto.hasDataLabels = hasDataLabels;\n }\n }\n DataLabel.compose = compose;\n /**\n * Create the SVGElement group for dataLabels\n * @private\n */\n function initDataLabelsGroup() {\n return this.plotGroup('dataLabelsGroup', 'data-labels', this.hasRendered ? 'inherit' : 'hidden', // #5133, #10220\n this.options.dataLabels.zIndex || 6);\n }\n /**\n * Init the data labels with the correct animation\n * @private\n */\n function initDataLabels(animationConfig) {\n var series = this,\n hasRendered = series.hasRendered || 0;\n // Create a separate group for the data labels to avoid rotation\n var dataLabelsGroup = this.initDataLabelsGroup()\n .attr({ opacity: +hasRendered }); // #3300\n if (!hasRendered && dataLabelsGroup) {\n if (series.visible) { // #2597, #3023, #3024\n dataLabelsGroup.show();\n }\n if (series.options.animation) {\n dataLabelsGroup.animate({ opacity: 1 }, animationConfig);\n }\n else {\n dataLabelsGroup.attr({ opacity: 1 });\n }\n }\n return dataLabelsGroup;\n }\n /**\n * Draw the data labels\n * @private\n */\n function drawDataLabels(points) {\n var _a;\n points = points || this.points;\n var series = this, chart = series.chart, seriesOptions = series.options, renderer = chart.renderer, _b = chart.options.chart, backgroundColor = _b.backgroundColor, plotBackgroundColor = _b.plotBackgroundColor, contrastColor = renderer.getContrast((DataLabel_isString(plotBackgroundColor) && plotBackgroundColor) ||\n (DataLabel_isString(backgroundColor) && backgroundColor) ||\n \"#000000\" /* Palette.neutralColor100 */), seriesDlOptions = mergedDataLabelOptions(series);\n var pointOptions,\n dataLabelsGroup;\n // Resolve the animation\n var _c = seriesDlOptions[0],\n animation = _c.animation,\n defer = _c.defer,\n animationConfig = defer ?\n DataLabel_getDeferredAnimation(chart,\n animation,\n series) :\n { defer: 0,\n duration: 0 };\n DataLabel_fireEvent(this, 'drawDataLabels');\n if ((_a = series.hasDataLabels) === null || _a === void 0 ? void 0 : _a.call(series)) {\n dataLabelsGroup = this.initDataLabels(animationConfig);\n // Make the labels for each point\n points.forEach(function (point) {\n var _a,\n _b;\n var dataLabels = point.dataLabels || [];\n // Merge in series options for the point.\n // @note dataLabelAttribs (like pointAttribs) would eradicate\n // the need for dlOptions, and simplify the section below.\n pointOptions = DataLabel_splat(mergeArrays(seriesDlOptions, \n // The dlOptions prop is used in treemaps\n point.dlOptions || ((_a = point.options) === null || _a === void 0 ? void 0 : _a.dataLabels)));\n // Handle each individual data label for this point\n pointOptions.forEach(function (labelOptions, i) {\n // Options for one datalabel\n var labelEnabled = (labelOptions.enabled &&\n (point.visible || point.dataLabelOnHidden) &&\n // #2282, #4641, #7112, #10049\n (!point.isNull || point.dataLabelOnNull) &&\n applyFilter(point,\n labelOptions)),\n backgroundColor = labelOptions.backgroundColor,\n borderColor = labelOptions.borderColor,\n distance = labelOptions.distance,\n _a = labelOptions.style,\n style = _a === void 0 ? {} : _a;\n var formatString,\n labelText,\n rotation,\n attr = {},\n dataLabel = dataLabels[i],\n isNew = !dataLabel,\n labelBgColor;\n if (labelEnabled) {\n // Create individual options structure that can be\n // extended without affecting others\n formatString = DataLabel_pick(labelOptions[point.formatPrefix + 'Format'], labelOptions.format);\n labelText = DataLabel_defined(formatString) ?\n DataLabel_format(formatString, point, chart) :\n (labelOptions[point.formatPrefix + 'Formatter'] ||\n labelOptions.formatter).call(point, labelOptions);\n rotation = labelOptions.rotation;\n if (!chart.styledMode) {\n // Determine the color\n style.color = DataLabel_pick(labelOptions.color, style.color, DataLabel_isString(series.color) ? series.color : void 0, \"#000000\" /* Palette.neutralColor100 */);\n // Get automated contrast color\n if (style.color === 'contrast') {\n if (backgroundColor !== 'none') {\n labelBgColor = backgroundColor;\n }\n point.contrastColor = renderer.getContrast(labelBgColor !== 'auto' && labelBgColor ||\n (point.color || series.color));\n style.color = (labelBgColor || // #20007\n (!DataLabel_defined(distance) &&\n labelOptions.inside) ||\n DataLabel_pInt(distance || 0) < 0 ||\n seriesOptions.stacking) ?\n point.contrastColor :\n contrastColor;\n }\n else {\n delete point.contrastColor;\n }\n if (seriesOptions.cursor) {\n style.cursor = seriesOptions.cursor;\n }\n }\n attr = {\n r: labelOptions.borderRadius || 0,\n rotation: rotation,\n padding: labelOptions.padding,\n zIndex: 1\n };\n if (!chart.styledMode) {\n attr.fill = backgroundColor === 'auto' ?\n point.color :\n backgroundColor;\n attr.stroke = borderColor === 'auto' ?\n point.color :\n borderColor;\n attr['stroke-width'] = labelOptions.borderWidth;\n }\n // Remove unused attributes (#947)\n DataLabel_objectEach(attr, function (val, name) {\n if (typeof val === 'undefined') {\n delete attr[name];\n }\n });\n }\n // If the point is outside the plot area, or the label\n // changes properties that we cannot change, destroy it and\n // build a new one below. #678, #820.\n if (dataLabel && (!labelEnabled ||\n !DataLabel_defined(labelText) ||\n !!dataLabel.div !== !!labelOptions.useHTML ||\n (\n // Change from no rotation to rotation and\n // vice versa. Don't use defined() because\n // rotation = 0 means also rotation = undefined\n (!dataLabel.rotation ||\n !labelOptions.rotation) &&\n dataLabel.rotation !== labelOptions.rotation))) {\n dataLabel = void 0;\n isNew = true;\n }\n // Individual labels are disabled if the are explicitly\n // disabled in the point options, or if they fall outside\n // the plot area.\n if (labelEnabled && DataLabel_defined(labelText)) {\n if (!dataLabel) {\n // Create new label element\n dataLabel = renderer.label(labelText, 0, 0, labelOptions.shape, void 0, void 0, labelOptions.useHTML, void 0, 'data-label');\n dataLabel.addClass(' highcharts-data-label-color-' +\n point.colorIndex +\n ' ' + (labelOptions.className || '') +\n ( // #3398\n labelOptions.useHTML ?\n ' highcharts-tracker' :\n ''));\n }\n else {\n // Use old element and just update text\n attr.text = labelText;\n }\n // Store data label options for later access\n if (dataLabel) {\n dataLabel.options = labelOptions;\n dataLabel.attr(attr);\n if (!chart.styledMode) {\n // Styles must be applied before add in order to\n // read text bounding box\n dataLabel.css(style).shadow(labelOptions.shadow);\n }\n else if (style.width) {\n // In styled mode with a width property set,\n // the width should be applied to the\n // dataLabel. (#20499). These properties affect\n // layout and must be applied also in styled\n // mode.\n dataLabel.css({\n width: style.width,\n textOverflow: style.textOverflow,\n whiteSpace: style.whiteSpace\n });\n }\n DataLabel_fireEvent(dataLabel, 'beforeAddingDataLabel', { labelOptions: labelOptions, point: point });\n if (!dataLabel.added) {\n dataLabel.add(dataLabelsGroup);\n }\n // Now the data label is created and placed at 0,0,\n // so we need to align it\n series.alignDataLabel(point, dataLabel, labelOptions, void 0, isNew);\n dataLabel.isActive = true;\n if (dataLabels[i] && dataLabels[i] !== dataLabel) {\n dataLabels[i].destroy();\n }\n dataLabels[i] = dataLabel;\n }\n }\n });\n // Destroy and remove the inactive ones\n var j = dataLabels.length;\n while (j--) {\n // The item can be undefined if a disabled data label is\n // succeeded by an enabled one (#19457)\n if (!dataLabels[j] || !dataLabels[j].isActive) {\n (_b = dataLabels[j]) === null || _b === void 0 ? void 0 : _b.destroy();\n dataLabels.splice(j, 1);\n }\n else {\n dataLabels[j].isActive = false;\n }\n }\n // Write back\n point.dataLabel = dataLabels[0];\n point.dataLabels = dataLabels;\n });\n }\n DataLabel_fireEvent(this, 'afterDrawDataLabels');\n }\n /**\n * If data labels fall partly outside the plot area, align them back in, in\n * a way that doesn't hide the point.\n * @private\n */\n function justifyDataLabel(dataLabel, options, alignAttr, bBox, alignTo, isNew) {\n var chart = this.chart,\n align = options.align,\n verticalAlign = options.verticalAlign,\n padding = dataLabel.box ? 0 : (dataLabel.padding || 0),\n horizontalAxis = chart.inverted ? this.yAxis : this.xAxis,\n horizontalAxisShift = horizontalAxis ?\n horizontalAxis.left - chart.plotLeft : 0,\n verticalAxis = chart.inverted ? this.xAxis : this.yAxis,\n verticalAxisShift = verticalAxis ?\n verticalAxis.top - chart.plotTop : 0;\n var _a = options.x,\n x = _a === void 0 ? 0 : _a,\n _b = options.y,\n y = _b === void 0 ? 0 : _b,\n off,\n justified;\n // Off left\n off = (alignAttr.x || 0) + padding + horizontalAxisShift;\n if (off < 0) {\n if (align === 'right' && x >= 0) {\n options.align = 'left';\n options.inside = true;\n }\n else {\n x -= off;\n }\n justified = true;\n }\n // Off right\n off = (alignAttr.x || 0) + bBox.width - padding + horizontalAxisShift;\n if (off > chart.plotWidth) {\n if (align === 'left' && x <= 0) {\n options.align = 'right';\n options.inside = true;\n }\n else {\n x += chart.plotWidth - off;\n }\n justified = true;\n }\n // Off top\n off = alignAttr.y + padding + verticalAxisShift;\n if (off < 0) {\n if (verticalAlign === 'bottom' && y >= 0) {\n options.verticalAlign = 'top';\n options.inside = true;\n }\n else {\n y -= off;\n }\n justified = true;\n }\n // Off bottom\n off = (alignAttr.y || 0) + bBox.height - padding + verticalAxisShift;\n if (off > chart.plotHeight) {\n if (verticalAlign === 'top' && y <= 0) {\n options.verticalAlign = 'bottom';\n options.inside = true;\n }\n else {\n y += chart.plotHeight - off;\n }\n justified = true;\n }\n if (justified) {\n options.x = x;\n options.y = y;\n dataLabel.placed = !isNew;\n dataLabel.align(options, void 0, alignTo);\n }\n return justified;\n }\n /**\n * Merge two objects that can be arrays. If one of them is an array, the\n * other is merged into each element. If both are arrays, each element is\n * merged by index. If neither are arrays, we use normal merge.\n * @private\n */\n function mergeArrays(one, two) {\n var res = [],\n i;\n if (DataLabel_isArray(one) && !DataLabel_isArray(two)) {\n res = one.map(function (el) {\n return DataLabel_merge(el, two);\n });\n }\n else if (DataLabel_isArray(two) && !DataLabel_isArray(one)) {\n res = two.map(function (el) {\n return DataLabel_merge(one, el);\n });\n }\n else if (!DataLabel_isArray(one) && !DataLabel_isArray(two)) {\n res = DataLabel_merge(one, two);\n }\n else if (DataLabel_isArray(one) && DataLabel_isArray(two)) {\n i = Math.max(one.length, two.length);\n while (i--) {\n res[i] = DataLabel_merge(one[i], two[i]);\n }\n }\n return res;\n }\n /**\n * Merge plotOptions and series options for dataLabels.\n * @private\n */\n function mergedDataLabelOptions(series) {\n var _a,\n _b;\n var plotOptions = series.chart.options.plotOptions;\n return DataLabel_splat(mergeArrays(mergeArrays((_a = plotOptions === null || plotOptions === void 0 ? void 0 : plotOptions.series) === null || _a === void 0 ? void 0 : _a.dataLabels, (_b = plotOptions === null || plotOptions === void 0 ? void 0 : plotOptions[series.type]) === null || _b === void 0 ? void 0 : _b.dataLabels), series.options.dataLabels));\n }\n /**\n * Set starting position for data label sorting animation.\n * @private\n */\n function setDataLabelStartPos(point, dataLabel, isNew, isInside, alignOptions) {\n var chart = this.chart, inverted = chart.inverted, xAxis = this.xAxis, reversed = xAxis.reversed, labelCenter = ((inverted ? dataLabel.height : dataLabel.width) || 0) / 2, pointWidth = point.pointWidth, halfWidth = pointWidth ? pointWidth / 2 : 0;\n dataLabel.startXPos = inverted ?\n alignOptions.x :\n (reversed ?\n -labelCenter - halfWidth :\n xAxis.width - labelCenter + halfWidth);\n dataLabel.startYPos = inverted ?\n (reversed ?\n this.yAxis.height - labelCenter + halfWidth :\n -labelCenter - halfWidth) : alignOptions.y;\n // We need to handle visibility in case of sorting point outside plot\n // area\n if (!isInside) {\n dataLabel\n .attr({ opacity: 1 })\n .animate({ opacity: 0 }, void 0, dataLabel.hide);\n }\n else if (dataLabel.visibility === 'hidden') {\n dataLabel.show();\n dataLabel\n .attr({ opacity: 0 })\n .animate({ opacity: 1 });\n }\n // Save start position on first render, but do not change position\n if (!chart.hasRendered) {\n return;\n }\n // Set start position\n if (isNew) {\n dataLabel.attr({ x: dataLabel.startXPos, y: dataLabel.startYPos });\n }\n dataLabel.placed = true;\n }\n})(DataLabel || (DataLabel = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Series_DataLabel = (DataLabel);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Callback JavaScript function to format the data label as a string. Note that\n * if a `format` is defined, the format takes precedence and the formatter is\n * ignored.\n *\n * @callback Highcharts.DataLabelsFormatterCallbackFunction\n *\n * @param {Highcharts.Point} this\n * Data label context to format\n *\n * @param {Highcharts.DataLabelsOptions} options\n * [API options](/highcharts/plotOptions.series.dataLabels) of the data label\n *\n * @return {number|string|null|undefined}\n * Formatted data label text\n */\n/**\n * Values for handling data labels that flow outside the plot area.\n *\n * @typedef {\"allow\"|\"justify\"} Highcharts.DataLabelsOverflowValue\n */\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Series/Column/ColumnDataLabel.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar ColumnDataLabel_composed = Core_Globals.composed;\n\nvar ColumnDataLabel_Series = Series_SeriesRegistry.series;\n\nvar ColumnDataLabel_merge = Core_Utilities.merge, ColumnDataLabel_pick = Core_Utilities.pick, ColumnDataLabel_pushUnique = Core_Utilities.pushUnique;\n/* *\n *\n * Composition\n *\n * */\nvar ColumnDataLabel;\n(function (ColumnDataLabel) {\n /* *\n *\n * Functions\n *\n * */\n /**\n * Override the basic data label alignment by adjusting for the position of\n * the column.\n * @private\n */\n function alignDataLabel(point, dataLabel, options, alignTo, isNew) {\n var inverted = this.chart.inverted,\n series = point.series,\n xLen = (series.xAxis ? series.xAxis.len : this.chart.plotSizeX) || 0,\n yLen = (series.yAxis ? series.yAxis.len : this.chart.plotSizeY) || 0, \n // Data label box for alignment\n dlBox = point.dlBox || point.shapeArgs,\n below = ColumnDataLabel_pick(point.below, // Range series\n point.plotY >\n ColumnDataLabel_pick(this.translatedThreshold,\n yLen)), \n // Draw it inside the box?\n inside = ColumnDataLabel_pick(options.inside, !!this.options.stacking);\n // Align to the column itself, or the top of it\n if (dlBox) { // Area range uses this method but not alignTo\n alignTo = ColumnDataLabel_merge(dlBox);\n // Check for specific overflow and crop conditions (#13240)\n if (!(options.overflow === 'allow' && options.crop === false)) {\n if (alignTo.y < 0) {\n alignTo.height += alignTo.y;\n alignTo.y = 0;\n }\n // If parts of the box overshoots outside the plot area, modify\n // the box to center the label inside\n var overshoot = alignTo.y + alignTo.height - yLen;\n if (overshoot > 0 && overshoot < alignTo.height - 1) {\n alignTo.height -= overshoot;\n }\n }\n if (inverted) {\n alignTo = {\n x: yLen - alignTo.y - alignTo.height,\n y: xLen - alignTo.x - alignTo.width,\n width: alignTo.height,\n height: alignTo.width\n };\n }\n // Compute the alignment box\n if (!inside) {\n if (inverted) {\n alignTo.x += below ? 0 : alignTo.width;\n alignTo.width = 0;\n }\n else {\n alignTo.y += below ? alignTo.height : 0;\n alignTo.height = 0;\n }\n }\n }\n // When alignment is undefined (typically columns and bars), display the\n // individual point below or above the point depending on the threshold\n options.align = ColumnDataLabel_pick(options.align, !inverted || inside ? 'center' : below ? 'right' : 'left');\n options.verticalAlign = ColumnDataLabel_pick(options.verticalAlign, inverted || inside ? 'middle' : below ? 'top' : 'bottom');\n // Call the parent method\n ColumnDataLabel_Series.prototype.alignDataLabel.call(this, point, dataLabel, options, alignTo, isNew);\n // If label was justified and we have contrast, set it:\n if (options.inside && point.contrastColor) {\n dataLabel.css({\n color: point.contrastColor\n });\n }\n }\n /** @private */\n function compose(ColumnSeriesClass) {\n Series_DataLabel.compose(ColumnDataLabel_Series);\n if (ColumnDataLabel_pushUnique(ColumnDataLabel_composed, 'ColumnDataLabel')) {\n ColumnSeriesClass.prototype.alignDataLabel = alignDataLabel;\n }\n }\n ColumnDataLabel.compose = compose;\n})(ColumnDataLabel || (ColumnDataLabel = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Column_ColumnDataLabel = (ColumnDataLabel);\n\n;// ./code/es5/es-modules/Series/Bar/BarSeries.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar BarSeries_extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d,\n b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d,\n b) { d.__proto__ = b; }) ||\n function (d,\n b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\nvar BarSeries_extend = Core_Utilities.extend, BarSeries_merge = Core_Utilities.merge;\n/* *\n *\n * Class\n *\n * */\n/**\n * Bar series type.\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.bar\n *\n * @augments Highcharts.Series\n */\nvar BarSeries = /** @class */ (function (_super) {\n BarSeries_extends(BarSeries, _super);\n function BarSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /* *\n *\n * Static Properties\n *\n * */\n /**\n * A bar series is a special type of column series where the columns are\n * horizontal.\n *\n * @sample highcharts/demo/bar-chart/\n * Bar chart\n *\n * @extends plotOptions.column\n * @product highcharts\n * @optionparent plotOptions.bar\n */\n BarSeries.defaultOptions = BarSeries_merge(Column_ColumnSeries.defaultOptions, {\n // Nothing here yet\n });\n return BarSeries;\n}(Column_ColumnSeries));\nBarSeries_extend(BarSeries.prototype, {\n inverted: true\n});\nSeries_SeriesRegistry.registerSeriesType('bar', BarSeries);\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Bar_BarSeries = ((/* unused pure expression or super */ null && (BarSeries)));\n/* *\n *\n * API Options\n *\n * */\n/**\n * A `bar` series. If the [type](#series.bar.type) option is not specified,\n * it is inherited from [chart.type](#chart.type).\n *\n * @extends series,plotOptions.bar\n * @excluding connectNulls, dashStyle, dataParser, dataURL, gapSize, gapUnit,\n * linecap, lineWidth, marker, connectEnds, step\n * @product highcharts\n * @apioption series.bar\n */\n/**\n * An array of data points for the series. For the `bar` series type,\n * points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n * interpreted as `y` options. The `x` values will be automatically\n * calculated, either starting at 0 and incremented by 1, or from\n * `pointStart` and `pointInterval` given in the series options. If the axis\n * has categories, these will be used. Example:\n * ```js\n * data: [0, 5, 3, 5]\n * ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n * `x,y`. If the first value is a string, it is applied as the name of the\n * point, and the `x` value is inferred.\n * ```js\n * data: [\n * [0, 5],\n * [1, 10],\n * [2, 3]\n * ]\n * ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of\n * data points exceeds the series'\n * [turboThreshold](#series.bar.turboThreshold), this option is not\n * available.\n * ```js\n * data: [{\n * x: 1,\n * y: 1,\n * name: \"Point2\",\n * color: \"#00FF00\"\n * }, {\n * x: 1,\n * y: 10,\n * name: \"Point1\",\n * color: \"#FF00FF\"\n * }]\n * ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n * Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n * Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n * Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n * Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Config objects\n *\n * @type {Array<number|Array<(number|string),(number|null)>|null|*>}\n * @extends series.column.data\n * @product highcharts\n * @apioption series.bar.data\n */\n/**\n * @excluding halo,lineWidth,lineWidthPlus,marker\n * @product highcharts highstock\n * @apioption series.bar.states.hover\n */\n/**\n * @excluding halo,lineWidth,lineWidthPlus,marker\n * @product highcharts highstock\n * @apioption series.bar.states.select\n */\n''; // Gets doclets above into transpiled\n\n;// ./code/es5/es-modules/Series/Scatter/ScatterSeriesDefaults.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n * API Options\n *\n * */\n/**\n * A scatter plot uses cartesian coordinates to display values for two\n * variables for a set of data.\n *\n * @sample {highcharts} highcharts/demo/scatter/\n * Scatter plot\n *\n * @extends plotOptions.line\n * @excluding cropThreshold, legendSymbolColor, pointPlacement, shadow,\n * useOhlcData\n * @product highcharts highstock\n * @optionparent plotOptions.scatter\n */\nvar ScatterSeriesDefaults = {\n /**\n * The width of the line connecting the data points.\n *\n * @sample {highcharts} highcharts/plotoptions/scatter-linewidth-none/\n * 0 by default\n * @sample {highcharts} highcharts/plotoptions/scatter-linewidth-1/\n * 1px\n *\n * @product highcharts highstock\n */\n lineWidth: 0,\n findNearestPointBy: 'xy',\n /**\n * Apply a jitter effect for the rendered markers. When plotting\n * discrete values, a little random noise may help telling the points\n * apart. The jitter setting applies a random displacement of up to `n`\n * axis units in either direction. So for example on a horizontal X\n * axis, setting the `jitter.x` to 0.24 will render the point in a\n * random position between 0.24 units to the left and 0.24 units to the\n * right of the true axis position. On a category axis, setting it to\n * 0.5 will fill up the bin and make the data appear continuous.\n *\n * When rendered on top of a box plot or a column series, a jitter value\n * of 0.24 will correspond to the underlying series' default\n * [groupPadding](\n * https://api.highcharts.com/highcharts/plotOptions.column.groupPadding)\n * and [pointPadding](\n * https://api.highcharts.com/highcharts/plotOptions.column.pointPadding)\n * settings.\n *\n * **Note:** With boost mode enabled, the jitter effect is not supported.\n *\n * @sample {highcharts} highcharts/demo/scatter-jitter\n * Jitter on a scatter plot\n *\n * @sample {highcharts} highcharts/series-scatter/jitter-boxplot\n * Jittered scatter plot on top of a box plot\n *\n * @product highcharts highstock\n * @since 7.0.2\n */\n jitter: {\n /**\n * The maximal X offset for the random jitter effect.\n */\n x: 0,\n /**\n * The maximal Y offset for the random jitter effect.\n */\n y: 0\n },\n marker: {\n enabled: true // Overrides auto-enabling in line series (#3647)\n },\n /**\n * Sticky tracking of mouse events. When true, the `mouseOut` event\n * on a series isn't triggered until the mouse moves over another\n * series, or out of the plot area. When false, the `mouseOut` event on\n * a series is triggered when the mouse leaves the area around the\n * series' graph or markers. This also implies the tooltip. When\n * `stickyTracking` is false and `tooltip.shared` is false, the tooltip\n * will be hidden when moving the mouse between series.\n *\n * @type {boolean}\n * @default false\n * @product highcharts highstock highmaps\n * @apioption plotOptions.scatter.stickyTracking\n */\n /**\n * A configuration object for the tooltip rendering of each single\n * series. Properties are inherited from [tooltip](#tooltip).\n * Overridable properties are `headerFormat`, `pointFormat`,\n * `yDecimals`, `xDateFormat`, `yPrefix` and `ySuffix`. Unlike other\n * series, in a scatter plot the series.name by default shows in the\n * headerFormat and point.x and point.y in the pointFormat.\n *\n * @product highcharts highstock highmaps\n */\n tooltip: {\n /**\n * @product highcharts highstock\n */\n headerFormat: '<span style=\"color:{point.color}\">\\u25CF</span> ' +\n '<span style=\"font-size: 0.8em\"> {series.name}</span><br/>',\n pointFormat: 'x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>'\n }\n};\n/**\n * A `scatter` series. If the [type](#series.scatter.type) option is\n * not specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends series,plotOptions.scatter\n * @excluding cropThreshold, dataParser, dataURL, useOhlcData\n * @product highcharts highstock\n * @apioption series.scatter\n */\n/**\n * An array of data points for the series. For the `scatter` series\n * type, points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n * interpreted as `y` options. The `x` values will be automatically\n * calculated, either starting at 0 and incremented by 1, or from\n * `pointStart` and `pointInterval` given in the series options. If the axis\n * has categories, these will be used. Example:\n * ```js\n * data: [0, 5, 3, 5]\n * ```\n *\n * 2. An array of arrays with 2 values. In this case, the values correspond to\n * `x,y`. If the first value is a string, it is applied as the name of the\n * point, and the `x` value is inferred.\n * ```js\n * data: [\n * [0, 0],\n * [1, 8],\n * [2, 9]\n * ]\n * ```\n *\n * 3. An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of\n * data points exceeds the series'\n * [turboThreshold](#series.scatter.turboThreshold), this option is not\n * available.\n * ```js\n * data: [{\n * x: 1,\n * y: 2,\n * name: \"Point2\",\n * color: \"#00FF00\"\n * }, {\n * x: 1,\n * y: 4,\n * name: \"Point1\",\n * color: \"#FF00FF\"\n * }]\n * ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n * Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n * Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n * Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n * Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Config objects\n *\n * @type {Array<number|Array<(number|string),(number|null)>|null|*>}\n * @extends series.line.data\n * @product highcharts highstock\n * @apioption series.scatter.data\n */\n''; // Keeps doclets above in JS file\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Scatter_ScatterSeriesDefaults = (ScatterSeriesDefaults);\n\n;// ./code/es5/es-modules/Series/Scatter/ScatterSeries.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar ScatterSeries_extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d,\n b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d,\n b) { d.__proto__ = b; }) ||\n function (d,\n b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\nvar ScatterSeries_a = Series_SeriesRegistry.seriesTypes, ScatterSeries_ColumnSeries = ScatterSeries_a.column, ScatterSeries_LineSeries = ScatterSeries_a.line;\n\nvar ScatterSeries_addEvent = Core_Utilities.addEvent, ScatterSeries_extend = Core_Utilities.extend, ScatterSeries_merge = Core_Utilities.merge;\n/* *\n *\n * Class\n *\n * */\n/**\n * Scatter series type.\n *\n * @private\n */\nvar ScatterSeries = /** @class */ (function (_super) {\n ScatterSeries_extends(ScatterSeries, _super);\n function ScatterSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /**\n * Optionally add the jitter effect.\n * @private\n */\n ScatterSeries.prototype.applyJitter = function () {\n var series = this,\n jitter = this.options.jitter,\n len = this.points.length;\n /**\n * Return a repeatable, pseudo-random number based on an integer\n * seed.\n * @private\n */\n function unrandom(seed) {\n var rand = Math.sin(seed) * 10000;\n return rand - Math.floor(rand);\n }\n if (jitter) {\n this.points.forEach(function (point, i) {\n ['x', 'y'].forEach(function (dim, j) {\n if (jitter[dim] && !point.isNull) {\n var plotProp = \"plot\".concat(dim.toUpperCase()), axis = series[\"\" + dim + \"Axis\"], translatedJitter = jitter[dim] *\n axis.transA;\n if (axis && !axis.logarithmic) {\n // Identify the outer bounds of the jitter range\n var min = Math.max(0, (point[plotProp] || 0) - translatedJitter),\n max = Math.min(axis.len, (point[plotProp] || 0) + translatedJitter);\n // Find a random position within this range\n point[plotProp] = min +\n (max - min) * unrandom(i + j * len);\n // Update clientX for the tooltip k-d-tree\n if (dim === 'x') {\n point.clientX = point.plotX;\n }\n }\n }\n });\n });\n }\n };\n /**\n * @private\n */\n ScatterSeries.prototype.drawGraph = function () {\n if (this.options.lineWidth) {\n _super.prototype.drawGraph.call(this);\n }\n else if (this.graph) {\n this.graph = this.graph.destroy();\n }\n };\n /* *\n *\n * Static Properties\n *\n * */\n ScatterSeries.defaultOptions = ScatterSeries_merge(ScatterSeries_LineSeries.defaultOptions, Scatter_ScatterSeriesDefaults);\n return ScatterSeries;\n}(ScatterSeries_LineSeries));\nScatterSeries_extend(ScatterSeries.prototype, {\n drawTracker: ScatterSeries_ColumnSeries.prototype.drawTracker,\n sorted: false,\n requireSorting: false,\n noSharedTooltip: true,\n trackerGroups: ['group', 'markerGroup', 'dataLabelsGroup']\n});\n/* *\n *\n * Events\n *\n * */\n/* eslint-disable no-invalid-this */\nScatterSeries_addEvent(ScatterSeries, 'afterTranslate', function () {\n this.applyJitter();\n});\nSeries_SeriesRegistry.registerSeriesType('scatter', ScatterSeries);\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Scatter_ScatterSeries = ((/* unused pure expression or super */ null && (ScatterSeries)));\n\n;// ./code/es5/es-modules/Series/CenteredUtilities.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar CenteredUtilities_deg2rad = Core_Globals.deg2rad;\n\n\nvar CenteredUtilities_fireEvent = Core_Utilities.fireEvent, CenteredUtilities_isNumber = Core_Utilities.isNumber, CenteredUtilities_pick = Core_Utilities.pick, CenteredUtilities_relativeLength = Core_Utilities.relativeLength;\n/**\n * @private\n */\nvar CenteredUtilities;\n(function (CenteredUtilities) {\n /* *\n *\n * Declarations\n *\n * */\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /**\n * Get the center of the pie based on the size and center options relative\n * to the plot area. Borrowed by the polar and gauge series types.\n *\n * @private\n * @function Highcharts.CenteredSeriesMixin.getCenter\n */\n function getCenter() {\n var options = this.options,\n chart = this.chart,\n slicingRoom = 2 * (options.slicedOffset || 0),\n plotWidth = chart.plotWidth - 2 * slicingRoom,\n plotHeight = chart.plotHeight - 2 * slicingRoom,\n centerOption = options.center,\n smallestSize = Math.min(plotWidth,\n plotHeight),\n thickness = options.thickness;\n var handleSlicingRoom,\n size = options.size,\n innerSize = options.innerSize || 0,\n i,\n value;\n if (typeof size === 'string') {\n size = parseFloat(size);\n }\n if (typeof innerSize === 'string') {\n innerSize = parseFloat(innerSize);\n }\n var positions = [\n CenteredUtilities_pick(centerOption === null || centerOption === void 0 ? void 0 : centerOption[0], '50%'),\n CenteredUtilities_pick(centerOption === null || centerOption === void 0 ? void 0 : centerOption[1], '50%'),\n // Prevent from negative values\n CenteredUtilities_pick(size && size < 0 ? void 0 : options.size, '100%'),\n CenteredUtilities_pick(innerSize && innerSize < 0 ? void 0 : options.innerSize || 0, '0%')\n ];\n // No need for inner size in angular (gauges) series but still required\n // for pie series\n if (chart.angular && !(this instanceof Series_Series)) {\n positions[3] = 0;\n }\n for (i = 0; i < 4; ++i) {\n value = positions[i];\n handleSlicingRoom = i < 2 || (i === 2 && /%$/.test(value));\n // I == 0: centerX, relative to width\n // i == 1: centerY, relative to height\n // i == 2: size, relative to smallestSize\n // i == 3: innerSize, relative to size\n positions[i] = CenteredUtilities_relativeLength(value, [plotWidth, plotHeight, smallestSize, positions[2]][i]) + (handleSlicingRoom ? slicingRoom : 0);\n }\n // Inner size cannot be larger than size (#3632)\n if (positions[3] > positions[2]) {\n positions[3] = positions[2];\n }\n // Thickness overrides innerSize, need to be less than pie size (#6647)\n if (CenteredUtilities_isNumber(thickness) &&\n thickness * 2 < positions[2] && thickness > 0) {\n positions[3] = positions[2] - thickness * 2;\n }\n CenteredUtilities_fireEvent(this, 'afterGetCenter', { positions: positions });\n return positions;\n }\n CenteredUtilities.getCenter = getCenter;\n /**\n * GetStartAndEndRadians - Calculates start and end angles in radians.\n * Used in series types such as pie and sunburst.\n *\n * @private\n * @function Highcharts.CenteredSeriesMixin.getStartAndEndRadians\n *\n * @param {number} [start]\n * Start angle in degrees.\n *\n * @param {number} [end]\n * Start angle in degrees.\n *\n * @return {Highcharts.RadianAngles}\n * Returns an object containing start and end angles as radians.\n */\n function getStartAndEndRadians(start, end) {\n var startAngle = CenteredUtilities_isNumber(start) ? start : 0, // Must be a number\n endAngle = ((CenteredUtilities_isNumber(end) && // Must be a number\n end > startAngle && // Must be larger than the start angle\n // difference must be less than 360 degrees\n (end - startAngle) < 360) ?\n end :\n startAngle + 360),\n correction = -90;\n return {\n start: CenteredUtilities_deg2rad * (startAngle + correction),\n end: CenteredUtilities_deg2rad * (endAngle + correction)\n };\n }\n CenteredUtilities.getStartAndEndRadians = getStartAndEndRadians;\n})(CenteredUtilities || (CenteredUtilities = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Series_CenteredUtilities = (CenteredUtilities);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * @private\n * @interface Highcharts.RadianAngles\n */ /**\n* @name Highcharts.RadianAngles#end\n* @type {number}\n*/ /**\n* @name Highcharts.RadianAngles#start\n* @type {number}\n*/\n''; // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Series/Pie/PiePoint.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar PiePoint_extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d,\n b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d,\n b) { d.__proto__ = b; }) ||\n function (d,\n b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar PiePoint_assign = (undefined && undefined.__assign) || function () {\n PiePoint_assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return PiePoint_assign.apply(this, arguments);\n};\n\nvar PiePoint_setAnimation = AnimationUtilities.setAnimation;\n\n\nvar PiePoint_addEvent = Core_Utilities.addEvent, PiePoint_defined = Core_Utilities.defined, PiePoint_extend = Core_Utilities.extend, PiePoint_isNumber = Core_Utilities.isNumber, PiePoint_pick = Core_Utilities.pick, PiePoint_relativeLength = Core_Utilities.relativeLength;\n/* *\n *\n * Class\n *\n * */\nvar PiePoint = /** @class */ (function (_super) {\n PiePoint_extends(PiePoint, _super);\n /**\n * Initialize the pie slice.\n * @private\n */\n function PiePoint(series, options, x) {\n var _a;\n var _this = _super.call(this,\n series,\n options,\n x) || this;\n _this.half = 0;\n (_a = _this.name) !== null && _a !== void 0 ? _a : (_this.name = 'Slice');\n // Add event listener for select\n var toggleSlice = function (e) {\n _this.slice(e.type === 'select');\n };\n PiePoint_addEvent(_this, 'select', toggleSlice);\n PiePoint_addEvent(_this, 'unselect', toggleSlice);\n return _this;\n }\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /**\n * Extendable method for getting the path of the connector between the\n * data label and the pie slice.\n * @private\n */\n PiePoint.prototype.getConnectorPath = function (dataLabel) {\n var labelPosition = dataLabel.dataLabelPosition,\n options = (dataLabel.options || {}),\n connectorShape = options.connectorShape,\n shapeFunc = (this.connectorShapes[connectorShape] || connectorShape);\n return labelPosition && shapeFunc.call(this, PiePoint_assign(PiePoint_assign({}, labelPosition.computed), { alignment: labelPosition.alignment }), labelPosition.connectorPosition, options) || [];\n };\n /**\n * @private\n */\n PiePoint.prototype.getTranslate = function () {\n return this.sliced && this.slicedTranslation || {\n translateX: 0,\n translateY: 0\n };\n };\n /**\n * @private\n */\n PiePoint.prototype.haloPath = function (size) {\n var shapeArgs = this.shapeArgs;\n return this.sliced || !this.visible ?\n [] :\n this.series.chart.renderer.symbols.arc(shapeArgs.x, shapeArgs.y, shapeArgs.r + size, shapeArgs.r + size, {\n // Substract 1px to ensure the background is not bleeding\n // through between the halo and the slice (#7495).\n innerR: shapeArgs.r - 1,\n start: shapeArgs.start,\n end: shapeArgs.end,\n borderRadius: shapeArgs.borderRadius\n });\n };\n /**\n * Negative points are not valid (#1530, #3623, #5322)\n * @private\n */\n PiePoint.prototype.isValid = function () {\n return PiePoint_isNumber(this.y) && this.y >= 0;\n };\n /**\n * Toggle the visibility of a pie slice or other data point. Note that this\n * method is available only for some series, like pie, treemap and sunburst.\n *\n * @function Highcharts.Point#setVisible\n *\n * @param {boolean} [vis]\n * True to show the pie slice or other data point, false to hide. If\n * undefined, the visibility is toggled.\n *\n * @param {boolean} [redraw] Whether to redraw the chart after the point is\n * altered. If doing more operations on the chart, it is a good idea to set\n * redraw to false and call {@link Chart#redraw|chart.redraw()} after.\n *\n */\n PiePoint.prototype.setVisible = function (vis, redraw) {\n if (redraw === void 0) { redraw = true; }\n if (vis !== this.visible) {\n // If called without an argument, toggle visibility\n this.update({\n visible: vis !== null && vis !== void 0 ? vis : !this.visible\n }, redraw, void 0, false);\n }\n };\n /**\n * Set or toggle whether the slice is cut out from the pie.\n * @private\n *\n * @param {boolean} sliced\n * When undefined, the slice state is toggled.\n *\n * @param {boolean} [redraw]\n * Whether to redraw the chart. True by default.\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation]\n * Animation options.\n */\n PiePoint.prototype.slice = function (sliced, redraw, animation) {\n var series = this.series,\n chart = series.chart;\n PiePoint_setAnimation(animation, chart);\n // Redraw is true by default\n redraw = PiePoint_pick(redraw, true);\n /**\n * Pie series only. Whether to display a slice offset from the\n * center.\n * @name Highcharts.Point#sliced\n * @type {boolean|undefined}\n */\n // if called without an argument, toggle\n this.sliced = this.options.sliced = sliced =\n PiePoint_defined(sliced) ? sliced : !this.sliced;\n // Update userOptions.data\n series.options.data[series.data.indexOf(this)] =\n this.options;\n if (this.graphic) {\n this.graphic.animate(this.getTranslate());\n }\n };\n return PiePoint;\n}(Series_Point));\nPiePoint_extend(PiePoint.prototype, {\n connectorShapes: {\n // Only one available before v7.0.0\n fixedOffset: function (labelPosition, connectorPosition, options) {\n var breakAt = connectorPosition.breakAt,\n touchingSliceAt = connectorPosition.touchingSliceAt,\n lineSegment = options.softConnector ? [\n 'C', // Soft break\n // 1st control point (of the curve)\n labelPosition.x +\n // 5 gives the connector a little horizontal bend\n (labelPosition.alignment === 'left' ? -5 : 5),\n labelPosition.y, //\n 2 * breakAt.x - touchingSliceAt.x, // 2nd control point\n 2 * breakAt.y - touchingSliceAt.y, //\n breakAt.x, // End of the curve\n breakAt.y //\n ] : [\n 'L', // Pointy break\n breakAt.x,\n breakAt.y\n ];\n // Assemble the path\n return ([\n ['M', labelPosition.x, labelPosition.y],\n lineSegment,\n ['L', touchingSliceAt.x, touchingSliceAt.y]\n ]);\n },\n straight: function (labelPosition, connectorPosition) {\n var touchingSliceAt = connectorPosition.touchingSliceAt;\n // Direct line to the slice\n return [\n ['M', labelPosition.x, labelPosition.y],\n ['L', touchingSliceAt.x, touchingSliceAt.y]\n ];\n },\n crookedLine: function (labelPosition, connectorPosition, options) {\n var _a = connectorPosition.angle,\n angle = _a === void 0 ? this.angle || 0 : _a,\n breakAt = connectorPosition.breakAt,\n touchingSliceAt = connectorPosition.touchingSliceAt,\n series = this.series,\n _b = series.center,\n cx = _b[0],\n cy = _b[1],\n diameter = _b[2],\n r = diameter / 2,\n _c = series.chart,\n plotLeft = _c.plotLeft,\n plotWidth = _c.plotWidth,\n leftAligned = labelPosition.alignment === 'left',\n x = labelPosition.x,\n y = labelPosition.y;\n var crookX = breakAt.x;\n if (options.crookDistance) {\n var crookDistance = PiePoint_relativeLength(// % to fraction\n options.crookDistance, 1);\n crookX = leftAligned ?\n cx +\n r +\n (plotWidth + plotLeft - cx - r) * (1 - crookDistance) :\n plotLeft + (cx - r) * crookDistance;\n // When the crookDistance option is undefined, make the bend in the\n // intersection between the radial line in the middle of the slice,\n // and the extension of the label position.\n }\n else {\n crookX = cx + (cy - y) * Math.tan(angle - Math.PI / 2);\n }\n var path = [['M',\n x,\n y]];\n // The crookedLine formula doesn't make sense if the path overlaps\n // the label - use straight line instead in that case\n if (leftAligned ?\n (crookX <= x && crookX >= breakAt.x) :\n (crookX >= x && crookX <= breakAt.x)) {\n path.push(['L', crookX, y]);\n }\n path.push(['L', breakAt.x, breakAt.y], ['L', touchingSliceAt.x, touchingSliceAt.y]);\n return path;\n }\n }\n});\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Pie_PiePoint = (PiePoint);\n\n;// ./code/es5/es-modules/Series/Pie/PieSeriesDefaults.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n * API Options\n *\n * */\n/**\n * A pie chart is a circular graphic which is divided into slices to\n * illustrate numerical proportion.\n *\n * @sample highcharts/demo/pie-chart/\n * Pie chart\n *\n * @extends plotOptions.line\n * @excluding animationLimit, boostThreshold, connectEnds, connectNulls,\n * cropThreshold, dashStyle, dataSorting, dragDrop,\n * findNearestPointBy, getExtremesFromAll, label, lineWidth,\n * linkedTo, marker, negativeColor, pointInterval,\n * pointIntervalUnit, pointPlacement, pointStart,\n * softThreshold, stacking, step, threshold, turboThreshold,\n * zoneAxis, zones, dataSorting, boostBlending\n * @product highcharts highmaps\n * @optionparent plotOptions.pie\n *\n * @private\n */\nvar PieSeriesDefaults = {\n /**\n * The corner radius of the border surrounding each slice. A number\n * signifies pixels. A percentage string, like for example `50%`, signifies\n * a size relative to the radius and the inner radius.\n *\n * @sample highcharts/plotoptions/series-border-radius\n * Column and pie with rounded border\n *\n * @since 11.0.0\n *\n * @type {number|string|Highcharts.BorderRadiusOptionsObject}\n */\n borderRadius: 3,\n /**\n * @excluding legendItemClick\n * @apioption plotOptions.pie.events\n */\n /**\n * Fires when the checkbox next to the point name in the legend is\n * clicked. One parameter, event, is passed to the function. The state\n * of the checkbox is found by event.checked. The checked item is found\n * by event.item. Return false to prevent the default action which is to\n * toggle the select state of the series.\n *\n * @sample {highcharts} highcharts/plotoptions/series-events-checkboxclick/\n * Alert checkbox status\n *\n * @type {Function}\n * @since 1.2.0\n * @product highcharts highmaps\n * @context Highcharts.Point\n * @apioption plotOptions.pie.events.checkboxClick\n */\n /**\n * Fires when the legend item belonging to the pie point (slice) is\n * clicked. The `this` keyword refers to the point itself. One\n * parameter, `event`, is passed to the function, containing common\n * event information. The default action is to toggle the visibility of\n * the point. This can be prevented by calling `event.preventDefault()`.\n *\n * **Note:** This option is deprecated in favor of\n * [legend.events.itemClick](#legend.events.itemClick).\n *\n * @deprecated 11.4.4\n * @type {Highcharts.PointLegendItemClickCallbackFunction}\n * @since 1.2.0\n * @product highcharts highmaps\n * @apioption plotOptions.pie.point.events.legendItemClick\n */\n /**\n * The center of the pie chart relative to the plot area. Can be\n * percentages or pixel values. The default behaviour (as of 3.0) is to\n * center the pie so that all slices and data labels are within the plot\n * area. As a consequence, the pie may actually jump around in a chart\n * with dynamic values, as the data labels move. In that case, the\n * center should be explicitly set, for example to `[\"50%\", \"50%\"]`.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-center/\n * Centered at 100, 100\n *\n * @type {Array<(number|string|null),(number|string|null)>}\n * @default [null, null]\n * @product highcharts highmaps\n *\n * @private\n */\n center: [null, null],\n /**\n * The color of the pie series. A pie series is represented as an empty\n * circle if the total sum of its values is 0. Use this property to\n * define the color of its border.\n *\n * In styled mode, the color can be defined by the\n * [colorIndex](#plotOptions.series.colorIndex) option. Also, the series\n * color can be set with the `.highcharts-series`,\n * `.highcharts-color-{n}`, `.highcharts-{type}-series` or\n * `.highcharts-series-{n}` class, or individual classes given by the\n * `className` option.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-emptyseries/\n * Empty pie series\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @default ${palette.neutralColor20}\n * @apioption plotOptions.pie.color\n */\n /**\n * @product highcharts\n *\n * @private\n */\n clip: false,\n /**\n * @ignore-option\n *\n * @private\n */\n colorByPoint: true, // Always true for pies\n /**\n * A series specific or series type specific color set to use instead\n * of the global [colors](#colors).\n *\n * @sample {highcharts} highcharts/demo/pie-monochrome/\n * Set default colors for all pies\n *\n * @type {Array<Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject>}\n * @since 3.0\n * @product highcharts highmaps\n * @apioption plotOptions.pie.colors\n */\n /**\n * @declare Highcharts.SeriesPieDataLabelsOptionsObject\n * @extends plotOptions.series.dataLabels\n * @excluding align, allowOverlap, inside, staggerLines, step\n * @private\n */\n dataLabels: {\n /**\n * Alignment method for data labels. Possible values are:\n *\n * - `plotEdges`: Each label touches the nearest vertical edge of\n * the plot area.\n *\n * - `connectors`: Connectors have the same x position and the\n * widest label of each half (left & right) touches the nearest\n * vertical edge of the plot area.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-alignto-connectors/\n * alignTo: connectors\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-alignto-plotedges/\n * alignTo: plotEdges\n *\n * @type {string}\n * @since 7.0.0\n * @product highcharts highmaps\n * @apioption plotOptions.pie.dataLabels.alignTo\n */\n /**\n * The color of the line connecting the data label to the pie slice.\n * The default color is the same as the point's color.\n *\n * In styled mode, the connector stroke is given in the\n * `.highcharts-data-label-connector` class.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-connectorcolor/\n * Blue connectors\n * @sample {highcharts} highcharts/css/pie-point/\n * Styled connectors\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @since 2.1\n * @product highcharts highmaps\n * @apioption plotOptions.pie.dataLabels.connectorColor\n */\n /**\n * The distance from the data label to the connector. Note that\n * data labels also have a default `padding`, so in order for the\n * connector to touch the text, the `padding` must also be 0.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-connectorpadding/\n * No padding\n *\n * @since 2.1\n * @product highcharts highmaps\n */\n connectorPadding: 5,\n /**\n * Specifies the method that is used to generate the connector path.\n * Highcharts provides 3 built-in connector shapes: `'crookedLine'`\n * (default since v11), `'fixedOffset'` and `'straight'`.\n *\n * Users can provide their own method by passing a function instead of a\n * string. Three arguments are passed to the callback:\n *\n * - An object that holds the information about the coordinates of the\n * label (`x` & `y` properties) and how the label is located in\n * relation to the pie (`alignment` property). `alignment` can by one\n * of the following: `'left'` (pie on the left side of the data\n * label), `'right'` (pie on the right side of the data label) or\n * `'center'` (data label overlaps the pie).\n *\n * - An object that holds the information about the position of the\n * connector. Its `touchingSliceAt` porperty tells the position of\n * the place where the connector touches the slice.\n *\n * - Data label options\n *\n * The function has to return an SVG path definition in array form (see\n * the example).\n *\n * @sample {highcharts}\n * highcharts/plotoptions/pie-datalabels-connectorshape-string/\n * connectorShape is a String\n * @sample {highcharts}\n * highcharts/plotoptions/pie-datalabels-connectorshape-function/\n * connectorShape is a function\n *\n * @type {string|Function}\n * @since 7.0.0\n * @product highcharts highmaps\n */\n connectorShape: 'crookedLine',\n /**\n * The width of the line connecting the data label to the pie slice.\n *\n * In styled mode, the connector stroke width is given in the\n * `.highcharts-data-label-connector` class.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-connectorwidth-disabled/\n * Disable the connector\n * @sample {highcharts} highcharts/css/pie-point/\n * Styled connectors\n *\n * @type {number}\n * @default 1\n * @since 2.1\n * @product highcharts highmaps\n * @apioption plotOptions.pie.dataLabels.connectorWidth\n */\n /**\n * Works only if `connectorShape` is `'crookedLine'`. It defines how\n * far from the vertical plot edge the coonnector path should be\n * crooked. With the default, `undefined`, the crook is placed so that\n * the horizontal line from the label intersects with the radial line\n * extending through the center of the pie slice.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-crookdistance/\n * crookDistance set to 90%\n *\n * @since 7.0.0\n * @product highcharts highmaps\n */\n crookDistance: void 0,\n /**\n * The distance of the data label from the pie's edge. Negative\n * numbers put the data label on top of the pie slices. Can also be\n * defined as a percentage of pie's radius. Connectors are only\n * shown for data labels outside the pie.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-distance/\n * Data labels on top of the pie\n *\n * @type {number|string}\n * @since 2.1\n * @product highcharts highmaps\n */\n distance: 30,\n enabled: true,\n /**\n * A\n * [format string](https://www.highcharts.com/docs/chart-concepts/labels-and-string-formatting)\n * for the data label. Available variables are the same as for\n * `formatter`.\n *\n * @sample {highcharts} highcharts/plotoptions/series-datalabels-format/\n * Add a unit\n *\n * @type {string}\n * @default undefined\n * @since 3.0\n * @apioption plotOptions.pie.dataLabels.format\n */\n // eslint-disable-next-line valid-jsdoc\n /**\n * Callback JavaScript function to format the data label. Note that\n * if a `format` is defined, the format takes precedence and the\n * formatter is ignored.\n *\n * @type {Highcharts.DataLabelsFormatterCallbackFunction}\n * @default function () { return this.point.isNull ? void 0 : this.point.name; }\n */\n formatter: function () {\n return this.isNull ? void 0 : this.name;\n },\n /**\n * Whether to render the connector as a soft arc or a line with a sharp\n * break. Works only if `connectorShape` equals to `fixedOffset`.\n *\n * @sample {highcharts}\n * highcharts/plotoptions/pie-datalabels-softconnector-true/\n * Soft\n * @sample {highcharts}\n * highcharts/plotoptions/pie-datalabels-softconnector-false/\n * Non soft\n *\n * @since 2.1.7\n * @product highcharts highmaps\n */\n softConnector: true,\n /**\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-overflow\n * Long labels truncated with an ellipsis\n * @sample {highcharts} highcharts/plotoptions/pie-datalabels-overflow-wrap\n * Long labels are wrapped\n *\n * @type {Highcharts.CSSObject}\n * @apioption plotOptions.pie.dataLabels.style\n */\n x: 0\n },\n /**\n * If the total sum of the pie's values is 0, the series is represented\n * as an empty circle . The `fillColor` option defines the color of that\n * circle. Use [pie.borderWidth](#plotOptions.pie.borderWidth) to set\n * the border thickness.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-emptyseries/\n * Empty pie series\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @private\n */\n fillColor: void 0,\n /**\n * The end angle of the pie in degrees where 0 is top and 90 is right.\n * Defaults to `startAngle` plus 360.\n *\n * @sample {highcharts} highcharts/demo/pie-semi-circle/\n * Semi-circle donut\n *\n * @type {number}\n * @since 1.3.6\n * @product highcharts highmaps\n * @apioption plotOptions.pie.endAngle\n */\n /**\n * Thickness describing the ring size for a donut type chart,\n * overriding [innerSize](#plotOptions.pie.innerSize).\n *\n * @type {number}\n * @default undefined\n * @product highcharts\n * @since 10.1.0\n * @apioption plotOptions.pie.thickness\n * @private\n */\n /**\n * Equivalent to [chart.ignoreHiddenSeries](#chart.ignoreHiddenSeries),\n * this option tells whether the series shall be redrawn as if the\n * hidden point were `null`.\n *\n * The default value changed from `false` to `true` with Highcharts\n * 3.0.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-ignorehiddenpoint/\n * True, the hiddden point is ignored\n *\n * @since 2.3.0\n * @product highcharts highmaps\n *\n * @private\n */\n ignoreHiddenPoint: true,\n /**\n * @default true\n * @extends plotOptions.series.inactiveOtherPoints\n * @private\n */\n inactiveOtherPoints: true,\n /**\n * The size of the inner diameter for the pie. A size greater than 0\n * renders a donut chart. Can be a percentage or pixel value.\n * Percentages are relative to the pie size. Pixel values are given as\n * integers. Setting overridden by thickness.\n *\n *\n * Note: in Highcharts < 4.1.2, the percentage was relative to the plot\n * area, not the pie size.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-innersize-80px/\n * 80px inner size\n * @sample {highcharts} highcharts/plotoptions/pie-innersize-50percent/\n * 50% of the plot area\n * @sample {highcharts} highcharts/demo/3d-pie-donut/\n * 3D donut\n *\n * @type {number|string}\n * @default 0\n * @since 2.0\n * @product highcharts highmaps\n * @apioption plotOptions.pie.innerSize\n */\n /**\n * @ignore-option\n *\n * @private\n */\n legendType: 'point',\n /**\n * @ignore-option\n *\n * @private\n */\n marker: null, // Point options are specified in the base options\n /**\n * The minimum size for a pie in response to auto margins. The pie will\n * try to shrink to make room for data labels in side the plot area,\n * but only to this size.\n *\n * @type {number|string}\n * @default 80\n * @since 3.0\n * @product highcharts highmaps\n * @apioption plotOptions.pie.minSize\n */\n /**\n * The diameter of the pie relative to the plot area. Can be a\n * percentage or pixel value. Pixel values are given as integers. The\n * default behaviour (as of 3.0) is to scale to the plot area and give\n * room for data labels within the plot area.\n * [slicedOffset](#plotOptions.pie.slicedOffset) is also included in the\n * default size calculation. As a consequence, the size of the pie may\n * vary when points are updated and data labels more around. In that\n * case it is best to set a fixed value, for example `\"75%\"`.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-size/\n * Smaller pie\n *\n * @type {number|string|null}\n * @product highcharts highmaps\n *\n * @private\n */\n size: null,\n /**\n * Whether to display this particular series or series type in the\n * legend. Since 2.1, pies are not shown in the legend by default.\n *\n * @sample {highcharts} highcharts/plotoptions/series-showinlegend/\n * One series in the legend, one hidden\n *\n * @product highcharts highmaps\n *\n * @private\n */\n showInLegend: false,\n /**\n * If a point is sliced, moved out from the center, how many pixels\n * should it be moved?.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-slicedoffset-20/\n * 20px offset\n *\n * @product highcharts highmaps\n *\n * @private\n */\n slicedOffset: 10,\n /**\n * The start angle of the pie slices in degrees where 0 is top and 90\n * right.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-startangle-90/\n * Start from right\n *\n * @type {number}\n * @default 0\n * @since 2.3.4\n * @product highcharts highmaps\n * @apioption plotOptions.pie.startAngle\n */\n /**\n * Sticky tracking of mouse events. When true, the `mouseOut` event\n * on a series isn't triggered until the mouse moves over another\n * series, or out of the plot area. When false, the `mouseOut` event on\n * a series is triggered when the mouse leaves the area around the\n * series' graph or markers. This also implies the tooltip. When\n * `stickyTracking` is false and `tooltip.shared` is false, the tooltip\n * will be hidden when moving the mouse between series.\n *\n * @product highcharts highmaps\n *\n * @private\n */\n stickyTracking: false,\n tooltip: {\n followPointer: true\n },\n /**\n * The color of the border surrounding each slice. When `null`, the\n * border takes the same color as the slice fill. This can be used\n * together with a `borderWidth` to fill drawing gaps created by\n * antialiazing artefacts in borderless pies.\n *\n * In styled mode, the border stroke is given in the `.highcharts-point`\n * class.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-bordercolor-black/\n * Black border\n *\n * @type {Highcharts.ColorString|Highcharts.GradientColorObject|Highcharts.PatternObject}\n * @default #ffffff\n * @product highcharts highmaps\n *\n * @private\n */\n borderColor: \"#ffffff\" /* Palette.backgroundColor */,\n /**\n * The width of the border surrounding each slice.\n *\n * When setting the border width to 0, there may be small gaps between\n * the slices due to SVG antialiasing artefacts. To work around this,\n * keep the border width at 0.5 or 1, but set the `borderColor` to\n * `null` instead.\n *\n * In styled mode, the border stroke width is given in the\n * `.highcharts-point` class.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-borderwidth/\n * 3px border\n *\n * @product highcharts highmaps\n *\n * @private\n */\n borderWidth: 1,\n /**\n * @ignore-option\n * @private\n */\n lineWidth: void 0, // #12222\n states: {\n /**\n * @extends plotOptions.series.states.hover\n * @excluding marker, lineWidth, lineWidthPlus\n * @product highcharts highmaps\n */\n hover: {\n /**\n * How much to brighten the point on interaction. Requires the\n * main color to be defined in hex or rgb(a) format.\n *\n * In styled mode, the hover brightness is by default replaced\n * by a fill-opacity given in the `.highcharts-point-hover`\n * class.\n *\n * @sample {highcharts} highcharts/plotoptions/pie-states-hover-brightness/\n * Brightened by 0.5\n *\n * @product highcharts highmaps\n */\n brightness: 0.1\n }\n }\n};\n/**\n * A `pie` series. If the [type](#series.pie.type) option is not specified,\n * it is inherited from [chart.type](#chart.type).\n *\n * @extends series,plotOptions.pie\n * @excluding cropThreshold, dataParser, dataURL, linkedTo, stack, xAxis, yAxis,\n * dataSorting, step, boostThreshold, boostBlending\n * @product highcharts highmaps\n * @apioption series.pie\n */\n/**\n * An array of data points for the series. For the `pie` series type,\n * points can be given in the following ways:\n *\n * 1. An array of numerical values. In this case, the numerical values will be\n * interpreted as `y` options. Example:\n * ```js\n * data: [0, 5, 3, 5]\n * ```\n *\n * 2. An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of\n * data points exceeds the series'\n * [turboThreshold](#series.pie.turboThreshold),\n * this option is not available.\n * ```js\n * data: [{\n * y: 1,\n * name: \"Point2\",\n * color: \"#00FF00\"\n * }, {\n * y: 7,\n * name: \"Point1\",\n * color: \"#FF00FF\"\n * }]\n * ```\n *\n * @sample {highcharts} highcharts/chart/reflow-true/\n * Numerical values\n * @sample {highcharts} highcharts/series/data-array-of-arrays/\n * Arrays of numeric x and y\n * @sample {highcharts} highcharts/series/data-array-of-arrays-datetime/\n * Arrays of datetime x and y\n * @sample {highcharts} highcharts/series/data-array-of-name-value/\n * Arrays of point.name and y\n * @sample {highcharts} highcharts/series/data-array-of-objects/\n * Config objects\n *\n * @type {Array<number|Array<string,(number|null)>|null|*>}\n * @extends series.line.data\n * @excluding marker, x\n * @product highcharts highmaps\n * @apioption series.pie.data\n */\n/**\n * @type {Highcharts.SeriesPieDataLabelsOptionsObject}\n * @product highcharts highmaps\n * @apioption series.pie.data.dataLabels\n */\n/**\n * The sequential index of the data point in the legend.\n *\n * @type {number}\n * @product highcharts highmaps\n * @apioption series.pie.data.legendIndex\n */\n/**\n * Whether to display a slice offset from the center.\n *\n * @sample {highcharts} highcharts/point/sliced/\n * One sliced point\n *\n * @type {boolean}\n * @product highcharts highmaps\n * @apioption series.pie.data.sliced\n */\n/**\n * @extends plotOptions.pie.dataLabels\n * @excluding align, allowOverlap, inside, staggerLines, step\n * @product highcharts highmaps\n * @apioption series.pie.dataLabels\n */\n/**\n * @excluding legendItemClick\n * @product highcharts highmaps\n * @apioption series.pie.events\n */\n''; // Placeholder for transpiled doclets above\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Pie_PieSeriesDefaults = (PieSeriesDefaults);\n\n;// ./code/es5/es-modules/Series/Pie/PieSeries.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar PieSeries_extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d,\n b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d,\n b) { d.__proto__ = b; }) ||\n function (d,\n b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\nvar getStartAndEndRadians = Series_CenteredUtilities.getStartAndEndRadians;\n\n\nvar PieSeries_noop = Core_Globals.noop;\n\n\n\n\n\n\nvar PieSeries_clamp = Core_Utilities.clamp, PieSeries_extend = Core_Utilities.extend, PieSeries_fireEvent = Core_Utilities.fireEvent, PieSeries_merge = Core_Utilities.merge, PieSeries_pick = Core_Utilities.pick;\n/* *\n *\n * Class\n *\n * */\n/**\n * Pie series type.\n *\n * @private\n * @class\n * @name Highcharts.seriesTypes.pie\n *\n * @augments Highcharts.Series\n */\nvar PieSeries = /** @class */ (function (_super) {\n PieSeries_extends(PieSeries, _super);\n function PieSeries() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /* *\n *\n * Functions\n *\n * */\n /* eslint-disable valid-jsdoc */\n /**\n * Animates the pies in.\n * @private\n */\n PieSeries.prototype.animate = function (init) {\n var series = this,\n points = series.points,\n startAngleRad = series.startAngleRad;\n if (!init) {\n points.forEach(function (point) {\n var graphic = point.graphic,\n args = point.shapeArgs;\n if (graphic && args) {\n // Start values\n graphic.attr({\n // Animate from inner radius (#779)\n r: PieSeries_pick(point.startR, (series.center && series.center[3] / 2)),\n start: startAngleRad,\n end: startAngleRad\n });\n // Animate\n graphic.animate({\n r: args.r,\n start: args.start,\n end: args.end\n }, series.options.animation);\n }\n });\n }\n };\n /**\n * Called internally to draw auxiliary graph in pie-like series in\n * situtation when the default graph is not sufficient enough to present\n * the data well. Auxiliary graph is saved in the same object as\n * regular graph.\n * @private\n */\n PieSeries.prototype.drawEmpty = function () {\n var start = this.startAngleRad,\n end = this.endAngleRad,\n options = this.options;\n var centerX,\n centerY;\n // Draw auxiliary graph if there're no visible points.\n if (this.total === 0 && this.center) {\n centerX = this.center[0];\n centerY = this.center[1];\n if (!this.graph) {\n this.graph = this.chart.renderer\n .arc(centerX, centerY, this.center[1] / 2, 0, start, end)\n .addClass('highcharts-empty-series')\n .add(this.group);\n }\n this.graph.attr({\n d: SVG_Symbols.arc(centerX, centerY, this.center[2] / 2, 0, {\n start: start,\n end: end,\n innerR: this.center[3] / 2\n })\n });\n if (!this.chart.styledMode) {\n this.graph.attr({\n 'stroke-width': options.borderWidth,\n fill: options.fillColor || 'none',\n stroke: options.color || \"#cccccc\" /* Palette.neutralColor20 */\n });\n }\n }\n else if (this.graph) { // Destroy the graph object.\n this.graph = this.graph.destroy();\n }\n };\n /**\n * Slices in pie chart are initialized in DOM, but it's shapes and\n * animations are normally run in `drawPoints()`.\n * @private\n */\n PieSeries.prototype.drawPoints = function () {\n var renderer = this.chart.renderer;\n this.points.forEach(function (point) {\n // When updating a series between 2d and 3d or cartesian and\n // polar, the shape type changes.\n if (point.graphic && point.hasNewShapeType()) {\n point.graphic = point.graphic.destroy();\n }\n if (!point.graphic) {\n point.graphic = renderer[point.shapeType](point.shapeArgs)\n .add(point.series.group);\n point.delayedRendering = true;\n }\n });\n };\n /**\n * Extend the generatePoints method by adding total and percentage\n * properties to each point\n * @private\n */\n PieSeries.prototype.generatePoints = function () {\n _super.prototype.generatePoints.call(this);\n this.updateTotals();\n };\n /**\n * Utility for getting the x value from a given y, used for anticollision\n * logic in data labels.\n * @private\n */\n PieSeries.prototype.getX = function (y, left, point, dataLabel) {\n var center = this.center, \n // Variable pie has individual radius\n radius = this.radii ?\n this.radii[point.index] || 0 :\n center[2] / 2,\n labelPosition = dataLabel.dataLabelPosition,\n distance = (labelPosition === null || labelPosition === void 0 ? void 0 : labelPosition.distance) || 0;\n var angle = Math.asin(PieSeries_clamp((y - center[1]) / (radius + distance), -1, 1));\n var x = center[0] +\n (left ? -1 : 1) *\n (Math.cos(angle) * (radius + distance)) +\n (distance > 0 ?\n (left ? -1 : 1) * (dataLabel.padding || 0) :\n 0);\n return x;\n };\n /**\n * Define hasData function for non-cartesian series. Returns true if the\n * series has points at all.\n * @private\n */\n PieSeries.prototype.hasData = function () {\n return !!this.dataTable.rowCount;\n };\n /**\n * Draw the data points\n * @private\n */\n PieSeries.prototype.redrawPoints = function () {\n var series = this,\n chart = series.chart;\n var groupTranslation,\n graphic,\n pointAttr,\n shapeArgs;\n this.drawEmpty();\n // Apply the drop-shadow to the group because otherwise each element\n // would cast a shadow on others\n if (series.group && !chart.styledMode) {\n series.group.shadow(series.options.shadow);\n }\n // Draw the slices\n series.points.forEach(function (point) {\n var animateTo = {};\n graphic = point.graphic;\n if (!point.isNull && graphic) {\n shapeArgs = point.shapeArgs;\n // If the point is sliced, use special translation, else use\n // plot area translation\n groupTranslation = point.getTranslate();\n if (!chart.styledMode) {\n pointAttr = series.pointAttribs(point, (point.selected && 'select'));\n }\n // Draw the slice\n if (!point.delayedRendering) {\n graphic\n .setRadialReference(series.center);\n if (!chart.styledMode) {\n PieSeries_merge(true, animateTo, pointAttr);\n }\n PieSeries_merge(true, animateTo, shapeArgs, groupTranslation);\n graphic.animate(animateTo);\n }\n else {\n graphic\n .setRadialReference(series.center)\n .attr(shapeArgs)\n .attr(groupTranslation);\n if (!chart.styledMode) {\n graphic\n .attr(pointAttr)\n .attr({ 'stroke-linejoin': 'round' });\n }\n point.delayedRendering = false;\n }\n graphic\n .attr({\n visibility: point.visible ? 'inherit' : 'hidden'\n });\n graphic.addClass(point.getClassName(), true);\n }\n else if (graphic) {\n point.graphic = graphic.destroy();\n }\n });\n };\n /**\n * Utility for sorting data labels.\n * @private\n */\n PieSeries.prototype.sortByAngle = function (points, sign) {\n points.sort(function (a, b) {\n return ((typeof a.angle !== 'undefined') &&\n (b.angle - a.angle) * sign);\n });\n };\n /**\n * Do translation for pie slices\n * @private\n */\n PieSeries.prototype.translate = function (positions) {\n PieSeries_fireEvent(this, 'translate');\n this.generatePoints();\n var series = this,\n precision = 1000, // Issue #172\n options = series.options,\n slicedOffset = options.slicedOffset,\n radians = getStartAndEndRadians(options.startAngle,\n options.endAngle),\n startAngleRad = series.startAngleRad = radians.start,\n endAngleRad = series.endAngleRad = radians.end,\n circ = endAngleRad - startAngleRad, // 2 * Math.PI,\n points = series.points,\n ignoreHiddenPoint = options.ignoreHiddenPoint,\n len = points.length;\n var start,\n end,\n angle, \n // The x component of the radius vector for a given point\n radiusX,\n radiusY,\n i,\n point,\n cumulative = 0;\n // Get positions - either an integer or a percentage string must be\n // given. If positions are passed as a parameter, we're in a\n // recursive loop for adjusting space for data labels.\n if (!positions) {\n /**\n * The series center position, read only. This applies only to\n * circular chart types like pie and sunburst. It is an array of\n * `[centerX, centerY, diameter, innerDiameter]`.\n *\n * @name Highcharts.Series#center\n * @type {Array<number>}\n */\n series.center = positions = series.getCenter();\n }\n // Calculate the geometry for each point\n for (i = 0; i < len; i++) {\n point = points[i];\n // Set start and end angle\n start = startAngleRad + (cumulative * circ);\n if (point.isValid() &&\n (!ignoreHiddenPoint || point.visible)) {\n cumulative += point.percentage / 100;\n }\n end = startAngleRad + (cumulative * circ);\n // Set the shape\n var shapeArgs = {\n x: positions[0],\n y: positions[1],\n r: positions[2] / 2,\n innerR: positions[3] / 2,\n start: Math.round(start * precision) / precision,\n end: Math.round(end * precision) / precision\n };\n point.shapeType = 'arc';\n point.shapeArgs = shapeArgs;\n // The angle must stay within -90 and 270 (#2645)\n angle = (end + start) / 2;\n if (angle > 1.5 * Math.PI) {\n angle -= 2 * Math.PI;\n }\n else if (angle < -Math.PI / 2) {\n angle += 2 * Math.PI;\n }\n // Center for the sliced out slice\n point.slicedTranslation = {\n translateX: Math.round(Math.cos(angle) * slicedOffset),\n translateY: Math.round(Math.sin(angle) * slicedOffset)\n };\n // Set the anchor point for tooltips\n radiusX = Math.cos(angle) * positions[2] / 2;\n radiusY = Math.sin(angle) * positions[2] / 2;\n point.tooltipPos = [\n positions[0] + radiusX * 0.7,\n positions[1] + radiusY * 0.7\n ];\n point.half = angle < -Math.PI / 2 || angle > Math.PI / 2 ?\n 1 :\n 0;\n point.angle = angle;\n }\n PieSeries_fireEvent(series, 'afterTranslate');\n };\n /**\n * Recompute total chart sum and update percentages of points.\n * @private\n */\n PieSeries.prototype.updateTotals = function () {\n var points = this.points,\n len = points.length,\n ignoreHiddenPoint = this.options.ignoreHiddenPoint;\n var i,\n point,\n total = 0;\n // Get the total sum\n for (i = 0; i < len; i++) {\n point = points[i];\n if (point.isValid() &&\n (!ignoreHiddenPoint || point.visible)) {\n total += point.y;\n }\n }\n this.total = total;\n // Set each point's properties\n for (i = 0; i < len; i++) {\n point = points[i];\n point.percentage =\n (total > 0 && (point.visible || !ignoreHiddenPoint)) ?\n point.y / total * 100 :\n 0;\n point.total = total;\n }\n };\n /* *\n *\n * Static Properties\n *\n * */\n PieSeries.defaultOptions = PieSeries_merge(Series_Series.defaultOptions, Pie_PieSeriesDefaults);\n return PieSeries;\n}(Series_Series));\nPieSeries_extend(PieSeries.prototype, {\n axisTypes: [],\n directTouch: true,\n drawGraph: void 0,\n drawTracker: Column_ColumnSeries.prototype.drawTracker,\n getCenter: Series_CenteredUtilities.getCenter,\n getSymbol: PieSeries_noop,\n invertible: false,\n isCartesian: false,\n noSharedTooltip: true,\n pointAttribs: Column_ColumnSeries.prototype.pointAttribs,\n pointClass: Pie_PiePoint,\n requireSorting: false,\n searchPoint: PieSeries_noop,\n trackerGroups: ['group', 'dataLabelsGroup']\n});\nSeries_SeriesRegistry.registerSeriesType('pie', PieSeries);\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Pie_PieSeries = ((/* unused pure expression or super */ null && (PieSeries)));\n\n;// ./code/es5/es-modules/Series/Pie/PieDataLabel.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nvar PieDataLabel_composed = Core_Globals.composed, PieDataLabel_noop = Core_Globals.noop;\n\nvar PieDataLabel_distribute = Renderer_RendererUtilities.distribute;\n\nvar PieDataLabel_Series = Series_SeriesRegistry.series;\n\nvar PieDataLabel_arrayMax = Core_Utilities.arrayMax, PieDataLabel_clamp = Core_Utilities.clamp, PieDataLabel_defined = Core_Utilities.defined, PieDataLabel_pick = Core_Utilities.pick, PieDataLabel_pushUnique = Core_Utilities.pushUnique, PieDataLabel_relativeLength = Core_Utilities.relativeLength;\n/* *\n *\n * Composition\n *\n * */\nvar PieDataLabel_ColumnDataLabel;\n(function (ColumnDataLabel) {\n /* *\n *\n * Constants\n *\n * */\n var dataLabelPositioners = {\n // Based on the value computed in Highcharts' distribute algorithm.\n radialDistributionY: function (point,\n dataLabel) {\n var _a;\n return (((_a = dataLabel.dataLabelPosition) === null || _a === void 0 ? void 0 : _a.top) || 0) +\n point.distributeBox.pos;\n },\n // Get the x - use the natural x position for labels near the top and\n // bottom, to prevent the top and botton slice connectors from touching\n // each other on either side. Based on the value computed in Highcharts'\n // distribute algorithm.\n radialDistributionX: function (series, point, y, naturalY, dataLabel) {\n var pos = dataLabel.dataLabelPosition;\n return series.getX(y < ((pos === null || pos === void 0 ? void 0 : pos.top) || 0) + 2 || y > ((pos === null || pos === void 0 ? void 0 : pos.bottom) || 0) - 2 ?\n naturalY :\n y, point.half, point, dataLabel);\n },\n // The dataLabels.distance determines the x position of the label\n justify: function (point, dataLabel, radius, seriesCenter) {\n var _a;\n return seriesCenter[0] + (point.half ? -1 : 1) *\n (radius + (((_a = dataLabel.dataLabelPosition) === null || _a === void 0 ? void 0 : _a.distance) || 0));\n },\n // Left edges of the left-half labels touch the left edge of the plot\n // area. Right edges of the right-half labels touch the right edge of\n // the plot area.\n alignToPlotEdges: function (dataLabel, half, plotWidth, plotLeft) {\n var dataLabelWidth = dataLabel.getBBox().width;\n return half ? dataLabelWidth + plotLeft :\n plotWidth - dataLabelWidth - plotLeft;\n },\n // Connectors of each side end in the same x position. Labels are\n // aligned to them. Left edge of the widest left-half label touches the\n // left edge of the plot area. Right edge of the widest right-half label\n // touches the right edge of the plot area.\n alignToConnectors: function (points, half, plotWidth, plotLeft) {\n var maxDataLabelWidth = 0,\n dataLabelWidth;\n // Find widest data label\n points.forEach(function (point) {\n dataLabelWidth = point.dataLabel.getBBox().width;\n if (dataLabelWidth > maxDataLabelWidth) {\n maxDataLabelWidth = dataLabelWidth;\n }\n });\n return half ? maxDataLabelWidth + plotLeft :\n plotWidth - maxDataLabelWidth - plotLeft;\n }\n };\n /* *\n *\n * Functions\n *\n * */\n /** @private */\n function compose(PieSeriesClass) {\n Series_DataLabel.compose(PieDataLabel_Series);\n if (PieDataLabel_pushUnique(PieDataLabel_composed, 'PieDataLabel')) {\n var pieProto = PieSeriesClass.prototype;\n pieProto.dataLabelPositioners = dataLabelPositioners;\n pieProto.alignDataLabel = PieDataLabel_noop;\n pieProto.drawDataLabels = drawDataLabels;\n pieProto.getDataLabelPosition = getDataLabelPosition;\n pieProto.placeDataLabels = placeDataLabels;\n pieProto.verifyDataLabelOverflow = verifyDataLabelOverflow;\n }\n }\n ColumnDataLabel.compose = compose;\n /** @private */\n function getDataLabelPosition(point, distance) {\n var halfPI = Math.PI / 2,\n _a = point.shapeArgs || {},\n _b = _a.start,\n start = _b === void 0 ? 0 : _b,\n _c = _a.end,\n end = _c === void 0 ? 0 : _c;\n var angle = point.angle || 0;\n // If a large slice is crossing the lowest point, prefer rendering it 45\n // degrees out at either lower right or lower left. That's where there's\n // most likely to be space available and avoid text being truncated\n // (#22100). Technically this logic should also apply to the top point,\n // but that is more of an edge case since the default start angle is at\n // the top.\n if (distance > 0 &&\n // Crossing the bottom\n start < halfPI && end > halfPI &&\n // Angle within the bottom quadrant\n angle > halfPI / 2 && angle < halfPI * 1.5) {\n angle = angle <= halfPI ?\n Math.max(halfPI / 2, (start + halfPI) / 2) :\n Math.min(halfPI * 1.5, (halfPI + end) / 2);\n }\n var _d = this, center = _d.center, options = _d.options, r = center[2] / 2, cosAngle = Math.cos(angle), sinAngle = Math.sin(angle), x = center[0] + cosAngle * r, y = center[1] + sinAngle * r, finalConnectorOffset = Math.min((options.slicedOffset || 0) + (options.borderWidth || 0), distance / 5); // #1678\n return {\n natural: {\n // Initial position of the data label - it's utilized for\n // finding the final position for the label\n x: x + cosAngle * distance,\n y: y + sinAngle * distance\n },\n computed: {\n // Used for generating connector path - initialized later in\n // drawDataLabels function x: undefined, y: undefined\n },\n // Left - pie on the left side of the data label\n // Right - pie on the right side of the data label\n // Center - data label overlaps the pie\n alignment: distance < 0 ? 'center' : point.half ? 'right' : 'left',\n connectorPosition: {\n angle: angle,\n breakAt: {\n x: x + cosAngle * finalConnectorOffset,\n y: y + sinAngle * finalConnectorOffset\n },\n touchingSliceAt: {\n x: x,\n y: y\n }\n },\n distance: distance\n };\n }\n /**\n * Override the base drawDataLabels method by pie specific functionality\n * @private\n */\n function drawDataLabels() {\n var _this = this;\n var _a;\n var series = this, points = series.points, chart = series.chart, plotWidth = chart.plotWidth, plotHeight = chart.plotHeight, plotLeft = chart.plotLeft, maxWidth = Math.round(chart.chartWidth / 3), seriesCenter = series.center, radius = seriesCenter[2] / 2, centerY = seriesCenter[1], halves = [\n [], // Right\n [] // Left\n ], overflow = [0, 0, 0, 0], // Top, right, bottom, left\n dataLabelPositioners = series.dataLabelPositioners;\n var connector,\n dataLabelWidth,\n labelHeight,\n maxLabelDistance = 0;\n // Get out if not enabled\n if (!series.visible || !((_a = series.hasDataLabels) === null || _a === void 0 ? void 0 : _a.call(series))) {\n return;\n }\n // Reset all labels that have been shortened\n points.forEach(function (point) {\n (point.dataLabels || []).forEach(function (dataLabel) {\n if (dataLabel.shortened) {\n dataLabel\n .attr({\n width: 'auto'\n }).css({\n width: 'auto',\n textOverflow: 'clip'\n });\n dataLabel.shortened = false;\n }\n });\n });\n // Run parent method\n PieDataLabel_Series.prototype.drawDataLabels.apply(series);\n points.forEach(function (point) {\n (point.dataLabels || []).forEach(function (dataLabel, i) {\n var _a;\n var r = seriesCenter[2] / 2,\n dataLabelOptions = dataLabel.options,\n distance = PieDataLabel_relativeLength((dataLabelOptions === null || dataLabelOptions === void 0 ? void 0 : dataLabelOptions.distance) || 0,\n r);\n // Arrange points for collision detection\n if (i === 0) {\n halves[point.half].push(point);\n }\n // Avoid long labels squeezing the pie size too far down\n if (!PieDataLabel_defined((_a = dataLabelOptions === null || dataLabelOptions === void 0 ? void 0 : dataLabelOptions.style) === null || _a === void 0 ? void 0 : _a.width)) {\n if (dataLabel.getBBox().width > maxWidth) {\n dataLabel.css({\n // Use a fraction of the maxWidth to avoid wrapping\n // close to the end of the string.\n width: Math.round(maxWidth * 0.7) + 'px'\n });\n dataLabel.shortened = true;\n }\n }\n dataLabel.dataLabelPosition = _this.getDataLabelPosition(point, distance);\n maxLabelDistance = Math.max(maxLabelDistance, distance);\n });\n });\n /* Loop over the points in each half, starting from the top and bottom\n * of the pie to detect overlapping labels.\n */\n halves.forEach(function (points, halfIdx) {\n var length = points.length,\n positions = [];\n var top,\n bottom,\n size = 0,\n distributionLength;\n if (!length) {\n return;\n }\n // Sort by angle\n series.sortByAngle(points, halfIdx - 0.5);\n // Only do anti-collision when we have dataLabels outside the pie\n // and have connectors. (#856)\n if (maxLabelDistance > 0) {\n top = Math.max(0, centerY - radius - maxLabelDistance);\n bottom = Math.min(centerY + radius + maxLabelDistance, chart.plotHeight);\n points.forEach(function (point) {\n // Check if specific points' label is outside the pie\n (point.dataLabels || []).forEach(function (dataLabel) {\n var _a;\n var labelPosition = dataLabel.dataLabelPosition;\n if (labelPosition &&\n labelPosition.distance > 0) {\n // The point.top depends on point.labelDistance\n // value. Used for calculation of y value in getX\n // method\n labelPosition.top = Math.max(0, centerY - radius - labelPosition.distance);\n labelPosition.bottom = Math.min(centerY + radius + labelPosition.distance, chart.plotHeight);\n size = dataLabel.getBBox().height || 21;\n dataLabel.lineHeight = chart.renderer.fontMetrics(dataLabel.text || dataLabel).h + 2 * dataLabel.padding;\n point.distributeBox = {\n target: ((((_a = dataLabel.dataLabelPosition) === null || _a === void 0 ? void 0 : _a.natural.y) || 0) -\n labelPosition.top +\n dataLabel.lineHeight / 2),\n size: size,\n rank: point.y\n };\n positions.push(point.distributeBox);\n }\n });\n });\n distributionLength = bottom + size - top;\n PieDataLabel_distribute(positions, distributionLength, distributionLength / 5);\n // Uncomment this to visualize the boxes\n /*\n points.forEach((point): void => {\n const box = point.distributeBox;\n point.dlBox?.destroy();\n if (box?.pos) {\n point.dlBox = chart.renderer.rect(\n chart.plotLeft + this.center[0] + (\n halfIdx ?\n -this.center[2] / 2 - 100 :\n this.center[2] / 2\n ),\n chart.plotTop + box.pos,\n 100,\n box.size\n )\n .attr({\n stroke: 'silver',\n 'stroke-width': 1\n })\n .add();\n }\n });\n // */\n }\n // Now the used slots are sorted, fill them up sequentially\n points.forEach(function (point) {\n (point.dataLabels || []).forEach(function (dataLabel) {\n var dataLabelOptions = (dataLabel.options || {}),\n distributeBox = point.distributeBox,\n labelPosition = dataLabel.dataLabelPosition,\n naturalY = (labelPosition === null || labelPosition === void 0 ? void 0 : labelPosition.natural.y) || 0,\n connectorPadding = dataLabelOptions\n .connectorPadding || 0,\n lineHeight = dataLabel.lineHeight || 21,\n bBox = dataLabel.getBBox(),\n topOffset = (lineHeight - bBox.height) / 2;\n var x = 0,\n y = naturalY,\n visibility = 'inherit';\n if (labelPosition) {\n if (positions &&\n PieDataLabel_defined(distributeBox) &&\n labelPosition.distance > 0) {\n if (typeof distributeBox.pos === 'undefined') {\n visibility = 'hidden';\n }\n else {\n labelHeight = distributeBox.size;\n // Find label's y position\n y = dataLabelPositioners\n .radialDistributionY(point, dataLabel);\n }\n }\n // Find label's x position. The justify option is\n // undocumented in the API - preserve support for it\n if (dataLabelOptions.justify) {\n x = dataLabelPositioners.justify(point, dataLabel, radius, seriesCenter);\n }\n else {\n switch (dataLabelOptions.alignTo) {\n case 'connectors':\n x = dataLabelPositioners.alignToConnectors(points, halfIdx, plotWidth, plotLeft);\n break;\n case 'plotEdges':\n x = dataLabelPositioners.alignToPlotEdges(dataLabel, halfIdx, plotWidth, plotLeft);\n break;\n default:\n x = dataLabelPositioners.radialDistributionX(series, point, y - topOffset, naturalY, dataLabel);\n }\n }\n // Record the placement and visibility\n labelPosition.attribs = {\n visibility: visibility,\n align: labelPosition.alignment\n };\n labelPosition.posAttribs = {\n x: x +\n (dataLabelOptions.x || 0) + // (#12985)\n ({\n left: connectorPadding,\n right: -connectorPadding\n }[labelPosition.alignment] || 0),\n y: y +\n (dataLabelOptions.y || 0) - // (#12985)\n // Vertically center\n lineHeight / 2\n };\n labelPosition.computed.x = x;\n labelPosition.computed.y = y - topOffset;\n // Detect overflowing data labels\n if (PieDataLabel_pick(dataLabelOptions.crop, true)) {\n dataLabelWidth = dataLabel.getBBox().width;\n var sideOverflow = void 0;\n // Overflow left\n if (x - dataLabelWidth < connectorPadding &&\n halfIdx === 1 // Left half\n ) {\n sideOverflow = Math.round(dataLabelWidth - x + connectorPadding);\n overflow[3] = Math.max(sideOverflow, overflow[3]);\n // Overflow right\n }\n else if (x + dataLabelWidth >\n plotWidth - connectorPadding &&\n halfIdx === 0 // Right half\n ) {\n sideOverflow = Math.round(x +\n dataLabelWidth -\n plotWidth +\n connectorPadding);\n overflow[1] = Math.max(sideOverflow, overflow[1]);\n }\n // Overflow top\n if (y - labelHeight / 2 < 0) {\n overflow[0] = Math.max(Math.round(-y + labelHeight / 2), overflow[0]);\n // Overflow left\n }\n else if (y + labelHeight / 2 > plotHeight) {\n overflow[2] = Math.max(Math.round(y + labelHeight / 2 - plotHeight), overflow[2]);\n }\n labelPosition.sideOverflow = sideOverflow;\n }\n }\n }); // For each data label of the point\n }); // For each point\n }); // For each half\n // Do not apply the final placement and draw the connectors until we\n // have verified that labels are not spilling over.\n if (PieDataLabel_arrayMax(overflow) === 0 ||\n this.verifyDataLabelOverflow(overflow)) {\n // Place the labels in the final position\n this.placeDataLabels();\n this.points.forEach(function (point) {\n (point.dataLabels || []).forEach(function (dataLabel) {\n var _a;\n // #8864: every connector can have individual options\n var _b = (dataLabel.options || {}),\n connectorColor = _b.connectorColor,\n _c = _b.connectorWidth,\n connectorWidth = _c === void 0 ? 1 : _c,\n labelPosition = dataLabel.dataLabelPosition;\n // Draw the connector\n if (connectorWidth) {\n var isNew = void 0;\n connector = dataLabel.connector;\n if (labelPosition && labelPosition.distance > 0) {\n isNew = !connector;\n if (!connector) {\n dataLabel.connector = connector = chart.renderer\n .path()\n .addClass('highcharts-data-label-connector ' +\n ' highcharts-color-' +\n point.colorIndex +\n (point.className ?\n ' ' + point.className :\n ''))\n .add(series.dataLabelsGroup);\n }\n if (!chart.styledMode) {\n connector.attr({\n 'stroke-width': connectorWidth,\n 'stroke': (connectorColor ||\n point.color ||\n \"#666666\" /* Palette.neutralColor60 */)\n });\n }\n connector[isNew ? 'attr' : 'animate']({\n d: point.getConnectorPath(dataLabel)\n });\n connector.attr({\n visibility: (_a = labelPosition.attribs) === null || _a === void 0 ? void 0 : _a.visibility\n });\n }\n else if (connector) {\n dataLabel.connector = connector.destroy();\n }\n }\n });\n });\n }\n }\n /**\n * Perform the final placement of the data labels after we have verified\n * that they fall within the plot area.\n * @private\n */\n function placeDataLabels() {\n this.points.forEach(function (point) {\n (point.dataLabels || []).forEach(function (dataLabel) {\n var _a;\n var labelPosition = dataLabel.dataLabelPosition;\n if (labelPosition) {\n // Shorten data labels with ellipsis if they still overflow\n // after the pie has reached minSize (#223).\n if (labelPosition.sideOverflow) {\n dataLabel.css({\n width: (Math.max(dataLabel.getBBox().width -\n labelPosition.sideOverflow, 0)) + 'px',\n textOverflow: ((((_a = dataLabel.options) === null || _a === void 0 ? void 0 : _a.style) || {})\n .textOverflow ||\n 'ellipsis')\n });\n dataLabel.shortened = true;\n }\n dataLabel.attr(labelPosition.attribs);\n dataLabel[dataLabel.moved ? 'animate' : 'attr'](labelPosition.posAttribs);\n dataLabel.moved = true;\n }\n else if (dataLabel) {\n dataLabel.attr({ y: -9999 });\n }\n });\n // Clear for update\n delete point.distributeBox;\n }, this);\n }\n /**\n * Verify whether the data labels are allowed to draw, or we should run more\n * translation and data label positioning to keep them inside the plot area.\n * Returns true when data labels are ready to draw.\n * @private\n */\n function verifyDataLabelOverflow(overflow) {\n var center = this.center,\n options = this.options,\n centerOption = options.center,\n minSize = options.minSize || 80;\n var newSize = minSize, \n // If a size is set, return true and don't try to shrink the pie\n // to fit the labels.\n ret = options.size !== null;\n if (!ret) {\n // Handle horizontal size and center\n if (centerOption[0] !== null) { // Fixed center\n newSize = Math.max(center[2] -\n Math.max(overflow[1], overflow[3]), minSize);\n }\n else { // Auto center\n newSize = Math.max(\n // Horizontal overflow\n center[2] - overflow[1] - overflow[3], minSize);\n // Horizontal center\n center[0] += (overflow[3] - overflow[1]) / 2;\n }\n // Handle vertical size and center\n if (centerOption[1] !== null) { // Fixed center\n newSize = PieDataLabel_clamp(newSize, minSize, center[2] - Math.max(overflow[0], overflow[2]));\n }\n else { // Auto center\n newSize = PieDataLabel_clamp(newSize, minSize, \n // Vertical overflow\n center[2] - overflow[0] - overflow[2]);\n // Vertical center\n center[1] += (overflow[0] - overflow[2]) / 2;\n }\n // If the size must be decreased, we need to run translate and\n // drawDataLabels again\n if (newSize < center[2]) {\n center[2] = newSize;\n center[3] = Math.min(// #3632\n options.thickness ?\n Math.max(0, newSize - options.thickness * 2) :\n Math.max(0, PieDataLabel_relativeLength(options.innerSize || 0, newSize)), newSize); // #6647\n this.translate(center);\n if (this.drawDataLabels) {\n this.drawDataLabels();\n }\n // Else, return true to indicate that the pie and its labels is\n // within the plot area\n }\n else {\n ret = true;\n }\n }\n return ret;\n }\n})(PieDataLabel_ColumnDataLabel || (PieDataLabel_ColumnDataLabel = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var PieDataLabel = (PieDataLabel_ColumnDataLabel);\n\n;// ./code/es5/es-modules/Core/Geometry/GeometryUtilities.js\n/* *\n *\n * (c) 2010-2024 Highsoft AS\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n * Namespace\n *\n * */\nvar GeometryUtilities;\n(function (GeometryUtilities) {\n /* *\n *\n * Functions\n *\n * */\n /**\n * Calculates the center between a list of points.\n *\n * @private\n *\n * @param {Array<Highcharts.PositionObject>} points\n * A list of points to calculate the center of.\n *\n * @return {Highcharts.PositionObject}\n * Calculated center\n */\n function getCenterOfPoints(points) {\n var sum = points.reduce(function (sum,\n point) {\n sum.x += point.x;\n sum.y += point.y;\n return sum;\n }, { x: 0, y: 0 });\n return {\n x: sum.x / points.length,\n y: sum.y / points.length\n };\n }\n GeometryUtilities.getCenterOfPoints = getCenterOfPoints;\n /**\n * Calculates the distance between two points based on their x and y\n * coordinates.\n *\n * @private\n *\n * @param {Highcharts.PositionObject} p1\n * The x and y coordinates of the first point.\n *\n * @param {Highcharts.PositionObject} p2\n * The x and y coordinates of the second point.\n *\n * @return {number}\n * Returns the distance between the points.\n */\n function getDistanceBetweenPoints(p1, p2) {\n return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));\n }\n GeometryUtilities.getDistanceBetweenPoints = getDistanceBetweenPoints;\n /**\n * Calculates the angle between two points.\n * @todo add unit tests.\n * @private\n * @param {Highcharts.PositionObject} p1 The first point.\n * @param {Highcharts.PositionObject} p2 The second point.\n * @return {number} Returns the angle in radians.\n */\n function getAngleBetweenPoints(p1, p2) {\n return Math.atan2(p2.x - p1.x, p2.y - p1.y);\n }\n GeometryUtilities.getAngleBetweenPoints = getAngleBetweenPoints;\n /**\n * Test for point in polygon. Polygon defined as array of [x,y] points.\n * @private\n * @param {PositionObject} point The point potentially within a polygon.\n * @param {Array<Array<number>>} polygon The polygon potentially containing the point.\n */\n function pointInPolygon(_a, polygon) {\n var x = _a.x,\n y = _a.y;\n var len = polygon.length;\n var i,\n j,\n inside = false;\n for (i = 0, j = len - 1; i < len; j = i++) {\n var _b = polygon[i],\n x1 = _b[0],\n y1 = _b[1],\n _c = polygon[j],\n x2 = _c[0],\n y2 = _c[1];\n if (y1 > y !== y2 > y &&\n (x < (x2 - x1) *\n (y - y1) /\n (y2 - y1) +\n x1)) {\n inside = !inside;\n }\n }\n return inside;\n }\n GeometryUtilities.pointInPolygon = pointInPolygon;\n})(GeometryUtilities || (GeometryUtilities = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Geometry_GeometryUtilities = (GeometryUtilities);\n\n;// ./code/es5/es-modules/Extensions/OverlappingDataLabels.js\n/* *\n *\n * Highcharts module to hide overlapping data labels.\n * This module is included in Highcharts.\n *\n * (c) 2009-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar pointInPolygon = Geometry_GeometryUtilities.pointInPolygon;\n\nvar OverlappingDataLabels_addEvent = Core_Utilities.addEvent, OverlappingDataLabels_fireEvent = Core_Utilities.fireEvent, OverlappingDataLabels_objectEach = Core_Utilities.objectEach, OverlappingDataLabels_pick = Core_Utilities.pick;\n/* *\n *\n * Functions\n *\n * */\n/**\n * Hide overlapping labels. Labels are moved and faded in and out on zoom to\n * provide a smooth visual impression.\n *\n * @requires modules/overlapping-datalabels\n *\n * @private\n * @function Highcharts.Chart#hideOverlappingLabels\n * @param {Array<Highcharts.SVGElement>} labels\n * Rendered data labels\n */\nfunction chartHideOverlappingLabels(labels) {\n var chart = this,\n len = labels.length,\n isIntersectRect = function (box1,\n box2) { return !(box2.x >= box1.x + box1.width ||\n box2.x + box2.width <= box1.x ||\n box2.y >= box1.y + box1.height ||\n box2.y + box2.height <= box1.y); },\n isPolygonOverlap = function (box1Poly,\n box2Poly) {\n for (var _i = 0,\n box1Poly_1 = box1Poly; _i < box1Poly_1.length; _i++) {\n var p = box1Poly_1[_i];\n if (pointInPolygon({ x: p[0], y: p[1] }, box2Poly)) {\n return true;\n }\n }\n return false;\n };\n /**\n * Get the box with its position inside the chart, as opposed to getBBox\n * that only reports the position relative to the parent.\n */\n function getAbsoluteBox(label) {\n var _a,\n _b;\n if (label && (!label.alignAttr || label.placed)) {\n var padding = label.box ? 0 : (label.padding || 0),\n pos = label.alignAttr || {\n x: label.attr('x'),\n y: label.attr('y')\n },\n bBox = label.getBBox();\n label.width = bBox.width;\n label.height = bBox.height;\n return {\n x: pos.x + (((_a = label.parentGroup) === null || _a === void 0 ? void 0 : _a.translateX) || 0) + padding,\n y: pos.y + (((_b = label.parentGroup) === null || _b === void 0 ? void 0 : _b.translateY) || 0) + padding,\n width: (label.width || 0) - 2 * padding,\n height: (label.height || 0) - 2 * padding,\n polygon: bBox === null || bBox === void 0 ? void 0 : bBox.polygon\n };\n }\n }\n var label,\n label1,\n label2,\n box1,\n box2,\n isLabelAffected = false;\n for (var i = 0; i < len; i++) {\n label = labels[i];\n if (label) {\n // Mark with initial opacity\n label.oldOpacity = label.opacity;\n label.newOpacity = 1;\n label.absoluteBox = getAbsoluteBox(label);\n }\n }\n // Prevent a situation in a gradually rising slope, that each label will\n // hide the previous one because the previous one always has lower rank.\n labels.sort(function (a, b) { return (b.labelrank || 0) - (a.labelrank || 0); });\n // Detect overlapping labels\n for (var i = 0; i < len; ++i) {\n label1 = labels[i];\n box1 = label1 && label1.absoluteBox;\n var box1Poly = box1 === null || box1 === void 0 ? void 0 : box1.polygon;\n for (var j = i + 1; j < len; ++j) {\n label2 = labels[j];\n box2 = label2 && label2.absoluteBox;\n var toHide = false;\n if (box1 &&\n box2 &&\n label1 !== label2 && // #6465, polar chart with connectEnds\n label1.newOpacity !== 0 &&\n label2.newOpacity !== 0 &&\n // #15863 dataLabels are no longer hidden by translation\n label1.visibility !== 'hidden' &&\n label2.visibility !== 'hidden') {\n var box2Poly = box2.polygon;\n // If labels have polygons, only evaluate\n // based on polygons\n if (box1Poly &&\n box2Poly &&\n box1Poly !== box2Poly) {\n if (isPolygonOverlap(box1Poly, box2Poly)) {\n toHide = true;\n }\n // If there are no polygons, evaluate rectangles coliding\n }\n else if (isIntersectRect(box1, box2)) {\n toHide = true;\n }\n if (toHide) {\n var overlappingLabel = (label1.labelrank < label2.labelrank ?\n label1 :\n label2),\n labelText = overlappingLabel.text;\n overlappingLabel.newOpacity = 0;\n if (labelText === null || labelText === void 0 ? void 0 : labelText.element.querySelector('textPath')) {\n labelText.hide();\n }\n }\n }\n }\n }\n // Hide or show\n for (var _i = 0, labels_1 = labels; _i < labels_1.length; _i++) {\n var label_1 = labels_1[_i];\n if (hideOrShow(label_1, chart)) {\n isLabelAffected = true;\n }\n }\n if (isLabelAffected) {\n OverlappingDataLabels_fireEvent(chart, 'afterHideAllOverlappingLabels');\n }\n}\n/** @private */\nfunction compose(ChartClass) {\n var chartProto = ChartClass.prototype;\n if (!chartProto.hideOverlappingLabels) {\n chartProto.hideOverlappingLabels = chartHideOverlappingLabels;\n OverlappingDataLabels_addEvent(ChartClass, 'render', OverlappingDataLabels_onChartRender);\n }\n}\n/**\n * Hide or show labels based on opacity.\n *\n * @private\n * @function hideOrShow\n * @param {Highcharts.SVGElement} label\n * The label.\n * @param {Highcharts.Chart} chart\n * The chart that contains the label.\n * @return {boolean}\n * Whether label is affected\n */\nfunction hideOrShow(label, chart) {\n var complete,\n newOpacity,\n isLabelAffected = false;\n if (label) {\n newOpacity = label.newOpacity;\n if (label.oldOpacity !== newOpacity) {\n // Toggle data labels\n if (label.hasClass('highcharts-data-label')) {\n // Make sure the label is completely hidden to avoid catching\n // clicks (#4362)\n label[newOpacity ? 'removeClass' : 'addClass']('highcharts-data-label-hidden');\n complete = function () {\n if (!chart.styledMode) {\n label.css({\n pointerEvents: newOpacity ? 'auto' : 'none'\n });\n }\n };\n isLabelAffected = true;\n // Animate or set the opacity\n label[label.isOld ? 'animate' : 'attr']({ opacity: newOpacity }, void 0, complete);\n OverlappingDataLabels_fireEvent(chart, 'afterHideOverlappingLabel');\n // Toggle other labels, tick labels\n }\n else {\n label.attr({\n opacity: newOpacity\n });\n }\n }\n label.isOld = true;\n }\n return isLabelAffected;\n}\n/**\n * Collect potential overlapping data labels. Stack labels probably don't need\n * to be considered because they are usually accompanied by data labels that lie\n * inside the columns.\n * @private\n */\nfunction OverlappingDataLabels_onChartRender() {\n var _a;\n var chart = this;\n var labels = [];\n // Consider external label collectors\n for (var _i = 0, _b = (chart.labelCollectors || []); _i < _b.length; _i++) {\n var collector = _b[_i];\n labels = labels.concat(collector());\n }\n for (var _c = 0, _d = (chart.yAxis || []); _c < _d.length; _c++) {\n var yAxis = _d[_c];\n if (yAxis.stacking &&\n yAxis.options.stackLabels &&\n !yAxis.options.stackLabels.allowOverlap) {\n OverlappingDataLabels_objectEach(yAxis.stacking.stacks, function (stack) {\n OverlappingDataLabels_objectEach(stack, function (stackItem) {\n if (stackItem.label) {\n labels.push(stackItem.label);\n }\n });\n });\n }\n }\n for (var _e = 0, _f = (chart.series || []); _e < _f.length; _e++) {\n var series = _f[_e];\n if (series.visible && ((_a = series.hasDataLabels) === null || _a === void 0 ? void 0 : _a.call(series))) { // #3866\n var push = function (points) {\n var _loop_1 = function (point) {\n if (point.visible) {\n (point.dataLabels || []).forEach(function (label) {\n var _a,\n _b;\n var options = label.options || {};\n label.labelrank = OverlappingDataLabels_pick(options.labelrank, point.labelrank, (_a = point.shapeArgs) === null || _a === void 0 ? void 0 : _a.height); // #4118\n // Allow overlap if the option is explicitly true\n if (\n // #13449\n (_b = options.allowOverlap) !== null && _b !== void 0 ? _b : \n // Pie labels outside have a separate placement\n // logic, skip the overlap logic\n Number(options.distance) > 0) {\n label.oldOpacity = label.opacity;\n label.newOpacity = 1;\n hideOrShow(label, chart);\n // Do not allow overlap\n }\n else {\n labels.push(label);\n }\n });\n }\n };\n for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n var point = points_1[_i];\n _loop_1(point);\n }\n };\n push(series.nodes || []);\n push(series.points);\n }\n }\n this.hideOverlappingLabels(labels);\n}\n/* *\n *\n * Default Export\n *\n * */\nvar OverlappingDataLabels = {\n compose: compose\n};\n/* harmony default export */ var Extensions_OverlappingDataLabels = (OverlappingDataLabels);\n\n;// ./code/es5/es-modules/Extensions/BorderRadius.js\n/* *\n *\n * Highcharts Border Radius module\n *\n * Author: Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar BorderRadius_spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n\nvar BorderRadius_defaultOptions = Defaults.defaultOptions;\n\nvar BorderRadius_noop = Core_Globals.noop;\n\nvar BorderRadius_addEvent = Core_Utilities.addEvent, BorderRadius_extend = Core_Utilities.extend, BorderRadius_isObject = Core_Utilities.isObject, BorderRadius_merge = Core_Utilities.merge, BorderRadius_relativeLength = Core_Utilities.relativeLength;\n/* *\n *\n * Constants\n *\n * */\nvar defaultBorderRadiusOptions = {\n radius: 0,\n scope: 'stack',\n where: void 0\n};\n/* *\n *\n * Variables\n *\n * */\nvar oldArc = BorderRadius_noop;\nvar oldRoundedRect = BorderRadius_noop;\n/* *\n *\n * Functions\n *\n * */\n/**\n * @private\n */\nfunction applyBorderRadius(path, i, r) {\n var a = path[i];\n var b = path[i + 1];\n if (b[0] === 'Z') {\n b = path[0];\n }\n var line,\n arc,\n fromLineToArc;\n // From straight line to arc\n if ((a[0] === 'M' || a[0] === 'L') && b[0] === 'A') {\n line = a;\n arc = b;\n fromLineToArc = true;\n // From arc to straight line\n }\n else if (a[0] === 'A' && (b[0] === 'M' || b[0] === 'L')) {\n line = b;\n arc = a;\n }\n if (line && arc && arc.params) {\n var bigR = arc[1], \n // In our use cases, outer pie slice arcs are clockwise and inner\n // arcs (donut/sunburst etc) are anti-clockwise\n clockwise = arc[5], params = arc.params, start = params.start, end = params.end, cx = params.cx, cy = params.cy;\n // Some geometric constants\n var relativeR = clockwise ? (bigR - r) : (bigR + r), \n // The angle, on the big arc, that the border radius arc takes up\n angleOfBorderRadius = relativeR ? Math.asin(r / relativeR) : 0,\n angleOffset = clockwise ?\n angleOfBorderRadius :\n -angleOfBorderRadius, \n // The distance along the radius of the big arc to the starting\n // point of the small border radius arc\n distanceBigCenterToStartArc = (Math.cos(angleOfBorderRadius) *\n relativeR);\n // From line to arc\n if (fromLineToArc) {\n // Update the cache\n params.start = start + angleOffset;\n // First move to the start position at the radial line. We want to\n // start one borderRadius closer to the center.\n line[1] = cx + distanceBigCenterToStartArc * Math.cos(start);\n line[2] = cy + distanceBigCenterToStartArc * Math.sin(start);\n // Now draw an arc towards the point where the small circle touches\n // the great circle.\n path.splice(i + 1, 0, [\n 'A',\n r,\n r,\n 0, // Slanting,\n 0, // Long arc\n 1, // Clockwise\n cx + bigR * Math.cos(params.start),\n cy + bigR * Math.sin(params.start)\n ]);\n // From arc to line\n }\n else {\n // Update the cache\n params.end = end - angleOffset;\n // End the big arc a bit earlier\n arc[6] = cx + bigR * Math.cos(params.end);\n arc[7] = cy + bigR * Math.sin(params.end);\n // Draw a small arc towards a point on the end angle, but one\n // borderRadius closer to the center relative to the perimeter.\n path.splice(i + 1, 0, [\n 'A',\n r,\n r,\n 0,\n 0,\n 1,\n cx + distanceBigCenterToStartArc * Math.cos(end),\n cy + distanceBigCenterToStartArc * Math.sin(end)\n ]);\n }\n // Long or short arc must be reconsidered because we have modified the\n // start and end points\n arc[4] = Math.abs(params.end - params.start) < Math.PI ? 0 : 1;\n }\n}\n/**\n * Extend arc with borderRadius.\n * @private\n */\nfunction BorderRadius_arc(x, y, w, h, options) {\n if (options === void 0) { options = {}; }\n var path = oldArc(x,\n y,\n w,\n h,\n options),\n _a = options.innerR,\n innerR = _a === void 0 ? 0 : _a,\n _b = options.r,\n r = _b === void 0 ? w : _b,\n _c = options.start,\n start = _c === void 0 ? 0 : _c,\n _d = options.end,\n end = _d === void 0 ? 0 : _d;\n if (options.open || !options.borderRadius) {\n return path;\n }\n var alpha = end - start,\n sinHalfAlpha = Math.sin(alpha / 2),\n borderRadius = Math.max(Math.min(BorderRadius_relativeLength(options.borderRadius || 0,\n r - innerR), \n // Cap to half the sector radius\n (r - innerR) / 2, \n // For smaller pie slices, cap to the largest small circle that\n // can be fitted within the sector\n (r * sinHalfAlpha) / (1 + sinHalfAlpha)), 0), \n // For the inner radius, we need an extra cap because the inner arc\n // is shorter than the outer arc\n innerBorderRadius = Math.min(borderRadius, 2 * (alpha / Math.PI) * innerR);\n // Apply turn-by-turn border radius. Start at the end since we're\n // splicing in arc segments.\n var i = path.length - 1;\n while (i--) {\n applyBorderRadius(path, i, i > 1 ? innerBorderRadius : borderRadius);\n }\n return path;\n}\n/** @private */\nfunction seriesOnAfterColumnTranslate() {\n var _a,\n _b;\n if (this.options.borderRadius &&\n !(this.chart.is3d && this.chart.is3d())) {\n var _c = this,\n options = _c.options,\n yAxis = _c.yAxis,\n percent = options.stacking === 'percent',\n seriesDefault = (_b = (_a = BorderRadius_defaultOptions.plotOptions) === null || _a === void 0 ? void 0 : _a[this.type]) === null || _b === void 0 ? void 0 : _b.borderRadius,\n borderRadius = optionsToObject(options.borderRadius,\n BorderRadius_isObject(seriesDefault) ? seriesDefault : {}),\n reversed = yAxis.options.reversed;\n for (var _i = 0, _d = this.points; _i < _d.length; _i++) {\n var point = _d[_i];\n var shapeArgs = point.shapeArgs;\n if (point.shapeType === 'roundedRect' && shapeArgs) {\n var _e = shapeArgs.width,\n width = _e === void 0 ? 0 : _e,\n _f = shapeArgs.height,\n height = _f === void 0 ? 0 : _f,\n _g = shapeArgs.y,\n y = _g === void 0 ? 0 : _g;\n var brBoxY = y,\n brBoxHeight = height;\n // It would be nice to refactor StackItem.getStackBox/\n // setOffset so that we could get a reliable box out of\n // it. Currently it is close if we remove the label\n // offset, but we still need to run crispCol and also\n // flip it if inverted, so atm it is simpler to do it\n // like the below.\n if (borderRadius.scope === 'stack' &&\n point.stackTotal) {\n var stackEnd = yAxis.translate(percent ? 100 : point.stackTotal,\n false,\n true,\n false,\n true),\n stackThreshold = yAxis.translate(options.threshold || 0,\n false,\n true,\n false,\n true),\n box = this.crispCol(0,\n Math.min(stackEnd,\n stackThreshold), 0,\n Math.abs(stackEnd - stackThreshold));\n brBoxY = box.y;\n brBoxHeight = box.height;\n }\n var flip = (point.negative ? -1 : 1) *\n (reversed ? -1 : 1) === -1;\n // Handle the where option\n var where = borderRadius.where;\n // Waterfall, hanging columns should have rounding on\n // all sides\n if (!where &&\n this.is('waterfall') &&\n Math.abs((point.yBottom || 0) -\n (this.translatedThreshold || 0)) > this.borderWidth) {\n where = 'all';\n }\n if (!where) {\n where = 'end';\n }\n // Get the radius\n var r = Math.min(BorderRadius_relativeLength(borderRadius.radius,\n width),\n width / 2, \n // Cap to the height, but not if where is `end`\n where === 'all' ? height / 2 : Infinity) || 0;\n // If the `where` option is 'end', cut off the\n // rectangles by making the border-radius box one r\n // greater, so that the imaginary radius falls outside\n // the rectangle.\n if (where === 'end') {\n if (flip) {\n brBoxY -= r;\n brBoxHeight += r;\n }\n else {\n brBoxHeight += r;\n }\n }\n BorderRadius_extend(shapeArgs, { brBoxHeight: brBoxHeight, brBoxY: brBoxY, r: r });\n }\n }\n }\n}\n/** @private */\nfunction BorderRadius_compose(SeriesClass, SVGElementClass, SVGRendererClass) {\n var PieSeriesClass = SeriesClass.types.pie;\n if (!SVGElementClass.symbolCustomAttribs.includes('borderRadius')) {\n var symbols = SVGRendererClass.prototype.symbols;\n BorderRadius_addEvent(SeriesClass, 'afterColumnTranslate', seriesOnAfterColumnTranslate, {\n // After columnrange and polar column modifications\n order: 9\n });\n BorderRadius_addEvent(PieSeriesClass, 'afterTranslate', pieSeriesOnAfterTranslate);\n SVGElementClass.symbolCustomAttribs.push('borderRadius', 'brBoxHeight', 'brBoxY');\n oldArc = symbols.arc;\n oldRoundedRect = symbols.roundedRect;\n symbols.arc = BorderRadius_arc;\n symbols.roundedRect = BorderRadius_roundedRect;\n }\n}\n/** @private */\nfunction optionsToObject(options, seriesBROptions) {\n if (!BorderRadius_isObject(options)) {\n options = { radius: options || 0 };\n }\n return BorderRadius_merge(defaultBorderRadiusOptions, seriesBROptions, options);\n}\n/** @private */\nfunction pieSeriesOnAfterTranslate() {\n var borderRadius = optionsToObject(this.options.borderRadius);\n for (var _i = 0, _a = this.points; _i < _a.length; _i++) {\n var point = _a[_i];\n var shapeArgs = point.shapeArgs;\n if (shapeArgs) {\n shapeArgs.borderRadius = BorderRadius_relativeLength(borderRadius.radius, (shapeArgs.r || 0) - ((shapeArgs.innerR) || 0));\n }\n }\n}\n/**\n * Extend roundedRect with individual cutting through rOffset.\n * @private\n */\nfunction BorderRadius_roundedRect(x, y, width, height, options) {\n if (options === void 0) { options = {}; }\n var path = oldRoundedRect(x,\n y,\n width,\n height,\n options),\n _a = options.r,\n r = _a === void 0 ? 0 : _a,\n _b = options.brBoxHeight,\n brBoxHeight = _b === void 0 ? height : _b,\n _c = options.brBoxY,\n brBoxY = _c === void 0 ? y : _c,\n brOffsetTop = y - brBoxY,\n brOffsetBtm = (brBoxY + brBoxHeight) - (y + height), \n // When the distance to the border-radius box is greater than the r\n // itself, it means no border radius. The -0.1 accounts for float\n // rounding errors.\n rTop = (brOffsetTop - r) > -0.1 ? 0 : r,\n rBtm = (brOffsetBtm - r) > -0.1 ? 0 : r,\n cutTop = Math.max(rTop && brOffsetTop, 0),\n cutBtm = Math.max(rBtm && brOffsetBtm, 0);\n /*\n\n The naming of control points:\n\n / a -------- b \\\n / \\\n h c\n | |\n | |\n | |\n g d\n \\ /\n \\ f -------- e /\n\n */\n var a = [x + rTop,\n y],\n b = [x + width - rTop,\n y],\n c = [x + width,\n y + rTop],\n d = [\n x + width,\n y + height - rBtm\n ],\n e = [\n x + width - rBtm,\n y + height\n ],\n f = [x + rBtm,\n y + height],\n g = [x,\n y + height - rBtm],\n h = [x,\n y + rTop];\n var applyPythagoras = function (r,\n altitude) { return Math.sqrt(Math.pow(r, 2) - Math.pow(altitude, 2)); };\n // Inside stacks, cut off part of the top\n if (cutTop) {\n var base = applyPythagoras(rTop,\n rTop - cutTop);\n a[0] -= base;\n b[0] += base;\n c[1] = h[1] = y + rTop - cutTop;\n }\n // Column is lower than the radius. Cut off bottom inside the top\n // radius.\n if (height < rTop - cutTop) {\n var base = applyPythagoras(rTop,\n rTop - cutTop - height);\n c[0] = d[0] = x + width - rTop + base;\n e[0] = Math.min(c[0], e[0]);\n f[0] = Math.max(d[0], f[0]);\n g[0] = h[0] = x + rTop - base;\n c[1] = h[1] = y + height;\n }\n // Inside stacks, cut off part of the bottom\n if (cutBtm) {\n var base = applyPythagoras(rBtm,\n rBtm - cutBtm);\n e[0] += base;\n f[0] -= base;\n d[1] = g[1] = y + height - rBtm + cutBtm;\n }\n // Cut off top inside the bottom radius\n if (height < rBtm - cutBtm) {\n var base = applyPythagoras(rBtm,\n rBtm - cutBtm - height);\n c[0] = d[0] = x + width - rBtm + base;\n b[0] = Math.min(c[0], b[0]);\n a[0] = Math.max(d[0], a[0]);\n g[0] = h[0] = x + rBtm - base;\n d[1] = g[1] = y;\n }\n // Preserve the box for data labels\n path.length = 0;\n path.push(BorderRadius_spreadArray(['M'], a, true), BorderRadius_spreadArray(['L'], b, true), BorderRadius_spreadArray(['A', rTop, rTop, 0, 0, 1], c, true), BorderRadius_spreadArray(['L'], d, true), BorderRadius_spreadArray(['A', rBtm, rBtm, 0, 0, 1], e, true), BorderRadius_spreadArray(['L'], f, true), BorderRadius_spreadArray(['A', rBtm, rBtm, 0, 0, 1], g, true), BorderRadius_spreadArray(['L'], h, true), BorderRadius_spreadArray(['A', rTop, rTop, 0, 0, 1], a, true), ['Z']);\n return path;\n}\n/* *\n *\n * Default Export\n *\n * */\nvar BorderRadius = {\n compose: BorderRadius_compose,\n optionsToObject: optionsToObject\n};\n/* harmony default export */ var Extensions_BorderRadius = (BorderRadius);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Detailed options for border radius.\n *\n * @sample {highcharts} highcharts/plotoptions/column-borderradius/\n * Rounded columns\n * @sample highcharts/plotoptions/series-border-radius\n * Column and pie with rounded border\n *\n * @interface Highcharts.BorderRadiusOptionsObject\n */ /**\n* The border radius. A number signifies pixels. A percentage string, like for\n* example `50%`, signifies a relative size. For columns this is relative to the\n* column width, for pies it is relative to the radius and the inner radius.\n*\n* @name Highcharts.BorderRadiusOptionsObject#radius\n* @type {string|number}\n*/ /**\n* The scope of the rounding for column charts. In a stacked column chart, the\n* value `point` means each single point will get rounded corners. The value\n* `stack` means the rounding will apply to the full stack, so that only points\n* close to the top or bottom will receive rounding.\n*\n* @name Highcharts.BorderRadiusOptionsObject#scope\n* @validvalue [\"point\", \"stack\"]\n* @type {string}\n*/ /**\n* For column charts, where in the point or stack to apply rounding. The `end`\n* value means only those corners at the point value will be rounded, leaving\n* the corners at the base or threshold unrounded. This is the most intuitive\n* behaviour. The `all` value means also the base will be rounded.\n*\n* @name Highcharts.BorderRadiusOptionsObject#where\n* @validvalue [\"all\", \"end\"]\n* @type {string}\n* @default end\n*/\n(''); // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/Core/Responsive.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nvar Responsive_diffObjects = Core_Utilities.diffObjects, Responsive_extend = Core_Utilities.extend, Responsive_find = Core_Utilities.find, Responsive_merge = Core_Utilities.merge, Responsive_pick = Core_Utilities.pick, Responsive_uniqueKey = Core_Utilities.uniqueKey;\n/* *\n *\n * Composition\n *\n * */\nvar Responsive;\n(function (Responsive) {\n /* *\n *\n * Declarations\n *\n * */\n /* *\n *\n * Functions\n *\n * */\n /**\n * @private\n */\n function compose(ChartClass) {\n var chartProto = ChartClass.prototype;\n if (!chartProto.matchResponsiveRule) {\n Responsive_extend(chartProto, {\n matchResponsiveRule: matchResponsiveRule,\n setResponsive: setResponsive\n });\n }\n return ChartClass;\n }\n Responsive.compose = compose;\n /**\n * Handle a single responsiveness rule.\n *\n * @private\n * @function Highcharts.Chart#matchResponsiveRule\n * @param {Highcharts.ResponsiveRulesOptions} rule\n * @param {Array<string>} matches\n */\n function matchResponsiveRule(rule, matches) {\n var condition = rule.condition,\n fn = condition.callback || function () {\n return (this.chartWidth <= Responsive_pick(condition.maxWidth,\n Number.MAX_VALUE) &&\n this.chartHeight <= Responsive_pick(condition.maxHeight,\n Number.MAX_VALUE) &&\n this.chartWidth >= Responsive_pick(condition.minWidth, 0) &&\n this.chartHeight >= Responsive_pick(condition.minHeight, 0));\n };\n if (fn.call(this)) {\n matches.push(rule._id);\n }\n }\n /**\n * Update the chart based on the current chart/document size and options\n * for responsiveness.\n *\n * @private\n * @function Highcharts.Chart#setResponsive\n * @param {boolean} [redraw=true]\n * @param {boolean} [reset=false]\n * Reset by un-applying all rules. Chart.update resets all rules before\n * applying updated options.\n */\n function setResponsive(redraw, reset) {\n var _this = this;\n var options = this.options.responsive,\n currentResponsive = this.currentResponsive;\n var ruleIds = [],\n undoOptions;\n if (!reset && options && options.rules) {\n options.rules.forEach(function (rule) {\n if (typeof rule._id === 'undefined') {\n rule._id = Responsive_uniqueKey();\n }\n _this.matchResponsiveRule(rule, ruleIds /* , redraw */);\n }, this);\n }\n // Merge matching rules\n var mergedOptions = Responsive_merge.apply(void 0,\n ruleIds\n .map(function (ruleId) { return Responsive_find((options || {}).rules || [],\n function (rule) { return (rule._id === ruleId); }); })\n .map(function (rule) { return (rule && rule.chartOptions); }));\n mergedOptions.isResponsiveOptions = true;\n // Stringified key for the rules that currently apply.\n ruleIds = (ruleIds.toString() || void 0);\n var currentRuleIds = (currentResponsive && currentResponsive.ruleIds);\n // Changes in what rules apply\n if (ruleIds !== currentRuleIds) {\n // Undo previous rules. Before we apply a new set of rules, we\n // need to roll back completely to base options (#6291).\n if (currentResponsive) {\n this.currentResponsive = void 0;\n this.updatingResponsive = true;\n this.update(currentResponsive.undoOptions, redraw, true);\n this.updatingResponsive = false;\n }\n if (ruleIds) {\n // Get undo-options for matching rules. The `undoOptions``\n // hold the current values before they are changed by the\n // `mergedOptions`.\n undoOptions = Responsive_diffObjects(mergedOptions, this.options, true, this.collectionsWithUpdate);\n undoOptions.isResponsiveOptions = true;\n this.currentResponsive = {\n ruleIds: ruleIds,\n mergedOptions: mergedOptions,\n undoOptions: undoOptions\n };\n if (!this.updatingResponsive) {\n this.update(mergedOptions, redraw, true);\n }\n }\n else {\n this.currentResponsive = void 0;\n }\n }\n }\n})(Responsive || (Responsive = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Core_Responsive = (Responsive);\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * A callback function to gain complete control on when the responsive rule\n * applies.\n *\n * @callback Highcharts.ResponsiveCallbackFunction\n *\n * @param {Highcharts.Chart} this\n * Chart context.\n *\n * @return {boolean}\n * Return `true` if it applies.\n */\n(''); // Keeps doclets above in JS file\n/* *\n *\n * API Options\n *\n * */\n/**\n * Allows setting a set of rules to apply for different screen or chart\n * sizes. Each rule specifies additional chart options.\n *\n * @sample {highstock} stock/demo/responsive/\n * Stock chart\n * @sample highcharts/responsive/axis/\n * Axis\n * @sample highcharts/responsive/legend/\n * Legend\n * @sample highcharts/responsive/classname/\n * Class name\n *\n * @since 5.0.0\n * @apioption responsive\n */\n/**\n * A set of rules for responsive settings. The rules are executed from\n * the top down.\n *\n * @sample {highcharts} highcharts/responsive/axis/\n * Axis changes\n * @sample {highstock} highcharts/responsive/axis/\n * Axis changes\n * @sample {highmaps} highcharts/responsive/axis/\n * Axis changes\n *\n * @type {Array<*>}\n * @since 5.0.0\n * @apioption responsive.rules\n */\n/**\n * A full set of chart options to apply as overrides to the general\n * chart options. The chart options are applied when the given rule\n * is active.\n *\n * A special case is configuration objects that take arrays, for example\n * [xAxis](#xAxis), [yAxis](#yAxis) or [series](#series). For these\n * collections, an `id` option is used to map the new option set to\n * an existing object. If an existing object of the same id is not found,\n * the item of the same index updated. So for example, setting `chartOptions`\n * with two series items without an `id`, will cause the existing chart's\n * two series to be updated with respective options.\n *\n * @sample {highstock} stock/demo/responsive/\n * Stock chart\n * @sample highcharts/responsive/axis/\n * Axis\n * @sample highcharts/responsive/legend/\n * Legend\n * @sample highcharts/responsive/classname/\n * Class name\n *\n * @type {Highcharts.Options}\n * @since 5.0.0\n * @apioption responsive.rules.chartOptions\n */\n/**\n * Under which conditions the rule applies.\n *\n * @since 5.0.0\n * @apioption responsive.rules.condition\n */\n/**\n * A callback function to gain complete control on when the responsive\n * rule applies. Return `true` if it applies. This opens for checking\n * against other metrics than the chart size, for example the document\n * size or other elements.\n *\n * @type {Highcharts.ResponsiveCallbackFunction}\n * @since 5.0.0\n * @context Highcharts.Chart\n * @apioption responsive.rules.condition.callback\n */\n/**\n * The responsive rule applies if the chart height is less than this.\n *\n * @type {number}\n * @since 5.0.0\n * @apioption responsive.rules.condition.maxHeight\n */\n/**\n * The responsive rule applies if the chart width is less than this.\n *\n * @sample highcharts/responsive/axis/\n * Max width is 500\n *\n * @type {number}\n * @since 5.0.0\n * @apioption responsive.rules.condition.maxWidth\n */\n/**\n * The responsive rule applies if the chart height is greater than this.\n *\n * @type {number}\n * @default 0\n * @since 5.0.0\n * @apioption responsive.rules.condition.minHeight\n */\n/**\n * The responsive rule applies if the chart width is greater than this.\n *\n * @type {number}\n * @default 0\n * @since 5.0.0\n * @apioption responsive.rules.condition.minWidth\n */\n(''); // Keeps doclets above in JS file\n\n;// ./code/es5/es-modules/masters/highcharts.src.js\n/**\n * @license Highcharts JS v12.1.2 (2025-01-09)\n * @module highcharts/highcharts\n *\n * (c) 2009-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar G = Core_Globals;\n// Classes\nG.AST = HTML_AST;\nG.Axis = Axis_Axis;\nG.Chart = Chart_Chart;\nG.Color = Color_Color;\nG.DataLabel = Series_DataLabel;\nG.DataTableCore = Data_DataTableCore;\nG.Fx = Animation_Fx;\nG.HTMLElement = HTML_HTMLElement;\nG.Legend = Legend_Legend;\nG.LegendSymbol = Legend_LegendSymbol;\nG.OverlappingDataLabels = G.OverlappingDataLabels || Extensions_OverlappingDataLabels;\nG.PlotLineOrBand = PlotLineOrBand_PlotLineOrBand;\nG.Point = Series_Point;\nG.Pointer = Core_Pointer;\nG.RendererRegistry = Renderer_RendererRegistry;\nG.Series = Series_Series;\nG.SeriesRegistry = Series_SeriesRegistry;\nG.StackItem = Stacking_StackItem;\nG.SVGElement = SVG_SVGElement;\nG.SVGRenderer = SVG_SVGRenderer;\nG.Templating = Core_Templating;\nG.Tick = Axis_Tick;\nG.Time = Core_Time;\nG.Tooltip = Core_Tooltip;\n// Utilities\nG.animate = AnimationUtilities.animate;\nG.animObject = AnimationUtilities.animObject;\nG.chart = Chart_Chart.chart;\nG.color = Color_Color.parse;\nG.dateFormat = Core_Templating.dateFormat;\nG.defaultOptions = Defaults.defaultOptions;\nG.distribute = Renderer_RendererUtilities.distribute;\nG.format = Core_Templating.format;\nG.getDeferredAnimation = AnimationUtilities.getDeferredAnimation;\nG.getOptions = Defaults.getOptions;\nG.numberFormat = Core_Templating.numberFormat;\nG.seriesType = Series_SeriesRegistry.seriesType;\nG.setAnimation = AnimationUtilities.setAnimation;\nG.setOptions = Defaults.setOptions;\nG.stop = AnimationUtilities.stop;\nG.time = Defaults.defaultTime;\nG.timers = Animation_Fx.timers;\n// Compositions\nExtensions_BorderRadius.compose(G.Series, G.SVGElement, G.SVGRenderer);\nColumn_ColumnDataLabel.compose(G.Series.types.column);\nSeries_DataLabel.compose(G.Series);\nAxis_DateTimeAxis.compose(G.Axis);\nHTML_HTMLElement.compose(G.SVGRenderer);\nLegend_Legend.compose(G.Chart);\nAxis_LogarithmicAxis.compose(G.Axis);\nExtensions_OverlappingDataLabels.compose(G.Chart);\nPieDataLabel.compose(G.Series.types.pie);\nPlotLineOrBand_PlotLineOrBand.compose(G.Chart, G.Axis);\nCore_Pointer.compose(G.Chart);\nCore_Responsive.compose(G.Chart);\nExtensions_ScrollablePlotArea.compose(G.Axis, G.Chart, G.Series);\nStacking_StackingAxis.compose(G.Axis, G.Chart, G.Series);\nCore_Tooltip.compose(G.Pointer);\nCore_Utilities.extend(G, Core_Utilities);\n// Default Export\n/* harmony default export */ var highcharts_src = (G);\n\n;// ./code/es5/es-modules/Core/MSPointer.js\n/* *\n *\n * (c) 2010-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\nvar MSPointer_extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d,\n b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d,\n b) { d.__proto__ = b; }) ||\n function (d,\n b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b,\n p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\nvar MSPointer_charts = Core_Globals.charts, MSPointer_composed = Core_Globals.composed, MSPointer_doc = Core_Globals.doc, MSPointer_noop = Core_Globals.noop, MSPointer_win = Core_Globals.win;\n\n\nvar MSPointer_addEvent = Core_Utilities.addEvent, MSPointer_attr = Core_Utilities.attr, MSPointer_css = Core_Utilities.css, MSPointer_defined = Core_Utilities.defined, MSPointer_objectEach = Core_Utilities.objectEach, MSPointer_pick = Core_Utilities.pick, MSPointer_pushUnique = Core_Utilities.pushUnique, MSPointer_removeEvent = Core_Utilities.removeEvent;\n/* *\n *\n * Constants\n *\n * */\n// The touches object keeps track of the points being touched at all times\nvar touches = {};\nvar hasPointerEvent = !!MSPointer_win.PointerEvent;\n/* *\n *\n * Functions\n *\n * */\n/* eslint-disable valid-jsdoc */\n/** @private */\nfunction getWebkitTouches() {\n var fake = [];\n fake.item = function (i) {\n return this[i];\n };\n MSPointer_objectEach(touches, function (touch) {\n fake.push({\n pageX: touch.pageX,\n pageY: touch.pageY,\n target: touch.target\n });\n });\n return fake;\n}\n/** @private */\nfunction translateMSPointer(e, method, wktype, func) {\n var _a,\n _b;\n var pointer = (_b = MSPointer_charts[(_a = Core_Pointer.hoverChartIndex) !== null && _a !== void 0 ? _a : -1]) === null || _b === void 0 ? void 0 : _b.pointer;\n if (pointer &&\n (e.pointerType === 'touch' ||\n e.pointerType === e.MSPOINTER_TYPE_TOUCH)) {\n func(e);\n pointer[method]({\n type: wktype,\n target: e.currentTarget,\n preventDefault: MSPointer_noop,\n touches: getWebkitTouches()\n });\n }\n}\n/* *\n *\n * Class\n *\n * */\n/** @private */\nvar MSPointer = /** @class */ (function (_super) {\n MSPointer_extends(MSPointer, _super);\n // Disable default IE actions for pinch and such on chart element\n function MSPointer(chart, options) {\n var _this = _super.call(this,\n chart,\n options) || this;\n if (_this.hasZoom) { // #4014\n MSPointer_css(chart.container, {\n '-ms-touch-action': 'none',\n 'touch-action': 'none'\n });\n }\n return _this;\n }\n /* *\n *\n * Static Functions\n *\n * */\n MSPointer.isRequired = function () {\n return !!(!MSPointer_win.TouchEvent && (MSPointer_win.PointerEvent || MSPointer_win.MSPointerEvent));\n };\n /* *\n *\n * Functions\n *\n * */\n /**\n * Add or remove the MS Pointer specific events\n * @private\n * @function Highcharts.Pointer#batchMSEvents\n */\n MSPointer.prototype.batchMSEvents = function (fn) {\n fn(this.chart.container, hasPointerEvent ? 'pointerdown' : 'MSPointerDown', this.onContainerPointerDown);\n fn(this.chart.container, hasPointerEvent ? 'pointermove' : 'MSPointerMove', this.onContainerPointerMove);\n fn(MSPointer_doc, hasPointerEvent ? 'pointerup' : 'MSPointerUp', this.onDocumentPointerUp);\n };\n // Destroy MS events also\n MSPointer.prototype.destroy = function () {\n this.batchMSEvents(MSPointer_removeEvent);\n _super.prototype.destroy.call(this);\n };\n /**\n * Utility to detect whether an element has, or has a parent with, a\n * specific class name. Used on detection of tracker objects and on deciding\n * whether hovering the tooltip should cause the active series to mouse out.\n *\n * @function Highcharts.Pointer#inClass\n *\n * @param {Highcharts.SVGDOMElement|Highcharts.HTMLDOMElement} element\n * The element to investigate.\n *\n * @param {string} className\n * The class name to look for.\n *\n * @return {boolean|undefined}\n * True if either the element or one of its parents has the given class\n * name.\n */\n MSPointer.prototype.inClass = function (element, className) {\n var elem = element,\n elemClassName;\n while (elem) {\n elemClassName = MSPointer_attr(elem, 'class');\n if (elemClassName) {\n if (elemClassName.indexOf(className) !== -1) {\n return true;\n }\n if (elemClassName.indexOf('highcharts-container') !== -1) {\n return false;\n }\n }\n // #21098 IE11 compatibility\n elem = elem.parentNode;\n if (elem && (\n // HTMLElement\n elem === document.documentElement ||\n // Document\n MSPointer_defined(elem.nodeType) &&\n elem.nodeType === document.nodeType)) {\n elem = null;\n }\n }\n };\n /**\n * @private\n * @function Highcharts.Pointer#onContainerPointerDown\n */\n MSPointer.prototype.onContainerPointerDown = function (e) {\n translateMSPointer(e, 'onContainerTouchStart', 'touchstart', function (e) {\n touches[e.pointerId] = {\n pageX: e.pageX,\n pageY: e.pageY,\n target: e.currentTarget\n };\n });\n };\n /**\n * @private\n * @function Highcharts.Pointer#onContainerPointerMove\n */\n MSPointer.prototype.onContainerPointerMove = function (e) {\n translateMSPointer(e, 'onContainerTouchMove', 'touchmove', function (e) {\n touches[e.pointerId] = ({ pageX: e.pageX, pageY: e.pageY });\n if (!touches[e.pointerId].target) {\n touches[e.pointerId].target = e.currentTarget;\n }\n });\n };\n /**\n * @private\n * @function Highcharts.Pointer#onDocumentPointerUp\n */\n MSPointer.prototype.onDocumentPointerUp = function (e) {\n translateMSPointer(e, 'onDocumentTouchEnd', 'touchend', function (e) {\n delete touches[e.pointerId];\n });\n };\n // Add IE specific touch events to chart\n MSPointer.prototype.setDOMEvents = function () {\n var tooltip = this.chart.tooltip;\n _super.prototype.setDOMEvents.call(this);\n if (this.hasZoom ||\n MSPointer_pick((tooltip && tooltip.options.followTouchMove), true)) {\n this.batchMSEvents(MSPointer_addEvent);\n }\n };\n return MSPointer;\n}(Core_Pointer));\n/* *\n *\n * Class Namespace\n *\n * */\n(function (MSPointer) {\n /* *\n *\n * Functions\n *\n * */\n /**\n * @private\n */\n function compose(ChartClass) {\n if (MSPointer_pushUnique(MSPointer_composed, 'Core.MSPointer')) {\n MSPointer_addEvent(ChartClass, 'beforeRender', function () {\n this.pointer = new MSPointer(this, this.options);\n });\n }\n }\n MSPointer.compose = compose;\n})(MSPointer || (MSPointer = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ var Core_MSPointer = (MSPointer);\n\n;// ./code/es5/es-modules/masters-es5/highcharts.src.js\n/**\n * @license Highcharts JS v12.1.2 (2025-01-09)\n * @module highcharts/highcharts\n *\n * (c) 2009-2024 Torstein Honsi\n *\n * License: www.highcharts.com/license\n */\n\n// Loads polyfills as a module to force them to load first.\n\n\n\nvar highcharts_src_G = highcharts_src;\nif (Core_MSPointer.isRequired()) {\n highcharts_src_G.Pointer = Core_MSPointer;\n Core_MSPointer.compose(highcharts_src_G.Chart);\n}\n// SVG 1.1 shadow filter override, IE11 compatible. #21098\nhighcharts_src_G.SVGRenderer.prototype.getShadowFilterContent = function (options) {\n return [\n {\n tagName: 'feFlood',\n attributes: {\n \"flood-color\": options.color,\n \"flood-opacity\": options.opacity,\n result: 'flood'\n }\n },\n {\n tagName: 'feComposite',\n attributes: {\n in: 'flood',\n in2: 'SourceAlpha',\n operator: 'in',\n result: 'shadowColor'\n }\n },\n {\n tagName: 'feOffset',\n attributes: {\n dx: options.offsetX,\n dy: options.offsetY,\n result: 'offsetShadow'\n }\n },\n {\n tagName: 'feGaussianBlur',\n attributes: {\n in: 'offsetShadow',\n stdDeviation: options.width / 2,\n result: 'blurredShadow'\n }\n },\n {\n tagName: 'feMerge',\n children: [\n { tagName: 'feMergeNode', attributes: { in: 'blurredShadow' } },\n { tagName: 'feMergeNode', attributes: { in: 'SourceGraphic' } }\n ]\n }\n ];\n};\n// Default Export\n/* harmony default export */ var masters_es5_highcharts_src = (highcharts_src_G);\n\n__webpack_exports__ = __webpack_exports__[\"default\"];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});"],"names":["root","factory","exports","module","define","amd","error","Globals","_a","_b","hash","id","RendererRegistry","defaultRenderer","extendStatics","AxisDefaults","Tooltip","Pointer","Legend","CenteredUtilities","GeometryUtilities","MSPointer","serialMode","RendererUtilities","hasInternalReferenceBug","Foundation","DateTimeAxis","LogarithmicAxis","PlotLineOrBandAxis","LegendSymbol","SeriesRegistry","StackingAxis","DataLabel","ColumnDataLabel","PieDataLabel_ColumnDataLabel","Responsive","__webpack_modules__","Array","prototype","includes","searchElement","fromIndex","indexOf","find","predicate","thisArg","i","length","call","Object","entries","obj","keys","iEnd","push","values","window","CustomEvent","Event","type","params","bubbles","cancelable","detail","undefined","evt","document","createEvent","initCustomEvent","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","d","definition","key","o","defineProperty","enumerable","get","prop","hasOwnProperty","__webpack_exports__","masters_es5_highcharts_src","SVG_NS","product","version","win","doc","svg","createElementNS","createSVGRect","pageLang","documentElement","closest","lang","userAgent","navigator","isChrome","chrome","isFirefox","isMS","test","opera","isSafari","isTouchDevice","isWebKit","deg2rad","Math","PI","marginNames","noop","supportsPassiveEvents","supportsPassive","opts","addEventListener","removeEventListener","charts","composed","dateFormats","seriesTypes","symbolSizes","chartCount","Core_Globals","__spreadArray","to","from","pack","arguments","ar","l","slice","concat","code","stop","chart","severity","isCode","isNumber","message","toString","additionalMessages_1","objectEach","value","encodeURI","fireEvent","Error","console","messages","warn","pInt","s","mag","parseInt","isString","isArray","str","isObject","strict","isDOMElement","nodeType","isClass","c","constructor","name","n","isNaN","Infinity","defined","attr","elem","keyOrAttribs","ret","isGetter","attrSingle","setAttribute","getAttribute","removeAttribute","splat","extend","a","b","pick","args","arg","css","el","styles","style","getMagnitude","num","pow","floor","log","LN10","correctFloat","prec","parseFloat","toPrecision","easeInOutSine","pos","cos","arr","callback","fn","ctx","removeEvent","removeOneEvent","removeAllEvents","eventCollection","types","len","nodeName","_val","owner","events","hcEvents","typeEvents","filter","eventArguments","defaultFunction","dispatchEvent","e","initEvent","target","preventDefault","defaultPrevented","object","multilevel","unshift","apply","getPrototypeOf","sort","order","forEach","uniqueKey","random","substring","jQuery","highcharts","shift","Utilities","addEvent","options","Point","series","runTrackerClick","passive","capture","eventObject","arrayMax","data","max","arrayMin","min","clamp","clearTimeout","createElement","tag","attribs","parent","nopad","padding","border","margin","appendChild","crisp","lineWidth","inverted","mod","inverter","round","destroyObjectProperties","except","destructablesOnly","val","destroy","diffObjects","newer","older","keepOlder","collectionsWithUpdate","diff","depth","keeper","newerVal","discardElement","element","parentElement","removeChild","erase","item","splice","extendClass","members","getAlignFactor","align","center","right","middle","bottom","getClosestDistance","arrays","onError","loopLength","distance","allowNegative","xData","getNestedProperty","path","pathElements","split","pathElement","thisProp","child","replace","getStyle","toInt","offsetWidth","scrollWidth","boundingClientRectWidth","getBoundingClientRect","width","offsetHeight","scrollHeight","getComputedStyle","getPropertyValue","insertItem","collection","indexOption","index","isInternal","_i","isFunction","merge","extendOrSource","sources","doCopy","copy","original","normalizeTickInterval","interval","multiples","magnitude","allowDecimals","hasTickAmount","retInterval","normalized","offset","docElem","box","parentNode","top","left","height","pageYOffset","scrollTop","clientTop","pageXOffset","scrollLeft","clientLeft","pad","number","padder","String","join","pushUnique","array","relativeLength","base","replaceNested","text","previous","replacement","replacements","replacements_1","stableSort","sortFunction","sortValue","safeI","syncTimeout","delay","context","setTimeout","timeUnits","millisecond","second","minute","hour","day","week","month","year","ucfirst","toUpperCase","useSerialIds","mode","wrap","method","func","proceed","outerArgs","scope","Time_win","Time_defined","Core_Utilities","Time_error","Time_extend","Time_isNumber","Time_isObject","Time_isString","Time_merge","Time_objectEach","Time_pad","Time_splat","Time_timeUnits","Time_ucfirst","hasOldSafariBug","Intl","DateTimeFormat","formatRange","spanishWeekdayIndex","weekday","Time","timezone","variableTimezone","Date","update","_this","dTLCache","timezoneOffset","useUTC","isMonth","isShort","timeZone","map","position","dateFormat","toParts","timestamp","dateTimeFormat","dayOfMonth","Number","locale","cacheKey","JSON","stringify","str2dtf","dTL","format","dtf","mapping","L","fractionalSecondDigits","S","M","H","k","E","A","B","m","y","Y","makeTime","date","hours","minutes","seconds","milliseconds","UTC","getTimezoneOffset","newOffset","parse","hasTimezone","isYYYYMMDD","ts","timeZoneName","upperCaseFirst","defaultOptions","invalidDate","localeAwareRegex","match","exec","time_1","fullYear","langWeekdays","weekdays","shortWeekdays","months","shortMonths","substr","w","I","p","P","tzHours","_c","prefix","_d","suffix","resolveDTLFormat","f","main","getTimeTicks","normalizedInterval","startOfWeek","variableDayLength","time","tickPositions","higherRanks","count","unitRange","weekdayNo","t","info","totalRange","getDateFormat","range","dateTimeLabelFormats","dateStr","blank","strpos","lastN","Defaults_fireEvent","Defaults_merge","colors","symbols","loading","numericSymbols","resetZoom","resetZoomTitle","global","buttonTheme","fill","r","stroke","color","cursor","fontSize","fontWeight","states","hover","select","disabled","alignThresholds","panning","enabled","styledMode","borderRadius","colorCount","allowMutatingData","ignoreHiddenSeries","spacing","resetZoomButton","theme","reflow","zooming","singleTouch","resetButton","zIndex","x","borderColor","backgroundColor","plotBorderColor","title","minScale","subtitle","caption","verticalAlign","plotOptions","legend","alignColumns","className","layout","itemMarginBottom","itemMarginTop","labelFormatter","navigation","activeColor","inactiveColor","itemStyle","textDecoration","textOverflow","itemHoverStyle","itemHiddenStyle","shadow","itemCheckboxStyle","squareSymbol","symbolPadding","labelStyle","opacity","textAlign","tooltip","animation","duration","easing","sqrt","footerFormat","headerShape","hideDelay","shape","shared","snap","headerFormat","pointFormat","borderWidth","stickOnContact","useHTML","credits","href","defaultTime","Color_isNumber","Color_merge","Color_pInt","Color_defined","Color","input","rgba","NaN","result","parser","GlobalColor","stops","names","toLowerCase","parsers","regex","None","ret_1","brighten","alpha","setOpacity","tweenTo","fromRgba","toRgba","hasAlpha","channel","white","black","Color_Color","Fx_win","Fx_isNumber","Fx_objectEach","Fx","dSetter","paths","start","end","now","startSeg","endSeg","tweenSeg","j","startItem","endItem","toD","step","unit","run","self","timer","gotoEnd","stopped","requestAnimationFrame","timers","startTime","curAnim","complete","done","initPath","fromD","fullLength","reverse","startX","endX","isArea","positionFactor","disableAnimation","hasStackedCliffs","prepend","other","moveSegment","otherSegment","z","pop","append","segmentToAdd","lowerSegmentToAdd","fillSetter","strokeSetter","AnimationUtilities_defined","AnimationUtilities_getStyle","AnimationUtilities_isArray","AnimationUtilities_isNumber","AnimationUtilities_isObject","AnimationUtilities_merge","AnimationUtilities_objectEach","AnimationUtilities_pick","animObject","defer","Animation_Fx","opt","fx","pathArray","labelAnimation","seriesAnim","renderer","forExport","globalAnimation","AST_win","AST_attr","AST_createElement","AST_css","AST_error","AST_isFunction","AST_isString","AST_objectEach","AST_splat","trustedTypes","trustedTypesPolicy","createPolicy","createHTML","emptyHTML","AST","source","nodes","parseMarkup","filterUserAttributes","attributes","valid","allowedAttributes","allowedReferences","some","ref","parseStyle","reduce","line","pair","trim","g","setElementHTML","html","innerHTML","ast","addToDOM","recurse","subtree","subParent","node","tagName","textNode","textContent","createTextNode","bypassHTMLFiltering","allowedTags","NS","namespaceURI","attributes_1","children","markup","DOMParser","parseFromString","body","appendChildNodes","addTo","astNode","parsedAttributes","attributes_2","attrib","childNodes","children_1","childNode","Templating_pageLang","Templating_extend","Templating_getNestedProperty","Templating_isArray","Templating_isNumber","Templating_isObject","Templating_isString","Templating_pick","helpers","add","divide","eq","each","ge","gt","condition","le","lt","multiply","ne","subtract","unless","numberFormatCache","isQuotedString","currentMatch","hasSub","subRegex","matches","floatRegex","decRegex","Templating_defaultOptions","numberFormatter","numberFormat","resolveProperty","mainMatch","subMatch","isBlock","expression","charAt","startInner","startingElseSection","elseBody","parts","startChar","char","valueAndFormat","segment","decimals","decimalPoint","thousandsSep","lastIndex","fractionDigits","mantissa","exp","origDec","firstDecimals","toExponential","toFixed","minimumFractionDigits","maximumFractionDigits","useGrouping","hasSeparators","nf","NumberFormat","Core_Templating","Templating_defaultTime","rendererTypes","getRendererType","rendererType","registerRendererType","rendererClass","setAsDefault","Renderer","Renderer_RendererRegistry","RendererUtilities_clamp","RendererUtilities_pick","RendererUtilities_pushUnique","RendererUtilities_stableSort","distribute","boxes","maxDistance","equalRank","origBoxes","reducedLen","sortByTarget","restBoxes","boxesLength","forDeletion","overlapping","total","size","rank","targets","posInCompositeBox","abs","Renderer_RendererUtilities","SVGElement_doc","SVGElement_SVG_NS","SVGElement_win","SVGElement_addEvent","SVGElement_attr","SVGElement_createElement","SVGElement_crisp","SVGElement_css","SVGElement_defined","SVGElement_erase","SVGElement_extend","SVGElement_fireEvent","SVGElement_getAlignFactor","SVGElement_isArray","SVGElement_isFunction","SVGElement_isNumber","SVGElement_isObject","SVGElement_isString","SVGElement_merge","SVGElement_objectEach","SVGElement_pick","SVGElement_pInt","SVGElement_pushUnique","SVGElement_replaceNested","SVGElement_syncTimeout","SVGElement_uniqueKey","SVGElement","onEvents","_defaultGetter","_defaultSetter","inserted","parentGroup","textStr","buildText","added","handleZ","zIndexSetter","onAdd","addClass","currentClassName","newClassName","afterSetters","doTransform","updateTransform","alignOptions","alignByTranslate","alignTo","redraw","alignedObjects","initialAlignment","Boolean","alignToKey","alignToBox","placed","alignAttr","alignSetter","convert","alignValue","animate","animOptions","SVGElement_animObject","deferTime","hidden","SVGElement_animate","applyTextOutline","textOutline","getContrast","strokeWidth","fakeTS","digit","removeTextOutline","outline_1","parentElem","querySelector","clone","cloneNode","totalHeight_1","querySelectorAll","br","dy","insertBefore","firstChild","continueAnimation","hasSetSymbolSize","skipAttr","symbolCustomAttribs","SVGElement_stop","symbolName","symbolAttr","rotation","setter","clip","clipElem","clipPath","defs","url","rect","x1","y1","x2","y2","x2Crisp","y2Crisp","complexColor","colorOptions","colorObject","gradName","gradAttr","radAttr","gradients","stopColor","stopOpacity","radialReference","radialGradient","linearGradient","gradientUnits","getRadialAttr","gradientObject_1","stopObject","gradient","textWidth","oldStyles","newStyles","hasNew","stylesToApply_1","dashstyleSetter","v","grandParent","wrapper","ownerSVGElement","parentToClean","onclick","onmouseout","onmouseover","onmousemove","point","clipPath_1","connector","safeRemoveChild","div","pathToSegments","acc","seg","hrefSetter","setAttributeNS","getBBox","reload","rot","bBox","toggleTextShadowShim","cache","cacheKeys","isSVG","rootFontSize","lineClamp","polygon","display","outline","htmlGetBBox","getRotatedBox","boxX","boxY","translateY","rotationOriginX","rotationOriginY","alignFactor","baseline","rad","rad90","cosRad","sinRad","sin","wCosRad","wSinRad","cosRad90","sinRad90","rotOrigin","_e","xOriginCosRad","xOriginSinRad","_f","yOriginCosRad","aX","pX","bX","cX","dX","aY","pY","bY","cY","dY","boxWidth","boxHeight","hasClass","hide","visibility","on","eventType","handler","opacitySetter","reAlign","removeClass","RegExp","setRadialReference","coordinates","existingGradient","shadowOptions","offsetX","offsetY","shadowDefinition","show","inherit","tempElement","textSetter","textPxLength","titleSetter","titleNode","getElementsByTagName","toFront","translate","translateX","matrix","scaleX","scaleY","transform","textPath","visibilitySetter","xGetter","otherElement","otherZIndex","undefinedOtherZIndex","parentWrapper","svgParent","yGetter","matrixSetter","rotationOriginXSetter","rotationOriginYSetter","rotationSetter","scaleXSetter","scaleYSetter","translateXSetter","translateYSetter","verticalAlignSetter","__extends","setPrototypeOf","__proto__","__","create","SVGLabel_defined","SVGLabel_extend","SVGLabel_getAlignFactor","SVGLabel_isNumber","SVGLabel_merge","SVGLabel_pick","SVGLabel_removeEvent","SVGLabel","_super","anchorX","anchorY","hasBGImage","paddingLeftSetter","paddingSetter","paddingRightSetter","doUpdate","symbolKey","emptyBBox","baselineOffset","needsBox","deferredAttr","xSetting","anchorXSetter","boxAttr","getCrispAdjust","anchorYSetter","ySetting","textStyles_1","textProps","updateTextPadding","updateBoxSize","SVG_SVGElement","paddingLeft","heightSetter","heightSetting","rSetter","crispAdjust","widthSetting","getPaddedWidth","metrics","fontMetrics","firstLineMetrics","h","symbol","textY","textX","widthSetter","paddingRight","xSetter","ySetter","Symbols_defined","Symbols_isNumber","Symbols_pick","arc","cx","cy","rx","ry","proximity","fullCircle","innerRadius","innerR","open_1","open","cosStart","sinStart","cosEnd","sinEnd","longArc","arcSegment","clockwise","roundedRect","SVG_Symbols","callout","safeDistance","isTopCorner","cornerY","sliceStart","circle","diamond","square","triangle","TextBuilder_doc","TextBuilder_SVG_NS","TextBuilder_win","TextBuilder_attr","TextBuilder_extend","TextBuilder_fireEvent","TextBuilder_isString","TextBuilder_objectEach","TextBuilder_pick","stringWithEllipsis","currentIndex","TextBuilder","svgElement","textStyles","textLineHeight","lineHeight","ellipsis","noWrap","whiteSpace","buildSVG","hasMarkup","tempParent","textCache","actualWidth","regexMatchBreaks","modifyTree","modifyDOM","unescapeEntities","nextSibling","previousSibling","getLineHeight","modifyTextNode","words","hasWhiteSpace","ellipsisWidth","lineNo","startAt","lines","precedingSiblings","truncate","modifyChildren","Node","TEXT_NODE","baseVal","modifyChild","fontStyle","nextNode","getString","lengths","minIndex","maxIndex","getSubStringLength","charEnd","concatenatedEnd","ceil","inputStr","escapes","SVGRenderer_spreadArray","SVGRenderer_charts","SVGRenderer_deg2rad","SVGRenderer_doc","SVGRenderer_isFirefox","SVGRenderer_SVG_NS","SVGRenderer_win","SVGRenderer_addEvent","SVGRenderer_attr","SVGRenderer_createElement","SVGRenderer_crisp","SVGRenderer_css","SVGRenderer_defined","SVGRenderer_destroyObjectProperties","SVGRenderer_extend","SVGRenderer_isArray","SVGRenderer_isNumber","SVGRenderer_isObject","SVGRenderer_isString","SVGRenderer_merge","SVGRenderer_pick","SVGRenderer_pInt","SVGRenderer_replaceNested","SVGRenderer_uniqueKey","SVGRenderer","container","allowHTML","subPixelFix","boxWrapper","getReferenceURL","desc","imgCount","setSize","unSubPixelFix","def","hitElement","elementFromPoint","location","fontFamily","setStyle","isHidden","rendererDefs","Element","chartIndex","filterUnits","getShadowFilterContent","dx","stdDeviation","b8","button","hoverState","selectState","disabledState","label","curState","SVGRenderer_defaultOptions","normalStyle","stateAttribs","HTML_AST","stateStyles","stateName","setState","state","css_1","pointerEvents","stopPropagation","crispLine","points","_key","rGetter","viewBox","alignElements","image","onload","preserveAspectRatio","elemWrapper","onDummyLoad","dummy","Image","src","imageSrc","centerImage","ren","imageRegex","isImage","sym","symbolFn","img_1","imgwidth","imgheight","imgSize","scale","backgroundSize","isImg","symbolUrl","hasLoaded","clipRect","tspans","parentVal","tspan","rotCorr","alterY","commandLength","C","Q","T","V","draw","HTMLElement_extends","TypeError","__assign","assign","HTMLElement_attr","HTMLElement_css","HTMLElement_createElement","HTMLElement_defined","HTMLElement_extend","HTMLElement_getAlignFactor","HTMLElement_isNumber","HTMLElement_pInt","HTMLElement_pushUnique","commonSetter","decorateSVGGroup","cssProto_1","div_1","classSetter","HTMLElement","compose","SVGRendererClass","getSpanCorrection","alignCorrection","xCorr","yCorr","isSettingWidth","overflow","WebkitLineClamp","WebkitBoxOrient","offsetLeft","offsetTop","alignOnAdd","_g","_h","marginLeft","marginTop","currentTextTransform","parentPadding","oldTextWidth","textWidthNum","innerText","cTT","oldRotation","oldAlign","setSpanRotation","_k","_j","_l","rotOriginX","rotOriginY","styles_1","transformOrigin","originX","originY","parents","svgGroup","proto","xAxis","alignTicks","panningEnabled","zoomEnabled","endOnTick","gridLineDashStyle","gridZIndex","labels","autoRotationLimit","indentation","reserveSpace","staggerLines","maxPadding","minorGridLineDashStyle","minorTickLength","minorTickPosition","minorTicksPerMajor","minPadding","reversed","reversedStacks","showEmpty","showFirstLabel","showLastLabel","startOnTick","tickLength","tickPixelInterval","tickmarkPlacement","tickPosition","visible","minorGridLineColor","minorGridLineWidth","minorTickColor","lineColor","gridLineColor","gridLineWidth","tickColor","yAxis","stackLabels","allowOverlap","crop","formatter","axis","Axis_AxisDefaults","Foundation_addEvent","Foundation_isFunction","Foundation_objectEach","Foundation_removeEvent","registerEventOptions","component","eventOptions","event","Core_Foundation","Tick_deg2rad","Tick_clamp","Tick_correctFloat","Tick_defined","Tick_destroyObjectProperties","Tick_extend","Tick_fireEvent","Tick_getAlignFactor","Tick_isNumber","Tick_merge","Tick_objectEach","Tick_pick","Tick","noLabel","parameters","isNew","isNewLabel","tickmarkOffset","addLabel","dateTimeLabelFormat","tick","categories","logarithmic","labelOptions","isFirst","isLast","animateLabels","tickInterval","tickPositionInfo","category","lin2log","dateTime","grid","unitName","getXDateFormat","defaultLabelFormatter","list","shortenLabel","getSlotWidth","_addedPlotLB","moveLabel","movedLabel","createLabel","xy","labelGroup","getPosition","horiz","tickPos","old","cHeight","oldChartHeight","chartHeight","transB","opposite","oldChartWidth","chartWidth","getLabelPosition","yOffset","transA","isLinked","linkedParent","tickRotCorr","labelOffsetCorrection","reserveSpaceDefault","labelOffset","labelAlign","side","getLabelSize","getMarkPath","tickWidth","handleOverflow","leftPos","rightPos","pxPos","leftBound","labelLeft","rightBound","labelRight","isRadial","factor","labelWidth","slotWidth","modifiedSlotWidth","goRight","xCorrection","autoRotation","labelPos","moved","ticks","currentTick","render","axisStart","axisEnd","polar","labelOpacity","newOpacity","isActive","renderGridLine","renderMark","renderLabel","gridLinePath","gridLine","dashStyle","dashstyle","gridGroup","getPlotLinePath","force","acrossPanes","tickSize","isXAxis","mark","isNewMark","axisGroup","replaceMovedLabel","isDirty","Axis_deg2rad","Axis_arrayMax","Axis_arrayMin","Axis_clamp","Axis_correctFloat","Axis_defined","Axis_destroyObjectProperties","Axis_erase","Axis_error","Axis_extend","Axis_fireEvent","Axis_getClosestDistance","Axis_insertItem","Axis_isArray","Axis_isNumber","Axis_isString","Axis_merge","Axis_normalizeTickInterval","Axis_objectEach","Axis_pick","Axis_relativeLength","Axis_removeEvent","Axis_splat","Axis_syncTimeout","getNormalizedTickInterval","tickAmount","Axis","userOptions","coll","init","isZAxis","setOptions","labelsOptions","uniqueNames","minPixelPadding","hasNames","plotLinesAndBandsGroups","positiveValuesOnly","linkedTo","labelEdge","minorTicks","plotLinesAndBands","alternateBands","minRange","userMinRange","maxZoom","crosshair","crosshairs","axes","orderItems","labelRotation","sideSpecific","Axis_defaultOptions","multi","numSymMagnitude","numericSymbolMagnitude","numericSymbolDetector","getSeriesExtremes","xExtremes","hasVisibleSeries","dataMin","dataMax","threshold","softThreshold","seriesOptions","seriesDataMin","seriesDataMax","getColumn","getXExtremes","dataExtremes","applyExtremes","backwards","cvsCoord","handleLog","pointPlacement","localMin","doPostTranslate","isOrdinal","brokenAxis","hasBreaks","lin2val","sign","cvsOffset","localA","returnValue","sector","val2lin","toPixels","paneCoordinates","toValue","pixel","skip","axisLeft","axisTop","cWidth","translatedValue","between","scrollablePixelsY","scrollablePixelsX","getLinearTickPositions","lastPos","precision","roundedMin","roundedMax","single","getMinorTickInterval","minorTickInterval","getMinorTickPositions","pointRangePadding","unitLength","minorTickPositions","logarithmic_1","paddedTicks","_pos","getLogTickPositions","normalizeTimeTickInterval","trimTicks","adjustForMinRange","zoomOffset","spaceAvailable","minArgs","maxArgs","ceiling","closestDataRange","xIncrement","log2lin","getClosest","closestSingleDistance","closestDistance","singleXs_1","seriesClosest","closestPointRange","sorted","nameToX","explicitCategories","nameX","requireSorting","autoIncrement","updateNames","isDirtyData","dataTable","rowCount","processData","generatePoints","setColumn","setAxisTranslation","ordinalCorrection","hasCategories","pointRange","axisPointRange","minPointOffset","seriesPointRange","isPointPlacementAxis","is","ordinal","slope","translationSlope","staticScale","minFromRange","setTickInterval","secondPass","linkedParentExtremes","thresholdMin","thresholdMax","hardMin","hardMax","softMax","softMin","tickPixelIntervalOption","tickIntervalOption","getTickAmount","userMin","userMax","getExtremes","stacking","usePercentage","numThreshold","hasExtremesChanged_1","forceCrop","forceCropping","hasExtremesChanged","minTickInterval","unsquish","setTickPositions","tickPositionerResult","tickPositionsOption","tickPositioner","minorTickIntervalOption","allowEndOnTick","isPanning","positions","units","startingTickInterval","adjustedTickInterval","adjustTickAmount","alignToOthers","hasOther","alignedAxes","chartOptions","thresholdAlignments","thresholdAlignment","getKey_1","pane","thisKey_1","otherAxis","threshAlign","getThresholdAlignment","thresholdAlignment_1","sum","callerAxis","finalTickAmt","thresholdTickIndex","currentTickAmount","hasData","adjustExtremes","setScale","isXAxisDirty","setAxisSize","isDirtyAxisLength","forceRedraw","buildStacks","cleanStacks","allExtremes","setExtremes","serie","kdTree","eventArgs","offsets","plotWidth","plotHeight","plotTop","plotLeft","getThreshold","realMin","realMax","autoLabelAlign","angle","labelMetrics","slotSize","rotationOption","getStep","spaceNeeded","newTickInterval","bestScore","MAX_VALUE","score","autoRotation_1","slotCount","cssWidth","renderUnsquish","commonWidth","labelStyleOptions","innerWidth","lineClampOption","maxLabelLength","widthOption","addTitle","axisTitleOptions","axisTitle","low","high","generateTick","createGroups","axisParent","createGroup","getOffset","showAxis","titleOffsetOption","labelOffsetPadded","lineHeightCorrection","invertedSide","hasCrossing","crossing","axisOffset","clipOffset","directionFactor","titleOffset","titleMargin","renderLine","axisTitleMargin","getMaxLabelDimensions","maxLabelDimensions","axisLine","getLinePath","lineLeft","lineTop","getTitlePosition","axisLength","xOption","yOption","textHeightOvershoot","alongAxis","offAxis","titlePosition","renderMinorTick","slideIn","renderTick","isColumn","stackLabelOptions","alternateGridColor","Axis_animObject","overlap","px","slideInTicks_1","hasRendered","PlotLineOrBand","plotLines","plotBands","plotLineOptions","addPlotBandOrLine","forDestruction","isPlaced","renderStackTotals","plotLine","getKeepProps","keepProps","keepEvents","plotGroup","drawCrosshair","categorized","crossOptions","graphic","cross","crosshairPos","plotX","plotY","chartX","chartY","stackY","isCrosshair","hideCrosshair","isDirtyBox","remove","axisSeries","setTitle","titleOptions","setCategories","DateTimeAxis_addEvent","DateTimeAxis_getMagnitude","DateTimeAxis_normalizeTickInterval","DateTimeAxis_timeUnits","onAfterSetType","Additions","AxisClass","axisProto","unitsOption","Axis_DateTimeAxis","LogarithmicAxis_addEvent","LogarithmicAxis_normalizeTickInterval","LogarithmicAxis_pick","onAfterInit","minor","minorAutoInterval","intermediate","break2","totalPixelLength","Axis_LogarithmicAxis","PlotLineOrBandAxis_erase","PlotLineOrBandAxis_extend","PlotLineOrBandAxis_isNumber","PlotLineOrBandClass","addPlotBand","updatedOptions","addPlotLine","getPlotBandPath","isFlat","toPath","outside","plus","pathStart","pathEnd","toPathStart","toPathEnd","removePlotBand","removePlotBandOrLine","i_1","removePlotLine","PlotLineOrBandType","PlotLineOrBand_PlotLineOrBandAxis","PlotLineOrBand_assign","PlotLineOrBand_addEvent","PlotLineOrBand_arrayMax","PlotLineOrBand_arrayMin","PlotLineOrBand_defined","PlotLineOrBand_destroyObjectProperties","PlotLineOrBand_erase","PlotLineOrBand_fireEvent","PlotLineOrBand_merge","PlotLineOrBand_objectEach","PlotLineOrBand_pick","ChartClass","labelCollectors","group","groupAttribs","optionsLabel","svgElem","isBand","isLine","groupName","eventsAdded","inside","getLabelText","xBounds","yBounds","bBoxWidth","Tooltip_format","Tooltip_composed","Tooltip_doc","Tooltip_addEvent","Tooltip_clamp","Tooltip_css","Tooltip_discardElement","Tooltip_extend","Tooltip_fireEvent","Tooltip_isArray","Tooltip_isNumber","Tooltip_isObject","Tooltip_isString","Tooltip_merge","Tooltip_pick","Tooltip_pushUnique","Tooltip_splat","Tooltip_syncTimeout","pointer","allowShared","isSticky","bodyFormatter","tooltipOptions","formatPrefix","tooltipFormatter","cleanSplit","tt","defaultFormatter","hoverPoints","headerFooterFormatter","hideTimer","getAnchor","mouseEvent","followPointer","normalize","tooltipPos","chartX_1","chartY_1","getClassName","isSplit","isHeader","colorIndex","getLabel","doSplit","wasSplit","chartStyle","renderTo","shouldStickOnContact","label_1","getPlayingField","clientWidth","clientHeight","swapped","outerHeight","outerWidth","chartPosition","getChartPosition","buildDimensionArray","dim","isX","first","flipped","negative","hoverSeries","preferFarSide","ttBelow","firstDimension","outerSize","innerSize","scaledInnerSize","scaledDist","scaleDiff","roomLeft","roomRight","alignedLeft","alignedRight","secondDimension","swap","pointerEvent","inClass","move","Tooltip_animObject","skipAnchor","drawTracker","refresh","pointOrPoints","formatString","wasShared","noSharedTooltip","anchor","applyInactiveState","currentSeries","renderSplit","checkX_1","checkY_1","isDirectTouch","shouldShowTooltip","spacingBox","updatePosition","positioner","scrollablePlotArea","scrollingContainer","bounds","tooltipLabel","headerTop","chartLeft","chartTop","distributionBoxTop","headerHeight","adjustedPlotHeight","defaultPositioner","updatePartialTooltip","partialTooltip","ignoreX","boxPosition","boxStart","boxExtremes","tracker","hoverPoint","anchorPos","labelBBox","styledModeFormat","isFooter","xDateFormat","format_1","tooltipDateKeys","PointerClass","Core_Tooltip","Point_format","Point_addEvent","Point_crisp","Point_erase","Point_extend","Point_fireEvent","Point_getNestedProperty","Point_isArray","Point_isFunction","Point_isNumber","Point_isObject","Point_merge","Point_pick","Point_syncTimeout","Point_removeEvent","Point_uniqueKey","applyOptions","resolveColor","pointCount","animateBeforeDestroy","animateParams","startXPos","graphicalProps","getGraphicalProps","singular","isDataLabel","startYPos","plural","pointValKey","optionsToObject","dataLabels","selected","relativeXValue","isNull","isValid","destroyed","point_1","dataSorting","Point_animObject","destroyPoint","graphics","dataLabel","destroyElements","legendItem","destroyItem","onMouseOut","kinds","props","firePointEvent","manageEvent","allowPointSelect","ctrlKey","metaKey","shiftKey","zone","getZone","zones","zoneAxis","nonZonedColor","hasNewShapeType","oldShapeType","shapeType","firstItemType","pointArrayMap","valueCount","setNestedProperty","hasDataLabels","marker","_hasPointMarkers","chartCoordinates","posX","posY","optionsChart","colorByPoint","colorCounter","nestedKeys","isLastKey","shouldDraw","valueDecimals","valuePrefix","valueSuffix","runEvent","hasMockGraphic","shouldDestroyGraphic","row","dataColumnKeys","setRow","fixedBox","hasCartesianSeries","legendType","isDirtyLegend","removePoint","accumulate","selectedStaging","getSelectedPoints","loopPoint","loopSeries","inactiveOtherPoints","onMouseOver","getChartCoordinatesFromPoint","runPointActions","userEvent","importedUserEvent","markerAttribs","pointAttribs","pointAttribsAnimation","newSymbol","previousState","stateOptions","markerOptions","Point_defaultOptions","normalDisabled","markerStateOptions","stateDisabled","pointMarker","hasMarkers","halo","stateMarkerGraphic","opacity_1","currentSymbol","markerGroup","isInside","haloOptions","markerGraphic","markerVisibility","isCluster","haloPath","Pointer_assign","Pointer_color","Pointer_charts","Pointer_composed","Pointer_isTouchDevice","Pointer_addEvent","Pointer_attr","Pointer_css","Pointer_extend","Pointer_find","Pointer_fireEvent","Pointer_isNumber","Pointer_isObject","Pointer_objectEach","Pointer_offset","Pointer_pick","Pointer_pushUnique","Pointer_splat","hasDragged","pointerCaptureEventsToUnbind","eventsToUnbind","runChartClick","click","pinchDown","setDOMEvents","activeSeries","linkedSeries","navigatorSeries","inactiveSeries","setAllPointsToState","unbind","unbindDocumentMouseUp","unbindDocumentTouchEnd","clearInterval","tooltipTimeout","getSelectionMarkerAttrs","attrs","zoomHor","zoomVert","mouseDownX","mouseDownY","drag","clickedInside","panKey","selectionMarkerFill","panKeyPressed","selectionMarker","touch","isInsidePlot","visiblePlotOnly","mapView","hasZoom","pan","dragStart","mouseIsDown","cancelClick","getSelectionBox","drop","boosted","zoomX","zoomY","selection","originalEvent","_cursor","findNearestKDPoint","p1","isCloserX","isCloser","isAbove","compareX","findNearestPointBy","searchPoint","distX","p2","dist","shapeArgs","clientX","isNode","getCoordinates","getHoverData","existingHoverPoint","existingHoverSeries","searchSeries","directTouch","enableMouseTracking","notSticky","stickyTracking","useExisting","boost","getPoint","getPointFromEvent","onTrackerMouseOut","relatedTarget","elemClassName","touches","ePos","changedTouches","pageX","pageY","onContainerClick","pEvt","onContainerMouseDown","isPrimaryButton","buttons","onContainerMouseMove","zoomOption","onContainerMouseLeave","hoverChartIndex","reset","onContainerMouseEnter","setHoverChartIndex","touchSelect","openMenu","onDocumentTouchEnd","onDocumentMouseUp","onContainerTouchMove","onContainerTouchStart","onDocumentMouseMove","ownerDocument","pinch","lastTouches","touchesLength","fireClickEvent","followTouchMove","initiated","res","boxFromTouches","finger0","finger1","trigger","allowMove","tooltipPoints","isCartesian","unDocMouseMove","hoverData","useSharedTooltip","ownerDoc","onmousedown","bind","setPointerCapture","shouldHave","hasPointerCapture","pointerId","releasePointerCapture","hoverChart","relatedTargetObj","hasMoved","zoomType","pinchType","Core_Pointer","DataTableCore_fireEvent","DataTableCore_isArray","DataTableCore_objectEach","DataTableCore_uniqueKey","DataTableCore","autoId","columns","modified","versionTag","column","columnName","applyRowCount","asReference","getColumns","columnNames","getRow","rowIndex","eventDetail","setColumns","silent","insert","indexRowCount","cellValue","addColumns","LegendSymbol_spreadArray","LegendSymbol_extend","LegendSymbol_merge","LegendSymbol_pick","lineMarker","hasArea","legendSymbol","symbolWidth","symbolHeight","generalRadius","legendItemGroup","verticalCenter","lineSizer","linecap","area","radius","isMarker","areaMarker","rectangle","symbolRadius","Legend_LegendSymbol","SeriesDefaults","showCheckbox","enabledThreshold","normal","radiusPlus","lineWidthPlus","fillColor","cropThreshold","inactive","turboThreshold","SeriesRegistry_extends","SeriesRegistry_extend","SeriesRegistry_extendClass","SeriesRegistry_merge","registerSeriesType","seriesType","SeriesClass","defaultPlotOptions","SeriesRegistry_defaultOptions","seriesProto","pointClass","pointProto","PointClass","Series_SeriesRegistry","Series_assign","Series_spreadArray","Series_registerEventOptions","Series_svg","Series_win","Series_arrayMax","Series_arrayMin","Series_clamp","Series_correctFloat","Series_crisp","Series_defined","Series_destroyObjectProperties","Series_diffObjects","Series_erase","Series_error","Series_extend","Series_find","Series_fireEvent","Series_getClosestDistance","Series_getNestedProperty","Series_insertItem","Series_isArray","Series_isNumber","Series_isString","Series_merge","Series_objectEach","Series_pick","Series_removeEvent","Series_syncTimeout","Series","lastSeries","chartSeries","bindAxes","getColor","getSymbol","setDataSortingOptions","setData","axisOptions","axisTypes","optionalAxis","hasMarkerChanged","oldOptions","oldMarker","pointInterval","pointIntervalUnit","pointStart","enabledDataSorting","allowDG","itemOptions","seriesUserOptions","typeOptions","userPlotOptions","userPlotOptionsSeries","defaultPlotOptionsType","Series_defaultOptions","userPlotOptionsType","negativeColor","negativeFillColor","getName","getCyclic","defaults","setting","indexName","counterName","getPointsCollection","hasGroupedData","seriesMarkerOption","findPointIndex","optionsObject","matchingPoint","matchedById","pointIndex","oldData","matcher","oldPoint","touched","matchByName","cropped","cropStart","updateData","hasUpdatedByKey","pointsToAdd","equalLength","succeeded","pointOptions","hasDerivedData","addPoint","updatePoints","updatedData","copiedData","oldDataLength","table","indexOfX","indexOfY","dataLength","sortData","runTurbo","firstPoint","getFirstValidPoint","lastPoint","isShortArray","valueData","data_1","autoX","colArray_1","pt","data_2","data_3","dataColumnKeys_1","sortKey","getPointOptionsObject","sortedData","aValue","bValue","seriesData","getProcessedData","forceExtremesFromAll","croppedData","getExtremesFromAll","updatingNames","cropData","processedData","basePointRange","pOptions","dataOptions","processedDataLength","groupCropStartIndex","dataGrouping","groupAll","dataGroup","groupMap","yData","customData","stackedYData","yAxisData","keysAffectYAxis","activeYData","shoulder","doAll","xMin","xMax","yAxisData_1","increment","lastPlotX","stackIndicator","pointPlacementToXValue","dynamicallyPlaced","stackThreshold","startFromThreshold","closestPointRangePx","limitedRange","xValue","stackItem","stackValues","yValue","lowValue","stacks","negStacks","stackKey","getStackIndicator","stackTotal","percentage","irregularWidths","setOffset","pointXOffset","barW","yBottom","dataModify","modifyValue","isPointInside","getValidPoints","insideOnly","allowNull","asNull","getClipBox","clipBox","plotSizeX","plotSizeY","invertible","getSharedClipKey","sharedClipKey","setClip","sharedClips","Series_animObject","animationClipKey","animationClipRect","markerAnimationClipRect","markerClipBox","finalBox","step_1","afterAnimate","finishedAnimating","drawPoints","verb","pointMarkerOptions","hasPointMarker","colorAxis","seriesMarkerOptions","specialGroup","globallyEnabled","hasImage","pointAttr","seriesStateOptions","pointStateOptions","pointColorOption","pointColor","zoneColor","keepEventsForUpdate","issue134","removeEvents","AXIS","animationTimeout","survive","applyZones","graph","halfWidth","avoidClose","translated","lineClip","axisMax_1","invertPath_1","showLine","points_1","zoneBelow","lastLineClip_1","lastTranslated_1","simpleClip","simplePath","adaptivePath","getPlotBox","horAxis","vertAxis","chartSeriesGroup","seriesGroup","animDuration","drawGraph","drawDataLabels","redrawPoints","wasDirty","searchKDTree","buildKDTree","buildingKdTree","dimensions","kdtree","median","kdAxisArray","kdNow","suppliedPointEvaluator","suppliedBSideCheckEvaluator","kdX","kdY","kdComparer","kdDimensions","useRadius","isBubble","pointEvaluator","comparisonProp","bSideCheckEvaluator","doSearch","search","tree","p1kdX","p2kdX","p1kdY","p2kdY","flip","tdist","sideA","sideB","trackByArea","trackerPath","areaPath","graphPath","TRACKER_FILL","dataLabelsGroup","withEvent","isInTheMiddle","Series_setAnimation","linkSeries","initialType","initialSeriesProto","preserve","newType","keepPoints","joinBy","mapData","optionsToCheck","option","hasOptionChanged","parallelArrays","groups","casting","propFromSeries","ownEvents","missingModuleFor","showInLegend","setSortedData","setName","optionName","oldOption","plotOptionsOption","mouseOver","mouseOut","stateAnimation","graphElement","labelBySeries","setVisible","vis","oldVisibility","showOrHide","colorizeItem","otherSeries","checkbox","checked","drawLegendSymbol","registerType","Legend_registerEventOptions","Legend_composed","Legend_distribute","Legend_format","Legend_addEvent","Legend_createElement","Legend_css","Legend_defined","Legend_discardElement","Legend_find","Legend_fireEvent","Legend_isNumber","Legend_merge","Legend_pick","Legend_pushUnique","Legend_relativeLength","Legend_stableSort","Legend_syncTimeout","allItems","initialItemY","itemHeight","itemX","itemY","lastItemY","lastLineHeight","legendHeight","legendWidth","maxItemWidth","maxLegendWidth","pages","titleHeight","totalItemWidth","positionCheckboxes","proximate","proximatePositions","positionItems","originalColor","legendSymbolColor","hiddenColor_1","fillOpacity","colorizeHidden","positionItem","isResizing","ltr","rtl","getAllItems","clipHeight","scrollOffset","checkboxOffset","renderTitle","contentGroup","setText","labelFormat","renderItem","horizontal","itemDistance","isSeries","createCheckboxForItem","itemClassName","itemExtraWidth","scrollGroup","setItemEvents","itemWidth","fontMetricsH","labelHeight","layoutItem","getAlignment","floating","adjustMargins","alignment","alignments","alignLeft","useFirstPoint","allowedWidth","legendGroup","legendIndex","lastY","optionsY","alignTop","maxHeight","navOptions","arrowSize","clipToHeight","addTracker","nav","spaceHeight","currentPage","fullHeight","pageIx","up","scroll","pager","down","scrollBy","pageCount","Legend_setAnimation","upTracker","downTracker","Legend_animObject","legendLabel","isPoint","activeClass","legendElements","setOtherItemsState","otherItem","legendElements_1","defaultItemClick","browserEvent","defaultChecked","Legend_Legend","Chart_assign","Chart_spreadArray","Chart_numberFormat","Chart_registerEventOptions","Chart_charts","Chart_doc","Chart_marginNames","Chart_svg","Chart_win","Chart_seriesTypes","Chart_addEvent","Chart_attr","Chart_createElement","Chart_css","Chart_defined","Chart_diffObjects","Chart_discardElement","Chart_erase","Chart_error","Chart_extend","Chart_find","Chart_fireEvent","Chart_getAlignFactor","Chart_getStyle","Chart_isArray","Chart_isNumber","Chart_isObject","Chart_isString","Chart_merge","Chart_objectEach","Chart_pick","Chart_pInt","Chart_relativeLength","Chart_removeEvent","Chart_splat","Chart_syncTimeout","Chart_uniqueKey","Chart","setZoomOptions","zoomKey","zoomBySingleTouch","getElementById","showAxes","symbolCounter","firstRender","initSeries","getSeriesOrderByLinks","optionsArray","userOptionsArray","plotBox","scrollablePlotBox","ignoreY","hasDirtyStacks","hasStackedSeries","legendUserOptions","isHiddenChart","afterRedraw","redrawLegend","setResponsive","Chart_setAnimation","temporaryDisplay","layOutTitles","centerInCategory","updateTotals","getStacks","getMargins","extKey","drawChartBox","itemById","createAxes","arr_1","getSelectedSeries","subtitleOptions","applyDescription","explicitOptions","updateOptions","isStock","descOptions","topAligned","uncappedScale","offset_1","requiresDirtyBox","getContainerBox","nonContainers","getChartSize","heightOption","containerBox","enableDefaultHeight","revert","tempStyle","hcOrigStyle","hcOrigDetached","contains","hcOricDetached","setProperty","setClassName","getContainer","containerStyle","indexAttrName","containerId","oldChartIndex","skipClone","userSelect","exporting","skipAxes","resetMargins","marginBottom","getAxisMargins","setChartSize","getOptions","oldBox","isPrinting","reflowTimeout","setReflow","runReflow","ResizeObserver","observe","Chart_animObject","clipRoundFunc","marginRight","plotBorderWidth","sideName","chartBorderWidth","mgn","bgAttr","plotBGImage","chartBackgroundColor","plotBackgroundColor","plotBackgroundImage","chartBackground","plotBackground","plotBorder","plotShadow","klass","isUpdating","renderSeries","redoVertical","axisLayoutRuns","renderAxes","expectedSpace","redoHorizontal","axes_1","mockTick","tempWidth","tempHeight","axes_2","seriesGroupShadow","addCredits","creds","mapCredits","scroller","serieOptions","callbacks","warnIfA11yModuleNotLoaded","accessibility","role","addSeries","addAxis","createAxis","addColorAxis","showLoading","loadingOptions","setLoadingSize","loadingDiv","loadingSpan","loadingShown","Chart_animate","showDuration","hideLoading","hideDuration","oneToOne","updateAllAxes","updateAllSeries","runSetSize","adders","isResponsiveOptions","itemsForRemoval","propsRequireUpdateSeries","propsRequireDirtyBox","propsRequireReflow","newOptions","hasId","collectionsWithInit","newWidth","newHeight","setSubtitle","setCaption","showResetZoom","Chart_defaultOptions","btnOptions","relativeTo","zoomOut","resetSelection","panningOptions","displayButton","isAnyAxisPanning","hasZoomed","axes_3","wh","toLength","fromLength","fromCenter","toCenter","pointRangeDirection","newMin","newMax","minPx","seriesExtremes","_m","optionsMin","optionsMax","safeDataMin","safeDataMax","padRange","paddedMin","paddedMax","allowZoomOutside","overscroll","ScrollablePlotArea_composed","ScrollablePlotArea_addEvent","ScrollablePlotArea_createElement","ScrollablePlotArea_css","ScrollablePlotArea_defined","ScrollablePlotArea_erase","ScrollablePlotArea_merge","ScrollablePlotArea_pushUnique","onChartRender","ScrollablePlotArea","applyFixed","markDirty","lastHoverPoint","scrollableOptions","moveFixedElements","WebkitOverflowScrolling","overflowX","overflowY","parentDiv","innerContainer","fixedDiv","fixedRenderer","mask","afterSetSize","recalculateHoriz","minWidth","minHeight","hasParallelCoordinates","scrollPositionX","scrollPositionY","scrollableWidth","scrollableHeight","ScrollablePlotArea_stop","maskTop","maskLeft","maskBottom","maskRight","maskPlotRight","maskPlotBottom","redrawTrigger","axisClass","fixedSelectors","classBase","fixedSelectors_1","StackItem_format","StackItem_Series","StackItem_destroyObjectProperties","StackItem_fireEvent","StackItem_getAlignFactor","StackItem_isNumber","StackItem_pick","StackItem","negativeValue","stackOption","isNegative","cumulative","hasValidPoints","stack","leftCliff","rightCliff","formatOption","labelrank","xOffset","boxBottom","boxTop","defaultX","stackBox","getStackBox","labelBox","isJustify","adjustStackPosition","justifyDataLabel","stackBoxProps","totalStackValue","neg","StackingAxis_addEvent","StackingAxis_correctFloat","StackingAxis_defined","StackingAxis_destroyObjectProperties","StackingAxis_fireEvent","StackingAxis_isNumber","StackingAxis_objectEach","StackingAxis_pick","chartGetStacks","oldStacks","xAxisOptions","onAxisDestroy","stacks_1","stackTotalGroup","onAxisInit","AxisAdditions","seriesGetStackIndicator","seriesModifyStacks","processedXData","stacker","pointExtremes","seriesPercentStacker","totalFactor","seriesSetGroupedPoints","setStackedPoints","resetStacks","seriesSetStackedPoints","stackingParam","pointKey","yDataLength","negKey","stacksTouched","yNumber","singleStacks","actualSeries","setGroupedPoints","modifyStacks","animationConfig","StackingAxis_getDeferredAnimation","stackLabelsAnim","chartProto","percentStacker","Stacking_StackingAxis","LineSeries_extends","LineSeries_spreadArray","LineSeries_defined","LineSeries_merge","LineSeries_isObject","LineSeries","gappedPath","getGraphPath","preventGraphAnimation","xMap","fillGraph","nullsAsZeroes","connectCliffs","gap","connectNulls","pathToPoint","getPointSpline","Series_Series","Area_AreaSeriesDefaults","AreaSeries_extends","AreaSeries_spreadArray","AreaSeries_LineSeries","AreaSeries_extend","AreaSeries_merge","AreaSeries_objectEach","AreaSeries_pick","AreaSeries","shiftUnit","bottomPoints","graphPoints","seriesIndex","translatedThreshold","addDummyPoints","otherI","stackedValues","nullVal","cliffVal","isCliff","doCurve","getStackPoints","leftNull","rightNull","rectPlotX","topPath","bottomPath","firstBottomPoint","pointMap","yAxisSeries","seriesLength","upOrDown","stackX","visibleSeries_1","idx","stackPoint","direction","nullName","otherStack","cliff","si","SplineSeries_extends","SplineSeries_LineSeries","SplineSeries_merge","SplineSeries_pick","SplineSeries","leftContX","leftContY","rightContX","rightContY","nextPoint","otherPoint","lastX","nextX","nextY","correction","smoothing","controlPoints","AreaSplineSeries_extends","AreaSplineSeries_AreaSeries","areaProto","AreaSplineSeries_extend","AreaSplineSeries_merge","AreaSplineSeries","Spline_SplineSeries","Column_ColumnSeriesDefaults","groupPadding","pointPadding","minPointLength","brightness","ColumnSeries_extends","ColumnSeries_color","ColumnSeries_noop","ColumnSeries_clamp","ColumnSeries_crisp","ColumnSeries_defined","ColumnSeries_extend","ColumnSeries_fireEvent","ColumnSeries_isArray","ColumnSeries_isNumber","ColumnSeries_merge","ColumnSeries_pick","ColumnSeries_objectEach","ColumnSeries","translateStart","yAxisPos","translateProp","ColumnSeries_animObject","getColumnMetrics","reverseStacks","stackGroups","columnCount","grouping","columnIndex","otherYAxis","otherOptions","categoryWidth","pointOffsetWidth","groupWidth","pointWidth","maxPointWidth","colIndex","columnMetrics","paddedWidth","crispCol","adjustForMissingColumns","indexInCategory_1","totalInCategory_1","pointValues","yStackMap","baseIndex_1","seriesIndexes","yStack","dense","seriesPointWidth","seriesXOffset","seriesBarW","barY","barH","barX","p2o","pointAttrToOptions","strokeOption","strokeWidthOption","animationLimit","hasGraphic","allowShadow","_hasTracking","trackerGroups","DataLabel_format","DataLabel_defined","DataLabel_extend","DataLabel_fireEvent","DataLabel_getAlignFactor","DataLabel_isArray","DataLabel_isString","DataLabel_merge","DataLabel_objectEach","DataLabel_pick","DataLabel_pInt","DataLabel_splat","mergedDataLabelOptions","alignDataLabel","justify","forceDL","unrotatedbBox","setDataLabelStartPos","initDataLabelsGroup","initDataLabels","contrastColor","seriesDlOptions","DataLabel_getDeferredAnimation","mergeArrays","dlOptions","labelText","labelBgColor","labelEnabled","dataLabelOnHidden","dataLabelOnNull","applyFilter","op","operator","property","off","justified","horizontalAxis","horizontalAxisShift","verticalAxis","verticalAxisShift","one","two","labelCenter","Series_DataLabel","ColumnDataLabel_composed","ColumnDataLabel_Series","ColumnDataLabel_merge","ColumnDataLabel_pick","ColumnDataLabel_pushUnique","xLen","yLen","dlBox","below","overshoot","ColumnSeriesClass","Column_ColumnDataLabel","BarSeries_extends","BarSeries_extend","BarSeries_merge","BarSeries","Column_ColumnSeries","Scatter_ScatterSeriesDefaults","jitter","ScatterSeries_extends","ScatterSeries_a","ScatterSeries_ColumnSeries","ScatterSeries_LineSeries","ScatterSeries_addEvent","ScatterSeries_extend","ScatterSeries_merge","ScatterSeries","applyJitter","plotProp","translatedJitter","rand","CenteredUtilities_deg2rad","CenteredUtilities_fireEvent","CenteredUtilities_isNumber","CenteredUtilities_pick","CenteredUtilities_relativeLength","getCenter","handleSlicingRoom","slicingRoom","slicedOffset","centerOption","smallestSize","thickness","angular","getStartAndEndRadians","startAngle","endAngle","Series_CenteredUtilities","PiePoint_extends","PiePoint_assign","PiePoint_addEvent","PiePoint_defined","PiePoint_extend","PiePoint_isNumber","PiePoint_pick","PiePoint_relativeLength","PiePoint","half","toggleSlice","getConnectorPath","labelPosition","dataLabelPosition","connectorShape","shapeFunc","connectorShapes","computed","connectorPosition","getTranslate","sliced","slicedTranslation","PiePoint_setAnimation","fixedOffset","breakAt","touchingSliceAt","lineSegment","softConnector","straight","crookedLine","diameter","leftAligned","crookX","crookDistance","tan","Pie_PieSeriesDefaults","connectorPadding","ignoreHiddenPoint","PieSeries_extends","PieSeries_noop","PieSeries_clamp","PieSeries_extend","PieSeries_fireEvent","PieSeries_merge","PieSeries_pick","PieSeries","startAngleRad","startR","drawEmpty","centerX","centerY","endAngleRad","delayedRendering","getX","radii","asin","groupTranslation","animateTo","sortByAngle","radiusX","radiusY","radians","circ","PieDataLabel_composed","PieDataLabel_noop","PieDataLabel_distribute","PieDataLabel_Series","PieDataLabel_arrayMax","PieDataLabel_clamp","PieDataLabel_defined","PieDataLabel_pick","PieDataLabel_pushUnique","PieDataLabel_relativeLength","dataLabelPositioners","radialDistributionY","distributeBox","radialDistributionX","naturalY","seriesCenter","alignToPlotEdges","dataLabelWidth","alignToConnectors","maxDataLabelWidth","getDataLabelPosition","halfPI","cosAngle","sinAngle","finalConnectorOffset","natural","maxWidth","halves","maxLabelDistance","shortened","dataLabelOptions","halfIdx","distributionLength","topOffset","posAttribs","sideOverflow","verifyDataLabelOverflow","placeDataLabels","connectorColor","connectorWidth","minSize","newSize","PieSeriesClass","pieProto","PieDataLabel","getCenterOfPoints","getDistanceBetweenPoints","getAngleBetweenPoints","atan2","pointInPolygon","Geometry_GeometryUtilities","OverlappingDataLabels_addEvent","OverlappingDataLabels_fireEvent","OverlappingDataLabels_objectEach","OverlappingDataLabels_pick","chartHideOverlappingLabels","label1","label2","box1","box2","isLabelAffected","oldOpacity","absoluteBox","getAbsoluteBox","box1Poly","toHide","box2Poly","isPolygonOverlap","box1Poly_1","overlappingLabel","labels_1","hideOrShow","isOld","OverlappingDataLabels_onChartRender","collector","_loop_1","hideOverlappingLabels","Extensions_OverlappingDataLabels","BorderRadius_spreadArray","BorderRadius_noop","BorderRadius_addEvent","BorderRadius_extend","BorderRadius_isObject","BorderRadius_merge","BorderRadius_relativeLength","defaultBorderRadiusOptions","where","oldArc","oldRoundedRect","BorderRadius_arc","sinHalfAlpha","innerBorderRadius","applyBorderRadius","fromLineToArc","bigR","relativeR","angleOfBorderRadius","angleOffset","distanceBigCenterToStartArc","seriesOnAfterColumnTranslate","is3d","percent","seriesDefault","BorderRadius_defaultOptions","brBoxY","brBoxHeight","stackEnd","seriesBROptions","pieSeriesOnAfterTranslate","BorderRadius_roundedRect","brOffsetTop","brOffsetBtm","rTop","rBtm","cutTop","cutBtm","applyPythagoras","altitude","Responsive_diffObjects","Responsive_extend","Responsive_find","Responsive_merge","Responsive_pick","Responsive_uniqueKey","matchResponsiveRule","rule","_id","undoOptions","responsive","currentResponsive","ruleIds","rules","mergedOptions","ruleId","currentRuleIds","updatingResponsive","Core_Responsive","G","OverlappingDataLabels","Templating","Chart_Chart","getDeferredAnimation","setAnimation","Extensions_BorderRadius","SVGElementClass","pie","HTML_HTMLElement","PlotLineOrBand_PlotLineOrBand","Extensions_ScrollablePlotArea","MSPointer_extends","MSPointer_charts","MSPointer_composed","MSPointer_doc","MSPointer_noop","MSPointer_win","MSPointer_addEvent","MSPointer_attr","MSPointer_css","MSPointer_defined","MSPointer_objectEach","MSPointer_pick","MSPointer_pushUnique","MSPointer_removeEvent","hasPointerEvent","PointerEvent","translateMSPointer","wktype","fake","pointerType","MSPOINTER_TYPE_TOUCH","currentTarget","isRequired","TouchEvent","MSPointerEvent","batchMSEvents","onContainerPointerDown","onContainerPointerMove","onDocumentPointerUp","Core_MSPointer","highcharts_src_G","in","in2"],"mappings":"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AW,EAAI,EAAC,EAE/C,IAAIe,EAAmBlB,EAAKpB,UAAU,CAEtC,GAAIsC,EAAkB,CAClB,IAAIC,EAAe,CAAC,EACpB,EAAE,CAACthB,OAAO,CAAC1L,IAAI,CAAC+sB,EAAkB,SAAUE,CAAM,EAC1CA,AAAgB,eAAhBA,EAAO7lB,IAAI,CACX0lB,EAAQlkB,KAAK,CAAGwhB,EAAIW,UAAU,CAACkC,EAAOlnB,KAAK,EAG3CinB,CAAY,CAACC,EAAO7lB,IAAI,CAAC,CAAG6lB,EAAOlnB,KAAK,AAEhD,GACA+mB,EAAQrC,UAAU,CAAGuC,CACzB,CAEA,GAAInB,EAAKqB,UAAU,CAACntB,MAAM,CAAE,CACxB,IAAIotB,EAAa,EAAE,CACnB,EAAE,CAACzhB,OAAO,CAAC1L,IAAI,CAAC6rB,EAAKqB,UAAU,CAAE,SAAUE,CAAS,EAChDR,EAAiBQ,EAAWD,EAChC,GACIA,EAAWptB,MAAM,EACjB+sB,CAAAA,EAAQP,QAAQ,CAAGY,CAAS,CAEpC,CACAN,EAAMvsB,IAAI,CAACwsB,EACf,EAEA,MADA,EAAE,CAACphB,OAAO,CAAC1L,IAAI,CAACwC,EAAImqB,IAAI,CAACO,UAAU,CAAE,SAAUE,CAAS,EAAI,OAAOR,EAAiBQ,EAAW9C,EAAQ,GAChGA,CACX,EAqBAF,EAAIO,iBAAiB,CAAG,CACpB,MACA,gBACA,mBACA,gBACA,gBACA,cACA,aACA,kBACA,YACA,eACA,gBACA,uBACA,gBACA,QACA,YACA,QACA,UACA,KACA,KACA,IACA,KACA,KACA,WACA,OACA,cACA,cACA,gBACA,SACA,OACA,KACA,KACA,MACA,eACA,cACA,SACA,UACA,WACA,SACA,UACA,cACA,eACA,eACA,IACA,SACA,OACA,OACA,OACA,QACA,QACA,MACA,cACA,eACA,SACA,iBACA,eACA,QACA,cACA,SACA,UACA,UACA,SACA,WACA,aACA,cACA,aACA,aACA,QACA,OACA,SACA,QACA,IACA,KACA,KACA,aACA,IACA,KACA,KACA,SACH,CAgBDP,EAAIQ,iBAAiB,CAAG,CACpB,WACA,UACA,UAC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"}
Hacked By AnonymousFox1.0, Coded By AnonymousFox