/* Highcharts Gantt JS v8.2.0 (2020-08-20) Pathfinder (c) 2016-2019 ystein Moseng License: www.highcharts.com/license */ (function(a){"object"===typeof module&&module.exports?(a["default"]=a,module.exports=a):"function"===typeof define&&define.amd?define("highcharts/modules/pathfinder",["highcharts"],function(z){a(z);a.Highcharts=z;return a}):a("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(a){function z(a,q,m,r){a.hasOwnProperty(q)||(a[q]=r.apply(null,m))}a=a?a._modules:{};z(a,"Extensions/ArrowSymbols.js",[a["Core/Renderer/SVG/SVGRenderer.js"]],function(a){a.prototype.symbols.arrow=function(a,m,r,n){return[["M", a,m+n/2],["L",a+r,m],["L",a,m+n/2],["L",a+r,m+n]]};a.prototype.symbols["arrow-half"]=function(q,m,r,n){return a.prototype.symbols.arrow(q,m,r/2,n)};a.prototype.symbols["triangle-left"]=function(a,m,r,n){return[["M",a+r,m],["L",a,m+n/2],["L",a+r,m+n],["Z"]]};a.prototype.symbols["arrow-filled"]=a.prototype.symbols["triangle-left"];a.prototype.symbols["triangle-left-half"]=function(q,m,r,n){return a.prototype.symbols["triangle-left"](q,m,r/2,n)};a.prototype.symbols["arrow-filled-half"]=a.prototype.symbols["triangle-left-half"]}); z(a,"Gantt/Connection.js",[a["Core/Globals.js"],a["Core/Options.js"],a["Core/Series/Point.js"],a["Core/Utilities.js"]],function(a,q,m,r){function n(b){var e=b.shapeArgs;return e?{xMin:e.x,xMax:e.x+e.width,yMin:e.y,yMax:e.y+e.height}:(e=b.graphic&&b.graphic.getBBox())?{xMin:b.plotX-e.width/2,xMax:b.plotX+e.width/2,yMin:b.plotY-e.height/2,yMax:b.plotY+e.height/2}:null}"";var y=r.defined,z=r.error,x=r.extend,A=r.merge,B=r.objectEach,h=a.deg2rad,c=Math.max,l=Math.min;x(q.defaultOptions,{connectors:{type:"straight", lineWidth:1,marker:{enabled:!1,align:"center",verticalAlign:"middle",inside:!1,lineWidth:1},startMarker:{symbol:"diamond"},endMarker:{symbol:"arrow-filled"}}});q=function(){function b(e,t,f){this.toPoint=this.pathfinder=this.graphics=this.fromPoint=this.chart=void 0;this.init(e,t,f)}b.prototype.init=function(e,t,f){this.fromPoint=e;this.toPoint=t;this.options=f;this.chart=e.series.chart;this.pathfinder=this.chart.pathfinder};b.prototype.renderPath=function(e,t,f){var b=this.chart,h=b.styledMode,c= b.pathfinder,d=!b.options.chart.forExport&&!1!==f,g=this.graphics&&this.graphics.path;c.group||(c.group=b.renderer.g().addClass("highcharts-pathfinder-group").attr({zIndex:-1}).add(b.seriesGroup));c.group.translate(b.plotLeft,b.plotTop);g&&g.renderer||(g=b.renderer.path().add(c.group),h||g.attr({opacity:0}));g.attr(t);e={d:e};h||(e.opacity=1);g[d?"animate":"attr"](e,f);this.graphics=this.graphics||{};this.graphics.path=g};b.prototype.addMarker=function(e,b,f){var c=this.fromPoint.series.chart,t=c.pathfinder; c=c.renderer;var a="start"===e?this.fromPoint:this.toPoint,d=a.getPathfinderAnchorPoint(b);if(b.enabled&&((f="start"===e?f[1]:f[f.length-2])&&"M"===f[0]||"L"===f[0])){f={x:f[1],y:f[2]};f=a.getRadiansToVector(f,d);d=a.getMarkerVector(f,b.radius,d);f=-f/h;if(b.width&&b.height){var g=b.width;var v=b.height}else g=v=2*b.radius;this.graphics=this.graphics||{};d={x:d.x-g/2,y:d.y-v/2,width:g,height:v,rotation:f,rotationOriginX:d.x,rotationOriginY:d.y};this.graphics[e]?this.graphics[e].animate(d):(this.graphics[e]= c.symbol(b.symbol).addClass("highcharts-point-connecting-path-"+e+"-marker").attr(d).add(t.group),c.styledMode||this.graphics[e].attr({fill:b.color||this.fromPoint.color,stroke:b.lineColor,"stroke-width":b.lineWidth,opacity:0}).animate({opacity:1},a.series.options.animation))}};b.prototype.getPath=function(b){var e=this.pathfinder,c=this.chart,h=e.algorithms[b.type],a=e.chartObstacles;if("function"!==typeof h)return z('"'+b.type+'" is not a Pathfinder algorithm.'),{path:[],obstacles:[]};h.requiresObstacles&& !a&&(a=e.chartObstacles=e.getChartObstacles(b),c.options.connectors.algorithmMargin=b.algorithmMargin,e.chartObstacleMetrics=e.getObstacleMetrics(a));return h(this.fromPoint.getPathfinderAnchorPoint(b.startMarker),this.toPoint.getPathfinderAnchorPoint(b.endMarker),A({chartObstacles:a,lineObstacles:e.lineObstacles||[],obstacleMetrics:e.chartObstacleMetrics,hardBounds:{xMin:0,xMax:c.plotWidth,yMin:0,yMax:c.plotHeight},obstacleOptions:{margin:b.algorithmMargin},startDirectionX:e.getAlgorithmStartDirection(b.startMarker)}, b))};b.prototype.render=function(){var b=this.fromPoint,a=b.series,h=a.chart,G=h.pathfinder,p=A(h.options.connectors,a.options.connectors,b.options.connectors,this.options),m={};h.styledMode||(m.stroke=p.lineColor||b.color,m["stroke-width"]=p.lineWidth,p.dashStyle&&(m.dashstyle=p.dashStyle));m["class"]="highcharts-point-connecting-path highcharts-color-"+b.colorIndex;p=A(m,p);y(p.marker.radius)||(p.marker.radius=l(c(Math.ceil((p.algorithmMargin||8)/2)-1,1),5));b=this.getPath(p);h=b.path;b.obstacles&& (G.lineObstacles=G.lineObstacles||[],G.lineObstacles=G.lineObstacles.concat(b.obstacles));this.renderPath(h,m,a.options.animation);this.addMarker("start",A(p.marker,p.startMarker),h);this.addMarker("end",A(p.marker,p.endMarker),h)};b.prototype.destroy=function(){this.graphics&&(B(this.graphics,function(b){b.destroy()}),delete this.graphics)};return b}();a.Connection=q;x(m.prototype,{getPathfinderAnchorPoint:function(b){var h=n(this);switch(b.align){case "right":var c="xMax";break;case "left":c="xMin"}switch(b.verticalAlign){case "top":var a= "yMin";break;case "bottom":a="yMax"}return{x:c?h[c]:(h.xMin+h.xMax)/2,y:a?h[a]:(h.yMin+h.yMax)/2}},getRadiansToVector:function(b,h){var c;y(h)||(c=n(this))&&(h={x:(c.xMin+c.xMax)/2,y:(c.yMin+c.yMax)/2});return Math.atan2(h.y-b.y,b.x-h.x)},getMarkerVector:function(b,h,c){var a=2*Math.PI,e=n(this),l=e.xMax-e.xMin,m=e.yMax-e.yMin,d=Math.atan2(m,l),g=!1;l/=2;var v=m/2,J=e.xMin+l;e=e.yMin+v;for(var H=J,I=e,k={},D=1,u=1;b<-Math.PI;)b+=a;for(;b>Math.PI;)b-=a;a=Math.tan(b);b>-d&&b<=d?(u=-1,g=!0):b>d&&b<= Math.PI-d?u=-1:b>Math.PI-d||b<=-(Math.PI-d)?(D=-1,g=!0):D=-1;g?(H+=D*l,I+=u*l*a):(H+=m/(2*a)*D,I+=u*v);c.x!==J&&(H=c.x);c.y!==e&&(I=c.y);k.x=H+h*Math.cos(b);k.y=I-h*Math.sin(b);return k}});return q});z(a,"Gantt/PathfinderAlgorithms.js",[a["Core/Utilities.js"]],function(a){function q(h,c,a){a=a||0;var b=h.length-1;c-=1e-7;for(var e,l;a<=b;)if(e=b+a>>1,l=c-h[e].xMin,0l)b=e-1;else return e;return 0=c.x)b=a[h], b=c.x<=b.xMax&&c.x>=b.xMin&&c.y<=b.yMax&&c.y>=b.yMin;if(b)return h}return-1}function r(a){var c=[];if(a.length){c.push(["M",a[0].start.x,a[0].start.y]);for(var h=0;hB(c[d]-a[d+"Max"]);return b(c,d,a,d+(g?"Max":"Min"),g?1:-1)}var t=[],f=z(l.startDirectionX,B(c.x-a.x)>B(c.y-a.y))?"x":"y",n=l.chartObstacles,p=m(n,a);l=m(n,c);if(-1=a[f]===l[f]>=d[f]&&(f="y"===f?"x":"y",c=a[f]g?x(q(k,e.x),k.length-1):0;k[d]&&(0g&&k[d].xMax>=v.x);){if(k[d].xMin<=e.x&&k[d].xMax>=v.x&&k[d].yMin<=C.y&&k[d].yMax>=h.y)return c?{y:a.y,x:a.x=v[k+"Max"];v=a[k+"Min"]<=v[k+"Min"];var f=a[k+"Max"]>=h[k+"Max"];h=a[k+"Min"]<=h[k+"Min"];var K=B(a[k+"Min"]-d[k]),l=B(a[k+"Max"]-d[k]);c=10>B(K-l)?d[k]B(c.y-a.y)),p=y?"x":"y",E=[],d=!1,g=l.obstacleMetrics,v=x(a.x,c.x)-g.maxWidth-10,J=A(a.x,c.x)+g.maxWidth+10,H=x(a.y,c.y)-g.maxHeight-10,I=A(a.y,c.y)+g.maxHeight+10,k=l.chartObstacles;var D=q(k,v);g=q(k,J);k=k.slice(D,g+1);if(-1<(g=m(k,c))){var u=f(k[g],c,a);E.push({end:c,start:u});c=u}for(;-1<(g=m(k,c));)D=0>c[p]-a[p],u={x:c.x,y:c.y},u[p]=k[g][D?p+"Max":p+"Min"]+(D?1:-1),E.push({end:c,start:u}),c=u;a=h(a,c,y);a=a.concat(E.reverse()); return{path:r(a),obstacles:a}},{requiresObstacles:!0}),straight:function(a,c){return{path:[["M",a.x,a.y],["L",c.x,c.y]],obstacles:[{start:a,end:c}]}},simpleConnect:a}});z(a,"Gantt/Pathfinder.js",[a["Gantt/Connection.js"],a["Core/Chart/Chart.js"],a["Core/Globals.js"],a["Core/Options.js"],a["Core/Series/Point.js"],a["Core/Utilities.js"],a["Gantt/PathfinderAlgorithms.js"]],function(a,q,m,r,n,y,z){function x(a){var b=a.shapeArgs;return b?{xMin:b.x,xMax:b.x+b.width,yMin:b.y,yMax:b.y+b.height}:(b=a.graphic&& a.graphic.getBBox())?{xMin:a.plotX-b.width/2,xMax:a.plotX+b.width/2,yMin:a.plotY-b.height/2,yMax:a.plotY+b.height/2}:null}function A(a){for(var b=a.length,c=0,d,e,f=[],k=function(a,b,c){c=t(c,10);var d=a.yMax+c>b.yMin-c&&a.yMin-cb.xMin-c&&a.xMin-cb.xMax?a.xMin-b.xMax:b.xMin-a.xMax:Infinity,e=g?a.yMin>b.yMax?a.yMin-b.yMax:b.yMin-a.yMax:Infinity;return g&&d?c?k(a,b,Math.floor(c/2)):Infinity:p(f,e)};ce&&f.push(e);f.push(80); return G(Math.floor(f.sort(function(a,b){return a-b})[Math.floor(f.length/10)]/2-1),1)}function B(a){if(a.options.pathfinder||a.series.reduce(function(a,b){b.options&&e(!0,b.options.connectors=b.options.connectors||{},b.options.pathfinder);return a||b.options&&b.options.pathfinder},!1))e(!0,a.options.connectors=a.options.connectors||{},a.options.pathfinder),l('WARNING: Pathfinder options have been renamed. Use "chart.connectors" or "series.connectors" instead.')}"";var h=y.addEvent,c=y.defined,l= y.error,b=y.extend,e=y.merge,t=y.pick,f=y.splat,G=Math.max,p=Math.min;b(r.defaultOptions,{connectors:{type:"straight",lineWidth:1,marker:{enabled:!1,align:"center",verticalAlign:"middle",inside:!1,lineWidth:1},startMarker:{symbol:"diamond"},endMarker:{symbol:"arrow-filled"}}});var E=function(){function b(a){this.lineObstacles=this.group=this.connections=this.chartObstacleMetrics=this.chartObstacles=this.chart=void 0;this.init(a)}b.prototype.init=function(a){this.chart=a;this.connections=[];h(a,"redraw", function(){this.pathfinder.update()})};b.prototype.update=function(b){var c=this.chart,d=this,g=d.connections;d.connections=[];c.series.forEach(function(b){b.visible&&!b.options.isInternal&&b.points.forEach(function(b){var g,e=b.options&&b.options.connect&&f(b.options.connect);b.visible&&!1!==b.isInside&&e&&e.forEach(function(e){g=c.get("string"===typeof e?e:e.to);g instanceof n&&g.series.visible&&g.visible&&!1!==g.isInside&&d.connections.push(new a(b,g,"string"===typeof e?{}:e))})})});for(var e= 0,k,h,l=g.length,m=d.connections.length;eMath.PI;)a-=d;d=Math.tan(a);a>-h&&a<=h?(v=-1,l=!0):a>h&&a<=Math.PI-h?v=-1:a>Math.PI-h||a<=-(Math.PI-h)?(t=-1,l=!0):t=-1;l?(p+=t*f,q+=v*f*d):(p+=g/(2*d)*t,q+=v*m);c.x!==n&&(p=c.x);c.y!==e&&(q=c.y);r.x=p+b*Math.cos(a);r.y=q-b*Math.sin(a);return r}});q.prototype.callbacks.push(function(a){!1!== a.options.connectors.enabled&&(B(a),this.pathfinder=new E(this),this.pathfinder.update(!0))});return E});z(a,"masters/modules/pathfinder.src.js",[],function(){})}); //# sourceMappingURL=pathfinder.js.map