"use strict";var TcHmiCharting;!function(TcHmiCharting){TcHmiCharting.Area=class{__canvas;__context=null;__backgroundColor=null;__drawingBorder=0;__areas=[];__areaPositionAndValue=[];__drawLineWithOnePixel=!1;constructor(canvas){this.__canvas=canvas,void 0!==this.__canvas?this.__context=this.__canvas.getContext("2d"):this.__context=null,this.__areaPositionAndValue=[]}draw(xAxis,yAxis){if(this.__areaPositionAndValue.splice(0,this.__areaPositionAndValue.length),null!==this.__context&&null!==this.__backgroundColor){let yAxisLineWidth=yAxis.getAxisWidth();if(null===yAxisLineWidth)return;let offsetTop=yAxis.getDiffEndLabelAndLine()+yAxisLineWidth/2+5+this.__drawingBorder,offsetLeft=xAxis.getXAxisLeftWidth()||0,xStartValue=xAxis.getMainTickStartValue();if(xAxis.getAutoScaling()){let valueOverride=xAxis.getMainTickStartValueOverride();null!==valueOverride&&(xStartValue=valueOverride)}if(null===xStartValue)return;let xAxisLabel=xAxis.getCalculatedNumbers(),xAxisMainTickSteps=xAxis.getMainTickSteps();if(null===xAxisMainTickSteps)return;let xCalc=xAxis.getLineWidth()/(xAxisLabel[xAxisMainTickSteps-1]-xAxisLabel[0]);this.__context.beginPath(),this.__context.fillStyle=this.__backgroundColor;let areas=[];for(let i=0,ii=this.__areas.length;ithis.__lineGraph[j].points[k].x*scaleFactor)&&(startValueX=this.__lineGraph[j].points[k].x*scaleFactor),(null===endValueX||endValueXNumber.MAX_SAFE_INTEGER?(overrideStartX-=.1*overrideStartX/100,overrideEndX+=.1*overrideEndX/100):startValueX===endValueX?(overrideStartX-=.5,overrideEndX+=.5):(overrideStartX=Math.floor(startValueX-1),overrideEndX=Math.ceil(endValueX+1)),this.__xAxis.setMainTickStartValueOverride(overrideStartX),this.__xAxis.setMainTickEndValueOverride(overrideEndX)}}if(this.__xAxis.drawAxis({x:0,y:canvasHeight},{x:canvasWidth,y:canvasHeight}),xAxisHeight=this.__xAxis.getHeight(),xAxisHeight>0?xAxisHeight+=10:xAxisHeight=defaultDistance,null!==this.__yAxis&&void 0!==this.__yAxis&&this.__yAxis.length>0){null!==this.__contextFrame&&this.__contextFrame.clearRect(0,0,canvasWidth,canvasHeight);let widthLeft=defaultDistance,widthRight=defaultDistance,showOnlyYAxis=!1,biggestFirst=0,biggestLatest=0,existsLogarithmicAxis=!1;for(let h=0,hh=this.__yAxis.length;hthis.__lineGraph[j].points[k].y*scaleFactor)&&(startValue=this.__lineGraph[j].points[k].y*scaleFactor),(null===endValue||endValueNumber.MAX_SAFE_INTEGER?(overrideStart-=.1*overrideStart/100,overrideEnd+=.1*overrideEnd/100):startValue===endValue?tempLineGraph.yAxis.getLogarithmicScale()?(overrideStart-=.1,overrideEnd+=1):(overrideStart-=.5,overrideEnd+=.5):(overrideStart=Math.floor(startValue-1),overrideEnd=Math.ceil(endValue+1)),this.__yAxis[h].setMainTickStartValueOverride(overrideStart),this.__yAxis[h].setMainTickEndValueOverride(overrideEnd)}}}let yAxis=this.__yAxis[h],labelArray=yAxis.getCalculatedLabels();if(yAxis.getShowAxis()&&yAxis.getShowLabels()){let callback=yAxis.getYAxisCallback(),mainTickSteps=yAxis.getMainTickSteps();if(null!==callback){if(void 0!==labelArray[0]&&null!==labelArray[0]){let first=yAxis.calculateLabelHeight(callback.apply(this,[parseFloat(labelArray[0])]));first>biggestFirst&&(biggestFirst=first)}if(null!==mainTickSteps&&void 0!==labelArray[mainTickSteps-1]&&null!==labelArray[mainTickSteps-1]){let latest=yAxis.calculateLabelHeight(callback.apply(this,[parseFloat(labelArray[mainTickSteps-1])]));latest>biggestLatest&&(biggestLatest=latest)}}else{if(void 0!==labelArray[0]&&null!==labelArray[0]){let first=yAxis.calculateLabelHeight(labelArray[0]);first>biggestFirst&&(biggestFirst=first)}if(null!==mainTickSteps&&void 0!==labelArray[mainTickSteps-1]&&null!==labelArray[mainTickSteps-1]){let latest=yAxis.calculateLabelHeight(labelArray[mainTickSteps-1]);latest>biggestLatest&&(biggestLatest=latest)}}}this.__yAxis[h].getLogarithmicScale()&&(existsLogarithmicAxis=!0)}for(let i=0,ii=this.__yAxis.length;i0?this.__xAxis.drawAxis({x:widthLeft+this.__drawingBorder,y:canvasHeight},{x:canvasWidth-widthRight-this.__drawingBorder,y:canvasHeight}):this.__xAxis.drawAxis({x:0,y:0},{x:0,y:0});let xAxisMainTickSteps=this.__xAxis.getMainTickSteps(),yAxisWidth=this.getYAxisWidth(),yAxisSubTickSteps=this.__ySubTickSteps,xAxisSubTickSteps=this.__xAxis.getSubTickSteps(),showGridHorizontal=!!this.__grid&&this.__grid.getShowHorizontalLines(),showGridVertical=!!this.__grid&&this.__grid.getShowVerticalLines(),showSubgridHorizontal=!!this.__subgrid&&this.__subgrid.getShowHorizontalLines(),showSubgridVertical=!!this.__subgrid&&this.__subgrid.getShowVerticalLines(),gridBackgroundColor=this.__grid?this.__grid.getBackgroundColor():null;if(yAxisWidth){if(this.__contextFrame&&gridBackgroundColor&&(this.__contextFrame.fillStyle=gridBackgroundColor,showOnlyYAxis?this.__contextFrame.fillRect(this.__xAxis.getXAxisLeftWidth()-this.__drawingBorder,canvasHeight-xAxisHeight-this.__yAxis[0].getDiffStartLabelAndLine()-yAxisWidth/2,this.__xAxis.getLineWidth()+2*this.__drawingBorder,-this.__yAxis[0].getLineHeight()-2*this.__drawingBorder):this.__contextFrame.fillRect(this.__xAxis.getXAxisLeftWidth()-this.__drawingBorder,canvasHeight-xAxisHeight-yAxisWidth/2,this.__xAxis.getLineWidth()+2*this.__drawingBorder,-this.__yAxis[0].getLineHeight()-2*this.__drawingBorder)),existsLogarithmicAxis||this.__xAxis.getLogarithmicScale()){let diffOnlyYAxis=0;showOnlyYAxis&&(diffOnlyYAxis=this.__yAxis[0].getDiffStartLabelAndLine());let horizontalStartForGridLines=[],horizontalStartForSubgridLines=[],beginY=canvasHeight-xAxisHeight-diffOnlyYAxis-this.__drawingBorder-yAxisWidth/2;for(let i=0,ii=this.__yAxis.length;i0){this.__contextDrawing&&this.__contextDrawing.clearRect(0,0,canvasWidth,canvasHeight);let canvasElem=this.__elementRoot.find(".TcHmi_Controls_Beckhoff_Controls-chart-canvas-drawing")[0];for(let i=0,ii=this.__lineGraph.length;i0?xAxisHeight+=10:xAxisHeight=defaultDistance;let diffOnlyYAxis=0;showOnlyYAxis&&(diffOnlyYAxis=this.__yAxis[0].getDiffStartLabelAndLine());let beginY=canvasHeight-xAxisHeight-diffOnlyYAxis-this.__drawingBorder-yAxisWidth/2;for(let i=0,ii=this.__referenceLines.length;ielem.getId()===yAxisId);if(-1!==index){let yAxis=this.__yAxis[index];if(yAxis)if("%"===this.__referenceLines[i].getValueUnit()){let valuePercent=this.__referenceLines[i].getValue()||0;if(valuePercent>=0&&valuePercent<=100){let diffPixel=yAxis.getLineHeight()*valuePercent/100,startPoint={x:this.__xAxis.getXAxisLeftWidth(),y:beginY-diffPixel},endPoint={x:this.__xAxis.getXAxisLeftWidth()+this.__xAxis.getLineWidth(),y:beginY-diffPixel};this.__referenceLines[i].drawLine(startPoint,endPoint)}}else{let value=this.__referenceLines[i].getValue()||0,yMainTickSteps=yAxis.getMainTickSteps();if(yAxis.getLogarithmicScale()&&yMainTickSteps&&yMainTickSteps>=2){let yAxisLength=yAxis.getLineHeight(),y=yAxisLength+(yAxis.getDiffEndLabelAndLine()+(yAxis.getAxisWidth()||0)/2+defaultDistance+this.__drawingBorder)-(Math.log10(value)-Number(yAxis.getCalculatedNumbers()[0].toExponential().split("e")[1]))*(yAxisLength/(yMainTickSteps-1)),startPoint={x:this.__xAxis.getXAxisLeftWidth(),y},endPoint={x:this.__xAxis.getXAxisLeftWidth()+this.__xAxis.getLineWidth(),y};this.__referenceLines[i].drawLine(startPoint,endPoint)}else{let startValue=yAxis.getMainTickStartValueOverride()||yAxis.getMainTickStartValue()||0,multiplier=Math.pow(10,yAxis.getDecimalPlaces()||0),min=Math.round(startValue*multiplier)/multiplier,endValue=yAxis.getMainTickEndValueOverride()||yAxis.getMainTickEndValue()||0,multiplierMax=Math.pow(10,yAxis.getDecimalPlaces()||0),max=Math.round(endValue*multiplierMax)/multiplierMax;if(value>=min&&value<=max){let diffPixel=(value-min)*(yAxis.getLineHeight()/(max-min)),startPoint={x:this.__xAxis.getXAxisLeftWidth(),y:beginY-diffPixel},endPoint={x:this.__xAxis.getXAxisLeftWidth()+this.__xAxis.getLineWidth(),y:beginY-diffPixel};this.__referenceLines[i].drawLine(startPoint,endPoint)}}}}}else{let offsetLeft=this.__xAxis.getXAxisLeftWidth()||0;if("%"===this.__referenceLines[i].getValueUnit()){let valuePercent=this.__referenceLines[i].getValue()||0;if(valuePercent>=0&&valuePercent<=100){let diffPixel=this.__xAxis.getLineWidth()*valuePercent/100,startPoint={x:offsetLeft+diffPixel,y:beginY},endPoint={x:offsetLeft+diffPixel,y:beginY-this.__yAxis[0].getLineHeight()};this.__referenceLines[i].drawLine(startPoint,endPoint)}}else{let value=this.__referenceLines[i].getValue()||0,xMainTickSteps=this.__xAxis.getMainTickSteps();if(this.__xAxis.getLogarithmicScale()&&xMainTickSteps&&xMainTickSteps>=2){let xAxisLength=this.__xAxis.getLineWidth(),x=offsetLeft+(Math.log10(value)-Number(this.__xAxis.getCalculatedNumbers()[0].toExponential().split("e")[1]))*(xAxisLength/(xMainTickSteps-1)),startPoint={x,y:beginY},endPoint={x,y:beginY-this.__yAxis[0].getLineHeight()};this.__referenceLines[i].drawLine(startPoint,endPoint)}else{let min=this.__xAxis.getMainTickStartValueOverride()||this.__xAxis.getMainTickStartValue()||0,max=this.__xAxis.getMainTickEndValueOverride()||this.__xAxis.getMainTickEndValue()||0;if(value>=min&&value<=max){let diffPixel=(value-min)*(this.__xAxis.getLineWidth()/(max-min)),startPoint={x:offsetLeft+diffPixel,y:beginY},endPoint={x:offsetLeft+diffPixel,y:beginY-this.__yAxis[0].getLineHeight()};this.__referenceLines[i].drawLine(startPoint,endPoint)}}}}}}}TcHmiCharting.LineChart=LineChart}(TcHmiCharting||(TcHmiCharting={})),function(TcHmiCharting){class LineAreaChart extends TcHmiCharting.IChart{__lineGraph;__lineGraphs;__lineChanged;__widthLeft=null;__drawingBorder=0;constructor(elementRoot,canvasWidth,canvasHeight,referenceLinesPosition){super(elementRoot,canvasWidth,canvasHeight,referenceLinesPosition),this.__lineGraph=[],this.__lineGraphs=[],this.__lineChanged=!1}deleteYAxis(index){for(let i=0,ii=this.__lineGraph.length;ithis.__lineGraph[j].points[k].x)&&(startValueX=this.__lineGraph[j].points[k].x),(null===endValueX||endValueXNumber.MAX_SAFE_INTEGER?(startValueX-=.1*startValueX/100,endValueX+=.1*endValueX/100):startValueX===endValueX&&(startValueX-=.5,endValueX+=.5),this.__xAxis.setMainTickStartValueOverride(startValueX),this.__xAxis.setMainTickEndValueOverride(endValueX))}if(this.__xAxis.drawAxis({x:0,y:canvasHeight},{x:canvasWidth,y:canvasHeight}),xAxisHeight=this.__xAxis.getHeight(),xAxisHeight>0?xAxisHeight+=10:xAxisHeight=defaultDistance,null!==this.__yAxis&&void 0!==this.__yAxis&&this.__yAxis.length>0){null!==this.__contextFrame&&this.__contextFrame.clearRect(0,0,canvasWidth,canvasHeight);let widthLeft=defaultDistance,widthRight=defaultDistance,showOnlyYAxis=!1,biggestFirst=0,biggestLatest=0;for(let h=0,hh=this.__yAxis.length;hyValue*scaleFactor)&&(startValue=yValue*scaleFactor),(null===endValue||yValue&&endValueNumber.MAX_SAFE_INTEGER?(overrideStart-=.1*overrideStart/100,overrideEnd+=.1*overrideEnd/100):tempLineGraph.yAxis.getLogarithmicScale()?(overrideStart-=.1,overrideEnd+=1):(overrideStart-=.5,overrideEnd+=.5):(overrideStart=Math.floor(startValue-1),overrideEnd=Math.ceil(endValue+1)),this.__yAxis[h].setMainTickStartValueOverride(overrideStart),this.__yAxis[h].setMainTickEndValueOverride(overrideEnd)}}}let yAxis=this.__yAxis[h],labelArray=yAxis.getCalculatedLabels();if(yAxis.getShowAxis()&&yAxis.getShowLabels()){let callback=yAxis.getYAxisCallback(),mainTickSteps=yAxis.getMainTickSteps();if(null!==callback){if(void 0!==labelArray[0]&&null!==labelArray[0]){let first=yAxis.calculateLabelHeight(callback.apply(this,[parseFloat(labelArray[0])]));first>biggestFirst&&(biggestFirst=first)}if(null!==mainTickSteps&&void 0!==labelArray[mainTickSteps-1]&&null!==labelArray[mainTickSteps-1]){let latest=yAxis.calculateLabelHeight(callback.apply(this,[parseFloat(labelArray[mainTickSteps-1])]));latest>biggestLatest&&(biggestLatest=latest)}}else{if(void 0!==labelArray[0]&&null!==labelArray[0]){let first=yAxis.calculateLabelHeight(labelArray[0]);first>biggestFirst&&(biggestFirst=first)}if(null!==mainTickSteps&&void 0!==labelArray[mainTickSteps-1]&&null!==labelArray[mainTickSteps-1]){let latest=yAxis.calculateLabelHeight(labelArray[mainTickSteps-1]);latest>biggestLatest&&(biggestLatest=latest)}}}}let existsLogarithmicAxis=!1;for(let i=0,ii=this.__yAxis.length;i0?this.__xAxis.drawAxis({x:widthLeft+this.__drawingBorder,y:canvasHeight},{x:canvasWidth-widthRight-this.__drawingBorder,y:canvasHeight}):this.__xAxis.drawAxis({x:0,y:0},{x:0,y:0});let xAxisMainTickSteps=this.__xAxis.getMainTickSteps(),yAxisMainTickSteps=this.__yMainTickSteps,xAxisWidth=this.__xAxis.getAxisWidth(),yAxisWidth=this.getYAxisWidth();if(null!==xAxisMainTickSteps&&null!==yAxisMainTickSteps&&null!==xAxisWidth&&null!==yAxisWidth){let xAxisSubTickSteps=this.__xAxis.getSubTickSteps(),yAxisSubTickSteps=this.__ySubTickSteps,showGridHorizontal=!!this.__grid&&this.__grid.getShowHorizontalLines(),showGridVertical=!!this.__grid&&this.__grid.getShowVerticalLines(),showSubgridHorizontal=!!this.__subgrid&&this.__subgrid.getShowHorizontalLines(),showSubgridVertical=!!this.__subgrid&&this.__subgrid.getShowVerticalLines(),gridBackgroundColor=this.__grid?this.__grid.getBackgroundColor():null;if(this.__contextFrame&&gridBackgroundColor&&(this.__contextFrame.fillStyle=gridBackgroundColor,showOnlyYAxis?this.__contextFrame.fillRect(this.__xAxis.getXAxisLeftWidth()-this.__drawingBorder,canvasHeight-xAxisHeight-this.__yAxis[0].getDiffStartLabelAndLine()-yAxisWidth/2,this.__xAxis.getLineWidth()+2*this.__drawingBorder,-this.__yAxis[0].getLineHeight()-2*this.__drawingBorder):this.__contextFrame.fillRect(this.__xAxis.getXAxisLeftWidth()-this.__drawingBorder,canvasHeight-xAxisHeight-yAxisWidth/2,this.__xAxis.getLineWidth()+2*this.__drawingBorder,-this.__yAxis[0].getLineHeight()-2*this.__drawingBorder)),existsLogarithmicAxis||this.__xAxis.getLogarithmicScale()){let diffOnlyYAxis=0;showOnlyYAxis&&(diffOnlyYAxis=this.__yAxis[0].getDiffStartLabelAndLine());let horizontalStartForGridLines=[],horizontalStartForSubgridLines=[],beginY=canvasHeight-xAxisHeight-diffOnlyYAxis-this.__drawingBorder-yAxisWidth/2;for(let i=0,ii=this.__yAxis.length;i0){this.__contextDrawing&&this.__contextDrawing.clearRect(0,0,canvasWidth,canvasHeight);let canvasElem=this.__elementRoot.find(".TcHmi_Controls_Beckhoff_Controls-chart-canvas-drawing")[0];for(let i=0,ii=this.__lineGraph.length;i0?xAxisHeight+=10:xAxisHeight=defaultDistance;let diffOnlyYAxis=0;showOnlyYAxis&&(diffOnlyYAxis=this.__yAxis[0].getDiffStartLabelAndLine());let beginY=canvasHeight-xAxisHeight-diffOnlyYAxis-this.__drawingBorder-yAxisWidth/2;for(let i=0,ii=this.__referenceLines.length;ielem.getId()===yAxisId);if(-1!==index){let yAxis=this.__yAxis[index];if(yAxis){let yMainTickSteps=yAxis.getMainTickSteps();if("%"===this.__referenceLines[i].getValueUnit()){let valuePercent=this.__referenceLines[i].getValue()||0;if(valuePercent>=0&&valuePercent<=100){let diffPixel=yAxis.getLineHeight()*valuePercent/100,startPoint={x:this.__xAxis.getXAxisLeftWidth(),y:beginY-diffPixel},endPoint={x:this.__xAxis.getXAxisLeftWidth()+this.__xAxis.getLineWidth(),y:beginY-diffPixel};this.__referenceLines[i].drawLine(startPoint,endPoint)}}else{let value=this.__referenceLines[i].getValue()||0;if(yAxis.getLogarithmicScale()&&yMainTickSteps&&yMainTickSteps>=2){let yAxisLength=yAxis.getLineHeight(),y=yAxisLength+(yAxis.getDiffEndLabelAndLine()+(yAxis.getAxisWidth()||0)/2+defaultDistance+this.__drawingBorder)-(Math.log10(value)-Number(yAxis.getCalculatedNumbers()[0].toExponential().split("e")[1]))*(yAxisLength/(yMainTickSteps-1)),startPoint={x:this.__xAxis.getXAxisLeftWidth(),y},endPoint={x:this.__xAxis.getXAxisLeftWidth()+this.__xAxis.getLineWidth(),y};this.__referenceLines[i].drawLine(startPoint,endPoint)}else{let startValue=yAxis.getMainTickStartValueOverride()||yAxis.getMainTickStartValue()||0,multiplier=Math.pow(10,yAxis.getDecimalPlaces()||0),min=Math.round(startValue*multiplier)/multiplier,endValue=yAxis.getMainTickEndValueOverride()||yAxis.getMainTickEndValue()||0,multiplierMax=Math.pow(10,yAxis.getDecimalPlaces()||0),max=Math.round(endValue*multiplierMax)/multiplierMax;if(value>=min&&value<=max){let diffPixel=(value-min)*(yAxis.getLineHeight()/(max-min)),startPoint={x:this.__xAxis.getXAxisLeftWidth(),y:beginY-diffPixel},endPoint={x:this.__xAxis.getXAxisLeftWidth()+this.__xAxis.getLineWidth(),y:beginY-diffPixel};this.__referenceLines[i].drawLine(startPoint,endPoint)}}}}}}else{let offsetLeft=this.__xAxis.getXAxisLeftWidth()||0,xAxisNumbers=this.__xAxis.getCalculatedNumbers();if("%"===this.__referenceLines[i].getValueUnit()){let valuePercent=this.__referenceLines[i].getValue()||0;if(valuePercent>=0&&valuePercent<=100){let diffPixel=this.__xAxis.getLineWidth()*valuePercent/100,startPoint={x:offsetLeft+diffPixel,y:beginY},endPoint={x:offsetLeft+diffPixel,y:beginY-this.__yAxis[0].getLineHeight()};this.__referenceLines[i].drawLine(startPoint,endPoint)}}else{let value=this.__referenceLines[i].getValue()||0,xMainTickSteps=this.__xAxis.getMainTickSteps();if(this.__xAxis.getLogarithmicScale()&&xMainTickSteps&&xMainTickSteps>=2){let xAxisLength=this.__xAxis.getLineWidth(),x=offsetLeft+(Math.log10(value)-Number(xAxisNumbers[0].toExponential().split("e")[1]))*(xAxisLength/(xMainTickSteps-1)),startPoint={x,y:beginY},endPoint={x,y:beginY-this.__yAxis[0].getLineHeight()};this.__referenceLines[i].drawLine(startPoint,endPoint)}else{let min=this.__xAxis.getMainTickStartValueOverride()||this.__xAxis.getMainTickStartValue()||0,max=this.__xAxis.getMainTickEndValueOverride()||this.__xAxis.getMainTickEndValue()||0;if(value>=min&&value<=max){let diffPixel=(value-min)*(this.__xAxis.getLineWidth()/(max-min)),startPoint={x:offsetLeft+diffPixel,y:beginY},endPoint={x:offsetLeft+diffPixel,y:beginY-this.__yAxis[0].getLineHeight()};this.__referenceLines[i].drawLine(startPoint,endPoint)}}}}}}}TcHmiCharting.LineAreaChart=LineAreaChart}(TcHmiCharting||(TcHmiCharting={})),function(TcHmiCharting){class BarChart extends TcHmiCharting.IChart{__barGraph;__barGraphs;__barChanged;__widthLeft=0;__calcBarWidth=0;__barWidth=null;__barGraphArrangement=null;__drawingBorder={height:0,width:0};constructor(elementRoot,canvasWidth,canvasHeight,referenceLinesPosition){super(elementRoot,canvasWidth,canvasHeight,referenceLinesPosition),this.__barGraph=[],this.__barGraphs=[],this.__barChanged=!1}deleteYAxis(index){for(let i=0,ii=this.__barGraph.length;iNumber.MAX_SAFE_INTEGER?(startValueX-=.1*startValueX/100,endValueX+=.1*endValueX/100):startValueX===endValueX&&(startValueX-=.5,endValueX+=.5),this.__xAxis.setMainTickStartValueOverride(startValueX),this.__xAxis.setMainTickEndValueOverride(endValueX))}if(this.__xAxis.drawAxis({x:0,y:canvasHeight},{x:canvasWidth,y:canvasHeight}),xAxisHeight=this.__xAxis.getHeight(),xAxisHeight>0?xAxisHeight+=10:xAxisHeight=defaultDistance,null!==this.__yAxis&&void 0!==this.__yAxis&&this.__yAxis.length>0){null!==this.__contextFrame&&this.__contextFrame.clearRect(0,0,canvasWidth,canvasHeight);let widthLeft=defaultDistance,widthRight=defaultDistance,showOnlyYAxis=!1,biggestFirst=0,biggestLatest=0;for(let h=0,hh=this.__yAxis.length;helem.yAxis&&elem.yAxis.getId()===this.__yAxis[h].getId());if(barGraphsWithYAxis.length>=1){const resultArr=[];for(let j=0,jj=barGraphsWithYAxis.length;jthis.__barGraph[j].values[k]*scaleFactor&&(startValue=this.__barGraph[j].values[k]*scaleFactor),(null===endValue||endValueNumber.MAX_SAFE_INTEGER?(overrideStart-=.1*overrideStart/100,overrideEnd+=.1*overrideEnd/100):(overrideStart-=.5,overrideEnd+=.5):(overrideStart=startValue,overrideEnd=endValue),this.__yAxis[h].setMainTickStartValueOverride(overrideStart),this.__yAxis[h].setMainTickEndValueOverride(overrideEnd)}}}let yAxis=this.__yAxis[h],labelArray=yAxis.getCalculatedLabels();if(yAxis.getShowAxis()&&yAxis.getShowLabels()){let callback=yAxis.getYAxisCallback(),mainTickSteps=yAxis.getMainTickSteps();if(null!==callback){if(void 0!==labelArray[0]&&null!==labelArray[0]){let first=yAxis.calculateLabelHeight(callback.apply(this,[parseFloat(labelArray[0])]));first>biggestFirst&&(biggestFirst=first)}if(null!==mainTickSteps&&void 0!==labelArray[mainTickSteps-1]&&null!==labelArray[mainTickSteps-1]){let latest=yAxis.calculateLabelHeight(callback.apply(this,[parseFloat(labelArray[mainTickSteps-1])]));latest>biggestLatest&&(biggestLatest=latest)}}else{if(void 0!==labelArray[0]&&null!==labelArray[0]){let first=yAxis.calculateLabelHeight(labelArray[0]);first>biggestFirst&&(biggestFirst=first)}if(null!==mainTickSteps&&void 0!==labelArray[mainTickSteps-1]&&null!==labelArray[mainTickSteps-1]){let latest=yAxis.calculateLabelHeight(labelArray[mainTickSteps-1]);latest>biggestLatest&&(biggestLatest=latest)}}}}for(let i=0,ii=this.__yAxis.length;i0?this.__xAxis.drawAxis({x:widthLeft+this.__drawingBorder.width,y:canvasHeight},{x:canvasWidth-widthRight-this.__drawingBorder.width,y:canvasHeight}):this.__xAxis.drawAxis({x:0,y:0},{x:0,y:0});let xAxisLabel=this.__xAxis.getCalculatedNumbers(),xAxisMainTickSteps=this.__xAxis.getMainTickSteps(),barWdithDrawingBorder=0;if(null===this.__barWidth)if(this.__barGraphArrangement===TcHmiCharting.BarGraph.BarGraphArrangement.Overlapped||this.__barGraphArrangement===TcHmiCharting.BarGraph.BarGraphArrangement.Stacked)if(this.__barGraph.length>0)if(null!==xAxisMainTickSteps&&xAxisMainTickSteps>1&&0!==xAxisLabel.length){let xCalc=this.__xAxis.getLineWidth()/(xAxisLabel[xAxisMainTickSteps-1]-xAxisLabel[0]);this.__calcBarWidth=Math.floor(Math.floor(xCalc)*(2/3)),this.__calcBarWidth<1&&(this.__calcBarWidth=1),barWdithDrawingBorder=this.__calcBarWidth}else this.__calcBarWidth=1,barWdithDrawingBorder=this.__calcBarWidth;else this.__calcBarWidth=0,barWdithDrawingBorder=this.__calcBarWidth;else if(this.__barGraph.length>0)if(null!==xAxisMainTickSteps&&xAxisMainTickSteps>1&&0!==xAxisLabel.length){let xCalc=this.__xAxis.getLineWidth()/(xAxisLabel[xAxisMainTickSteps-1]-xAxisLabel[0]);if(this.__barGraph.length>0){let placeForAllBars=Math.floor(Math.floor(xCalc)*(2/3));barWdithDrawingBorder=placeForAllBars,this.__calcBarWidth=(placeForAllBars-2*(this.__barGraph.length-1))/this.__barGraph.length}else this.__calcBarWidth=Math.floor(Math.floor(xCalc)*(2/3)),barWdithDrawingBorder=this.__calcBarWidth;this.__calcBarWidth<1&&(this.__calcBarWidth=1,barWdithDrawingBorder=this.__calcBarWidth)}else this.__calcBarWidth=1,barWdithDrawingBorder=this.__calcBarWidth;else this.__calcBarWidth=0,barWdithDrawingBorder=this.__calcBarWidth;else this.__barGraphArrangement===TcHmiCharting.BarGraph.BarGraphArrangement.Overlapped||this.__barGraphArrangement===TcHmiCharting.BarGraph.BarGraphArrangement.Stacked?barWdithDrawingBorder=this.__barWidth:(barWdithDrawingBorder=this.__barWidth,this.__barGraph.length>1&&(barWdithDrawingBorder=2*((this.__barGraph.length-1)/2*2+this.__barGraph.length/2*this.__barWidth)));let gridLineWidth=0;null!==this.__grid&&(gridLineWidth=this.__grid.getLineWidth()||0,gridLineWidth/=2),this.__drawingBorder.width=gridLineWidth>barWdithDrawingBorder/2?gridLineWidth:barWdithDrawingBorder/2,this.__drawingBorder.height=gridLineWidth>defaultDistance?gridLineWidth:defaultDistance,this.__drawingBorder.width0?this.__xAxis.drawAxis({x:widthLeft+this.__drawingBorder.width,y:canvasHeight},{x:canvasWidth-widthRight-this.__drawingBorder.width,y:canvasHeight}):this.__xAxis.drawAxis({x:0,y:0},{x:0,y:0}),null===this.__barWidth)if(this.__barGraphArrangement===TcHmiCharting.BarGraph.BarGraphArrangement.Overlapped||this.__barGraphArrangement===TcHmiCharting.BarGraph.BarGraphArrangement.Stacked)if(this.__barGraph.length>0)if(null!==xAxisMainTickSteps&&xAxisMainTickSteps>1&&0!==xAxisLabel.length){let xCalc=this.__xAxis.getLineWidth()/(xAxisLabel[xAxisMainTickSteps-1]-xAxisLabel[0]);this.__calcBarWidth=Math.floor(Math.floor(xCalc)*(2/3)),this.__calcBarWidth<1&&(this.__calcBarWidth=1)}else this.__calcBarWidth=1;else this.__calcBarWidth=0;else if(this.__barGraph.length>0)if(null!==xAxisMainTickSteps&&xAxisMainTickSteps>1&&0!==xAxisLabel.length){let xCalc=this.__xAxis.getLineWidth()/(xAxisLabel[xAxisMainTickSteps-1]-xAxisLabel[0]);if(this.__barGraph.length>0){let placeForAllBars=Math.floor(Math.floor(xCalc)*(2/3));this.__calcBarWidth=(placeForAllBars-2*(this.__barGraph.length-1))/this.__barGraph.length}else this.__calcBarWidth=Math.floor(Math.floor(xCalc)*(2/3));this.__calcBarWidth<1&&(this.__calcBarWidth=1)}else this.__calcBarWidth=1;else this.__calcBarWidth=0;let yAxisMainTickSteps=this.__yAxis[0].getMainTickSteps(),xAxisWidth=this.__xAxis.getAxisWidth(),yAxisWidth=this.getYAxisWidth();if(null!==xAxisMainTickSteps&&null!==yAxisMainTickSteps&&null!==xAxisWidth&&null!==yAxisWidth){let xAxisSubTickSteps=this.__xAxis.getSubTickSteps(),yAxisSubTickSteps=this.__ySubTickSteps,showGridHorizontal=!!this.__grid&&this.__grid.getShowHorizontalLines(),showGridVertical=!!this.__grid&&this.__grid.getShowVerticalLines(),showSubgridHorizontal=!!this.__subgrid&&this.__subgrid.getShowHorizontalLines(),showSubgridVertical=!!this.__subgrid&&this.__subgrid.getShowVerticalLines(),gridBackgroundColor=this.__grid?this.__grid.getBackgroundColor():null;if(((showGridHorizontal||showGridVertical)&&this.__grid&&null!==this.__grid.getLineColor()&&null!==this.__grid.getLineWidth()&&null!==this.__grid.getLineStyle()||(showSubgridHorizontal&&null!==yAxisSubTickSteps||showSubgridVertical&&null!==xAxisSubTickSteps)&&this.__subgrid&&null!==this.__subgrid.getLineColor()&&null!==this.__subgrid.getLineWidth()&&null!==this.__subgrid.getLineStyle())&&this.__contextFrame&&gridBackgroundColor&&(this.__contextFrame.fillStyle=gridBackgroundColor,showOnlyYAxis?this.__contextFrame.fillRect(this.__xAxis.getXAxisLeftWidth()-this.__drawingBorder.width,canvasHeight-xAxisHeight-this.__yAxis[0].getDiffStartLabelAndLine()-yAxisWidth/2,this.__xAxis.getLineWidth()+2*this.__drawingBorder.width,-this.__yAxis[0].getLineHeight()-2*this.__drawingBorder.height):this.__contextFrame.fillRect(this.__xAxis.getXAxisLeftWidth()-this.__drawingBorder.width,canvasHeight-xAxisHeight-yAxisWidth/2,this.__xAxis.getLineWidth()+2*this.__drawingBorder.width,-this.__yAxis[0].getLineHeight()-2*this.__drawingBorder.height)),this.__yAxis[0].getLogarithmicScale()){let horizontalSubgridLines=[],logarithmicPoints=this.__yAxis[0].getLogarithmicYPointsForSubgrid();for(let i=0,ii=logarithmicPoints.length;i=0&&valuePercent<=100){let diffPixel=this.__yAxis[0].getLineHeight()*valuePercent/100,startPoint={x:this.__xAxis.getXAxisLeftWidth(),y:beginY-diffPixel},endPoint={x:this.__xAxis.getXAxisLeftWidth()+this.__xAxis.getLineWidth(),y:beginY-diffPixel};this.__referenceLines[i].drawLine(startPoint,endPoint)}}else{let value=this.__referenceLines[i].getValue()||0,yMainTickSteps=this.__yAxis[0].getMainTickSteps();if(this.__yAxis[0].getLogarithmicScale()&&yMainTickSteps&&yMainTickSteps>=2){let yAxisLength=this.__yAxis[0].getLineHeight(),y=yAxisLength+(this.__yAxis[0].getDiffEndLabelAndLine()+(this.__yAxis[0].getAxisWidth()||0)/2+defaultDistance+this.__drawingBorder.height)-(Math.log10(value)-Number(this.__yAxis[0].getCalculatedNumbers()[0].toExponential().split("e")[1]))*(yAxisLength/(yMainTickSteps-1)),startPoint={x:this.__xAxis.getXAxisLeftWidth(),y},endPoint={x:this.__xAxis.getXAxisLeftWidth()+this.__xAxis.getLineWidth(),y};this.__referenceLines[i].drawLine(startPoint,endPoint)}else{let startValue=this.__yAxis[0].getMainTickStartValueOverride()||this.__yAxis[0].getMainTickStartValue()||0,multiplier=Math.pow(10,this.__yAxis[0].getDecimalPlaces()||0),min=Math.round(startValue*multiplier)/multiplier,endValue=this.__yAxis[0].getMainTickEndValueOverride()||this.__yAxis[0].getMainTickEndValue()||0,multiplierMax=Math.pow(10,this.__yAxis[0].getDecimalPlaces()||0),max=Math.round(endValue*multiplierMax)/multiplierMax;if(value>=min&&value<=max){let diffPixel=(value-min)*(this.__yAxis[0].getLineHeight()/(max-min)),startPoint={x:this.__xAxis.getXAxisLeftWidth(),y:beginY-diffPixel},endPoint={x:this.__xAxis.getXAxisLeftWidth()+this.__xAxis.getLineWidth(),y:beginY-diffPixel};this.__referenceLines[i].drawLine(startPoint,endPoint)}}}else{let offsetLeft=this.__xAxis.getXAxisLeftWidth()||0;if("%"===this.__referenceLines[i].getValueUnit()){let valuePercent=this.__referenceLines[i].getValue()||0;if(valuePercent>=0&&valuePercent<=100){let diffPixel=this.__xAxis.getLineWidth()*valuePercent/100,startPoint={x:offsetLeft+diffPixel,y:beginY},endPoint={x:offsetLeft+diffPixel,y:beginY-this.__yAxis[0].getLineHeight()};this.__referenceLines[i].drawLine(startPoint,endPoint)}}else{let value=this.__referenceLines[i].getValue()||0,xMainTickSteps=this.__xAxis.getMainTickSteps();if(this.__xAxis.getLogarithmicScale()&&xMainTickSteps&&xMainTickSteps>=2){let xAxisLength=this.__xAxis.getLineWidth(),x=offsetLeft+(Math.log10(value)-Number(this.__xAxis.getCalculatedNumbers()[0].toExponential().split("e")[1]))*(xAxisLength/(xMainTickSteps-1)),startPoint={x,y:beginY},endPoint={x,y:beginY-this.__yAxis[0].getLineHeight()};this.__referenceLines[i].drawLine(startPoint,endPoint)}else{let min=this.__xAxis.getMainTickStartValueOverride()||this.__xAxis.getMainTickStartValue()||0,max=this.__xAxis.getMainTickEndValueOverride()||this.__xAxis.getMainTickEndValue()||0;if(value>=min&&value<=max){let diffPixel=(value-min)*(this.__xAxis.getLineWidth()/(max-min)),startPoint={x:offsetLeft+diffPixel,y:beginY},endPoint={x:offsetLeft+diffPixel,y:beginY-this.__yAxis[0].getLineHeight()};this.__referenceLines[i].drawLine(startPoint,endPoint)}}}}}}this.__barChanged=!0,this.__widthLeft=this.__xAxis.getXAxisLeftWidth()}}if(this.__barChanged)if(null!==this.__yAxis&&void 0!==this.__yAxis)if(this.__yAxis.length>0){null!==this.__contextDrawing&&null!==this.__canvasDrawing&&this.__contextDrawing.clearRect(0,0,canvasWidth,canvasHeight);const canvasElem=this.__elementRoot.find(".TcHmi_Controls_Beckhoff_Controls-chart-canvas-drawing")[0];let minValues=[];this.__barGraph.length>=1&&this.__barGraphArrangement===TcHmiCharting.HorizontalBarGraph.BarGraphArrangement.Stacked&&(minValues=new Array(this.__barGraph[0].values.length).fill(0));for(let i=0,ii=this.__barGraph.length;i0){if(null!==this.__mainTickEndValueOverride&&null!==this.__mainTickStartValueOverride&&null!==this.__decimalPlaces){let mainTickWidth=Math.abs(this.__mainTickStartValueOverride-this.__mainTickEndValueOverride)/(this.__mainTickSteps-1);for(let i=0;i<=this.__mainTickSteps-1;i++){let multiplier=Math.pow(10,this.__decimalPlaces),value=i*mainTickWidth+this.__mainTickStartValueOverride,roundedValue=Math.round(value*multiplier)/multiplier;if(this.__axisLabeling===IAxis.AxisLabeling.Number)labelArray.push(roundedValue+unitString);else if(this.__axisLabeling===IAxis.AxisLabeling.Scientific)labelArray.push(value.toExponential(this.__decimalPlaces)+unitString);else{let exponentialValue=value.toExponential(this.__decimalPlaces);roundedValue.toString().length<=exponentialValue.length?labelArray.push(roundedValue+unitString):labelArray.push(exponentialValue+unitString)}}return labelArray}if(null!==this.__mainTickStartValue&&null!==this.__mainTickEndValue&&null!==this.__decimalPlaces){let mainTickWidth=Math.abs(this.__mainTickStartValue-this.__mainTickEndValue)/(this.__mainTickSteps-1);for(let i=0;i<=this.__mainTickSteps-1;i++){let multiplier=Math.pow(10,this.__decimalPlaces),value=i*mainTickWidth+this.__mainTickStartValue,roundedValue=Math.round(value*multiplier)/multiplier;if(this.__axisLabeling===IAxis.AxisLabeling.Number)labelArray.push(roundedValue+unitString);else if(this.__axisLabeling===IAxis.AxisLabeling.Scientific)labelArray.push(value.toExponential(this.__decimalPlaces)+unitString);else{let exponentialValue=value.toExponential(this.__decimalPlaces);roundedValue.toString().length<=exponentialValue.length?labelArray.push(roundedValue+unitString):labelArray.push(exponentialValue+unitString)}}return labelArray}}}else if(1===this.__mainTickSteps){if(null!==this.__mainTickStartValue&&null!==this.__decimalPlaces){let multiplier=Math.pow(10,this.__decimalPlaces),value=this.__mainTickStartValue,roundedValue=Math.round(value*multiplier)/multiplier;if(this.__axisLabeling===IAxis.AxisLabeling.Number)labelArray.push(roundedValue+unitString);else if(this.__axisLabeling===IAxis.AxisLabeling.Scientific)labelArray.push(value.toExponential(this.__decimalPlaces)+unitString);else{let exponentialValue=value.toExponential(this.__decimalPlaces);roundedValue.toString().length<=exponentialValue.length?labelArray.push(roundedValue+unitString):labelArray.push(exponentialValue+unitString)}return labelArray}}else if(this.__mainTickSteps>0&&null!==this.__mainTickStartValue&&null!==this.__mainTickEndValue&&null!==this.__decimalPlaces){let mainTickWidth=Math.abs(this.__mainTickStartValue-this.__mainTickEndValue)/(this.__mainTickSteps-1),multiplier=Math.pow(10,this.__decimalPlaces);for(let i=0;i<=this.__mainTickSteps-1;i++){let value=i*mainTickWidth+this.__mainTickStartValue,roundedValue=Math.round(value*multiplier)/multiplier;if(this.__axisLabeling===IAxis.AxisLabeling.Number)labelArray.push(roundedValue+unitString);else if(this.__axisLabeling===IAxis.AxisLabeling.Scientific)labelArray.push(value.toExponential(this.__decimalPlaces)+unitString);else{let exponentialValue=value.toExponential(this.__decimalPlaces);roundedValue.toString().length<=exponentialValue.length?labelArray.push(roundedValue+unitString):labelArray.push(exponentialValue+unitString)}}return labelArray}}return labelArray}getCalculatedNumbers(){let labelArray=[];if(null!==this.__mainTickSteps){if(this.__logarithmicScale){let min=1,max=1;null!==this.__mainTickStartValueOverride?min=this.__mainTickStartValueOverride:null!==this.__mainTickStartValue&&(min=this.__mainTickStartValue),null!==this.__mainTickEndValueOverride?max=this.__mainTickEndValueOverride:null!==this.__mainTickEndValue&&(max=this.__mainTickEndValue);let logarithmicExpo=this.ScaleLogarithmic([min,max],this.__mainTickSteps-1),diff=logarithmicExpo[1]-logarithmicExpo[0]+1;if(this.setMainTickSteps(diff),1===logarithmicExpo.length)labelArray.push(logarithmicExpo[0]);else{let mainTickWidth=Math.abs(logarithmicExpo[0]-logarithmicExpo[1])/(this.__mainTickSteps-1);for(let i=0;i<=this.__mainTickSteps-1;i++){let logNumber=Math.pow(10,logarithmicExpo[0]+mainTickWidth*i).toPrecision(1);labelArray.push(Number(logNumber))}}return labelArray}if(this.__autoScaling){if(1===this.__mainTickSteps){if(null!==this.__mainTickStartValueOverride&&null!==this.__decimalPlaces){let multiplier=Math.pow(10,this.__decimalPlaces),roundedValue=Math.round(this.__mainTickStartValueOverride*multiplier)/multiplier;labelArray.push(roundedValue)}else if(null!==this.__mainTickStartValue&&null!==this.__decimalPlaces){let multiplier=Math.pow(10,this.__decimalPlaces),roundedValue=Math.round(this.__mainTickStartValue*multiplier)/multiplier;labelArray.push(roundedValue)}}else if(this.__mainTickSteps>0)if(null!==this.__mainTickEndValueOverride&&null!==this.__mainTickStartValueOverride&&null!==this.__decimalPlaces){let mainTickWidth=Math.abs(this.__mainTickStartValueOverride-this.__mainTickEndValueOverride)/(this.__mainTickSteps-1);for(let i=0;i<=this.__mainTickSteps-1;i++){let multiplier=Math.pow(10,this.__decimalPlaces),roundedValue=Math.round((i*mainTickWidth+this.__mainTickStartValueOverride)*multiplier)/multiplier;labelArray.push(roundedValue)}}else if(null!==this.__mainTickStartValue&&null!==this.__mainTickEndValue&&null!==this.__decimalPlaces){let mainTickWidth=Math.abs(this.__mainTickStartValue-this.__mainTickEndValue)/(this.__mainTickSteps-1);for(let i=0;i<=this.__mainTickSteps-1;i++){let multiplier=Math.pow(10,this.__decimalPlaces),roundedValue=Math.round((i*mainTickWidth+this.__mainTickStartValue)*multiplier)/multiplier;labelArray.push(roundedValue)}}return labelArray}if(1===this.__mainTickSteps){if(null!==this.__mainTickStartValue&&null!==this.__decimalPlaces){let multiplier=Math.pow(10,this.__decimalPlaces),roundedValue=Math.round(this.__mainTickStartValue*multiplier)/multiplier;labelArray.push(roundedValue)}}else if(this.__mainTickSteps>0&&null!==this.__mainTickStartValue&&null!==this.__mainTickEndValue&&null!==this.__decimalPlaces){let mainTickWidth=Math.abs(this.__mainTickStartValue-this.__mainTickEndValue)/(this.__mainTickSteps-1);for(let i=0;i<=this.__mainTickSteps-1;i++){let multiplier=Math.pow(10,this.__decimalPlaces),roundedValue=Math.round((i*mainTickWidth+this.__mainTickStartValue)*multiplier)/multiplier;labelArray.push(roundedValue)}}return labelArray}return labelArray}ScaleLogarithmic(connectedRange,divisions){let minValue=connectedRange[0],maxValue=connectedRange[connectedRange.length-1];if(0===divisions)return[1];if(0===maxValue&&(maxValue=1),0===minValue){let maxDeka=this.GetDekade(maxValue),enlargeRange=1;do{minValue=Math.pow(10,maxDeka-divisions*enlargeRange++)}while(minValue>1)}if(maxValuemaxValue?-minValue:maxValue,minValue=Math.pow(10,this.GetDekade(maxValue)-divisions)));let mindekade=this.GetDekade(minValue);Math.pow(10,mindekade)>minValue&&mindekade--;let maxdekade=this.GetDekade(maxValue);Math.pow(10,maxdekade)0&&(startPixelDiffBetweenMain=(endPoint.x-startPoint.x)/(this.__mainTickSteps-1));let subTickSteps=0;null!==this.__subTickSteps&&(subTickSteps=this.__subTickSteps);let pixelDiffBetweenMain=startPixelDiffBetweenMain,pixelDiffBetweenSub=pixelDiffBetweenMain/(subTickSteps+1),leftWidth=0;null!==this.__xAxisCallback?this.__showLabels&&void 0!==labelArray[0]&&null!==labelArray[0]&&(leftWidth=this.calculateLabelWidth(this.__xAxisCallback.apply(this,[parseFloat(labelArray[0])]))):this.__showLabels&&void 0!==labelArray[0]&&null!==labelArray[0]&&(leftWidth=this.calculateLabelWidth(labelArray[0]));let rightWidth=0;if(null!==this.__xAxisCallback?this.__showLabels&&void 0!==labelArray[labelArray.length-1]&&null!==labelArray[labelArray.length-1]&&(rightWidth=this.calculateLabelWidth(this.__xAxisCallback.apply(this,[parseFloat(labelArray[labelArray.length-1])]))):this.__showLabels&&void 0!==labelArray[labelArray.length-1]&&null!==labelArray[labelArray.length-1]&&(rightWidth=this.calculateLabelWidth(labelArray[labelArray.length-1])),this.__axisWidth0&&labelArray.length>0){if(null!==this.__labelFontSize){let highestLabel=1.2*this.__labelFontSize;startPoint.y=startPoint.y-highestLabel/2-height;let xPoint=startPoint.x,yPoint=startPoint.y;if(null!==this.__context&&this.__showAxis&&null!==this.__labelFontWeight&&null!==this.__labelFontSize&&null!==this.__labelFontFamily&&null!==this.__labelFontColor){for(let i=0;i<=this.__mainTickSteps-1;i++){if(this.__context.font=this.__labelFontWeight+" "+this.__labelFontSize+this.__labelFontSizeUnit+" "+this.__labelFontFamily,this.__context.fillStyle=this.__labelFontColor,this.__context.textAlign="center",this.__context.textBaseline="alphabetic",this.__context.beginPath(),null!==this.__xAxisCallback){let formattedValue=this.__xAxisCallback.apply(this,[parseFloat(labelArray[i])]);null===formattedValue&&(formattedValue=""),this.__context.fillText(formattedValue,xPoint,yPoint)}else this.__context.fillText(labelArray[i],xPoint,yPoint);xPoint+=pixelDiffBetweenMain}this.__context.stroke()}startPoint.y=startPoint.y-highestLabel/2-5}}else startPoint.y=startPoint.y-5-height;if(this.__mainTickSteps>0&&this.__showAxis&&null!==this.__context&&null!==this.__axisColor){this.__context.strokeStyle=this.__axisColor,this.__context.lineWidth=this.__axisWidth,this.__context.setLineDash([]),this.__context.beginPath(),this.__logarithmicXPointsForSubgrid=[];for(let i=0;i<=this.__mainTickSteps-1;i++)if(0===i?(this.__context.moveTo((0|startPoint.x)+(this.__axisWidth%2==0?0:.5),0|startPoint.y),this.__context.lineTo((0|startPoint.x)+(this.__axisWidth%2==0?0:.5),(startPoint.y-mainTickLength|0)+(this.__axisWidth%2==0?0:.5))):i===this.__mainTickSteps?(startPoint.x=startPoint.x+pixelDiffBetweenMain,this.__context.lineTo((0|startPoint.x)+(this.__axisWidth%2==0?0:.5),(startPoint.y-mainTickLength|0)+(this.__axisWidth%2==0?0:.5)),this.__context.lineTo((0|startPoint.x)+(this.__axisWidth%2==0?0:.5),0|startPoint.y)):(startPoint.x=startPoint.x+pixelDiffBetweenMain,this.__context.lineTo((0|startPoint.x)+(this.__axisWidth%2==0?0:.5),(startPoint.y-mainTickLength|0)+(this.__axisWidth%2==0?0:.5)),this.__context.lineTo((0|startPoint.x)+(this.__axisWidth%2==0?0:.5),0|startPoint.y),this.__context.moveTo((0|startPoint.x)+(this.__axisWidth%2==0?0:.5),(startPoint.y-mainTickLength|0)+(this.__axisWidth%2==0?0:.5))),pixelDiffBetweenMain=startPixelDiffBetweenMain,i<=this.__mainTickSteps-2&&0!==this.__subTickSteps&&this.__showSubTicks&&null!==this.__subTickSteps)if(this.__logarithmicScale){let diffPerTick=(calculatedNumbers[i+1]-calculatedNumbers[i])/(this.__subTickSteps+1);for(let j=0;j<=this.__subTickSteps-1;j++){let value=calculatedNumbers[i]+diffPerTick*(j+1),pixelDiff=(Math.log10(value)-Number(calculatedNumbers[i].toExponential().split("e")[1]))*startPixelDiffBetweenMain;startPoint.x=beginX+pixelDiff+startPixelDiffBetweenMain*i,this.__context.lineTo((0|startPoint.x)+(this.__axisWidth%2==0?0:.5),(startPoint.y-mainTickLength|0)+(this.__axisWidth%2==0?0:.5)),this.__context.lineTo((0|startPoint.x)+(this.__axisWidth%2==0?0:.5),startPoint.y-(mainTickLength-subTickLength)|0),this.__context.moveTo((0|startPoint.x)+(this.__axisWidth%2==0?0:.5),(startPoint.y-mainTickLength|0)+(this.__axisWidth%2==0?0:.5)),j===this.__subTickSteps-1&&(pixelDiffBetweenMain-=pixelDiff),this.__logarithmicXPointsForSubgrid.push(startPoint.x)}}else for(let j=0;j<=this.__subTickSteps-1;j++)startPoint.x=startPoint.x+pixelDiffBetweenSub,this.__context.lineTo((0|startPoint.x)+(this.__axisWidth%2==0?0:.5),(startPoint.y-mainTickLength|0)+(this.__axisWidth%2==0?0:.5)),this.__context.lineTo((0|startPoint.x)+(this.__axisWidth%2==0?0:.5),startPoint.y-(mainTickLength-subTickLength)|0),this.__context.moveTo((0|startPoint.x)+(this.__axisWidth%2==0?0:.5),(startPoint.y-mainTickLength|0)+(this.__axisWidth%2==0?0:.5)),pixelDiffBetweenMain-=pixelDiffBetweenSub;this.__context.stroke()}if(this.__diffStartLabelAndLine=0,this.__diffEndLabelAndLine=0,this.__showLabels)if(this.__mainTickSteps>0){let calculatedLabelWidthStart=0;calculatedLabelWidthStart=null!==this.__xAxisCallback?this.calculateLabelWidth(this.__xAxisCallback.apply(this,[parseFloat(labelArray[0])])):this.calculateLabelWidth(labelArray[0]),this.__axisWidth0&&(startPixelDiffBetweenMain=(startPoint.y-endPoint.y)/(this.__mainTickSteps-1));let subTickSteps=0;null!==this.__subTickSteps&&(subTickSteps=this.__subTickSteps);let pixelDiffBetweenMain=startPixelDiffBetweenMain,pixelDiffBetweenSub=pixelDiffBetweenMain/(subTickSteps+1),longestLabelWidth=this.getLongestTextWidth(),height=0;if(showOnlyYAxis&&this.__axisWidth0&&labelArray.length>0){let yPoint=startPoint.y;if(this.__axisWidth0&&null!==this.__context&&this.__showAxis&&null!==this.__axisColor){this.__context.strokeStyle=this.__axisColor,this.__context.lineWidth=this.__axisWidth,this.__context.setLineDash([]),this.__context.beginPath(),this.__logarithmicYPointsForSubgrid=[];for(let i=0;i<=this.__mainTickSteps-1;i++)if(0===i?(this.__context.moveTo(startPoint.x+(longestLabelWidth+5)+height|0,(0|startPoint.y)+(this.__axisWidth%2==0?0:.5)),this.__context.lineTo((startPoint.x+(longestLabelWidth+5)+height+mainTickLength|0)+(this.__axisWidth%2==0?0:.5),(0|startPoint.y)+(this.__axisWidth%2==0?0:.5))):i===this.__mainTickSteps?(startPoint.y=startPoint.y-pixelDiffBetweenMain,this.__context.lineTo((startPoint.x+(longestLabelWidth+5)+mainTickLength+height|0)+(this.__axisWidth%2==0?0:.5),(0|startPoint.y)+(this.__axisWidth%2==0?0:.5)),this.__context.lineTo(startPoint.x+(longestLabelWidth+5)+height|0,(0|startPoint.y)+(this.__axisWidth%2==0?0:.5))):(startPoint.y=startPoint.y-pixelDiffBetweenMain,this.__context.lineTo((startPoint.x+(longestLabelWidth+5)+mainTickLength+height|0)+(this.__axisWidth%2==0?0:.5),(0|startPoint.y)+(this.__axisWidth%2==0?0:.5)),this.__context.lineTo(startPoint.x+(longestLabelWidth+5)+height|0,(0|startPoint.y)+(this.__axisWidth%2==0?0:.5)),this.__context.moveTo((startPoint.x+(longestLabelWidth+5)+mainTickLength+height|0)+(this.__axisWidth%2==0?0:.5),(0|startPoint.y)+(this.__axisWidth%2==0?0:.5))),pixelDiffBetweenMain=startPixelDiffBetweenMain,i<=this.__mainTickSteps-2&&0!==this.__subTickSteps&&this.__showSubTicks&&null!==this.__subTickSteps)if(this.__logarithmicScale){let diffPerTick=(calculatedNumbers[i+1]-calculatedNumbers[i])/(this.__subTickSteps+1);for(let j=0;j<=this.__subTickSteps-1;j++){let value=calculatedNumbers[i]+diffPerTick*(j+1),pixelDiff=(Math.log10(value)-Number(calculatedNumbers[i].toExponential().split("e")[1]))*startPixelDiffBetweenMain;startPoint.y=beginY-pixelDiff-startPixelDiffBetweenMain*i,this.__context.lineTo((startPoint.x+(longestLabelWidth+5)+mainTickLength+height|0)+(this.__axisWidth%2==0?0:.5),(0|startPoint.y)+(this.__axisWidth%2==0?0:.5)),this.__context.lineTo(startPoint.x+(longestLabelWidth+5)+(mainTickLength-subTickLength)+height|0,(0|startPoint.y)+(this.__axisWidth%2==0?0:.5)),this.__context.moveTo((startPoint.x+(longestLabelWidth+5)+mainTickLength+height|0)+(this.__axisWidth%2==0?0:.5),(0|startPoint.y)+(this.__axisWidth%2==0?0:.5)),j===this.__subTickSteps-1&&(pixelDiffBetweenMain-=pixelDiff),this.__logarithmicYPointsForSubgrid.push(startPoint.y)}}else for(let j=0;j<=this.__subTickSteps-1;j++)startPoint.y=startPoint.y-pixelDiffBetweenSub,this.__context.lineTo((startPoint.x+(longestLabelWidth+5)+mainTickLength+height|0)+(this.__axisWidth%2==0?0:.5),(0|startPoint.y)+(this.__axisWidth%2==0?0:.5)),this.__context.lineTo(startPoint.x+(longestLabelWidth+5)+(mainTickLength-subTickLength)+height|0,(0|startPoint.y)+(this.__axisWidth%2==0?0:.5)),this.__context.moveTo((startPoint.x+(longestLabelWidth+5)+mainTickLength+height|0)+(this.__axisWidth%2==0?0:.5),(0|startPoint.y)+(this.__axisWidth%2==0?0:.5)),pixelDiffBetweenMain-=pixelDiffBetweenSub;this.__context.stroke()}}else{if(this.__showAxisName&&null!==this.__axisName&&(height=this.calculateAxisNameHeight(this.__axisName),this.__showAxis&&null!==this.__context&&null!==this.__axisNameFontWeight&&null!==this.__axisNameFontSize&&null!==this.__axisNameFontFamily&&null!==this.__axisNameFontColor&&(this.__context.save(),this.__context.font=this.__axisNameFontWeight+" "+this.__axisNameFontSize+this.__axisNameFontSizeUnit+" "+this.__axisNameFontFamily,this.__context.fillStyle=this.__axisNameFontColor,this.__context.beginPath(),this.__context.textAlign="center",this.__context.textBaseline="middle",this.__context.translate(startPoint.x-height/2,startPoint.y-(startPoint.y-endPoint.y)/2),this.__context.rotate(-.5*Math.PI),this.__context.fillText(this.__axisName,0,0),this.__context.stroke(),this.__context.restore()),height+=3),this.__showLabels&&this.__mainTickSteps>0&&labelArray.length>0){let yPoint=startPoint.y;if(this.__axisWidth0&&null!==this.__context&&this.__showAxis&&null!==this.__axisColor){this.__context.strokeStyle=this.__axisColor,this.__context.lineWidth=this.__axisWidth,this.__context.setLineDash([]),this.__context.beginPath(),this.__logarithmicYPointsForSubgrid=[];for(let i=0;i<=this.__mainTickSteps-1;i++)if(0===i?(this.__context.moveTo(startPoint.x-longestLabelWidth+diffLineAndText-height|0,(0|startPoint.y)+(this.__axisWidth%2==0?0:.5)),this.__context.lineTo((startPoint.x-longestLabelWidth+diffLineAndText-mainTickLength-height|0)+(this.__axisWidth%2==0?0:.5),(0|startPoint.y)+(this.__axisWidth%2==0?0:.5))):i===this.__mainTickSteps?(startPoint.y=startPoint.y-pixelDiffBetweenMain,this.__context.lineTo((startPoint.x-longestLabelWidth+diffLineAndText-mainTickLength-height|0)+(this.__axisWidth%2==0?0:.5),(0|startPoint.y)+(this.__axisWidth%2==0?0:.5)),this.__context.lineTo(startPoint.x-longestLabelWidth+diffLineAndText-height|0,(0|startPoint.y)+(this.__axisWidth%2==0?0:.5))):(startPoint.y=startPoint.y-pixelDiffBetweenMain,this.__context.lineTo((startPoint.x-longestLabelWidth+diffLineAndText-mainTickLength-height|0)+(this.__axisWidth%2==0?0:.5),(0|startPoint.y)+(this.__axisWidth%2==0?0:.5)),this.__context.lineTo(startPoint.x-longestLabelWidth+diffLineAndText-height|0,(0|startPoint.y)+(this.__axisWidth%2==0?0:.5)),this.__context.moveTo((startPoint.x-longestLabelWidth+diffLineAndText-mainTickLength-height|0)+(this.__axisWidth%2==0?0:.5),(0|startPoint.y)+(this.__axisWidth%2==0?0:.5))),pixelDiffBetweenMain=startPixelDiffBetweenMain,i<=this.__mainTickSteps-2&&0!==this.__subTickSteps&&this.__showSubTicks&&null!==this.__subTickSteps)if(this.__logarithmicScale){let diffPerTick=(calculatedNumbers[i+1]-calculatedNumbers[i])/(this.__subTickSteps+1);for(let j=0;j<=this.__subTickSteps-1;j++){let value=calculatedNumbers[i]+diffPerTick*(j+1),pixelDiff=(Math.log10(value)-Number(calculatedNumbers[i].toExponential().split("e")[1]))*startPixelDiffBetweenMain;startPoint.y=beginY-pixelDiff-startPixelDiffBetweenMain*i,this.__context.lineTo((startPoint.x-longestLabelWidth+diffLineAndText-mainTickLength-height|0)+(this.__axisWidth%2==0?0:.5),(0|startPoint.y)+(this.__axisWidth%2==0?0:.5)),this.__context.lineTo(startPoint.x-longestLabelWidth+diffLineAndText-(mainTickLength-subTickLength)-height|0,(0|startPoint.y)+(this.__axisWidth%2==0?0:.5)),this.__context.moveTo((startPoint.x-longestLabelWidth+diffLineAndText-mainTickLength-height|0)+(this.__axisWidth%2==0?0:.5),(0|startPoint.y)+(this.__axisWidth%2==0?0:.5)),j===this.__subTickSteps-1&&(pixelDiffBetweenMain-=pixelDiff),this.__logarithmicYPointsForSubgrid.push(startPoint.y)}}else for(let j=0;j<=this.__subTickSteps-1;j++)startPoint.y=startPoint.y-pixelDiffBetweenSub,this.__context.lineTo((startPoint.x-longestLabelWidth+diffLineAndText-mainTickLength-height|0)+(this.__axisWidth%2==0?0:.5),(0|startPoint.y)+(this.__axisWidth%2==0?0:.5)),this.__context.lineTo(startPoint.x-longestLabelWidth+diffLineAndText-(mainTickLength-subTickLength)-height|0,(0|startPoint.y)+(this.__axisWidth%2==0?0:.5)),this.__context.moveTo((startPoint.x-longestLabelWidth+diffLineAndText-mainTickLength-height|0)+(this.__axisWidth%2==0?0:.5),(0|startPoint.y)+(this.__axisWidth%2==0?0:.5)),pixelDiffBetweenMain-=pixelDiffBetweenSub;this.__context.stroke()}}this.__height=beginY-endY,this.__diffStartLabelAndLine=0,this.__diffEndLabelAndLine=0,this.__mainTickSteps>0?(this.__width=longestLabelWidth+5+mainTickLength+this.__axisWidth/2+height,this.__axisWidthwidth&&(width=metrics.width)}}return labelArray.splice(0,labelArray.length),width}return 0}setPosition(position){this.__position=position}getPosition(){return this.__position}setAxisName(axisName){this.__axisName=axisName}getHeight(){return this.__height}getWidth(){return this.__width}getLineHeight(){return this.__lineHeight}getDiffStartLabelAndLine(){return this.__diffStartLabelAndLine}getDiffEndLabelAndLine(){return this.__diffEndLabelAndLine}setYAxisCallback(callback){this.__yAxisCallback=callback}getYAxisCallback(){return this.__yAxisCallback}getLogarithmicYPointsForSubgrid(){return this.__logarithmicYPointsForSubgrid}}TcHmiCharting.YAxis=YAxis}(TcHmiCharting||(TcHmiCharting={})),function(TcHmiCharting){class IGrid{__showHorizontalLines=!0;__showVerticalLines=!0;__lineWidth=null;__lineColor=null;__lineStyle=null;__backgroundColor=null;__canvas;__context=null;constructor(canvas){this.__canvas=canvas,this.__context=canvas.getContext("2d")}setLineWidth(lineWidth){this.__lineWidth=null===lineWidth||lineWidth<=0?null:lineWidth}getLineWidth(){return this.__lineWidth}setBackgroundColor(backgroundColor){this.__backgroundColor=backgroundColor}getBackgroundColor(){return this.__backgroundColor}setLineColor(lineColor){this.__lineColor=lineColor}getLineColor(){return this.__lineColor}setLineStyle(lineStyle){this.__lineStyle=lineStyle}getLineStyle(){return this.__lineStyle}setShowVerticalLines(showVerticalLines){this.__showVerticalLines=showVerticalLines}getShowVerticalLines(){return this.__showVerticalLines}setShowHorizontalLines(showHorizontalLines){this.__showHorizontalLines=showHorizontalLines}getShowHorizontalLines(){return this.__showHorizontalLines}}TcHmiCharting.IGrid=IGrid,function(IGrid){let LineStyle;!function(LineStyle){LineStyle[LineStyle.Dotted=0]="Dotted",LineStyle[LineStyle.Dashed=1]="Dashed",LineStyle[LineStyle.Solid=2]="Solid"}(LineStyle=IGrid.LineStyle||(IGrid.LineStyle={}))}(IGrid=TcHmiCharting.IGrid||(TcHmiCharting.IGrid={}))}(TcHmiCharting||(TcHmiCharting={})),function(TcHmiCharting){class Grid extends TcHmiCharting.IGrid{constructor(canvas){super(canvas)}draw(startPoint,width,height,numberOfWidthLines,numberOfHeightLines,drawingBorder){if(null!==this.__context){if(null===this.__lineColor||null===this.__lineWidth)return;if(startPoint.x=startPoint.x+drawingBorder.width,startPoint.y=startPoint.y-drawingBorder.height,this.__context.beginPath(),this.__context.strokeStyle=this.__lineColor,this.__context.lineWidth=this.__lineWidth,this.__lineStyle){if(TcHmiCharting.IGrid.LineStyle[this.__lineStyle]===TcHmiCharting.IGrid.LineStyle.Solid?(this.__context.setLineDash([]),this.__context.lineCap="butt"):TcHmiCharting.IGrid.LineStyle[this.__lineStyle]===TcHmiCharting.IGrid.LineStyle.Dashed?(this.__context.lineCap="butt",1!==this.__lineWidth?this.__context.setLineDash([this.__lineWidth,this.__lineWidth]):this.__context.setLineDash([this.__lineWidth,2])):TcHmiCharting.IGrid.LineStyle[this.__lineStyle]===TcHmiCharting.IGrid.LineStyle.Dotted&&(this.__context.lineCap="round",this.__context.setLineDash([1,2*this.__lineWidth])),this.__showVerticalLines){let yStart=startPoint.y;if(TcHmiCharting.IGrid.LineStyle[this.__lineStyle]===TcHmiCharting.IGrid.LineStyle.Dotted&&(yStart-=this.__lineWidth/2),1===numberOfWidthLines)this.__context.moveTo((0|startPoint.x)+(this.__lineWidth%2==0?0:.5),(yStart+(this.__lineWidth/2|0)|0)-(this.__lineWidth%2==0?0:.5)),this.__context.lineTo((0|startPoint.x)+(this.__lineWidth%2==0?0:.5),(yStart-height+(this.__lineWidth/2|0)|0)-(this.__lineWidth%2==0?0:.5));else{let xDiff=width/(numberOfWidthLines-1);for(let i=0;i!!elem.filterInstance&&elem.filterInstance.test(value));if(firstElemFromRange&&firstElemFromRange.color)return firstElemFromRange.color.color}return defaultColor}getFillColorFromColorRanges(colorRanges,value,defaultFillColor){if(colorRanges){let firstElemFromRange=colorRanges.find(elem=>!!elem.filterInstance&&elem.filterInstance.test(value));if(firstElemFromRange&&firstElemFromRange.fillColor)return firstElemFromRange.fillColor.color}return defaultFillColor}},function(FillMode){FillMode[FillMode.None=0]="None",FillMode[FillMode.HorizontalZero=1]="HorizontalZero",FillMode[FillMode.Bottom=2]="Bottom",FillMode[FillMode.Top=3]="Top",FillMode[FillMode.Center=4]="Center",FillMode[FillMode.Source=5]="Source",FillMode[FillMode.ReferenceLine=6]="ReferenceLine"}(FillMode=TcHmiCharting.FillMode||(TcHmiCharting.FillMode={}))}(TcHmiCharting||(TcHmiCharting={})),function(TcHmiCharting){class LineGraph extends TcHmiCharting.IGraph{__lineWidth=null;__lineColor=null;__pointDot=!1;__pointDotRadius=null;__pointDotFillColor=null;__pointDotStrokeWidth=null;__pointDotStrokeColor=null;__points=[];__drawingBorder=0;__xScaleFactor=1;__yScaleFactor=1;__fillMode=TcHmiCharting.FillMode.None;__fillColor=null;__fillTransparency=null;__colorRanges=null;__fillModeReferenceLine=null;constructor(canvas){super(canvas),this.__points=[]}draw(line,xAxis){if(this.__points.splice(0,this.__points.length),null!==line.yAxis){let yAxisLineWidth=line.yAxis.getAxisWidth();if(null===yAxisLineWidth)return;let offsetTop=line.yAxis.getDiffEndLabelAndLine()+yAxisLineWidth/2+5+this.__drawingBorder,offsetLeft=xAxis.getXAxisLeftWidth()||0,xStartValue=xAxis.getMainTickStartValue();if(xAxis.getAutoScaling()){let valueOverride=xAxis.getMainTickStartValueOverride();null!==valueOverride&&(xStartValue=valueOverride)}if(null===xStartValue)return;let yStartValue=line.yAxis.getMainTickStartValue();if(line.yAxis.getAutoScaling()){let valueOverride=line.yAxis.getMainTickStartValueOverride();null!==valueOverride&&(yStartValue=valueOverride)}if(null===yStartValue)return;let xAxisLabel=xAxis.getCalculatedNumbers(),yAxisLabel=line.yAxis.getCalculatedNumbers(),xAxisMainTickSteps=xAxis.getMainTickSteps();if(null===xAxisMainTickSteps)return;let yAxisMainTickSteps=line.yAxis.getMainTickSteps();if(null===yAxisMainTickSteps)return;let xAxisLength=xAxis.getLineWidth(),xCalc=xAxisLength/(xAxisLabel[xAxisMainTickSteps-1]-xAxisLabel[0]),yAxisLength=line.yAxis.getLineHeight(),yCalc=yAxisLength/(yAxisLabel[yAxisMainTickSteps-1]-yAxisLabel[0]),zeroPoint={x:(0-xStartValue)*xCalc+offsetLeft,y:yAxisLength-(0-yStartValue)*yCalc+offsetTop};line.yAxis.getLogarithmicScale()&&(zeroPoint.y=TcHmiCharting.IAxis.LOGARITHMIC_Y_MINIMUM),xAxis.getLogarithmicScale()&&(zeroPoint.x=TcHmiCharting.IAxis.LOGARITHMIC_X_MINIMUM);let fillModePoint=zeroPoint;if(this.__fillMode===TcHmiCharting.FillMode.ReferenceLine&&this.__fillModeReferenceLine){let yAxisLineWidthFillMode=this.__fillModeReferenceLine.yAxis.getAxisWidth(),yStartValueFillMode=this.__fillModeReferenceLine.yAxis.getAutoScaling()&&null!==this.__fillModeReferenceLine.yAxis.getMainTickStartValueOverride()?this.__fillModeReferenceLine.yAxis.getMainTickStartValueOverride():this.__fillModeReferenceLine.yAxis.getMainTickStartValue(),yAxisLabelFillMode=this.__fillModeReferenceLine.yAxis.getCalculatedNumbers(),yAxisMainTickStepsFillMode=this.__fillModeReferenceLine.yAxis.getMainTickSteps(),yAxisLengthFillMode=this.__fillModeReferenceLine.yAxis.getLineHeight();if(null!==yAxisLineWidthFillMode&&null!==yStartValueFillMode&&null!==yAxisMainTickStepsFillMode){let offsetTopFillMode=this.__fillModeReferenceLine.yAxis.getDiffEndLabelAndLine()+yAxisLineWidthFillMode/2+5+this.__drawingBorder,yCalcFillMode=yAxisLengthFillMode/(yAxisLabelFillMode[yAxisMainTickStepsFillMode-1]-yAxisLabelFillMode[0]);fillModePoint={x:(0-xStartValue)*xCalc+offsetLeft,y:yAxisLengthFillMode-(this.__fillModeReferenceLine.value-yStartValueFillMode)*yCalcFillMode+offsetTopFillMode},this.__fillModeReferenceLine.yAxis.getLogarithmicScale()&&(fillModePoint.y=TcHmiCharting.IAxis.LOGARITHMIC_Y_MINIMUM),xAxis.getLogarithmicScale()&&(fillModePoint.x=TcHmiCharting.IAxis.LOGARITHMIC_X_MINIMUM)}}let points=[];for(let i=0,ii=line.points.length-1;i<=ii;i++){let x=(line.points[i].x*this.__xScaleFactor-xStartValue)*xCalc+offsetLeft,y=yAxisLength-(line.points[i].y*this.__yScaleFactor-yStartValue)*yCalc+offsetTop;line.yAxis.getLogarithmicScale()&&0!==line.points[i].y&&yAxisMainTickSteps>=2?y=yAxisLength+offsetTop-(Math.log10(line.points[i].y*this.__yScaleFactor)-Number(yAxisLabel[0].toExponential().split("e")[1]))*(yAxisLength/(yAxisMainTickSteps-1)):line.yAxis.getLogarithmicScale()&&0===line.points[i].y?y=TcHmiCharting.IAxis.LOGARITHMIC_Y_MINIMUM:y>this.__canvas.height+TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW?y=TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW:y<-1*TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW&&(y=-1*TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW),xAxis.getLogarithmicScale()&&0!==line.points[i].x&&xAxisMainTickSteps>=2?x=offsetLeft+(Math.log10(line.points[i].x*this.__xScaleFactor)-Number(xAxisLabel[0].toExponential().split("e")[1]))*(xAxisLength/(xAxisMainTickSteps-1)):xAxis.getLogarithmicScale()&&0===line.points[i].y&&(x=TcHmiCharting.IAxis.LOGARITHMIC_X_MINIMUM),points.push({xPosition:0|x,yPosition:0|y,xValue:line.points[i].x*this.__xScaleFactor,yValue:line.points[i].y*this.__yScaleFactor})}if(null!==this.__context&&void 0!==this.__canvas){if(this.__colorRanges&&this.__colorRanges.length>0){let checkpointsFromColorRanges=[],diff=(yAxisLabel[yAxisMainTickSteps-1]-yAxisLabel[0])/yAxisMainTickSteps/1e3;for(let elem of this.__colorRanges)if(elem.filterInstance){let allFilter=elem.filterInstance.getFilter();for(let t of allFilter)if(TcHmi.isComparison(t)){let value=Number(t.value);checkpointsFromColorRanges.push(value,value-diff,value+diff)}}checkpointsFromColorRanges.sort((a,b)=>a-b);const coloredSegments=this.getColoredSegments(points,checkpointsFromColorRanges,this.__colorRanges,this.__lineColor??"",this.__fillColor??"");for(const{segment,lineColor,fillColor}of coloredSegments){this.__context.beginPath(),this.__context.strokeStyle=lineColor,this.__context.lineWidth=this.__lineWidth,this.__context.setLineDash([]),this.__context.moveTo(segment[0].xPosition,segment[0].yPosition);for(let i=1;i0){this.__context.beginPath(),this.__context.strokeStyle=this.__pointDotStrokeColor,this.__context.lineWidth=2*this.__pointDotRadius+this.__pointDotStrokeWidth,this.__context.lineCap="round";for(let i=0,ii=points.length-1;i<=ii;i++)this.__context.moveTo(points[i].xPosition,points[i].yPosition),this.__context.lineTo(points[i].xPosition,points[i].yPosition);this.__context.stroke()}if("None"!==this.__pointDotFillColor&&null!==this.__pointDotFillColor&&void 0!==this.__pointDotFillColor){this.__context.beginPath(),this.__context.strokeStyle=this.__pointDotFillColor,this.__context.lineWidth=2*this.__pointDotRadius,this.__context.lineCap="round";for(let i=0,ii=points.length-1;i<=ii;i++)this.__context.moveTo(points[i].xPosition,points[i].yPosition),this.__context.lineTo(points[i].xPosition,points[i].yPosition);this.__context.stroke()}}let canvasWidth=this.__canvas.width/window.devicePixelRatio,canvasHeight=this.__canvas.height/window.devicePixelRatio;this.__context.clearRect(0,0,canvasWidth,offsetTop-this.__drawingBorder),this.__context.clearRect(0,0,offsetLeft-this.__drawingBorder,canvasHeight),this.__context.clearRect(0,canvasHeight,canvasWidth,-(canvasHeight-yAxisLength-offsetTop-this.__drawingBorder)),this.__context.clearRect(canvasWidth,0,-(canvasWidth-offsetLeft-xAxisLength-this.__drawingBorder),canvasHeight),this.__points=points.splice(0),points.splice(0,points.length)}}}getColoredSegments(points,checkpoints,colorRanges,defaultLineColor,defaultFillColor){const segments=[];let currentSegment=[points[0]],prevY=points[0].yValue,prevX=points[0].xValue,prevPoint=points[0];for(let i=1;iprevYprevY&&ccurrY&&ccurrY);prevY>currY?relevantCheckpoints.sort((a,b)=>b-a):relevantCheckpoints.sort((a,b)=>a-b);let lastX=prevX,lastY=prevY,lastPoint=prevPoint;for(const checkpoint of relevantCheckpoints){const t=(checkpoint-lastY)/(currY-lastY),xInterp=lastX+t*(currX-lastX),yInterp=checkpoint,interpPoint={xPosition:lastPoint.xPosition+t*(currPoint.xPosition-lastPoint.xPosition),yPosition:lastPoint.yPosition+t*(currPoint.yPosition-lastPoint.yPosition),xValue:xInterp,yValue:yInterp};currentSegment.push(interpPoint);const lineColor=this.getColorFromColorRanges(colorRanges,checkpoint,defaultLineColor),fillColor=this.getFillColorFromColorRanges(colorRanges,checkpoint,defaultFillColor);segments.push({segment:currentSegment,lineColor,fillColor}),currentSegment=[interpPoint],lastX=xInterp,lastY=yInterp,lastPoint=interpPoint}currentSegment.push(currPoint),prevY=currY,prevX=currX,prevPoint=currPoint}const lastLineColor=this.getColorFromColorRanges(colorRanges,points[points.length-1].yValue,defaultLineColor),lastFillColor=this.getFillColorFromColorRanges(colorRanges,points[points.length-1].yValue,defaultFillColor);return segments.push({segment:currentSegment,lineColor:lastLineColor,fillColor:lastFillColor}),segments}renderFillSegment(points,fillColor,offsetTop,offsetLeft,xAxisLength,yAxisLength,zeroPoint,fillModePoint){if(this.__context&&this.__fillTransparency&&fillColor&&this.__fillMode!==TcHmiCharting.FillMode.None){this.__context.save(),this.__context.beginPath(),this.__context.moveTo(points[0].xPosition,points[0].yPosition);for(let i=1;ix.getBackgroundColor()===this.__areas[i].backgroundColor);if(0===foundedArea.length){areas.push(new TcHmiCharting.Area(this.__canvas));let newArea=areas[areas.length-1];newArea.setBackgroundColor(this.__areas[i].backgroundColor),newArea.setDrawLineWithOnePixel(this.__areas[i].drawLineWithOnePixel),newArea.addArea({beginX:this.__areas[i].beginX,endX:this.__areas[i].endX})}else foundedArea[0].addArea({beginX:this.__areas[i].beginX,endX:this.__areas[i].endX})}let allAreaPositionAndValues=[];for(let h=0,hh=areas.length;h=2?y=yAxisLength+offsetTop-(Math.log10(yValue*this.__scaleFactor)-Number(yAxisLabel[0].toExponential().split("e")[1]))*(yAxisLength/(yAxisMainTickSteps-1)):line.yAxis.getLogarithmicScale()&&0===yValue?y=TcHmiCharting.IAxis.LOGARITHMIC_Y_MINIMUM:y>this.__canvas.height+TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW?y=TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW:y<-1*TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW&&(y=-1*TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW),points.push({xPosition:x,yPosition:y,xValue:line.points[j].x,yValue:yValue*this.__scaleFactor})}}let coloredSegments=[];if(this.__colorRanges){let checkpointsFromColorRanges=[],diff=(yAxisLabel[yAxisMainTickSteps-1]-yAxisLabel[0])/yAxisMainTickSteps/1e3;for(let elem of this.__colorRanges)if(elem.filterInstance){let allFilter=elem.filterInstance.getFilter();for(let t of allFilter)if(TcHmi.isComparison(t)){let value=Number(t.value);checkpointsFromColorRanges.push(value,value-diff,value+diff)}}checkpointsFromColorRanges.sort((a,b)=>a-b);let segmentStart=0;for(let i=1;i<=points.length;i++)if(i===points.length||!line.points[i-1].bindPoints){let segmentPoints=points.slice(segmentStart,i);if(segmentPoints.length>1){let segs=this.getColoredSegments(segmentPoints,checkpointsFromColorRanges,this.__colorRanges,this.__lineColor??"",this.__fillColor??"");coloredSegments.push(...segs)}segmentStart=i}}else{let segmentStart=0;for(let i=1;i<=points.length;i++)if(i===points.length||!line.points[i-1].bindPoints){let segmentPoints=points.slice(segmentStart,i);segmentPoints.length>1&&coloredSegments.push({segment:segmentPoints,lineColor:this.__lineColor??"",fillColor:this.__fillColor??""}),segmentStart=i}}for(const{segment,lineColor,fillColor}of coloredSegments){this.__context.beginPath(),this.__context.strokeStyle=lineColor,this.__context.lineWidth=this.__lineWidth,this.__context.setLineDash([]),this.__context.moveTo(segment[0].xPosition,segment[0].yPosition);for(let i=1;i0){this.__context.beginPath(),this.__context.strokeStyle=this.__pointDotStrokeColor,this.__context.lineWidth=2*this.__pointDotRadius+this.__pointDotStrokeWidth,this.__context.lineCap="round";for(let m=0,mm=points.length;mprevYprevY&&ccurrY&&ccurrY);prevY>currY?relevantCheckpoints.sort((a,b)=>b-a):relevantCheckpoints.sort((a,b)=>a-b);let lastX=prevX,lastY=prevY,lastPoint=prevPoint;for(const checkpoint of relevantCheckpoints){const t=(checkpoint-lastY)/(currY-lastY),xInterp=lastX+t*(currX-lastX),yInterp=checkpoint,interpPoint={xPosition:lastPoint.xPosition+t*(currPoint.xPosition-lastPoint.xPosition),yPosition:lastPoint.yPosition+t*(currPoint.yPosition-lastPoint.yPosition),xValue:xInterp,yValue:yInterp};currentSegment.push(interpPoint);const lineColor=this.getColorFromColorRanges(colorRanges,checkpoint,defaultLineColor),fillColor=this.getFillColorFromColorRanges(colorRanges,checkpoint,defaultFillColor);segments.push({segment:currentSegment,lineColor,fillColor}),currentSegment=[interpPoint],lastX=xInterp,lastY=yInterp,lastPoint=interpPoint}currentSegment.push(currPoint),prevY=currY,prevX=currX,prevPoint=currPoint}const lastLineColor=this.getColorFromColorRanges(colorRanges,points[points.length-1].yValue,defaultLineColor),lastFillColor=this.getFillColorFromColorRanges(colorRanges,points[points.length-1].yValue,defaultFillColor);return segments.push({segment:currentSegment,lineColor:lastLineColor,fillColor:lastFillColor}),segments}renderFillSegment(points,fillColor,offsetTop,offsetLeft,xAxisLength,yAxisLength,zeroPoint,fillModePoint){if(this.__context&&this.__fillTransparency&&fillColor&&this.__fillMode!==TcHmiCharting.FillMode.None){this.__context.save(),this.__context.beginPath(),this.__context.moveTo(points[0].xPosition,points[0].yPosition);for(let i=1;i=2?yAxisLength+offsetTop-(Math.log10(bar.values[i]*this.__scaleFactor)-Number(yAxisLabel[0].toExponential().split("e")[1]))*(yAxisLength/(yAxisMainTickSteps-1)):yAxisLength-(bar.values[i]*this.__scaleFactor-yStartValue)*yCalc+offsetTop,y>this.__canvas.height+TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW?y=TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW:y<-1*TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW&&(y=-1*TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW),this.__context.fillStyle=this.getColorFromColorRanges(this.__colorRanges,bar.values[i],this.__barColor),this.__context.fillRect(x,yBegin,this.__barWidth,y-yBegin)}}let canvasWidth=this.__canvas.width/window.devicePixelRatio,canvasHeight=this.__canvas.height/window.devicePixelRatio;this.__context.clearRect(0,0,canvasWidth,offsetTop-this.__drawingBorder.height),this.__context.clearRect(0,0,offsetLeft-this.__drawingBorder.width,canvasHeight),this.__context.clearRect(0,canvasHeight,canvasWidth,-(canvasHeight-yAxisLength-offsetTop-this.__drawingBorder.height)),this.__context.clearRect(canvasWidth,0,-(canvasWidth-offsetLeft-xAxisLegth-this.__drawingBorder.width),canvasHeight)}}}drawClustered(bar,xAxis,index){if(null!==bar.yAxis){let yAxisWidth=bar.yAxis.getAxisWidth();if(null===yAxisWidth)return;let offsetTop=bar.yAxis.getDiffEndLabelAndLine()+yAxisWidth/2+5+this.__drawingBorder.height,offsetLeft=xAxis.getXAxisLeftWidth()||0,xStartValue=xAxis.getMainTickStartValue();if(xAxis.getAutoScaling()){let valueOverride=xAxis.getMainTickStartValueOverride();null!==valueOverride&&(xStartValue=valueOverride)}if(null===xStartValue)return;let yStartValue=bar.yAxis.getMainTickStartValue();if(bar.yAxis.getAutoScaling()){let valueOverride=bar.yAxis.getMainTickStartValueOverride();null!==valueOverride&&(yStartValue=valueOverride)}if(null===yStartValue)return;let xAxisLabel=xAxis.getCalculatedNumbers(),yAxisLabel=bar.yAxis.getCalculatedNumbers(),xAxisMainTickSteps=xAxis.getMainTickSteps();if(null===xAxisMainTickSteps)return;let yAxisMainTickSteps=bar.yAxis.getMainTickSteps();if(null===yAxisMainTickSteps)return;let xAxisLegth=xAxis.getLineWidth(),xCalc=xAxisLegth/(xAxisLabel[xAxisMainTickSteps-1]-xAxisLabel[0]),yAxisLength=bar.yAxis.getLineHeight(),yCalc=yAxisLength/(yAxisLabel[yAxisMainTickSteps-1]-yAxisLabel[0]);if(null!==this.__context&&void 0!==this.__canvas){if(null!==this.__barWidth&&null!==this.__barColor){this.__context.beginPath();let yBegin=yAxisLength-(0-yStartValue)*yCalc+offsetTop;for(let i=0,ii=bar.values.length-1;i<=ii;i++){let y,x=(i-xStartValue)*xCalc+offsetLeft-this.__drawingBorder.width+2*index+index*this.__barWidth;y=bar.yAxis.getLogarithmicScale()&&0!==bar.values[i]&&yAxisMainTickSteps>=2?yAxisLength+offsetTop-(Math.log10(bar.values[i]*this.__scaleFactor)-Number(yAxisLabel[0].toExponential().split("e")[1]))*(yAxisLength/(yAxisMainTickSteps-1)):yAxisLength-(bar.values[i]*this.__scaleFactor-yStartValue)*yCalc+offsetTop,y>this.__canvas.height+TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW?y=TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW:y<-1*TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW&&(y=-1*TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW),this.__context.fillStyle=this.getColorFromColorRanges(this.__colorRanges,bar.values[i],this.__barColor),this.__context.fillRect(x,yBegin,this.__barWidth,y-yBegin)}}let canvasWidth=this.__canvas.width/window.devicePixelRatio,canvasHeight=this.__canvas.height/window.devicePixelRatio;this.__context.clearRect(0,0,canvasWidth,offsetTop-this.__drawingBorder.height),this.__context.clearRect(0,0,offsetLeft-this.__drawingBorder.width,canvasHeight),this.__context.clearRect(0,canvasHeight,canvasWidth,-(canvasHeight-yAxisLength-offsetTop-this.__drawingBorder.height)),this.__context.clearRect(canvasWidth,0,-(canvasWidth-offsetLeft-xAxisLegth-this.__drawingBorder.width),canvasHeight)}}}drawStacked(bar,xAxis,minValues){if(null!==bar.yAxis){let yAxisWidth=bar.yAxis.getAxisWidth();if(null===yAxisWidth)return;let offsetTop=bar.yAxis.getDiffEndLabelAndLine()+yAxisWidth/2+5+this.__drawingBorder.height,offsetLeft=xAxis.getXAxisLeftWidth()||0,xStartValue=xAxis.getMainTickStartValue();if(xAxis.getAutoScaling()){let valueOverride=xAxis.getMainTickStartValueOverride();null!==valueOverride&&(xStartValue=valueOverride)}if(null===xStartValue)return;let yStartValue=bar.yAxis.getMainTickStartValue();if(bar.yAxis.getAutoScaling()){let valueOverride=bar.yAxis.getMainTickStartValueOverride();null!==valueOverride&&(yStartValue=valueOverride)}if(null===yStartValue)return;let xAxisLabel=xAxis.getCalculatedNumbers(),yAxisLabel=bar.yAxis.getCalculatedNumbers(),xAxisMainTickSteps=xAxis.getMainTickSteps();if(null===xAxisMainTickSteps)return;let yAxisMainTickSteps=bar.yAxis.getMainTickSteps();if(null===yAxisMainTickSteps)return;let xAxisLegth=xAxis.getLineWidth(),xCalc=xAxisLegth/(xAxisLabel[xAxisMainTickSteps-1]-xAxisLabel[0]),yAxisLength=bar.yAxis.getLineHeight(),yCalc=yAxisLength/(yAxisLabel[yAxisMainTickSteps-1]-yAxisLabel[0]);if(null!==this.__context&&void 0!==this.__canvas){if(null!==this.__barWidth&&null!==this.__barColor){this.__context.beginPath();for(let i=0,ii=bar.values.length-1;i<=ii;i++){let yBegin,minValue=0;void 0!==minValues[i]&&(minValue=minValues[i]);let y,x=(i-xStartValue)*xCalc+offsetLeft-this.__barWidth/2;bar.yAxis.getLogarithmicScale()&&0!==bar.values[i]&&yAxisMainTickSteps>=2?(yBegin=0!==minValue?yAxisLength+offsetTop-(Math.log10(minValue)-Number(yAxisLabel[0].toExponential().split("e")[1]))*(yAxisLength/(yAxisMainTickSteps-1)):yAxisLength+offsetTop,y=yAxisLength+offsetTop-(Math.log10(bar.values[i]+minValue*this.__scaleFactor)-Number(yAxisLabel[0].toExponential().split("e")[1]))*(yAxisLength/(yAxisMainTickSteps-1))):(yBegin=yAxisLength-(minValue-yStartValue)*yCalc+offsetTop,y=yAxisLength-(minValue+bar.values[i]*this.__scaleFactor-yStartValue)*yCalc+offsetTop),y>this.__canvas.height+TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW?y=TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW:y<-1*TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW&&(y=-1*TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW),this.__context.fillStyle=this.getColorFromColorRanges(this.__colorRanges,bar.values[i],this.__barColor),this.__context.fillRect(x,yBegin,this.__barWidth,y-yBegin),void 0!==minValues[i]?minValues[i]=minValues[i]+bar.values[i]*this.__scaleFactor:minValues.push(bar.values[i]*this.__scaleFactor)}}let canvasWidth=this.__canvas.width/window.devicePixelRatio,canvasHeight=this.__canvas.height/window.devicePixelRatio;this.__context.clearRect(0,0,canvasWidth,offsetTop-this.__drawingBorder.height),this.__context.clearRect(0,0,offsetLeft-this.__drawingBorder.width,canvasHeight),this.__context.clearRect(0,canvasHeight,canvasWidth,-(canvasHeight-yAxisLength-offsetTop-this.__drawingBorder.height)),this.__context.clearRect(canvasWidth,0,-(canvasWidth-offsetLeft-xAxisLegth-this.__drawingBorder.width),canvasHeight)}}}setBarWidth(barWidth){this.__barWidth=barWidth}getBarWidth(){return this.__barWidth}setDrawingBorder(drawingBorder){this.__drawingBorder=drawingBorder}setBarColor(barColor){this.__barColor=barColor}getBarColor(){return this.__barColor}setCanvas(canvas){this.__canvas=canvas,this.__context=this.__canvas.getContext("2d")}getCanvas(){return this.__canvas}getScaleFactor(){return this.__scaleFactor}setScaleFactor(scaleFactor){this.__scaleFactor=scaleFactor||1}getColorRanges(){return this.__colorRanges}setColorRanges(colorRanges){this.__colorRanges=colorRanges}}TcHmiCharting.BarGraph=BarGraph,function(BarGraph){let BarGraphArrangement;!function(BarGraphArrangement){BarGraphArrangement.Overlapped="Overlapped",BarGraphArrangement.Clustered="Clustered",BarGraphArrangement.Stacked="Stacked"}(BarGraphArrangement=BarGraph.BarGraphArrangement||(BarGraph.BarGraphArrangement={}))}(BarGraph=TcHmiCharting.BarGraph||(TcHmiCharting.BarGraph={}))}(TcHmiCharting||(TcHmiCharting={})),function(TcHmiCharting){class HorizontalBarChart extends TcHmiCharting.IChart{__barGraph;__barGraphs;__barChanged;__widthLeft=0;__calcBarWidth=0;__barWidth=null;__barGraphArrangement=null;__drawingBorder={height:0,width:0};constructor(elementRoot,canvasWidth,canvasHeight,referenceLinesPosition){super(elementRoot,canvasWidth,canvasHeight,referenceLinesPosition),this.__barGraph=[],this.__barGraphs=[],this.__barChanged=!1}deleteYAxis(index){for(let i=0,ii=this.__barGraph.length;ithis.__barGraph[j].values[k]*scaleFactor)&&(startValueX=this.__barGraph[j].values[k]*scaleFactor),(null===endValueX||endValueXNumber.MAX_SAFE_INTEGER?(overrideStartX-=.1*overrideStartX/100,overrideEndX+=.1*overrideEndX/100):this.__barGraph[j].yAxis?.getLogarithmicScale()?(overrideStartX-=.1,overrideEndX+=1):(overrideStartX-=.5,overrideEndX+=.5):(overrideStartX=startValueX,overrideEndX=endValueX),this.__xAxis.setMainTickStartValueOverride(overrideStartX),this.__xAxis.setMainTickEndValueOverride(overrideEndX)}}}if(this.__xAxis.drawAxis({x:0,y:canvasHeight},{x:canvasWidth,y:canvasHeight}),xAxisHeight=this.__xAxis.getHeight(),xAxisHeight>0?xAxisHeight+=10:xAxisHeight=defaultDistance,null!==this.__yAxis&&void 0!==this.__yAxis&&this.__yAxis.length>0){null!==this.__contextFrame&&this.__contextFrame.clearRect(0,0,canvasWidth,canvasHeight);let widthLeft=defaultDistance,widthRight=defaultDistance,showOnlyYAxis=!1,biggestFirst=0,biggestLatest=0;for(let h=0,hh=this.__yAxis.length;hNumber.MAX_SAFE_INTEGER?(startValue-=.1*startValue/100,endValue+=.1*endValue/100):startValue===endValue&&(startValue-=.5,endValue+=.5),this.__yAxis[h].setMainTickStartValueOverride(startValue),this.__yAxis[h].setMainTickEndValueOverride(endValue))}let yAxis=this.__yAxis[h],labelArray=yAxis.getCalculatedLabels();if(yAxis.getShowAxis()&&yAxis.getShowLabels()){let callback=yAxis.getYAxisCallback(),mainTickSteps=yAxis.getMainTickSteps();if(null!==callback){if(void 0!==labelArray[0]&&null!==labelArray[0]){let first=yAxis.calculateLabelHeight(callback.apply(this,[parseFloat(labelArray[0])]));first>biggestFirst&&(biggestFirst=first)}if(null!==mainTickSteps&&void 0!==labelArray[mainTickSteps-1]&&null!==labelArray[mainTickSteps-1]){let latest=yAxis.calculateLabelHeight(callback.apply(this,[parseFloat(labelArray[mainTickSteps-1])]));latest>biggestLatest&&(biggestLatest=latest)}}else{if(void 0!==labelArray[0]&&null!==labelArray[0]){let first=yAxis.calculateLabelHeight(labelArray[0]);first>biggestFirst&&(biggestFirst=first)}if(null!==mainTickSteps&&void 0!==labelArray[mainTickSteps-1]&&null!==labelArray[mainTickSteps-1]){let latest=yAxis.calculateLabelHeight(labelArray[mainTickSteps-1]);latest>biggestLatest&&(biggestLatest=latest)}}}}for(let i=0,ii=this.__yAxis.length;i0?this.__xAxis.drawAxis({x:widthLeft+this.__drawingBorder.width,y:canvasHeight},{x:canvasWidth-widthRight-this.__drawingBorder.width,y:canvasHeight}):this.__xAxis.drawAxis({x:0,y:0},{x:0,y:0});let yAxisLabel=this.__yAxis[0].getCalculatedNumbers(),yAxisMainTickSteps=this.__yMainTickSteps,barWidthDrawingBorder=0;if(null===this.__barWidth)if(this.__barGraphArrangement===TcHmiCharting.HorizontalBarGraph.BarGraphArrangement.Overlapped||this.__barGraphArrangement===TcHmiCharting.HorizontalBarGraph.BarGraphArrangement.Stacked)if(this.__barGraph.length>0)if(null!==yAxisMainTickSteps&&yAxisMainTickSteps>1&&0!==yAxisLabel.length){let yCalc=this.__yAxis[0].getLineHeight()/(yAxisLabel[yAxisMainTickSteps-1]-yAxisLabel[0]);this.__calcBarWidth=Math.floor(Math.floor(yCalc)*(2/3)),this.__calcBarWidth<1&&(this.__calcBarWidth=1),barWidthDrawingBorder=this.__calcBarWidth}else this.__calcBarWidth=1,barWidthDrawingBorder=this.__calcBarWidth;else this.__calcBarWidth=0,barWidthDrawingBorder=this.__calcBarWidth;else if(this.__barGraph.length>0)if(null!==yAxisMainTickSteps&&yAxisMainTickSteps>1&&0!==yAxisLabel.length){let yCalc=this.__yAxis[0].getLineHeight()/(yAxisLabel[yAxisMainTickSteps-1]-yAxisLabel[0]);if(this.__barGraph.length>0){let placeForAllBars=Math.floor(Math.floor(yCalc)*(2/3));barWidthDrawingBorder=placeForAllBars,this.__calcBarWidth=(placeForAllBars-2*(this.__barGraph.length-1))/this.__barGraph.length}else this.__calcBarWidth=Math.floor(Math.floor(yCalc)*(2/3)),barWidthDrawingBorder=this.__calcBarWidth;this.__calcBarWidth<1&&(this.__calcBarWidth=1,barWidthDrawingBorder=this.__calcBarWidth)}else this.__calcBarWidth=1,barWidthDrawingBorder=this.__calcBarWidth;else this.__calcBarWidth=0,barWidthDrawingBorder=this.__calcBarWidth;else this.__barGraphArrangement===TcHmiCharting.HorizontalBarGraph.BarGraphArrangement.Overlapped||this.__barGraphArrangement===TcHmiCharting.HorizontalBarGraph.BarGraphArrangement.Stacked?barWidthDrawingBorder=this.__barWidth:(barWidthDrawingBorder=this.__barWidth,this.__barGraph.length>1&&(barWidthDrawingBorder=2*((this.__barGraph.length-1)/2*2+this.__barGraph.length/2*this.__barWidth)));let gridLineWidth=0;null!==this.__grid&&(gridLineWidth=this.__grid.getLineWidth()||0,gridLineWidth/=2),this.__drawingBorder.height=gridLineWidth>barWidthDrawingBorder/2?gridLineWidth:barWidthDrawingBorder/2,this.__drawingBorder.width=gridLineWidth>defaultDistance?gridLineWidth:defaultDistance,this.__drawingBorder.width0?this.__xAxis.drawAxis({x:widthLeft+this.__drawingBorder.width,y:canvasHeight},{x:canvasWidth-widthRight-this.__drawingBorder.width,y:canvasHeight}):this.__xAxis.drawAxis({x:0,y:0},{x:0,y:0}),null===this.__barWidth)if(this.__barGraphArrangement===TcHmiCharting.HorizontalBarGraph.BarGraphArrangement.Overlapped||this.__barGraphArrangement===TcHmiCharting.HorizontalBarGraph.BarGraphArrangement.Stacked)if(this.__barGraph.length>0)if(null!==yAxisMainTickSteps&&yAxisMainTickSteps>1&&0!==yAxisLabel.length){let yCalc=this.__yAxis[0].getLineHeight()/(yAxisLabel[yAxisMainTickSteps-1]-yAxisLabel[0]);this.__calcBarWidth=Math.floor(Math.floor(yCalc)*(2/3)),this.__calcBarWidth<1&&(this.__calcBarWidth=1)}else this.__calcBarWidth=1;else this.__calcBarWidth=0;else if(this.__barGraph.length>0)if(null!==yAxisMainTickSteps&&yAxisMainTickSteps>1&&0!==yAxisLabel.length){let yCalc=this.__yAxis[0].getLineHeight()/(yAxisLabel[yAxisMainTickSteps-1]-yAxisLabel[0]);if(this.__barGraph.length>0){let placeForAllBars=Math.floor(Math.floor(yCalc)*(2/3));this.__calcBarWidth=(placeForAllBars-2*(this.__barGraph.length-1))/this.__barGraph.length}else this.__calcBarWidth=Math.floor(Math.floor(yCalc)*(2/3));this.__calcBarWidth<1&&(this.__calcBarWidth=1)}else this.__calcBarWidth=1;else this.__calcBarWidth=0;let xAxisMainTickSteps=this.__xAxis.getMainTickSteps(),xAxisWidth=this.__xAxis.getAxisWidth(),yAxisWidth=this.getYAxisWidth();if(null!==xAxisMainTickSteps&&null!==yAxisMainTickSteps&&null!==xAxisWidth&&null!==yAxisWidth){let xAxisSubTickSteps=this.__xAxis.getSubTickSteps(),yAxisSubTickSteps=this.__ySubTickSteps,showGridHorizontal=!!this.__grid&&this.__grid.getShowHorizontalLines(),showGridVertical=!!this.__grid&&this.__grid.getShowVerticalLines(),showSubgridHorizontal=!!this.__subgrid&&this.__subgrid.getShowHorizontalLines(),showSubgridVertical=!!this.__subgrid&&this.__subgrid.getShowVerticalLines(),gridBackgroundColor=this.__grid?this.__grid.getBackgroundColor():null;if(((showGridHorizontal||showGridVertical)&&this.__grid&&null!==this.__grid.getLineColor()&&null!==this.__grid.getLineWidth()&&null!==this.__grid.getLineStyle()||(showSubgridHorizontal&&null!==yAxisSubTickSteps||showSubgridVertical&&null!==xAxisSubTickSteps)&&this.__subgrid&&null!==this.__subgrid.getLineColor()&&null!==this.__subgrid.getLineWidth()&&null!==this.__subgrid.getLineStyle())&&this.__contextFrame&&gridBackgroundColor&&(this.__contextFrame.fillStyle=gridBackgroundColor,showOnlyYAxis?this.__contextFrame.fillRect(this.__xAxis.getXAxisLeftWidth()-this.__drawingBorder.width,canvasHeight-xAxisHeight-this.__yAxis[0].getDiffStartLabelAndLine()-yAxisWidth/2,this.__xAxis.getLineWidth()+2*this.__drawingBorder.width,-this.__yAxis[0].getLineHeight()-2*this.__drawingBorder.height):this.__contextFrame.fillRect(this.__xAxis.getXAxisLeftWidth()-this.__drawingBorder.width,canvasHeight-xAxisHeight-yAxisWidth/2,this.__xAxis.getLineWidth()+2*this.__drawingBorder.width,-this.__yAxis[0].getLineHeight()-2*this.__drawingBorder.height)),this.__xAxis.getLogarithmicScale()){let verticalSubgridLines=[],diffOnlyYAxis=0;showOnlyYAxis&&(diffOnlyYAxis=this.__yAxis[0].getDiffStartLabelAndLine());let yValue=canvasHeight-xAxisHeight-diffOnlyYAxis-this.__drawingBorder.height-yAxisWidth/2;if(this.__xAxis.getLogarithmicScale()){let xPoints=this.__xAxis.getLogarithmicXPointsForSubgrid();for(let k=0,kk=xPoints.length;k=0&&valuePercent<=100){let diffPixel=this.__yAxis[0].getLineHeight()*valuePercent/100,startPoint={x:this.__xAxis.getXAxisLeftWidth(),y:beginY-diffPixel},endPoint={x:this.__xAxis.getXAxisLeftWidth()+this.__xAxis.getLineWidth(),y:beginY-diffPixel};this.__referenceLines[i].drawLine(startPoint,endPoint)}}else{let value=this.__referenceLines[i].getValue()||0,yMainTickSteps=this.__yAxis[0].getMainTickSteps();if(this.__yAxis[0].getLogarithmicScale()&&yMainTickSteps&&yMainTickSteps>=2){let yAxisLength=this.__yAxis[0].getLineHeight(),y=yAxisLength+(this.__yAxis[0].getDiffEndLabelAndLine()+(this.__yAxis[0].getAxisWidth()||0)/2+defaultDistance+this.__drawingBorder.height)-(Math.log10(value)-Number(this.__yAxis[0].getCalculatedNumbers()[0].toExponential().split("e")[1]))*(yAxisLength/(yMainTickSteps-1)),startPoint={x:this.__xAxis.getXAxisLeftWidth(),y},endPoint={x:this.__xAxis.getXAxisLeftWidth()+this.__xAxis.getLineWidth(),y};this.__referenceLines[i].drawLine(startPoint,endPoint)}else{let startValue=this.__yAxis[0].getMainTickStartValueOverride()||this.__yAxis[0].getMainTickStartValue()||0,multiplier=Math.pow(10,this.__yAxis[0].getDecimalPlaces()||0),min=Math.round(startValue*multiplier)/multiplier,endValue=this.__yAxis[0].getMainTickEndValueOverride()||this.__yAxis[0].getMainTickEndValue()||0,multiplierMax=Math.pow(10,this.__yAxis[0].getDecimalPlaces()||0),max=Math.round(endValue*multiplierMax)/multiplierMax;if(value>=min&&value<=max){let diffPixel=(value-min)*(this.__yAxis[0].getLineHeight()/(max-min)),startPoint={x:this.__xAxis.getXAxisLeftWidth(),y:beginY-diffPixel},endPoint={x:this.__xAxis.getXAxisLeftWidth()+this.__xAxis.getLineWidth(),y:beginY-diffPixel};this.__referenceLines[i].drawLine(startPoint,endPoint)}}}else{let offsetLeft=this.__xAxis.getXAxisLeftWidth()||0;if("%"===this.__referenceLines[i].getValueUnit()){let valuePercent=this.__referenceLines[i].getValue()||0;if(valuePercent>=0&&valuePercent<=100){let diffPixel=this.__xAxis.getLineWidth()*valuePercent/100,startPoint={x:offsetLeft+diffPixel,y:beginY},endPoint={x:offsetLeft+diffPixel,y:beginY-this.__yAxis[0].getLineHeight()};this.__referenceLines[i].drawLine(startPoint,endPoint)}}else{let value=this.__referenceLines[i].getValue()||0,xMainTickSteps=this.__xAxis.getMainTickSteps();if(this.__xAxis.getLogarithmicScale()&&xMainTickSteps&&xMainTickSteps>=2){let xAxisLength=this.__xAxis.getLineWidth(),x=offsetLeft+(Math.log10(value)-Number(this.__xAxis.getCalculatedNumbers()[0].toExponential().split("e")[1]))*(xAxisLength/(xMainTickSteps-1)),startPoint={x,y:beginY},endPoint={x,y:beginY-this.__yAxis[0].getLineHeight()};this.__referenceLines[i].drawLine(startPoint,endPoint)}else{let min=this.__xAxis.getMainTickStartValueOverride()||this.__xAxis.getMainTickStartValue()||0,max=this.__xAxis.getMainTickEndValueOverride()||this.__xAxis.getMainTickEndValue()||0;if(value>=min&&value<=max){let diffPixel=(value-min)*(this.__xAxis.getLineWidth()/(max-min)),startPoint={x:offsetLeft+diffPixel,y:beginY},endPoint={x:offsetLeft+diffPixel,y:beginY-this.__yAxis[0].getLineHeight()};this.__referenceLines[i].drawLine(startPoint,endPoint)}}}}}}this.__barChanged=!0,this.__widthLeft=this.__xAxis.getXAxisLeftWidth()}}if(this.__barChanged)if(null!==this.__yAxis&&void 0!==this.__yAxis)if(this.__yAxis.length>0){null!==this.__contextDrawing&&this.__contextDrawing.clearRect(0,0,canvasWidth,canvasHeight);let canvasElem=this.__elementRoot.find(".TcHmi_Controls_Beckhoff_Controls-chart-canvas-drawing")[0],minValues=[];this.__barGraph.length>=1&&this.__barGraphArrangement===TcHmiCharting.HorizontalBarGraph.BarGraphArrangement.Stacked&&(minValues=new Array(this.__barGraph[0].values.length).fill(0));for(let i=0,ii=this.__barGraph.length;i=2?(Math.log10(bar.values[i]*this.__scaleFactor)-Number(xAxisLabel[0].toExponential().split("e")[1]))*(xAxisLength/(xAxisMainTickSteps-1))+offsetLeft:(bar.values[i]*this.__scaleFactor-xStartValue)*xCalc+offsetLeft,x>this.__canvas.width+TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW?x=TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW:x<-1*TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW&&(x=-1*TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW),this.__context.fillStyle=this.getColorFromColorRanges(this.__colorRanges,bar.values[i],this.__barColor),this.__context.fillRect(xBegin,y,x-xBegin,this.__barWidth)}}let canvasWidth=this.__canvas.width/window.devicePixelRatio,canvasHeight=this.__canvas.height/window.devicePixelRatio;this.__context.clearRect(0,0,canvasWidth,offsetTop-this.__drawingBorder.height),this.__context.clearRect(0,0,offsetLeft-this.__drawingBorder.width,canvasHeight),this.__context.clearRect(0,canvasHeight,canvasWidth,-(canvasHeight-yAxisLength-offsetTop-this.__drawingBorder.height)),this.__context.clearRect(canvasWidth,0,-(canvasWidth-offsetLeft-xAxisLength-this.__drawingBorder.width),canvasHeight)}}}drawClustered(bar,xAxis,index){if(null!==bar.yAxis){let yAxisWidth=bar.yAxis.getAxisWidth();if(null===yAxisWidth)return;let offsetTop=bar.yAxis.getDiffEndLabelAndLine()+yAxisWidth/2+5+this.__drawingBorder.height,offsetLeft=xAxis.getXAxisLeftWidth()||0,xStartValue=xAxis.getMainTickStartValue();if(xAxis.getAutoScaling()){let valueOverride=xAxis.getMainTickStartValueOverride();null!==valueOverride&&(xStartValue=valueOverride)}if(null===xStartValue)return;let yStartValue=bar.yAxis.getMainTickStartValue();if(bar.yAxis.getAutoScaling()){let valueOverride=bar.yAxis.getMainTickStartValueOverride();null!==valueOverride&&(yStartValue=valueOverride)}if(null===yStartValue)return;let xAxisLabel=xAxis.getCalculatedNumbers(),yAxisLabel=bar.yAxis.getCalculatedNumbers(),xAxisMainTickSteps=xAxis.getMainTickSteps();if(null===xAxisMainTickSteps)return;let yAxisMainTickSteps=bar.yAxis.getMainTickSteps();if(null===yAxisMainTickSteps)return;let xAxisLength=xAxis.getLineWidth(),xCalc=xAxisLength/(xAxisLabel[xAxisMainTickSteps-1]-xAxisLabel[0]),yAxisLength=bar.yAxis.getLineHeight(),yCalc=yAxisLength/(yAxisLabel[yAxisMainTickSteps-1]-yAxisLabel[0]);if(null!==this.__context&&void 0!==this.__canvas){if(null!==this.__barWidth&&null!==this.__barColor){this.__context.beginPath();let xBegin=(0-xStartValue)*xCalc+offsetLeft;for(let i=0,ii=bar.values.length-1;i<=ii;i++){let x,y=yAxisLength-(i-yStartValue)*yCalc+offsetTop-this.__drawingBorder.height+2*index+index*this.__barWidth;x=xAxis.getLogarithmicScale()&&0!==bar.values[i]&&xAxisMainTickSteps>=2?(Math.log10(bar.values[i]*this.__scaleFactor)-Number(xAxisLabel[0].toExponential().split("e")[1]))*(xAxisLength/(xAxisMainTickSteps-1))+offsetLeft:(bar.values[i]*this.__scaleFactor-xStartValue)*xCalc+offsetLeft,x>this.__canvas.width+TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW?x=TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW:x<-1*TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW&&(x=-1*TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW),this.__context.fillStyle=this.getColorFromColorRanges(this.__colorRanges,bar.values[i],this.__barColor),this.__context.fillRect(xBegin,y,x-xBegin,this.__barWidth)}}let canvasWidth=this.__canvas.width/window.devicePixelRatio,canvasHeight=this.__canvas.height/window.devicePixelRatio;this.__context.clearRect(0,0,canvasWidth,offsetTop-this.__drawingBorder.height),this.__context.clearRect(0,0,offsetLeft-this.__drawingBorder.width,canvasHeight),this.__context.clearRect(0,canvasHeight,canvasWidth,-(canvasHeight-yAxisLength-offsetTop-this.__drawingBorder.height)),this.__context.clearRect(canvasWidth,0,-(canvasWidth-offsetLeft-xAxisLength-this.__drawingBorder.width),canvasHeight)}}}drawStacked(bar,xAxis,minValues){if(null!==bar.yAxis){let yAxisWidth=bar.yAxis.getAxisWidth();if(null===yAxisWidth)return;let offsetTop=bar.yAxis.getDiffEndLabelAndLine()+yAxisWidth/2+5+this.__drawingBorder.height,offsetLeft=xAxis.getXAxisLeftWidth()||0,xStartValue=xAxis.getMainTickStartValue();if(xAxis.getAutoScaling()){let valueOverride=xAxis.getMainTickStartValueOverride();null!==valueOverride&&(xStartValue=valueOverride)}if(null===xStartValue)return;let yStartValue=bar.yAxis.getMainTickStartValue();if(bar.yAxis.getAutoScaling()){let valueOverride=bar.yAxis.getMainTickStartValueOverride();null!==valueOverride&&(yStartValue=valueOverride)}if(null===yStartValue)return;let xAxisLabel=xAxis.getCalculatedNumbers(),yAxisLabel=bar.yAxis.getCalculatedNumbers(),xAxisMainTickSteps=xAxis.getMainTickSteps();if(null===xAxisMainTickSteps)return;let yAxisMainTickSteps=bar.yAxis.getMainTickSteps();if(null===yAxisMainTickSteps)return;let xAxisLength=xAxis.getLineWidth(),xCalc=xAxisLength/(xAxisLabel[xAxisMainTickSteps-1]-xAxisLabel[0]),yAxisLength=bar.yAxis.getLineHeight(),yCalc=yAxisLength/(yAxisLabel[yAxisMainTickSteps-1]-yAxisLabel[0]);if(null!==this.__context&&void 0!==this.__canvas){if(null!==this.__barWidth&&null!==this.__barColor){this.__context.beginPath();for(let i=0,ii=bar.values.length-1;i<=ii;i++){let minValue=0;void 0!==minValues[i]&&(minValue=minValues[i]);let xBegin,x,y=yAxisLength-(i-yStartValue)*yCalc+offsetTop-this.__barWidth/2;xAxis.getLogarithmicScale()&&0!==bar.values[i]&&xAxisMainTickSteps>=2?(xBegin=0!==minValue?(Math.log10(minValue)-Number(xAxisLabel[0].toExponential().split("e")[1]))*(xAxisLength/(xAxisMainTickSteps-1)):offsetLeft,x=(Math.log10(bar.values[i]*this.__scaleFactor+minValue)-Number(xAxisLabel[0].toExponential().split("e")[1]))*(xAxisLength/(xAxisMainTickSteps-1))+offsetLeft):(xBegin=(minValue-xStartValue)*xCalc+offsetLeft,x=(minValue+bar.values[i]*this.__scaleFactor-xStartValue)*xCalc+offsetLeft),x>this.__canvas.width+TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW?x=TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW:x<-1*TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW&&(x=-1*TcHmiCharting.IAxis.CANVAS_MAX_OVERFLOW),this.__context.fillStyle=this.getColorFromColorRanges(this.__colorRanges,bar.values[i],this.__barColor),this.__context.fillRect(xBegin,y,x-xBegin,this.__barWidth),void 0!==minValues[i]?minValues[i]=minValues[i]+bar.values[i]*this.__scaleFactor:minValues.push(bar.values[i]*this.__scaleFactor)}}let canvasWidth=this.__canvas.width/window.devicePixelRatio,canvasHeight=this.__canvas.height/window.devicePixelRatio;this.__context.clearRect(0,0,canvasWidth,offsetTop-this.__drawingBorder.height),this.__context.clearRect(0,0,offsetLeft-this.__drawingBorder.width,canvasHeight),this.__context.clearRect(0,canvasHeight,canvasWidth,-(canvasHeight-yAxisLength-offsetTop-this.__drawingBorder.height)),this.__context.clearRect(canvasWidth,0,-(canvasWidth-offsetLeft-xAxisLength-this.__drawingBorder.width),canvasHeight)}}}setBarWidth(barWidth){this.__barWidth=barWidth}getBarWidth(){return this.__barWidth}setDrawingBorder(drawingBorder){this.__drawingBorder=drawingBorder}setBarColor(barColor){this.__barColor=barColor}getBarColor(){return this.__barColor}getScaleFactor(){return this.__scaleFactor}setScaleFactor(scaleFactor){this.__scaleFactor=scaleFactor||1}setCanvas(canvas){this.__canvas=canvas,this.__context=this.__canvas.getContext("2d")}getCanvas(){return this.__canvas}getColorRanges(){return this.__colorRanges}setColorRanges(colorRanges){this.__colorRanges=colorRanges}}TcHmiCharting.HorizontalBarGraph=HorizontalBarGraph,function(HorizontalBarGraph){let BarGraphArrangement;!function(BarGraphArrangement){BarGraphArrangement.Overlapped="Overlapped",BarGraphArrangement.Clustered="Clustered",BarGraphArrangement.Stacked="Stacked"}(BarGraphArrangement=HorizontalBarGraph.BarGraphArrangement||(HorizontalBarGraph.BarGraphArrangement={}))}(HorizontalBarGraph=TcHmiCharting.HorizontalBarGraph||(TcHmiCharting.HorizontalBarGraph={}))}(TcHmiCharting||(TcHmiCharting={})),function(TcHmiCharting){class ReferenceLine{__name=null;__show=!0;__yAxisId=null;__value=null;__valueUnit="Value";__orientation=ReferenceLine.Orientation.Horizontal;__locked=!0;__showTooltip=!1;__highlightDataPoints=!1;__color=null;__lineWidth=null;__showLabel=!0;__labelHorizontalAlignment=null;__labelVerticalAlignment=null;__labelFontFamily=null;__labelFontSize=null;__labelFontSizeUnit="px";__labelFontWeight=null;__startPoint=null;__endPoint=null;__canvas;__context;constructor(canvas){this.__canvas=canvas,this.__context=this.__canvas.getContext("2d")}drawLine(startPoint,endPoint){if(this.__context&&this.__lineWidth&&this.__color){if(this.__startPoint=startPoint,this.__endPoint=endPoint,this.__context.lineWidth=this.__lineWidth,this.__context.setLineDash([]),this.__context.strokeStyle=this.__color,this.__context.fillStyle=this.__color,this.__context.beginPath(),"Center"===this.__labelVerticalAlignment&&this.__showLabel){let labelWidth=this.calculateLabelWidth(this.__name);if(this.__orientation===ReferenceLine.Orientation.Horizontal)switch(this.__labelHorizontalAlignment){case"Left":this.__context.moveTo(startPoint.x+labelWidth,startPoint.y),this.__context.lineTo(endPoint.x,endPoint.y);break;case"Center":let diffX=endPoint.x-startPoint.x;this.__context.moveTo(startPoint.x,startPoint.y),this.__context.lineTo(startPoint.x+diffX/2-labelWidth/2,endPoint.y),this.__context.moveTo(startPoint.x+diffX/2+labelWidth/2,endPoint.y),this.__context.lineTo(endPoint.x,endPoint.y);break;case"Right":this.__context.moveTo(startPoint.x,startPoint.y),this.__context.lineTo(endPoint.x-labelWidth,endPoint.y);break;default:this.__context.moveTo(startPoint.x,startPoint.y),this.__context.lineTo(endPoint.x,endPoint.y)}else switch(this.__labelHorizontalAlignment){case"Left":this.__context.moveTo(startPoint.x,startPoint.y-labelWidth),this.__context.lineTo(endPoint.x,endPoint.y);break;case"Center":let diffX=startPoint.y-endPoint.y;this.__context.moveTo(startPoint.x,startPoint.y),this.__context.lineTo(endPoint.x,startPoint.y-diffX/2+labelWidth/2),this.__context.moveTo(endPoint.x,startPoint.y-diffX/2-labelWidth/2),this.__context.lineTo(endPoint.x,endPoint.y);break;case"Right":this.__context.moveTo(startPoint.x,startPoint.y),this.__context.lineTo(endPoint.x,endPoint.y+labelWidth);break;default:this.__context.moveTo(startPoint.x,startPoint.y),this.__context.lineTo(endPoint.x,endPoint.y)}}else this.__context.moveTo(startPoint.x,startPoint.y),this.__context.lineTo(endPoint.x,endPoint.y);if(this.__context.stroke(),this.__showLabel&&this.__name){this.__context.save(),this.__context.beginPath(),this.__context.font=this.__labelFontWeight+" "+this.__labelFontSize+this.__labelFontSizeUnit+" "+this.__labelFontFamily;let xPoint=0,yPoint=0;switch(this.__labelVerticalAlignment){case"Center":this.__context.textBaseline="middle";break;case"Bottom":this.__context.textBaseline="top";break;default:this.__context.textBaseline="bottom"}if(this.__orientation===ReferenceLine.Orientation.Horizontal)switch(yPoint=startPoint.y,this.__labelHorizontalAlignment){case"Left":xPoint=startPoint.x,this.__context.textAlign="left";break;case"Center":xPoint=startPoint.x+(endPoint.x-startPoint.x)/2,this.__context.textAlign="center";break;default:xPoint=endPoint.x,this.__context.textAlign="right"}else switch(this.__labelHorizontalAlignment){case"Left":this.__context.textAlign="left",this.__context.translate(startPoint.x,startPoint.y),this.__context.rotate(-.5*Math.PI);break;case"Center":this.__context.textAlign="center",this.__context.translate(startPoint.x,startPoint.y-(startPoint.y-endPoint.y)/2),this.__context.rotate(-.5*Math.PI);break;default:this.__context.textAlign="right",this.__context.translate(startPoint.x,endPoint.y),this.__context.rotate(-.5*Math.PI)}this.__context.fillText(this.__name,xPoint,yPoint),this.__context.stroke(),this.__context.restore()}}}calculateLabelWidth(label){let cxt=this.__canvas.getContext("2d");if(null!==cxt&&label&&null!==this.__labelFontWeight&&null!==this.__labelFontSize&&null!==this.__labelFontFamily){return cxt.font=this.__labelFontWeight+" "+this.__labelFontSize+this.__labelFontSizeUnit+" "+this.__labelFontFamily,cxt.measureText(label).width}return 0}getStartPoint(){return this.__startPoint}getEndPoint(){return this.__endPoint}setName(name){this.__name=name}getName(){return this.__name}setShow(show){this.__show=show}getShow(){return this.__show}setYAxisId(yAxisId){this.__yAxisId=yAxisId}getYAxisId(){return this.__yAxisId}setValue(value){this.__value=value}getValue(){return this.__value}setValueUnit(valueUnit){this.__valueUnit=valueUnit}getValueUnit(){return this.__valueUnit}setOrientation(orientation){this.__orientation=orientation}getOrientation(){return this.__orientation}setLocked(locked){this.__locked=locked}getLocked(){return this.__locked}setShowTooltip(showTooltip){this.__showTooltip=showTooltip}getShowTooltip(){return this.__showTooltip}setHighlightDataPoints(highlightDataPoints){this.__highlightDataPoints=highlightDataPoints}getHighlightDataPoints(){return this.__highlightDataPoints}setColor(color){this.__color=color}getColor(){return this.__color}setLineWidth(lineWidth){this.__lineWidth=lineWidth}getLineWidth(){return this.__lineWidth}setShowLabel(showLabel){this.__showLabel=showLabel}getShowLabel(){return this.__showLabel}setLabelHorizontalAlignment(labelHorizontalAlignment){this.__labelHorizontalAlignment=labelHorizontalAlignment}getLabelHorizontalAlignment(){return this.__labelHorizontalAlignment}setLabelVerticalAlignment(labelVerticalAlignment){this.__labelVerticalAlignment=labelVerticalAlignment}getLabelVerticalAlignment(){return this.__labelVerticalAlignment}setLabelFontFamily(labelFontFamily){if(labelFontFamily)this.__labelFontFamily=labelFontFamily;else{const inheritedFontfamily=TcHmi.StyleProvider.getComputedElementStyle(this.__canvas,"font-family")["font-family"];this.__labelFontFamily=inheritedFontfamily||null}}getLabelFontFamily(){return this.__labelFontFamily}setLabelFontSize(labelFontSize){if(labelFontSize)this.__labelFontSize=labelFontSize;else{const inheritedFontSize=TcHmi.StyleProvider.getComputedElementStyle(this.__canvas,"font-size")["font-size"];this.__labelFontSize=inheritedFontSize?parseFloat(inheritedFontSize):null}}getLabelFontSize(){return this.__labelFontSize}setLabelFontWeight(labelFontWeight){if(labelFontWeight&&"Auto"!==labelFontWeight)this.__labelFontWeight=labelFontWeight;else{const inheritedFontWeight=TcHmi.StyleProvider.getComputedElementStyle(this.__canvas,"font-weight")["font-weight"];this.__labelFontWeight=inheritedFontWeight||null}}getLabelFontWeight(){return this.__labelFontWeight}}TcHmiCharting.ReferenceLine=ReferenceLine,function(ReferenceLine){let Orientation;!function(Orientation){Orientation[Orientation.Horizontal=0]="Horizontal",Orientation[Orientation.Vertical=1]="Vertical"}(Orientation=ReferenceLine.Orientation||(ReferenceLine.Orientation={}))}(ReferenceLine=TcHmiCharting.ReferenceLine||(TcHmiCharting.ReferenceLine={}))}(TcHmiCharting||(TcHmiCharting={})),function(TcHmiCharting){class PieChart extends TcHmiCharting.IChart{__pieDescription;__pieData;__labelPosition="Inside";__labelUnit=null;__percentLabelDecimalPlaces=2;__valueLabelDecimalPlaces=null;__labelFontFamily=null;__labelFontSize=null;__labelFontSizeUnit="px";__labelFontWeight=null;constructor(elementRoot,canvasWidth,canvasHeight){super(elementRoot,canvasWidth,canvasHeight,TcHmiCharting.IChart.Position.Background),this.__pieDescription=[],this.__pieData=[]}addPieceOfPie(pieceOfPie){this.__pieDescription.push(pieceOfPie)}addValueOfPie(valueOfPie){this.__pieData.push(valueOfPie)}remove(){super.remove(),this.__pieDescription=[],this.__pieData=[]}clear(width,height){super.clear(width,height),this.__pieDescription=[],this.__pieData=[]}calculateLabelWidth(label){if(this.__canvasDrawing){let cxt=this.__canvasDrawing.getContext("2d");if(null!==cxt&&label&&null!==this.__labelFontWeight&&null!==this.__labelFontSize&&null!==this.__labelFontFamily){return cxt.font=this.__labelFontWeight+" "+this.__labelFontSize+this.__labelFontSizeUnit+" "+this.__labelFontFamily,cxt.measureText(label).width}}return 0}getLongestLabelWidth(labels){let width=0;if(this.__contextDrawing){if(null!==this.__labelFontWeight&&null!==this.__labelFontSize&&null!==this.__labelFontFamily){this.__contextDrawing.font=this.__labelFontWeight+" "+this.__labelFontSize+this.__labelFontSizeUnit+" "+this.__labelFontFamily;for(let label of labels){let metrics=this.__contextDrawing.measureText(label);metrics.width>width&&(width=metrics.width)}}return labels.splice(0,labels.length),width}return 0}setLabelUnit(labelUnit){this.__labelUnit=labelUnit}getLabelUnit(){return this.__labelUnit}setLabelPosition(labelPosition){this.__labelPosition=labelPosition}getLabelPosition(){return this.__labelPosition}setPercentLabelDecimalPlaces(percentLabelDecimalPlaces){this.__percentLabelDecimalPlaces=percentLabelDecimalPlaces}getPercentLabelDecimalPlaces(){return this.__percentLabelDecimalPlaces}setValueLabelDecimalPlaces(valueLabelDecimalPlaces){this.__valueLabelDecimalPlaces=valueLabelDecimalPlaces}getValueLabelDecimalPlaces(){return this.__valueLabelDecimalPlaces}setLabelFontFamily(labelFontFamily){if(this.__canvasDrawing)if(labelFontFamily)this.__labelFontFamily=labelFontFamily;else{const inheritedFontfamily=TcHmi.StyleProvider.getComputedElementStyle(this.__canvasDrawing,"font-family")["font-family"];this.__labelFontFamily=inheritedFontfamily||null}}getLabelFontFamily(){return this.__labelFontFamily}setLabelFontSize(labelFontSize){if(this.__canvasDrawing)if(labelFontSize)this.__labelFontSize=labelFontSize;else{const inheritedFontSize=TcHmi.StyleProvider.getComputedElementStyle(this.__canvasDrawing,"font-size")["font-size"];this.__labelFontSize=inheritedFontSize?parseFloat(inheritedFontSize):null}}getLabelFontSize(){return this.__labelFontSize}getLabelFontSizeUnit(){return this.__labelFontSizeUnit}setLabelFontWeight(labelFontWeight){if(this.__canvasDrawing)if(labelFontWeight&&"Auto"!==labelFontWeight)this.__labelFontWeight=labelFontWeight;else{const inheritedFontWeight=TcHmi.StyleProvider.getComputedElementStyle(this.__canvasDrawing,"font-weight")["font-weight"];this.__labelFontWeight=inheritedFontWeight||null}}getLabelFontWeight(){return this.__labelFontWeight}draw(){if(this.__canvasDrawing){let canvasWidth=this.__canvasDrawing.width/window.devicePixelRatio,canvasHeight=this.__canvasDrawing.height/window.devicePixelRatio,lineHeight=this.__labelFontSize?1.2*this.__labelFontSize:0;if(this.__contextDrawing&&this.__contextDrawing)if(this.__contextDrawing.clearRect(0,0,canvasWidth,canvasHeight),"Inside"===this.__labelPosition){let diameter=canvasWidth>canvasHeight?canvasHeight-20:canvasWidth-20,radius=diameter/2;if(diameter>0){let x=(canvasWidth-20)/2+10,y=(canvasHeight-20)/2+10,sum=this.__pieData.reduce((a,b)=>a+b,0),currentAngle=0,angles=[];for(let i=0,ii=Math.min(this.__pieDescription.length,this.__pieData.length);i1&&(yPoint-=lines.length*lineHeight/2-lineHeight/2),this.__contextDrawing.font=this.__labelFontWeight+" "+this.__labelFontSize+this.__labelFontSizeUnit+" "+this.__labelFontFamily,this.__contextDrawing.fillStyle=this.__pieDescription[i].labelColor?.color||"",this.__contextDrawing.textAlign="center",this.__contextDrawing.textBaseline="middle",this.__contextDrawing.beginPath();for(let j=0,jj=lines.length;ja+b,0),currentAngle=0,min=Math.min(this.__pieDescription.length,this.__pieData.length),angles=[],labels=[],allLabels=[];for(let i=0,ii=min;ilineHeight?longestLabelWidth:lineHeight,radius=(canvasWidth>canvasHeight?canvasHeight-20-2*longestLabelWidthOrHeight:canvasWidth-20-2*longestLabelWidthOrHeight)/2,x=(canvasWidth-20)/2+10,y=(canvasHeight-20)/2+10;currentAngle=0;let boundingRects=[];for(let i=0,ii=min;i=0&&boundingRects[i].angle<=Math.PI/2||boundingRects[i].angle>=Math.PI+Math.PI/2&&boundingRects[i].angle<=2*Math.PI;this.__contextDrawing.textAlign=isPositionedRight?"end":"start",this.__contextDrawing.textBaseline="middle",this.__contextDrawing.beginPath(),labels[i].length>1&&(boundingRects[i].y=boundingRects[i].y-(labels[i].length*lineHeight/2-lineHeight/2));for(let j=0,jj=labels[i].length;jleftSideOfRightLabel?leftSideOfRightLabel:xPoint+10:xPoint-10=0&&angle<=Math.PI/2||angle>=Math.PI+Math.PI/2&&angle<=2*Math.PI?(x=canvasWidth-5,y=middlePoint.y+radius*Math.sin(angle)):(x=5,y=middlePoint.y+radius*Math.sin(angle));let tryAgain=!0,goUp=!1;angle>=Math.PI&&angle<=2*Math.PI&&(goUp=!0);do{0===previousElems.length&&(repeat=!0);for(let rect of previousElems){if(this.pointInsideRect(rect,{x,y})||this.pointInsideRect(rect,{x,y:y+elem.height})){if(goUp){if(y--,ycanvasHeight&&tryAgain)goUp=!0,y=elem.y,tryAgain=!1;else if(y+elem.height/2>canvasHeight&&!tryAgain)return{x,y,angle};break}rect===previousElems[previousElems.length-1]&&(repeat=!0)}}while(!repeat);return{x,y,angle}}pointInsideRect(rect,point){return point.x>=rect.x&&point.x<=rect.x+rect.width&&point.y>=rect.y&&point.y<=rect.y+rect.height}}TcHmiCharting.PieChart=PieChart}(TcHmiCharting||(TcHmiCharting={}));