!function(t,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("d3-selection"),require("d3-transition")):"function"==typeof define&&define.amd?define(["exports","d3-selection","d3-transition"],r):r(t.venn={},t.d3,t.d3)}(this,function(t,r,n){"use strict";var e=1e-10;function a(t,r){var n,a=function(t){for(var r=[],n=0;nr[n].radius+e)return!1;return!0}(r,t)}),l=0,h=0,x=[];if(u.length>1){var c=f(u);for(n=0;n-1){var M=t[p.parentIndex[m]],z=Math.atan2(p.x-M.x,p.y-M.y),b=Math.atan2(v.x-M.x,v.y-M.y),w=b-z;w<0&&(w+=2*Math.PI);var I=b-w/2,R=s(d,{x:M.x+M.radius*Math.sin(I),y:M.y+M.radius*Math.cos(I)});R>2*M.radius&&(R=2*M.radius),(null===y||y.width>R)&&(y={circle:M,width:R,p1:p,p2:v})}null!==y&&(x.push(y),l+=i(y.circle.radius,y.width),v=p)}}else{var P=t[0];for(n=1;nMath.abs(P.radius-t[n].radius)){A=!0;break}A?l=h=0:(l=P.radius*P.radius*Math.PI,x.push({circle:P,p1:{x:P.x,y:P.y+P.radius},p2:{x:P.x-e,y:P.y+P.radius},width:2*P.radius}))}return h/=2,r&&(r.area=l+h,r.arcArea=l,r.polygonArea=h,r.arcs=x,r.innerPoints=u,r.intersectionPoints=a),l+h}function i(t,r){return t*t*Math.acos(1-r/t)-(t-r)*Math.sqrt(r*(2*t-r))}function s(t,r){return Math.sqrt((t.x-r.x)*(t.x-r.x)+(t.y-r.y)*(t.y-r.y))}function u(t,r,n){if(n>=t+r)return 0;if(n<=Math.abs(t-r))return Math.PI*Math.min(t,r)*Math.min(t,r);var e=r-(n*n-t*t+r*r)/(2*n);return i(t,t-(n*n-r*r+t*t)/(2*n))+i(r,e)}function o(t,r){var n=s(t,r),e=t.radius,a=r.radius;if(n>=e+a||n<=Math.abs(e-a))return[];var i=(e*e-a*a+n*n)/(2*n),u=Math.sqrt(e*e-i*i),o=t.x+i*(r.x-t.x)/n,f=t.y+i*(r.y-t.y)/n,l=-(r.y-t.y)*(u/n),h=-(r.x-t.x)*(u/n);return[{x:o+l,y:f-h},{x:o-l,y:f+h}]}function f(t){for(var r={x:0,y:0},n=0;n=g[c-1].fx){var F=!1;if(z.fx>A.fx?(v(b,1+h,M,-h,A),b.fx=t(b),b.fx=1)break;for(p=1;pu+i*a*o||f>=g)c=a;else{if(Math.abs(h)<=-s*o)return a;h*(c-l)>=0&&(c=l),l=a,g=f}return 0}a=a||1,i=i||1e-6,s=s||.1;for(var p=0;p<10;++p){if(v(e.x,1,n.x,a,r),f=e.fx=t(e.x,e.fxprime),h=x(e.fxprime,r),f>u+i*a*o||p&&f>=l)return g(c,a,l);if(Math.abs(h)<=-s*o)return a;if(h>=0)return g(a,c,f);l=f,c=a,a*=2}return a}function y(t,r,n){var e,a,i,s={x:r.slice(),fx:0,fxprime:r.slice()},u={x:r.slice(),fx:0,fxprime:r.slice()},o=r.slice(),f=1;i=(n=n||{}).maxIterations||20*r.length,s.fx=t(s.x,s.fxprime),g(e=s.fxprime.slice(),s.fxprime,-1);for(var l=0;lr}),r=0;r0)throw"Initial bisect points must have opposite signs";if(0===s)return r;if(0===u)return n;for(var f=0;f=0&&(r=l),Math.abs(o)=8){var a=function(t,r){var n,e=(r=r||{}).restarts||10,a=[],i={};for(n=0;n=Math.min(p[r].size,p[n].size)?a=1:t.size<=1e-10&&(a=-1),M[r][n]=M[n][r]=a}),{distances:m,constraints:M}),o=u.distances,f=u.constraints,x=c(o.map(c))/o.length;var v,p,d,m,M;o=o.map(function(t){return t.map(function(t){return t/x})});var b,w,I=function(t,r){return function(t,r,n,e){var a,i=0;for(a=0;a0&&g<=h||x<0&&g>=h||(i+=2*v*v,r[2*a]+=4*v*(s-f),r[2*a+1]+=4*v*(u-l),r[2*o]+=4*v*(f-s),r[2*o+1]+=4*v*(l-u))}return i}(t,r,o,f)};for(n=0;n=Math.min(a[h].size,a[x].size)&&(l=0),i[h].push({set:x,size:f.size,weight:l}),i[x].push({set:h,size:f.size,weight:l})}var c=[];for(n in i)if(i.hasOwnProperty(n)){var g=0;for(s=0;s0){var a=t[0].x,i=t[0].y;for(e=0;e1){var u,o,f=Math.atan2(t[1].x,t[1].y)-r,l=Math.cos(f),h=Math.sin(f);for(e=0;e2){for(var x=Math.atan2(t[2].x,t[2].y)-r;x<0;)x+=2*Math.PI;for(;x>2*Math.PI;)x-=2*Math.PI;if(x>Math.PI){var c=t[1].y/(1e-10+t[1].x);for(e=0;ef&&c.node().getComputedTextLength()>s&&(h.pop(),c.text(h.join(" ")),h=[l],c=a.append("tspan").text(l),x++);var g=.35-1.1*x/2,v=a.attr("x"),p=a.attr("y");a.selectAll("tspan").attr("x",v).attr("y",p).attr("dy",function(t,r){return g+1.1*r+"em"})}}function j(t,r,n){var e,a,i=r[0].radius-s(r[0],t);for(e=1;e=o&&(u=e[n],o=l)}var h=p(function(n){return-1*j({x:n[0],y:n[1]},t,r)},[u.x,u.y],{maxIterations:500,minErrorDelta:1e-10}).x,x={x:h[0],y:h[1]},c=!0;for(n=0;nt[n].radius){c=!1;break}for(n=0;n0&&console.log("WARNING: area "+i+" not represented on screen")}return n}function E(t,r,n){var e=[];return e.push("\nM",t,r),e.push("\nm",-n,0),e.push("\na",n,n,0,1,0,2*n,0),e.push("\na",n,n,0,1,0,2*-n,0),e.join(" ")}function T(t){var r=t.split(" ");return{x:parseFloat(r[1]),y:parseFloat(r[2]),radius:-parseFloat(r[4])}}function L(t){var r={};a(t,r);var n=r.arcs;if(0===n.length)return"M 0 0";if(1==n.length){var e=n[0].circle;return E(e.x,e.y,e.radius)}for(var i=["\nM",n[0].p2.x,n[0].p2.y],s=0;so;i.push("\nA",o,o,0,f?1:0,1,u.p1.x,u.p1.y)}return i.join(" ")}t.intersectionArea=a,t.circleCircleIntersection=o,t.circleOverlap=u,t.circleArea=i,t.distance=s,t.venn=m,t.greedyLayout=w,t.scaleSolution=O,t.normalizeSolution=F,t.bestInitialLayout=b,t.lossFunction=I,t.disjointCluster=P,t.distanceFromIntersectArea=z,t.VennDiagram=function(){var t=600,n=350,e=15,a=1e3,i=Math.PI/2,s=!0,u=!0,o=!0,f=null,l=null,h={},x=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],c=0,g=function(t){if(t in h)return h[t];var r=h[t]=x[c];return(c+=1)>=x.length&&(c=0),r},v=m,p=I;function d(h){var x=h.datum(),c={};x.forEach(function(t){0==t.size&&1==t.sets.length&&(c[t.sets[0]]=1)});var d={},y={};if((x=x.filter(function(t){return!t.sets.some(function(t){return t in c})})).length>0){var m=v(x,{lossFunction:p});s&&(m=F(m,i,l)),d=O(m,t,n,e),y=D(d,x)}var M={};function z(t){return t.sets in M?M[t.sets]:1==t.sets.length?""+t.sets[0]:void 0}x.forEach(function(t){t.label&&(M[t.sets]=t.label)}),h.selectAll("svg").data([d]).enter().append("svg");var b=h.select("svg").attr("width",t).attr("height",n),w={},I=!1;b.selectAll(".venn-area path").each(function(t){var n=r.select(this).attr("d");1==t.sets.length&&n&&(I=!0,w[t.sets[0]]=T(n))});var R=function(r){return function(e){return L(r.sets.map(function(r){var a=w[r],i=d[r];return a||(a={x:t/2,y:n/2,radius:1}),i||(i={x:t/2,y:n/2,radius:1}),{x:a.x*(1-e)+i.x*e,y:a.y*(1-e)+i.y*e,radius:a.radius*(1-e)+i.radius*e}}))}},P=b.selectAll(".venn-area").data(x,function(t){return t.sets}),A=P.enter().append("g").attr("class",function(t){return"venn-area venn-"+(1==t.sets.length?"circle":"intersection")}).attr("data-venn-sets",function(t){return t.sets.join("_")}),j=A.append("path"),k=A.append("text").attr("class","label").text(function(t){return z(t)}).attr("text-anchor","middle").attr("dy",".35em").attr("x",t/2).attr("y",n/2);o&&(j.style("fill-opacity","0").filter(function(t){return 1==t.sets.length}).style("fill",function(t){return g(t.sets)}).style("fill-opacity",".25"),k.style("fill",function(t){return 1==t.sets.length?g(t.sets):"#444"}));var C=h;I?(C=h.transition("venn").duration(a)).selectAll("path").attrTween("d",R):C.selectAll("path").attr("d",function(t){return L(t.sets.map(function(t){return d[t]}))});var E=C.selectAll("text").filter(function(t){return t.sets in y}).text(function(t){return z(t)}).attr("x",function(t){return Math.floor(y[t.sets].x)}).attr("y",function(t){return Math.floor(y[t.sets].y)});u&&(I?"on"in E?E.on("end",q(d,z)):E.each("end",q(d,z)):E.each(q(d,z)));var S=P.exit().transition("venn").duration(a).remove();S.selectAll("path").attrTween("d",R);var _=S.selectAll("text").attr("x",t/2).attr("y",n/2);return null!==f&&(k.style("font-size","0px"),E.style("font-size",f),_.style("font-size","0px")),{circles:d,textCentres:y,nodes:P,enter:A,update:C,exit:S}}return d.wrap=function(t){return arguments.length?(u=t,d):u},d.width=function(r){return arguments.length?(t=r,d):t},d.height=function(t){return arguments.length?(n=t,d):n},d.padding=function(t){return arguments.length?(e=t,d):e},d.colours=function(t){return arguments.length?(g=t,d):g},d.fontSize=function(t){return arguments.length?(f=t,d):f},d.duration=function(t){return arguments.length?(a=t,d):a},d.layoutFunction=function(t){return arguments.length?(v=t,d):v},d.normalize=function(t){return arguments.length?(s=t,d):s},d.styled=function(t){return arguments.length?(o=t,d):o},d.orientation=function(t){return arguments.length?(i=t,d):i},d.orientationOrder=function(t){return arguments.length?(l=t,d):l},d.lossFunction=function(t){return arguments.length?(p=t,d):p},d},t.wrapText=q,t.computeTextCentres=D,t.computeTextCentre=k,t.sortAreas=function(t,r){for(var n=C(t.selectAll("svg").datum()),e={},a=0;a