{"version":3,"sources":["webpack:///./node_modules/d3-array/src/ascending.js","webpack:///./node_modules/d3-format/src/formatSpecifier.js","webpack:///./node_modules/d3-array/src/number.js","webpack:///./node_modules/d3-force/src/center.js","webpack:///./node_modules/d3-force/src/constant.js","webpack:///./node_modules/d3-force/src/jiggle.js","webpack:///./node_modules/d3-force/src/collide.js","webpack:///./node_modules/d3-force/src/link.js","webpack:///./node_modules/d3-force/src/lcg.js","webpack:///./node_modules/d3-force/src/simulation.js","webpack:///./node_modules/d3-force/src/manyBody.js","webpack:///./node_modules/d3-force/src/radial.js","webpack:///./node_modules/d3-force/src/x.js","webpack:///./node_modules/d3-force/src/y.js","webpack:///./node_modules/d3-format/src/defaultLocale.js","webpack:///./node_modules/d3-array/src/merge.js","webpack:///./node_modules/d3-color/src/cubehelix.js","webpack:///./node_modules/d3-color/src/color.js","webpack:///./node_modules/d3-array/src/quantile.js","webpack:///./node_modules/d3-array/src/bisector.js","webpack:///./node_modules/d3-dsv/src/dsv.js","webpack:///./node_modules/d3-array/src/range.js","webpack:///./node_modules/d3-array/src/threshold/sturges.js","webpack:///./node_modules/d3-array/src/sum.js","webpack:///./node_modules/d3-axis/src/array.js","webpack:///./node_modules/d3-axis/src/identity.js","webpack:///./node_modules/d3-axis/src/axis.js","webpack:///./node_modules/d3-dsv/src/autoType.js","webpack:///./node_modules/d3-color/src/index.js","webpack:///./node_modules/d3-color/src/math.js","webpack:///./node_modules/d3-dsv/src/csv.js","webpack:///./node_modules/d3-array/src/quickselect.js","webpack:///./node_modules/d3-brush/src/constant.js","webpack:///./node_modules/d3-brush/src/event.js","webpack:///./node_modules/d3-brush/src/noevent.js","webpack:///./node_modules/d3-brush/src/brush.js","webpack:///./node_modules/d3-color/src/lab.js","webpack:///./node_modules/d3-color/src/define.js","webpack:///./node_modules/d3-drag/src/noevent.js","webpack:///./node_modules/d3-array/src/max.js","webpack:///./node_modules/d3-array/src/count.js","webpack:///./node_modules/d3-array/src/bisect.js","webpack:///./node_modules/d3-ease/src/cubic.js","webpack:///./node_modules/d3-array/src/min.js","webpack:///./node_modules/d3-format/src/exponent.js","webpack:///./node_modules/d3-format/src/formatDecimal.js","webpack:///./node_modules/d3-drag/src/constant.js","webpack:///./node_modules/d3-drag/src/event.js","webpack:///./node_modules/d3-drag/src/drag.js","webpack:///./node_modules/d3-format/src/index.js","webpack:///./node_modules/d3-format/src/formatPrefixAuto.js","webpack:///./node_modules/d3-format/src/formatGroup.js","webpack:///./node_modules/d3-format/src/formatNumerals.js","webpack:///./node_modules/d3-format/src/formatTrim.js","webpack:///./node_modules/d3-format/src/formatRounded.js","webpack:///./node_modules/d3-format/src/formatTypes.js","webpack:///./node_modules/d3-format/src/identity.js","webpack:///./node_modules/d3-format/src/locale.js","webpack:///./node_modules/d3-fetch/src/blob.js","webpack:///./node_modules/d3-fetch/src/buffer.js","webpack:///./node_modules/d3-fetch/src/text.js","webpack:///./node_modules/d3-fetch/src/dsv.js","webpack:///./node_modules/d3-fetch/src/image.js","webpack:///./node_modules/d3-fetch/src/json.js","webpack:///./node_modules/d3-fetch/src/xml.js","webpack:///./node_modules/d3-drag/src/nodrag.js","webpack:///./node_modules/d3-array/src/cross.js","webpack:///./node_modules/d3-array/src/cumsum.js","webpack:///./node_modules/d3-array/src/descending.js","webpack:///./node_modules/d3-array/src/variance.js","webpack:///./node_modules/d3-array/src/deviation.js","webpack:///./node_modules/d3-array/src/identity.js","webpack:///./node_modules/d3-array/src/group.js","webpack:///./node_modules/d3-array/src/permute.js","webpack:///./node_modules/d3-array/src/sort.js","webpack:///./node_modules/d3-array/src/groupSort.js","webpack:///./node_modules/d3-array/src/array.js","webpack:///./node_modules/d3-array/src/constant.js","webpack:///./node_modules/d3-array/src/nice.js","webpack:///./node_modules/d3-array/src/bin.js","webpack:///./node_modules/d3-array/src/threshold/freedmanDiaconis.js","webpack:///./node_modules/d3-array/src/threshold/scott.js","webpack:///./node_modules/d3-array/src/maxIndex.js","webpack:///./node_modules/d3-array/src/mean.js","webpack:///./node_modules/d3-array/src/median.js","webpack:///./node_modules/d3-array/src/minIndex.js","webpack:///./node_modules/d3-array/src/pairs.js","webpack:///./node_modules/d3-array/src/least.js","webpack:///./node_modules/d3-array/src/leastIndex.js","webpack:///./node_modules/d3-array/src/greatest.js","webpack:///./node_modules/d3-array/src/greatestIndex.js","webpack:///./node_modules/d3-array/src/scan.js","webpack:///./node_modules/d3-array/src/shuffle.js","webpack:///./node_modules/d3-array/src/transpose.js","webpack:///./node_modules/d3-array/src/zip.js","webpack:///./node_modules/d3-array/src/every.js","webpack:///./node_modules/d3-array/src/some.js","webpack:///./node_modules/d3-array/src/filter.js","webpack:///./node_modules/d3-array/src/map.js","webpack:///./node_modules/d3-array/src/reduce.js","webpack:///./node_modules/d3-array/src/reverse.js","webpack:///./node_modules/d3-array/src/difference.js","webpack:///./node_modules/d3-array/src/disjoint.js","webpack:///./node_modules/d3-array/src/set.js","webpack:///./node_modules/d3-array/src/intersection.js","webpack:///./node_modules/d3-array/src/superset.js","webpack:///./node_modules/d3-array/src/subset.js","webpack:///./node_modules/d3-array/src/union.js","webpack:///./node_modules/d3-dsv/src/tsv.js","webpack:///./node_modules/d3-array/src/extent.js","webpack:///./node_modules/d3-array/src/fsum.js","webpack:///./node_modules/d3-dispatch/src/dispatch.js","webpack:///./node_modules/d3-contour/src/array.js","webpack:///./node_modules/d3-contour/src/ascending.js","webpack:///./node_modules/d3-contour/src/area.js","webpack:///./node_modules/d3-contour/src/constant.js","webpack:///./node_modules/d3-contour/src/contains.js","webpack:///./node_modules/d3-contour/src/noop.js","webpack:///./node_modules/d3-contour/src/contours.js","webpack:///./node_modules/d3-contour/src/blur.js","webpack:///./node_modules/d3-contour/src/density.js","webpack:///./node_modules/d3-delaunay/src/path.js","webpack:///./node_modules/d3-delaunay/src/polygon.js","webpack:///./node_modules/d3-delaunay/src/voronoi.js","webpack:///./node_modules/d3-delaunay/src/delaunay.js","webpack:///./node_modules/d3-format/src/precisionPrefix.js","webpack:///./node_modules/d3-format/src/precisionRound.js","webpack:///./node_modules/d3-format/src/precisionFixed.js","webpack:///./node_modules/d3-dispatch/src/index.js","webpack:///./node_modules/d3-array/src/ticks.js","webpack:///./node_modules/d3-chord/src/math.js","webpack:///./node_modules/d3-chord/src/chord.js","webpack:///./node_modules/d3-chord/src/array.js","webpack:///./node_modules/d3-chord/src/constant.js","webpack:///./node_modules/d3-chord/src/ribbon.js","webpack:///./node_modules/d3-ease/src/linear.js","webpack:///./node_modules/d3-ease/src/quad.js","webpack:///./node_modules/d3-ease/src/poly.js","webpack:///./node_modules/d3-ease/src/sin.js","webpack:///./node_modules/d3-ease/src/math.js","webpack:///./node_modules/d3-ease/src/exp.js","webpack:///./node_modules/d3-ease/src/circle.js","webpack:///./node_modules/d3-ease/src/bounce.js","webpack:///./node_modules/d3-ease/src/back.js","webpack:///./node_modules/d3-ease/src/elastic.js"],"names":["a","b","NaN","re","formatSpecifier","specifier","match","exec","Error","FormatSpecifier","fill","align","sign","symbol","zero","width","comma","precision","slice","trim","type","this","undefined","prototype","toString","Math","max","numbers","values","valueof","value","index","x","nodes","strength","force","i","node","n","length","sx","sy","y","initialize","_","arguments","random","d","vx","vy","radii","iterations","tree","xi","yi","ri","ri2","k","quadtree","visitAfter","prepare","visit","apply","quad","x0","y0","x1","y1","data","rj","r","l","jiggle","sqrt","Array","radius","constant","_nodes","_random","find","nodeById","nodeId","get","strengths","distances","count","bias","id","defaultStrength","distance","link","min","source","target","alpha","links","m","Map","map","initializeStrength","initializeDistance","c","s","initialRadius","initialAngle","PI","simulation","alphaMin","alphaDecay","pow","alphaTarget","velocityDecay","forces","stepper","timer","step","event","dispatch","lcg","tick","call","stop","forEach","fx","fy","initializeNodes","isNaN","angle","cos","sin","initializeForce","restart","randomSource","name","delete","set","dx","dy","d2","closest","Infinity","on","distanceMin2","distanceMax2","theta2","accumulate","q","weight","abs","next","x2","w","distanceMin","distanceMax","theta","radiuses","xz","yz","locale","format","formatPrefix","defaultLocale","definition","thousands","grouping","currency","flatten","arrays","array","merge","from","A","B","C","D","E","ED","EB","BC_DA","cubehelixConvert","o","Cubehelix","h","opacity","g","bl","atan2","cubehelix","brighter","darker","rgb","cosh","sinh","Color","reI","reN","reP","reHex","reRgbInteger","RegExp","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","formatHex","color_formatHsl","hslConvert","formatHsl","color_formatRgb","formatRgb","color","toLowerCase","parseInt","rgbn","Rgb","rgba","hsla","hasOwnProperty","rgbConvert","rgb_formatHex","hex","rgb_formatRgb","round","Hsl","hsl","hsl2rgb","m1","m2","copy","channels","Object","assign","constructor","displayable","quantile","p","Float64Array","i0","floor","value0","subarray","value1","quantileSorted","ascendingComparator","f","delta","compare","left","lo","hi","mid","right","center","EOL","EOF","QUOTE","NEWLINE","RETURN","objectConverter","columns","Function","JSON","stringify","join","customConverter","object","row","inferColumns","rows","columnSet","create","column","push","pad","formatYear","year","formatDate","date","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","reFormat","delimiter","DELIMITER","charCodeAt","parse","text","convert","parseRows","t","N","I","eof","eol","token","j","replace","preformatBody","formatValue","concat","formatBody","formatRows","formatRow","Date","test","start","ceil","range","log","LN2","sum","bottom","epsilon","translateX","translateY","number","scale","offset","bandwidth","entering","__axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","window","devicePixelRatio","transform","axis","context","ticks","domain","identity","spacing","range0","range1","position","selection","path","selectAll","order","tickExit","exit","tickEnter","enter","append","attr","line","select","insert","transition","isFinite","getAttribute","parentNode","remove","filter","each","tickSize","axisTop","axisRight","axisBottom","axisLeft","autoType","key","fixtz","getHours","radians","degrees","csv","csvParse","csvParseRows","csvFormat","csvFormatBody","csvFormatRows","csvFormatRow","csvFormatValue","quickselect","z","exp","sd","newLeft","newRight","swap","BrushEvent","sourceEvent","mode","defineProperties","enumerable","configurable","nopropagation","stopImmediatePropagation","preventDefault","MODE_DRAG","MODE_SPACE","MODE_HANDLE","MODE_CENTER","number1","e","number2","X","handles","input","output","xy","Y","XY","cursors","overlay","nw","ne","se","sw","flipX","flipY","signsX","signsY","defaultFilter","ctrlKey","button","defaultExtent","svg","ownerSVGElement","hasAttribute","viewBox","baseVal","height","defaultTouchable","navigator","maxTouchPoints","local","__brush","empty","extent","brushSelection","state","dim","brushX","brushY","touchending","touchable","keys","listeners","handleSize","brush","group","property","handle","redraw","started","touchmoved","touchended","style","emitter","that","args","clean","emit","Emitter","active","touches","w0","w1","n0","n1","e0","e1","s0","s1","moving","lockX","lockY","__data__","metaKey","altKey","signX","signY","W","S","shifting","shiftKey","points","identifier","pointer","point0","pts","move","beforestart","moved","ended","view","keydowned","keyupped","changedTouches","cur","point","noevent","clearTimeout","setTimeout","end","keyCode","tween","selection0","selection1","clear","starting","datum","keyModifiers","K","Xn","Yn","Zn","t0","t1","t2","t3","labConvert","Lab","Hcl","hcl2lab","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","lch","hcl","extend","parent","factory","ascendingBisect","bisectRight","bisectLeft","bisectCenter","cubicIn","cubicOut","cubicInOut","formatDecimalParts","toExponential","indexOf","coefficient","toLocaleString","DragEvent","subject","defaultContainer","defaultSubject","mousedownx","mousedowny","mousemoving","container","gestures","clickDistance2","drag","mousedowned","touchstarted","gesture","mousemoved","mouseupped","nodrag","clientX","clientY","mouse","touch","p0","clickDistance","prefixExponent","substring","reverse","numerals","out","i1","formatDecimal","exponent","toFixed","toPrecision","formatRounded","formatPrefixAuto","toUpperCase","prefixes","formatGroup","Number","currencyPrefix","currencySuffix","decimal","formatNumerals","String","percent","minus","nan","newFormat","formatTypes","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","formatTrim","padding","responseBlob","response","ok","status","statusText","blob","fetch","init","then","responseArrayBuffer","arrayBuffer","responseText","dsvParse","dsv","tsv","Promise","resolve","reject","image","Image","onerror","onload","src","responseJson","json","parser","DOMParser","parseFromString","html","yesdrag","noclick","root","document","documentElement","MozUserSelect","__noselect","arrayify","reducer","reduce","cross","pop","lengths","product","some","cumsum","v","variance","mean","deviation","nest","rollup","rollups","unique","indexes","regroup","groups","keyof","sort","F","Symbol","iterator","TypeError","ascending","Uint32Array","permute","groupSort","ak","av","bk","bv","nice","prestep","threshold","sturges","histogram","isArray","tz","tn","shift","bin","bins","bisect","thresholds","maxIndex","minIndex","pairs","pairof","pair","previous","first","least","defined","minValue","element","leastIndex","greatest","maxValue","greatestIndex","scan","shuffle","shuffler","matrix","transpose","every","mapper","done","difference","others","Set","other","disjoint","has","is","add","intersection","superset","subset","union","tsvParse","tsvParseRows","tsvFormat","tsvFormatBody","tsvFormatRows","tsvFormatRow","tsvFormatValue","Adder","_partials","_n","fsum","adder","fcumsum","noop","Dispatch","parseTypenames","typenames","types","split","callback","typename","T","ring","area","hole","ringContains","contains","pi","pj","xj","yj","segmentContains","collinear","within","cases","smooth","smoothLinear","contours","contour","polygons","holes","isorings","polygon","coordinates","fragmentByStart","fragmentByEnd","stitch","startIndex","endIndex","unshift","v0","xt","yt","v1","size","_0","_1","blurX","sr","blurY","defaultX","defaultY","defaultWeight","density","values0","Float32Array","values1","wi","geometry","transformPolygon","transformRing","transformPoint","resize","cellSize","Path","_x0","_y0","_x1","_y1","Polygon","delaunay","xmin","ymin","xmax","ymax","_circumcenters","vectors","_init","update","hull","triangles","circumcenters","y2","x3","y3","ex","ey","cl","ab","p1","buffer","halfedges","inedges","ti","tj","_renderSegment","h0","h1","_project","rect","_clip","moveTo","lineTo","closePath","cell","cellPolygon","renderCell","c0","_regioncode","c1","_clipSegment","_step","ci","neighbors","cj","loop","ai","li","aj","lj","_cell","V","_clipInfinite","_clipFinite","P","sx0","sy0","sx1","sy1","_edgecode","_edge","vx0","vy0","vxn","vyn","splice","tau","pointX","pointY","coords","jitter","flatArray","flatIterable","_delaunator","Int32Array","_hullIndex","bounds","hypot","hullIndex","dc","dt","renderHull","arc","trianglePolygon","renderTriangle","e10","e5","e2","tickIncrement","power","LN10","error","tickStep","step0","step1","r0","r1","halfPi","compareValue","chordTranspose","chordDirected","directed","padAngle","sortGroups","sortSubgroups","sortChords","chord","groupSums","groupIndex","chords","subgroupIndex","startAngle","endAngle","defaultSource","defaultTarget","defaultRadius","defaultStartAngle","defaultEndAngle","defaultPadAngle","defaultArrowheadRadius","headRadius","sourceRadius","targetRadius","ribbon","ap","argv","sa0","sa1","tr","ta0","ta1","hr","tr2","ta2","quadraticCurveTo","ribbonArrow","linear","quadIn","quadOut","quadInOut","polyIn","custom","polyOut","polyInOut","sinIn","sinOut","sinInOut","tpmt","expIn","expOut","expInOut","circleIn","circleOut","circleInOut","b1","b2","b3","b4","b5","b6","b7","b8","b9","b0","bounceIn","bounceOut","bounceInOut","overshoot","backIn","backOut","backInOut","amplitude","period","asin","elasticIn","elasticOut","elasticInOut"],"mappings":"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","file":"js/chunk-vendors~5244546d.3a313c8f.js","sourcesContent":["export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","export default function(x, y) {\n var nodes, strength = 1;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = (sx / n - x) * strength, sy = (sy / n - y) * strength, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n return force;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(random) {\n return (random() - 0.5) * 1e-6;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\nexport default function(radius) {\n var nodes,\n radii,\n random,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"node not found: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n random,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle(random);\n y = target.y + target.vy - source.y - source.vy || jiggle(random);\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\"),\n random = lcg();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, random);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y} from \"./simulation.js\";\n\nexport default function() {\n var nodes,\n node,\n random,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(radius, x, y) {\n var nodes,\n strength = constant(0.1),\n strengths,\n radiuses;\n\n if (typeof radius !== \"function\") radius = constant(+radius);\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force(alpha) {\n for (var i = 0, n = nodes.length; i < n; ++i) {\n var node = nodes[i],\n dx = node.x - x || 1e-6,\n dy = node.y - y || 1e-6,\n r = Math.sqrt(dx * dx + dy * dy),\n k = (radiuses[i] - r) * strengths[i] * alpha / r;\n node.vx += dx * k;\n node.vy += dy * k;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n radiuses = new Array(n);\n for (i = 0; i < n; ++i) {\n radiuses[i] = +radius(nodes[i], i, nodes);\n strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _, initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(x) {\n var strength = constant(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(y) {\n var strength = constant(0.1),\n nodes,\n strengths,\n yz;\n\n if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n yz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n };\n\n return force;\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","function* flatten(arrays) {\n for (const array of arrays) {\n yield* array;\n }\n}\n\nexport default function merge(arrays) {\n return Array.from(flatten(arrays));\n}\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","import max from \"./max.js\";\nimport min from \"./min.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(f) {\n let delta = f;\n let compare = f;\n\n if (f.length === 1) {\n delta = (d, x) => f(d) - x;\n compare = ascendingComparator(f);\n }\n\n function left(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n }\n\n function right(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n const mid = (lo + hi) >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n\n function center(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction ascendingComparator(f) {\n return (d, x) => ascending(f(d), x);\n}\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","import count from \"../count.js\";\n\nexport default function(values) {\n return Math.ceil(Math.log(count(values)) / Math.LN2) + 1;\n}\n","export default function sum(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array.js\";\nimport identity from \"./identity.js\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n if (scale.round()) offset = Math.round(offset);\n return d => +scale(d) + offset;\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + offset,\n range1 = +range[range.length - 1] + offset,\n position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"currentColor\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"currentColor\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"currentColor\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient === right\n ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n axis.offset = function(_) {\n return arguments.length ? (offset = +_, axis) : offset;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","export default function autoType(object) {\n for (var key in object) {\n var value = object[key].trim(), number, m;\n if (!value) value = null;\n else if (value === \"true\") value = true;\n else if (value === \"false\") value = false;\n else if (value === \"NaN\") value = NaN;\n else if (!isNaN(number = +value)) value = number;\n else if (m = value.match(/^([-+]\\d{2})?\\d{4}(-\\d{2}(-\\d{2})?)?(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?(Z|[-+]\\d{2}:\\d{2})?)?$/)) {\n if (fixtz && !!m[4] && !m[7]) value = value.replace(/-/g, \"/\").replace(/T/, \" \");\n value = new Date(value);\n }\n else continue;\n object[key] = value;\n }\n return object;\n}\n\n// https://github.com/d3/d3-dsv/issues/45\nconst fixtz = new Date(\"2019-01-01T00:00\").getHours() || new Date(\"2019-07-01T00:00\").getHours();","export {default as color, rgb, hsl} from \"./color.js\";\nexport {default as lab, hcl, lch, gray} from \"./lab.js\";\nexport {default as cubehelix} from \"./cubehelix.js\";\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","import dsv from \"./dsv.js\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\nexport var csvFormatRow = csv.formatRow;\nexport var csvFormatValue = csv.formatValue;\n","import ascending from \"./ascending.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = array.length - 1, compare = ascending) {\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n","export default x => () => x;\n","export default function BrushEvent(type, {\n sourceEvent,\n target,\n selection,\n mode,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n selection: {value: selection, enumerable: true, configurable: true},\n mode: {value: mode, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n","export function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {pointer, select} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport BrushEvent from \"./event.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\nvar MODE_DRAG = {name: \"drag\"},\n MODE_SPACE = {name: \"space\"},\n MODE_HANDLE = {name: \"handle\"},\n MODE_CENTER = {name: \"center\"};\n\nconst {abs, max, min} = Math;\n\nfunction number1(e) {\n return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n return [number1(e[0]), number1(e[1])];\n}\n\nvar X = {\n name: \"x\",\n handles: [\"w\", \"e\"].map(type),\n input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\n output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n name: \"y\",\n handles: [\"n\", \"s\"].map(type),\n input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\n output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n name: \"xy\",\n handles: [\"n\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\n input: function(xy) { return xy == null ? null : number2(xy); },\n output: function(xy) { return xy; }\n};\n\nvar cursors = {\n overlay: \"crosshair\",\n selection: \"move\",\n n: \"ns-resize\",\n e: \"ew-resize\",\n s: \"ns-resize\",\n w: \"ew-resize\",\n nw: \"nwse-resize\",\n ne: \"nesw-resize\",\n se: \"nwse-resize\",\n sw: \"nesw-resize\"\n};\n\nvar flipX = {\n e: \"w\",\n w: \"e\",\n nw: \"ne\",\n ne: \"nw\",\n se: \"sw\",\n sw: \"se\"\n};\n\nvar flipY = {\n n: \"s\",\n s: \"n\",\n nw: \"sw\",\n ne: \"se\",\n se: \"ne\",\n sw: \"nw\"\n};\n\nvar signsX = {\n overlay: +1,\n selection: +1,\n n: null,\n e: +1,\n s: null,\n w: -1,\n nw: -1,\n ne: +1,\n se: +1,\n sw: -1\n};\n\nvar signsY = {\n overlay: +1,\n selection: +1,\n n: -1,\n e: null,\n s: +1,\n w: null,\n nw: -1,\n ne: -1,\n se: +1,\n sw: +1\n};\n\nfunction type(t) {\n return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n var svg = this.ownerSVGElement || this;\n if (svg.hasAttribute(\"viewBox\")) {\n svg = svg.viewBox.baseVal;\n return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n }\n return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n// Like d3.local, but with the name “__brush” rather than auto-generated.\nfunction local(node) {\n while (!node.__brush) if (!(node = node.parentNode)) return;\n return node.__brush;\n}\n\nfunction empty(extent) {\n return extent[0][0] === extent[1][0]\n || extent[0][1] === extent[1][1];\n}\n\nexport function brushSelection(node) {\n var state = node.__brush;\n return state ? state.dim.output(state.selection) : null;\n}\n\nexport function brushX() {\n return brush(X);\n}\n\nexport function brushY() {\n return brush(Y);\n}\n\nexport default function() {\n return brush(XY);\n}\n\nfunction brush(dim) {\n var extent = defaultExtent,\n filter = defaultFilter,\n touchable = defaultTouchable,\n keys = true,\n listeners = dispatch(\"start\", \"brush\", \"end\"),\n handleSize = 6,\n touchending;\n\n function brush(group) {\n var overlay = group\n .property(\"__brush\", initialize)\n .selectAll(\".overlay\")\n .data([type(\"overlay\")]);\n\n overlay.enter().append(\"rect\")\n .attr(\"class\", \"overlay\")\n .attr(\"pointer-events\", \"all\")\n .attr(\"cursor\", cursors.overlay)\n .merge(overlay)\n .each(function() {\n var extent = local(this).extent;\n select(this)\n .attr(\"x\", extent[0][0])\n .attr(\"y\", extent[0][1])\n .attr(\"width\", extent[1][0] - extent[0][0])\n .attr(\"height\", extent[1][1] - extent[0][1]);\n });\n\n group.selectAll(\".selection\")\n .data([type(\"selection\")])\n .enter().append(\"rect\")\n .attr(\"class\", \"selection\")\n .attr(\"cursor\", cursors.selection)\n .attr(\"fill\", \"#777\")\n .attr(\"fill-opacity\", 0.3)\n .attr(\"stroke\", \"#fff\")\n .attr(\"shape-rendering\", \"crispEdges\");\n\n var handle = group.selectAll(\".handle\")\n .data(dim.handles, function(d) { return d.type; });\n\n handle.exit().remove();\n\n handle.enter().append(\"rect\")\n .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n group\n .each(redraw)\n .attr(\"fill\", \"none\")\n .attr(\"pointer-events\", \"all\")\n .on(\"mousedown.brush\", started)\n .filter(touchable)\n .on(\"touchstart.brush\", started)\n .on(\"touchmove.brush\", touchmoved)\n .on(\"touchend.brush touchcancel.brush\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n brush.move = function(group, selection) {\n if (group.tween) {\n group\n .on(\"start.brush\", function(event) { emitter(this, arguments).beforestart().start(event); })\n .on(\"interrupt.brush end.brush\", function(event) { emitter(this, arguments).end(event); })\n .tween(\"brush\", function() {\n var that = this,\n state = that.__brush,\n emit = emitter(that, arguments),\n selection0 = state.selection,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n i = interpolate(selection0, selection1);\n\n function tween(t) {\n state.selection = t === 1 && selection1 === null ? null : i(t);\n redraw.call(that);\n emit.brush();\n }\n\n return selection0 !== null && selection1 !== null ? tween : tween(1);\n });\n } else {\n group\n .each(function() {\n var that = this,\n args = arguments,\n state = that.__brush,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n emit = emitter(that, args).beforestart();\n\n interrupt(that);\n state.selection = selection1 === null ? null : selection1;\n redraw.call(that);\n emit.start().brush().end();\n });\n }\n };\n\n brush.clear = function(group) {\n brush.move(group, null);\n };\n\n function redraw() {\n var group = select(this),\n selection = local(this).selection;\n\n if (selection) {\n group.selectAll(\".selection\")\n .style(\"display\", null)\n .attr(\"x\", selection[0][0])\n .attr(\"y\", selection[0][1])\n .attr(\"width\", selection[1][0] - selection[0][0])\n .attr(\"height\", selection[1][1] - selection[0][1]);\n\n group.selectAll(\".handle\")\n .style(\"display\", null)\n .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n }\n\n else {\n group.selectAll(\".selection,.handle\")\n .style(\"display\", \"none\")\n .attr(\"x\", null)\n .attr(\"y\", null)\n .attr(\"width\", null)\n .attr(\"height\", null);\n }\n }\n\n function emitter(that, args, clean) {\n var emit = that.__brush.emitter;\n return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n }\n\n function Emitter(that, args, clean) {\n this.that = that;\n this.args = args;\n this.state = that.__brush;\n this.active = 0;\n this.clean = clean;\n }\n\n Emitter.prototype = {\n beforestart: function() {\n if (++this.active === 1) this.state.emitter = this, this.starting = true;\n return this;\n },\n start: function(event, mode) {\n if (this.starting) this.starting = false, this.emit(\"start\", event, mode);\n else this.emit(\"brush\", event);\n return this;\n },\n brush: function(event, mode) {\n this.emit(\"brush\", event, mode);\n return this;\n },\n end: function(event, mode) {\n if (--this.active === 0) delete this.state.emitter, this.emit(\"end\", event, mode);\n return this;\n },\n emit: function(type, event, mode) {\n var d = select(this.that).datum();\n listeners.call(\n type,\n this.that,\n new BrushEvent(type, {\n sourceEvent: event,\n target: brush,\n selection: dim.output(this.state.selection),\n mode,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function started(event) {\n if (touchending && !event.touches) return;\n if (!filter.apply(this, arguments)) return;\n\n var that = this,\n type = event.target.__data__.type,\n mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),\n signX = dim === Y ? null : signsX[type],\n signY = dim === X ? null : signsY[type],\n state = local(that),\n extent = state.extent,\n selection = state.selection,\n W = extent[0][0], w0, w1,\n N = extent[0][1], n0, n1,\n E = extent[1][0], e0, e1,\n S = extent[1][1], s0, s1,\n dx = 0,\n dy = 0,\n moving,\n shifting = signX && signY && keys && event.shiftKey,\n lockX,\n lockY,\n points = Array.from(event.touches || [event], t => {\n const i = t.identifier;\n t = pointer(t, that);\n t.point0 = t.slice();\n t.identifier = i;\n return t;\n });\n\n if (type === \"overlay\") {\n if (selection) moving = true;\n const pts = [points[0], points[1] || points[0]];\n state.selection = selection = [[\n w0 = dim === Y ? W : min(pts[0][0], pts[1][0]),\n n0 = dim === X ? N : min(pts[0][1], pts[1][1])\n ], [\n e0 = dim === Y ? E : max(pts[0][0], pts[1][0]),\n s0 = dim === X ? S : max(pts[0][1], pts[1][1])\n ]];\n if (points.length > 1) move();\n } else {\n w0 = selection[0][0];\n n0 = selection[0][1];\n e0 = selection[1][0];\n s0 = selection[1][1];\n }\n\n w1 = w0;\n n1 = n0;\n e1 = e0;\n s1 = s0;\n\n var group = select(that)\n .attr(\"pointer-events\", \"none\");\n\n var overlay = group.selectAll(\".overlay\")\n .attr(\"cursor\", cursors[type]);\n\n interrupt(that);\n var emit = emitter(that, arguments, true).beforestart();\n\n if (event.touches) {\n emit.moved = moved;\n emit.ended = ended;\n } else {\n var view = select(event.view)\n .on(\"mousemove.brush\", moved, true)\n .on(\"mouseup.brush\", ended, true);\n if (keys) view\n .on(\"keydown.brush\", keydowned, true)\n .on(\"keyup.brush\", keyupped, true)\n\n dragDisable(event.view);\n }\n\n redraw.call(that);\n emit.start(event, mode.name);\n\n function moved(event) {\n for (const p of event.changedTouches || [event]) {\n for (const d of points)\n if (d.identifier === p.identifier) d.cur = pointer(p, that);\n }\n if (shifting && !lockX && !lockY && points.length === 1) {\n const point = points[0];\n if (abs(point.cur[0] - point[0]) > abs(point.cur[1] - point[1]))\n lockY = true;\n else\n lockX = true;\n }\n for (const point of points)\n if (point.cur) point[0] = point.cur[0], point[1] = point.cur[1];\n moving = true;\n noevent(event);\n move(event);\n }\n\n function move(event) {\n const point = points[0], point0 = point.point0;\n var t;\n\n dx = point[0] - point0[0];\n dy = point[1] - point0[1];\n\n switch (mode) {\n case MODE_SPACE:\n case MODE_DRAG: {\n if (signX) dx = max(W - w0, min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n if (signY) dy = max(N - n0, min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n break;\n }\n case MODE_HANDLE: {\n if (points[1]) {\n if (signX) w1 = max(W, min(E, points[0][0])), e1 = max(W, min(E, points[1][0])), signX = 1;\n if (signY) n1 = max(N, min(S, points[0][1])), s1 = max(N, min(S, points[1][1])), signY = 1;\n } else {\n if (signX < 0) dx = max(W - w0, min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n else if (signX > 0) dx = max(W - e0, min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n if (signY < 0) dy = max(N - n0, min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n else if (signY > 0) dy = max(N - s0, min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n }\n break;\n }\n case MODE_CENTER: {\n if (signX) w1 = max(W, min(E, w0 - dx * signX)), e1 = max(W, min(E, e0 + dx * signX));\n if (signY) n1 = max(N, min(S, n0 - dy * signY)), s1 = max(N, min(S, s0 + dy * signY));\n break;\n }\n }\n\n if (e1 < w1) {\n signX *= -1;\n t = w0, w0 = e0, e0 = t;\n t = w1, w1 = e1, e1 = t;\n if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n }\n\n if (s1 < n1) {\n signY *= -1;\n t = n0, n0 = s0, s0 = t;\n t = n1, n1 = s1, s1 = t;\n if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n }\n\n if (state.selection) selection = state.selection; // May be set by brush.move!\n if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n if (selection[0][0] !== w1\n || selection[0][1] !== n1\n || selection[1][0] !== e1\n || selection[1][1] !== s1) {\n state.selection = [[w1, n1], [e1, s1]];\n redraw.call(that);\n emit.brush(event, mode.name);\n }\n }\n\n function ended(event) {\n nopropagation(event);\n if (event.touches) {\n if (event.touches.length) return;\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n } else {\n dragEnable(event.view, moving);\n view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n }\n group.attr(\"pointer-events\", \"all\");\n overlay.attr(\"cursor\", cursors.overlay);\n if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n if (empty(selection)) state.selection = null, redraw.call(that);\n emit.end(event, mode.name);\n }\n\n function keydowned(event) {\n switch (event.keyCode) {\n case 16: { // SHIFT\n shifting = signX && signY;\n break;\n }\n case 18: { // ALT\n if (mode === MODE_HANDLE) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n move();\n }\n break;\n }\n case 32: { // SPACE; takes priority over ALT\n if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n mode = MODE_SPACE;\n overlay.attr(\"cursor\", cursors.selection);\n move();\n }\n break;\n }\n default: return;\n }\n noevent(event);\n }\n\n function keyupped(event) {\n switch (event.keyCode) {\n case 16: { // SHIFT\n if (shifting) {\n lockX = lockY = shifting = false;\n move();\n }\n break;\n }\n case 18: { // ALT\n if (mode === MODE_CENTER) {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n move();\n }\n break;\n }\n case 32: { // SPACE\n if (mode === MODE_SPACE) {\n if (event.altKey) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n } else {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n }\n overlay.attr(\"cursor\", cursors[type]);\n move();\n }\n break;\n }\n default: return;\n }\n noevent(event);\n }\n }\n\n function touchmoved(event) {\n emitter(this, arguments).moved(event);\n }\n\n function touchended(event) {\n emitter(this, arguments).ended(event);\n }\n\n function initialize() {\n var state = this.__brush || {selection: null};\n state.extent = number2(extent.apply(this, arguments));\n state.dim = dim;\n return state;\n }\n\n brush.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant(number2(_)), brush) : extent;\n };\n\n brush.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n };\n\n brush.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), brush) : touchable;\n };\n\n brush.handleSize = function(_) {\n return arguments.length ? (handleSize = +_, brush) : handleSize;\n };\n\n brush.keyModifiers = function(_) {\n return arguments.length ? (keys = !!_, brush) : keys;\n };\n\n brush.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? brush : value;\n };\n\n return brush;\n}\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * degrees;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * radians;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return hcl2lab(this).rgb();\n }\n}));\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","export function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function count(values, valueof) {\n let count = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count;\n }\n }\n }\n return count;\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","export default x => () => x;\n","export default function DragEvent(type, {\n sourceEvent,\n subject,\n target,\n identifier,\n active,\n x, y, dx, dy,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n subject: {value: subject, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n identifier: {value: identifier, enumerable: true, configurable: true},\n active: {value: active, enumerable: true, configurable: true},\n x: {value: x, enumerable: true, configurable: true},\n y: {value: y, enumerable: true, configurable: true},\n dx: {value: dx, enumerable: true, configurable: true},\n dy: {value: dy, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {select, pointer} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(event, d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned(event, d) {\n if (touchending || !filter.call(this, event, d)) return;\n var gesture = beforestart(this, container.call(this, event, d), event, d, \"mouse\");\n if (!gesture) return;\n select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n nodrag(event.view);\n nopropagation(event);\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\", event);\n }\n\n function mousemoved(event) {\n noevent(event);\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\", event);\n }\n\n function mouseupped(event) {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent(event);\n gestures.mouse(\"end\", event);\n }\n\n function touchstarted(event, d) {\n if (!filter.call(this, event, d)) return;\n var touches = event.changedTouches,\n c = container.call(this, event, d),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {\n nopropagation(event);\n gesture(\"start\", event, touches[i]);\n }\n }\n }\n\n function touchmoved(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent(event);\n gesture(\"drag\", event, touches[i]);\n }\n }\n }\n\n function touchended(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation(event);\n gesture(\"end\", event, touches[i]);\n }\n }\n }\n\n function beforestart(that, container, event, d, identifier, touch) {\n var dispatch = listeners.copy(),\n p = pointer(touch || event, container), dx, dy,\n s;\n\n if ((s = subject.call(that, new DragEvent(\"beforestart\", {\n sourceEvent: event,\n target: drag,\n identifier,\n active,\n x: p[0],\n y: p[1],\n dx: 0,\n dy: 0,\n dispatch\n }), d)) == null) return;\n\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n\n return function gesture(type, event, touch) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[identifier] = gesture, n = active++; break;\n case \"end\": delete gestures[identifier], --active; // nobreak\n case \"drag\": p = pointer(touch || event, container), n = active; break;\n }\n dispatch.call(\n type,\n that,\n new DragEvent(type, {\n sourceEvent: event,\n subject: s,\n target: drag,\n identifier,\n active: n,\n x: p[0] + dx,\n y: p[1] + dy,\n dx: p[0] - p0[0],\n dy: p[1] - p0[1],\n dispatch\n }),\n d\n );\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","export {default as formatDefaultLocale, format, formatPrefix} from \"./defaultLocale.js\";\nexport {default as formatLocale} from \"./locale.js\";\nexport {default as formatSpecifier, FormatSpecifier} from \"./formatSpecifier.js\";\nexport {default as precisionFixed} from \"./precisionFixed.js\";\nexport {default as precisionPrefix} from \"./precisionPrefix.js\";\nexport {default as precisionRound} from \"./precisionRound.js\";\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","function responseBlob(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.blob();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseBlob);\n}\n","function responseArrayBuffer(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.arrayBuffer();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseArrayBuffer);\n}\n","function responseText(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n return response.text();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseText);\n}\n","import {csvParse, dsvFormat, tsvParse} from \"d3-dsv\";\nimport text from \"./text.js\";\n\nfunction dsvParse(parse) {\n return function(input, init, row) {\n if (arguments.length === 2 && typeof init === \"function\") row = init, init = undefined;\n return text(input, init).then(function(response) {\n return parse(response, row);\n });\n };\n}\n\nexport default function dsv(delimiter, input, init, row) {\n if (arguments.length === 3 && typeof init === \"function\") row = init, init = undefined;\n var format = dsvFormat(delimiter);\n return text(input, init).then(function(response) {\n return format.parse(response, row);\n });\n}\n\nexport var csv = dsvParse(csvParse);\nexport var tsv = dsvParse(tsvParse);\n","export default function(input, init) {\n return new Promise(function(resolve, reject) {\n var image = new Image;\n for (var key in init) image[key] = init[key];\n image.onerror = reject;\n image.onload = function() { resolve(image); };\n image.src = input;\n });\n}\n","function responseJson(response) {\n if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n if (response.status === 204 || response.status === 205) return;\n return response.json();\n}\n\nexport default function(input, init) {\n return fetch(input, init).then(responseJson);\n}\n","import text from \"./text.js\";\n\nfunction parser(type) {\n return (input, init) => text(input, init)\n .then(text => (new DOMParser).parseFromString(text, type));\n}\n\nexport default parser(\"application/xml\");\n\nexport var html = parser(\"text/html\");\n\nexport var svg = parser(\"image/svg+xml\");\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent.js\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, true);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, true);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, true);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","function length(array) {\n return array.length | 0;\n}\n\nfunction empty(length) {\n return !(length > 0);\n}\n\nfunction arrayify(values) {\n return typeof values !== \"object\" || \"length\" in values ? values : Array.from(values);\n}\n\nfunction reducer(reduce) {\n return values => reduce(...values);\n}\n\nexport default function cross(...values) {\n const reduce = typeof values[values.length - 1] === \"function\" && reducer(values.pop());\n values = values.map(arrayify);\n const lengths = values.map(length);\n const j = values.length - 1;\n const index = new Array(j + 1).fill(0);\n const product = [];\n if (j < 0 || lengths.some(empty)) return product;\n while (true) {\n product.push(index.map((j, i) => values[i][j]));\n let i = j;\n while (++index[i] === lengths[i]) {\n if (i === 0) return reduce ? product.map(reduce) : product;\n index[i--] = 0;\n }\n }\n}\n","export default function cumsum(values, valueof) {\n var sum = 0, index = 0;\n return Float64Array.from(values, valueof === undefined\n ? v => (sum += +v || 0)\n : v => (sum += +valueof(v, index++, values) || 0));\n}","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function variance(values, valueof) {\n let count = 0;\n let delta;\n let mean = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n }\n if (count > 1) return sum / (count - 1);\n}\n","import variance from \"./variance.js\";\n\nexport default function deviation(values, valueof) {\n const v = variance(values, valueof);\n return v ? Math.sqrt(v) : v;\n}\n","export default function(x) {\n return x;\n}\n","import {InternMap} from \"internmap\";\nimport identity from \"./identity.js\";\n\nexport default function group(values, ...keys) {\n return nest(values, identity, identity, keys);\n}\n\nexport function groups(values, ...keys) {\n return nest(values, Array.from, identity, keys);\n}\n\nexport function rollup(values, reduce, ...keys) {\n return nest(values, identity, reduce, keys);\n}\n\nexport function rollups(values, reduce, ...keys) {\n return nest(values, Array.from, reduce, keys);\n}\n\nexport function index(values, ...keys) {\n return nest(values, identity, unique, keys);\n}\n\nexport function indexes(values, ...keys) {\n return nest(values, Array.from, unique, keys);\n}\n\nfunction unique(values) {\n if (values.length !== 1) throw new Error(\"duplicate key\");\n return values[0];\n}\n\nfunction nest(values, map, reduce, keys) {\n return (function regroup(values, i) {\n if (i >= keys.length) return reduce(values);\n const groups = new InternMap();\n const keyof = keys[i++];\n let index = -1;\n for (const value of values) {\n const key = keyof(value, ++index, values);\n const group = groups.get(key);\n if (group) group.push(value);\n else groups.set(key, [value]);\n }\n for (const [key, values] of groups) {\n groups.set(key, regroup(values, i));\n }\n return map(groups);\n })(values, 0);\n}\n","export default function(source, keys) {\n return Array.from(keys, key => source[key]);\n}\n","import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n values = Array.from(values);\n let [f = ascending] = F;\n if (f.length === 1 || F.length > 1) {\n const index = Uint32Array.from(values, (d, i) => i);\n if (F.length > 1) {\n F = F.map(f => values.map(f));\n index.sort((i, j) => {\n for (const f of F) {\n const c = ascending(f[i], f[j]);\n if (c) return c;\n }\n });\n } else {\n f = values.map(f);\n index.sort((i, j) => ascending(f[i], f[j]));\n }\n return permute(values, index);\n }\n return values.sort(f);\n}\n","import ascending from \"./ascending.js\";\nimport group, {rollup} from \"./group.js\";\nimport sort from \"./sort.js\";\n\nexport default function groupSort(values, reduce, key) {\n return (reduce.length === 1\n ? sort(rollup(values, reduce, key), (([ak, av], [bk, bv]) => ascending(av, bv) || ascending(ak, bk)))\n : sort(group(values, key), (([ak, av], [bk, bv]) => reduce(av, bv) || ascending(ak, bk))))\n .map(([key]) => key);\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {tickIncrement} from \"./ticks.js\";\n\nexport default function nice(start, stop, count) {\n let prestep;\n while (true) {\n const step = tickIncrement(start, stop, count);\n if (step === prestep || step === 0 || !isFinite(step)) {\n return [start, stop];\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n }\n prestep = step;\n }\n}\n","import {slice} from \"./array.js\";\nimport bisect from \"./bisect.js\";\nimport constant from \"./constant.js\";\nimport extent from \"./extent.js\";\nimport identity from \"./identity.js\";\nimport nice from \"./nice.js\";\nimport ticks, {tickIncrement} from \"./ticks.js\";\nimport sturges from \"./threshold/sturges.js\";\n\nexport default function() {\n var value = identity,\n domain = extent,\n threshold = sturges;\n\n function histogram(data) {\n if (!Array.isArray(data)) data = Array.from(data);\n\n var i,\n n = data.length,\n x,\n values = new Array(n);\n\n for (i = 0; i < n; ++i) {\n values[i] = value(data[i], i, data);\n }\n\n var xz = domain(values),\n x0 = xz[0],\n x1 = xz[1],\n tz = threshold(values, x0, x1);\n\n // Convert number of thresholds into uniform thresholds, and nice the\n // default domain accordingly.\n if (!Array.isArray(tz)) {\n const max = x1, tn = +tz;\n if (domain === extent) [x0, x1] = nice(x0, x1, tn);\n tz = ticks(x0, x1, tn);\n\n // If the last threshold is coincident with the domain’s upper bound, the\n // last bin will be zero-width. If the default domain is used, and this\n // last threshold is coincident with the maximum input value, we can\n // extend the niced upper bound by one tick to ensure uniform bin widths;\n // otherwise, we simply remove the last threshold. Note that we don’t\n // coerce values or the domain to numbers, and thus must be careful to\n // compare order (>=) rather than strict equality (===)!\n if (tz[tz.length - 1] >= x1) {\n if (max >= x1 && domain === extent) {\n const step = tickIncrement(x0, x1, tn);\n if (isFinite(step)) {\n if (step > 0) {\n x1 = (Math.floor(x1 / step) + 1) * step;\n } else if (step < 0) {\n x1 = (Math.ceil(x1 * -step) + 1) / -step;\n }\n }\n } else {\n tz.pop();\n }\n }\n }\n\n // Remove any thresholds outside the domain.\n var m = tz.length;\n while (tz[0] <= x0) tz.shift(), --m;\n while (tz[m - 1] > x1) tz.pop(), --m;\n\n var bins = new Array(m + 1),\n bin;\n\n // Initialize bins.\n for (i = 0; i <= m; ++i) {\n bin = bins[i] = [];\n bin.x0 = i > 0 ? tz[i - 1] : x0;\n bin.x1 = i < m ? tz[i] : x1;\n }\n\n // Assign data to bins by value, ignoring any outside the domain.\n for (i = 0; i < n; ++i) {\n x = values[i];\n if (x0 <= x && x <= x1) {\n bins[bisect(tz, x, 0, m)].push(data[i]);\n }\n }\n\n return bins;\n }\n\n histogram.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n };\n\n histogram.domain = function(_) {\n return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n };\n\n histogram.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;\n };\n\n return histogram;\n}\n","import count from \"../count.js\";\nimport quantile from \"../quantile.js\";\n\nexport default function(values, min, max) {\n return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(count(values), -1 / 3)));\n}\n","import count from \"../count.js\";\nimport deviation from \"../deviation.js\";\n\nexport default function(values, min, max) {\n return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(count(values), -1 / 3)));\n}\n","export default function maxIndex(values, valueof) {\n let max;\n let maxIndex = -1;\n let index = -1;\n if (valueof === undefined) {\n for (const value of values) {\n ++index;\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value, maxIndex = index;\n }\n }\n } else {\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value, maxIndex = index;\n }\n }\n }\n return maxIndex;\n}\n","export default function mean(values, valueof) {\n let count = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n }\n if (count) return sum / count;\n}\n","import quantile from \"./quantile.js\";\n\nexport default function(values, valueof) {\n return quantile(values, 0.5, valueof);\n}\n","export default function minIndex(values, valueof) {\n let min;\n let minIndex = -1;\n let index = -1;\n if (valueof === undefined) {\n for (const value of values) {\n ++index;\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value, minIndex = index;\n }\n }\n } else {\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value, minIndex = index;\n }\n }\n }\n return minIndex;\n}\n","export default function pairs(values, pairof = pair) {\n const pairs = [];\n let previous;\n let first = false;\n for (const value of values) {\n if (first) pairs.push(pairof(previous, value));\n previous = value;\n first = true;\n }\n return pairs;\n}\n\nexport function pair(a, b) {\n return [a, b];\n}\n","import ascending from \"./ascending.js\";\n\nexport default function least(values, compare = ascending) {\n let min;\n let defined = false;\n if (compare.length === 1) {\n let minValue;\n for (const element of values) {\n const value = compare(element);\n if (defined\n ? ascending(value, minValue) < 0\n : ascending(value, value) === 0) {\n min = element;\n minValue = value;\n defined = true;\n }\n }\n } else {\n for (const value of values) {\n if (defined\n ? compare(value, min) < 0\n : compare(value, value) === 0) {\n min = value;\n defined = true;\n }\n }\n }\n return min;\n}\n","import ascending from \"./ascending.js\";\nimport minIndex from \"./minIndex.js\";\n\nexport default function leastIndex(values, compare = ascending) {\n if (compare.length === 1) return minIndex(values, compare);\n let minValue;\n let min = -1;\n let index = -1;\n for (const value of values) {\n ++index;\n if (min < 0\n ? compare(value, value) === 0\n : compare(value, minValue) < 0) {\n minValue = value;\n min = index;\n }\n }\n return min;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function greatest(values, compare = ascending) {\n let max;\n let defined = false;\n if (compare.length === 1) {\n let maxValue;\n for (const element of values) {\n const value = compare(element);\n if (defined\n ? ascending(value, maxValue) > 0\n : ascending(value, value) === 0) {\n max = element;\n maxValue = value;\n defined = true;\n }\n }\n } else {\n for (const value of values) {\n if (defined\n ? compare(value, max) > 0\n : compare(value, value) === 0) {\n max = value;\n defined = true;\n }\n }\n }\n return max;\n}\n","import ascending from \"./ascending.js\";\nimport maxIndex from \"./maxIndex.js\";\n\nexport default function greatestIndex(values, compare = ascending) {\n if (compare.length === 1) return maxIndex(values, compare);\n let maxValue;\n let max = -1;\n let index = -1;\n for (const value of values) {\n ++index;\n if (max < 0\n ? compare(value, value) === 0\n : compare(value, maxValue) > 0) {\n maxValue = value;\n max = index;\n }\n }\n return max;\n}\n","import leastIndex from \"./leastIndex.js\";\n\nexport default function scan(values, compare) {\n const index = leastIndex(values, compare);\n return index < 0 ? undefined : index;\n}\n","export default shuffler(Math.random);\n\nexport function shuffler(random) {\n return function shuffle(array, i0 = 0, i1 = array.length) {\n let m = i1 - (i0 = +i0);\n while (m) {\n const i = random() * m-- | 0, t = array[m + i0];\n array[m + i0] = array[i + i0];\n array[i + i0] = t;\n }\n return array;\n };\n}\n","import min from \"./min.js\";\n\nexport default function(matrix) {\n if (!(n = matrix.length)) return [];\n for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n row[j] = matrix[j][i];\n }\n }\n return transpose;\n}\n\nfunction length(d) {\n return d.length;\n}\n","import transpose from \"./transpose.js\";\n\nexport default function() {\n return transpose(arguments);\n}\n","export default function every(values, test) {\n if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n let index = -1;\n for (const value of values) {\n if (!test(value, ++index, values)) {\n return false;\n }\n }\n return true;\n}\n","export default function some(values, test) {\n if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n let index = -1;\n for (const value of values) {\n if (test(value, ++index, values)) {\n return true;\n }\n }\n return false;\n}\n","export default function filter(values, test) {\n if (typeof test !== \"function\") throw new TypeError(\"test is not a function\");\n const array = [];\n let index = -1;\n for (const value of values) {\n if (test(value, ++index, values)) {\n array.push(value);\n }\n }\n return array;\n}\n","export default function map(values, mapper) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n if (typeof mapper !== \"function\") throw new TypeError(\"mapper is not a function\");\n return Array.from(values, (value, index) => mapper(value, index, values));\n}\n","export default function reduce(values, reducer, value) {\n if (typeof reducer !== \"function\") throw new TypeError(\"reducer is not a function\");\n const iterator = values[Symbol.iterator]();\n let done, next, index = -1;\n if (arguments.length < 3) {\n ({done, value} = iterator.next());\n if (done) return;\n ++index;\n }\n while (({done, value: next} = iterator.next()), !done) {\n value = reducer(value, next, ++index, values);\n }\n return value;\n}\n","export default function reverse(values) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n return Array.from(values).reverse();\n}\n","export default function difference(values, ...others) {\n values = new Set(values);\n for (const other of others) {\n for (const value of other) {\n values.delete(value);\n }\n }\n return values;\n}\n","export default function disjoint(values, other) {\n const iterator = other[Symbol.iterator](), set = new Set();\n for (const v of values) {\n if (set.has(v)) return false;\n let value, done;\n while (({value, done} = iterator.next())) {\n if (done) break;\n if (Object.is(v, value)) return false;\n set.add(value);\n }\n }\n return true;\n}\n","export default function set(values) {\n return values instanceof Set ? values : new Set(values);\n}\n","import set from \"./set.js\";\n\nexport default function intersection(values, ...others) {\n values = new Set(values);\n others = others.map(set);\n out: for (const value of values) {\n for (const other of others) {\n if (!other.has(value)) {\n values.delete(value);\n continue out;\n }\n }\n }\n return values;\n}\n","export default function superset(values, other) {\n const iterator = values[Symbol.iterator](), set = new Set();\n for (const o of other) {\n if (set.has(o)) continue;\n let value, done;\n while (({value, done} = iterator.next())) {\n if (done) return false;\n set.add(value);\n if (Object.is(o, value)) break;\n }\n }\n return true;\n}\n","import superset from \"./superset.js\";\n\nexport default function subset(values, other) {\n return superset(other, values);\n}\n","export default function union(...others) {\n const set = new Set();\n for (const other of others) {\n for (const o of other) {\n set.add(o);\n }\n }\n return set;\n}\n","import dsv from \"./dsv.js\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\nexport var tsvFormatRow = tsv.formatRow;\nexport var tsvFormatValue = tsv.formatValue;\n","export default function(values, valueof) {\n let min;\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n return [min, max];\n}\n","// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n constructor() {\n this._partials = new Float64Array(32);\n this._n = 0;\n }\n add(x) {\n const p = this._partials;\n let i = 0;\n for (let j = 0; j < this._n && j < 32; j++) {\n const y = p[j],\n hi = x + y,\n lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n if (lo) p[i++] = lo;\n x = hi;\n }\n p[i] = x;\n this._n = i + 1;\n return this;\n }\n valueOf() {\n const p = this._partials;\n let n = this._n, x, y, lo, hi = 0;\n if (n > 0) {\n hi = p[--n];\n while (n > 0) {\n x = hi;\n y = p[--n];\n hi = x + y;\n lo = y - (hi - x);\n if (lo) break;\n }\n if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n y = lo * 2;\n x = hi + y;\n if (y == x - hi) hi = x;\n }\n }\n return hi;\n }\n}\n\nexport function fsum(values, valueof) {\n const adder = new Adder();\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n adder.add(value);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n adder.add(value);\n }\n }\n }\n return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n const adder = new Adder();\n let index = -1;\n return Float64Array.from(values, valueof === undefined\n ? v => adder.add(+v || 0)\n : v => adder.add(+valueof(v, ++index, values) || 0)\n );\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","var array = Array.prototype;\n\nexport var slice = array.slice;\n","export default function(a, b) {\n return a - b;\n}\n","export default function(ring) {\n var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n return area;\n}\n","export default x => () => x;\n","export default function(ring, hole) {\n var i = -1, n = hole.length, c;\n while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n return 0;\n}\n\nfunction ringContains(ring, point) {\n var x = point[0], y = point[1], contains = -1;\n for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];\n if (segmentContains(pi, pj, point)) return 0;\n if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;\n }\n return contains;\n}\n\nfunction segmentContains(a, b, c) {\n var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\n\nfunction collinear(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\n\nfunction within(p, q, r) {\n return p <= q && q <= r || r <= q && q <= p;\n}\n","export default function() {}\n","import {extent, thresholdSturges, tickStep, range} from \"d3-array\";\nimport {slice} from \"./array.js\";\nimport ascending from \"./ascending.js\";\nimport area from \"./area.js\";\nimport constant from \"./constant.js\";\nimport contains from \"./contains.js\";\nimport noop from \"./noop.js\";\n\nvar cases = [\n [],\n [[[1.0, 1.5], [0.5, 1.0]]],\n [[[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [0.5, 1.0]]],\n [[[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 0.5], [1.0, 1.5]]],\n [[[1.0, 0.5], [0.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 0.5]]],\n [[[1.0, 1.5], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.5, 1.0]]],\n [[[1.0, 1.5], [1.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 1.5]]],\n []\n];\n\nexport default function() {\n var dx = 1,\n dy = 1,\n threshold = thresholdSturges,\n smooth = smoothLinear;\n\n function contours(values) {\n var tz = threshold(values);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n var domain = extent(values), start = domain[0], stop = domain[1];\n tz = tickStep(start, stop, tz);\n tz = range(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz);\n } else {\n tz = tz.slice().sort(ascending);\n }\n\n return tz.map(function(value) {\n return contour(values, value);\n });\n }\n\n // Accumulate, smooth contour rings, assign holes to exterior rings.\n // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n function contour(values, value) {\n var polygons = [],\n holes = [];\n\n isorings(values, value, function(ring) {\n smooth(ring, values, value);\n if (area(ring) > 0) polygons.push([ring]);\n else holes.push(ring);\n });\n\n holes.forEach(function(hole) {\n for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n if (contains((polygon = polygons[i])[0], hole) !== -1) {\n polygon.push(hole);\n return;\n }\n }\n });\n\n return {\n type: \"MultiPolygon\",\n value: value,\n coordinates: polygons\n };\n }\n\n // Marching squares with isolines stitched into rings.\n // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n function isorings(values, value, callback) {\n var fragmentByStart = new Array,\n fragmentByEnd = new Array,\n x, y, t0, t1, t2, t3;\n\n // Special case for the first row (y = -1, t2 = t3 = 0).\n x = y = -1;\n t1 = values[0] >= value;\n cases[t1 << 1].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[x + 1] >= value;\n cases[t0 | t1 << 1].forEach(stitch);\n }\n cases[t1 << 0].forEach(stitch);\n\n // General case for the intermediate rows.\n while (++y < dy - 1) {\n x = -1;\n t1 = values[y * dx + dx] >= value;\n t2 = values[y * dx] >= value;\n cases[t1 << 1 | t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t1 | t2 << 3].forEach(stitch);\n }\n\n // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n x = -1;\n t2 = values[y * dx] >= value;\n cases[t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t2 << 3].forEach(stitch);\n\n function stitch(line) {\n var start = [line[0][0] + x, line[0][1] + y],\n end = [line[1][0] + x, line[1][1] + y],\n startIndex = index(start),\n endIndex = index(end),\n f, g;\n if (f = fragmentByEnd[startIndex]) {\n if (g = fragmentByStart[endIndex]) {\n delete fragmentByEnd[f.end];\n delete fragmentByStart[g.start];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};\n }\n } else {\n delete fragmentByEnd[f.end];\n f.ring.push(end);\n fragmentByEnd[f.end = endIndex] = f;\n }\n } else if (f = fragmentByStart[endIndex]) {\n if (g = fragmentByEnd[startIndex]) {\n delete fragmentByStart[f.start];\n delete fragmentByEnd[g.end];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};\n }\n } else {\n delete fragmentByStart[f.start];\n f.ring.unshift(start);\n fragmentByStart[f.start = startIndex] = f;\n }\n } else {\n fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};\n }\n }\n }\n\n function index(point) {\n return point[0] * 2 + point[1] * (dx + 1) * 4;\n }\n\n function smoothLinear(ring, values, value) {\n ring.forEach(function(point) {\n var x = point[0],\n y = point[1],\n xt = x | 0,\n yt = y | 0,\n v0,\n v1 = values[yt * dx + xt];\n if (x > 0 && x < dx && xt === x) {\n v0 = values[yt * dx + xt - 1];\n point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n }\n if (y > 0 && y < dy && yt === y) {\n v0 = values[(yt - 1) * dx + xt];\n point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n }\n });\n }\n\n contours.contour = contour;\n\n contours.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.floor(_[0]), _1 = Math.floor(_[1]);\n if (!(_0 >= 0 && _1 >= 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, contours;\n };\n\n contours.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), contours) : threshold;\n };\n\n contours.smooth = function(_) {\n return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\n };\n\n return contours;\n}\n","// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nexport function blurX(source, target, r) {\n var n = source.width,\n m = source.height,\n w = (r << 1) + 1;\n for (var j = 0; j < m; ++j) {\n for (var i = 0, sr = 0; i < n + r; ++i) {\n if (i < n) {\n sr += source.data[i + j * n];\n }\n if (i >= r) {\n if (i >= w) {\n sr -= source.data[i - w + j * n];\n }\n target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n }\n }\n }\n}\n\n// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nexport function blurY(source, target, r) {\n var n = source.width,\n m = source.height,\n w = (r << 1) + 1;\n for (var i = 0; i < n; ++i) {\n for (var j = 0, sr = 0; j < m + r; ++j) {\n if (j < m) {\n sr += source.data[i + j * n];\n }\n if (j >= r) {\n if (j >= w) {\n sr -= source.data[i + (j - w) * n];\n }\n target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n }\n }\n }\n}\n","import {max, range, tickStep} from \"d3-array\";\nimport {slice} from \"./array.js\";\nimport {blurX, blurY} from \"./blur.js\";\nimport constant from \"./constant.js\";\nimport contours from \"./contours.js\";\n\nfunction defaultX(d) {\n return d[0];\n}\n\nfunction defaultY(d) {\n return d[1];\n}\n\nfunction defaultWeight() {\n return 1;\n}\n\nexport default function() {\n var x = defaultX,\n y = defaultY,\n weight = defaultWeight,\n dx = 960,\n dy = 500,\n r = 20, // blur radius\n k = 2, // log2(grid cell size)\n o = r * 3, // grid offset, to pad for blur\n n = (dx + o * 2) >> k, // grid width\n m = (dy + o * 2) >> k, // grid height\n threshold = constant(20);\n\n function density(data) {\n var values0 = new Float32Array(n * m),\n values1 = new Float32Array(n * m);\n\n data.forEach(function(d, i, data) {\n var xi = (+x(d, i, data) + o) >> k,\n yi = (+y(d, i, data) + o) >> k,\n wi = +weight(d, i, data);\n if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n values0[xi + yi * n] += wi;\n }\n });\n\n // TODO Optimize.\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n\n var tz = threshold(values0);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n var stop = max(values0);\n tz = tickStep(0, stop, tz);\n tz = range(0, Math.floor(stop / tz) * tz, tz);\n tz.shift();\n }\n\n return contours()\n .thresholds(tz)\n .size([n, m])\n (values0)\n .map(transform);\n }\n\n function transform(geometry) {\n geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.\n geometry.coordinates.forEach(transformPolygon);\n return geometry;\n }\n\n function transformPolygon(coordinates) {\n coordinates.forEach(transformRing);\n }\n\n function transformRing(coordinates) {\n coordinates.forEach(transformPoint);\n }\n\n // TODO Optimize.\n function transformPoint(coordinates) {\n coordinates[0] = coordinates[0] * Math.pow(2, k) - o;\n coordinates[1] = coordinates[1] * Math.pow(2, k) - o;\n }\n\n function resize() {\n o = r * 3;\n n = (dx + o * 2) >> k;\n m = (dy + o * 2) >> k;\n return density;\n }\n\n density.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), density) : x;\n };\n\n density.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), density) : y;\n };\n\n density.weight = function(_) {\n return arguments.length ? (weight = typeof _ === \"function\" ? _ : constant(+_), density) : weight;\n };\n\n density.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = +_[0], _1 = +_[1];\n if (!(_0 >= 0 && _1 >= 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, resize();\n };\n\n density.cellSize = function(_) {\n if (!arguments.length) return 1 << k;\n if (!((_ = +_) >= 1)) throw new Error(\"invalid cell size\");\n return k = Math.floor(Math.log(_) / Math.LN2), resize();\n };\n\n density.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), density) : threshold;\n };\n\n density.bandwidth = function(_) {\n if (!arguments.length) return Math.sqrt(r * (r + 1));\n if (!((_ = +_) >= 0)) throw new Error(\"invalid bandwidth\");\n return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();\n };\n\n return density;\n}\n","const epsilon = 1e-6;\n\nexport default class Path {\n constructor() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n }\n moveTo(x, y) {\n this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n }\n lineTo(x, y) {\n this._ += `L${this._x1 = +x},${this._y1 = +y}`;\n }\n arc(x, y, r) {\n x = +x, y = +y, r = +r;\n const x0 = x + r;\n const y0 = y;\n if (r < 0) throw new Error(\"negative radius\");\n if (this._x1 === null) this._ += `M${x0},${y0}`;\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) this._ += \"L\" + x0 + \",\" + y0;\n if (!r) return;\n this._ += `A${r},${r},0,1,1,${x - r},${y}A${r},${r},0,1,1,${this._x1 = x0},${this._y1 = y0}`;\n }\n rect(x, y, w, h) {\n this._ += `M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${+w}v${+h}h${-w}Z`;\n }\n value() {\n return this._ || null;\n }\n}\n","export default class Polygon {\n constructor() {\n this._ = [];\n }\n moveTo(x, y) {\n this._.push([x, y]);\n }\n closePath() {\n this._.push(this._[0].slice());\n }\n lineTo(x, y) {\n this._.push([x, y]);\n }\n value() {\n return this._.length ? this._ : null;\n }\n}\n","import Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\n\nexport default class Voronoi {\n constructor(delaunay, [xmin, ymin, xmax, ymax] = [0, 0, 960, 500]) {\n if (!((xmax = +xmax) >= (xmin = +xmin)) || !((ymax = +ymax) >= (ymin = +ymin))) throw new Error(\"invalid bounds\");\n this.delaunay = delaunay;\n this._circumcenters = new Float64Array(delaunay.points.length * 2);\n this.vectors = new Float64Array(delaunay.points.length * 2);\n this.xmax = xmax, this.xmin = xmin;\n this.ymax = ymax, this.ymin = ymin;\n this._init();\n }\n update() {\n this.delaunay.update();\n this._init();\n return this;\n }\n _init() {\n const {delaunay: {points, hull, triangles}, vectors} = this;\n\n // Compute circumcenters.\n const circumcenters = this.circumcenters = this._circumcenters.subarray(0, triangles.length / 3 * 2);\n for (let i = 0, j = 0, n = triangles.length, x, y; i < n; i += 3, j += 2) {\n const t1 = triangles[i] * 2;\n const t2 = triangles[i + 1] * 2;\n const t3 = triangles[i + 2] * 2;\n const x1 = points[t1];\n const y1 = points[t1 + 1];\n const x2 = points[t2];\n const y2 = points[t2 + 1];\n const x3 = points[t3];\n const y3 = points[t3 + 1];\n\n const dx = x2 - x1;\n const dy = y2 - y1;\n const ex = x3 - x1;\n const ey = y3 - y1;\n const bl = dx * dx + dy * dy;\n const cl = ex * ex + ey * ey;\n const ab = (dx * ey - dy * ex) * 2;\n\n if (!ab) {\n // degenerate case (collinear diagram)\n x = (x1 + x3) / 2 - 1e8 * ey;\n y = (y1 + y3) / 2 + 1e8 * ex;\n }\n else if (Math.abs(ab) < 1e-8) {\n // almost equal points (degenerate triangle)\n x = (x1 + x3) / 2;\n y = (y1 + y3) / 2;\n } else {\n const d = 1 / ab;\n x = x1 + (ey * bl - dy * cl) * d;\n y = y1 + (dx * cl - ex * bl) * d;\n }\n circumcenters[j] = x;\n circumcenters[j + 1] = y;\n }\n\n // Compute exterior cell rays.\n let h = hull[hull.length - 1];\n let p0, p1 = h * 4;\n let x0, x1 = points[2 * h];\n let y0, y1 = points[2 * h + 1];\n vectors.fill(0);\n for (let i = 0; i < hull.length; ++i) {\n h = hull[i];\n p0 = p1, x0 = x1, y0 = y1;\n p1 = h * 4, x1 = points[2 * h], y1 = points[2 * h + 1];\n vectors[p0 + 2] = vectors[p1] = y0 - y1;\n vectors[p0 + 3] = vectors[p1 + 1] = x1 - x0;\n }\n }\n render(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {delaunay: {halfedges, inedges, hull}, circumcenters, vectors} = this;\n if (hull.length <= 1) return null;\n for (let i = 0, n = halfedges.length; i < n; ++i) {\n const j = halfedges[i];\n if (j < i) continue;\n const ti = Math.floor(i / 3) * 2;\n const tj = Math.floor(j / 3) * 2;\n const xi = circumcenters[ti];\n const yi = circumcenters[ti + 1];\n const xj = circumcenters[tj];\n const yj = circumcenters[tj + 1];\n this._renderSegment(xi, yi, xj, yj, context);\n }\n let h0, h1 = hull[hull.length - 1];\n for (let i = 0; i < hull.length; ++i) {\n h0 = h1, h1 = hull[i];\n const t = Math.floor(inedges[h1] / 3) * 2;\n const x = circumcenters[t];\n const y = circumcenters[t + 1];\n const v = h0 * 4;\n const p = this._project(x, y, vectors[v + 2], vectors[v + 3]);\n if (p) this._renderSegment(x, y, p[0], p[1], context);\n }\n return buffer && buffer.value();\n }\n renderBounds(context) {\n const buffer = context == null ? context = new Path : undefined;\n context.rect(this.xmin, this.ymin, this.xmax - this.xmin, this.ymax - this.ymin);\n return buffer && buffer.value();\n }\n renderCell(i, context) {\n const buffer = context == null ? context = new Path : undefined;\n const points = this._clip(i);\n if (points === null || !points.length) return;\n context.moveTo(points[0], points[1]);\n let n = points.length;\n while (points[0] === points[n-2] && points[1] === points[n-1] && n > 1) n -= 2;\n for (let i = 2; i < n; i += 2) {\n if (points[i] !== points[i-2] || points[i+1] !== points[i-1])\n context.lineTo(points[i], points[i + 1]);\n }\n context.closePath();\n return buffer && buffer.value();\n }\n *cellPolygons() {\n const {delaunay: {points}} = this;\n for (let i = 0, n = points.length / 2; i < n; ++i) {\n const cell = this.cellPolygon(i);\n if (cell) cell.index = i, yield cell;\n }\n }\n cellPolygon(i) {\n const polygon = new Polygon;\n this.renderCell(i, polygon);\n return polygon.value();\n }\n _renderSegment(x0, y0, x1, y1, context) {\n let S;\n const c0 = this._regioncode(x0, y0);\n const c1 = this._regioncode(x1, y1);\n if (c0 === 0 && c1 === 0) {\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n } else if (S = this._clipSegment(x0, y0, x1, y1, c0, c1)) {\n context.moveTo(S[0], S[1]);\n context.lineTo(S[2], S[3]);\n }\n }\n contains(i, x, y) {\n if ((x = +x, x !== x) || (y = +y, y !== y)) return false;\n return this.delaunay._step(i, x, y) === i;\n }\n *neighbors(i) {\n const ci = this._clip(i);\n if (ci) for (const j of this.delaunay.neighbors(i)) {\n const cj = this._clip(j);\n // find the common edge\n if (cj) loop: for (let ai = 0, li = ci.length; ai < li; ai += 2) {\n for (let aj = 0, lj = cj.length; aj < lj; aj += 2) {\n if (ci[ai] == cj[aj]\n && ci[ai + 1] == cj[aj + 1]\n && ci[(ai + 2) % li] == cj[(aj + lj - 2) % lj]\n && ci[(ai + 3) % li] == cj[(aj + lj - 1) % lj]\n ) {\n yield j;\n break loop;\n }\n }\n }\n }\n }\n _cell(i) {\n const {circumcenters, delaunay: {inedges, halfedges, triangles}} = this;\n const e0 = inedges[i];\n if (e0 === -1) return null; // coincident point\n const points = [];\n let e = e0;\n do {\n const t = Math.floor(e / 3);\n points.push(circumcenters[t * 2], circumcenters[t * 2 + 1]);\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) break; // bad triangulation\n e = halfedges[e];\n } while (e !== e0 && e !== -1);\n return points;\n }\n _clip(i) {\n // degenerate case (1 valid point: return the box)\n if (i === 0 && this.delaunay.hull.length === 1) {\n return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n }\n const points = this._cell(i);\n if (points === null) return null;\n const {vectors: V} = this;\n const v = i * 4;\n return V[v] || V[v + 1]\n ? this._clipInfinite(i, points, V[v], V[v + 1], V[v + 2], V[v + 3])\n : this._clipFinite(i, points);\n }\n _clipFinite(i, points) {\n const n = points.length;\n let P = null;\n let x0, y0, x1 = points[n - 2], y1 = points[n - 1];\n let c0, c1 = this._regioncode(x1, y1);\n let e0, e1;\n for (let j = 0; j < n; j += 2) {\n x0 = x1, y0 = y1, x1 = points[j], y1 = points[j + 1];\n c0 = c1, c1 = this._regioncode(x1, y1);\n if (c0 === 0 && c1 === 0) {\n e0 = e1, e1 = 0;\n if (P) P.push(x1, y1);\n else P = [x1, y1];\n } else {\n let S, sx0, sy0, sx1, sy1;\n if (c0 === 0) {\n if ((S = this._clipSegment(x0, y0, x1, y1, c0, c1)) === null) continue;\n [sx0, sy0, sx1, sy1] = S;\n } else {\n if ((S = this._clipSegment(x1, y1, x0, y0, c1, c0)) === null) continue;\n [sx1, sy1, sx0, sy0] = S;\n e0 = e1, e1 = this._edgecode(sx0, sy0);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n if (P) P.push(sx0, sy0);\n else P = [sx0, sy0];\n }\n e0 = e1, e1 = this._edgecode(sx1, sy1);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n if (P) P.push(sx1, sy1);\n else P = [sx1, sy1];\n }\n }\n if (P) {\n e0 = e1, e1 = this._edgecode(P[0], P[1]);\n if (e0 && e1) this._edge(i, e0, e1, P, P.length);\n } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n return [this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax, this.xmin, this.ymin];\n }\n return P;\n }\n _clipSegment(x0, y0, x1, y1, c0, c1) {\n while (true) {\n if (c0 === 0 && c1 === 0) return [x0, y0, x1, y1];\n if (c0 & c1) return null;\n let x, y, c = c0 || c1;\n if (c & 0b1000) x = x0 + (x1 - x0) * (this.ymax - y0) / (y1 - y0), y = this.ymax;\n else if (c & 0b0100) x = x0 + (x1 - x0) * (this.ymin - y0) / (y1 - y0), y = this.ymin;\n else if (c & 0b0010) y = y0 + (y1 - y0) * (this.xmax - x0) / (x1 - x0), x = this.xmax;\n else y = y0 + (y1 - y0) * (this.xmin - x0) / (x1 - x0), x = this.xmin;\n if (c0) x0 = x, y0 = y, c0 = this._regioncode(x0, y0);\n else x1 = x, y1 = y, c1 = this._regioncode(x1, y1);\n }\n }\n _clipInfinite(i, points, vx0, vy0, vxn, vyn) {\n let P = Array.from(points), p;\n if (p = this._project(P[0], P[1], vx0, vy0)) P.unshift(p[0], p[1]);\n if (p = this._project(P[P.length - 2], P[P.length - 1], vxn, vyn)) P.push(p[0], p[1]);\n if (P = this._clipFinite(i, P)) {\n for (let j = 0, n = P.length, c0, c1 = this._edgecode(P[n - 2], P[n - 1]); j < n; j += 2) {\n c0 = c1, c1 = this._edgecode(P[j], P[j + 1]);\n if (c0 && c1) j = this._edge(i, c0, c1, P, j), n = P.length;\n }\n } else if (this.contains(i, (this.xmin + this.xmax) / 2, (this.ymin + this.ymax) / 2)) {\n P = [this.xmin, this.ymin, this.xmax, this.ymin, this.xmax, this.ymax, this.xmin, this.ymax];\n }\n return P;\n }\n _edge(i, e0, e1, P, j) {\n while (e0 !== e1) {\n let x, y;\n switch (e0) {\n case 0b0101: e0 = 0b0100; continue; // top-left\n case 0b0100: e0 = 0b0110, x = this.xmax, y = this.ymin; break; // top\n case 0b0110: e0 = 0b0010; continue; // top-right\n case 0b0010: e0 = 0b1010, x = this.xmax, y = this.ymax; break; // right\n case 0b1010: e0 = 0b1000; continue; // bottom-right\n case 0b1000: e0 = 0b1001, x = this.xmin, y = this.ymax; break; // bottom\n case 0b1001: e0 = 0b0001; continue; // bottom-left\n case 0b0001: e0 = 0b0101, x = this.xmin, y = this.ymin; break; // left\n }\n if ((P[j] !== x || P[j + 1] !== y) && this.contains(i, x, y)) {\n P.splice(j, 0, x, y), j += 2;\n }\n }\n if (P.length > 4) {\n for (let i = 0; i < P.length; i+= 2) {\n const j = (i + 2) % P.length, k = (i + 4) % P.length;\n if (P[i] === P[j] && P[j] === P[k]\n || P[i + 1] === P[j + 1] && P[j + 1] === P[k + 1])\n P.splice(j, 2), i -= 2;\n }\n }\n return j;\n }\n _project(x0, y0, vx, vy) {\n let t = Infinity, c, x, y;\n if (vy < 0) { // top\n if (y0 <= this.ymin) return null;\n if ((c = (this.ymin - y0) / vy) < t) y = this.ymin, x = x0 + (t = c) * vx;\n } else if (vy > 0) { // bottom\n if (y0 >= this.ymax) return null;\n if ((c = (this.ymax - y0) / vy) < t) y = this.ymax, x = x0 + (t = c) * vx;\n }\n if (vx > 0) { // right\n if (x0 >= this.xmax) return null;\n if ((c = (this.xmax - x0) / vx) < t) x = this.xmax, y = y0 + (t = c) * vy;\n } else if (vx < 0) { // left\n if (x0 <= this.xmin) return null;\n if ((c = (this.xmin - x0) / vx) < t) x = this.xmin, y = y0 + (t = c) * vy;\n }\n return [x, y];\n }\n _edgecode(x, y) {\n return (x === this.xmin ? 0b0001\n : x === this.xmax ? 0b0010 : 0b0000)\n | (y === this.ymin ? 0b0100\n : y === this.ymax ? 0b1000 : 0b0000);\n }\n _regioncode(x, y) {\n return (x < this.xmin ? 0b0001\n : x > this.xmax ? 0b0010 : 0b0000)\n | (y < this.ymin ? 0b0100\n : y > this.ymax ? 0b1000 : 0b0000);\n }\n}\n","import Delaunator from \"delaunator\";\nimport Path from \"./path.js\";\nimport Polygon from \"./polygon.js\";\nimport Voronoi from \"./voronoi.js\";\n\nconst tau = 2 * Math.PI, pow = Math.pow;\n\nfunction pointX(p) {\n return p[0];\n}\n\nfunction pointY(p) {\n return p[1];\n}\n\n// A triangulation is collinear if all its triangles have a non-null area\nfunction collinear(d) {\n const {triangles, coords} = d;\n for (let i = 0; i < triangles.length; i += 3) {\n const a = 2 * triangles[i],\n b = 2 * triangles[i + 1],\n c = 2 * triangles[i + 2],\n cross = (coords[c] - coords[a]) * (coords[b + 1] - coords[a + 1])\n - (coords[b] - coords[a]) * (coords[c + 1] - coords[a + 1]);\n if (cross > 1e-10) return false;\n }\n return true;\n}\n\nfunction jitter(x, y, r) {\n return [x + Math.sin(x + y) * r, y + Math.cos(x - y) * r];\n}\n\nexport default class Delaunay {\n static from(points, fx = pointX, fy = pointY, that) {\n return new Delaunay(\"length\" in points\n ? flatArray(points, fx, fy, that)\n : Float64Array.from(flatIterable(points, fx, fy, that)));\n }\n constructor(points) {\n this._delaunator = new Delaunator(points);\n this.inedges = new Int32Array(points.length / 2);\n this._hullIndex = new Int32Array(points.length / 2);\n this.points = this._delaunator.coords;\n this._init();\n }\n update() {\n this._delaunator.update();\n this._init();\n return this;\n }\n _init() {\n const d = this._delaunator, points = this.points;\n\n // check for collinear\n if (d.hull && d.hull.length > 2 && collinear(d)) {\n this.collinear = Int32Array.from({length: points.length/2}, (_,i) => i)\n .sort((i, j) => points[2 * i] - points[2 * j] || points[2 * i + 1] - points[2 * j + 1]); // for exact neighbors\n const e = this.collinear[0], f = this.collinear[this.collinear.length - 1],\n bounds = [ points[2 * e], points[2 * e + 1], points[2 * f], points[2 * f + 1] ],\n r = 1e-8 * Math.hypot(bounds[3] - bounds[1], bounds[2] - bounds[0]);\n for (let i = 0, n = points.length / 2; i < n; ++i) {\n const p = jitter(points[2 * i], points[2 * i + 1], r);\n points[2 * i] = p[0];\n points[2 * i + 1] = p[1];\n }\n this._delaunator = new Delaunator(points);\n } else {\n delete this.collinear;\n }\n\n const halfedges = this.halfedges = this._delaunator.halfedges;\n const hull = this.hull = this._delaunator.hull;\n const triangles = this.triangles = this._delaunator.triangles;\n const inedges = this.inedges.fill(-1);\n const hullIndex = this._hullIndex.fill(-1);\n\n // Compute an index from each point to an (arbitrary) incoming halfedge\n // Used to give the first neighbor of each point; for this reason,\n // on the hull we give priority to exterior halfedges\n for (let e = 0, n = halfedges.length; e < n; ++e) {\n const p = triangles[e % 3 === 2 ? e - 2 : e + 1];\n if (halfedges[e] === -1 || inedges[p] === -1) inedges[p] = e;\n }\n for (let i = 0, n = hull.length; i < n; ++i) {\n hullIndex[hull[i]] = i;\n }\n\n // degenerate case: 1 or 2 (distinct) points\n if (hull.length <= 2 && hull.length > 0) {\n this.triangles = new Int32Array(3).fill(-1);\n this.halfedges = new Int32Array(3).fill(-1);\n this.triangles[0] = hull[0];\n this.triangles[1] = hull[1];\n this.triangles[2] = hull[1];\n inedges[hull[0]] = 1;\n if (hull.length === 2) inedges[hull[1]] = 0;\n }\n }\n voronoi(bounds) {\n return new Voronoi(this, bounds);\n }\n *neighbors(i) {\n const {inedges, hull, _hullIndex, halfedges, triangles, collinear} = this;\n\n // degenerate case with several collinear points\n if (collinear) {\n const l = collinear.indexOf(i);\n if (l > 0) yield collinear[l - 1];\n if (l < collinear.length - 1) yield collinear[l + 1];\n return;\n }\n\n const e0 = inedges[i];\n if (e0 === -1) return; // coincident point\n let e = e0, p0 = -1;\n do {\n yield p0 = triangles[e];\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) return; // bad triangulation\n e = halfedges[e];\n if (e === -1) {\n const p = hull[(_hullIndex[i] + 1) % hull.length];\n if (p !== p0) yield p;\n return;\n }\n } while (e !== e0);\n }\n find(x, y, i = 0) {\n if ((x = +x, x !== x) || (y = +y, y !== y)) return -1;\n const i0 = i;\n let c;\n while ((c = this._step(i, x, y)) >= 0 && c !== i && c !== i0) i = c;\n return c;\n }\n _step(i, x, y) {\n const {inedges, hull, _hullIndex, halfedges, triangles, points} = this;\n if (inedges[i] === -1 || !points.length) return (i + 1) % (points.length >> 1);\n let c = i;\n let dc = pow(x - points[i * 2], 2) + pow(y - points[i * 2 + 1], 2);\n const e0 = inedges[i];\n let e = e0;\n do {\n let t = triangles[e];\n const dt = pow(x - points[t * 2], 2) + pow(y - points[t * 2 + 1], 2);\n if (dt < dc) dc = dt, c = t;\n e = e % 3 === 2 ? e - 2 : e + 1;\n if (triangles[e] !== i) break; // bad triangulation\n e = halfedges[e];\n if (e === -1) {\n e = hull[(_hullIndex[i] + 1) % hull.length];\n if (e !== t) {\n if (pow(x - points[e * 2], 2) + pow(y - points[e * 2 + 1], 2) < dc) return e;\n }\n break;\n }\n } while (e !== e0);\n return c;\n }\n render(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {points, halfedges, triangles} = this;\n for (let i = 0, n = halfedges.length; i < n; ++i) {\n const j = halfedges[i];\n if (j < i) continue;\n const ti = triangles[i] * 2;\n const tj = triangles[j] * 2;\n context.moveTo(points[ti], points[ti + 1]);\n context.lineTo(points[tj], points[tj + 1]);\n }\n this.renderHull(context);\n return buffer && buffer.value();\n }\n renderPoints(context, r = 2) {\n const buffer = context == null ? context = new Path : undefined;\n const {points} = this;\n for (let i = 0, n = points.length; i < n; i += 2) {\n const x = points[i], y = points[i + 1];\n context.moveTo(x + r, y);\n context.arc(x, y, r, 0, tau);\n }\n return buffer && buffer.value();\n }\n renderHull(context) {\n const buffer = context == null ? context = new Path : undefined;\n const {hull, points} = this;\n const h = hull[0] * 2, n = hull.length;\n context.moveTo(points[h], points[h + 1]);\n for (let i = 1; i < n; ++i) {\n const h = 2 * hull[i];\n context.lineTo(points[h], points[h + 1]);\n }\n context.closePath();\n return buffer && buffer.value();\n }\n hullPolygon() {\n const polygon = new Polygon;\n this.renderHull(polygon);\n return polygon.value();\n }\n renderTriangle(i, context) {\n const buffer = context == null ? context = new Path : undefined;\n const {points, triangles} = this;\n const t0 = triangles[i *= 3] * 2;\n const t1 = triangles[i + 1] * 2;\n const t2 = triangles[i + 2] * 2;\n context.moveTo(points[t0], points[t0 + 1]);\n context.lineTo(points[t1], points[t1 + 1]);\n context.lineTo(points[t2], points[t2 + 1]);\n context.closePath();\n return buffer && buffer.value();\n }\n *trianglePolygons() {\n const {triangles} = this;\n for (let i = 0, n = triangles.length / 3; i < n; ++i) {\n yield this.trianglePolygon(i);\n }\n }\n trianglePolygon(i) {\n const polygon = new Polygon;\n this.renderTriangle(i, polygon);\n return polygon.value();\n }\n}\n\nfunction flatArray(points, fx, fy, that) {\n const n = points.length;\n const array = new Float64Array(n * 2);\n for (let i = 0; i < n; ++i) {\n const p = points[i];\n array[i * 2] = fx.call(that, p, i, points);\n array[i * 2 + 1] = fy.call(that, p, i, points);\n }\n return array;\n}\n\nfunction* flatIterable(points, fx, fy, that) {\n let i = 0;\n for (const p of points) {\n yield fx.call(that, p, i, points);\n yield fy.call(that, p, i, points);\n ++i;\n }\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","export {default as dispatch} from \"./dispatch.js\";\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n let r0 = Math.round(start / step), r1 = Math.round(stop / step);\n if (r0 * step < start) ++r0;\n if (r1 * step > stop) --r1;\n ticks = new Array(n = r1 - r0 + 1);\n while (++i < n) ticks[i] = (r0 + i) * step;\n } else {\n step = -step;\n let r0 = Math.round(start * step), r1 = Math.round(stop * step);\n if (r0 / step < start) ++r0;\n if (r1 / step > stop) --r1;\n ticks = new Array(n = r1 - r0 + 1);\n while (++i < n) ticks[i] = (r0 + i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export var abs = Math.abs;\nexport var cos = Math.cos;\nexport var sin = Math.sin;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = pi * 2;\nexport var max = Math.max;\nexport var epsilon = 1e-12;\n","import {max, tau} from \"./math.js\";\n\nfunction range(i, j) {\n return Array.from({length: j - i}, (_, k) => i + k);\n}\n\nfunction compareValue(compare) {\n return function(a, b) {\n return compare(\n a.source.value + a.target.value,\n b.source.value + b.target.value\n );\n };\n}\n\nexport default function() {\n return chord(false, false);\n}\n\nexport function chordTranspose() {\n return chord(false, true);\n}\n\nexport function chordDirected() {\n return chord(true, false);\n}\n\nfunction chord(directed, transpose) {\n var padAngle = 0,\n sortGroups = null,\n sortSubgroups = null,\n sortChords = null;\n\n function chord(matrix) {\n var n = matrix.length,\n groupSums = new Array(n),\n groupIndex = range(0, n),\n chords = new Array(n * n),\n groups = new Array(n),\n k = 0, dx;\n\n matrix = Float64Array.from({length: n * n}, transpose\n ? (_, i) => matrix[i % n][i / n | 0]\n : (_, i) => matrix[i / n | 0][i % n]);\n\n // Compute the scaling factor from value to angle in [0, 2pi].\n for (let i = 0; i < n; ++i) {\n let x = 0;\n for (let j = 0; j < n; ++j) x += matrix[i * n + j] + directed * matrix[j * n + i];\n k += groupSums[i] = x;\n }\n k = max(0, tau - padAngle * n) / k;\n dx = k ? padAngle : tau / n;\n\n // Compute the angles for each group and constituent chord.\n {\n let x = 0;\n if (sortGroups) groupIndex.sort((a, b) => sortGroups(groupSums[a], groupSums[b]));\n for (const i of groupIndex) {\n const x0 = x;\n if (directed) {\n const subgroupIndex = range(~n + 1, n).filter(j => j < 0 ? matrix[~j * n + i] : matrix[i * n + j]);\n if (sortSubgroups) subgroupIndex.sort((a, b) => sortSubgroups(a < 0 ? -matrix[~a * n + i] : matrix[i * n + a], b < 0 ? -matrix[~b * n + i] : matrix[i * n + b]));\n for (const j of subgroupIndex) {\n if (j < 0) {\n const chord = chords[~j * n + i] || (chords[~j * n + i] = {source: null, target: null});\n chord.target = {index: i, startAngle: x, endAngle: x += matrix[~j * n + i] * k, value: matrix[~j * n + i]};\n } else {\n const chord = chords[i * n + j] || (chords[i * n + j] = {source: null, target: null});\n chord.source = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]};\n }\n }\n groups[i] = {index: i, startAngle: x0, endAngle: x, value: groupSums[i]};\n } else {\n const subgroupIndex = range(0, n).filter(j => matrix[i * n + j] || matrix[j * n + i]);\n if (sortSubgroups) subgroupIndex.sort((a, b) => sortSubgroups(matrix[i * n + a], matrix[i * n + b]));\n for (const j of subgroupIndex) {\n let chord;\n if (i < j) {\n chord = chords[i * n + j] || (chords[i * n + j] = {source: null, target: null});\n chord.source = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]};\n } else {\n chord = chords[j * n + i] || (chords[j * n + i] = {source: null, target: null});\n chord.target = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]};\n if (i === j) chord.source = chord.target;\n }\n if (chord.source && chord.target && chord.source.value < chord.target.value) {\n const source = chord.source;\n chord.source = chord.target;\n chord.target = source;\n }\n }\n groups[i] = {index: i, startAngle: x0, endAngle: x, value: groupSums[i]};\n }\n x += dx;\n }\n }\n\n // Remove empty chords.\n chords = Object.values(chords);\n chords.groups = groups;\n return sortChords ? chords.sort(sortChords) : chords;\n }\n\n chord.padAngle = function(_) {\n return arguments.length ? (padAngle = max(0, _), chord) : padAngle;\n };\n\n chord.sortGroups = function(_) {\n return arguments.length ? (sortGroups = _, chord) : sortGroups;\n };\n\n chord.sortSubgroups = function(_) {\n return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;\n };\n\n chord.sortChords = function(_) {\n return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;\n };\n\n return chord;\n}\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {path} from \"d3-path\";\nimport {slice} from \"./array.js\";\nimport constant from \"./constant.js\";\nimport {abs, cos, epsilon, halfPi, sin} from \"./math.js\";\n\nfunction defaultSource(d) {\n return d.source;\n}\n\nfunction defaultTarget(d) {\n return d.target;\n}\n\nfunction defaultRadius(d) {\n return d.radius;\n}\n\nfunction defaultStartAngle(d) {\n return d.startAngle;\n}\n\nfunction defaultEndAngle(d) {\n return d.endAngle;\n}\n\nfunction defaultPadAngle() {\n return 0;\n}\n\nfunction defaultArrowheadRadius() {\n return 10;\n}\n\nfunction ribbon(headRadius) {\n var source = defaultSource,\n target = defaultTarget,\n sourceRadius = defaultRadius,\n targetRadius = defaultRadius,\n startAngle = defaultStartAngle,\n endAngle = defaultEndAngle,\n padAngle = defaultPadAngle,\n context = null;\n\n function ribbon() {\n var buffer,\n s = source.apply(this, arguments),\n t = target.apply(this, arguments),\n ap = padAngle.apply(this, arguments) / 2,\n argv = slice.call(arguments),\n sr = +sourceRadius.apply(this, (argv[0] = s, argv)),\n sa0 = startAngle.apply(this, argv) - halfPi,\n sa1 = endAngle.apply(this, argv) - halfPi,\n tr = +targetRadius.apply(this, (argv[0] = t, argv)),\n ta0 = startAngle.apply(this, argv) - halfPi,\n ta1 = endAngle.apply(this, argv) - halfPi;\n\n if (!context) context = buffer = path();\n\n if (ap > epsilon) {\n if (abs(sa1 - sa0) > ap * 2 + epsilon) sa1 > sa0 ? (sa0 += ap, sa1 -= ap) : (sa0 -= ap, sa1 += ap);\n else sa0 = sa1 = (sa0 + sa1) / 2;\n if (abs(ta1 - ta0) > ap * 2 + epsilon) ta1 > ta0 ? (ta0 += ap, ta1 -= ap) : (ta0 -= ap, ta1 += ap);\n else ta0 = ta1 = (ta0 + ta1) / 2;\n }\n\n context.moveTo(sr * cos(sa0), sr * sin(sa0));\n context.arc(0, 0, sr, sa0, sa1);\n if (sa0 !== ta0 || sa1 !== ta1) {\n if (headRadius) {\n var hr = +headRadius.apply(this, arguments), tr2 = tr - hr, ta2 = (ta0 + ta1) / 2;\n context.quadraticCurveTo(0, 0, tr2 * cos(ta0), tr2 * sin(ta0));\n context.lineTo(tr * cos(ta2), tr * sin(ta2));\n context.lineTo(tr2 * cos(ta1), tr2 * sin(ta1));\n } else {\n context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));\n context.arc(0, 0, tr, ta0, ta1);\n }\n }\n context.quadraticCurveTo(0, 0, sr * cos(sa0), sr * sin(sa0));\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n if (headRadius) ribbon.headRadius = function(_) {\n return arguments.length ? (headRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : headRadius;\n };\n\n ribbon.radius = function(_) {\n return arguments.length ? (sourceRadius = targetRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : sourceRadius;\n };\n\n ribbon.sourceRadius = function(_) {\n return arguments.length ? (sourceRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : sourceRadius;\n };\n\n ribbon.targetRadius = function(_) {\n return arguments.length ? (targetRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : targetRadius;\n };\n\n ribbon.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : startAngle;\n };\n\n ribbon.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : endAngle;\n };\n\n ribbon.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : padAngle;\n };\n\n ribbon.source = function(_) {\n return arguments.length ? (source = _, ribbon) : source;\n };\n\n ribbon.target = function(_) {\n return arguments.length ? (target = _, ribbon) : target;\n };\n\n ribbon.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;\n };\n\n return ribbon;\n}\n\nexport default function() {\n return ribbon();\n}\n\nexport function ribbonArrow() {\n return ribbon(defaultArrowheadRadius);\n}\n","export const linear = t => +t;\n","export function quadIn(t) {\n return t * t;\n}\n\nexport function quadOut(t) {\n return t * (2 - t);\n}\n\nexport function quadInOut(t) {\n return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n e = +e;\n\n function polyIn(t) {\n return Math.pow(t, e);\n }\n\n polyIn.exponent = custom;\n\n return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n e = +e;\n\n function polyOut(t) {\n return 1 - Math.pow(1 - t, e);\n }\n\n polyOut.exponent = custom;\n\n return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n e = +e;\n\n function polyInOut(t) {\n return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n }\n\n polyInOut.exponent = custom;\n\n return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n halfPi = pi / 2;\n\nexport function sinIn(t) {\n return (+t === 1) ? 1 : 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n return (1 - Math.cos(pi * t)) / 2;\n}\n","// tpmt is two power minus ten times t scaled to [0,1]\nexport function tpmt(x) {\n return (Math.pow(2, -10 * x) - 0.0009765625) * 1.0009775171065494;\n}\n","import {tpmt} from \"./math.js\";\n\nexport function expIn(t) {\n return tpmt(1 - +t);\n}\n\nexport function expOut(t) {\n return 1 - tpmt(t);\n}\n\nexport function expInOut(t) {\n return ((t *= 2) <= 1 ? tpmt(1 - t) : 2 - tpmt(t - 1)) / 2;\n}\n","export function circleIn(t) {\n return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","var b1 = 4 / 11,\n b2 = 6 / 11,\n b3 = 8 / 11,\n b4 = 3 / 4,\n b5 = 9 / 11,\n b6 = 10 / 11,\n b7 = 15 / 16,\n b8 = 21 / 22,\n b9 = 63 / 64,\n b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n s = +s;\n\n function backIn(t) {\n return (t = +t) * t * (s * (t - 1) + t);\n }\n\n backIn.overshoot = custom;\n\n return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n s = +s;\n\n function backOut(t) {\n return --t * t * ((t + 1) * s + t) + 1;\n }\n\n backOut.overshoot = custom;\n\n return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n s = +s;\n\n function backInOut(t) {\n return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n }\n\n backInOut.overshoot = custom;\n\n return backInOut;\n})(overshoot);\n","import {tpmt} from \"./math.js\";\n\nvar tau = 2 * Math.PI,\n amplitude = 1,\n period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticIn(t) {\n return a * tpmt(-(--t)) * Math.sin((s - t) / p);\n }\n\n elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n elasticIn.period = function(p) { return custom(a, p); };\n\n return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticOut(t) {\n return 1 - a * tpmt(t = +t) * Math.sin((t + s) / p);\n }\n\n elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticOut.period = function(p) { return custom(a, p); };\n\n return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n function elasticInOut(t) {\n return ((t = t * 2 - 1) < 0\n ? a * tpmt(-t) * Math.sin((s - t) / p)\n : 2 - a * tpmt(t) * Math.sin((s + t) / p)) / 2;\n }\n\n elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n elasticInOut.period = function(p) { return custom(a, p); };\n\n return elasticInOut;\n})(amplitude, period);\n"],"sourceRoot":""}