/** * Highcharts Gantt JS v11.2.0 (2023-10-30) * * Pathfinder * * (c) 2016-2021 Øystein Moseng * * License: www.highcharts.com/license */!function(t){"object"==typeof module&&module.exports?(t.default=t,module.exports=t):"function"==typeof define&&define.amd?define("highcharts/modules/pathfinder",["highcharts"],function(n){return t(n),t.Highcharts=n,t}):t("undefined"!=typeof Highcharts?Highcharts:void 0)}(function(t){"use strict";var n=t?t._modules:{};function i(t,n,i,r){t.hasOwnProperty(n)||(t[n]=r.apply(null,i),"function"==typeof CustomEvent&&window.dispatchEvent(new CustomEvent("HighchartsModuleLoaded",{detail:{path:n,module:t[n]}})))}i(n,"Gantt/Connection.js",[n["Core/Globals.js"],n["Core/Utilities.js"]],function(t,n){var i=n.defined,r=n.error,e=n.merge,a=n.objectEach,o=t.deg2rad,s=Math.max,h=Math.min;return function(){function t(t,n,i){this.chart=void 0,this.fromPoint=void 0,this.graphics=void 0,this.pathfinder=void 0,this.toPoint=void 0,this.init(t,n,i)}return t.prototype.init=function(t,n,i){this.fromPoint=t,this.toPoint=n,this.options=i,this.chart=t.series.chart,this.pathfinder=this.chart.pathfinder},t.prototype.renderPath=function(t,n,i){var r=this.chart,e=r.styledMode,a=r.pathfinder,o=!r.options.chart.forExport&&!1!==i,s={},h=this.graphics&&this.graphics.path;a.group||(a.group=r.renderer.g().addClass("highcharts-pathfinder-group").attr({zIndex:-1}).add(r.seriesGroup)),a.group.translate(r.plotLeft,r.plotTop),h&&h.renderer||(h=r.renderer.path().add(a.group),e||h.attr({opacity:0})),h.attr(n),s.d=t,e||(s.opacity=1),h[o?"animate":"attr"](s,i),this.graphics=this.graphics||{},this.graphics.path=h},t.prototype.addMarker=function(t,n,i){var r,e,a,s,h,c,x,d,M=this.fromPoint.series.chart,p=M.pathfinder,l=M.renderer,f="start"===t?this.fromPoint:this.toPoint,y=f.getPathfinderAnchorPoint(n);n.enabled&&((d="start"===t?i[1]:i[i.length-2])&&"M"===d[0]||"L"===d[0])&&(x={x:d[1],y:d[2]},e=f.getRadiansToVector(x,y),r=f.getMarkerVector(e,n.radius,y),a=-e/o,n.width&&n.height?(h=n.width,c=n.height):h=c=2*n.radius,this.graphics=this.graphics||{},s={x:r.x-h/2,y:r.y-c/2,width:h,height:c,rotation:a,rotationOriginX:r.x,rotationOriginY:r.y},this.graphics[t]?this.graphics[t].animate(s):(this.graphics[t]=l.symbol(n.symbol).addClass("highcharts-point-connecting-path-"+t+"-marker highcharts-color-"+this.fromPoint.colorIndex).attr(s).add(p.group),l.styledMode||this.graphics[t].attr({fill:n.color||this.fromPoint.color,stroke:n.lineColor,"stroke-width":n.lineWidth,opacity:0}).animate({opacity:1},f.series.options.animation)))},t.prototype.getPath=function(t){var n=this.pathfinder,i=this.chart,a=n.algorithms[t.type],o=n.chartObstacles;return"function"!=typeof a?(r('"'+t.type+'" is not a Pathfinder algorithm.'),{path:[],obstacles:[]}):(a.requiresObstacles&&!o&&(o=n.chartObstacles=n.getChartObstacles(t),i.options.connectors.algorithmMargin=t.algorithmMargin,n.chartObstacleMetrics=n.getObstacleMetrics(o)),a(this.fromPoint.getPathfinderAnchorPoint(t.startMarker),this.toPoint.getPathfinderAnchorPoint(t.endMarker),e({chartObstacles:o,lineObstacles:n.lineObstacles||[],obstacleMetrics:n.chartObstacleMetrics,hardBounds:{xMin:0,xMax:i.plotWidth,yMin:0,yMax:i.plotHeight},obstacleOptions:{margin:t.algorithmMargin},startDirectionX:n.getAlgorithmStartDirection(t.startMarker)},t)))},t.prototype.render=function(){var t=this.fromPoint,n=t.series,r=n.chart,a=r.pathfinder,o={},c=e(r.options.connectors,n.options.connectors,t.options.connectors,this.options);!r.styledMode&&(o.stroke=c.lineColor||t.color,o["stroke-width"]=c.lineWidth,c.dashStyle&&(o.dashstyle=c.dashStyle)),o.class="highcharts-point-connecting-path highcharts-color-"+t.colorIndex,i((c=e(o,c)).marker.radius)||(c.marker.radius=h(s(Math.ceil((c.algorithmMargin||8)/2)-1,1),5));var x=this.getPath(c),d=x.path;x.obstacles&&(a.lineObstacles=a.lineObstacles||[],a.lineObstacles=a.lineObstacles.concat(x.obstacles)),this.renderPath(d,o,n.options.animation),this.addMarker("start",e(c.marker,c.startMarker),d),this.addMarker("end",e(c.marker,c.endMarker),d)},t.prototype.destroy=function(){this.graphics&&(a(this.graphics,function(t){t.destroy()}),delete this.graphics)},t}()}),i(n,"Series/PathUtilities.js",[],function(){function t(t,n){for(var i=[],r=0;r>1].xMin)>0)o=r+1;else{if(!(e<0))return r;s=r-1}return o>0?o-1:0}function s(t,n){for(var i,r=o(t,n.x+1)+1;r--;)if(t[r].xMax>=n.x&&(i=t[r],n.x<=i.xMax&&n.x>=i.xMin&&n.y<=i.yMax&&n.y>=i.yMin))return r;return -1}function h(t){var n=[];if(t.length){n.push(["M",t[0].start.x,t[0].start.y]);for(var i=0;ia(r.y-n.y))?"x":"y";function g(t,n,i,r,e){var a={x:t.x,y:t.y};return a[n]=i[r||n]+(e||0),a}function v(t,n,i){var r=a(n[i]-t[i+"Min"])>a(n[i]-t[i+"Max"]);return g(n,i,t,i+(r?"Max":"Min"),r?1:-1)}y>-1?(o={start:x=v(l[y],r,u),end:r},M=x):M=r,f>-1&&(x=v(c=l[f],n,u),p.push({start:n,end:x}),x[u]>=n[u]==x[u]>=M[u]&&(d=n[u="y"===u?"x":"y"]a(n.y-t.y)),v=g?"x":"y",m=[],b=x.obstacleMetrics,P=r(t.x,n.x)-b.maxWidth-10,C=e(t.x,n.x)+b.maxWidth+10,O=r(t.y,n.y)-b.maxHeight-10,w=e(t.y,n.y)+b.maxHeight+10,k=!1,j=x.chartObstacles,L=o(j,C),A=o(j,P);function E(t,n,i){var e,a,s,h,c=t.x0&&j[x].xMin<=a.x||c<0&&j[x].xMax>=e.x);){if(j[x].xMin<=a.x&&j[x].xMax>=e.x&&j[x].yMin<=s.y&&j[x].yMax>=h.y){if(i)return{y:t.y,x:t.x=o[h+"Max"],M=t[h+"Min"]<=o[h+"Min"],p=t[h+"Max"]>=s[h+"Max"],l=t[h+"Min"]<=s[h+"Min"],f=a(t[h+"Min"]-n[h]),y=a(t[h+"Max"]-n[h]),u=10>a(f-y)?n[h]-1&&(d=j[L],M=n,p=r(d.xMax-M.x,M.x-d.xMin)-1;)y=n[v]-t[v]<0,(u={x:n.x,y:n.y})[v]=j[L][y?v+"Max":v+"Min"]+(y?1:-1),m.push({end:n,start:u}),n=u;return{path:h(f=(f=function t(n,i,a){if(n.x===i.x&&n.y===i.y)return[];var o,h,d,M,p,l,f,y=a?"x":"y",u=x.obstacleOptions.margin,g={soft:{xMin:P,xMax:C,yMin:O,yMax:w},hard:x.hardBounds};return(p=s(j,n))>-1?(M=G(p=j[p],n,i,a,g),c(p,x.hardBounds),f=a?{y:n.y,x:p[M?"xMax":"xMin"]+(M?1:-1)}:{x:n.x,y:p[M?"yMax":"yMin"]+(M?1:-1)},(l=s(j,f))>-1&&(c(l=j[l],x.hardBounds),f[y]=M?e(p[y+"Max"]-u+1,(l[y+"Min"]+p[y+"Max"])/2):r(p[y+"Min"]+u-1,(l[y+"Max"]+p[y+"Min"])/2),n.x===f.x&&n.y===f.y?(k&&(f[y]=M?e(p[y+"Max"],l[y+"Max"])+1:r(p[y+"Min"],l[y+"Min"])-1),k=!k):k=!1),h=[{start:n,end:f}]):(o=E(n,{x:a?i.x:n.x,y:a?n.y:i.y},a),h=[{start:n,end:{x:o.x,y:o.y}}],o[a?"x":"y"]!==i[a?"x":"y"]&&(M=G(o.obstacle,o,i,!a,g),c(o.obstacle,x.hardBounds),d={x:a?o.x:o.obstacle[M?"xMax":"xMin"]+(M?1:-1),y:a?o.obstacle[M?"yMax":"yMin"]+(M?1:-1):o.y},a=!a,h=h.concat(t({x:o.x,y:o.y},d,a)))),h=h.concat(t(h[h.length-1].end,i,!a))}(t,n,g)).concat(m.reverse())),obstacles:f}}return x.requiresObstacles=!0,d.requiresObstacles=!0,{fastAvoid:d,straight:function(t,n){return{path:[["M",t.x,t.y],["L",n.x,n.y]],obstacles:[{start:t,end:n}]}},simpleConnect:x}}),i(n,"Gantt/ConnectorsDefaults.js",[],function(){return{connectors:{type:"straight",radius:0,lineWidth:1,marker:{enabled:!1,align:"center",verticalAlign:"middle",inside:!1,lineWidth:1},startMarker:{symbol:"diamond"},endMarker:{symbol:"arrow-filled"}}}}),i(n,"Gantt/PathfinderComposition.js",[n["Gantt/ConnectorsDefaults.js"],n["Core/Defaults.js"],n["Core/Utilities.js"]],function(t,n,i){var r,e=n.setOptions,a=i.defined,o=i.error,s=i.merge,h=i.pushUnique;function c(t){var n=t.shapeArgs;if(n)return{xMin:n.x||0,xMax:(n.x||0)+(n.width||0),yMin:n.y||0,yMax:(n.y||0)+(n.height||0)};var i=t.graphic&&t.graphic.getBBox();return i?{xMin:t.plotX-i.width/2,xMax:t.plotX+i.width/2,yMin:t.plotY-i.height/2,yMax:t.plotY+i.height/2}:null}return function(n){var i=[];function r(t){var n,i,r=c(this);switch(t.align){case"right":n="xMax";break;case"left":n="xMin"}switch(t.verticalAlign){case"top":i="yMin";break;case"bottom":i="yMax"}return{x:n?r[n]:(r.xMin+r.xMax)/2,y:i?r[i]:(r.yMin+r.yMax)/2}}function x(t,n){var i;return!a(n)&&(i=c(this))&&(n={x:(i.xMin+i.xMax)/2,y:(i.yMin+i.yMax)/2}),Math.atan2(n.y-t.y,t.x-n.x)}function d(t,n,i){for(var r=2*Math.PI,e=c(this),a=e.xMax-e.xMin,o=e.yMax-e.yMin,s=Math.atan2(o,a),h=a/2,x=o/2,d=e.xMin+h,M=e.yMin+x,p={x:d,y:M},l=t,f=1,y=!1,u=1,g=1;l<-Math.PI;)l+=r;for(;l>Math.PI;)l-=r;return f=Math.tan(l),l>-s&&l<=s?(g=-1,y=!0):l>s&&l<=Math.PI-s?g=-1:l>Math.PI-s||l<=-(Math.PI-s)?(u=-1,y=!0):u=-1,y?(p.x+=u*h,p.y+=g*h*f):(p.x+=u*(o/(2*f)),p.y+=g*x),i.x!==d&&(p.x=i.x),i.y!==M&&(p.y=i.y),{x:p.x+n*Math.cos(l),y:p.y-n*Math.sin(l)}}n.compose=function(n,a,c){if(h(i,n)&&n.prototype.callbacks.push(function(t){!1!==t.options.connectors.enabled&&((t.options.pathfinder||t.series.reduce(function(t,n){return n.options&&s(!0,n.options.connectors=n.options.connectors||{},n.options.pathfinder),t||n.options&&n.options.pathfinder},!1))&&(s(!0,t.options.connectors=t.options.connectors||{},t.options.pathfinder),o('WARNING: Pathfinder options have been renamed. Use "chart.connectors" or "series.connectors" instead.')),this.pathfinder=new a(this),this.pathfinder.update(!0))}),h(i,c)){var M=c.prototype;M.getMarkerVector=d,M.getPathfinderAnchorPoint=r,M.getRadiansToVector=x}h(i,e)&&e(t)}}(r||(r={})),r}),i(n,"Gantt/Pathfinder.js",[n["Gantt/Connection.js"],n["Gantt/PathfinderAlgorithms.js"],n["Gantt/PathfinderComposition.js"],n["Core/Series/Point.js"],n["Core/Utilities.js"]],function(t,n,i,r,e){var a=e.addEvent,o=e.defined,s=e.pick,h=e.splat,c=Math.max,x=Math.min,d=function(){function n(t){this.chart=void 0,this.chartObstacles=void 0,this.chartObstacleMetrics=void 0,this.connections=void 0,this.group=void 0,this.lineObstacles=void 0,this.init(t)}return n.compose=function(t,r){i.compose(t,n,r)},n.prototype.init=function(t){this.chart=t,this.connections=[],a(t,"redraw",function(){this.pathfinder.update()})},n.prototype.update=function(n){var i=this.chart,e=this,a=e.connections;e.connections=[],i.series.forEach(function(n){n.visible&&!n.options.isInternal&&n.points.forEach(function(n){var a,o,s=n.options;s&&s.dependency&&(s.connect=s.dependency);var c=(null===(a=n.options)||void 0===a?void 0:a.connect)&&h(n.options.connect);n.visible&&!1!==n.isInside&&c&&c.forEach(function(a){(o=i.get("string"==typeof a?a:a.to))instanceof r&&o.series.visible&&o.visible&&!1!==o.isInside&&e.connections.push(new t(n,o,"string"==typeof a?{}:a))})})});for(var o=0,s=void 0,c=void 0,x=a.length,d=e.connections.length;oi.yMin-e&&n.yMin-ei.xMin-e&&n.xMin-ei.xMax?n.xMin-i.xMax:i.xMin-n.xMax:1/0,c=o?n.yMin>i.yMax?n.yMin-i.yMax:i.yMin-n.yMax:1/0;return o&&a?e?t(n,i,Math.floor(e/2)):1/0:x(h,c)}(t[e],t[a]))<80&&r.push(n);return r.push(80),c(Math.floor(r.sort(function(t,n){return t-n})[Math.floor(r.length/10)]/2-1),1)}(e),e.forEach(function(t){t.xMin-=n,t.xMax+=n,t.yMin-=n,t.yMax+=n})),e},n.prototype.getObstacleMetrics=function(t){for(var n,i,r=0,e=0,a=t.length;a--;)n=t[a].xMax-t[a].xMin,i=t[a].yMax-t[a].yMin,r