UNPKG

highcharts

Version:
13 lines 50.7 kB
!/** * Highcharts JS v12.6.0 (2026-04-13) * @module highcharts/modules/boost-canvas * @requires highcharts * * Boost module * * (c) 2010-2026 Highsoft AS * Author: Torstein Hønsi * * A commercial license may be required depending on use. * See www.highcharts.com/license */function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(t._Highcharts,t._Highcharts.Color):"function"==typeof define&&define.amd?define("highcharts/modules/boost-canvas",["highcharts/highcharts"],function(t){return e(t,t.Color)}):"object"==typeof exports?exports["highcharts/modules/boost-canvas"]=e(t._Highcharts,t._Highcharts.Color):t.Highcharts=e(t.Highcharts,t.Highcharts.Color)}("u"<typeof window?this:window,(t,e)=>(()=>{"use strict";let i,r;var s,o={620:t=>{t.exports=e},944:e=>{e.exports=t}},n={};function a(t){var e=n[t];if(void 0!==e)return e.exports;var i=n[t]={exports:{}};return o[t](i,i.exports,a),i.exports}a.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return a.d(e,{a:e}),e},a.d=(t,e)=>{for(var i in e)a.o(e,i)&&!a.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var l={};a.d(l,{default:()=>tM});var h=a(944),c=a.n(h);let u=["area","areaspline","arearange","column","columnrange","bar","line","scatter","heatmap","bubble","treemap"],d={};u.forEach(t=>{d[t]=!0});let{doc:g,win:f}=c();function p(t,e,i,r={}){let s="function"==typeof t&&t.prototype||t;Object.hasOwnProperty.call(s,"hcEvents")||(s.hcEvents={});let o=s.hcEvents;c().Point&&t instanceof c().Point&&t.series&&t.series.chart&&(t.series.chart.runTrackerClick=!0);let n=t.addEventListener;n&&n.call(t,e,i,!!c().supportsPassiveEvents&&{passive:void 0===r.passive?-1!==e.indexOf("touch"):r.passive,capture:!1}),o[e]||(o[e]=[]);let a={fn:i,order:"number"==typeof r.order?r.order:1/0};return o[e].push(a),o[e].sort((t,e)=>t.order-e.order),function(){!function(t,e,i){function r(e,i){let r=t.removeEventListener;r&&r.call(t,e,i,!1)}function s(i){let s,o;t.nodeName&&(e?(s={})[e]=!0:s=i,T(s,function(t,e){if(i[e])for(o=i[e].length;o--;)r(e,i[e][o].fn)}))}let o="function"==typeof t&&t.prototype||t;if(Object.hasOwnProperty.call(o,"hcEvents")){let t=o.hcEvents;if(e){let o=t[e]||[];i?(t[e]=o.filter(function(t){return i!==t.fn}),r(e,i)):(s(t),t[e]=[])}else s(t),delete o.hcEvents}}(t,e,i)}}function m(t,e){let i;for(i in t||(t={}),e)t[i]=e[i];return t}function b(t,e,i,r){if(i=i||{},g?.createEvent&&(t.dispatchEvent||t.fireEvent&&t!==c())){let r=g.createEvent("Events");r.initEvent(e,!0,!0),i=m(r,i),t.dispatchEvent?t.dispatchEvent(i):t.fireEvent(e,i)}else if(t.hcEvents){i.target||m(i,{preventDefault:function(){i.defaultPrevented=!0},target:t,type:e});let r=[],s=t,o=!1;for(;s.hcEvents;)Object.hasOwnProperty.call(s,"hcEvents")&&s.hcEvents[e]&&(r.length&&(o=!0),r.unshift.apply(r,s.hcEvents[e])),s=Object.getPrototypeOf(s);o&&r.sort((t,e)=>t.order-e.order),r.forEach(e=>{!1===e.fn.call(t,i,t)&&i.preventDefault()})}r&&!i.defaultPrevented&&r.call(t,i)}function x(t){return v(t)&&"number"==typeof t.nodeType}function A(t){return"number"==typeof t&&!isNaN(t)&&t<1/0&&t>-1/0}function y(t){let e=Object.prototype.toString.call(t);return"[object Array]"===e||"[object Array Iterator]"===e}function v(t,e){return!!t&&"object"==typeof t&&(!e||!y(t))}function P(t,...e){let i,r=[t,...e],s={},o=function(t,e){return"object"!=typeof t&&(t={}),T(e,function(i,r){if("__proto__"!==r&&"constructor"!==r){let s;!v(i,!0)||(s=i?.constructor,v(i,!0)&&!x(i)&&s?.name&&"Object"!==s.name)||x(i)?t[r]=e[r]:t[r]=o(t[r]||{},i)}}),t};!0===t&&(s=r[1],r=Array.prototype.slice.call(r,2));let n=r.length;for(i=0;i<n;i++)s=o(s,r[i]);return s}function T(t,e,i){for(let r in t)Object.hasOwnProperty.call(t,r)&&e.call(i||t[r],t[r],r,t)}function C(){let t=arguments,e=t.length;for(let i=0;i<e;i++){let e=t[i];if(null!=e)return e}}function E(t,e){return 0>t.indexOf(e)&&!!t.push(e)}function M(t,e,i){let r=t[e];t[e]=function(){let t=arguments,e=this;return i.apply(this,[function(){return r.apply(e,arguments.length?arguments:t)}].concat([].slice.call(arguments)))}}Array.prototype.find;let{composed:S}=c();function k(t){let e=t.series,i=t.boost=t.boost||{},r=t.options.boost||{},s=C(r.seriesThreshold,50);if(e.length>=s)return!0;if(1===e.length)return!1;let o=r.allowForce;if(void 0===o){for(let e of(o=!0,t.xAxis))if(C(e.min,-1/0)>C(e.dataMin,-1/0)||C(e.max,1/0)<C(e.dataMax,1/0)){o=!1;break}}if(void 0!==i.forceChartBoost){if(o)return i.forceChartBoost;i.forceChartBoost=void 0}let n=0,a=0,l;for(let t of e)0!==(l=t.options).boostThreshold&&!1!==t.visible&&"heatmap"!==t.type&&(d[t.type]&&++n,function(...t){let e=-Number.MAX_VALUE;return t.forEach(t=>{if(null!=t&&void 0!==t.length&&t.length>0)return e=t.length,!0}),e}(t.getColumn("x",!0),l.data,t.points)>=(l.boostThreshold||Number.MAX_VALUE)&&++a);return i.forceChartBoost=o&&(n===e.length&&a===n||a>5),i.forceChartBoost}function w(t){function e(){t.boost&&t.boost.wgl&&k(t)&&t.boost.wgl.render(t)}p(t,"predraw",function(){t.boost=t.boost||{},t.boost.forceChartBoost=void 0,t.boosted=!1,t.axes.some(t=>t.isPanning)||t.boost.clear?.(),t.boost.canvas&&t.boost.wgl&&k(t)&&t.boost.wgl.allocateBuffer(t),t.boost.markerGroup&&t.xAxis&&t.xAxis.length>0&&t.yAxis&&t.yAxis.length>0&&t.boost.markerGroup.translate(t.xAxis[0].pos,t.yAxis[0].pos)}),p(t,"load",e,{order:-1}),p(t,"redraw",e);let i=-1,r=-1;p(t.pointer,"afterGetHoverData",e=>{let s=e.hoverPoint?.series;if(t.boost=t.boost||{},t.boost.markerGroup&&s){let e=t.inverted?s.yAxis:s.xAxis,o=t.inverted?s.xAxis:s.yAxis;(e&&e.pos!==i||o&&o.pos!==r)&&(t.series.forEach(t=>{t.halo?.hide()}),t.boost.markerGroup.translate(e.pos,o.pos),i=e.pos,r=o.pos)}})}let R={compose:function(t,e){return e&&E(S,"Boost.Chart")&&t.prototype.callbacks.push(w),t},getBoostClipRect:function(t,e){let i=t.navigator,r={x:t.plotLeft,y:t.plotTop,width:t.plotWidth,height:t.plotHeight};if(i&&t.inverted?(r.width+=i.top+i.height,i.opposite||(r.x=i.left)):i&&!t.inverted&&(r.height=i.top+i.height-t.plotTop),e.is){let{xAxis:i,yAxis:s}=e;if(r=t.getClipBox(e),t.inverted){let t=r.width;r.width=r.height,r.height=t,r.x=s.pos,r.y=i.pos}else r.x=i.pos,r.y=s.pos}if(e===t){let e=t.inverted?t.xAxis:t.yAxis;e.length<=1&&(r.y=Math.min(e[0].pos,r.y),r.height=e[0].pos-t.plotTop+e[0].len)}return r},isChartSeriesBoosting:k};var U=a(620),L=a.n(U);let _={area:"LINES",arearange:"LINES",areaspline:"LINES",column:"LINES",columnrange:"LINES",bar:"LINES",line:"LINE_STRIP",scatter:"POINTS",heatmap:"TRIANGLES",treemap:"TRIANGLES",bubble:"POINTS"},N=class{constructor(t){if(this.errors=[],this.uLocations={},this.gl=t,t&&!this.createShader())return}bind(){this.gl&&this.shaderProgram&&this.gl.useProgram(this.shaderProgram)}createShader(){let t=this.stringToProgram("#version 100\n#define LN10 2.302585092994046\nprecision highp float;\nattribute vec4 aVertexPosition;\nattribute vec4 aColor;\nvarying highp vec2 position;\nvarying highp vec4 vColor;\nuniform mat4 uPMatrix;\nuniform float pSize;\nuniform float translatedThreshold;\nuniform bool hasThreshold;\nuniform bool skipTranslation;\nuniform float xAxisTrans;\nuniform float xAxisMin;\nuniform float xAxisMax;\nuniform float xAxisMinPad;\nuniform float xAxisPointRange;\nuniform float xAxisLen;\nuniform bool xAxisPostTranslate;\nuniform float xAxisOrdinalSlope;\nuniform float xAxisOrdinalOffset;\nuniform float xAxisPos;\nuniform bool xAxisCVSCoord;\nuniform bool xAxisIsLog;\nuniform bool xAxisReversed;\nuniform float yAxisTrans;\nuniform float yAxisMin;\nuniform float yAxisMax;\nuniform float yAxisMinPad;\nuniform float yAxisPointRange;\nuniform float yAxisLen;\nuniform bool yAxisPostTranslate;\nuniform float yAxisOrdinalSlope;\nuniform float yAxisOrdinalOffset;\nuniform float yAxisPos;\nuniform bool yAxisCVSCoord;\nuniform bool yAxisIsLog;\nuniform bool yAxisReversed;\nuniform bool isCircle;\nuniform bool isBubble;\nuniform bool bubbleSizeByArea;\nuniform float bubbleZMin;\nuniform float bubbleZMax;\nuniform float bubbleZThreshold;\nuniform float bubbleMinSize;\nuniform float bubbleMaxSize;\nuniform bool bubbleSizeAbs;\nuniform bool isInverted;\nfloat bubbleRadius(){\nfloat value = aVertexPosition.w;\nfloat zMax = bubbleZMax;\nfloat zMin = bubbleZMin;\nfloat radius = 0.0;\nfloat pos = 0.0;\nfloat zRange = zMax - zMin;\nif (bubbleSizeAbs){\nvalue = value - bubbleZThreshold;\nzMax = max(zMax - bubbleZThreshold, zMin - bubbleZThreshold);\nzMin = 0.0;\n}\nif (value < zMin){\nradius = bubbleZMin / 2.0 - 1.0;\n} else {\npos = zRange > 0.0 ? (value - zMin) / zRange : 0.5;\nif (bubbleSizeByArea && pos > 0.0){\npos = sqrt(pos);\n}\nradius = ceil(bubbleMinSize + pos * (bubbleMaxSize - bubbleMinSize)) / 2.0;\n}\nreturn radius * 2.0;\n}\nfloat translate(float val,\nfloat pointPlacement,\nfloat localA,\nfloat localMin,\nfloat minPixelPadding,\nfloat pointRange,\nfloat len,\nbool cvsCoord,\nbool isLog,\nbool reversed\n){\nfloat sign = 1.0;\nfloat cvsOffset = 0.0;\nif (cvsCoord) {\nsign *= -1.0;\ncvsOffset = len;\n}\nif (isLog) {\nval = log(val) / LN10;\n}\nif (reversed) {\nsign *= -1.0;\ncvsOffset -= sign * len;\n}\nreturn sign * (val - localMin) * localA + cvsOffset + \n(sign * minPixelPadding);\n}\nfloat xToPixels(float value) {\nif (skipTranslation){\nreturn value;// + xAxisPos;\n}\nreturn translate(value, 0.0, xAxisTrans, xAxisMin, xAxisMinPad, xAxisPointRange, xAxisLen, xAxisCVSCoord, xAxisIsLog, xAxisReversed);// + xAxisPos;\n}\nfloat yToPixels(float value, float checkThreshold) {\nfloat v;\nif (skipTranslation){\nv = value;// + yAxisPos;\n} else {\nv = translate(value, 0.0, yAxisTrans, yAxisMin, yAxisMinPad, yAxisPointRange, yAxisLen, yAxisCVSCoord, yAxisIsLog, yAxisReversed);// + yAxisPos;\nif (v > yAxisLen) {\nv = yAxisLen;\n}\n}\nif (checkThreshold > 0.0 && hasThreshold) {\nv = min(v, translatedThreshold);\n}\nreturn v;\n}\nvoid main(void) {\nif (isBubble){\ngl_PointSize = bubbleRadius();\n} else {\ngl_PointSize = pSize;\n}\nvColor = aColor;\nif (!skipTranslation && isCircle && (\naVertexPosition.x < xAxisMin ||\naVertexPosition.x > xAxisMax ||\naVertexPosition.y < yAxisMin ||\naVertexPosition.y > yAxisMax\n)) {\ngl_Position = uPMatrix * vec4(2.0, 2.0, 2.0, 1.0);\n} else if (skipTranslation && isInverted) {\ngl_Position = uPMatrix * vec4(aVertexPosition.y + yAxisPos, aVertexPosition.x + xAxisPos, 0.0, 1.0);\n} else if (isInverted) {\ngl_Position = uPMatrix * vec4(yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, xToPixels(aVertexPosition.x) + xAxisPos, 0.0, 1.0);\n} else {\ngl_Position = uPMatrix * vec4(xToPixels(aVertexPosition.x) + xAxisPos, yToPixels(aVertexPosition.y, aVertexPosition.z) + yAxisPos, 0.0, 1.0);\n}\n}","vertex"),e=this.stringToProgram("precision highp float;\nuniform vec4 fillColor;\nvarying highp vec2 position;\nvarying highp vec4 vColor;\nuniform sampler2D uSampler;\nuniform bool isCircle;\nuniform bool hasColor;\nvoid main(void) {\nvec4 col = fillColor;\nvec4 tcol = texture2D(uSampler, gl_PointCoord.st);\nif (hasColor) {\ncol = vColor;\n}\nif (isCircle) {\ncol *= tcol;\nif (tcol.r < 0.0) {\ndiscard;\n} else {\ngl_FragColor = col;\n}\n} else {\ngl_FragColor = col;\n}\n}","fragment"),i=t=>this.gl.getUniformLocation(this.shaderProgram,t);return t&&e?(this.shaderProgram=this.gl.createProgram(),this.gl.attachShader(this.shaderProgram,t),this.gl.attachShader(this.shaderProgram,e),this.gl.linkProgram(this.shaderProgram),this.gl.getProgramParameter(this.shaderProgram,this.gl.LINK_STATUS))?(this.gl.useProgram(this.shaderProgram),this.gl.bindAttribLocation(this.shaderProgram,0,"aVertexPosition"),this.pUniform=i("uPMatrix"),this.psUniform=i("pSize"),this.fcUniform=i("fillColor"),this.isBubbleUniform=i("isBubble"),this.bubbleSizeAbsUniform=i("bubbleSizeAbs"),this.bubbleSizeAreaUniform=i("bubbleSizeByArea"),this.uSamplerUniform=i("uSampler"),this.skipTranslationUniform=i("skipTranslation"),this.isCircleUniform=i("isCircle"),this.isInverted=i("isInverted"),!0):(this.errors.push(this.gl.getProgramInfoLog(this.shaderProgram)),this.handleErrors(),this.shaderProgram=!1,!1):(this.shaderProgram=!1,this.handleErrors(),!1)}handleErrors(){this.errors.length&&(0,h.error)("[highcharts boost] shader error - "+this.errors.join("\n"))}stringToProgram(t,e){let i=this.gl.createShader("vertex"===e?this.gl.VERTEX_SHADER:this.gl.FRAGMENT_SHADER);return(this.gl.shaderSource(i,t),this.gl.compileShader(i),this.gl.getShaderParameter(i,this.gl.COMPILE_STATUS))?i:(this.errors.push("when compiling "+e+" shader:\n"+this.gl.getShaderInfoLog(i)),!1)}destroy(){this.gl&&this.shaderProgram&&(this.gl.deleteProgram(this.shaderProgram),this.shaderProgram=!1)}fillColorUniform(){return this.fcUniform}getProgram(){return this.shaderProgram}pointSizeUniform(){return this.psUniform}perspectiveUniform(){return this.pUniform}reset(){this.gl&&this.shaderProgram&&(this.gl.uniform1i(this.isBubbleUniform,0),this.gl.uniform1i(this.isCircleUniform,0))}setBubbleUniforms(t,e,i,r=1){let s=t.options,o=Number.MAX_VALUE,n=-Number.MAX_VALUE;if(this.gl&&this.shaderProgram&&t.is("bubble")){var a,l;let h=t.getPxExtremes();o=C(s.zMin,(a=!1===s.displayNegative?s.zThreshold:-Number.MAX_VALUE,l=o,e>a?e<l?e:l:a)),n=C(s.zMax,Math.max(n,i)),this.gl.uniform1i(this.isBubbleUniform,1),this.gl.uniform1i(this.isCircleUniform,1),this.gl.uniform1i(this.bubbleSizeAreaUniform,"width"!==t.options.sizeBy),this.gl.uniform1i(this.bubbleSizeAbsUniform,t.options.sizeByAbsoluteValue),this.setUniform("bubbleMinSize",h.minPxSize*r),this.setUniform("bubbleMaxSize",h.maxPxSize*r),this.setUniform("bubbleZMin",o),this.setUniform("bubbleZMax",n),this.setUniform("bubbleZThreshold",t.options.zThreshold)}}setColor(t){this.gl&&this.shaderProgram&&this.gl.uniform4f(this.fcUniform,t[0]/255,t[1]/255,t[2]/255,t[3])}setDrawAsCircle(t){this.gl&&this.shaderProgram&&this.gl.uniform1i(this.isCircleUniform,+!!t)}setInverted(t){this.gl&&this.shaderProgram&&this.gl.uniform1i(this.isInverted,t)}setPMatrix(t){this.gl&&this.shaderProgram&&this.gl.uniformMatrix4fv(this.pUniform,!1,t)}setPointSize(t){this.gl&&this.shaderProgram&&this.gl.uniform1f(this.psUniform,t)}setSkipTranslation(t){this.gl&&this.shaderProgram&&this.gl.uniform1i(this.skipTranslationUniform,+(!0===t))}setTexture(t){this.gl&&this.shaderProgram&&this.gl.uniform1i(this.uSamplerUniform,t)}setUniform(t,e){if(this.gl&&this.shaderProgram){let i=this.uLocations[t]=this.uLocations[t]||this.gl.getUniformLocation(this.shaderProgram,t);this.gl.uniform1f(i,e)}}},O=class{constructor(t,e,i){this.buffer=!1,this.iterator=0,this.preAllocated=!1,this.vertAttribute=!1,this.components=i||2,this.dataComponents=i,this.gl=t,this.shader=e}allocate(t){this.iterator=-1,this.preAllocated=new Float32Array(4*t)}bind(){if(!this.buffer)return!1;this.gl.vertexAttribPointer(this.vertAttribute,this.components,this.gl.FLOAT,!1,0,0)}build(t,e,i){let r;return(this.data=t||[],this.data&&0!==this.data.length||this.preAllocated)?(this.components=i||this.components,this.buffer&&this.gl.deleteBuffer(this.buffer),this.preAllocated||(r=new Float32Array(this.data)),this.buffer=this.gl.createBuffer(),this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this.buffer),this.gl.bufferData(this.gl.ARRAY_BUFFER,this.preAllocated||r,this.gl.STATIC_DRAW),this.vertAttribute=this.gl.getAttribLocation(this.shader.getProgram(),e),this.gl.enableVertexAttribArray(this.vertAttribute),r=!1,!0):(this.destroy(),!1)}destroy(){this.buffer&&(this.gl.deleteBuffer(this.buffer),this.buffer=!1,this.vertAttribute=!1),this.iterator=0,this.components=this.dataComponents||2,this.data=[]}push(t,e,i,r){this.preAllocated&&(this.preAllocated[++this.iterator]=t,this.preAllocated[++this.iterator]=e,this.preAllocated[++this.iterator]=i,this.preAllocated[++this.iterator]=r)}render(t,e,i){let r=this.preAllocated?this.preAllocated.length:this.data.length;return!!this.buffer&&!!r&&((!t||t>r||t<0)&&(t=0),(!e||e>r)&&(e=r),!(t>=e)&&(i=i||"POINTS",this.gl.drawArrays(this.gl[i],t/this.components,(e-t)/this.components),!0))}},{getBoostClipRect:D}=R,{parse:z}=L(),{doc:I,win:G}=c(),B={column:!0,columnrange:!0,bar:!0,area:!0,areaspline:!0,arearange:!0},V={scatter:!0,bubble:!0},X=["webgl","experimental-webgl","moz-webgl","webkit-3d"];class F{static orthoMatrix(t,e){return[2/t,0,0,0,0,-(2/e),0,0,0,0,-2,0,-1,1,-1,1]}static seriesPointCount(t){let e,i,r;return t.boosted?(e=!!t.options.stacking,i=(t.getColumn("x").length?t.getColumn("x"):void 0)||t.options.xData||t.getColumn("x",!0),r=(e?t.data:i||t.options.data).length,"treemap"===t.type?r*=12:"heatmap"===t.type?r*=6:B[t.type]&&(r*=2),r):0}constructor(t){this.data=[],this.height=0,this.isInited=!1,this.markerData=[],this.series=[],this.textureHandles={},this.width=0,this.postRenderCallback=t,this.settings={pointSize:1,lineWidth:1,fillColor:"#AA00AA",useAlpha:!0,usePreallocated:!1,useGPUTranslations:!1,debug:{timeRendering:!1,timeSeriesProcessing:!1,timeSetup:!1,timeBufferCopy:!1,timeKDTree:!1,showSkipSummary:!1}}}getPixelRatio(){return this.settings.pixelRatio||G.devicePixelRatio||1}setOptions(t){"pixelRatio"in t||(t.pixelRatio=1),P(!0,this.settings,t)}allocateBuffer(t){let e=this.vbuffer,i=0;this.settings.usePreallocated&&(t.series.forEach(t=>{t.boosted&&(i+=F.seriesPointCount(t))}),e&&e.allocate(i))}allocateBufferForSingleSeries(t){let e=this.vbuffer,i=0;this.settings.usePreallocated&&(t.boosted&&(i=F.seriesPointCount(t)),e&&e.allocate(i))}clear(){let t=this.gl;t&&t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT)}pushSeriesData(t,e){let i=this.data,r=this.settings,s=this.vbuffer,o=t.pointArrayMap&&"low,high"===t.pointArrayMap.join(","),{chart:n,options:a,sorted:l,xAxis:h,yAxis:c}=t,u=!!a.stacking,d=a.data,g=t.xAxis.getExtremes(),f=g.min-(t.xAxis.minPointOffset||0),p=g.max+(t.xAxis.minPointOffset||0),m=t.yAxis.getExtremes(),b=m.min-(t.yAxis.minPointOffset||0),x=m.max+(t.yAxis.minPointOffset||0),A=(t.getColumn("x").length?t.getColumn("x"):void 0)||a.xData||t.getColumn("x",!0),y=(t.getColumn("y").length?t.getColumn("y"):void 0)||a.yData||t.getColumn("y",!0),P=(t.getColumn("z").length?t.getColumn("z"):void 0)||a.zData||t.getColumn("z",!0),T=!A||0===A.length,C=t.options.colorByPoint,E=a.connectNulls,M=t.points||!1,S=u?t.data:A||d,k={x:Number.MAX_VALUE,y:0},w={x:-Number.MAX_VALUE,y:0},R=void 0===n.index,U=B[t.type],L=a.zoneAxis||"y",_=a.zones||!1,N=a.threshold,O=this.getPixelRatio(),D=t.chart.plotWidth,I=!1,G=!1,V,X,F=0,H=!1,j,Y,W,K,q=-1,Z=!1,Q=!1,J,$=!1,tt=!1,te,ti=!1,tr=!0,ts=!0,to=[],tn=!1,ta=!1,tl=0,th=0;if(a.boostData&&a.boostData.length>0)return;a.gapSize&&(ta="value"!==a.gapUnit?a.gapSize*t.closestPointRange:a.gapSize),_&&_.length&&(to=[],_.forEach((t,e)=>{if(t.color){let i=z(t.color).rgba;i[0]/=255,i[1]/=255,i[2]/=255,to[e]=i,tn||void 0!==t.value||(tn=i)}}),tn||(tn=z(t.pointAttribs&&t.pointAttribs().fill||t.color).rgba,tn[0]/=255,tn[1]/=255,tn[2]/=255)),n.inverted&&(D=t.chart.plotHeight),t.closestPointRangePx=Number.MAX_VALUE;let tc=t=>{t&&(e.colorData.push(t[0]),e.colorData.push(t[1]),e.colorData.push(t[2]),e.colorData.push(t[3]))},tu=(t,o,n,a=1,l)=>{tc(l),1!==O&&(!r.useGPUTranslations||e.skipTranslation)&&(t*=O,o*=O,a*=O),r.usePreallocated&&s?(s.push(t,o,+!!n,a),tl+=4):(i.push(t),i.push(o),i.push(n?O:0),i.push(a))},td=()=>{e.segments.length&&(e.segments[e.segments.length-1].to=i.length||tl)},tg=()=>{e.segments.length&&e.segments[e.segments.length-1].from===(i.length||tl)||(td(),e.segments.push({from:i.length||tl}))},tf=(t,e,i,r,s)=>{tc(s),tu(t+i,e),tc(s),tu(t,e),tc(s),tu(t,e+r),tc(s),tu(t,e+r),tc(s),tu(t+i,e+r),tc(s),tu(t+i,e)};if(tg(),M&&M.length>0){e.skipTranslation=!0,e.drawMode="TRIANGLES",M[0].node&&M[0].node.levelDynamic&&M.sort((t,e)=>{if(t.node){if(t.node.levelDynamic>e.node.levelDynamic)return 1;if(t.node.levelDynamic<e.node.levelDynamic)return -1}return 0}),M.forEach(e=>{let i,r,s=e.plotY;if(void 0!==s&&!isNaN(s)&&null!==e.y&&e.shapeArgs){let{x:s=0,y:o=0,width:a=0,height:l=0}=e.shapeArgs;i=(r=n.styledMode?e.series.colorAttribs(e):r=e.series.pointAttribs(e))["stroke-width"]||0,te=z(r.fill).rgba,te[0]/=255,te[1]/=255,te[2]/=255,t.is("treemap")&&(i=i||1,X=z(r.stroke).rgba,X[0]/=255,X[1]/=255,X[2]/=255,tf(s,o,a,l,X),i/=2),t.is("heatmap")&&n.inverted&&(s=h.len-s,o=c.len-o,a=-a,l=-l),tf(s+i,o+i,a-2*i,l-2*i,te)}}),td();return}for(;q<S.length-1;){if(void 0===(W=S[++q]))continue;if(R)break;let i=d&&d[q];if(!T){let e;v(i,!0)&&i.color&&(e=z(i.color).rgba);let r=t.options.keys?.indexOf("color");Array.isArray(i)&&r&&"string"==typeof i[r]?e=z(i[r]).rgba:C&&n.options.colors&&(th%=n.options.colors.length,e=z(n.options.colors[th]).rgba),e&&((te=e)[0]=e[0]/255,te[1]=e[1]/255,te[2]=e[2]/255,te[3]=e[3]),th++}if(T?(j=W[0],Y=W[1],S[q+1]&&(Q=S[q+1][0]),S[q-1]&&(Z=S[q-1][0]),W.length>=3&&(K=W[2],W[2]>e.zMax&&(e.zMax=W[2]),W[2]<e.zMin&&(e.zMin=W[2]))):(j=W,Y=y?.[q],S[q+1]&&(Q=S[q+1]),S[q-1]&&(Z=S[q-1]),P&&P.length&&(K=P[q],P[q]>e.zMax&&(e.zMax=P[q]),P[q]<e.zMin&&(e.zMin=P[q]))),!E&&(null===j||null===Y)){tg();continue}if(Q&&Q>=f&&Q<=p&&($=!0),Z&&Z>=f&&Z<=p&&(tt=!0),o?(T&&(Y=W.slice(1,3)),J=t.getColumn("low",!0)?.[q],Y=t.getColumn("high",!0)?.[q]||0):u&&(j=W.x,J=(Y=W.stackY)-W.y),null!=b&&null!=x&&(tr=Y>=b&&Y<=x),!l&&!tr||(j>p&&w.x<p&&(w.x=j,w.y=Y),j<f&&k.x>f&&(k.x=j,k.y=Y),null===Y&&E))continue;if(null===Y||!tr&&S.length>1&&!$&&!tt){tg();continue}if((l&&(Q>=f||j>=f)&&(Z<=p||j<=p)||!l&&j>=f&&j<=p)&&(ti=!0),ti||$||tt){if(ta&&j-Z>ta&&tg(),_&&_.length){let t,e,i="x"===L?j:Y;_.some((t,r)=>void 0!==t.value&&i<t.value&&(e=r,!0)),void 0!==e&&to[e]&&(t=to[e]),te=t||tn||te}if(r.useGPUTranslations||(e.skipTranslation=!0,j=h.toPixels(j,!0),Y=c.toPixels(Y,!0),!(j>D)||"POINTS"!==e.drawMode)){if(e.hasMarkers&&ti&&!1!==I&&(t.closestPointRangePx=Math.min(t.closestPointRangePx,Math.abs(j-I))),!r.useGPUTranslations&&!r.usePreallocated&&I&&1>Math.abs(j-I)&&G&&1>Math.abs(Y-G)){r.debug.showSkipSummary&&++F;continue}U&&(V=J||0,(!1===J||void 0===J)&&(V=Y<0?Y:0),(o||u)&&!c.logarithmic||(V=Math.max(null===N?b:N,b)),r.useGPUTranslations||(V=c.toPixels(V,!0)),tu(j,V,!1,0,te)),a.step&&!ts&&tu(j,G,!1,2,te),tu(j,Y,!1,"bubble"===t.type?K||1:2,te),I=j,G=Y,H=!0,ts=!1}}}r.debug.showSkipSummary&&console.log("skipped points:",F);let tp=(t,i)=>{if(r.useGPUTranslations||(e.skipTranslation=!0,t.x=h.toPixels(t.x,!0),t.y=c.toPixels(t.y,!0)),i){this.data=[t.x,t.y,0,2].concat(this.data);return}tu(t.x,t.y,0,2)};!H&&!1!==E&&"line_strip"===t.drawMode&&(k.x<Number.MAX_VALUE&&tp(k,!0),w.x>-Number.MAX_VALUE&&tp(w)),td()}pushSeries(t){let e=this.markerData,i=this.series,r=this.settings;i.length>0&&i[i.length-1].hasMarkers&&(i[i.length-1].markerTo=e.length),r.debug.timeSeriesProcessing&&console.time("building "+t.type+" series");let s={segments:[],markerFrom:e.length,colorData:[],series:t,zMin:Number.MAX_VALUE,zMax:-Number.MAX_VALUE,hasMarkers:!!t.options.marker&&!1!==t.options.marker.enabled,showMarkers:!0,drawMode:_[t.type]||"LINE_STRIP"};t.index>=i.length?i.push(s):i[t.index]=s,this.pushSeriesData(t,s),r.debug.timeSeriesProcessing&&console.timeEnd("building "+t.type+" series")}flush(){let t=this.vbuffer;this.data=[],this.markerData=[],this.series=[],t&&t.destroy()}setXAxis(t){let e=this.shader;if(!e)return;let i=this.getPixelRatio();e.setUniform("xAxisTrans",t.transA*i),e.setUniform("xAxisMin",t.min),e.setUniform("xAxisMax",t.max),e.setUniform("xAxisMinPad",t.minPixelPadding*i),e.setUniform("xAxisPointRange",t.pointRange),e.setUniform("xAxisLen",t.len*i),e.setUniform("xAxisPos",t.pos*i),e.setUniform("xAxisCVSCoord",!t.horiz),e.setUniform("xAxisIsLog",!!t.logarithmic),e.setUniform("xAxisReversed",!!t.reversed)}setYAxis(t){let e=this.shader;if(!e)return;let i=this.getPixelRatio();e.setUniform("yAxisTrans",t.transA*i),e.setUniform("yAxisMin",t.min),e.setUniform("yAxisMax",t.max),e.setUniform("yAxisMinPad",t.minPixelPadding*i),e.setUniform("yAxisPointRange",t.pointRange),e.setUniform("yAxisLen",t.len*i),e.setUniform("yAxisPos",t.pos*i),e.setUniform("yAxisCVSCoord",!t.horiz),e.setUniform("yAxisIsLog",!!t.logarithmic),e.setUniform("yAxisReversed",!!t.reversed)}setThreshold(t,e){let i=this.shader;i&&(i.setUniform("hasThreshold",t),i.setUniform("translatedThreshold",e))}renderChart(t){let e=this.gl,i=this.settings,r=this.shader,s=this.vbuffer,o=this.getPixelRatio();if(!t)return!1;this.width=t.chartWidth*o,this.height=t.chartHeight*o;let n=this.height,a=this.width;if(!e||!r||!a||!n)return!1;i.debug.timeRendering&&console.time("gl rendering"),e.canvas.width=a,e.canvas.height=n,r.bind(),e.viewport(0,0,a,n),r.setPMatrix(F.orthoMatrix(a,n)),i.lineWidth>1&&!c().isMS&&e.lineWidth(i.lineWidth),s&&(s.build(this.data,"aVertexPosition",4),s.bind()),r.setInverted(t.inverted),this.series.forEach((a,l)=>{let h=a.series.options,c=h.marker,u=void 0!==h.lineWidth?h.lineWidth:1,d=h.threshold,g=A(d),f=a.series.yAxis.getThreshold(d),p=C(h.marker?h.marker.enabled:null,!!a.series.xAxis.isRadial||null,a.series.closestPointRangePx>2*((h.marker?h.marker.radius:10)||10)),m=this.textureHandles[c&&c.symbol||a.series.symbol]||this.textureHandles.circle,b,x,y,v=[];if(0!==a.segments.length&&a.segments[0].from!==a.segments[0].to&&(m.isReady&&(e.bindTexture(e.TEXTURE_2D,m.handle),r.setTexture(m.handle)),t.styledMode?a.series.markerGroup===a.series.chart.boost?.markerGroup?(delete a.series.markerGroup,a.series.markerGroup=a.series.plotGroup("markerGroup","markers","visible",1,t.seriesGroup).addClass("highcharts-tracker"),y=a.series.markerGroup.getStyle("fill"),a.series.markerGroup.destroy(),a.series.markerGroup=a.series.chart.boost?.markerGroup):y=a.series.markerGroup?.getStyle("fill"):(y="POINTS"===a.drawMode&&a.series.pointAttribs&&a.series.pointAttribs().fill||a.series.color,h.colorByPoint&&(y=a.series.chart.options.colors[l])),a.series.fillOpacity&&h.fillOpacity&&(y=new(L())(y).setOpacity(C(h.fillOpacity,1)).get()),v=z(y).rgba,i.useAlpha||(v[3]=1),"add"===h.boostBlending?(e.blendFunc(e.SRC_ALPHA,e.ONE),e.blendEquation(e.FUNC_ADD)):"mult"===h.boostBlending||"multiply"===h.boostBlending?e.blendFunc(e.DST_COLOR,e.ZERO):"darken"===h.boostBlending?(e.blendFunc(e.ONE,e.ONE),e.blendEquation(e.FUNC_MIN)):e.blendFuncSeparate(e.SRC_ALPHA,e.ONE_MINUS_SRC_ALPHA,e.ONE,e.ONE_MINUS_SRC_ALPHA),r.reset(),a.colorData.length>0?(r.setUniform("hasColor",1),(x=new O(e,r)).build(Array(a.segments[0].from).concat(a.colorData),"aColor",4),x.bind()):(r.setUniform("hasColor",0),e.disableVertexAttribArray(e.getAttribLocation(r.getProgram(),"aColor"))),r.setColor(v),this.setXAxis(a.series.xAxis),this.setYAxis(a.series.yAxis),this.setThreshold(g,f),"POINTS"===a.drawMode&&r.setPointSize(2*C(h.marker&&h.marker.radius,.5)*o),r.setSkipTranslation(a.skipTranslation),"bubble"===a.series.type&&r.setBubbleUniforms(a.series,a.zMin,a.zMax,o),r.setDrawAsCircle(V[a.series.type]||!1),s)){if(u>0||"LINE_STRIP"!==a.drawMode){let{x:i,y:r,width:l,height:h}=D(t,a.series);for(e.enable(e.SCISSOR_TEST),e.scissor(i*o,n-(r+h)*o,l*o,h*o),b=0;b<a.segments.length;b++)s.render(a.segments[b].from,a.segments[b].to,a.drawMode);e.disable(e.SCISSOR_TEST)}if(a.hasMarkers&&p)for(r.setPointSize(2*C(h.marker&&h.marker.radius,5)*o),r.setDrawAsCircle(!0),b=0;b<a.segments.length;b++)s.render(a.segments[b].from,a.segments[b].to,"POINTS")}}),i.debug.timeRendering&&console.timeEnd("gl rendering"),this.postRenderCallback&&this.postRenderCallback(this),this.flush()}render(t){if(this.clear(),t.renderer.forExport)return this.renderChart(t);this.isInited?this.renderChart(t):setTimeout(()=>{this.render(t)},1)}setSize(t,e){let i=this.shader;i&&(this.width!==t||this.height!==e)&&(this.width=t,this.height=e,i.bind(),i.setPMatrix(F.orthoMatrix(t,e)))}init(t,e){let i=this.settings;if(this.isInited=!1,!t)return!1;i.debug.timeSetup&&console.time("gl setup");for(let e=0;e<X.length&&(this.gl=t.getContext(X[e],{}),!this.gl);++e);let r=this.gl;if(!r)return!1;e||this.flush(),r.enable(r.BLEND),r.blendFunc(r.SRC_ALPHA,r.ONE_MINUS_SRC_ALPHA),r.disable(r.DEPTH_TEST),r.depthFunc(r.LESS);let s=this.shader=new N(r);if(!s)return!1;this.vbuffer=new O(r,s);let o=(t,e)=>{let i={isReady:!1,texture:I.createElement("canvas"),handle:r.createTexture()},s=i.texture.getContext("2d");this.textureHandles[t]=i,i.texture.width=512,i.texture.height=512,s.mozImageSmoothingEnabled=!1,s.webkitImageSmoothingEnabled=!1,s.msImageSmoothingEnabled=!1,s.imageSmoothingEnabled=!1,s.strokeStyle="rgba(255, 255, 255, 0)",s.fillStyle="#FFF",e(s);try{r.activeTexture(r.TEXTURE0),r.bindTexture(r.TEXTURE_2D,i.handle),r.texImage2D(r.TEXTURE_2D,0,r.RGBA,r.RGBA,r.UNSIGNED_BYTE,i.texture),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MAG_FILTER,r.LINEAR),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_MIN_FILTER,r.LINEAR),r.bindTexture(r.TEXTURE_2D,null),i.isReady=!0}catch{}};return o("circle",t=>{t.beginPath(),t.arc(256,256,256,0,2*Math.PI),t.stroke(),t.fill()}),o("square",t=>{t.fillRect(0,0,512,512)}),o("diamond",t=>{t.beginPath(),t.moveTo(256,0),t.lineTo(512,256),t.lineTo(256,512),t.lineTo(0,256),t.lineTo(256,0),t.fill()}),o("triangle",t=>{t.beginPath(),t.moveTo(0,512),t.lineTo(256,0),t.lineTo(512,512),t.lineTo(0,512),t.fill()}),o("triangle-down",t=>{t.beginPath(),t.moveTo(0,0),t.lineTo(256,512),t.lineTo(512,0),t.lineTo(0,0),t.fill()}),this.isInited=!0,i.debug.timeSetup&&console.timeEnd("gl setup"),!0}destroy(){let t=this.gl,e=this.shader,i=this.vbuffer;this.flush(),i&&i.destroy(),e&&e.destroy(),t&&(T(this.textureHandles,e=>{e.handle&&t.deleteTexture(e.handle)}),t.canvas.width=1,t.canvas.height=1)}}let{setLength:H,splice:j}={convertToNumber:function(t,e){switch(typeof t){case"boolean":return+!!t;case"number":return isNaN(t)&&!e?null:t;default:return isNaN(t=parseFloat(`${t??""}`))&&!e?null:t}},setLength:function(t,e,i){return Array.isArray(t)?(t.length=e,t):t[i?"subarray":"slice"](0,e)},splice:function(t,e,i,r,s=[]){if(Array.isArray(t))return Array.isArray(s)||(s=Array.from(s)),{removed:t.splice(e,i,...s),array:t};let o=Object.getPrototypeOf(t).constructor,n=t[r?"subarray":"slice"](e,e+i),a=new o(t.length-i+s.length);return a.set(t.subarray(0,e),0),a.set(s,e),a.set(t.subarray(e+i),e+s.length),{removed:n,array:a}}},Y=class{constructor(t={}){this.autoId=!t.id,this.columns={},this.id=t.id||(0,h.uniqueKey)(),this.rowCount=0,this.versionTag=(0,h.uniqueKey)();let e=0;T(t.columns||{},(t,i)=>{this.columns[i]=t.slice(),e=Math.max(e,t.length)}),this.applyRowCount(e)}applyRowCount(t){this.rowCount=t,T(this.columns,(e,i)=>{e.length!==t&&(this.columns[i]=H(e,t))})}deleteRows(t,e=1){if(e>0&&t<this.rowCount){let i=0;T(this.columns,(r,s)=>{this.columns[s]=j(r,t,e).array,i=r.length}),this.rowCount=i}b(this,"afterDeleteRows",{rowIndex:t,rowCount:e}),this.versionTag=(0,h.uniqueKey)()}getColumn(t,e){return this.columns[t]}getColumns(t,e){return(t||Object.keys(this.columns)).reduce((t,e)=>(t[e]=this.columns[e],t),{})}getRow(t,e){return(e||Object.keys(this.columns)).map(e=>this.columns[e]?.[t])}setColumn(t,e=[],i=0,r){this.setColumns({[t]:e},i,r)}setColumns(t,e,i){let r=this.rowCount;T(t,(t,e)=>{this.columns[e]=t.slice(),r=t.length}),this.applyRowCount(r),i?.silent||(b(this,"afterSetColumns"),this.versionTag=(0,h.uniqueKey)())}setRow(t,e=this.rowCount,i,r){let{columns:s}=this,o=i?this.rowCount+1:e+1,n=Object.keys(t);if(r?.addColumns!==!1)for(let t=0,e=n.length;t<e;t++){let e=n[t];s[e]||(s[e]=[])}T(s,(n,a)=>{n||r?.addColumns===!1||(n=Array(o)),n&&(i?n=j(n,e,0,!0,[t[a]??null]).array:n[e]=t[a]??null,s[a]=n)}),o>this.rowCount&&this.applyRowCount(o),r?.silent||(b(this,"afterSetRows"),this.versionTag=(0,h.uniqueKey)())}getModified(){return this.modified||this}},{getBoostClipRect:W,isChartSeriesBoosting:K}=R,{getOptions:q}=c(),{composed:Z,doc:Q,noop:J,win:$}=c();function tt(t,e){let i=e.boost;t&&i&&i.target&&i.canvas&&!K(e.chart)&&t.allocateBufferForSingleSeries(e)}function te(t){return C(t&&t.options&&t.options.boost&&t.options.boost.enabled,!0)}function ti(t,e){let i=t.constructor,s=t.seriesGroup||e.group,o=t.chartWidth,n=t.chartHeight,a=t,l="u">typeof SVGForeignObjectElement,c=!1;K(t)?a=t:(a=e,c=!!(e.options.events?.click||e.options.point?.events?.click));let u=a.boost=a.boost||{};if(l=!1,r||(r=Q.createElement("canvas")),!u.target&&(u.canvas=r,t.renderer.forExport||!l?(a.renderTarget=u.target=t.renderer.image("",0,0,o,n).addClass("highcharts-boost-canvas").add(s),u.clear=function(){u.target.attr({href:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="})},u.copy=function(){u.resize(),u.target.attr({href:u.canvas.toDataURL("image/png")})}):(u.targetFo=t.renderer.createElement("foreignObject").add(s),a.renderTarget=u.target=Q.createElement("canvas"),u.targetCtx=u.target.getContext("2d"),u.targetFo.element.appendChild(u.target),u.clear=function(){u.target.width=u.canvas.width,u.target.height=u.canvas.height},u.copy=function(){u.target.width=u.canvas.width,u.target.height=u.canvas.height,u.targetCtx.drawImage(u.canvas,0,0)}),u.resize=function(){o=t.chartWidth,n=t.chartHeight,(u.targetFo||u.target).attr({x:0,y:0,width:o,height:n}).css({pointerEvents:c?void 0:"none",mixedBlendMode:"normal",opacity:1}).addClass(c?"highcharts-tracker":""),a instanceof i&&a.boost?.markerGroup?.translate(t.plotLeft,t.plotTop)},u.clipRect=t.renderer.clipRect(),(u.targetFo||u.target).attr({zIndex:e.options.zIndex}),a instanceof i&&(a.boost.markerGroup=a.renderer.g().add(s).translate(e.xAxis.pos,e.yAxis.pos))),u.canvas.width=o,u.canvas.height=n,u.clipRect){let e=W(t,a);u.clipRect.attr(e),t.navigator||e.width!==t.clipBox.width||e.height!==t.clipBox.height?(u.targetFo||u.target).clip(u.clipRect):s?.clip(t.renderer.clipRect(e.x-4,e.y,e.width+4,e.height+4))}return u.resize(),u.clear(),!u.wgl&&(u.wgl=new F(t=>{t.settings.debug.timeBufferCopy&&console.time("buffer copy"),u.copy(),t.settings.debug.timeBufferCopy&&console.timeEnd("buffer copy")}),u.wgl.init(u.canvas)||(0,h.error)("[highcharts boost] - unable to init WebGL renderer"),u.wgl.setOptions(t.options.boost||{}),a instanceof i&&u.wgl.allocateBuffer(t)),u.wgl.setSize(o,n),u.wgl}function tr(t){let e=t.points;if(e){let t,i;for(i=0;i<e.length;i+=1)(t=e[i])&&t.destroyElements&&t.destroyElements()}for(let e of(["graph","area","tracker"].forEach(e=>{let i=t[e];i&&(t[e]=i.destroy())}),t.zones))!function(t,e,i){T(t,function(r,s){r!==e&&r?.destroy&&r.destroy(),(r?.destroy||!i)&&delete t[s]})}(e,void 0,!0)}function ts(t,e,i,r,s,o){let n=(s=s||0)+(r=r||3e3),a=!0;for(;a&&s<n&&s<t.length;)a=e(t[s],s),++s;a&&(s<t.length?o?ts(t,e,i,r,s,o):$.requestAnimationFrame?$.requestAnimationFrame(function(){ts(t,e,i,r,s)}):setTimeout(ts,0,t,e,i,r,s):i&&i())}function to(t,e){let i=C(t.options.boostThreshold,Number.MAX_VALUE);if(0===i)return!1;let r=t.dataTable.getModified().rowCount,s=t.xAxis&&t.xAxis.options,o=t.yAxis&&t.yAxis.options,n=t.colorAxis&&t.colorAxis.options;return r>=i&&A(o?.min)&&A(o?.max)&&(!e||A(s?.min)&&A(s?.max))&&(!n||A(n.min)&&A(n.max))}let tn=(t,e)=>{let{options:i,forceCrop:r,chart:s}=t,o=C(i.boostThreshold,Number.MAX_VALUE);return!r&&0!==o&&(K(s)||(e?.length??0)>=o)};function ta(){let t=this,e=t.chart;e.boost&&e.boost.markerGroup===t.markerGroup&&(t.markerGroup=void 0),e.hoverPoints&&(e.hoverPoints=e.hoverPoints.filter(function(e){return e.series===t})),e.hoverPoint&&e.hoverPoint.series===t&&(e.hoverPoint=void 0)}function tl(){let t=this.boost;t&&t.canvas&&t.target&&(t.wgl&&t.wgl.clear(),t.clear&&t.clear())}function th(t){let e=t.boost;e&&e.canvas&&e.target&&e.wgl&&!K(t.chart)&&e.wgl.render(t.chart)}function tc(t,e){let i=t.options,r=t.xAxis,s=t.pointClass;if(e instanceof s)return e;let o=i.data,n=t.is("scatter"),a=(n&&t.getColumn("x",!0).length?t.getColumn("x",!0):void 0)||(t.getColumn("x").length?t.getColumn("x"):void 0)||i.xData||t.getColumn("x",!0)||!1,l=t.getColumn("y",!0)||i.yData||!1,h=e.i,c=o?.[h]?.color,u=new s(t,n&&a&&l?[a[h],l[h]]:(y(o)?o:[])[h],a?a[h]:void 0);if(n&&i?.keys?.length){let t=i.keys;for(let e=t.length-1;e>-1;e--)u[t[e]]=o[h][e]}return u.category=C(r.categories?r.categories[u.x]:u.x,u.x),u.key=u.name??u.category,u.dist=e.dist,u.distX=e.distX,u.plotX=e.plotX,u.plotY=e.plotY,u.index=h,u.percentage=e.percentage,u.isInside=t.isPointInside(u),c&&(u.color=c),u}function tu(t){let{options:e,xAxis:i,yAxis:r}=this;if(!this.isDirty&&!i.isDirty&&!r.isDirty&&!t)return!1;this.yAxis.setTickInterval();let s=e.boostThreshold||0,o=e.cropThreshold,n=this.getColumn("x"),a=i.getExtremes(),l=a.max??Number.MAX_VALUE,h=a.min??-Number.MAX_VALUE,c=this.getColumn("y"),u=r.getExtremes(),d=u.max??Number.MAX_VALUE,g=u.min??-Number.MAX_VALUE;if(!this.boosted&&i.old&&r.old&&h>=(i.old.min??-Number.MAX_VALUE)&&l<=(i.old.max??Number.MAX_VALUE)&&g>=(r.old.min??-Number.MAX_VALUE)&&d<=(r.old.max??Number.MAX_VALUE))return this.dataTable.getModified().setColumns({x:n,y:c}),!0;let f=this.dataTable.rowCount;if(!s||f<s||o&&!this.forceCrop&&!this.getExtremesFromAll&&!e.getExtremesFromAll&&f<o)return this.dataTable.getModified().setColumns({x:n,y:c}),!0;let p=[],m=[],b=[],x=!(A(a.max)||A(a.min)),y=!(A(u.max)||A(u.min)),v=!1,P,T=n[0],C=n[0],E,M=c?.[0],S=c?.[0];for(let t=0,e=n.length;t<e;++t)P=n[t],E=c?.[t],P>=h&&P<=l&&E>=g&&E<=d?(p.push({x:P,y:E}),m.push(P),b.push(E),x&&(T=Math.max(T,P),C=Math.min(C,P)),y&&(M=Math.max(M,E),S=Math.min(S,E))):v=!0;return x&&(i.dataMax=Math.max(T,i.dataMax||0),i.dataMin=Math.min(C,i.dataMin||0)),y&&(r.dataMax=Math.max(M,r.dataMax||0),r.dataMin=Math.min(S,r.dataMin||0)),this.cropped=v,this.cropStart=0,v&&!this.dataTable.modified&&(this.dataTable.modified=new Y),this.dataTable.getModified().setColumns({x:m,y:b}),tn(this,m)||(this.processedData=p),!0}function td(){let t=this.options||{},e=this.chart,r=e.boost,s=this.boost,o=this.xAxis,n=this.yAxis,a=t.xData||this.getColumn("x",!0),l=t.yData||this.getColumn("y",!0),h=this.getColumn("low",!0),c=this.getColumn("high",!0),u=this.processedData||t.data,d=o.getExtremes(),g=d.min-(o.minPointOffset||0),f=d.max+(o.minPointOffset||0),p=n.getExtremes(),m=p.min-(n.minPointOffset||0),x=p.max+(n.minPointOffset||0),y={},v=!!this.sampling,P=t.enableMouseTracking,T=t.threshold,E=this.pointArrayMap&&"low,high"===this.pointArrayMap.join(","),M=!!t.stacking,S=this.cropStart||0,k=this.requireSorting,w=!a,R="x"===t.findNearestPointBy,U=(this.getColumn("x").length?this.getColumn("x"):void 0)||this.options.xData||this.getColumn("x",!0),L=C(t.lineWidth,1),_=t.nullInteraction&&m,N=e.tooltip,O=!1,D,z=n.getThreshold(T),I,G,B,V;if(!this.boosted||(this.points?.forEach(t=>{t?.destroyElements?.()}),this.points=[],N&&!N.isHidden?(e.hoverPoint?.series===this||e.hoverPoints?.some(t=>t.series===this))&&(e.hoverPoint=e.hoverPoints=void 0,N.hide(0)):e.hoverPoints&&(e.hoverPoints=e.hoverPoints.filter(t=>t.series!==this)),o.isPanning||n.isPanning)||(O=ti(e,this),e.boosted=!0,!this.visible))return;(this.points||this.graph)&&tr(this),K(e)?(this.markerGroup&&this.markerGroup!==r?.markerGroup&&this.markerGroup.destroy(),this.markerGroup=r?.markerGroup,s&&s.target&&(this.renderTarget=s.target=s.target.destroy())):(this.markerGroup===r?.markerGroup&&(this.markerGroup=void 0),this.markerGroup=this.plotGroup("markerGroup","markers","visible",1,e.seriesGroup).addClass("highcharts-tracker"));let X=this.points=[],F=(t,r,s,a)=>{let l=!!U&&U[S+s],h=t=>{e.inverted&&(t=o.len-t,r=n.len-r),X.push({destroy:J,x:l,clientX:t,plotX:t,plotY:r,i:S+s,percentage:a})};t=Math.ceil(t),i=R?t:t+","+r,P&&(y[i]?l===U[U.length-1]&&(X.length--,h(t)):(y[i]=!0,h(t)))};this.buildKDTree=J,b(this,"renderCanvas"),r&&L>1&&this.is("line")&&(r.lineWidthFilter?.remove(),r.lineWidthFilter=e.renderer.definition({tagName:"filter",children:[{tagName:"feMorphology",attributes:{operator:"dilate",radius:.25*L}}],attributes:{id:"linewidth"}}),(s?.target||r.target)?.attr({filter:"url(#linewidth)"})),O&&(tt(O,this),O.pushSeries(this),th(this));let H=O.settings,j=A(H.chunkSize)&&H.chunkSize>0?H.chunkSize:3e3,Y=()=>{b(this,"renderedCanvas"),delete this.buildKDTree,this.options&&this.buildKDTree(),H.debug.timeKDTree&&console.timeEnd("kd tree building")};e.renderer.forExport||(H.debug.timeKDTree&&console.time("kd tree building"),ts(M?this.data.slice(S):a||u,function(t,i){let r=void 0===e.index,s,a,u,d,p,b=!1,A=!0;return null==t||(!r&&(w?(s=t[0],a=t[1]):(s=t,a=l[i]??_??null),E?(w&&(a=t.slice(1,3)),b=h[i],a=c[i]):M&&(s=t.x,b=(a=t.stackY)-t.y,p=t.percentage),k||(A=(a||0)>=m&&a<=x),null!==a&&s>=g&&s<=f&&A&&(u=o.toPixels(s,!0),v?((void 0===B||u===D)&&(E||(b=a),(void 0===V||a>G)&&(G=a,V=i),(void 0===B||b<I)&&(I=b,B=i)),R&&u===D||(void 0!==B&&(d=n.toPixels(G,!0),z=n.toPixels(I,!0),F(u,d,V,p),z!==d&&F(u,z,B,p)),B=V=void 0,D=u)):F(u,d=Math.ceil(n.toPixels(a,!0)),i,p))),!r)},Y,j))}function tg(t){let e=!0;if(this.chart.options&&this.chart.options.boost&&(e=void 0===this.chart.options.boost.enabled||this.chart.options.boost.enabled),!e||!this.boosted)return t.call(this);this.chart.boosted=!0;let i=ti(this.chart,this);i&&(tt(i,this),i.pushSeries(this)),th(this)}function tf(t){if(this.boosted){if(to(this,!0))return{};if(this.xAxis?.isPanning||this.yAxis?.isPanning)return this}return t.apply(this,[].slice.call(arguments,1))}function tp(t){let e=this.options.data;if(te(this.chart)&&d[this.type]){let r=this.is("scatter")&&!this.is("bubble")&&!this.is("treemap")&&!this.is("heatmap");if(!tn(this,e)||r||this.is("treemap")||this.options.stacking||!to(this,!0)){if(this.boosted&&(this.xAxis?.isPanning||this.yAxis?.isPanning))return;r&&"treegrid"!==this.yAxis.type?tu.call(this,arguments[1]):t.apply(this,[].slice.call(arguments,1)),e=this.getColumn("x",!0)}if(this.boosted=tn(this,e),this.boosted){let t;this.options.data?.length&&(A(t=this.getFirstValidPoint(this.options.data))||y(t)||this.is("treemap")||(0,h.error)(12,!1,this.chart));var i=this;i.boost=i.boost||{getPoint:t=>tc(i,t)};let e=i.boost.altered=[];if(["allowDG","directTouch","stickyTracking"].forEach(t=>{e.push({prop:t,val:i[t],own:Object.hasOwnProperty.call(i,t)})}),i.allowDG=!1,i.directTouch=!1,i.stickyTracking=!0,i.finishedAnimating=!0,i.labelBySeries&&(i.labelBySeries=i.labelBySeries.destroy()),i.is("scatter")&&!i.is("treemap")&&i.data.length){for(let t of i.data)t?.destroy?.();i.data.length=0,i.points.length=0,delete i.processedData}}else!function(t){let e=t.boost,i=t.chart,r=i.boost;if(r?.markerGroup)for(let t of(r.markerGroup.destroy(),r.markerGroup=void 0,i.series))t.markerGroup=void 0,t.markerGroup=t.plotGroup("markerGroup","markers","visible",1,i.seriesGroup).addClass("highcharts-tracker");e&&((e.altered||[]).forEach(e=>{e.own?t[e.prop]=e.val:delete t[e.prop]}),e.clear&&e.clear()),(i.seriesGroup||t.group)?.clip()}(this)}else t.apply(this,[].slice.call(arguments,1))}function tm(t){let e=t.apply(this,[].slice.call(arguments,1));return this.boost&&e?this.boost.getPoint(e):e}let tb={compose:function(t,e,i,r){if(E(Z,"Boost.Series")){let s=q().plotOptions,o=t.prototype;if(p(t,"destroy",ta),p(t,"hide",tl),r&&(o.renderCanvas=td),M(o,"getExtremes",tf),M(o,"processData",tp),M(o,"searchPoint",tm),["translate","generatePoints","drawTracker","drawPoints","render"].forEach(t=>(function(t,e,i){function r(t){let e=this.options.stacking&&("translate"===i||"generatePoints"===i);this.boosted&&!e&&te(this.chart)&&"heatmap"!==this.type&&"treemap"!==this.type&&d[this.type]&&0!==this.options.boostThreshold?"render"===i&&this.renderCanvas&&this.renderCanvas():t.call(this)}if(M(t,i,r),"translate"===i)for(let t of["column","arearange","columnrange","heatmap","treemap"])e[t]&&M(e[t].prototype,i,r)})(o,e,t)),M(i.prototype,"firePointEvent",function(t,e,i){if("click"===e&&this.series.boosted){let t=i.point;if((t.dist||t.distX)>=(t.series.options.marker?.radius??10))return}return t.apply(this,[].slice.call(arguments,1))}),u.forEach(t=>{let i=s[t];i&&(i.boostThreshold=5e3,i.boostData=[],e[t].prototype.fillOpacity=!0)}),r){let{area:t,areaspline:i,bubble:r,column:s,heatmap:o,scatter:n,treemap:a}=e;if(t&&m(t.prototype,{fill:!0,fillOpacity:!0,sampling:!0}),i&&m(i.prototype,{fill:!0,fillOpacity:!0,sampling:!0}),r){let t=r.prototype;delete t.buildKDTree,M(t,"markerAttribs",function(t){return!this.boosted&&t.apply(this,[].slice.call(arguments,1))})}s&&m(s.prototype,{fill:!0,sampling:!0}),n&&(n.prototype.fill=!0),[o,a].forEach(t=>{t&&M(t.prototype,"drawPoints",tg)})}}return t},destroyGraphics:tr,eachAsync:ts,getPoint:tc},{getBoostClipRect:tx,isChartSeriesBoosting:tA}=R,{destroyGraphics:ty}=tb,{parse:tv}=L(),{doc:tP,noop:tT}=c();!function(t){let e,i="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";function r(t,e,i,r,s){s&&e!==s.clientX&&(t.moveTo(s.clientX,s.yBottom),t.lineTo(s.clientX,s.plotY),t.lineTo(e,i),t.lineTo(e,r))}function s(t,e,i,r,s){t.moveTo(e,i),t.arc(e,i,this.radii&&this.radii[s],0,2*Math.PI,!1)}function o(t,e,i,r){t.rect(e-1,i,1,r-i)}function n(){this.boost&&this.boost.copy&&this.boost.copy()}function a(){let t=this.boost||{};t.target&&t.target.attr({href:i}),t.canvas&&t.canvas.getContext("2d").clearRect(0,0,t.canvas.width,t.canvas.height)}function l(){tA(this.chart)?this.boost&&this.boost.clear&&this.boost.clear():this.boost&&this.boost.copy?this.boost.copy():this.chart.boost&&this.chart.boost.copy&&this.chart.boost.copy()}function h(t,e,i){t.lineTo(e,i)}function c(){let t,e=this.chart,r=tA(e)?e:this,s=r===e?e.seriesGroup:e.seriesGroup||this.group,o=e.chartWidth,n=e.chartHeight,a=function(t,e,i,r,s,o,n){t.call(this,i,e,r,s,o,n)},l=r.boost=r.boost||{};return t=l.targetCtx,l.canvas||(l.canvas=tP.createElement("canvas"),l.target=e.renderer.image("",0,0,o,n).addClass("highcharts-boost-canvas").add(s),t=l.targetCtx=l.canvas.getContext("2d"),e.inverted&&["moveTo","lineTo","rect","arc"].forEach(e=>{M(t,e,a)}),l.copy=function(){l.target.attr({href:l.canvas.toDataURL("image/png")})},l.clear=function(){t.clearRect(0,0,l.canvas.width,l.canvas.height),r===l.target&&l.target.attr({href:i})},l.clipRect=e.renderer.clipRect(),l.target.clip(l.clipRect)),l.canvas.width!==o&&(l.canvas.width=o),l.canvas.height!==n&&(l.canvas.height=n),l.target.attr({x:0,y:0,width:o,height:n,style:"pointer-events: none",href:i}),l.clipRect&&l.clipRect.attr(tx(e,r)),t}function u(){let t=this,r=t.options,s=t.chart,o=t.xAxis,n=t.yAxis,a=s.options.boost||{},l={timeRendering:a.timeRendering||!1,timeSeriesProcessing:a.timeSeriesProcessing||!1,timeSetup:a.timeSetup||!1},h=t.getColumn("x",!0),c=t.getColumn("y",!0),u=r.data,d=o.getExtremes(),g=d.min,f=d.max,m=n.getExtremes(),x=m.min,y=m.max,v={},T=!!t.sampling,E=r.marker&&r.marker.radius,M=t.cvsStrokeBatch||1e3,S=r.enableMouseTracking,k=r.threshold,w=A(k),R=n.getThreshold(k),U=t.fill,_=t.pointArrayMap&&"low,high"===t.pointArrayMap.join(","),N=!!r.stacking,O=t.cropStart||0,D=s.options.loading,z=t.requireSorting,I=r.connectNulls,G=!h,B=N?t.data:h||u,V=t.fillOpacity?L().parse(t.color).setOpacity(C(r.fillOpacity,.75)).get():t.color,X="x"===r.findNearestPointBy,F=this.boost||{},H=t.cvsDrawPoint,j=r.lineWidth?t.cvsLineTo:void 0,Y=E&&E<=1?t.cvsMarkerSquare:t.cvsMarkerCircle;F.target&&F.target.attr({href:i}),(t.points||t.graph)&&ty(t),t.plotGroup("group","series",t.visible?"visible":"hidden",r.zIndex,s.seriesGroup),t.markerGroup=t.group,p(t,"destroy",function(){t.markerGroup=null});let W=this.points=[],K=this.getContext();if(t.buildKDTree=tT,F.clear&&F.clear(),!t.visible)return;if(u.length>99999){var q;s.options.loading=P(D,{labelStyle:{backgroundColor:tv("#ffffff").setOpacity(.75).get(),padding:"1em",borderRadius:"0.5em"},style:{backgroundColor:"none",opacity:1}}),null!=(q=e)&&clearTimeout(q),s.showLoading("Drawing..."),s.options.loading=D}l.timeRendering&&console.time("canvas rendering");let Z=0,Q,J,$=R,tt,te,ti,tr,ts,to,tn=function(){U?(K.fillStyle=V,K.fill()):(K.strokeStyle=t.color,K.lineWidth=r.lineWidth,K.stroke())},ta=function(e,i,r,o){0===Z&&(K.beginPath(),j&&(K.lineJoin="round")),s.scroller&&"highcharts-navigator-series"===t.options.className?(i+=s.scroller.top,r&&(r+=s.scroller.top)):i+=s.plotTop,e+=s.plotLeft,tt?K.moveTo(e,i):H?H(K,e,i,r,J):j?j(K,e,i):Y&&Y.call(t,K,e,i,E,o),(Z+=1)===M&&(tn(),Z=0),J={clientX:e,plotY:i,yBottom:r}},tl=(this.getColumn("x").length?this.getColumn("x"):void 0)||this.options.xData||!!this.getColumn("x",!0).length&&this.getColumn("x",!0),th=function(t,e,i){to=X?t:t+","+e,S&&!v[to]&&(v[to]=!0,s.inverted&&(t=o.len-t,e=n.len-e),W.push({x:!!tl&&tl[O+i],clientX:t,plotX:t,plotY:e,i:O+i}))};tb.eachAsync(B,(e,i)=>{let r=void 0===s.index,a,l,h,u,d,p,m=!1,b=!1,A=NaN,v=NaN,P=!0;return!r&&(G?(a=e[0],l=e[1],B[i+1]&&(A=B[i+1][0]),B[i-1]&&(v=B[i-1][0])):(a=e,l=c[i],B[i+1]&&(A=B[i+1]),B[i-1]&&(v=B[i-1])),A&&A>=g&&A<=f&&(m=!0),v&&v>=g&&v<=f&&(b=!0),_?(G&&(l=e.slice(1,3)),p=l[0],l=l[1]):N&&(a=e.x,p=(l=e.stackY)-e.y),d=null===l,z||(P=l>=x&&l<=y),!d&&(a>=g&&a<=f&&P||m||b)&&(h=Math.round(o.toPixels(a,!0)),T?((void 0===tr||h===Q)&&(_||(p=l),(void 0===ts||l>ti)&&(ti=l,ts=i),(void 0===tr||p<te)&&(te=p,tr=i)),h!==Q&&(void 0!==tr&&(u=n.toPixels(ti,!0),$=n.toPixels(te,!0),ta(h,w?Math.min(u,R):u,w?Math.max($,R):$,i),th(h,u,ts),$!==u&&th(h,$,tr)),tr=ts=void 0,Q=h)):(ta(h,u=Math.round(n.toPixels(l,!0)),$,i),th(h,u,i))),tt=d&&!I,i%5e4==0&&(t.boost&&t.boost.copy?t.boost.copy():t.chart.boost&&t.chart.boost.copy&&t.chart.boost.copy())),!r},function(){let i=s.loadingDiv,r=s.loadingShown;tn(),t.canvasToSVG(),l.timeRendering&&console.timeEnd("canvas rendering"),b(t,"renderedCanvas"),r&&(i.style.transition="opacity 250ms",i.opacity=0,s.loadingShown=!1,e=setTimeout(function(){i.parentNode&&i.parentNode.removeChild(i),s.loadingDiv=s.loadingSpan=null},250)),delete t.buildKDTree,t.buildKDTree()},s.renderer.forExport?Number.MAX_VALUE:void 0)}function d(t,e,i,r){t.moveTo(e,i),t.arc(e,i,r,0,2*Math.PI,!1)}function g(t,e,i,r){t.rect(e-r,i-r,2*r,2*r)}function f(){let t=this.chart,e=this.getContext(),i=this.chart.inverted,r=this.xAxis,s=this.yAxis;e?(this.points.forEach(o=>{let n=o.plotY;if(void 0!==n&&!isNaN(n)&&null!==o.y&&e){let{x:n=0,y:a=0,width:l=0,height:h=0}=o.shapeArgs||{};e.fillStyle=(t.styledMode?o.series.colorAttribs(o):o.series.pointAttribs(o)).fill,i?e.fillRect(s.len-a+r.left,r.len-n+s.top,-h,-l):e.fillRect(n+r.left,a+s.top,l,h)}}),this.canvasToSVG()):this.chart.showLoading("Your browser doesn't support HTML5 canvas, <br>please use a