/* Highcharts JS v8.0.0 (2019-12-10) Force directed graph module (c) 2010-2019 Torstein Honsi License: www.highcharts.com/license */ (function(g){"object"===typeof module&&module.exports?(g["default"]=g,module.exports=g):"function"===typeof define&&define.amd?define("highcharts/modules/networkgraph",["highcharts"],function(l){g(l);g.Highcharts=l;return g}):g("undefined"!==typeof Highcharts?Highcharts:void 0)})(function(g){function l(e,a,c,d){e.hasOwnProperty(a)||(e[a]=d.apply(null,c))}g=g?g._modules:{};l(g,"mixins/nodes.js",[g["parts/Globals.js"],g["parts/Utilities.js"]],function(e,a){var c=a.defined,d=a.extend,f=a.pick,k=e.Point; e.NodesMixin={createNode:function(a){function c(b,h){return e.find(b,function(b){return b.id===h})}var b=c(this.nodes,a),h=this.pointClass;if(!b){var m=this.options.nodes&&c(this.options.nodes,a);b=(new h).init(this,d({className:"highcharts-node",isNode:!0,id:a,y:1},m));b.linksTo=[];b.linksFrom=[];b.formatPrefix="node";b.name=b.name||b.options.id;b.mass=f(b.options.mass,b.options.marker&&b.options.marker.radius,this.options.marker&&this.options.marker.radius,4);b.getSum=function(){var h=0,d=0;b.linksTo.forEach(function(b){h+= b.weight});b.linksFrom.forEach(function(b){d+=b.weight});return Math.max(h,d)};b.offset=function(h,d){for(var a=0,m=0;ma?1:0)},barycenter:function(){var a=this.options.gravitationalConstant,c=this.barycenter.xFactor,d=this.barycenter.yFactor;c=(c-(this.box.left+this.box.width)/2)*a;d=(d-(this.box.top+this.box.height)/2)*a;this.nodes.forEach(function(a){a.fixedPosition|| (a.plotX-=c/a.mass/a.degree,a.plotY-=d/a.mass/a.degree)})},repulsive:function(a,c,d){c=c*this.diffTemperature/a.mass/a.degree;a.fixedPosition||(a.plotX+=d.x*c,a.plotY+=d.y*c)},attractive:function(a,c,d){var f=a.getMass(),k=-d.x*c*this.diffTemperature;c=-d.y*c*this.diffTemperature;a.fromNode.fixedPosition||(a.fromNode.plotX-=k*f.fromNode/a.fromNode.degree,a.fromNode.plotY-=c*f.fromNode/a.fromNode.degree);a.toNode.fixedPosition||(a.toNode.plotX+=k*f.toNode/a.toNode.degree,a.toNode.plotY+=c*f.toNode/ a.toNode.degree)},integrate:function(a,c){var d=-a.options.friction,f=a.options.maxSpeed,k=(c.plotX+c.dispX-c.prevX)*d;d*=c.plotY+c.dispY-c.prevY;var e=Math.abs,g=e(k)/(k||1);e=e(d)/(d||1);k=g*Math.min(f,Math.abs(k));d=e*Math.min(f,Math.abs(d));c.prevX=c.plotX+c.dispX;c.prevY=c.plotY+c.dispY;c.plotX+=k;c.plotY+=d;c.temperature=a.vectorLength({x:k,y:d})},getK:function(a){return Math.pow(a.box.width*a.box.height/a.nodes.length,.5)}},euler:{attractiveForceFunction:function(a,c){return a*a/c},repulsiveForceFunction:function(a, c){return c*c/a},barycenter:function(){var a=this.options.gravitationalConstant,c=this.barycenter.xFactor,d=this.barycenter.yFactor;this.nodes.forEach(function(f){if(!f.fixedPosition){var k=f.getDegree();k*=1+k/2;f.dispX+=(c-f.plotX)*a*k/f.degree;f.dispY+=(d-f.plotY)*a*k/f.degree}})},repulsive:function(a,c,d,f){a.dispX+=d.x/f*c/a.degree;a.dispY+=d.y/f*c/a.degree},attractive:function(a,c,d,f){var k=a.getMass(),e=d.x/f*c;c*=d.y/f;a.fromNode.fixedPosition||(a.fromNode.dispX-=e*k.fromNode/a.fromNode.degree, a.fromNode.dispY-=c*k.fromNode/a.fromNode.degree);a.toNode.fixedPosition||(a.toNode.dispX+=e*k.toNode/a.toNode.degree,a.toNode.dispY+=c*k.toNode/a.toNode.degree)},integrate:function(a,c){c.dispX+=c.dispX*a.options.friction;c.dispY+=c.dispY*a.options.friction;var d=c.temperature=a.vectorLength({x:c.dispX,y:c.dispY});0!==d&&(c.plotX+=c.dispX/d*Math.min(Math.abs(c.dispX),a.temperature),c.plotY+=c.dispY/d*Math.min(Math.abs(c.dispY),a.temperature))},getK:function(a){return Math.pow(a.box.width*a.box.height/ a.nodes.length,.3)}}}});l(g,"modules/networkgraph/QuadTree.js",[g["parts/Globals.js"],g["parts/Utilities.js"]],function(e,a){a=a.extend;var c=e.QuadTreeNode=function(a){this.box=a;this.boxSize=Math.min(a.width,a.height);this.nodes=[];this.body=this.isInternal=!1;this.isEmpty=!0};a(c.prototype,{insert:function(a,f){this.isInternal?this.nodes[this.getBoxPosition(a)].insert(a,f-1):(this.isEmpty=!1,this.body?f?(this.isInternal=!0,this.divideBox(),!0!==this.body&&(this.nodes[this.getBoxPosition(this.body)].insert(this.body, f-1),this.body=!0),this.nodes[this.getBoxPosition(a)].insert(a,f-1)):(f=new c({top:a.plotX,left:a.plotY,width:.1,height:.1}),f.body=a,f.isInternal=!1,this.nodes.push(f)):(this.isInternal=!1,this.body=a))},updateMassAndCenter:function(){var a=0,c=0,e=0;this.isInternal?(this.nodes.forEach(function(d){d.isEmpty||(a+=d.mass,c+=d.plotX*d.mass,e+=d.plotY*d.mass)}),c/=a,e/=a):this.body&&(a=this.body.mass,c=this.body.plotX,e=this.body.plotY);this.mass=a;this.plotX=c;this.plotY=e},divideBox:function(){var a= this.box.width/2,f=this.box.height/2;this.nodes[0]=new c({left:this.box.left,top:this.box.top,width:a,height:f});this.nodes[1]=new c({left:this.box.left+a,top:this.box.top,width:a,height:f});this.nodes[2]=new c({left:this.box.left+a,top:this.box.top+f,width:a,height:f});this.nodes[3]=new c({left:this.box.left,top:this.box.top+f,width:a,height:f})},getBoxPosition:function(a){var d=a.plotYMath.abs(this.systemTemperature- this.prevSystemTemperature)||0>=this.temperature},getSystemTemperature:function(){return this.nodes.reduce(function(a,c){return a+c.temperature},0)},vectorLength:function(a){return Math.sqrt(a.x*a.x+a.y*a.y)},getDistR:function(a,c){a=this.getDistXY(a,c);return this.vectorLength(a)},getDistXY:function(a,c){var b=a.plotX-c.plotX;a=a.plotY-c.plotY;return{x:b,y:a,absX:Math.abs(b),absY:Math.abs(a)}}});a(n,"predraw",function(){this.graphLayoutsLookup&&this.graphLayoutsLookup.forEach(function(a){a.stop()})}); a(n,"render",function(){function a(a){a.maxIterations--&&isFinite(a.temperature)&&!a.isStable()&&!a.options.enableSimulation&&(a.beforeStep&&a.beforeStep(),a.step(),d=!1,c=!0)}var c=!1;if(this.graphLayoutsLookup){g(!1,this);for(this.graphLayoutsLookup.forEach(function(a){a.start()});!d;){var d=!0;this.graphLayoutsLookup.forEach(a)}c&&this.series.forEach(function(a){a&&a.layout&&a.render()})}})});l(g,"modules/networkgraph/draggable-nodes.js",[g["parts/Globals.js"]],function(e){var a=e.Chart,c=e.addEvent; e.dragNodesMixin={onMouseDown:function(a,c){c=this.chart.pointer.normalize(c);a.fixedPosition={chartX:c.chartX,chartY:c.chartY,plotX:a.plotX,plotY:a.plotY};a.inDragMode=!0},onMouseMove:function(a,c){if(a.fixedPosition&&a.inDragMode){var d=this.chart,e=d.pointer.normalize(c);c=a.fixedPosition.chartX-e.chartX;e=a.fixedPosition.chartY-e.chartY;if(5"+this.point.toNode.name},linkTextPath:{enabled:!0}, textPath:{enabled:!1}},link:{color:"rgba(100, 100, 100, 0.5)",width:1},draggable:!0,layoutAlgorithm:{initialPositions:"circle",initialPositionRadius:1,enableSimulation:!1,theta:.5,maxSpeed:10,approximation:"none",type:"reingold-fruchterman",integration:"euler",maxIterations:1E3,gravitationalConstant:.0625,friction:-.981},showInLegend:!1},{forces:["barycenter","repulsive","attractive"],hasDraggableNodes:!0,drawGraph:null,isCartesian:!1,requireSorting:!1,directTouch:!0,noSharedTooltip:!0,pointArrayMap:["from", "to"],trackerGroups:["group","markerGroup","dataLabelsGroup"],drawTracker:e.TrackerMixin.drawTrackerPoint,animate:null,buildKDTree:e.noop,createNode:e.NodesMixin.createNode,destroy:function(){this.layout.removeElementFromCollection(this,this.layout.series);e.NodesMixin.destroy.call(this)},init:function(){n.prototype.init.apply(this,arguments);f(this,"updatedData",function(){this.layout&&this.layout.stop()});return this},generatePoints:function(){var a;e.NodesMixin.generatePoints.apply(this,arguments); this.options.nodes&&this.options.nodes.forEach(function(a){this.nodeLookup[a.id]||(this.nodeLookup[a.id]=this.createNode(a.id))},this);for(a=this.nodes.length-1;0<=a;a--){var b=this.nodes[a];b.degree=b.getDegree();b.radius=d(b.marker&&b.marker.radius,this.options.marker&&this.options.marker.radius,0);this.nodeLookup[b.id]||b.remove()}this.data.forEach(function(a){a.formatPrefix="link"});this.indexateNodes()},indexateNodes:function(){this.nodes.forEach(function(a,b){a.index=b})},markerAttribs:function(a, b){b=n.prototype.markerAttribs.call(this,a,b);c(a.plotY)||(b.y=0);b.x=(a.plotX||0)-(b.width/2||0);return b},translate:function(){this.processedXData||this.processData();this.generatePoints();this.deferLayout();this.nodes.forEach(function(a){a.isInside=!0;a.linksFrom.forEach(function(a){a.shapeType="path";a.y=1})})},deferLayout:function(){var a=this.options.layoutAlgorithm,b=this.chart.graphLayoutsStorage,d=this.chart.graphLayoutsLookup,f=this.chart.options.chart;if(this.visible){b||(this.chart.graphLayoutsStorage= b={},this.chart.graphLayoutsLookup=d=[]);var g=b[a.type];g||(a.enableSimulation=c(f.forExport)?!f.forExport:a.enableSimulation,b[a.type]=g=new e.layouts[a.type],g.init(a),d.splice(g.index,0,g));this.layout=g;g.setArea(0,0,this.chart.plotWidth,this.chart.plotHeight);g.addElementsToCollection([this],g.series);g.addElementsToCollection(this.nodes,g.nodes);g.addElementsToCollection(this.points,g.links)}},render:function(){var a=this.points,b=this.chart.hoverPoint,c=[];this.points=this.nodes;g.line.prototype.render.call(this); this.points=a;a.forEach(function(a){a.fromNode&&a.toNode&&(a.renderLink(),a.redrawLink())});b&&b.series===this&&this.redrawHalo(b);this.chart.hasRendered&&!this.options.dataLabels.allowOverlap&&(this.nodes.concat(this.points).forEach(function(a){a.dataLabel&&c.push(a.dataLabel)}),this.chart.hideOverlappingLabels(c))},drawDataLabels:function(){var a=this.options.dataLabels.textPath;n.prototype.drawDataLabels.apply(this,arguments);this.points=this.data;this.options.dataLabels.textPath=this.options.dataLabels.linkTextPath; n.prototype.drawDataLabels.apply(this,arguments);this.points=this.nodes;this.options.dataLabels.textPath=a},pointAttribs:function(a,b){var c=b||a.state||"normal";b=n.prototype.pointAttribs.call(this,a,c);c=this.options.states[c];a.isNode||(b=a.getLinkAttributes(),c&&(b={stroke:c.linkColor||b.stroke,dashstyle:c.linkDashStyle||b.dashstyle,opacity:d(c.linkOpacity,b.opacity),"stroke-width":c.linkColor||b["stroke-width"]}));return b},redrawHalo:b.redrawHalo,onMouseDown:b.onMouseDown,onMouseMove:b.onMouseMove, onMouseUp:b.onMouseUp,setState:function(a,b){b?(this.points=this.nodes.concat(this.data),n.prototype.setState.apply(this,arguments),this.points=this.data):n.prototype.setState.apply(this,arguments);this.layout.simulation||a||this.render()}},{setState:e.NodesMixin.setNodeState,init:function(){l.prototype.init.apply(this,arguments);this.series.options.draggable&&!this.series.chart.styledMode&&(f(this,"mouseOver",function(){e.css(this.series.chart.container,{cursor:"move"})}),f(this,"mouseOut",function(){e.css(this.series.chart.container, {cursor:"default"})}));return this},getDegree:function(){var a=this.isNode?this.linksFrom.length+this.linksTo.length:0;return 0===a?1:a},getLinkAttributes:function(){var a=this.series.options.link,b=this.options;return{"stroke-width":d(b.width,a.width),stroke:b.color||a.color,dashstyle:b.dashStyle||a.dashStyle,opacity:d(b.opacity,a.opacity,1)}},renderLink:function(){if(!this.graphic&&(this.graphic=this.series.chart.renderer.path(this.getLinkPath()).add(this.series.group),!this.series.chart.styledMode)){var a= this.series.pointAttribs(this);this.graphic.attr(a);(this.dataLabels||[]).forEach(function(b){b&&b.attr({opacity:a.opacity})})}},redrawLink:function(){var a=this.getLinkPath();if(this.graphic){this.shapeArgs={d:a};if(!this.series.chart.styledMode){var b=this.series.pointAttribs(this);this.graphic.attr(b);(this.dataLabels||[]).forEach(function(a){a&&a.attr({opacity:b.opacity})})}this.graphic.animate(this.shapeArgs);this.plotX=(a[1]+a[4])/2;this.plotY=(a[2]+a[5])/2}},getMass:function(){var a=this.fromNode.mass, b=this.toNode.mass,c=a+b;return{fromNode:1-a/c,toNode:1-b/c}},getLinkPath:function(){var a=this.fromNode,b=this.toNode;a.plotX>b.plotX&&(a=this.toNode,b=this.fromNode);return["M",a.plotX,a.plotY,"L",b.plotX,b.plotY]},isValid:function(){return!this.isNode||c(this.id)},remove:function(a,b){var c=this.series,d=c.options.nodes||[],e,f=d.length;if(this.isNode){c.points=[];[].concat(this.linksFrom).concat(this.linksTo).forEach(function(a){e=a.fromNode.linksFrom.indexOf(a);-1