"use strict";var __extends=this&&this.__extends||function(){var t=function(i,s){return(t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var s in i)i.hasOwnProperty(s)&&(t[s]=i[s])})(i,s)};return function(i,s){function n(){this.constructor=i}t(i,s),i.prototype=null===s?Object.create(s):(n.prototype=s.prototype,new n)}}();import Annotation from"../Annotations.js";import ControlPoint from"../ControlPoint.js";import U from"../../../Core/Utilities.js";var extend=U.extend,isNumber=U.isNumber,merge=U.merge,Measure=function(t){function i(i,s){return t.call(this,i,s)||this}return __extends(i,t),i.prototype.init=function(t,s,n){Annotation.prototype.init.call(this,t,s,n),this.offsetX=0,this.offsetY=0,this.resizeX=0,this.resizeY=0,i.calculations.init.call(this),this.addValues(),this.addShapes()},i.prototype.setClipAxes=function(){this.clipXAxis=this.chart.xAxis[this.options.typeOptions.xAxis],this.clipYAxis=this.chart.yAxis[this.options.typeOptions.yAxis]},i.prototype.pointsOptions=function(){return this.options.points},i.prototype.shapePointsOptions=function(){var t=this.options.typeOptions,i=t.xAxis,s=t.yAxis;return[{x:this.xAxisMin,y:this.yAxisMin,xAxis:i,yAxis:s},{x:this.xAxisMax,y:this.yAxisMin,xAxis:i,yAxis:s},{x:this.xAxisMax,y:this.yAxisMax,xAxis:i,yAxis:s},{x:this.xAxisMin,y:this.yAxisMax,xAxis:i,yAxis:s}]},i.prototype.addControlPoints=function(){var t,i=this.options.typeOptions.selectType;t=new ControlPoint(this.chart,this,this.options.controlPointOptions,0),this.controlPoints.push(t),"xy"!==i&&(t=new ControlPoint(this.chart,this,this.options.controlPointOptions,1),this.controlPoints.push(t))},i.prototype.addValues=function(t){var s=this.options.typeOptions,n=s.label.formatter;i.calculations.recalculate.call(this,t),s.label.enabled&&(this.labels.length>0?this.labels[0].text=n&&n.call(this)||i.calculations.defaultFormatter.call(this):this.initLabel(extend({shape:"rect",backgroundColor:"none",color:"black",borderWidth:0,dashStyle:"dash",overflow:"none",align:"left",vertical:"top",crop:!0,point:function(t){var i=t.annotation,n=i.chart,o=n.inverted,a=n.xAxis[s.xAxis],e=n.yAxis[s.yAxis],r=n.plotTop,h=n.plotLeft;return{x:(o?r:10)+a.toPixels(i.xAxisMin,!o),y:(o?10-h:r)+e.toPixels(i.yAxisMin)}},text:n&&n.call(this)||i.calculations.defaultFormatter.call(this)},s.label)))},i.prototype.addShapes=function(){this.addCrosshairs(),this.addBackground()},i.prototype.addBackground=function(){void 0!==this.shapePointsOptions()[0].x&&this.initShape(extend({type:"path",points:this.shapePointsOptions()},this.options.typeOptions.background),!1)},i.prototype.addCrosshairs=function(){var t,i,s,n=this.chart,o=this.options.typeOptions,a=this.options.typeOptions.point,e=n.xAxis[o.xAxis],r=n.yAxis[o.yAxis],h=n.inverted,x=e.toPixels(this.xAxisMin),l=e.toPixels(this.xAxisMax),p=r.toPixels(this.yAxisMin),c=r.toPixels(this.yAxisMax),y={point:a,type:"path"},u=[],M=[];h&&(s=x,x=p,p=s,s=l,l=c,c=s),o.crosshairX.enabled&&(u=[["M",x,p+(c-p)/2],["L",l,p+(c-p)/2]]),o.crosshairY.enabled&&(M=[["M",x+(l-x)/2,p],["L",x+(l-x)/2,c]]),this.shapes.length>0?(this.shapes[0].options.d=u,this.shapes[1].options.d=M):(t=merge(y,o.crosshairX),i=merge(y,o.crosshairY),this.initShape(extend({d:u},t),!1),this.initShape(extend({d:M},i),!1))},i.prototype.onDrag=function(t){var i=this.mouseMoveToTranslation(t),s=this.options.typeOptions.selectType,n="y"===s?0:i.x,o="x"===s?0:i.y;this.translate(n,o),this.offsetX+=n,this.offsetY+=o,this.redraw(!1,!1,!0)},i.prototype.resize=function(t,s,n,o){var a=this.shapes[2];"x"===o?0===n?(a.translatePoint(t,0,0),a.translatePoint(t,s,3)):(a.translatePoint(t,0,1),a.translatePoint(t,s,2)):"y"===o?0===n?(a.translatePoint(0,s,0),a.translatePoint(0,s,1)):(a.translatePoint(0,s,2),a.translatePoint(0,s,3)):(a.translatePoint(t,0,1),a.translatePoint(t,s,2),a.translatePoint(0,s,3)),i.calculations.updateStartPoints.call(this,!1,!0,n,t,s),this.options.typeOptions.background.height=Math.abs(this.startYMax-this.startYMin),this.options.typeOptions.background.width=Math.abs(this.startXMax-this.startXMin)},i.prototype.redraw=function(t,s,n){this.linkPoints(),this.graphic||this.render(),n&&i.calculations.updateStartPoints.call(this,!0,!1),this.clipRect&&this.clipRect.animate(this.getClipBox()),this.addValues(s),this.addCrosshairs(),this.redrawItems(this.shapes,t),this.redrawItems(this.labels,t),this.controlPoints.forEach(function(t){t.redraw()})},i.prototype.translate=function(t,i){this.shapes.forEach(function(s){s.translate(t,i)}),this.options.typeOptions.point.x=this.startXMin,this.options.typeOptions.point.y=this.startYMin},i.calculations={init:function(){var t=this.options.typeOptions,s=this.chart,n=i.calculations.getPointPos,o=s.inverted,a=s.xAxis[t.xAxis],e=s.yAxis[t.yAxis],r=t.background,h=o?r.height:r.width,x=o?r.width:r.height,l=t.selectType,p=o?a.left:e.top,c=o?e.top:a.left;this.startXMin=t.point.x,this.startYMin=t.point.y,isNumber(h)?this.startXMax=this.startXMin+h:this.startXMax=n(a,this.startXMin,parseFloat(h)),isNumber(x)?this.startYMax=this.startYMin-x:this.startYMax=n(e,this.startYMin,parseFloat(x)),"x"===l?(this.startYMin=e.toValue(p),this.startYMax=e.toValue(p+e.len)):"y"===l&&(this.startXMin=a.toValue(c),this.startXMax=a.toValue(c+a.len))},recalculate:function(t){var s=i.calculations,n=this.options.typeOptions,o=this.chart.xAxis[n.xAxis],a=this.chart.yAxis[n.yAxis],e=i.calculations.getPointPos,r=this.offsetX,h=this.offsetY;this.xAxisMin=e(o,this.startXMin,r),this.xAxisMax=e(o,this.startXMax,r),this.yAxisMin=e(a,this.startYMin,h),this.yAxisMax=e(a,this.startYMax,h),this.min=s.min.call(this),this.max=s.max.call(this),this.average=s.average.call(this),this.bins=s.bins.call(this),t&&this.resize(0,0)},getPointPos:function(t,i,s){return t.toValue(t.toPixels(i)+s)},updateStartPoints:function(t,s,n,o,a){var e=this.options.typeOptions,r=e.selectType,h=this.chart.xAxis[e.xAxis],x=this.chart.yAxis[e.yAxis],l=i.calculations.getPointPos,p=this.startXMin,c=this.startXMax,y=this.startYMin,u=this.startYMax,M=this.offsetX,A=this.offsetY;s&&("x"===r?0===n?this.startXMin=l(h,p,o):this.startXMax=l(h,c,o):"y"===r?0===n?this.startYMin=l(x,y,a):this.startYMax=l(x,u,a):(this.startXMax=l(h,c,o),this.startYMax=l(x,u,a))),t&&(this.startXMin=l(h,p,M),this.startXMax=l(h,c,M),this.startYMin=l(x,y,A),this.startYMax=l(x,u,A),this.offsetX=0,this.offsetY=0)},defaultFormatter:function(){return"Min: "+this.min+"
Max: "+this.max+"
Average: "+this.average+"
Bins: "+this.bins},getExtremes:function(t,i,s,n){return{xAxisMin:Math.min(i,t),xAxisMax:Math.max(i,t),yAxisMin:Math.min(n,s),yAxisMax:Math.max(n,s)}},min:function(){var t=1/0,s=this.chart.series,n=i.calculations.getExtremes(this.xAxisMin,this.xAxisMax,this.yAxisMin,this.yAxisMax),o=!1;return s.forEach(function(i){i.visible&&"highcharts-navigator-series"!==i.options.id&&i.points.forEach(function(i){!i.isNull&&i.yn.xAxisMin&&i.x<=n.xAxisMax&&i.y>n.yAxisMin&&i.y<=n.yAxisMax&&(t=i.y,o=!0)})}),o||(t=""),t},max:function(){var t=-1/0,s=this.chart.series,n=i.calculations.getExtremes(this.xAxisMin,this.xAxisMax,this.yAxisMin,this.yAxisMax),o=!1;return s.forEach(function(i){i.visible&&"highcharts-navigator-series"!==i.options.id&&i.points.forEach(function(i){!i.isNull&&i.y>t&&i.x>n.xAxisMin&&i.x<=n.xAxisMax&&i.y>n.yAxisMin&&i.y<=n.yAxisMax&&(t=i.y,o=!0)})}),o||(t=""),t},average:function(){var t="";return""!==this.max&&""!==this.min&&(t=(this.max+this.min)/2),t},bins:function(){var t=0,s=this.chart.series,n=i.calculations.getExtremes(this.xAxisMin,this.xAxisMax,this.yAxisMin,this.yAxisMax),o=!1;return s.forEach(function(i){i.visible&&"highcharts-navigator-series"!==i.options.id&&i.points.forEach(function(i){!i.isNull&&i.x>n.xAxisMin&&i.x<=n.xAxisMax&&i.y>n.yAxisMin&&i.y<=n.yAxisMax&&(t++,o=!0)})}),o||(t=""),t}},i}(Annotation);Measure.prototype.defaultOptions=merge(Annotation.prototype.defaultOptions,{typeOptions:{selectType:"xy",xAxis:0,yAxis:0,background:{fill:"rgba(130, 170, 255, 0.4)",strokeWidth:0,stroke:void 0},crosshairX:{enabled:!0,zIndex:6,dashStyle:"Dash",markerEnd:"arrow"},crosshairY:{enabled:!0,zIndex:6,dashStyle:"Dash",markerEnd:"arrow"},label:{enabled:!0,style:{fontSize:"11px",color:"#666666"},formatter:void 0}},controlPointOptions:{positioner:function(t){var i,s,n=this.index,o=t.chart,a=t.options,e=a.typeOptions,r=e.selectType,h=a.controlPointOptions,x=o.inverted,l=o.xAxis[e.xAxis],p=o.yAxis[e.yAxis],c=t.xAxisMax,y=t.yAxisMax,u=Measure.calculations.getExtremes(t.xAxisMin,t.xAxisMax,t.yAxisMin,t.yAxisMax);return"x"===r&&(y=(u.yAxisMax-u.yAxisMin)/2,0===n&&(c=t.xAxisMin)),"y"===r&&(c=u.xAxisMin+(u.xAxisMax-u.xAxisMin)/2,0===n&&(y=t.yAxisMin)),x?(i=p.toPixels(y),s=l.toPixels(c)):(i=l.toPixels(c),s=p.toPixels(y)),{x:i-h.width/2,y:s-h.height/2}},events:{drag:function(t,i){var s=this.mouseMoveToTranslation(t),n=i.options.typeOptions.selectType,o=this.index,a="y"===n?0:s.x,e="x"===n?0:s.y;i.resize(a,e,o,n),i.resizeX+=a,i.resizeY+=e,i.redraw(!1,!0)}}}}),Annotation.types.measure=Measure;export default Measure;