Hacked By AnonymousFox
{"version":3,"sources":["<anon>"],"sourcesContent":["/**\n * @license Highcharts JS v12.1.2 (2025-01-09)\n * @module highcharts/modules/boost-canvas\n * @requires highcharts\n *\n * Boost module\n *\n * (c) 2010-2024 Highsoft AS\n * Author: Torstein Honsi\n *\n * License: www.highcharts.com/license\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(root[\"_Highcharts\"], root[\"_Highcharts\"][\"Color\"]);\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"highcharts/modules/boost-canvas\", [\"highcharts/highcharts\"], function (amd1) {return factory(amd1,amd1[\"Color\"]);});\n\telse if(typeof exports === 'object')\n\t\texports[\"highcharts/modules/boost-canvas\"] = factory(root[\"_Highcharts\"], root[\"_Highcharts\"][\"Color\"]);\n\telse\n\t\troot[\"Highcharts\"] = factory(root[\"Highcharts\"], root[\"Highcharts\"][\"Color\"]);\n})(typeof window === 'undefined' ? this : window, (__WEBPACK_EXTERNAL_MODULE__944__, __WEBPACK_EXTERNAL_MODULE__620__) => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 620:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__620__;\n\n/***/ }),\n\n/***/ 944:\n/***/ ((module) => {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__944__;\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/compat get default export */\n/******/ \t(() => {\n/******/ \t\t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t\t__webpack_require__.n = (module) => {\n/******/ \t\t\tvar getter = module && module.__esModule ?\n/******/ \t\t\t\t() => (module['default']) :\n/******/ \t\t\t\t() => (module);\n/******/ \t\t\t__webpack_require__.d(getter, { a: getter });\n/******/ \t\t\treturn getter;\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": () => (/* binding */ boost_canvas_src)\n});\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\"],\"commonjs\":[\"highcharts\"],\"commonjs2\":[\"highcharts\"],\"root\":[\"Highcharts\"]}\nvar highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_ = __webpack_require__(944);\nvar highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default = /*#__PURE__*/__webpack_require__.n(highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_);\n;// ./code/es-modules/Extensions/Boost/Boostables.js\n/* *\n *\n * (c) 2019-2024 Highsoft AS\n *\n * Boost module: stripped-down renderer for higher performance\n *\n * License: highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n * Constants\n *\n * */\n// These are the series we allow boosting for.\nconst Boostables = [\n 'area',\n 'areaspline',\n 'arearange',\n 'column',\n 'columnrange',\n 'bar',\n 'line',\n 'scatter',\n 'heatmap',\n 'bubble',\n 'treemap'\n];\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ const Boost_Boostables = (Boostables);\n\n;// ./code/es-modules/Extensions/Boost/BoostableMap.js\n/* *\n *\n * (c) 2019-2024 Highsoft AS\n *\n * Boost module: stripped-down renderer for higher performance\n *\n * License: highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n * Imports\n *\n * */\n\n/* *\n *\n * Constants\n *\n * */\n// These are the series we allow boosting for.\nconst BoostableMap = {};\nBoost_Boostables.forEach((item) => {\n BoostableMap[item] = true;\n});\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ const Boost_BoostableMap = (BoostableMap);\n\n;// ./code/es-modules/Extensions/Boost/BoostChart.js\n/* *\n *\n * (c) 2019-2024 Highsoft AS\n *\n * Boost module: stripped-down renderer for higher performance\n *\n * License: highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\nconst { composed } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent, pick, pushUnique } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n * Functions\n *\n * */\n/**\n * @private\n */\nfunction compose(ChartClass, wglMode) {\n if (wglMode && pushUnique(composed, 'Boost.Chart')) {\n ChartClass.prototype.callbacks.push(onChartCallback);\n }\n return ChartClass;\n}\n/**\n * Get the clip rectangle for a target, either a series or the chart.\n * For the chart, we need to consider the maximum extent of its Y axes,\n * in case of Highcharts Stock panes and navigator.\n *\n * @private\n * @function Highcharts.Chart#getBoostClipRect\n */\nfunction getBoostClipRect(chart, target) {\n const navigator = chart.navigator;\n let clipBox = {\n x: chart.plotLeft,\n y: chart.plotTop,\n width: chart.plotWidth,\n height: chart.plotHeight\n };\n if (navigator && chart.inverted) { // #17820, #20936\n clipBox.width += navigator.top + navigator.height;\n if (!navigator.opposite) {\n clipBox.x = navigator.left;\n }\n }\n else if (navigator && !chart.inverted) {\n clipBox.height = navigator.top + navigator.height - chart.plotTop;\n }\n // Clipping of individual series (#11906, #19039).\n if (target.getClipBox) {\n const { xAxis, yAxis } = target;\n clipBox = target.getClipBox();\n if (chart.inverted) {\n const lateral = clipBox.width;\n clipBox.width = clipBox.height;\n clipBox.height = lateral;\n clipBox.x = yAxis.pos;\n clipBox.y = xAxis.pos;\n }\n else {\n clipBox.x = xAxis.pos;\n clipBox.y = yAxis.pos;\n }\n }\n if (target === chart) {\n const verticalAxes = chart.inverted ? chart.xAxis : chart.yAxis; // #14444\n if (verticalAxes.length <= 1) {\n clipBox.y = Math.min(verticalAxes[0].pos, clipBox.y);\n clipBox.height = (verticalAxes[0].pos -\n chart.plotTop +\n verticalAxes[0].len);\n }\n }\n return clipBox;\n}\n/**\n * Returns true if the chart is in series boost mode.\n * @private\n * @param {Highcharts.Chart} chart\n * Chart to check.\n * @return {boolean}\n * `true` if the chart is in series boost mode.\n */\nfunction isChartSeriesBoosting(chart) {\n const allSeries = chart.series, boost = chart.boost = chart.boost || {}, boostOptions = chart.options.boost || {}, threshold = pick(boostOptions.seriesThreshold, 50);\n if (allSeries.length >= threshold) {\n return true;\n }\n if (allSeries.length === 1) {\n return false;\n }\n let allowBoostForce = boostOptions.allowForce;\n if (typeof allowBoostForce === 'undefined') {\n allowBoostForce = true;\n for (const axis of chart.xAxis) {\n if (pick(axis.min, -Infinity) > pick(axis.dataMin, -Infinity) ||\n pick(axis.max, Infinity) < pick(axis.dataMax, Infinity)) {\n allowBoostForce = false;\n break;\n }\n }\n }\n if (typeof boost.forceChartBoost !== 'undefined') {\n if (allowBoostForce) {\n return boost.forceChartBoost;\n }\n boost.forceChartBoost = void 0;\n }\n // If there are more than five series currently boosting,\n // we should boost the whole chart to avoid running out of webgl contexts.\n let canBoostCount = 0, needBoostCount = 0, seriesOptions;\n for (const series of allSeries) {\n seriesOptions = series.options;\n // Don't count series with boostThreshold set to 0\n // See #8950\n // Also don't count if the series is hidden.\n // See #9046\n if (seriesOptions.boostThreshold === 0 ||\n series.visible === false) {\n continue;\n }\n // Don't count heatmap series as they are handled differently.\n // In the future we should make the heatmap/treemap path compatible\n // with forcing. See #9636.\n if (series.type === 'heatmap') {\n continue;\n }\n if (Boost_BoostableMap[series.type]) {\n ++canBoostCount;\n }\n if (patientMax(series.getColumn('x', true), seriesOptions.data, \n /// series.xData,\n series.points) >= (seriesOptions.boostThreshold || Number.MAX_VALUE)) {\n ++needBoostCount;\n }\n }\n boost.forceChartBoost = allowBoostForce && ((\n // Even when the series that need a boost are less than or equal\n // to 5, force a chart boost when all series are to be boosted.\n // See #18815\n canBoostCount === allSeries.length &&\n needBoostCount === canBoostCount) ||\n needBoostCount > 5);\n return boost.forceChartBoost;\n}\n/**\n * Take care of the canvas blitting\n * @private\n */\nfunction onChartCallback(chart) {\n /**\n * Convert chart-level canvas to image.\n * @private\n */\n function canvasToSVG() {\n if (chart.boost &&\n chart.boost.wgl &&\n isChartSeriesBoosting(chart)) {\n chart.boost.wgl.render(chart);\n }\n }\n /**\n * Clear chart-level canvas.\n * @private\n */\n function preRender() {\n // Reset force state\n chart.boost = chart.boost || {};\n chart.boost.forceChartBoost = void 0;\n chart.boosted = false;\n // Clear the canvas\n if (!chart.axes.some((axis) => axis.isPanning)) {\n chart.boost.clear?.();\n }\n if (chart.boost.canvas &&\n chart.boost.wgl &&\n isChartSeriesBoosting(chart)) {\n // Allocate\n chart.boost.wgl.allocateBuffer(chart);\n }\n // See #6518 + #6739\n if (chart.boost.markerGroup &&\n chart.xAxis &&\n chart.xAxis.length > 0 &&\n chart.yAxis &&\n chart.yAxis.length > 0) {\n chart.boost.markerGroup.translate(chart.xAxis[0].pos, chart.yAxis[0].pos);\n }\n }\n addEvent(chart, 'predraw', preRender);\n // Use the load event rather than redraw, otherwise user load events will\n // fire too early (#18755)\n addEvent(chart, 'load', canvasToSVG, { order: -1 });\n addEvent(chart, 'redraw', canvasToSVG);\n let prevX = -1;\n let prevY = -1;\n addEvent(chart.pointer, 'afterGetHoverData', (e) => {\n const series = e.hoverPoint?.series;\n chart.boost = chart.boost || {};\n if (chart.boost.markerGroup && series) {\n const xAxis = chart.inverted ? series.yAxis : series.xAxis;\n const yAxis = chart.inverted ? series.xAxis : series.yAxis;\n if ((xAxis && xAxis.pos !== prevX) ||\n (yAxis && yAxis.pos !== prevY)) {\n // #21176: If the axis is changed, hide teh halo without\n // animation to prevent flickering of halos sharing the\n // same marker group\n chart.series.forEach((s) => {\n s.halo?.hide();\n });\n // #10464: Keep the marker group position in sync with the\n // position of the hovered series axes since there is only\n // one shared marker group when boosting.\n chart.boost.markerGroup.translate(xAxis.pos, yAxis.pos);\n prevX = xAxis.pos;\n prevY = yAxis.pos;\n }\n }\n });\n}\n/**\n * Tolerant max() function.\n *\n * @private\n * @param {...Array<Array<unknown>>} args\n * Max arguments\n * @return {number}\n * Max value\n */\nfunction patientMax(...args) {\n let r = -Number.MAX_VALUE;\n args.forEach((t) => {\n if (typeof t !== 'undefined' &&\n t !== null &&\n typeof t.length !== 'undefined') {\n if (t.length > 0) {\n r = t.length;\n return true;\n }\n }\n });\n return r;\n}\n/* *\n *\n * Default Export\n *\n * */\nconst BoostChart = {\n compose,\n getBoostClipRect,\n isChartSeriesBoosting\n};\n/* harmony default export */ const Boost_BoostChart = (BoostChart);\n\n// EXTERNAL MODULE: external {\"amd\":[\"highcharts/highcharts\",\"Color\"],\"commonjs\":[\"highcharts\",\"Color\"],\"commonjs2\":[\"highcharts\",\"Color\"],\"root\":[\"Highcharts\",\"Color\"]}\nvar highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_ = __webpack_require__(620);\nvar highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default = /*#__PURE__*/__webpack_require__.n(highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_);\n;// ./code/es-modules/Extensions/Boost/WGLDrawMode.js\n/* *\n *\n * (c) 2019-2024 Highsoft AS\n *\n * Boost module: stripped-down renderer for higher performance\n *\n * License: highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n * Constants\n *\n * */\nconst WGLDrawMode = {\n 'area': 'LINES',\n 'arearange': 'LINES',\n 'areaspline': 'LINES',\n 'column': 'LINES',\n 'columnrange': 'LINES',\n 'bar': 'LINES',\n 'line': 'LINE_STRIP',\n 'scatter': 'POINTS',\n 'heatmap': 'TRIANGLES',\n 'treemap': 'TRIANGLES',\n 'bubble': 'POINTS'\n};\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ const Boost_WGLDrawMode = (WGLDrawMode);\n\n;// ./code/es-modules/Extensions/Boost/WGLShader.js\n/* *\n *\n * (c) 2019-2024 Highsoft AS\n *\n * Boost module: stripped-down renderer for higher performance\n *\n * License: highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { clamp, error, pick: WGLShader_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n * Constants\n *\n * */\nconst fragmentShader = [\n /* eslint-disable max-len, @typescript-eslint/indent */\n 'precision highp float;',\n 'uniform vec4 fillColor;',\n 'varying highp vec2 position;',\n 'varying highp vec4 vColor;',\n 'uniform sampler2D uSampler;',\n 'uniform bool isCircle;',\n 'uniform bool hasColor;',\n // 'vec4 toColor(float value, vec2 point) {',\n // 'return vec4(0.0, 0.0, 0.0, 0.0);',\n // '}',\n 'void main(void) {',\n 'vec4 col = fillColor;',\n 'vec4 tcol = texture2D(uSampler, gl_PointCoord.st);',\n 'if (hasColor) {',\n 'col = vColor;',\n '}',\n 'if (isCircle) {',\n 'col *= tcol;',\n 'if (tcol.r < 0.0) {',\n 'discard;',\n '} else {',\n 'gl_FragColor = col;',\n '}',\n '} else {',\n 'gl_FragColor = col;',\n '}',\n '}'\n /* eslint-enable max-len, @typescript-eslint/indent */\n].join('\\n');\nconst vertexShader = [\n /* eslint-disable max-len, @typescript-eslint/indent */\n '#version 100',\n '#define LN10 2.302585092994046',\n 'precision highp float;',\n 'attribute vec4 aVertexPosition;',\n 'attribute vec4 aColor;',\n 'varying highp vec2 position;',\n 'varying highp vec4 vColor;',\n 'uniform mat4 uPMatrix;',\n 'uniform float pSize;',\n 'uniform float translatedThreshold;',\n 'uniform bool hasThreshold;',\n 'uniform bool skipTranslation;',\n 'uniform float xAxisTrans;',\n 'uniform float xAxisMin;',\n 'uniform float xAxisMinPad;',\n 'uniform float xAxisPointRange;',\n 'uniform float xAxisLen;',\n 'uniform bool xAxisPostTranslate;',\n 'uniform float xAxisOrdinalSlope;',\n 'uniform float xAxisOrdinalOffset;',\n 'uniform float xAxisPos;',\n 'uniform bool xAxisCVSCoord;',\n 'uniform bool xAxisIsLog;',\n 'uniform bool xAxisReversed;',\n 'uniform float yAxisTrans;',\n 'uniform float yAxisMin;',\n 'uniform float yAxisMinPad;',\n 'uniform float yAxisPointRange;',\n 'uniform float yAxisLen;',\n 'uniform bool yAxisPostTranslate;',\n 'uniform float yAxisOrdinalSlope;',\n 'uniform float yAxisOrdinalOffset;',\n 'uniform float yAxisPos;',\n 'uniform bool yAxisCVSCoord;',\n 'uniform bool yAxisIsLog;',\n 'uniform bool yAxisReversed;',\n 'uniform bool isBubble;',\n 'uniform bool bubbleSizeByArea;',\n 'uniform float bubbleZMin;',\n 'uniform float bubbleZMax;',\n 'uniform float bubbleZThreshold;',\n 'uniform float bubbleMinSize;',\n 'uniform float bubbleMaxSize;',\n 'uniform bool bubbleSizeAbs;',\n 'uniform bool isInverted;',\n 'float bubbleRadius(){',\n 'float value = aVertexPosition.w;',\n 'float zMax = bubbleZMax;',\n 'float zMin = bubbleZMin;',\n 'float radius = 0.0;',\n 'float pos = 0.0;',\n 'float zRange = zMax - zMin;',\n 'if (bubbleSizeAbs){',\n 'value = value - bubbleZThreshold;',\n 'zMax = max(zMax - bubbleZThreshold, zMin - bubbleZThreshold);',\n 'zMin = 0.0;',\n '}',\n 'if (value < zMin){',\n 'radius = bubbleZMin / 2.0 - 1.0;',\n '} else {',\n 'pos = zRange > 0.0 ? (value - zMin) / zRange : 0.5;',\n 'if (bubbleSizeByArea && pos > 0.0){',\n 'pos = sqrt(pos);',\n '}',\n 'radius = ceil(bubbleMinSize + pos * (bubbleMaxSize - bubbleMinSize)) / 2.0;',\n '}',\n 'return radius * 2.0;',\n '}',\n 'float translate(float val,',\n 'float pointPlacement,',\n 'float localA,',\n 'float localMin,',\n 'float minPixelPadding,',\n 'float pointRange,',\n 'float len,',\n 'bool cvsCoord,',\n 'bool isLog,',\n 'bool reversed',\n '){',\n 'float sign = 1.0;',\n 'float cvsOffset = 0.0;',\n 'if (cvsCoord) {',\n 'sign *= -1.0;',\n 'cvsOffset = len;',\n '}',\n 'if (isLog) {',\n 'val = log(val) / LN10;',\n '}',\n 'if (reversed) {',\n 'sign *= -1.0;',\n 'cvsOffset -= sign * len;',\n '}',\n 'return sign * (val - localMin) * localA + cvsOffset + ',\n '(sign * minPixelPadding);', // ' + localA * pointPlacement * pointRange;',\n '}',\n 'float xToPixels(float value) {',\n 'if (skipTranslation){',\n 'return value;// + xAxisPos;',\n '}',\n 'return translate(value, 0.0, xAxisTrans, xAxisMin, xAxisMinPad, xAxisPointRange, xAxisLen, xAxisCVSCoord, xAxisIsLog, xAxisReversed);// + xAxisPos;',\n '}',\n 'float yToPixels(float value, float checkTreshold) {',\n 'float v;',\n 'if (skipTranslation){',\n 'v = value;// + yAxisPos;',\n '} else {',\n 'v = translate(value, 0.0, yAxisTrans, yAxisMin, yAxisMinPad, yAxisPointRange, yAxisLen, yAxisCVSCoord, yAxisIsLog, yAxisReversed);// + yAxisPos;',\n 'if (v > yAxisLen) {',\n 'v = yAxisLen;',\n '}',\n '}',\n 'if (checkTreshold > 0.0 && hasThreshold) {',\n 'v = min(v, translatedThreshold);',\n '}',\n 'return v;',\n '}',\n 'void main(void) {',\n 'if (isBubble){',\n 'gl_PointSize = bubbleRadius();',\n '} else {',\n 'gl_PointSize = pSize;',\n '}',\n // 'gl_PointSize = 10.0;',\n 'vColor = aColor;',\n 'if (skipTranslation && isInverted) {',\n // If we get translated values from JS, just swap them (x, y)\n 'gl_Position = uPMatrix * vec4(aVertexPosition.y + yAxisPos, aVertexPosition.x + xAxisPos, 0.0, 1.0);',\n '} else if (isInverted) {',\n // But when calculating pixel positions directly,\n // swap axes and values (x, y)\n 'gl_Position = uPMatrix * vec4(yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, xToPixels(aVertexPosition.x) + xAxisPos, 0.0, 1.0);',\n '} else {',\n 'gl_Position = uPMatrix * vec4(xToPixels(aVertexPosition.x) + xAxisPos, yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, 0.0, 1.0);',\n '}',\n // 'gl_Position = uPMatrix * vec4(aVertexPosition.x, aVertexPosition.y, 0.0, 1.0);',\n '}'\n /* eslint-enable max-len, @typescript-eslint/indent */\n].join('\\n');\n/* *\n *\n * Class\n *\n * */\n/* eslint-disable valid-jsdoc */\n/**\n * A static shader mimicing axis translation functions found in Core/Axis\n *\n * @private\n *\n * @param {WebGLContext} gl\n * the context in which the shader is active\n */\nclass WGLShader {\n /* *\n *\n * Constructor\n *\n * */\n constructor(gl) {\n // Error stack\n this.errors = [];\n this.uLocations = {};\n this.gl = gl;\n if (gl && !this.createShader()) {\n return void 0;\n }\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Bind the shader.\n * This makes the shader the active one until another one is bound,\n * or until 0 is bound.\n * @private\n */\n bind() {\n if (this.gl && this.shaderProgram) {\n this.gl.useProgram(this.shaderProgram);\n }\n }\n /**\n * Create the shader.\n * Loads the shader program statically defined above\n * @private\n */\n createShader() {\n const v = this.stringToProgram(vertexShader, 'vertex'), f = this.stringToProgram(fragmentShader, 'fragment'), uloc = (n) => (this.gl.getUniformLocation(this.shaderProgram, n));\n if (!v || !f) {\n this.shaderProgram = false;\n this.handleErrors();\n return false;\n }\n this.shaderProgram = this.gl.createProgram();\n this.gl.attachShader(this.shaderProgram, v);\n this.gl.attachShader(this.shaderProgram, f);\n this.gl.linkProgram(this.shaderProgram);\n if (!this.gl.getProgramParameter(this.shaderProgram, this.gl.LINK_STATUS)) {\n this.errors.push(this.gl.getProgramInfoLog(this.shaderProgram));\n this.handleErrors();\n this.shaderProgram = false;\n return false;\n }\n this.gl.useProgram(this.shaderProgram);\n this.gl.bindAttribLocation(this.shaderProgram, 0, 'aVertexPosition');\n this.pUniform = uloc('uPMatrix');\n this.psUniform = uloc('pSize');\n this.fcUniform = uloc('fillColor');\n this.isBubbleUniform = uloc('isBubble');\n this.bubbleSizeAbsUniform = uloc('bubbleSizeAbs');\n this.bubbleSizeAreaUniform = uloc('bubbleSizeByArea');\n this.uSamplerUniform = uloc('uSampler');\n this.skipTranslationUniform = uloc('skipTranslation');\n this.isCircleUniform = uloc('isCircle');\n this.isInverted = uloc('isInverted');\n return true;\n }\n /**\n * Handle errors accumulated in errors stack\n * @private\n */\n handleErrors() {\n if (this.errors.length) {\n error('[highcharts boost] shader error - ' +\n this.errors.join('\\n'));\n }\n }\n /**\n * String to shader program\n * @private\n * @param {string} str\n * Program source\n * @param {string} type\n * Program type: either `vertex` or `fragment`\n */\n stringToProgram(str, type) {\n const shader = this.gl.createShader(type === 'vertex' ? this.gl.VERTEX_SHADER : this.gl.FRAGMENT_SHADER);\n this.gl.shaderSource(shader, str);\n this.gl.compileShader(shader);\n if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) {\n this.errors.push('when compiling ' +\n type +\n ' shader:\\n' +\n this.gl.getShaderInfoLog(shader));\n return false;\n }\n return shader;\n }\n /**\n * Destroy the shader\n * @private\n */\n destroy() {\n if (this.gl && this.shaderProgram) {\n this.gl.deleteProgram(this.shaderProgram);\n this.shaderProgram = false;\n }\n }\n fillColorUniform() {\n return this.fcUniform;\n }\n /**\n * Get the shader program handle\n * @private\n * @return {WebGLProgram}\n * The handle for the program\n */\n getProgram() {\n return this.shaderProgram;\n }\n pointSizeUniform() {\n return this.psUniform;\n }\n perspectiveUniform() {\n return this.pUniform;\n }\n /**\n * Flush\n * @private\n */\n reset() {\n if (this.gl && this.shaderProgram) {\n this.gl.uniform1i(this.isBubbleUniform, 0);\n this.gl.uniform1i(this.isCircleUniform, 0);\n }\n }\n /**\n * Set bubble uniforms\n * @private\n * @param {Highcharts.Series} series\n * Series to use\n */\n setBubbleUniforms(series, zCalcMin, zCalcMax, pixelRatio = 1) {\n const seriesOptions = series.options;\n let zMin = Number.MAX_VALUE, zMax = -Number.MAX_VALUE;\n if (this.gl && this.shaderProgram && series.is('bubble')) {\n const pxSizes = series.getPxExtremes();\n zMin = WGLShader_pick(seriesOptions.zMin, clamp(zCalcMin, seriesOptions.displayNegative === false ?\n seriesOptions.zThreshold : -Number.MAX_VALUE, zMin));\n zMax = WGLShader_pick(seriesOptions.zMax, Math.max(zMax, zCalcMax));\n this.gl.uniform1i(this.isBubbleUniform, 1);\n this.gl.uniform1i(this.isCircleUniform, 1);\n this.gl.uniform1i(this.bubbleSizeAreaUniform, (series.options.sizeBy !== 'width'));\n this.gl.uniform1i(this.bubbleSizeAbsUniform, series.options\n .sizeByAbsoluteValue);\n this.setUniform('bubbleMinSize', pxSizes.minPxSize * pixelRatio);\n this.setUniform('bubbleMaxSize', pxSizes.maxPxSize * pixelRatio);\n this.setUniform('bubbleZMin', zMin);\n this.setUniform('bubbleZMax', zMax);\n this.setUniform('bubbleZThreshold', series.options.zThreshold);\n }\n }\n /**\n * Set the Color uniform.\n * @private\n * @param {Array<number>} color\n * Array with RGBA values.\n */\n setColor(color) {\n if (this.gl && this.shaderProgram) {\n this.gl.uniform4f(this.fcUniform, color[0] / 255.0, color[1] / 255.0, color[2] / 255.0, color[3]);\n }\n }\n /**\n * Enable/disable circle drawing\n * @private\n */\n setDrawAsCircle(flag) {\n if (this.gl && this.shaderProgram) {\n this.gl.uniform1i(this.isCircleUniform, flag ? 1 : 0);\n }\n }\n /**\n * Set if inversion state\n * @private\n * @param {number} flag\n * Inversion flag\n */\n setInverted(flag) {\n if (this.gl && this.shaderProgram) {\n this.gl.uniform1i(this.isInverted, flag);\n }\n }\n /**\n * Set the perspective matrix\n * @private\n * @param {Float32List} m\n * Matrix 4 x 4\n */\n setPMatrix(m) {\n if (this.gl && this.shaderProgram) {\n this.gl.uniformMatrix4fv(this.pUniform, false, m);\n }\n }\n /**\n * Set the point size.\n * @private\n * @param {number} p\n * Point size\n */\n setPointSize(p) {\n if (this.gl && this.shaderProgram) {\n this.gl.uniform1f(this.psUniform, p);\n }\n }\n /**\n * Set skip translation\n * @private\n */\n setSkipTranslation(flag) {\n if (this.gl && this.shaderProgram) {\n this.gl.uniform1i(this.skipTranslationUniform, flag === true ? 1 : 0);\n }\n }\n /**\n * Set the active texture\n * @private\n * @param {number} texture\n * Texture to activate\n */\n setTexture(texture) {\n if (this.gl && this.shaderProgram) {\n this.gl.uniform1i(this.uSamplerUniform, texture);\n }\n }\n /**\n * Set a uniform value.\n * This uses a hash map to cache uniform locations.\n * @private\n * @param {string} name\n * Name of the uniform to set.\n * @param {number} val\n * Value to set\n */\n setUniform(name, val) {\n if (this.gl && this.shaderProgram) {\n const u = this.uLocations[name] = (this.uLocations[name] ||\n this.gl.getUniformLocation(this.shaderProgram, name));\n this.gl.uniform1f(u, val);\n }\n }\n}\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ const Boost_WGLShader = (WGLShader);\n\n;// ./code/es-modules/Extensions/Boost/WGLVertexBuffer.js\n/* *\n *\n * (c) 2019-2024 Highsoft AS\n *\n * Boost module: stripped-down renderer for higher performance\n *\n * License: highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n/* *\n *\n * Class\n *\n * */\n/**\n * Vertex Buffer abstraction.\n * A vertex buffer is a set of vertices which are passed to the GPU\n * in a single call.\n *\n * @private\n * @class\n * @name WGLVertexBuffer\n *\n * @param {WebGLContext} gl\n * Context in which to create the buffer.\n * @param {WGLShader} shader\n * Shader to use.\n */\nclass WGLVertexBuffer {\n /* *\n *\n * Constructor\n *\n * */\n constructor(gl, shader, dataComponents\n /* , type */\n ) {\n /* *\n *\n * Properties\n *\n * */\n this.buffer = false;\n this.iterator = 0;\n this.preAllocated = false;\n this.vertAttribute = false;\n this.components = dataComponents || 2;\n this.dataComponents = dataComponents;\n this.gl = gl;\n this.shader = shader;\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Note about pre-allocated buffers:\n * - This is slower for charts with many series\n * @private\n */\n allocate(size) {\n this.iterator = -1;\n this.preAllocated = new Float32Array(size * 4);\n }\n /**\n * Bind the buffer\n * @private\n */\n bind() {\n if (!this.buffer) {\n return false;\n }\n /// gl.bindAttribLocation(shader.program(), 0, 'aVertexPosition');\n // gl.enableVertexAttribArray(vertAttribute);\n // gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n this.gl.vertexAttribPointer(this.vertAttribute, this.components, this.gl.FLOAT, false, 0, 0);\n /// gl.enableVertexAttribArray(vertAttribute);\n }\n /**\n * Build the buffer\n * @private\n * @param {Array<number>} dataIn\n * Zero padded array of indices\n * @param {string} attrib\n * Name of the Attribute to bind the buffer to\n * @param {number} dataComponents\n * Number of components per. indice\n */\n build(dataIn, attrib, dataComponents) {\n let farray;\n this.data = dataIn || [];\n if ((!this.data || this.data.length === 0) && !this.preAllocated) {\n /// console.error('trying to render empty vbuffer');\n this.destroy();\n return false;\n }\n this.components = dataComponents || this.components;\n if (this.buffer) {\n this.gl.deleteBuffer(this.buffer);\n }\n if (!this.preAllocated) {\n farray = new Float32Array(this.data);\n }\n this.buffer = this.gl.createBuffer();\n this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.buffer);\n this.gl.bufferData(this.gl.ARRAY_BUFFER, this.preAllocated || farray, this.gl.STATIC_DRAW);\n /// gl.bindAttribLocation(shader.program(), 0, 'aVertexPosition');\n this.vertAttribute = this.gl\n .getAttribLocation(this.shader.getProgram(), attrib);\n this.gl.enableVertexAttribArray(this.vertAttribute);\n // Trigger cleanup\n farray = false;\n return true;\n }\n /**\n * @private\n */\n destroy() {\n if (this.buffer) {\n this.gl.deleteBuffer(this.buffer);\n this.buffer = false;\n this.vertAttribute = false;\n }\n this.iterator = 0;\n this.components = this.dataComponents || 2;\n this.data = [];\n }\n /**\n * Adds data to the pre-allocated buffer.\n * @private\n * @param {number} x\n * X data\n * @param {number} y\n * Y data\n * @param {number} a\n * A data\n * @param {number} b\n * B data\n */\n push(x, y, a, b) {\n if (this.preAllocated) { // && iterator <= preAllocated.length - 4) {\n this.preAllocated[++this.iterator] = x;\n this.preAllocated[++this.iterator] = y;\n this.preAllocated[++this.iterator] = a;\n this.preAllocated[++this.iterator] = b;\n }\n }\n /**\n * Render the buffer\n *\n * @private\n * @param {number} from\n * Start indice.\n * @param {number} to\n * End indice.\n * @param {WGLDrawModeValue} drawMode\n * Draw mode.\n */\n render(from, to, drawMode) {\n const length = this.preAllocated ?\n this.preAllocated.length : this.data.length;\n if (!this.buffer) {\n return false;\n }\n if (!length) {\n return false;\n }\n if (!from || from > length || from < 0) {\n from = 0;\n }\n if (!to || to > length) {\n to = length;\n }\n if (from >= to) {\n return false;\n }\n drawMode = drawMode || 'POINTS';\n this.gl.drawArrays(this.gl[drawMode], from / this.components, (to - from) / this.components);\n return true;\n }\n}\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ const Boost_WGLVertexBuffer = (WGLVertexBuffer);\n\n;// ./code/es-modules/Extensions/Boost/WGLRenderer.js\n/* *\n *\n * (c) 2019-2024 Highsoft AS\n *\n * Boost module: stripped-down renderer for higher performance\n *\n * License: highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { parse: color } = (highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default());\n\nconst { doc, win } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { isNumber, isObject, merge, objectEach, pick: WGLRenderer_pick } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n\n\n/* *\n *\n * Constants\n *\n * */\n// Things to draw as \"rectangles\" (i.e lines)\nconst asBar = {\n 'column': true,\n 'columnrange': true,\n 'bar': true,\n 'area': true,\n 'areaspline': true,\n 'arearange': true\n};\nconst asCircle = {\n 'scatter': true,\n 'bubble': true\n};\nconst contexts = [\n 'webgl',\n 'experimental-webgl',\n 'moz-webgl',\n 'webkit-3d'\n];\n/* *\n *\n * Class\n *\n * */\n/* eslint-disable valid-jsdoc */\n/**\n * Main renderer. Used to render series.\n *\n * Notes to self:\n * - May be able to build a point map by rendering to a separate canvas and\n * encoding values in the color data.\n * - Need to figure out a way to transform the data quicker\n *\n * @private\n *\n * @param {Function} postRenderCallback\n */\nclass WGLRenderer {\n /* *\n *\n * Static Functions\n *\n * */\n /**\n * Returns an orthographic perspective matrix\n * @private\n * @param {number} width\n * the width of the viewport in pixels\n * @param {number} height\n * the height of the viewport in pixels\n */\n static orthoMatrix(width, height) {\n const near = 0, far = 1;\n return [\n 2 / width, 0, 0, 0,\n 0, -(2 / height), 0, 0,\n 0, 0, -2 / (far - near), 0,\n -1, 1, -(far + near) / (far - near), 1\n ];\n }\n /**\n * @private\n */\n static seriesPointCount(series) {\n let isStacked, xData, s;\n if (series.boosted) {\n isStacked = !!series.options.stacking;\n xData = ((series.getColumn('x').length ?\n series.getColumn('x') :\n void 0) ||\n series.options.xData ||\n series.getColumn('x', true));\n s = (isStacked ? series.data : (xData || series.options.data))\n .length;\n if (series.type === 'treemap') {\n s *= 12;\n }\n else if (series.type === 'heatmap') {\n s *= 6;\n }\n else if (asBar[series.type]) {\n s *= 2;\n }\n return s;\n }\n return 0;\n }\n /* *\n *\n * Constructor\n *\n * */\n constructor(postRenderCallback) {\n /**\n * The data to render - array of coordinates.\n * Repeating sequence of [x, y, checkThreshold, pointSize].\n */\n this.data = [];\n // Height of our viewport in pixels\n this.height = 0;\n // Is it inited?\n this.isInited = false;\n // The marker data\n this.markerData = [];\n // The series stack\n this.series = [];\n // Texture handles\n this.textureHandles = {};\n // Width of our viewport in pixels\n this.width = 0;\n this.postRenderCallback = postRenderCallback;\n this.settings = {\n pointSize: 1,\n lineWidth: 1,\n fillColor: '#AA00AA',\n useAlpha: true,\n usePreallocated: false,\n useGPUTranslations: false,\n debug: {\n timeRendering: false,\n timeSeriesProcessing: false,\n timeSetup: false,\n timeBufferCopy: false,\n timeKDTree: false,\n showSkipSummary: false\n }\n };\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * @private\n */\n getPixelRatio() {\n return this.settings.pixelRatio || win.devicePixelRatio || 1;\n }\n /**\n * @private\n */\n setOptions(options) {\n // The pixelRatio defaults to 1. This is an antipattern, we should\n // refactor the Boost options to include an object of default options as\n // base for the merge, like other components.\n if (!('pixelRatio' in options)) {\n options.pixelRatio = 1;\n }\n merge(true, this.settings, options);\n }\n /**\n * Allocate a float buffer to fit all series\n * @private\n */\n allocateBuffer(chart) {\n const vbuffer = this.vbuffer;\n let s = 0;\n if (!this.settings.usePreallocated) {\n return;\n }\n chart.series.forEach((series) => {\n if (series.boosted) {\n s += WGLRenderer.seriesPointCount(series);\n }\n });\n vbuffer && vbuffer.allocate(s);\n }\n /**\n * @private\n */\n allocateBufferForSingleSeries(series) {\n const vbuffer = this.vbuffer;\n let s = 0;\n if (!this.settings.usePreallocated) {\n return;\n }\n if (series.boosted) {\n s = WGLRenderer.seriesPointCount(series);\n }\n vbuffer && vbuffer.allocate(s);\n }\n /**\n * Clear the depth and color buffer\n * @private\n */\n clear() {\n const gl = this.gl;\n gl && gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);\n }\n /**\n * Push data for a single series\n * This calculates additional vertices and transforms the data to be\n * aligned correctly in memory\n * @private\n */\n pushSeriesData(series, inst) {\n const data = this.data, settings = this.settings, vbuffer = this.vbuffer, isRange = (series.pointArrayMap &&\n series.pointArrayMap.join(',') === 'low,high'), { chart, options, sorted, xAxis, yAxis } = series, isStacked = !!options.stacking, rawData = options.data, xExtremes = series.xAxis.getExtremes(), \n // Taking into account the offset of the min point #19497\n xMin = xExtremes.min - (series.xAxis.minPointOffset || 0), xMax = xExtremes.max + (series.xAxis.minPointOffset || 0), yExtremes = series.yAxis.getExtremes(), yMin = yExtremes.min - (series.yAxis.minPointOffset || 0), yMax = yExtremes.max + (series.yAxis.minPointOffset || 0), xData = (series.getColumn('x').length ? series.getColumn('x') : void 0) || options.xData || series.getColumn('x', true), yData = (series.getColumn('y').length ? series.getColumn('y') : void 0) || options.yData || series.getColumn('y', true), zData = (series.getColumn('z').length ? series.getColumn('z') : void 0) || options.zData || series.getColumn('z', true), useRaw = !xData || xData.length === 0, \n /// threshold = options.threshold,\n // yBottom = chart.yAxis[0].getThreshold(threshold),\n // hasThreshold = isNumber(threshold),\n // colorByPoint = series.options.colorByPoint,\n // This is required for color by point, so make sure this is\n // uncommented if enabling that\n // colorIndex = 0,\n // Required for color axis support\n // caxis,\n connectNulls = options.connectNulls, \n // For some reason eslint/TypeScript don't pick up that this is\n // actually used: --- bre1470: it is never read, just set\n // maxVal: (number|undefined), // eslint-disable-line no-unused-vars\n points = series.points || false, sdata = isStacked ? series.data : (xData || rawData), closestLeft = { x: Number.MAX_VALUE, y: 0 }, closestRight = { x: -Number.MAX_VALUE, y: 0 }, cullXThreshold = 1, cullYThreshold = 1, chartDestroyed = typeof chart.index === 'undefined', drawAsBar = asBar[series.type], zoneAxis = options.zoneAxis || 'y', zones = options.zones || false, threshold = options.threshold, pixelRatio = this.getPixelRatio();\n let plotWidth = series.chart.plotWidth, lastX = false, lastY = false, minVal, scolor, \n //\n skipped = 0, hadPoints = false, \n // The following are used in the builder while loop\n x, y, d, z, i = -1, px = false, nx = false, low, nextInside = false, prevInside = false, pcolor = false, isXInside = false, isYInside = true, firstPoint = true, zoneColors, zoneDefColor = false, gapSize = false, vlen = 0;\n if (options.boostData && options.boostData.length > 0) {\n return;\n }\n if (options.gapSize) {\n gapSize = options.gapUnit !== 'value' ?\n options.gapSize * series.closestPointRange :\n options.gapSize;\n }\n if (zones) {\n zoneColors = [];\n zones.forEach((zone, i) => {\n if (zone.color) {\n const zoneColor = color(zone.color).rgba;\n zoneColor[0] /= 255.0;\n zoneColor[1] /= 255.0;\n zoneColor[2] /= 255.0;\n zoneColors[i] = zoneColor;\n if (!zoneDefColor && typeof zone.value === 'undefined') {\n zoneDefColor = zoneColor;\n }\n }\n });\n if (!zoneDefColor) {\n const seriesColor = ((series.pointAttribs && series.pointAttribs().fill) ||\n series.color);\n zoneDefColor = color(seriesColor).rgba;\n zoneDefColor[0] /= 255.0;\n zoneDefColor[1] /= 255.0;\n zoneDefColor[2] /= 255.0;\n }\n }\n if (chart.inverted) {\n plotWidth = series.chart.plotHeight;\n }\n series.closestPointRangePx = Number.MAX_VALUE;\n /**\n * Push color to color buffer - need to do this per vertex.\n * @private\n */\n const pushColor = (color) => {\n if (color) {\n inst.colorData.push(color[0]);\n inst.colorData.push(color[1]);\n inst.colorData.push(color[2]);\n inst.colorData.push(color[3]);\n }\n };\n /**\n * Push a vertice to the data buffer.\n * @private\n */\n const vertice = (x, y, checkTreshold, pointSize = 1, color) => {\n pushColor(color);\n // Correct for pixel ratio\n if (pixelRatio !== 1 && (!settings.useGPUTranslations ||\n inst.skipTranslation)) {\n x *= pixelRatio;\n y *= pixelRatio;\n pointSize *= pixelRatio;\n }\n if (settings.usePreallocated && vbuffer) {\n vbuffer.push(x, y, checkTreshold ? 1 : 0, pointSize);\n vlen += 4;\n }\n else {\n data.push(x);\n data.push(y);\n data.push(checkTreshold ? pixelRatio : 0);\n data.push(pointSize);\n }\n };\n /**\n * @private\n */\n const closeSegment = () => {\n if (inst.segments.length) {\n inst.segments[inst.segments.length - 1].to = data.length || vlen;\n }\n };\n /**\n * Create a new segment for the current set.\n * @private\n */\n const beginSegment = () => {\n // Insert a segment on the series.\n // A segment is just a start indice.\n // When adding a segment, if one exists from before, it should\n // set the previous segment's end\n if (inst.segments.length &&\n inst.segments[inst.segments.length - 1].from === (data.length || vlen)) {\n return;\n }\n closeSegment();\n inst.segments.push({\n from: data.length || vlen\n });\n };\n /**\n * Push a rectangle to the data buffer.\n * @private\n */\n const pushRect = (x, y, w, h, color) => {\n pushColor(color);\n vertice(x + w, y);\n pushColor(color);\n vertice(x, y);\n pushColor(color);\n vertice(x, y + h);\n pushColor(color);\n vertice(x, y + h);\n pushColor(color);\n vertice(x + w, y + h);\n pushColor(color);\n vertice(x + w, y);\n };\n // Create the first segment\n beginSegment();\n // Special case for point shapes\n if (points && points.length > 0) {\n // If we're doing points, we assume that the points are already\n // translated, so we skip the shader translation.\n inst.skipTranslation = true;\n // Force triangle draw mode\n inst.drawMode = 'TRIANGLES';\n // We don't have a z component in the shader, so we need to sort.\n if (points[0].node && points[0].node.levelDynamic) {\n points.sort((a, b) => {\n if (a.node) {\n if (a.node.levelDynamic >\n b.node.levelDynamic) {\n return 1;\n }\n if (a.node.levelDynamic <\n b.node.levelDynamic) {\n return -1;\n }\n }\n return 0;\n });\n }\n points.forEach((point) => {\n const plotY = point.plotY;\n let swidth, pointAttr;\n if (typeof plotY !== 'undefined' &&\n !isNaN(plotY) &&\n point.y !== null &&\n point.shapeArgs) {\n let { x = 0, y = 0, width = 0, height = 0 } = point.shapeArgs;\n pointAttr = chart.styledMode ?\n point.series\n .colorAttribs(point) :\n pointAttr = point.series.pointAttribs(point);\n swidth = pointAttr['stroke-width'] || 0;\n // Handle point colors\n pcolor = color(pointAttr.fill).rgba;\n pcolor[0] /= 255.0;\n pcolor[1] /= 255.0;\n pcolor[2] /= 255.0;\n // So there are two ways of doing this. Either we can\n // create a rectangle of two triangles, or we can do a\n // point and use point size. Latter is faster, but\n // only supports squares. So we're doing triangles.\n // We could also use one color per. vertice to get\n // better color interpolation.\n // If there's stroking, we do an additional rect\n if (series.is('treemap')) {\n swidth = swidth || 1;\n scolor = color(pointAttr.stroke).rgba;\n scolor[0] /= 255.0;\n scolor[1] /= 255.0;\n scolor[2] /= 255.0;\n pushRect(x, y, width, height, scolor);\n swidth /= 2;\n }\n // } else {\n // swidth = 0;\n // }\n // Fixes issues with inverted heatmaps (see #6981). The root\n // cause is that the coordinate system is flipped. In other\n // words, instead of [0,0] being top-left, it's\n // bottom-right. This causes a vertical and horizontal flip\n // in the resulting image, making it rotated 180 degrees.\n if (series.is('heatmap') && chart.inverted) {\n x = xAxis.len - x;\n y = yAxis.len - y;\n width = -width;\n height = -height;\n }\n pushRect(x + swidth, y + swidth, width - (swidth * 2), height - (swidth * 2), pcolor);\n }\n });\n closeSegment();\n return;\n }\n // Extract color axis\n // (chart.axes || []).forEach((a): void => {\n // if (H.ColorAxis && a instanceof H.ColorAxis) {\n // caxis = a;\n // }\n // });\n while (i < sdata.length - 1) {\n d = sdata[++i];\n if (typeof d === 'undefined') {\n continue;\n }\n /// px = x = y = z = nx = low = false;\n // chartDestroyed = typeof chart.index === 'undefined';\n // nextInside = prevInside = pcolor = isXInside = isYInside = false;\n // drawAsBar = asBar[series.type];\n if (chartDestroyed) {\n break;\n }\n // Uncomment this to enable color by point.\n // This currently left disabled as the charts look really ugly\n // when enabled and there's a lot of points.\n // Leaving in for the future (tm).\n // if (colorByPoint) {\n // colorIndex = ++colorIndex %\n // series.chart.options.colors.length;\n // pcolor = toRGBAFast(series.chart.options.colors[colorIndex]);\n // pcolor[0] /= 255.0;\n // pcolor[1] /= 255.0;\n // pcolor[2] /= 255.0;\n // }\n // Handle the point.color option (#5999)\n const pointOptions = rawData && rawData[i];\n if (!useRaw && isObject(pointOptions, true)) {\n if (pointOptions.color) {\n pcolor = color(pointOptions.color).rgba;\n pcolor[0] /= 255.0;\n pcolor[1] /= 255.0;\n pcolor[2] /= 255.0;\n }\n }\n if (useRaw) {\n x = d[0];\n y = d[1];\n if (sdata[i + 1]) {\n nx = sdata[i + 1][0];\n }\n if (sdata[i - 1]) {\n px = sdata[i - 1][0];\n }\n if (d.length >= 3) {\n z = d[2];\n if (d[2] > inst.zMax) {\n inst.zMax = d[2];\n }\n if (d[2] < inst.zMin) {\n inst.zMin = d[2];\n }\n }\n }\n else {\n x = d;\n y = yData?.[i];\n if (sdata[i + 1]) {\n nx = sdata[i + 1];\n }\n if (sdata[i - 1]) {\n px = sdata[i - 1];\n }\n if (zData && zData.length) {\n z = zData[i];\n if (zData[i] > inst.zMax) {\n inst.zMax = zData[i];\n }\n if (zData[i] < inst.zMin) {\n inst.zMin = zData[i];\n }\n }\n }\n if (!connectNulls && (x === null || y === null)) {\n beginSegment();\n continue;\n }\n if (nx && nx >= xMin && nx <= xMax) {\n nextInside = true;\n }\n if (px && px >= xMin && px <= xMax) {\n prevInside = true;\n }\n if (isRange) {\n if (useRaw) {\n y = d.slice(1, 3);\n }\n low = series.getColumn('low', true)?.[i];\n y = series.getColumn('high', true)?.[i] || 0;\n }\n else if (isStacked) {\n x = d.x;\n y = d.stackY;\n low = y - d.y;\n }\n if (yMin !== null &&\n typeof yMin !== 'undefined' &&\n yMax !== null &&\n typeof yMax !== 'undefined') {\n isYInside = y >= yMin && y <= yMax;\n }\n // Do not render points outside the zoomed range (#19701)\n if (!sorted && !isYInside) {\n continue;\n }\n if (x > xMax && closestRight.x < xMax) {\n closestRight.x = x;\n closestRight.y = y;\n }\n if (x < xMin && closestLeft.x > xMin) {\n closestLeft.x = x;\n closestLeft.y = y;\n }\n if (y === null && connectNulls) {\n continue;\n }\n // Cull points outside the extremes\n if (y === null || (!isYInside && !nextInside && !prevInside)) {\n beginSegment();\n continue;\n }\n // The first point before and first after extremes should be\n // rendered (#9962, 19701)\n // Make sure series with a single point are rendered (#21897)\n if (sorted && ((nx >= xMin || x >= xMin) &&\n (px <= xMax || x <= xMax)) ||\n !sorted && ((x >= xMin) && (x <= xMax))) {\n isXInside = true;\n }\n if (!isXInside && !nextInside && !prevInside) {\n continue;\n }\n if (gapSize && x - px > gapSize) {\n beginSegment();\n }\n // Note: Boost requires that zones are sorted!\n if (zones) {\n let zoneColor;\n zones.some((// eslint-disable-line no-loop-func\n zone, i) => {\n const last = zones[i - 1];\n if (zoneAxis === 'x') {\n if (typeof zone.value !== 'undefined' &&\n x <= zone.value) {\n if (zoneColors[i] &&\n (!last || x >= last.value)) {\n zoneColor = zoneColors[i];\n }\n return true;\n }\n return false;\n }\n if (typeof zone.value !== 'undefined' && y <= zone.value) {\n if (zoneColors[i] &&\n (!last || y >= last.value)) {\n zoneColor = zoneColors[i];\n }\n return true;\n }\n return false;\n });\n pcolor = zoneColor || zoneDefColor || pcolor;\n }\n // Skip translations - temporary floating point fix\n if (!settings.useGPUTranslations) {\n inst.skipTranslation = true;\n x = xAxis.toPixels(x, true);\n y = yAxis.toPixels(y, true);\n // Make sure we're not drawing outside of the chart area.\n // See #6594. Update: this is no longer required as far as I\n // can tell. Leaving in for git blame in case there are edge\n // cases I've not found. Having this in breaks #10246.\n // if (y > plotHeight) {\n // y = plotHeight;\n // }\n if (x > plotWidth) {\n // If this is rendered as a point, just skip drawing it\n // entirely, as we're not dependant on lineTo'ing to it.\n // See #8197\n if (inst.drawMode === 'POINTS') {\n continue;\n }\n // Having this here will clamp markers and make the angle\n // of the last line wrong. See 9166.\n // x = plotWidth;\n }\n }\n // No markers on out of bounds things.\n // Out of bound things are shown if and only if the next\n // or previous point is inside the rect.\n if (inst.hasMarkers && isXInside) {\n /// x = Highcharts.correctFloat(\n // Math.min(Math.max(-1e5, xAxis.translate(\n // x,\n // 0,\n // 0,\n // 0,\n // 1,\n // 0.5,\n // false\n // )), 1e5)\n // );\n if (lastX !== false) {\n series.closestPointRangePx = Math.min(series.closestPointRangePx, Math.abs(x - lastX));\n }\n }\n // If the last _drawn_ point is closer to this point than the\n // threshold, skip it. Shaves off 20-100ms in processing.\n if (!settings.useGPUTranslations &&\n !settings.usePreallocated &&\n (lastX && Math.abs(x - lastX) < cullXThreshold) &&\n (lastY && Math.abs(y - lastY) < cullYThreshold)) {\n if (settings.debug.showSkipSummary) {\n ++skipped;\n }\n continue;\n }\n if (drawAsBar) {\n minVal = low || 0;\n if (low === false || typeof low === 'undefined') {\n if (y < 0) {\n minVal = y;\n }\n else {\n minVal = 0;\n }\n }\n if ((!isRange && !isStacked) ||\n yAxis.logarithmic // #16850\n ) {\n minVal = Math.max(threshold === null ? yMin : threshold, // #5268\n yMin); // #8731\n }\n if (!settings.useGPUTranslations) {\n minVal = yAxis.toPixels(minVal, true);\n }\n // Need to add an extra point here\n vertice(x, minVal, 0, 0, pcolor);\n }\n // Do step line if enabled.\n // Draws an additional point at the old Y at the new X.\n // See #6976.\n if (options.step && !firstPoint) {\n vertice(x, lastY, 0, 2, pcolor);\n }\n vertice(x, y, 0, series.type === 'bubble' ? (z || 1) : 2, pcolor);\n // Uncomment this to support color axis.\n // if (caxis) {\n // pcolor = color(caxis.toColor(y)).rgba;\n // inst.colorData.push(color[0] / 255.0);\n // inst.colorData.push(color[1] / 255.0);\n // inst.colorData.push(color[2] / 255.0);\n // inst.colorData.push(color[3]);\n // }\n lastX = x;\n lastY = y;\n hadPoints = true;\n firstPoint = false;\n }\n if (settings.debug.showSkipSummary) {\n console.log('skipped points:', skipped); // eslint-disable-line no-console\n }\n const pushSupplementPoint = (point, atStart) => {\n if (!settings.useGPUTranslations) {\n inst.skipTranslation = true;\n point.x = xAxis.toPixels(point.x, true);\n point.y = yAxis.toPixels(point.y, true);\n }\n // We should only do this for lines, and we should ignore markers\n // since there's no point here that would have a marker.\n if (atStart) {\n this.data = [point.x, point.y, 0, 2].concat(this.data);\n return;\n }\n vertice(point.x, point.y, 0, 2);\n };\n if (!hadPoints &&\n connectNulls !== false &&\n series.drawMode === 'line_strip') {\n if (closestLeft.x < Number.MAX_VALUE) {\n // We actually need to push this *before* the complete buffer.\n pushSupplementPoint(closestLeft, true);\n }\n if (closestRight.x > -Number.MAX_VALUE) {\n pushSupplementPoint(closestRight);\n }\n }\n closeSegment();\n }\n /**\n * Push a series to the renderer\n * If we render the series immediately, we don't have to loop later\n * @private\n * @param {Highchart.Series} s\n * The series to push.\n */\n pushSeries(s) {\n const markerData = this.markerData, series = this.series, settings = this.settings;\n if (series.length > 0) {\n if (series[series.length - 1].hasMarkers) {\n series[series.length - 1].markerTo = markerData.length;\n }\n }\n if (settings.debug.timeSeriesProcessing) {\n console.time('building ' + s.type + ' series'); // eslint-disable-line no-console\n }\n const obj = {\n segments: [],\n markerFrom: markerData.length,\n // Push RGBA values to this array to use per. point coloring.\n // It should be 0-padded, so each component should be pushed in\n // succession.\n colorData: [],\n series: s,\n zMin: Number.MAX_VALUE,\n zMax: -Number.MAX_VALUE,\n hasMarkers: s.options.marker ?\n s.options.marker.enabled !== false :\n false,\n showMarkers: true,\n drawMode: Boost_WGLDrawMode[s.type] || 'LINE_STRIP'\n };\n if (s.index >= series.length) {\n series.push(obj);\n }\n else {\n series[s.index] = obj;\n }\n // Add the series data to our buffer(s)\n this.pushSeriesData(s, obj);\n if (settings.debug.timeSeriesProcessing) {\n console.timeEnd('building ' + s.type + ' series'); // eslint-disable-line no-console\n }\n }\n /**\n * Flush the renderer.\n * This removes pushed series and vertices.\n * Should be called after clearing and before rendering\n * @private\n */\n flush() {\n const vbuffer = this.vbuffer;\n this.data = [];\n this.markerData = [];\n this.series = [];\n if (vbuffer) {\n vbuffer.destroy();\n }\n }\n /**\n * Pass x-axis to shader\n * @private\n * @param {Highcharts.Axis} axis\n * The x-axis.\n */\n setXAxis(axis) {\n const shader = this.shader;\n if (!shader) {\n return;\n }\n const pixelRatio = this.getPixelRatio();\n shader.setUniform('xAxisTrans', axis.transA * pixelRatio);\n shader.setUniform('xAxisMin', axis.min);\n shader.setUniform('xAxisMinPad', axis.minPixelPadding * pixelRatio);\n shader.setUniform('xAxisPointRange', axis.pointRange);\n shader.setUniform('xAxisLen', axis.len * pixelRatio);\n shader.setUniform('xAxisPos', axis.pos * pixelRatio);\n shader.setUniform('xAxisCVSCoord', (!axis.horiz));\n shader.setUniform('xAxisIsLog', (!!axis.logarithmic));\n shader.setUniform('xAxisReversed', (!!axis.reversed));\n }\n /**\n * Pass y-axis to shader\n * @private\n * @param {Highcharts.Axis} axis\n * The y-axis.\n */\n setYAxis(axis) {\n const shader = this.shader;\n if (!shader) {\n return;\n }\n const pixelRatio = this.getPixelRatio();\n shader.setUniform('yAxisTrans', axis.transA * pixelRatio);\n shader.setUniform('yAxisMin', axis.min);\n shader.setUniform('yAxisMinPad', axis.minPixelPadding * pixelRatio);\n shader.setUniform('yAxisPointRange', axis.pointRange);\n shader.setUniform('yAxisLen', axis.len * pixelRatio);\n shader.setUniform('yAxisPos', axis.pos * pixelRatio);\n shader.setUniform('yAxisCVSCoord', (!axis.horiz));\n shader.setUniform('yAxisIsLog', (!!axis.logarithmic));\n shader.setUniform('yAxisReversed', (!!axis.reversed));\n }\n /**\n * Set the translation threshold\n * @private\n * @param {boolean} has\n * Has threshold flag.\n * @param {numbe} translation\n * The threshold.\n */\n setThreshold(has, translation) {\n const shader = this.shader;\n if (!shader) {\n return;\n }\n shader.setUniform('hasThreshold', has);\n shader.setUniform('translatedThreshold', translation);\n }\n /**\n * Render the data\n * This renders all pushed series.\n * @private\n */\n renderChart(chart) {\n const gl = this.gl, settings = this.settings, shader = this.shader, vbuffer = this.vbuffer;\n const pixelRatio = this.getPixelRatio();\n if (chart) {\n this.width = chart.chartWidth * pixelRatio;\n this.height = chart.chartHeight * pixelRatio;\n }\n else {\n return false;\n }\n const height = this.height, width = this.width;\n if (!gl || !shader || !width || !height) {\n return false;\n }\n if (settings.debug.timeRendering) {\n console.time('gl rendering'); // eslint-disable-line no-console\n }\n gl.canvas.width = width;\n gl.canvas.height = height;\n shader.bind();\n gl.viewport(0, 0, width, height);\n shader.setPMatrix(WGLRenderer.orthoMatrix(width, height));\n if (settings.lineWidth > 1 && !(highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()).isMS) {\n gl.lineWidth(settings.lineWidth);\n }\n if (vbuffer) {\n vbuffer.build(this.data, 'aVertexPosition', 4);\n vbuffer.bind();\n }\n shader.setInverted(chart.inverted);\n // Render the series\n this.series.forEach((s, si) => {\n const options = s.series.options, shapeOptions = options.marker, lineWidth = (typeof options.lineWidth !== 'undefined' ?\n options.lineWidth :\n 1), threshold = options.threshold, hasThreshold = isNumber(threshold), yBottom = s.series.yAxis.getThreshold(threshold), translatedThreshold = yBottom, showMarkers = WGLRenderer_pick(options.marker ? options.marker.enabled : null, s.series.xAxis.isRadial ? true : null, s.series.closestPointRangePx >\n 2 * ((options.marker ?\n options.marker.radius :\n 10) || 10)), shapeTexture = this.textureHandles[(shapeOptions && shapeOptions.symbol) ||\n s.series.symbol] || this.textureHandles.circle;\n let sindex, cbuffer, fillColor, scolor = [];\n if (s.segments.length === 0 ||\n s.segments[0].from === s.segments[0].to) {\n return;\n }\n if (shapeTexture.isReady) {\n gl.bindTexture(gl.TEXTURE_2D, shapeTexture.handle);\n shader.setTexture(shapeTexture.handle);\n }\n if (chart.styledMode) {\n if (s.series.markerGroup === s.series.chart.boost?.markerGroup) {\n // Create a temporary markerGroup to get the fill color\n delete s.series.markerGroup;\n s.series.markerGroup = s.series.plotGroup('markerGroup', 'markers', 'visible', 1, chart.seriesGroup).addClass('highcharts-tracker');\n fillColor = s.series.markerGroup.getStyle('fill');\n s.series.markerGroup.destroy();\n s.series.markerGroup = s.series.chart.boost?.markerGroup;\n }\n else {\n fillColor = s.series.markerGroup?.getStyle('fill');\n }\n }\n else {\n fillColor =\n (s.drawMode === 'POINTS' && // #14260\n s.series.pointAttribs &&\n s.series.pointAttribs().fill) ||\n s.series.color;\n if (options.colorByPoint) {\n fillColor = s.series.chart.options.colors[si];\n }\n }\n if (s.series.fillOpacity && options.fillOpacity) {\n fillColor = new (highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default())(fillColor).setOpacity(WGLRenderer_pick(options.fillOpacity, 1.0)).get();\n }\n scolor = color(fillColor).rgba;\n if (!settings.useAlpha) {\n scolor[3] = 1.0;\n }\n // Blending\n if (options.boostBlending === 'add') {\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE);\n gl.blendEquation(gl.FUNC_ADD);\n }\n else if (options.boostBlending === 'mult' ||\n options.boostBlending === 'multiply') {\n gl.blendFunc(gl.DST_COLOR, gl.ZERO);\n }\n else if (options.boostBlending === 'darken') {\n gl.blendFunc(gl.ONE, gl.ONE);\n gl.blendEquation(gl.FUNC_MIN);\n }\n else {\n /// gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n // gl.blendEquation(gl.FUNC_ADD);\n gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n }\n shader.reset();\n // If there are entries in the colorData buffer, build and bind it.\n if (s.colorData.length > 0) {\n shader.setUniform('hasColor', 1);\n cbuffer = new Boost_WGLVertexBuffer(gl, shader);\n cbuffer.build(\n // The color array attribute for vertex is assigned from 0,\n // so it needs to be shifted to be applied to further\n // segments. #18858\n Array(s.segments[0].from).concat(s.colorData), 'aColor', 4);\n cbuffer.bind();\n }\n else {\n // Set the hasColor uniform to false (0) when the series\n // contains no colorData buffer points. #18858\n shader.setUniform('hasColor', 0);\n // #15869, a buffer with fewer points might already be bound by\n // a different series/chart causing out of range errors\n gl.disableVertexAttribArray(gl.getAttribLocation(shader.getProgram(), 'aColor'));\n }\n // Set series specific uniforms\n shader.setColor(scolor);\n this.setXAxis(s.series.xAxis);\n this.setYAxis(s.series.yAxis);\n this.setThreshold(hasThreshold, translatedThreshold);\n if (s.drawMode === 'POINTS') {\n shader.setPointSize(WGLRenderer_pick(options.marker && options.marker.radius, 0.5) * 2 * pixelRatio);\n }\n // If set to true, the toPixels translations in the shader\n // is skipped, i.e it's assumed that the value is a pixel coord.\n shader.setSkipTranslation(s.skipTranslation);\n if (s.series.type === 'bubble') {\n shader.setBubbleUniforms(s.series, s.zMin, s.zMax, pixelRatio);\n }\n shader.setDrawAsCircle(asCircle[s.series.type] || false);\n if (!vbuffer) {\n return;\n }\n // Do the actual rendering\n // If the line width is < 0, skip rendering of the lines. See #7833.\n if (lineWidth > 0 || s.drawMode !== 'LINE_STRIP') {\n for (sindex = 0; sindex < s.segments.length; sindex++) {\n vbuffer.render(s.segments[sindex].from, s.segments[sindex].to, s.drawMode);\n }\n }\n if (s.hasMarkers && showMarkers) {\n shader.setPointSize(WGLRenderer_pick(options.marker && options.marker.radius, 5) * 2 * pixelRatio);\n shader.setDrawAsCircle(true);\n for (sindex = 0; sindex < s.segments.length; sindex++) {\n vbuffer.render(s.segments[sindex].from, s.segments[sindex].to, 'POINTS');\n }\n }\n });\n if (settings.debug.timeRendering) {\n console.timeEnd('gl rendering'); // eslint-disable-line no-console\n }\n if (this.postRenderCallback) {\n this.postRenderCallback(this);\n }\n this.flush();\n }\n /**\n * Render the data when ready\n * @private\n */\n render(chart) {\n this.clear();\n if (chart.renderer.forExport) {\n return this.renderChart(chart);\n }\n if (this.isInited) {\n this.renderChart(chart);\n }\n else {\n setTimeout(() => {\n this.render(chart);\n }, 1);\n }\n }\n /**\n * Set the viewport size in pixels\n * Creates an orthographic perspective matrix and applies it.\n * @private\n */\n setSize(width, height) {\n const shader = this.shader;\n // Skip if there's no change, or if we have no valid shader\n if (!shader || (this.width === width && this.height === height)) {\n return;\n }\n this.width = width;\n this.height = height;\n shader.bind();\n shader.setPMatrix(WGLRenderer.orthoMatrix(width, height));\n }\n /**\n * Init OpenGL\n * @private\n */\n init(canvas, noFlush) {\n const settings = this.settings;\n this.isInited = false;\n if (!canvas) {\n return false;\n }\n if (settings.debug.timeSetup) {\n console.time('gl setup'); // eslint-disable-line no-console\n }\n for (let i = 0; i < contexts.length; ++i) {\n this.gl = canvas.getContext(contexts[i], {\n // /premultipliedAlpha: false\n });\n if (this.gl) {\n break;\n }\n }\n const gl = this.gl;\n if (gl) {\n if (!noFlush) {\n this.flush();\n }\n }\n else {\n return false;\n }\n gl.enable(gl.BLEND);\n /// gl.blendFunc(gl.SRC_ALPHA, gl.ONE);\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n gl.disable(gl.DEPTH_TEST);\n /// gl.depthMask(gl.FALSE);\n gl.depthFunc(gl.LESS);\n const shader = this.shader = new Boost_WGLShader(gl);\n if (!shader) {\n // We need to abort, there's no shader context\n return false;\n }\n this.vbuffer = new Boost_WGLVertexBuffer(gl, shader);\n const createTexture = (name, fn) => {\n const props = {\n isReady: false,\n texture: doc.createElement('canvas'),\n handle: gl.createTexture()\n }, ctx = props.texture.getContext('2d');\n this.textureHandles[name] = props;\n props.texture.width = 512;\n props.texture.height = 512;\n ctx.mozImageSmoothingEnabled = false;\n ctx.webkitImageSmoothingEnabled = false;\n ctx.msImageSmoothingEnabled = false;\n ctx.imageSmoothingEnabled = false;\n ctx.strokeStyle = 'rgba(255, 255, 255, 0)';\n ctx.fillStyle = '#FFF';\n fn(ctx);\n try {\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, props.handle);\n /// gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, props.texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n /// gl.generateMipmap(gl.TEXTURE_2D);\n gl.bindTexture(gl.TEXTURE_2D, null);\n props.isReady = true;\n }\n catch (e) {\n // Silent error\n }\n };\n // Circle shape\n createTexture('circle', (ctx) => {\n ctx.beginPath();\n ctx.arc(256, 256, 256, 0, 2 * Math.PI);\n ctx.stroke();\n ctx.fill();\n });\n // Square shape\n createTexture('square', (ctx) => {\n ctx.fillRect(0, 0, 512, 512);\n });\n // Diamond shape\n createTexture('diamond', (ctx) => {\n ctx.beginPath();\n ctx.moveTo(256, 0);\n ctx.lineTo(512, 256);\n ctx.lineTo(256, 512);\n ctx.lineTo(0, 256);\n ctx.lineTo(256, 0);\n ctx.fill();\n });\n // Triangle shape\n createTexture('triangle', (ctx) => {\n ctx.beginPath();\n ctx.moveTo(0, 512);\n ctx.lineTo(256, 0);\n ctx.lineTo(512, 512);\n ctx.lineTo(0, 512);\n ctx.fill();\n });\n // Triangle shape (rotated)\n createTexture('triangle-down', (ctx) => {\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(256, 512);\n ctx.lineTo(512, 0);\n ctx.lineTo(0, 0);\n ctx.fill();\n });\n this.isInited = true;\n if (settings.debug.timeSetup) {\n console.timeEnd('gl setup'); // eslint-disable-line no-console\n }\n return true;\n }\n /**\n * @private\n * @todo use it\n */\n destroy() {\n const gl = this.gl, shader = this.shader, vbuffer = this.vbuffer;\n this.flush();\n if (vbuffer) {\n vbuffer.destroy();\n }\n if (shader) {\n shader.destroy();\n }\n if (gl) {\n objectEach(this.textureHandles, (texture) => {\n if (texture.handle) {\n gl.deleteTexture(texture.handle);\n }\n });\n gl.canvas.width = 1;\n gl.canvas.height = 1;\n }\n }\n}\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ const Boost_WGLRenderer = (WGLRenderer);\n\n;// ./code/es-modules/Extensions/Boost/BoostSeries.js\n/* *\n *\n * (c) 2019-2024 Highsoft AS\n *\n * Boost module: stripped-down renderer for higher performance\n *\n * License: highcharts.com/license\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\n\n\nconst { getBoostClipRect: BoostSeries_getBoostClipRect, isChartSeriesBoosting: BoostSeries_isChartSeriesBoosting } = Boost_BoostChart;\n\nconst { getOptions } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { composed: BoostSeries_composed, doc: BoostSeries_doc, noop, win: BoostSeries_win } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: BoostSeries_addEvent, destroyObjectProperties, error: BoostSeries_error, extend, fireEvent, isArray, isNumber: BoostSeries_isNumber, pick: BoostSeries_pick, pushUnique: BoostSeries_pushUnique, wrap, defined } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\n/* *\n *\n * Constants\n *\n * */\nconst CHUNK_SIZE = 3000;\n/* *\n *\n * Variables\n *\n * */\nlet index, mainCanvas;\n/* *\n *\n * Functions\n *\n * */\n/**\n * @private\n */\nfunction allocateIfNotSeriesBoosting(renderer, series) {\n const boost = series.boost;\n if (renderer &&\n boost &&\n boost.target &&\n boost.canvas &&\n !BoostSeries_isChartSeriesBoosting(series.chart)) {\n renderer.allocateBufferForSingleSeries(series);\n }\n}\n/**\n * Return true if ths boost.enabled option is true\n *\n * @private\n * @param {Highcharts.Chart} chart\n * The chart\n * @return {boolean}\n * True, if boost is enabled.\n */\nfunction boostEnabled(chart) {\n return BoostSeries_pick((chart &&\n chart.options &&\n chart.options.boost &&\n chart.options.boost.enabled), true);\n}\n/**\n * @private\n */\nfunction BoostSeries_compose(SeriesClass, seriesTypes, wglMode) {\n if (BoostSeries_pushUnique(BoostSeries_composed, 'Boost.Series')) {\n const plotOptions = getOptions().plotOptions, seriesProto = SeriesClass.prototype;\n BoostSeries_addEvent(SeriesClass, 'destroy', onSeriesDestroy);\n BoostSeries_addEvent(SeriesClass, 'hide', onSeriesHide);\n if (wglMode) {\n seriesProto.renderCanvas = seriesRenderCanvas;\n }\n wrap(seriesProto, 'getExtremes', wrapSeriesGetExtremes);\n wrap(seriesProto, 'processData', wrapSeriesProcessData);\n wrap(seriesProto, 'searchPoint', wrapSeriesSearchPoint);\n [\n 'translate',\n 'generatePoints',\n 'drawTracker',\n 'drawPoints',\n 'render'\n ].forEach((method) => wrapSeriesFunctions(seriesProto, seriesTypes, method));\n // Set default options\n Boost_Boostables.forEach((type) => {\n const typePlotOptions = plotOptions[type];\n if (typePlotOptions) {\n typePlotOptions.boostThreshold = 5000;\n typePlotOptions.boostData = [];\n seriesTypes[type].prototype.fillOpacity = true;\n }\n });\n if (wglMode) {\n const { area: AreaSeries, areaspline: AreaSplineSeries, bubble: BubbleSeries, column: ColumnSeries, heatmap: HeatmapSeries, scatter: ScatterSeries, treemap: TreemapSeries } = seriesTypes;\n if (AreaSeries) {\n extend(AreaSeries.prototype, {\n fill: true,\n fillOpacity: true,\n sampling: true\n });\n }\n if (AreaSplineSeries) {\n extend(AreaSplineSeries.prototype, {\n fill: true,\n fillOpacity: true,\n sampling: true\n });\n }\n if (BubbleSeries) {\n const bubbleProto = BubbleSeries.prototype;\n // By default, the bubble series does not use the KD-tree, so\n // force it to.\n delete bubbleProto.buildKDTree;\n // SeriesTypes.bubble.prototype.directTouch = false;\n // Needed for markers to work correctly\n wrap(bubbleProto, 'markerAttribs', function (proceed) {\n if (this.boosted) {\n return false;\n }\n return proceed.apply(this, [].slice.call(arguments, 1));\n });\n }\n if (ColumnSeries) {\n extend(ColumnSeries.prototype, {\n fill: true,\n sampling: true\n });\n }\n if (ScatterSeries) {\n ScatterSeries.prototype.fill = true;\n }\n // We need to handle heatmaps separately, since we can't perform the\n // size/color calculations in the shader easily.\n // @todo This likely needs future optimization.\n [HeatmapSeries, TreemapSeries].forEach((SC) => {\n if (SC) {\n wrap(SC.prototype, 'drawPoints', wrapSeriesDrawPoints);\n }\n });\n }\n }\n return SeriesClass;\n}\n/**\n * Create a canvas + context and attach it to the target\n *\n * @private\n * @function createAndAttachRenderer\n *\n * @param {Highcharts.Chart} chart\n * the chart\n *\n * @param {Highcharts.Series} series\n * the series\n *\n * @return {Highcharts.BoostGLRenderer}\n * the canvas renderer\n */\nfunction createAndAttachRenderer(chart, series) {\n const ChartClass = chart.constructor, targetGroup = chart.seriesGroup || series.group, alpha = 1;\n let width = chart.chartWidth, height = chart.chartHeight, target = chart, foSupported = typeof SVGForeignObjectElement !== 'undefined', hasClickHandler = false;\n if (BoostSeries_isChartSeriesBoosting(chart)) {\n target = chart;\n }\n else {\n target = series;\n hasClickHandler = Boolean(series.options.events?.click ||\n series.options.point?.events?.click);\n }\n const boost = target.boost =\n target.boost ||\n {};\n // Support for foreignObject is flimsy as best.\n // IE does not support it, and Chrome has a bug which messes up\n // the canvas draw order.\n // As such, we force the Image fallback for now, but leaving the\n // actual Canvas path in-place in case this changes in the future.\n foSupported = false;\n if (!mainCanvas) {\n mainCanvas = BoostSeries_doc.createElement('canvas');\n }\n if (!boost.target) {\n boost.canvas = mainCanvas;\n // Fall back to image tag if foreignObject isn't supported,\n // or if we're exporting.\n if (chart.renderer.forExport || !foSupported) {\n target.renderTarget = boost.target = chart.renderer.image('', 0, 0, width, height)\n .addClass('highcharts-boost-canvas')\n .add(targetGroup);\n boost.clear = function () {\n boost.target.attr({\n // Insert a blank pixel (#17182)\n /* eslint-disable-next-line max-len*/\n href: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII='\n });\n };\n boost.copy = function () {\n boost.resize();\n boost.target.attr({\n href: boost.canvas.toDataURL('image/png')\n });\n };\n }\n else {\n boost.targetFo = chart.renderer\n .createElement('foreignObject')\n .add(targetGroup);\n target.renderTarget = boost.target =\n BoostSeries_doc.createElement('canvas');\n boost.targetCtx = boost.target.getContext('2d');\n boost.targetFo.element.appendChild(boost.target);\n boost.clear = function () {\n boost.target.width = boost.canvas.width;\n boost.target.height = boost.canvas.height;\n };\n boost.copy = function () {\n boost.target.width = boost.canvas.width;\n boost.target.height = boost.canvas.height;\n boost.targetCtx.drawImage(boost.canvas, 0, 0);\n };\n }\n boost.resize = function () {\n width = chart.chartWidth;\n height = chart.chartHeight;\n (boost.targetFo || boost.target)\n .attr({\n x: 0,\n y: 0,\n width,\n height\n })\n .css({\n pointerEvents: hasClickHandler ? void 0 : 'none',\n mixedBlendMode: 'normal',\n opacity: alpha\n })\n .addClass(hasClickHandler ? 'highcharts-tracker' : '');\n if (target instanceof ChartClass) {\n target.boost?.markerGroup?.translate(chart.plotLeft, chart.plotTop);\n }\n };\n boost.clipRect = chart.renderer.clipRect();\n (boost.targetFo || boost.target)\n .attr({\n // Set the z index of the boost target to that of the last\n // series using it. This logic is not perfect, as it will not\n // handle interleaved series with boost enabled or disabled. But\n // it will cover the most common use case of one or more\n // successive boosted or non-boosted series (#9819).\n zIndex: series.options.zIndex\n });\n if (target instanceof ChartClass) {\n target.boost.markerGroup = target.renderer\n .g()\n .add(targetGroup)\n .translate(series.xAxis.pos, series.yAxis.pos);\n }\n }\n boost.canvas.width = width;\n boost.canvas.height = height;\n if (boost.clipRect) {\n const box = BoostSeries_getBoostClipRect(chart, target), \n // When using panes, the image itself must be clipped. When not\n // using panes, it is better to clip the target group, because then\n // we preserve clipping on touch- and mousewheel zoom preview.\n clippedElement = (box.width === chart.clipBox.width &&\n box.height === chart.clipBox.height) ? targetGroup :\n (boost.targetFo || boost.target);\n boost.clipRect.attr(box);\n clippedElement?.clip(boost.clipRect);\n }\n boost.resize();\n boost.clear();\n if (!boost.wgl) {\n boost.wgl = new Boost_WGLRenderer((wgl) => {\n if (wgl.settings.debug.timeBufferCopy) {\n console.time('buffer copy'); // eslint-disable-line no-console\n }\n boost.copy();\n if (wgl.settings.debug.timeBufferCopy) {\n console.timeEnd('buffer copy'); // eslint-disable-line no-console\n }\n });\n if (!boost.wgl.init(boost.canvas)) {\n // The OGL renderer couldn't be inited. This likely means a shader\n // error as we wouldn't get to this point if there was no WebGL\n // support.\n BoostSeries_error('[highcharts boost] - unable to init WebGL renderer');\n }\n boost.wgl.setOptions(chart.options.boost || {});\n if (target instanceof ChartClass) {\n boost.wgl.allocateBuffer(chart);\n }\n }\n boost.wgl.setSize(width, height);\n return boost.wgl;\n}\n/**\n * If implemented in the core, parts of this can probably be\n * shared with other similar methods in Highcharts.\n * @private\n * @function Highcharts.Series#destroyGraphics\n */\nfunction destroyGraphics(series) {\n const points = series.points;\n if (points) {\n let point, i;\n for (i = 0; i < points.length; i = i + 1) {\n point = points[i];\n if (point && point.destroyElements) {\n point.destroyElements(); // #7557\n }\n }\n }\n ['graph', 'area', 'tracker'].forEach((prop) => {\n const seriesProp = series[prop];\n if (seriesProp) {\n series[prop] = seriesProp.destroy();\n }\n });\n for (const zone of series.zones) {\n destroyObjectProperties(zone, void 0, true);\n }\n}\n/**\n * An \"async\" foreach loop. Uses a setTimeout to keep the loop from blocking the\n * UI thread.\n *\n * @private\n * @param {Array<unknown>} arr\n * The array to loop through.\n * @param {Function} fn\n * The callback to call for each item.\n * @param {Function} finalFunc\n * The callback to call when done.\n * @param {number} [chunkSize]\n * The number of iterations per timeout.\n * @param {number} [i]\n * The current index.\n * @param {boolean} [noTimeout]\n * Set to true to skip timeouts.\n */\nfunction eachAsync(arr, fn, finalFunc, chunkSize, i, noTimeout) {\n i = i || 0;\n chunkSize = chunkSize || CHUNK_SIZE;\n const threshold = i + chunkSize;\n let proceed = true;\n while (proceed && i < threshold && i < arr.length) {\n proceed = fn(arr[i], i);\n ++i;\n }\n if (proceed) {\n if (i < arr.length) {\n if (noTimeout) {\n eachAsync(arr, fn, finalFunc, chunkSize, i, noTimeout);\n }\n else if (BoostSeries_win.requestAnimationFrame) {\n // If available, do requestAnimationFrame - shaves off a few ms\n BoostSeries_win.requestAnimationFrame(function () {\n eachAsync(arr, fn, finalFunc, chunkSize, i);\n });\n }\n else {\n setTimeout(eachAsync, 0, arr, fn, finalFunc, chunkSize, i);\n }\n }\n else if (finalFunc) {\n finalFunc();\n }\n }\n}\n/**\n * Enter boost mode and apply boost-specific properties.\n * @private\n * @function Highcharts.Series#enterBoost\n */\nfunction enterBoost(series) {\n series.boost = series.boost || {\n // Faster than a series bind:\n getPoint: ((bp) => getPoint(series, bp))\n };\n const alteredByBoost = series.boost.altered = [];\n // Save the original values, including whether it was an own\n // property or inherited from the prototype.\n ['allowDG', 'directTouch', 'stickyTracking'].forEach((prop) => {\n alteredByBoost.push({\n prop: prop,\n val: series[prop],\n own: Object.hasOwnProperty.call(series, prop)\n });\n });\n series.allowDG = false;\n series.directTouch = false;\n series.stickyTracking = true;\n // Prevent animation when zooming in on boosted series(#13421).\n series.finishedAnimating = true;\n // Hide series label if any\n if (series.labelBySeries) {\n series.labelBySeries = series.labelBySeries.destroy();\n }\n // Destroy existing points after zoom out\n if (series.is('scatter') &&\n !series.is('treemap') &&\n series.data.length) {\n for (const point of series.data) {\n point?.destroy?.();\n }\n series.data.length = 0;\n series.points.length = 0;\n delete series.processedData;\n }\n}\n/**\n * Exit from boost mode and restore non-boost properties.\n * @private\n * @function Highcharts.Series#exitBoost\n */\nfunction exitBoost(series) {\n const boost = series.boost, chart = series.chart, chartBoost = chart.boost;\n if (chartBoost?.markerGroup) {\n chartBoost.markerGroup.destroy();\n chartBoost.markerGroup = void 0;\n for (const s of chart.series) {\n s.markerGroup = void 0;\n s.markerGroup = s.plotGroup('markerGroup', 'markers', 'visible', 1, chart.seriesGroup).addClass('highcharts-tracker');\n }\n }\n // Reset instance properties and/or delete instance properties and go back\n // to prototype\n if (boost) {\n (boost.altered || []).forEach((setting) => {\n if (setting.own) {\n series[setting.prop] = setting.val;\n }\n else {\n // Revert to prototype\n delete series[setting.prop];\n }\n });\n // Clear previous run\n if (boost.clear) {\n boost.clear();\n }\n }\n // #21106, clean up boost clipping on the series groups.\n (chart.seriesGroup || series.group)?.clip();\n}\n/**\n * @private\n * @function Highcharts.Series#hasExtremes\n */\nfunction hasExtremes(series, checkX) {\n const options = series.options, dataLength = series.dataTable.modified.rowCount, xAxis = series.xAxis && series.xAxis.options, yAxis = series.yAxis && series.yAxis.options, colorAxis = series.colorAxis && series.colorAxis.options;\n return dataLength > (options.boostThreshold || Number.MAX_VALUE) &&\n // Defined yAxis extremes\n BoostSeries_isNumber(yAxis.min) &&\n BoostSeries_isNumber(yAxis.max) &&\n // Defined (and required) xAxis extremes\n (!checkX ||\n (BoostSeries_isNumber(xAxis.min) && BoostSeries_isNumber(xAxis.max))) &&\n // Defined (e.g. heatmap) colorAxis extremes\n (!colorAxis ||\n (BoostSeries_isNumber(colorAxis.min) && BoostSeries_isNumber(colorAxis.max)));\n}\n/**\n * Used multiple times. In processData first on this.options.data, the second\n * time it runs the check again after processedXData is built.\n * If the data is going to be grouped, the series shouldn't be boosted.\n * @private\n */\nconst getSeriesBoosting = (series, data) => {\n // Check if will be grouped.\n if (series.forceCrop) {\n return false;\n }\n return (BoostSeries_isChartSeriesBoosting(series.chart) ||\n ((data ? data.length : 0) >=\n (series.options.boostThreshold || Number.MAX_VALUE)));\n};\n/**\n * Extend series.destroy to also remove the fake k-d-tree points (#5137).\n * Normally this is handled by Series.destroy that calls Point.destroy,\n * but the fake search points are not registered like that.\n * @private\n */\nfunction onSeriesDestroy() {\n const series = this, chart = series.chart;\n if (chart.boost &&\n chart.boost.markerGroup === series.markerGroup) {\n series.markerGroup = null;\n }\n if (chart.hoverPoints) {\n chart.hoverPoints = chart.hoverPoints.filter(function (point) {\n return point.series === series;\n });\n }\n if (chart.hoverPoint && chart.hoverPoint.series === series) {\n chart.hoverPoint = null;\n }\n}\n/**\n * @private\n */\nfunction onSeriesHide() {\n const boost = this.boost;\n if (boost && boost.canvas && boost.target) {\n if (boost.wgl) {\n boost.wgl.clear();\n }\n if (boost.clear) {\n boost.clear();\n }\n }\n}\n/**\n * Performs the actual render if the renderer is\n * attached to the series.\n * @private\n */\nfunction renderIfNotSeriesBoosting(series) {\n const boost = series.boost;\n if (boost &&\n boost.canvas &&\n boost.target &&\n boost.wgl &&\n !BoostSeries_isChartSeriesBoosting(series.chart)) {\n boost.wgl.render(series.chart);\n }\n}\n/**\n * Return a full Point object based on the index.\n * The boost module uses stripped point objects for performance reasons.\n * @private\n * @param {object|Highcharts.Point} boostPoint\n * A stripped-down point object\n * @return {Highcharts.Point}\n * A Point object as per https://api.highcharts.com/highcharts#Point\n */\nfunction getPoint(series, boostPoint) {\n const seriesOptions = series.options, xAxis = series.xAxis, PointClass = series.pointClass;\n if (boostPoint instanceof PointClass) {\n return boostPoint;\n }\n const isScatter = series.is('scatter'), xData = ((isScatter && series.getColumn('x', true).length ?\n series.getColumn('x', true) :\n void 0) ||\n (series.getColumn('x').length ? series.getColumn('x') : void 0) ||\n seriesOptions.xData ||\n series.getColumn('x', true) ||\n false), yData = (series.getColumn('y', true) ||\n seriesOptions.yData ||\n false), point = new PointClass(series, (isScatter && xData && yData) ?\n [xData[boostPoint.i], yData[boostPoint.i]] :\n (isArray(series.options.data) ? series.options.data : [])[boostPoint.i], xData ? xData[boostPoint.i] : void 0);\n point.category = BoostSeries_pick(xAxis.categories ?\n xAxis.categories[point.x] :\n point.x, // @todo simplify\n point.x);\n point.key = point.name ?? point.category;\n point.dist = boostPoint.dist;\n point.distX = boostPoint.distX;\n point.plotX = boostPoint.plotX;\n point.plotY = boostPoint.plotY;\n point.index = boostPoint.i;\n point.percentage = boostPoint.percentage;\n point.isInside = series.isPointInside(point);\n return point;\n}\n/**\n * @private\n */\nfunction scatterProcessData(force) {\n const series = this, { options, xAxis, yAxis } = series;\n // Process only on changes\n if (!series.isDirty &&\n !xAxis.isDirty &&\n !yAxis.isDirty &&\n !force) {\n return false;\n }\n // Required to get tick-based zoom ranges that take options into account\n // like `minPadding`, `maxPadding`, `startOnTick`, `endOnTick`.\n series.yAxis.setTickInterval();\n const boostThreshold = options.boostThreshold || 0, cropThreshold = options.cropThreshold, xData = series.getColumn('x'), xExtremes = xAxis.getExtremes(), xMax = xExtremes.max ?? Number.MAX_VALUE, xMin = xExtremes.min ?? -Number.MAX_VALUE, yData = series.getColumn('y'), yExtremes = yAxis.getExtremes(), yMax = yExtremes.max ?? Number.MAX_VALUE, yMin = yExtremes.min ?? -Number.MAX_VALUE;\n // Skip processing in non-boost zoom\n if (!series.boosted &&\n xAxis.old &&\n yAxis.old &&\n xMin >= (xAxis.old.min ?? -Number.MAX_VALUE) &&\n xMax <= (xAxis.old.max ?? Number.MAX_VALUE) &&\n yMin >= (yAxis.old.min ?? -Number.MAX_VALUE) &&\n yMax <= (yAxis.old.max ?? Number.MAX_VALUE)) {\n series.dataTable.modified.setColumns({\n x: xData,\n y: yData\n });\n return true;\n }\n // Without thresholds just assign data\n const dataLength = series.dataTable.rowCount;\n if (!boostThreshold ||\n dataLength < boostThreshold ||\n (cropThreshold &&\n !series.forceCrop &&\n !series.getExtremesFromAll &&\n !options.getExtremesFromAll &&\n dataLength < cropThreshold)) {\n series.dataTable.modified.setColumns({\n x: xData,\n y: yData\n });\n return true;\n }\n // Filter unsorted scatter data for ranges\n const processedData = [], processedXData = [], processedYData = [], xRangeNeeded = !(BoostSeries_isNumber(xExtremes.max) || BoostSeries_isNumber(xExtremes.min)), yRangeNeeded = !(BoostSeries_isNumber(yExtremes.max) || BoostSeries_isNumber(yExtremes.min));\n let cropped = false, x, xDataMax = xData[0], xDataMin = xData[0], y, yDataMax = yData?.[0], yDataMin = yData?.[0];\n for (let i = 0, iEnd = xData.length; i < iEnd; ++i) {\n x = xData[i];\n y = yData?.[i];\n if (x >= xMin && x <= xMax &&\n y >= yMin && y <= yMax) {\n processedData.push({ x, y });\n processedXData.push(x);\n processedYData.push(y);\n if (xRangeNeeded) {\n xDataMax = Math.max(xDataMax, x);\n xDataMin = Math.min(xDataMin, x);\n }\n if (yRangeNeeded) {\n yDataMax = Math.max(yDataMax, y);\n yDataMin = Math.min(yDataMin, y);\n }\n }\n else {\n cropped = true;\n }\n }\n if (xRangeNeeded) {\n xAxis.dataMax = Math.max(xDataMax, xAxis.dataMax || 0);\n xAxis.dataMin = Math.min(xDataMin, xAxis.dataMin || 0);\n }\n if (yRangeNeeded) {\n yAxis.dataMax = Math.max(yDataMax, yAxis.dataMax || 0);\n yAxis.dataMin = Math.min(yDataMin, yAxis.dataMin || 0);\n }\n // Set properties as base processData\n series.cropped = cropped;\n series.cropStart = 0;\n // For boosted points rendering\n series.dataTable.modified.setColumns({\n x: processedXData,\n y: processedYData\n });\n if (!getSeriesBoosting(series, processedXData)) {\n series.processedData = processedData; // For un-boosted points rendering\n }\n return true;\n}\n/**\n * @private\n * @function Highcharts.Series#renderCanvas\n */\nfunction seriesRenderCanvas() {\n const options = this.options || {}, chart = this.chart, chartBoost = chart.boost, seriesBoost = this.boost, xAxis = this.xAxis, yAxis = this.yAxis, xData = options.xData || this.getColumn('x', true), yData = options.yData || this.getColumn('y', true), lowData = this.getColumn('low', true), highData = this.getColumn('high', true), rawData = this.processedData || options.data, xExtremes = xAxis.getExtremes(), \n // Taking into account the offset of the min point #19497\n xMin = xExtremes.min - (xAxis.minPointOffset || 0), xMax = xExtremes.max + (xAxis.minPointOffset || 0), yExtremes = yAxis.getExtremes(), yMin = yExtremes.min - (yAxis.minPointOffset || 0), yMax = yExtremes.max + (yAxis.minPointOffset || 0), pointTaken = {}, sampling = !!this.sampling, enableMouseTracking = options.enableMouseTracking, threshold = options.threshold, isRange = this.pointArrayMap &&\n this.pointArrayMap.join(',') === 'low,high', isStacked = !!options.stacking, cropStart = this.cropStart || 0, requireSorting = this.requireSorting, useRaw = !xData, compareX = options.findNearestPointBy === 'x', xDataFull = ((this.getColumn('x', true).length ?\n this.getColumn('x', true) :\n void 0) ||\n this.options.xData ||\n this.getColumn('x', true)), lineWidth = BoostSeries_pick(options.lineWidth, 1);\n let renderer = false, lastClientX, yBottom = yAxis.getThreshold(threshold), minVal, maxVal, minI, maxI;\n // When touch-zooming or mouse-panning, re-rendering the canvas would not\n // perform fast enough. Instead, let the axes redraw, but not the series.\n // The series is scale-translated in an event handler for an approximate\n // preview.\n if (xAxis.isPanning || yAxis.isPanning) {\n return;\n }\n // Get or create the renderer\n renderer = createAndAttachRenderer(chart, this);\n chart.boosted = true;\n if (!this.visible) {\n return;\n }\n // If we are zooming out from SVG mode, destroy the graphics\n if (this.points || this.graph) {\n destroyGraphics(this);\n }\n // If we're rendering per. series we should create the marker groups\n // as usual.\n if (!BoostSeries_isChartSeriesBoosting(chart)) {\n // If all series were boosting, but are not anymore\n // restore private markerGroup\n if (this.markerGroup === chartBoost?.markerGroup) {\n this.markerGroup = void 0;\n }\n this.markerGroup = this.plotGroup('markerGroup', 'markers', 'visible', 1, chart.seriesGroup).addClass('highcharts-tracker');\n }\n else {\n // If series has a private markerGroup, remove that\n // and use common markerGroup\n if (this.markerGroup &&\n this.markerGroup !== chartBoost?.markerGroup) {\n this.markerGroup.destroy();\n }\n // Use a single group for the markers\n this.markerGroup = chartBoost?.markerGroup;\n // When switching from chart boosting mode, destroy redundant\n // series boosting targets\n if (seriesBoost && seriesBoost.target) {\n this.renderTarget =\n seriesBoost.target =\n seriesBoost.target.destroy();\n }\n }\n const points = this.points = [], addKDPoint = (clientX, plotY, i, percentage) => {\n const x = xDataFull ? xDataFull[cropStart + i] : false, pushPoint = (plotX) => {\n if (chart.inverted) {\n plotX = xAxis.len - plotX;\n plotY = yAxis.len - plotY;\n }\n points.push({\n destroy: noop,\n x: x,\n clientX: plotX,\n plotX: plotX,\n plotY: plotY,\n i: cropStart + i,\n percentage: percentage\n });\n };\n // We need to do ceil on the clientX to make things\n // snap to pixel values. The renderer will frequently\n // draw stuff on \"sub-pixels\".\n clientX = Math.ceil(clientX);\n // Shaves off about 60ms compared to repeated concatenation\n index = compareX ? clientX : clientX + ',' + plotY;\n // The k-d tree requires series points.\n // Reduce the amount of points, since the time to build the\n // tree increases exponentially.\n if (enableMouseTracking) {\n if (!pointTaken[index]) {\n pointTaken[index] = true;\n pushPoint(clientX);\n }\n else if (x === xDataFull[xDataFull.length - 1]) {\n // If the last point is on the same pixel as the last\n // tracked point, swap them. (#18856)\n points.length--;\n pushPoint(clientX);\n }\n }\n };\n // Do not start building while drawing\n this.buildKDTree = noop;\n fireEvent(this, 'renderCanvas');\n if (this.is('line') &&\n lineWidth > 1 &&\n seriesBoost?.target &&\n chartBoost &&\n !chartBoost.lineWidthFilter) {\n chartBoost.lineWidthFilter = chart.renderer.definition({\n tagName: 'filter',\n children: [\n {\n tagName: 'feMorphology',\n attributes: {\n operator: 'dilate',\n radius: 0.25 * lineWidth\n }\n }\n ],\n attributes: { id: 'linewidth' }\n });\n seriesBoost.target.attr({\n filter: 'url(#linewidth)'\n });\n }\n if (renderer) {\n allocateIfNotSeriesBoosting(renderer, this);\n renderer.pushSeries(this);\n // Perform the actual renderer if we're on series level\n renderIfNotSeriesBoosting(this);\n }\n /**\n * This builds the KD-tree\n * @private\n */\n function processPoint(d, i) {\n const chartDestroyed = typeof chart.index === 'undefined';\n let x, y, clientX, plotY, percentage, low = false, isYInside = true;\n if (!defined(d)) {\n return true;\n }\n if (!chartDestroyed) {\n if (useRaw) {\n x = d[0];\n y = d[1];\n }\n else {\n x = d;\n y = yData?.[i];\n }\n // Resolve low and high for range series\n if (isRange) {\n if (useRaw) {\n y = d.slice(1, 3);\n }\n low = lowData[i];\n y = highData[i];\n }\n else if (isStacked) {\n x = d.x;\n y = d.stackY;\n low = y - d.y;\n percentage = d.percentage;\n }\n // Optimize for scatter zooming\n if (!requireSorting) {\n isYInside = (y || 0) >= yMin && y <= yMax;\n }\n if (y !== null && x >= xMin && x <= xMax && isYInside) {\n clientX = xAxis.toPixels(x, true);\n if (sampling) {\n if (typeof minI === 'undefined' ||\n clientX === lastClientX) {\n if (!isRange) {\n low = y;\n }\n if (typeof maxI === 'undefined' ||\n y > maxVal) {\n maxVal = y;\n maxI = i;\n }\n if (typeof minI === 'undefined' ||\n low < minVal) {\n minVal = low;\n minI = i;\n }\n }\n // Add points and reset\n if (!compareX || clientX !== lastClientX) {\n // `maxI` is number too:\n if (typeof minI !== 'undefined') {\n plotY =\n yAxis.toPixels(maxVal, true);\n yBottom =\n yAxis.toPixels(minVal, true);\n addKDPoint(clientX, plotY, maxI, percentage);\n if (yBottom !== plotY) {\n addKDPoint(clientX, yBottom, minI, percentage);\n }\n }\n minI = maxI = void 0;\n lastClientX = clientX;\n }\n }\n else {\n plotY = Math.ceil(yAxis.toPixels(y, true));\n addKDPoint(clientX, plotY, i, percentage);\n }\n }\n }\n return !chartDestroyed;\n }\n /**\n * @private\n */\n const boostOptions = renderer.settings, doneProcessing = () => {\n fireEvent(this, 'renderedCanvas');\n // Go back to prototype, ready to build\n delete this.buildKDTree;\n // Check that options exist, as async processing\n // could mean the series is removed at this point (#19895)\n if (this.options) {\n this.buildKDTree();\n }\n if (boostOptions.debug.timeKDTree) {\n console.timeEnd('kd tree building'); // eslint-disable-line no-console\n }\n };\n // Loop over the points to build the k-d tree - skip this if\n // exporting\n if (!chart.renderer.forExport) {\n if (boostOptions.debug.timeKDTree) {\n console.time('kd tree building'); // eslint-disable-line no-console\n }\n eachAsync(isStacked ?\n this.data.slice(cropStart) :\n (xData || rawData), processPoint, doneProcessing);\n }\n}\n/**\n * Used for treemap|heatmap.drawPoints\n * @private\n */\nfunction wrapSeriesDrawPoints(proceed) {\n let enabled = true;\n if (this.chart.options && this.chart.options.boost) {\n enabled = typeof this.chart.options.boost.enabled === 'undefined' ?\n true :\n this.chart.options.boost.enabled;\n }\n if (!enabled || !this.boosted) {\n return proceed.call(this);\n }\n this.chart.boosted = true;\n // Make sure we have a valid OGL context\n const renderer = createAndAttachRenderer(this.chart, this);\n if (renderer) {\n allocateIfNotSeriesBoosting(renderer, this);\n renderer.pushSeries(this);\n }\n renderIfNotSeriesBoosting(this);\n}\n/**\n * Override a bunch of methods the same way. If the number of points is\n * below the threshold, run the original method. If not, check for a\n * canvas version or do nothing.\n *\n * Note that we're not overriding any of these for heatmaps.\n */\nfunction wrapSeriesFunctions(seriesProto, seriesTypes, method) {\n /**\n * @private\n */\n function branch(proceed) {\n const letItPass = this.options.stacking &&\n (method === 'translate' || method === 'generatePoints');\n if (!this.boosted ||\n letItPass ||\n !boostEnabled(this.chart) ||\n this.type === 'heatmap' ||\n this.type === 'treemap' ||\n !Boost_BoostableMap[this.type] ||\n this.options.boostThreshold === 0) {\n proceed.call(this);\n // Run canvas version of method, like renderCanvas(), if it exists\n }\n else if (method === 'render' && this.renderCanvas) {\n this.renderCanvas();\n }\n }\n wrap(seriesProto, method, branch);\n // Special case for some types, when translate method is already wrapped\n if (method === 'translate') {\n for (const type of [\n 'column',\n 'arearange',\n 'columnrange',\n 'heatmap',\n 'treemap'\n ]) {\n if (seriesTypes[type]) {\n wrap(seriesTypes[type].prototype, method, branch);\n }\n }\n }\n}\n/**\n * Do not compute extremes when min and max are set. If we use this in the\n * core, we can add the hook to hasExtremes to the methods directly.\n * @private\n */\nfunction wrapSeriesGetExtremes(proceed) {\n if (this.boosted) {\n if (hasExtremes(this)) {\n return {};\n }\n if (this.xAxis.isPanning || this.yAxis.isPanning) {\n // Do not re-compute the extremes during panning, because looping\n // the data is expensive. The `this` contains the `dataMin` and\n // `dataMax` to use.\n return this;\n }\n }\n return proceed.apply(this, [].slice.call(arguments, 1));\n}\n/**\n * If the series is a heatmap or treemap, or if the series is not boosting\n * do the default behaviour. Otherwise, process if the series has no\n * extremes.\n * @private\n */\nfunction wrapSeriesProcessData(proceed) {\n let dataToMeasure = this.options.data;\n if (boostEnabled(this.chart) && Boost_BoostableMap[this.type]) {\n const series = this, \n // Flag for code that should run for ScatterSeries and its\n // subclasses, apart from the enlisted exceptions.\n isScatter = series.is('scatter') &&\n !series.is('bubble') &&\n !series.is('treemap') &&\n !series.is('heatmap');\n // If there are no extremes given in the options, we also need to\n // process the data to read the data extremes. If this is a heatmap,\n // do default behaviour.\n if (\n // First pass with options.data:\n !getSeriesBoosting(series, dataToMeasure) ||\n isScatter ||\n series.is('treemap') ||\n // Use processedYData for the stack (#7481):\n series.options.stacking ||\n !hasExtremes(series, true)) {\n // Do nothing until the panning stops\n if (series.boosted && (series.xAxis?.isPanning || series.yAxis?.isPanning)) {\n return;\n }\n // Extra check for zoomed scatter data\n if (isScatter && !series.yAxis.treeGrid) {\n scatterProcessData.call(series, arguments[1]);\n }\n else {\n proceed.apply(series, [].slice.call(arguments, 1));\n }\n dataToMeasure = series.getColumn('x', true);\n }\n // Set the isBoosting flag, second pass with processedXData to\n // see if we have zoomed.\n series.boosted = getSeriesBoosting(series, dataToMeasure);\n // Enter or exit boost mode\n if (series.boosted) {\n // Force turbo-mode:\n let firstPoint;\n if (series.options.data?.length) {\n firstPoint = series.getFirstValidPoint(series.options.data);\n if (!BoostSeries_isNumber(firstPoint) &&\n !isArray(firstPoint) &&\n !series.is('treemap')) {\n BoostSeries_error(12, false, series.chart);\n }\n }\n enterBoost(series);\n }\n else {\n exitBoost(series);\n }\n // The series type is not boostable\n }\n else {\n proceed.apply(this, [].slice.call(arguments, 1));\n }\n}\n/**\n * Return a point instance from the k-d-tree\n * @private\n */\nfunction wrapSeriesSearchPoint(proceed) {\n const result = proceed.apply(this, [].slice.call(arguments, 1));\n if (this.boost && result) {\n return this.boost.getPoint(result);\n }\n return result;\n}\n/* *\n *\n * Default Export\n *\n * */\nconst BoostSeries = {\n compose: BoostSeries_compose,\n destroyGraphics,\n eachAsync,\n getPoint\n};\n/* harmony default export */ const Boost_BoostSeries = (BoostSeries);\n\n;// ./code/es-modules/Extensions/BoostCanvas.js\n/* *\n *\n * License: www.highcharts.com/license\n * Author: Torstein Honsi, Christer Vasseng\n *\n * This module serves as a fallback for the Boost module in IE9 and IE10. Newer\n * browsers support WebGL which is faster.\n *\n * It is recommended to include this module in conditional comments targeting\n * IE9 and IE10.\n *\n * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!\n *\n * */\n\n\nconst { getBoostClipRect: BoostCanvas_getBoostClipRect, isChartSeriesBoosting: BoostCanvas_isChartSeriesBoosting } = Boost_BoostChart;\n\nconst { destroyGraphics: BoostCanvas_destroyGraphics } = Boost_BoostSeries;\n\nconst { parse: BoostCanvas_color } = (highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default());\n\nconst { doc: BoostCanvas_doc, noop: BoostCanvas_noop } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n\nconst { addEvent: BoostCanvas_addEvent, fireEvent: BoostCanvas_fireEvent, isNumber: BoostCanvas_isNumber, merge: BoostCanvas_merge, pick: BoostCanvas_pick, wrap: BoostCanvas_wrap } = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/* *\n *\n * Namespace\n *\n * */\nvar BoostCanvas;\n(function (BoostCanvas) {\n /* *\n *\n * Constants\n *\n * */\n // Use a blank pixel for clearing canvas (#17182)\n const b64BlankPixel = ('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAw' +\n 'CAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=');\n const CHUNK_SIZE = 50000;\n /* *\n *\n * Variables\n *\n * */\n let ChartConstructor;\n let destroyLoadingDiv;\n /* *\n *\n * Functions\n *\n * */\n /**\n * @private\n */\n function areaCvsDrawPoint(ctx, clientX, plotY, yBottom, lastPoint) {\n if (lastPoint && clientX !== lastPoint.clientX) {\n ctx.moveTo(lastPoint.clientX, lastPoint.yBottom);\n ctx.lineTo(lastPoint.clientX, lastPoint.plotY);\n ctx.lineTo(clientX, plotY);\n ctx.lineTo(clientX, yBottom);\n }\n }\n /**\n * @private\n */\n function bubbleCvsMarkerCircle(ctx, clientX, plotY, r, i) {\n ctx.moveTo(clientX, plotY);\n ctx.arc(clientX, plotY, this.radii && this.radii[i], 0, 2 * Math.PI, false);\n }\n /**\n * @private\n */\n function columnCvsDrawPoint(ctx, clientX, plotY, yBottom) {\n ctx.rect(clientX - 1, plotY, 1, yBottom - plotY);\n }\n /**\n * @private\n */\n function compose(ChartClass, SeriesClass, seriesTypes) {\n const seriesProto = SeriesClass.prototype;\n if (!seriesProto.renderCanvas) {\n const { area: AreaSeries, bubble: BubbleSeries, column: ColumnSeries, heatmap: HeatmapSeries, scatter: ScatterSeries } = seriesTypes;\n ChartConstructor = ChartClass;\n ChartClass.prototype.callbacks.push((chart) => {\n BoostCanvas_addEvent(chart, 'predraw', onChartClear);\n BoostCanvas_addEvent(chart, 'render', onChartCanvasToSVG);\n });\n seriesProto.canvasToSVG = seriesCanvasToSVG;\n seriesProto.cvsLineTo = seriesCvsLineTo;\n seriesProto.getContext = seriesGetContext;\n seriesProto.renderCanvas = seriesRenderCanvas;\n if (AreaSeries) {\n const areaProto = AreaSeries.prototype;\n areaProto.cvsDrawPoint = areaCvsDrawPoint;\n areaProto.fill = true;\n areaProto.fillOpacity = true;\n areaProto.sampling = true;\n }\n if (BubbleSeries) {\n const bubbleProto = BubbleSeries.prototype;\n bubbleProto.cvsMarkerCircle = bubbleCvsMarkerCircle;\n bubbleProto.cvsStrokeBatch = 1;\n }\n if (ColumnSeries) {\n const columnProto = ColumnSeries.prototype;\n columnProto.cvsDrawPoint = columnCvsDrawPoint;\n columnProto.fill = true;\n columnProto.sampling = true;\n }\n if (HeatmapSeries) {\n const heatmapProto = HeatmapSeries.prototype;\n BoostCanvas_wrap(heatmapProto, 'drawPoints', wrapHeatmapDrawPoints);\n }\n if (ScatterSeries) {\n const scatterProto = ScatterSeries.prototype;\n scatterProto.cvsMarkerCircle = scatterCvsMarkerCircle;\n scatterProto.cvsMarkerSquare = scatterCvsMarkerSquare;\n scatterProto.fill = true;\n }\n }\n }\n BoostCanvas.compose = compose;\n /**\n * @private\n */\n function onChartCanvasToSVG() {\n if (this.boost && this.boost.copy) {\n this.boost.copy();\n }\n }\n /**\n * @private\n */\n function onChartClear() {\n const boost = this.boost || {};\n if (boost.target) {\n boost.target.attr({ href: b64BlankPixel });\n }\n if (boost.canvas) {\n boost.canvas.getContext('2d').clearRect(0, 0, boost.canvas.width, boost.canvas.height);\n }\n }\n /**\n * Draw the canvas image inside an SVG image\n *\n * @private\n * @function Highcharts.Series#canvasToSVG\n */\n function seriesCanvasToSVG() {\n if (!BoostCanvas_isChartSeriesBoosting(this.chart)) {\n if (this.boost && this.boost.copy) {\n this.boost.copy();\n }\n else if (this.chart.boost && this.chart.boost.copy) {\n this.chart.boost.copy();\n }\n }\n else if (this.boost && this.boost.clear) {\n this.boost.clear();\n }\n }\n /**\n * @private\n */\n function seriesCvsLineTo(ctx, clientX, plotY) {\n ctx.lineTo(clientX, plotY);\n }\n /**\n * Create a hidden canvas to draw the graph on. The contents is later\n * copied over to an SVG image element.\n *\n * @private\n * @function Highcharts.Series#getContext\n */\n function seriesGetContext() {\n const chart = this.chart, target = BoostCanvas_isChartSeriesBoosting(chart) ? chart : this, targetGroup = (target === chart ?\n chart.seriesGroup :\n chart.seriesGroup || this.group), width = chart.chartWidth, height = chart.chartHeight, swapXY = function (proceed, x, y, a, b, c, d) {\n proceed.call(this, y, x, a, b, c, d);\n };\n let ctx;\n const boost = target.boost =\n target.boost ||\n {};\n ctx = boost.targetCtx;\n if (!boost.canvas) {\n boost.canvas = BoostCanvas_doc.createElement('canvas');\n boost.target = chart.renderer\n .image('', 0, 0, width, height)\n .addClass('highcharts-boost-canvas')\n .add(targetGroup);\n ctx = boost.targetCtx =\n boost.canvas.getContext('2d');\n if (chart.inverted) {\n ['moveTo', 'lineTo', 'rect', 'arc'].forEach((fn) => {\n BoostCanvas_wrap(ctx, fn, swapXY);\n });\n }\n boost.copy = function () {\n boost.target.attr({\n href: boost.canvas.toDataURL('image/png')\n });\n };\n boost.clear = function () {\n ctx.clearRect(0, 0, boost.canvas.width, boost.canvas.height);\n if (target === boost.target) {\n boost.target.attr({\n href: b64BlankPixel\n });\n }\n };\n boost.clipRect = chart.renderer.clipRect();\n boost.target.clip(boost.clipRect);\n }\n else if (!(target instanceof ChartConstructor)) {\n /// ctx.clearRect(0, 0, width, height);\n }\n if (boost.canvas.width !== width) {\n boost.canvas.width = width;\n }\n if (boost.canvas.height !== height) {\n boost.canvas.height = height;\n }\n boost.target.attr({\n x: 0,\n y: 0,\n width: width,\n height: height,\n style: 'pointer-events: none',\n href: b64BlankPixel\n });\n if (boost.clipRect) {\n boost.clipRect.attr(BoostCanvas_getBoostClipRect(chart, target));\n }\n return ctx;\n }\n /**\n * @private\n */\n function seriesRenderCanvas() {\n const series = this, options = series.options, chart = series.chart, xAxis = series.xAxis, yAxis = series.yAxis, activeBoostSettings = chart.options.boost || {}, boostSettings = {\n timeRendering: activeBoostSettings.timeRendering || false,\n timeSeriesProcessing: activeBoostSettings.timeSeriesProcessing || false,\n timeSetup: activeBoostSettings.timeSetup || false\n }, xData = series.getColumn('x', true), yData = series.getColumn('y', true), rawData = options.data, xExtremes = xAxis.getExtremes(), xMin = xExtremes.min, xMax = xExtremes.max, yExtremes = yAxis.getExtremes(), yMin = yExtremes.min, yMax = yExtremes.max, pointTaken = {}, sampling = !!series.sampling, r = options.marker && options.marker.radius, strokeBatch = series.cvsStrokeBatch || 1000, enableMouseTracking = options.enableMouseTracking, threshold = options.threshold, hasThreshold = BoostCanvas_isNumber(threshold), translatedThreshold = yAxis.getThreshold(threshold), doFill = series.fill, isRange = (series.pointArrayMap &&\n series.pointArrayMap.join(',') === 'low,high'), isStacked = !!options.stacking, cropStart = series.cropStart || 0, loadingOptions = chart.options.loading, requireSorting = series.requireSorting, connectNulls = options.connectNulls, useRaw = !xData, sdata = (isStacked ?\n series.data :\n (xData || rawData)), fillColor = (series.fillOpacity ?\n highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default().parse(series.color).setOpacity(BoostCanvas_pick(options.fillOpacity, 0.75)).get() :\n series.color), compareX = options.findNearestPointBy === 'x', boost = this.boost || {}, cvsDrawPoint = series.cvsDrawPoint, cvsLineTo = options.lineWidth ? series.cvsLineTo : void 0, cvsMarker = (r && r <= 1 ?\n series.cvsMarkerSquare :\n series.cvsMarkerCircle);\n if (boost.target) {\n boost.target.attr({ href: b64BlankPixel });\n }\n // If we are zooming out from SVG mode, destroy the graphics\n if (series.points || series.graph) {\n BoostCanvas_destroyGraphics(series);\n }\n // The group\n series.plotGroup('group', 'series', series.visible ? 'visible' : 'hidden', options.zIndex, chart.seriesGroup);\n series.markerGroup = series.group;\n BoostCanvas_addEvent(series, 'destroy', function () {\n // Prevent destroy twice\n series.markerGroup = null;\n });\n const points = this.points = [], ctx = this.getContext();\n series.buildKDTree = BoostCanvas_noop; // Do not start building while drawing\n if (boost.clear) {\n boost.clear();\n }\n // If (series.canvas) {\n // ctx.clearRect(\n // 0,\n // 0,\n // series.canvas.width,\n // series.canvas.height\n // );\n // }\n if (!series.visible) {\n return;\n }\n // Display a loading indicator\n if (rawData.length > 99999) {\n chart.options.loading = BoostCanvas_merge(loadingOptions, {\n labelStyle: {\n backgroundColor: BoostCanvas_color(\"#ffffff\" /* Palette.backgroundColor */).setOpacity(0.75).get(),\n padding: '1em',\n borderRadius: '0.5em'\n },\n style: {\n backgroundColor: 'none',\n opacity: 1\n }\n });\n highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default().clearTimeout(destroyLoadingDiv);\n chart.showLoading('Drawing...');\n chart.options.loading = loadingOptions; // Reset\n }\n if (boostSettings.timeRendering) {\n console.time('canvas rendering'); // eslint-disable-line no-console\n }\n // Loop variables\n let c = 0, lastClientX, lastPoint, yBottom = translatedThreshold, wasNull, minVal, maxVal, minI, maxI, index;\n // Loop helpers\n const stroke = function () {\n if (doFill) {\n ctx.fillStyle = fillColor;\n ctx.fill();\n }\n else {\n ctx.strokeStyle = series.color;\n ctx.lineWidth = options.lineWidth;\n ctx.stroke();\n }\n }, \n //\n drawPoint = function (clientX, plotY, yBottom, i) {\n if (c === 0) {\n ctx.beginPath();\n if (cvsLineTo) {\n ctx.lineJoin = 'round';\n }\n }\n if (chart.scroller &&\n series.options.className ===\n 'highcharts-navigator-series') {\n plotY += chart.scroller.top;\n if (yBottom) {\n yBottom += chart.scroller.top;\n }\n }\n else {\n plotY += chart.plotTop;\n }\n clientX += chart.plotLeft;\n if (wasNull) {\n ctx.moveTo(clientX, plotY);\n }\n else {\n if (cvsDrawPoint) {\n cvsDrawPoint(ctx, clientX, plotY, yBottom, lastPoint);\n }\n else if (cvsLineTo) {\n cvsLineTo(ctx, clientX, plotY);\n }\n else if (cvsMarker) {\n cvsMarker.call(series, ctx, clientX, plotY, r, i);\n }\n }\n // We need to stroke the line for every 1000 pixels. It will\n // crash the browser memory use if we stroke too\n // infrequently.\n c = c + 1;\n if (c === strokeBatch) {\n stroke();\n c = 0;\n }\n // Area charts need to keep track of the last point\n lastPoint = {\n clientX: clientX,\n plotY: plotY,\n yBottom: yBottom\n };\n }, xDataFull = ((this.getColumn('x').length ? this.getColumn('x') : void 0) ||\n this.options.xData ||\n (this.getColumn('x', true).length ?\n this.getColumn('x', true) :\n false)), \n //\n addKDPoint = function (clientX, plotY, i) {\n // Shaves off about 60ms compared to repeated concatenation\n index = compareX ? clientX : clientX + ',' + plotY;\n // The k-d tree requires series points.\n // Reduce the amount of points, since the time to build the\n // tree increases exponentially.\n if (enableMouseTracking && !pointTaken[index]) {\n pointTaken[index] = true;\n if (chart.inverted) {\n clientX = xAxis.len - clientX;\n plotY = yAxis.len - plotY;\n }\n points.push({\n x: xDataFull ?\n xDataFull[cropStart + i] :\n false,\n clientX: clientX,\n plotX: clientX,\n plotY: plotY,\n i: cropStart + i\n });\n }\n };\n // Loop over the points\n Boost_BoostSeries.eachAsync(sdata, (d, i) => {\n const chartDestroyed = typeof chart.index === 'undefined';\n let x, y, clientX, plotY, isNull, low, isNextInside = false, isPrevInside = false, nx = NaN, px = NaN, isYInside = true;\n if (!chartDestroyed) {\n if (useRaw) {\n x = d[0];\n y = d[1];\n if (sdata[i + 1]) {\n nx = sdata[i + 1][0];\n }\n if (sdata[i - 1]) {\n px = sdata[i - 1][0];\n }\n }\n else {\n x = d;\n y = yData[i];\n if (sdata[i + 1]) {\n nx = sdata[i + 1];\n }\n if (sdata[i - 1]) {\n px = sdata[i - 1];\n }\n }\n if (nx && nx >= xMin && nx <= xMax) {\n isNextInside = true;\n }\n if (px && px >= xMin && px <= xMax) {\n isPrevInside = true;\n }\n // Resolve low and high for range series\n if (isRange) {\n if (useRaw) {\n y = d.slice(1, 3);\n }\n low = y[0];\n y = y[1];\n }\n else if (isStacked) {\n x = d.x;\n y = d.stackY;\n low = y - d.y;\n }\n isNull = y === null;\n // Optimize for scatter zooming\n if (!requireSorting) {\n isYInside = y >= yMin && y <= yMax;\n }\n if (!isNull &&\n ((x >= xMin && x <= xMax && isYInside) ||\n (isNextInside || isPrevInside))) {\n clientX = Math.round(xAxis.toPixels(x, true));\n if (sampling) {\n if (typeof minI === 'undefined' ||\n clientX === lastClientX) {\n if (!isRange) {\n low = y;\n }\n if (typeof maxI === 'undefined' || y > maxVal) {\n maxVal = y;\n maxI = i;\n }\n if (typeof minI === 'undefined' ||\n low < minVal) {\n minVal = low;\n minI = i;\n }\n }\n // Add points and reset\n if (clientX !== lastClientX) {\n // `maxI` also a number:\n if (typeof minI !== 'undefined') {\n plotY = yAxis.toPixels(maxVal, true);\n yBottom = yAxis.toPixels(minVal, true);\n drawPoint(clientX, hasThreshold ?\n Math.min(plotY, translatedThreshold) : plotY, hasThreshold ?\n Math.max(yBottom, translatedThreshold) : yBottom, i);\n addKDPoint(clientX, plotY, maxI);\n if (yBottom !== plotY) {\n addKDPoint(clientX, yBottom, minI);\n }\n }\n minI = maxI = void 0;\n lastClientX = clientX;\n }\n }\n else {\n plotY = Math.round(yAxis.toPixels(y, true));\n drawPoint(clientX, plotY, yBottom, i);\n addKDPoint(clientX, plotY, i);\n }\n }\n wasNull = isNull && !connectNulls;\n if (i % CHUNK_SIZE === 0) {\n if (series.boost &&\n series.boost.copy) {\n series.boost.copy();\n }\n else if (series.chart.boost &&\n series.chart.boost.copy) {\n series.chart.boost.copy();\n }\n }\n }\n return !chartDestroyed;\n }, function () {\n const loadingDiv = chart.loadingDiv, loadingShown = chart.loadingShown;\n stroke();\n // If (series.boostCopy || series.chart.boostCopy) {\n // (series.boostCopy || series.chart.boostCopy)();\n // }\n series.canvasToSVG();\n if (boostSettings.timeRendering) {\n console.timeEnd('canvas rendering'); // eslint-disable-line no-console\n }\n BoostCanvas_fireEvent(series, 'renderedCanvas');\n // Do not use chart.hideLoading, as it runs JS animation and\n // will be blocked by buildKDTree. CSS animation looks good, but\n // then it must be deleted in timeout. If we add the module to\n // core, change hideLoading so we can skip this block.\n if (loadingShown) {\n loadingDiv.style.transition = 'opacity 250ms';\n loadingDiv.opacity = 0;\n chart.loadingShown = false;\n destroyLoadingDiv = setTimeout(function () {\n if (loadingDiv.parentNode) { // In exporting it is falsy\n loadingDiv.parentNode.removeChild(loadingDiv);\n }\n chart.loadingDiv = chart.loadingSpan = null;\n }, 250);\n }\n // Go back to prototype, ready to build\n delete series.buildKDTree;\n series.buildKDTree();\n // Don't do async on export, the exportChart, getSVGForExport and\n // getSVG methods are not chained for it.\n }, chart.renderer.forExport ? Number.MAX_VALUE : void 0);\n }\n /**\n * @private\n */\n function scatterCvsMarkerCircle(ctx, clientX, plotY, r) {\n ctx.moveTo(clientX, plotY);\n ctx.arc(clientX, plotY, r, 0, 2 * Math.PI, false);\n }\n /**\n * Rect is twice as fast as arc, should be used for small markers.\n * @private\n */\n function scatterCvsMarkerSquare(ctx, clientX, plotY, r) {\n ctx.rect(clientX - r, plotY - r, r * 2, r * 2);\n }\n /**\n * @private\n */\n function wrapHeatmapDrawPoints() {\n const chart = this.chart, ctx = this.getContext(), inverted = this.chart.inverted, xAxis = this.xAxis, yAxis = this.yAxis;\n if (ctx) {\n // Draw the columns\n this.points.forEach((point) => {\n const plotY = point.plotY;\n let pointAttr;\n if (typeof plotY !== 'undefined' &&\n !isNaN(plotY) &&\n point.y !== null &&\n ctx) {\n const { x = 0, y = 0, width = 0, height = 0 } = point.shapeArgs || {};\n if (!chart.styledMode) {\n pointAttr = point.series.pointAttribs(point);\n }\n else {\n pointAttr = point.series.colorAttribs(point);\n }\n ctx.fillStyle = pointAttr.fill;\n if (inverted) {\n ctx.fillRect(yAxis.len - y + xAxis.left, xAxis.len - x + yAxis.top, -height, -width);\n }\n else {\n ctx.fillRect(x + xAxis.left, y + yAxis.top, width, height);\n }\n }\n });\n this.canvasToSVG();\n }\n else {\n this.chart.showLoading('Your browser doesn\\'t support HTML5 canvas, <br>' +\n 'please use a modern browser');\n }\n }\n})(BoostCanvas || (BoostCanvas = {}));\n/* *\n *\n * Default Export\n *\n * */\n/* harmony default export */ const Extensions_BoostCanvas = (BoostCanvas);\n\n;// ./code/es-modules/masters/modules/boost-canvas.src.js\n\n\n\n\nconst G = (highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default());\n/**\n * Initialize the canvas boost.\n *\n * @function Highcharts.initCanvasBoost\n */\nG.initCanvasBoost = function () {\n Extensions_BoostCanvas.compose(G.Chart, G.Series, G.seriesTypes);\n};\n/* harmony default export */ const boost_canvas_src = ((highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default()));\n\n__webpack_exports__ = __webpack_exports__[\"default\"];\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});"],"names":["root","factory","exports","module","define","amd","amd1","window","__WEBPACK_EXTERNAL_MODULE__944__","__WEBPACK_EXTERNAL_MODULE__620__","index","mainCanvas","BoostCanvas","__webpack_modules__","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","__webpack_exports__","boost_canvas_src","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_","highcharts_commonjs_highcharts_commonjs2_highcharts_root_Highcharts_default","Boost_Boostables","BoostableMap","forEach","item","composed","addEvent","pick","pushUnique","isChartSeriesBoosting","chart","allSeries","series","boost","boostOptions","options","threshold","seriesThreshold","length","allowBoostForce","allowForce","axis","xAxis","min","Infinity","dataMin","max","dataMax","forceChartBoost","canBoostCount","needBoostCount","seriesOptions","boostThreshold","visible","type","Boost_BoostableMap","patientMax","args","r","Number","MAX_VALUE","t","getColumn","data","points","onChartCallback","canvasToSVG","wgl","render","boosted","axes","some","isPanning","clear","canvas","allocateBuffer","markerGroup","yAxis","translate","pos","order","prevX","prevY","pointer","e","hoverPoint","inverted","s","halo","hide","Boost_BoostChart","compose","ChartClass","wglMode","callbacks","push","getBoostClipRect","target","navigator","clipBox","x","plotLeft","y","plotTop","width","plotWidth","height","plotHeight","top","opposite","left","getClipBox","lateral","verticalAxes","Math","len","highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_","highcharts_Color_commonjs_highcharts_Color_commonjs2_highcharts_Color_root_Highcharts_Color_default","Boost_WGLDrawMode","clamp","error","WGLShader_pick","Boost_WGLShader","constructor","gl","errors","uLocations","createShader","bind","shaderProgram","useProgram","v","stringToProgram","f","uloc","getUniformLocation","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","bindAttribLocation","pUniform","psUniform","fcUniform","isBubbleUniform","bubbleSizeAbsUniform","bubbleSizeAreaUniform","uSamplerUniform","skipTranslationUniform","isCircleUniform","isInverted","getProgramInfoLog","handleErrors","join","str","shader","VERTEX_SHADER","FRAGMENT_SHADER","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","destroy","deleteProgram","fillColorUniform","getProgram","pointSizeUniform","perspectiveUniform","reset","uniform1i","setBubbleUniforms","zCalcMin","zCalcMax","pixelRatio","zMin","zMax","is","pxSizes","getPxExtremes","displayNegative","zThreshold","sizeBy","sizeByAbsoluteValue","setUniform","minPxSize","maxPxSize","setColor","color","uniform4f","setDrawAsCircle","flag","setInverted","setPMatrix","m","uniformMatrix4fv","setPointSize","p","uniform1f","setSkipTranslation","setTexture","texture","name","val","u","Boost_WGLVertexBuffer","dataComponents","buffer","iterator","preAllocated","vertAttribute","components","allocate","size","Float32Array","vertexAttribPointer","FLOAT","build","dataIn","attrib","farray","deleteBuffer","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","STATIC_DRAW","getAttribLocation","enableVertexAttribArray","b","from","to","drawMode","drawArrays","parse","doc","win","isNumber","isObject","merge","objectEach","WGLRenderer_pick","asBar","asCircle","contexts","WGLRenderer","orthoMatrix","seriesPointCount","isStacked","xData","stacking","postRenderCallback","isInited","markerData","textureHandles","settings","pointSize","lineWidth","fillColor","useAlpha","usePreallocated","useGPUTranslations","debug","timeRendering","timeSeriesProcessing","timeSetup","timeBufferCopy","timeKDTree","showSkipSummary","getPixelRatio","devicePixelRatio","setOptions","vbuffer","allocateBufferForSingleSeries","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","pushSeriesData","inst","isRange","pointArrayMap","sorted","rawData","xExtremes","getExtremes","xMin","minPointOffset","xMax","yExtremes","yMin","yMax","yData","zData","useRaw","connectNulls","sdata","closestLeft","closestRight","chartDestroyed","drawAsBar","zoneAxis","zones","lastX","lastY","minVal","scolor","skipped","hadPoints","z","i","px","nx","low","nextInside","prevInside","pcolor","isXInside","isYInside","firstPoint","zoneColors","zoneDefColor","gapSize","vlen","boostData","gapUnit","closestPointRange","zone","zoneColor","rgba","value","pointAttribs","fill","closestPointRangePx","pushColor","colorData","vertice","checkTreshold","skipTranslation","closeSegment","segments","beginSegment","pushRect","w","h","node","levelDynamic","sort","point","swidth","pointAttr","plotY","isNaN","shapeArgs","styledMode","colorAttribs","stroke","pointOptions","slice","stackY","last","toPixels","hasMarkers","abs","logarithmic","step","console","log","pushSupplementPoint","atStart","concat","pushSeries","markerTo","time","markerFrom","marker","enabled","showMarkers","timeEnd","flush","setXAxis","transA","minPixelPadding","pointRange","horiz","reversed","setYAxis","setThreshold","has","translation","renderChart","chartWidth","chartHeight","viewport","isMS","si","shapeOptions","hasThreshold","yBottom","getThreshold","isRadial","radius","shapeTexture","symbol","circle","sindex","cbuffer","isReady","bindTexture","TEXTURE_2D","handle","plotGroup","seriesGroup","addClass","getStyle","colorByPoint","colors","fillOpacity","setOpacity","boostBlending","blendFunc","SRC_ALPHA","ONE","blendEquation","FUNC_ADD","DST_COLOR","ZERO","FUNC_MIN","blendFuncSeparate","ONE_MINUS_SRC_ALPHA","Array","disableVertexAttribArray","renderer","forExport","setTimeout","setSize","init","noFlush","getContext","enable","BLEND","disable","DEPTH_TEST","depthFunc","LESS","createTexture","fn","props","createElement","ctx","mozImageSmoothingEnabled","webkitImageSmoothingEnabled","msImageSmoothingEnabled","imageSmoothingEnabled","strokeStyle","fillStyle","activeTexture","TEXTURE0","texImage2D","RGBA","UNSIGNED_BYTE","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MAG_FILTER","LINEAR","TEXTURE_MIN_FILTER","beginPath","arc","PI","fillRect","moveTo","lineTo","deleteTexture","BoostSeries_getBoostClipRect","BoostSeries_isChartSeriesBoosting","getOptions","BoostSeries_composed","BoostSeries_doc","noop","BoostSeries_win","BoostSeries_addEvent","destroyObjectProperties","BoostSeries_error","extend","fireEvent","isArray","BoostSeries_isNumber","BoostSeries_pick","BoostSeries_pushUnique","wrap","defined","allocateIfNotSeriesBoosting","boostEnabled","createAndAttachRenderer","targetGroup","group","foSupported","SVGForeignObjectElement","hasClickHandler","Boolean","events","click","renderTarget","image","add","attr","href","copy","resize","toDataURL","targetFo","targetCtx","element","appendChild","drawImage","css","pointerEvents","mixedBlendMode","opacity","clipRect","zIndex","g","box","clippedElement","clip","destroyGraphics","destroyElements","seriesProp","eachAsync","arr","finalFunc","chunkSize","noTimeout","proceed","requestAnimationFrame","hasExtremes","checkX","dataLength","dataTable","modified","rowCount","colorAxis","getSeriesBoosting","forceCrop","onSeriesDestroy","hoverPoints","filter","onSeriesHide","renderIfNotSeriesBoosting","getPoint","boostPoint","PointClass","pointClass","isScatter","category","categories","dist","distX","plotX","percentage","isInside","isPointInside","scatterProcessData","force","isDirty","setTickInterval","cropThreshold","old","setColumns","getExtremesFromAll","processedData","processedXData","processedYData","xRangeNeeded","yRangeNeeded","cropped","xDataMax","xDataMin","yDataMax","yDataMin","iEnd","cropStart","seriesRenderCanvas","chartBoost","seriesBoost","lowData","highData","pointTaken","sampling","enableMouseTracking","requireSorting","compareX","findNearestPointBy","xDataFull","lastClientX","maxVal","minI","maxI","graph","addKDPoint","clientX","pushPoint","ceil","buildKDTree","lineWidthFilter","tagName","children","attributes","operator","id","wrapSeriesDrawPoints","wrapSeriesGetExtremes","apply","arguments","wrapSeriesProcessData","dataToMeasure","treeGrid","getFirstValidPoint","enterBoost","bp","alteredByBoost","altered","own","allowDG","directTouch","stickyTracking","finishedAnimating","labelBySeries","exitBoost","setting","wrapSeriesSearchPoint","result","Boost_BoostSeries","SeriesClass","seriesTypes","plotOptions","seriesProto","renderCanvas","method","wrapSeriesFunctions","branch","letItPass","typePlotOptions","area","AreaSeries","areaspline","AreaSplineSeries","bubble","BubbleSeries","column","ColumnSeries","heatmap","HeatmapSeries","scatter","ScatterSeries","treemap","TreemapSeries","bubbleProto","SC","BoostCanvas_getBoostClipRect","BoostCanvas_isChartSeriesBoosting","BoostCanvas_destroyGraphics","BoostCanvas_color","BoostCanvas_doc","BoostCanvas_noop","BoostCanvas_addEvent","BoostCanvas_fireEvent","BoostCanvas_isNumber","BoostCanvas_merge","BoostCanvas_pick","BoostCanvas_wrap","destroyLoadingDiv","b64BlankPixel","areaCvsDrawPoint","lastPoint","bubbleCvsMarkerCircle","radii","columnCvsDrawPoint","rect","onChartCanvasToSVG","onChartClear","clearRect","seriesCanvasToSVG","seriesCvsLineTo","seriesGetContext","swapXY","c","style","activeBoostSettings","boostSettings","strokeBatch","cvsStrokeBatch","translatedThreshold","doFill","loadingOptions","loading","cvsDrawPoint","cvsLineTo","cvsMarker","cvsMarkerSquare","cvsMarkerCircle","labelStyle","backgroundColor","padding","borderRadius","clearTimeout","showLoading","wasNull","drawPoint","lineJoin","scroller","className","isNull","isNextInside","isPrevInside","NaN","round","loadingDiv","loadingShown","transition","parentNode","removeChild","loadingSpan","scatterCvsMarkerCircle","scatterCvsMarkerSquare","wrapHeatmapDrawPoints","areaProto","columnProto","scatterProto","Extensions_BoostCanvas","G","initCanvasBoost","Chart","Series"],"mappings":"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"}
Hacked By AnonymousFox1.0, Coded By AnonymousFox