{"version":3,"sources":["webpack:///./node_modules/d3/dist/package.js","webpack:///./node_modules/d3-array/src/ascending.js","webpack:///./node_modules/d3-array/src/bisector.js","webpack:///./node_modules/d3-array/src/bisect.js","webpack:///./node_modules/d3-array/src/cross.js","webpack:///./node_modules/d3-array/src/array.js","webpack:///./node_modules/d3-array/src/range.js","webpack:///./node_modules/d3-array/src/ticks.js","webpack:///./node_modules/d3-axis/src/array.js","webpack:///./node_modules/d3-dispatch/src/dispatch.js","webpack:///./node_modules/d3-selection/src/selector.js","webpack:///./node_modules/d3-selection/src/selection/select.js","webpack:///./node_modules/d3-selection/src/selectorAll.js","webpack:///./node_modules/d3-selection/src/selection/selectAll.js","webpack:///./node_modules/d3-selection/src/matcher.js","webpack:///./node_modules/d3-selection/src/selection/filter.js","webpack:///./node_modules/d3-selection/src/selection/sparse.js","webpack:///./node_modules/d3-selection/src/selection/enter.js","webpack:///./node_modules/d3-selection/src/constant.js","webpack:///./node_modules/d3-selection/src/selection/data.js","webpack:///./node_modules/d3-selection/src/selection/exit.js","webpack:///./node_modules/d3-selection/src/selection/join.js","webpack:///./node_modules/d3-selection/src/selection/merge.js","webpack:///./node_modules/d3-selection/src/selection/order.js","webpack:///./node_modules/d3-selection/src/selection/sort.js","webpack:///./node_modules/d3-selection/src/selection/call.js","webpack:///./node_modules/d3-selection/src/selection/nodes.js","webpack:///./node_modules/d3-selection/src/selection/node.js","webpack:///./node_modules/d3-selection/src/selection/size.js","webpack:///./node_modules/d3-selection/src/selection/empty.js","webpack:///./node_modules/d3-selection/src/selection/each.js","webpack:///./node_modules/d3-selection/src/namespaces.js","webpack:///./node_modules/d3-selection/src/namespace.js","webpack:///./node_modules/d3-selection/src/selection/attr.js","webpack:///./node_modules/d3-selection/src/window.js","webpack:///./node_modules/d3-selection/src/selection/style.js","webpack:///./node_modules/d3-selection/src/selection/property.js","webpack:///./node_modules/d3-selection/src/selection/classed.js","webpack:///./node_modules/d3-selection/src/selection/text.js","webpack:///./node_modules/d3-selection/src/selection/html.js","webpack:///./node_modules/d3-selection/src/selection/raise.js","webpack:///./node_modules/d3-selection/src/selection/lower.js","webpack:///./node_modules/d3-selection/src/creator.js","webpack:///./node_modules/d3-selection/src/selection/append.js","webpack:///./node_modules/d3-selection/src/selection/insert.js","webpack:///./node_modules/d3-selection/src/selection/remove.js","webpack:///./node_modules/d3-selection/src/selection/clone.js","webpack:///./node_modules/d3-selection/src/selection/datum.js","webpack:///./node_modules/d3-selection/src/selection/on.js","webpack:///./node_modules/d3-selection/src/selection/dispatch.js","webpack:///./node_modules/d3-selection/src/selection/index.js","webpack:///./node_modules/d3-selection/src/select.js","webpack:///./node_modules/d3-color/src/define.js","webpack:///./node_modules/d3-color/src/color.js","webpack:///./node_modules/d3-interpolate/src/basis.js","webpack:///./node_modules/d3-interpolate/src/basisClosed.js","webpack:///./node_modules/d3-interpolate/src/constant.js","webpack:///./node_modules/d3-interpolate/src/color.js","webpack:///./node_modules/d3-interpolate/src/rgb.js","webpack:///./node_modules/d3-interpolate/src/numberArray.js","webpack:///./node_modules/d3-interpolate/src/array.js","webpack:///./node_modules/d3-interpolate/src/date.js","webpack:///./node_modules/d3-interpolate/src/number.js","webpack:///./node_modules/d3-interpolate/src/object.js","webpack:///./node_modules/d3-interpolate/src/string.js","webpack:///./node_modules/d3-timer/src/timer.js","webpack:///./node_modules/d3-interpolate/src/value.js","webpack:///./node_modules/d3-timer/src/timeout.js","webpack:///./node_modules/d3-transition/src/transition/schedule.js","webpack:///./node_modules/d3-transition/src/interrupt.js","webpack:///./node_modules/d3-interpolate/src/transform/parse.js","webpack:///./node_modules/d3-transition/src/selection/interrupt.js","webpack:///./node_modules/d3-interpolate/src/transform/decompose.js","webpack:///./node_modules/d3-interpolate/src/transform/index.js","webpack:///./node_modules/d3-transition/src/transition/tween.js","webpack:///./node_modules/d3-transition/src/transition/interpolate.js","webpack:///./node_modules/d3-transition/src/transition/attr.js","webpack:///./node_modules/d3-transition/src/transition/attrTween.js","webpack:///./node_modules/d3-transition/src/transition/delay.js","webpack:///./node_modules/d3-transition/src/transition/duration.js","webpack:///./node_modules/d3-transition/src/transition/ease.js","webpack:///./node_modules/d3-transition/src/transition/filter.js","webpack:///./node_modules/d3-transition/src/transition/merge.js","webpack:///./node_modules/d3-transition/src/transition/on.js","webpack:///./node_modules/d3-transition/src/transition/remove.js","webpack:///./node_modules/d3-transition/src/transition/select.js","webpack:///./node_modules/d3-transition/src/transition/selectAll.js","webpack:///./node_modules/d3-transition/src/transition/selection.js","webpack:///./node_modules/d3-transition/src/transition/style.js","webpack:///./node_modules/d3-transition/src/transition/styleTween.js","webpack:///./node_modules/d3-transition/src/transition/text.js","webpack:///./node_modules/d3-transition/src/transition/textTween.js","webpack:///./node_modules/d3-transition/src/transition/transition.js","webpack:///./node_modules/d3-transition/src/transition/end.js","webpack:///./node_modules/d3-transition/src/transition/index.js","webpack:///./node_modules/d3-ease/src/cubic.js","webpack:///./node_modules/d3-transition/src/selection/transition.js","webpack:///./node_modules/d3-transition/src/selection/index.js","webpack:///./node_modules/d3-brush/src/brush.js","webpack:///./node_modules/d3-chord/src/math.js","webpack:///./node_modules/d3-chord/src/array.js","webpack:///./node_modules/d3-chord/src/chord.js","webpack:///./node_modules/d3-path/src/path.js","webpack:///./node_modules/d3-chord/src/ribbon.js","webpack:///./node_modules/d3-collection/src/map.js","webpack:///./node_modules/d3-collection/src/set.js","webpack:///./node_modules/d3-contour/src/array.js","webpack:///./node_modules/d3-contour/src/density.js","webpack:///./node_modules/d3-quadtree/src/add.js","webpack:///./node_modules/d3-quadtree/src/cover.js","webpack:///./node_modules/d3-quadtree/src/data.js","webpack:///./node_modules/d3-quadtree/src/extent.js","webpack:///./node_modules/d3-quadtree/src/quad.js","webpack:///./node_modules/d3-quadtree/src/find.js","webpack:///./node_modules/d3-quadtree/src/remove.js","webpack:///./node_modules/d3-quadtree/src/root.js","webpack:///./node_modules/d3-quadtree/src/size.js","webpack:///./node_modules/d3-quadtree/src/visit.js","webpack:///./node_modules/d3-quadtree/src/visitAfter.js","webpack:///./node_modules/d3-quadtree/src/x.js","webpack:///./node_modules/d3-quadtree/src/y.js","webpack:///./node_modules/d3-quadtree/src/quadtree.js","webpack:///./node_modules/d3-force/src/simulation.js","webpack:///./node_modules/d3-random/src/defaultSource.js","webpack:///./node_modules/d3-random/src/normal.js","webpack:///./node_modules/d3-random/src/uniform.js","webpack:///./node_modules/d3-random/src/irwinHall.js","webpack:///./node_modules/d3-random/src/logNormal.js","webpack:///./node_modules/d3-random/src/bates.js","webpack:///./node_modules/d3-random/src/exponential.js","webpack:///./node_modules/d3-scale/src/init.js","webpack:///./node_modules/d3-scale/src/array.js","webpack:///./node_modules/d3-scale/src/ordinal.js","webpack:///./node_modules/d3-interpolate/src/round.js","webpack:///./node_modules/d3-scale/src/constant.js","webpack:///./node_modules/d3-scale/src/number.js","webpack:///./node_modules/d3-scale/src/continuous.js","webpack:///./node_modules/d3-format/src/formatSpecifier.js","webpack:///./node_modules/d3-format/src/formatDecimal.js","webpack:///./node_modules/d3-format/src/exponent.js","webpack:///./node_modules/d3-format/src/formatPrefixAuto.js","webpack:///./node_modules/d3-format/src/defaultLocale.js","webpack:///./node_modules/d3-format/src/precisionPrefix.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-format/src/precisionRound.js","webpack:///./node_modules/d3-format/src/precisionFixed.js","webpack:///./node_modules/d3-scale/src/tickFormat.js","webpack:///./node_modules/d3-scale/src/linear.js","webpack:///./node_modules/d3-time/src/interval.js","webpack:///./node_modules/d3-time/src/year.js","webpack:///./node_modules/d3-time/src/month.js","webpack:///./node_modules/d3-time/src/duration.js","webpack:///./node_modules/d3-time/src/week.js","webpack:///./node_modules/d3-time/src/day.js","webpack:///./node_modules/d3-time/src/hour.js","webpack:///./node_modules/d3-time/src/minute.js","webpack:///./node_modules/d3-time/src/second.js","webpack:///./node_modules/d3-time/src/millisecond.js","webpack:///./node_modules/d3-time/src/utcWeek.js","webpack:///./node_modules/d3-time/src/utcDay.js","webpack:///./node_modules/d3-time/src/utcYear.js","webpack:///./node_modules/d3-time-format/src/locale.js","webpack:///./node_modules/d3-time-format/src/defaultLocale.js","webpack:///./node_modules/d3-scale/src/time.js","webpack:///./node_modules/d3-time/src/utcMonth.js","webpack:///./node_modules/d3-time/src/utcHour.js","webpack:///./node_modules/d3-time/src/utcMinute.js","webpack:///./node_modules/d3-selection/src/selectAll.js","webpack:///./node_modules/d3-voronoi/src/RedBlackTree.js","webpack:///./node_modules/d3-voronoi/src/Edge.js","webpack:///./node_modules/d3-voronoi/src/Cell.js","webpack:///./node_modules/d3-voronoi/src/Circle.js","webpack:///./node_modules/d3-voronoi/src/Beach.js","webpack:///./node_modules/d3-voronoi/src/Diagram.js","webpack:///./node_modules/d3-interpolate/src/zoom.js","webpack:///./node_modules/d3-zoom/src/transform.js","webpack:///./node_modules/save-svg-as-png/lib/saveSvgAsPng.js","webpack:///./src/ohm/components/Correlation.vue?9694","webpack:///./src/ohm/components/Correlation.vue?4145","webpack:///src/ohm/components/Correlation.vue","webpack:///./src/ohm/components/Correlation.vue?21a7","webpack:///./src/ohm/components/Correlation.vue"],"names":["a","b","NaN","compare","length","ascendingComparator","left","x","lo","hi","mid","right","f","d","ascending","ascendingBisect","bisector","bisectRight","bisect","Array","prototype","slice","map","start","stop","step","n","arguments","i","Math","max","ceil","range","e10","sqrt","e5","e2","reverse","ticks","count","tickIncrement","isFinite","floor","power","log","LN10","error","pow","tickStep","step0","abs","step1","noop","value","dispatch","t","_","test","Error","Dispatch","this","parseTypenames","typenames","types","trim","split","name","indexOf","hasOwnProperty","type","get","c","set","callback","concat","push","constructor","on","typename","T","copy","call","that","args","apply","none","selector","querySelector","select","groups","_groups","m","subgroups","j","node","subnode","group","subgroup","__data__","Selection","_parents","querySelectorAll","selectorAll","parents","matches","match","matcher","update","_enter","sparse","EnterNode","parent","datum","ownerDocument","namespaceURI","_next","_parent","appendChild","child","insertBefore","next","keyPrefix","bindIndex","enter","exit","data","groupLength","dataLength","bindKey","key","keyValue","nodeByKeyValue","keyValues","size","each","bind","enterGroup","updateGroup","exitGroup","previous","i0","i1","_exit","onenter","append","onupdate","onexit","remove","merge","order","groups0","groups1","selection","m0","m1","min","merges","group0","group1","compareDocumentPosition","parentNode","compareNode","sortgroups","sortgroup","sort","nodes","xhtml","svg","xlink","xml","xmlns","prefix","namespaces","space","local","attrRemove","removeAttribute","attrRemoveNS","fullname","removeAttributeNS","attrConstant","setAttribute","attrConstantNS","setAttributeNS","attrFunction","v","attrFunctionNS","namespace","getAttributeNS","getAttribute","defaultView","document","styleRemove","style","removeProperty","styleConstant","priority","setProperty","styleFunction","styleValue","getPropertyValue","getComputedStyle","propertyRemove","propertyConstant","propertyFunction","classArray","string","classList","ClassList","_node","_names","classedAdd","names","list","add","classedRemove","classedTrue","classedFalse","classedFunction","join","splice","contains","textRemove","textContent","textConstant","textFunction","htmlRemove","innerHTML","htmlConstant","htmlFunction","raise","nextSibling","lower","previousSibling","firstChild","creatorInherit","uri","documentElement","createElement","createElementNS","creatorFixed","create","creator","constantNull","before","removeChild","selection_cloneShallow","clone","cloneNode","selection_cloneDeep","deep","property","filterEvents","mouseenter","mouseleave","filterContextListener","listener","index","contextListener","event","related","relatedTarget","event1","event0","onRemove","__on","o","removeEventListener","capture","onAdd","wrap","addEventListener","dispatchEvent","params","window","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","dispatchConstant","dispatchFunction","selection_select","selectAll","filter","selection_filter","selection_data","selection_enter","selection_exit","selection_merge","selection_nodes","selection_node","selection_size","empty","selection_empty","attr","classed","text","selection_text","html","selection_raise","selection_lower","insert","selection_remove","selection_on","selection_dispatch","factory","extend","definition","Object","Color","darker","brighter","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","rgb","formatHex","color_formatHsl","hslConvert","formatHsl","color_formatRgb","formatRgb","format","l","toLowerCase","exec","parseInt","rgbn","Rgb","rgba","hsla","r","g","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","isNaN","round","toString","h","s","Hsl","hsl","hsl2rgb","m2","basis","t1","v0","v1","v2","v3","t2","t3","define","channels","assign","displayable","k","values","linear","exponential","y","gamma","nogamma","color","end","rgbGamma","rgbSpline","spline","colors","basisClosed","isNumberArray","ArrayBuffer","isView","DataView","genericArray","nb","na","Date","setTime","reA","reB","source","one","taskHead","taskTail","am","bm","bs","bi","lastIndex","q","numberArray","isArray","valueOf","object","timeout","pokeDelay","clockLast","clockNow","clockSkew","clock","performance","now","setFrame","requestAnimationFrame","setTimeout","clearNow","Timer","_call","_time","timer","delay","time","restart","timerFlush","e","wake","nap","poke","t0","Infinity","sleep","clearTimeout","clearInterval","setInterval","TypeError","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","schedules","__transition","id","tween","timing","duration","ease","state","init","schedule","self","tick","cssNode","cssRoot","cssView","svgNode","active","interrupt","degrees","PI","translateX","translateY","rotate","skewX","scaleX","scaleY","atan2","atan","parseCss","transform","decompose","parseSvg","baseVal","consolidate","matrix","interpolateTransform","parse","pxComma","pxParen","degParen","pop","translate","xa","ya","xb","yb","scale","interpolateTransformCss","interpolateTransformSvg","tweenRemove","tween0","tween1","tweenFunction","_id","tweenValue","transition","interpolate","value1","string00","interpolate0","string1","string0","string10","attrTween","attrInterpolate","attrInterpolateNS","attrTweenNS","_value","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","Transition","_name","every","onFunction","on0","on1","sit","removeFunction","children","inherit","styleNull","styleMaybeRemove","listener0","undefined","styleTween","styleInterpolate","textInterpolate","textTween","id0","id1","newId","Promise","resolve","reject","cancel","selection_prototype","cubicInOut","transition_select","transition_selectAll","transition_filter","transition_merge","transition_selection","transition_transition","transition_on","transition_attr","transition_attrTween","transition_style","transition_styleTween","transition_text","transition_textTween","transition_remove","transition_tween","transition_delay","transition_duration","transition_end","defaultTiming","selection_interrupt","selection_transition","number1","number2","cos","sin","tauEpsilon","Path","_x0","_y0","_x1","_y1","moveTo","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","x2","y2","arcTo","x0","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","a0","a1","ccw","dx","dy","cw","da","rect","w","Map","has","clear","keys","entries","Set","proto","_x","_y","cover","tree","xm","ym","xp","yp","bottom","_root","leaf","addAll","xz","yz","z","visit","x3","y3","quads","radius","d2","retainer","removeAll","quadtree","Quadtree","leaf_copy","treeProto","target","extent","find","root","visitAfter","random","randomUniform","sourceRandomUniform","randomNormal","mu","sigma","sourceRandomNormal","randomLogNormal","normal","exp","sourceRandomLogNormal","randomIrwinHall","sum","sourceRandomIrwinHall","randomBates","irwinHall","sourceRandomBates","randomExponential","lambda","sourceRandomExponential","initRange","domain","implicit","ordinal","unknown","unit","normalize","clamper","bimap","d0","d1","r0","r1","polymap","clamp","transformer","untransform","piecewise","output","input","rescale","invert","rangeRound","u","continuous","re","formatSpecifier","specifier","FormatSpecifier","fill","align","sign","symbol","zero","width","comma","precision","toLocaleString","replace","formatDecimalParts","p","toExponential","coefficient","prefixExponent","grouping","substring","thousands","numerals","out","exponent","toFixed","formatDecimal","toPrecision","formatRounded","formatPrefixAuto","toUpperCase","prefixes","locale","formatGroup","Number","currencyPrefix","currency","currencySuffix","decimal","formatNumerals","String","percent","minus","nan","newFormat","formatTypes","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","formatTrim","charCodeAt","padding","formatPrefix","defaultLocale","precisionPrefix","precisionRound","precisionFixed","linearish","tickFormat","nice","newInterval","floori","offseti","field","interval","date","offset","setMonth","setHours","setFullYear","getFullYear","setDate","getMonth","durationSecond","durationMinute","durationHour","durationDay","durationWeek","weekday","getDate","getDay","getTimezoneOffset","sunday","monday","tuesday","wednesday","thursday","friday","saturday","getMilliseconds","getSeconds","getMinutes","getHours","getUTCSeconds","utcWeekday","setUTCDate","getUTCDate","getUTCDay","setUTCHours","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcDay","utcYear","setUTCMonth","setUTCFullYear","getUTCFullYear","localDate","H","M","S","L","utcDate","UTC","newDate","formatLocale","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","formatRe","periodLookup","formatLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatShortWeekday","formatWeekday","formatShortMonth","formatMonth","formatDayOfMonth","formatMicroseconds","formatYearISO","formatFullYearISO","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","formatPeriod","formatQuarter","formatUnixTimestamp","formatUnixTimestampSeconds","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatFullYear","formatZone","formatLiteralPercent","utcFormats","formatUTCShortWeekday","formatUTCWeekday","formatUTCShortMonth","formatUTCMonth","formatUTCDayOfMonth","formatUTCMicroseconds","formatUTCYearISO","formatUTCFullYearISO","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCPeriod","formatUTCQuarter","formatUTCSeconds","formatUTCWeekdayNumberMonday","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parses","parseShortWeekday","parseWeekday","parseShortMonth","parseMonth","parseLocaleDateTime","parseDayOfMonth","parseMicroseconds","parseYear","parseFullYear","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parsePeriod","parseQuarter","parseUnixTimestamp","parseUnixTimestampSeconds","parseSeconds","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekdayNumberSunday","parseWeekNumberMonday","parseLocaleDate","parseLocaleTime","parseZone","parseLiteralPercent","pad","pads","charAt","newParse","Z","week","day","parseSpecifier","Q","V","getUTCMonth","W","U","getUTCHours","X","utcFormat","utcParse","numberRe","percentRe","requoteRe","requote","dISO","getUTCMilliseconds","getUTCMinutes","dow","UTCdISO","utcMonth","utcHour","setUTCMinutes","utcMinute","setUTCSeconds","RedBlackTree","RedBlackNode","C","R","P","N","RedBlackRotateLeft","RedBlackRotateRight","RedBlackFirst","after","grandpa","uncle","sibling","createEdge","edge","setEdgeEnd","cells","halfedges","createBorderEdge","vertex","clipEdge","ax","ay","bx","by","connectEdge","fm","fb","lx","ly","rx","ry","fx","fy","clipEdges","createCell","site","cellHalfedgeAngle","cell","va","vb","cellHalfedgeStart","cellHalfedgeEnd","sortCellHalfedges","array","clipCells","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","dc","v00","v01","v11","v10","firstCircle","circlePool","Circle","cy","attachCircle","lArc","rArc","lSite","cSite","rSite","cx","epsilon2","ha","hc","circle","circles","detachCircle","beachPool","Beach","createBeach","beach","detachBeach","beaches","removeBeach","disappearing","unshift","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","triangleArea","lexicographic","Diagram","sites","edges","polygons","polygon","triangles","forEach","s0","e1","s1","links","_found","vx","vy","SQRT2","Transform","point","applyX","applyY","location","invertX","invertY","rescaleX","rescaleY","__zoom","out$","exports","default","xmlNs","xhtmlNs","svgNs","doctype","urlRegex","fontFormats","woff2","woff","otf","ttf","eot","sfnt","isElement","obj","HTMLElement","SVGElement","requireDomNode","el","requireDomNodePromise","isExternal","url","lastIndexOf","host","getFontMimeTypeFromUrl","fontUrl","extension","console","arrayBufferToBase64","buffer","binary","bytes","Uint8Array","byteLength","fromCharCode","btoa","getDimension","dim","viewBox","getBoundingClientRect","parseFloat","getDimensions","height","tagName","getBBox","_el$getBBox","_width","_height","reEncode","decodeURIComponent","encodeURIComponent","p1","uriToBlob","byteString","atob","mimeString","intArray","Blob","query","err","warn","detectCssFont","rule","href","cssText","fullUrl","startsWith","inlineImages","all","from","image","canvas","img","Image","crossOrigin","src","onerror","onload","getContext","drawImage","toDataURL","cachedFonts","inlineFonts","fonts","font","req","XMLHttpRequest","fontInBase64","response","fontUri","open","responseType","send","then","fontCss","cachedRules","styleSheetRules","styleSheets","sheet","rules","cssRules","inlineCss","options","_ref","selectorRemap","modifyStyle","modifyCss","excludeUnusedCss","generateCss","properties","sel","props","css","detectFonts","fontList","_ref2","selectorText","downloadOptions","navigator","msSaveOrOpenBlob","popup","prepareSvg","done","_ref3","_ref3$left","_ref3$top","top","_ref3$scale","_ref3$responsive","responsive","_ref3$excludeCss","excludeCss","backgroundColor","_getDimensions","foreignObject","defs","outer","svgAsDataUri","_ref4","svgXml","svgAsPngUri","_ref5","_ref5$encoderType","encoderType","_ref5$encoderOptions","encoderOptions","canvg","convertToPng","_ref6","context","pixelRatio","devicePixelRatio","setTransform","png","SecurityError","download","saveLink","display","body","blob","URL","createObjectURL","onclick","revokeObjectURL","click","title","saveSvg","downloadOpts","saveSvgAsPng","render","_vm","_h","$createElement","_c","_self","startDrag","doDrag","stopDrag","staticClass","_v","attrs","$store","task","_s","staticStyle","downloadPng","_e","ref","nativeOn","$event","showMatrix","hideMatrix","matrixReady","results","ind","_m","domProps","popupText","staticRenderFns","active_site","allosteric_site","correlationStyle","margin","position","correlationMatrixStyle","fontSize","fontFamily","marginLeft","cursor","popupStyle","borderRadius","dragging","oldMousePosition","computed","correlationContainerStyle","overflowX","methods","clientX","clientY","$refs","correlationContainer","scrollLeft","scrollTop","cyPromise","redirect","openNewTab","getInd","getSites","vec","checkTask","method","withCredentials","transformResponse","d3","lines","aci","reduce","indices","orders","sequence","xRangeBand","row","column","eachRow","mouseover","mouseout","mounted","component"],"mappings":"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","file":"js/chunk-245c727f.0143cac4.js","sourcesContent":["export var name = \"d3\";\nexport var version = \"5.12.0\";\nexport var description = \"Data-Driven Documents\";\nexport var keywords = [\"dom\",\"visualization\",\"svg\",\"animation\",\"canvas\"];\nexport var homepage = \"https://d3js.org\";\nexport var license = \"BSD-3-Clause\";\nexport var author = {\"name\":\"Mike Bostock\",\"url\":\"https://bost.ocks.org/mike\"};\nexport var main = \"dist/d3.node.js\";\nexport var unpkg = \"dist/d3.min.js\";\nexport var jsdelivr = \"dist/d3.min.js\";\nexport var module = \"index.js\";\nexport var repository = {\"type\":\"git\",\"url\":\"https://github.com/d3/d3.git\"};\nexport var files = [\"dist/**/*.js\",\"index.js\"];\nexport var scripts = {\"pretest\":\"rimraf dist && mkdir dist && json2module package.json > dist/package.js && rollup -c\",\"test\":\"tape 'test/**/*-test.js'\",\"prepublishOnly\":\"yarn test\",\"postpublish\":\"git push && git push --tags && cd ../d3.github.com && git pull && cp ../d3/dist/d3.js d3.v5.js && cp ../d3/dist/d3.min.js d3.v5.min.js && git add d3.v5.js d3.v5.min.js && git commit -m \\\"d3 ${npm_package_version}\\\" && git push && cd - && cd ../d3-bower && git pull && cp ../d3/LICENSE ../d3/README.md ../d3/dist/d3.js ../d3/dist/d3.min.js . && git add -- LICENSE README.md d3.js d3.min.js && git commit -m \\\"${npm_package_version}\\\" && git tag -am \\\"${npm_package_version}\\\" v${npm_package_version} && git push && git push --tags && cd - && zip -j dist/d3.zip -- LICENSE README.md API.md CHANGES.md dist/d3.js dist/d3.min.js\"};\nexport var devDependencies = {\"json2module\":\"0.0\",\"rimraf\":\"2\",\"rollup\":\"1\",\"rollup-plugin-ascii\":\"0.0\",\"rollup-plugin-node-resolve\":\"3\",\"rollup-plugin-terser\":\"5\",\"tape\":\"4\"};\nexport var dependencies = {\"d3-array\":\"1\",\"d3-axis\":\"1\",\"d3-brush\":\"1\",\"d3-chord\":\"1\",\"d3-collection\":\"1\",\"d3-color\":\"1\",\"d3-contour\":\"1\",\"d3-dispatch\":\"1\",\"d3-drag\":\"1\",\"d3-dsv\":\"1\",\"d3-ease\":\"1\",\"d3-fetch\":\"1\",\"d3-force\":\"1\",\"d3-format\":\"1\",\"d3-geo\":\"1\",\"d3-hierarchy\":\"1\",\"d3-interpolate\":\"1\",\"d3-path\":\"1\",\"d3-polygon\":\"1\",\"d3-quadtree\":\"1\",\"d3-random\":\"1\",\"d3-scale\":\"2\",\"d3-scale-chromatic\":\"1\",\"d3-selection\":\"1\",\"d3-shape\":\"1\",\"d3-time\":\"1\",\"d3-time-format\":\"2\",\"d3-timer\":\"1\",\"d3-transition\":\"1\",\"d3-voronoi\":\"1\",\"d3-zoom\":\"1\"};\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var 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}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n var n0 = values0.length,\n n1 = values1.length,\n values = new Array(n0 * n1),\n i0,\n i1,\n i,\n value0;\n\n if (reduce == null) reduce = pair;\n\n for (i0 = i = 0; i0 < n0; ++i0) {\n for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n values[i] = reduce(value0, values1[i1]);\n }\n }\n\n return values;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\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","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 start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - 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 slice = Array.prototype.slice;\n","var noop = {value: function() {}};\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","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = {},\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n } else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = keyPrefix + key.call(parent, data[i], i, data);\n if (node = nodeByKeyValue[keyValue]) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue[keyValue] = null;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n}\n\nexport default function(value, key) {\n if (!value) {\n data = new Array(this.size()), j = -1;\n this.each(function(d) { data[++j] = d; });\n return data;\n }\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = value.call(parent, parent && parent.__data__, j, parents),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n var nodes = new Array(this.size()), i = -1;\n this.each(function() { nodes[++i] = this; });\n return nodes;\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n var size = 0;\n this.each(function() { ++size; });\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n var element = document.documentElement;\n if (!(\"onmouseenter\" in element)) {\n filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n }\n}\n\nfunction filterContextListener(listener, index, group) {\n listener = contextListener(listener, index, group);\n return function(event) {\n var related = event.relatedTarget;\n if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n listener.call(this, event);\n }\n };\n}\n\nfunction contextListener(listener, index, group) {\n return function(event1) {\n var event0 = event; // Events can be reentrant (e.g., focus).\n event = event1;\n try {\n listener.call(this, this.__data__, index, group);\n } finally {\n event = event0;\n }\n };\n}\n\nfunction parseTypenames(typenames) {\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 return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, capture) {\n var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n return function(d, i, group) {\n var on = this.__on, o, listener = wrap(value, i, group);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.capture);\n this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, capture);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, capture) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n if (capture == null) capture = false;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n var event0 = event;\n event1.sourceEvent = event;\n event = event1;\n try {\n return listener.apply(that, args);\n } finally {\n event = event0;\n }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_join from \"./join\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\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","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","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(function(elapsed) {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n });\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n end: transition_end\n};\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","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n return defaultTiming.time = now(), defaultTiming;\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {customEvent, event, touch, mouse, 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\nfunction number1(e) {\n return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n return [number1(e[0]), number1(e[1])];\n}\n\nfunction toucher(identifier) {\n return function(target) {\n return touch(target, event.touches, identifier);\n };\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() {\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.selection) {\n group\n .on(\"start.brush\", function() { emitter(this, arguments).beforestart().start(); })\n .on(\"interrupt.brush end.brush\", function() { emitter(this, arguments).end(); })\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() {\n if (this.starting) this.starting = false, this.emit(\"start\");\n else this.emit(\"brush\");\n return this;\n },\n brush: function() {\n this.emit(\"brush\");\n return this;\n },\n end: function() {\n if (--this.active === 0) delete this.state.emitter, this.emit(\"end\");\n return this;\n },\n emit: function(type) {\n customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);\n }\n };\n\n function started() {\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 pointer = event.touches ? toucher(event.changedTouches[0].identifier) : mouse,\n point0 = pointer(that),\n point = point0,\n emit = emitter(that, arguments, true).beforestart();\n\n if (type === \"overlay\") {\n if (selection) moving = true;\n state.selection = selection = [\n [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],\n [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]\n ];\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 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 nopropagation();\n interrupt(that);\n redraw.call(that);\n emit.start();\n\n function moved() {\n var point1 = pointer(that);\n if (shifting && !lockX && !lockY) {\n if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;\n else lockX = true;\n }\n point = point1;\n moving = true;\n noevent();\n move();\n }\n\n function move() {\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 = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n break;\n }\n case MODE_HANDLE: {\n if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n break;\n }\n case MODE_CENTER: {\n if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));\n if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.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();\n }\n }\n\n function ended() {\n nopropagation();\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();\n }\n\n function keydowned() {\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();\n }\n\n function keyupped() {\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();\n }\n }\n\n function touchmoved() {\n emitter(this, arguments).moved();\n }\n\n function touchended() {\n emitter(this, arguments).ended();\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","export 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;\n","export var slice = Array.prototype.slice;\n","import {range} from \"d3-array\";\nimport {max, tau} from \"./math\";\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 var padAngle = 0,\n sortGroups = null,\n sortSubgroups = null,\n sortChords = null;\n\n function chord(matrix) {\n var n = matrix.length,\n groupSums = [],\n groupIndex = range(n),\n subgroupIndex = [],\n chords = [],\n groups = chords.groups = new Array(n),\n subgroups = new Array(n * n),\n k,\n x,\n x0,\n dx,\n i,\n j;\n\n // Compute the sum.\n k = 0, i = -1; while (++i < n) {\n x = 0, j = -1; while (++j < n) {\n x += matrix[i][j];\n }\n groupSums.push(x);\n subgroupIndex.push(range(n));\n k += x;\n }\n\n // Sort groups…\n if (sortGroups) groupIndex.sort(function(a, b) {\n return sortGroups(groupSums[a], groupSums[b]);\n });\n\n // Sort subgroups…\n if (sortSubgroups) subgroupIndex.forEach(function(d, i) {\n d.sort(function(a, b) {\n return sortSubgroups(matrix[i][a], matrix[i][b]);\n });\n });\n\n // Convert the sum to scaling factor for [0, 2pi].\n // TODO Allow start and end angle to be specified?\n // TODO Allow padding to be specified as percentage?\n k = max(0, tau - padAngle * n) / k;\n dx = k ? padAngle : tau / n;\n\n // Compute the start and end angle for each group and subgroup.\n // Note: Opera has a bug reordering object literal properties!\n x = 0, i = -1; while (++i < n) {\n x0 = x, j = -1; while (++j < n) {\n var di = groupIndex[i],\n dj = subgroupIndex[di][j],\n v = matrix[di][dj],\n a0 = x,\n a1 = x += v * k;\n subgroups[dj * n + di] = {\n index: di,\n subindex: dj,\n startAngle: a0,\n endAngle: a1,\n value: v\n };\n }\n groups[di] = {\n index: di,\n startAngle: x0,\n endAngle: x,\n value: groupSums[di]\n };\n x += dx;\n }\n\n // Generate chords for each (non-empty) subgroup-subgroup link.\n i = -1; while (++i < n) {\n j = i - 1; while (++j < n) {\n var source = subgroups[j * n + i],\n target = subgroups[i * n + j];\n if (source.value || target.value) {\n chords.push(source.value < target.value\n ? {source: target, target: source}\n : {source: source, target: target});\n }\n }\n }\n\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","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(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 toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport {cos, halfPi, sin} from \"./math\";\nimport {path} from \"d3-path\";\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\nexport default function() {\n var source = defaultSource,\n target = defaultTarget,\n radius = defaultRadius,\n startAngle = defaultStartAngle,\n endAngle = defaultEndAngle,\n context = null;\n\n function ribbon() {\n var buffer,\n argv = slice.call(arguments),\n s = source.apply(this, argv),\n t = target.apply(this, argv),\n sr = +radius.apply(this, (argv[0] = s, argv)),\n sa0 = startAngle.apply(this, argv) - halfPi,\n sa1 = endAngle.apply(this, argv) - halfPi,\n sx0 = sr * cos(sa0),\n sy0 = sr * sin(sa0),\n tr = +radius.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 context.moveTo(sx0, sy0);\n context.arc(0, 0, sr, sa0, sa1);\n if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?\n context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));\n context.arc(0, 0, tr, ta0, ta1);\n }\n context.quadraticCurveTo(0, 0, sx0, sy0);\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n ribbon.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : radius;\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.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","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n constructor: Map,\n has: function(key) {\n return (prefix + key) in this;\n },\n get: function(key) {\n return this[prefix + key];\n },\n set: function(key, value) {\n this[prefix + key] = value;\n return this;\n },\n remove: function(key) {\n var property = prefix + key;\n return property in this && delete this[property];\n },\n clear: function() {\n for (var property in this) if (property[0] === prefix) delete this[property];\n },\n keys: function() {\n var keys = [];\n for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n return keys;\n },\n values: function() {\n var values = [];\n for (var property in this) if (property[0] === prefix) values.push(this[property]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n return entries;\n },\n size: function() {\n var size = 0;\n for (var property in this) if (property[0] === prefix) ++size;\n return size;\n },\n empty: function() {\n for (var property in this) if (property[0] === prefix) return false;\n return true;\n },\n each: function(f) {\n for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n }\n};\n\nfunction map(object, f) {\n var map = new Map;\n\n // Copy constructor.\n if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n // Index array by numeric index or specified key function.\n else if (Array.isArray(object)) {\n var i = -1,\n n = object.length,\n o;\n\n if (f == null) while (++i < n) map.set(i, object[i]);\n else while (++i < n) map.set(f(o = object[i], i, object), o);\n }\n\n // Convert object to map.\n else if (object) for (var key in object) map.set(key, object[key]);\n\n return map;\n}\n\nexport default map;\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n constructor: Set,\n has: proto.has,\n add: function(value) {\n value += \"\";\n this[prefix + value] = value;\n return this;\n },\n remove: proto.remove,\n clear: proto.clear,\n values: proto.keys,\n size: proto.size,\n empty: proto.empty,\n each: proto.each\n};\n\nfunction set(object, f) {\n var set = new Set;\n\n // Copy constructor.\n if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n // Otherwise, assume it’s an array.\n else if (object) {\n var i = -1, n = object.length;\n if (f == null) while (++i < n) set.add(object[i]);\n else while (++i < n) set.add(f(object[i], i, object));\n }\n\n return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var slice = array.slice;\n","import {max, range, tickStep} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {blurX, blurY} from \"./blur\";\nimport constant from \"./constant\";\nimport contours from \"./contours\";\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 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n if (!(_0 >= 0) && !(_0 >= 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","export default function(d) {\n var x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","import {dispatch} from \"d3-dispatch\";\nimport {map} from \"d3-collection\";\nimport {timer} from \"d3-timer\";\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 = map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\");\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.each(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(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);\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.each(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 force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.remove(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","export default function() {\n return Math.random();\n}\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomNormal(source) {\n function randomNormal(mu, sigma) {\n var x, r;\n mu = mu == null ? 0 : +mu;\n sigma = sigma == null ? 1 : +sigma;\n return function() {\n var y;\n\n // If available, use the second previously-generated uniform random.\n if (x != null) y = x, x = null;\n\n // Otherwise, generate a new x and y.\n else do {\n x = source() * 2 - 1;\n y = source() * 2 - 1;\n r = x * x + y * y;\n } while (!r || r > 1);\n\n return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\n };\n }\n\n randomNormal.source = sourceRandomNormal;\n\n return randomNormal;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomUniform(source) {\n function randomUniform(min, max) {\n min = min == null ? 0 : +min;\n max = max == null ? 1 : +max;\n if (arguments.length === 1) max = min, min = 0;\n else max -= min;\n return function() {\n return source() * max + min;\n };\n }\n\n randomUniform.source = sourceRandomUniform;\n\n return randomUniform;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomIrwinHall(source) {\n function randomIrwinHall(n) {\n return function() {\n for (var sum = 0, i = 0; i < n; ++i) sum += source();\n return sum;\n };\n }\n\n randomIrwinHall.source = sourceRandomIrwinHall;\n\n return randomIrwinHall;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\nimport normal from \"./normal\";\n\nexport default (function sourceRandomLogNormal(source) {\n function randomLogNormal() {\n var randomNormal = normal.source(source).apply(this, arguments);\n return function() {\n return Math.exp(randomNormal());\n };\n }\n\n randomLogNormal.source = sourceRandomLogNormal;\n\n return randomLogNormal;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\nimport irwinHall from \"./irwinHall\";\n\nexport default (function sourceRandomBates(source) {\n function randomBates(n) {\n var randomIrwinHall = irwinHall.source(source)(n);\n return function() {\n return randomIrwinHall() / n;\n };\n }\n\n randomBates.source = sourceRandomBates;\n\n return randomBates;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomExponential(source) {\n function randomExponential(lambda) {\n return function() {\n return -Math.log(1 - source()) / lambda;\n };\n }\n\n randomExponential.source = sourceRandomExponential;\n\n return randomExponential;\n})(defaultSource);\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.interpolator(domain); break;\n default: this.interpolator(interpolator).domain(domain); break;\n }\n return this;\n}\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\nimport {initRange} from \"./init\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal() {\n var index = map(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = map();\n var i = -1, n = _.length, d, key;\n while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(domain) {\n var a = domain[0], b = domain[domain.length - 1], t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = map.call(_, number), clamp === identity || (clamp = clamper(domain)), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = slice.call(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? clamper(domain) : identity, scale) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous(transform, untransform) {\n return transformer()(transform, untransform);\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 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","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\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","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"],\n minus: \"-\"\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\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","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 \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": formatDecimal,\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return 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","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","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy, identity} from \"./continuous\";\nimport {initRange} from \"./init\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(identity, identity);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = function(date) {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval.js\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval.js\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nvar day = interval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nvar second = interval(function(date) {\n date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval.js\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","import interval from \"./interval.js\";\nimport {durationWeek} from \"./duration.js\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval.js\";\nimport {durationDay} from \"./duration.js\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval.js\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {bisector, tickStep} from \"d3-array\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport {map} from \"./array\";\nimport continuous, {copy, identity} from \"./continuous\";\nimport {initRange} from \"./init\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(identity, identity),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(map.call(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return initRange.apply(calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import interval from \"./interval.js\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval.js\";\nimport {durationHour} from \"./duration.js\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval.js\";\nimport {durationMinute} from \"./duration.js\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n : new Selection([selector == null ? [] : selector], root);\n}\n","function RedBlackTree() {\n this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n node.U = // parent node\n node.C = // color - true for red, false for black\n node.L = // left node\n node.R = // right node\n node.P = // previous node\n node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n constructor: RedBlackTree,\n\n insert: function(after, node) {\n var parent, grandpa, uncle;\n\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = RedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n RedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n RedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n RedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n\n var parent = node.U,\n sibling,\n left = node.L,\n right = node.R,\n next,\n red;\n\n if (!left) next = right;\n else if (!right) next = left;\n else next = RedBlackFirst(right);\n\n if (parent) {\n if (parent.L === node) parent.L = next;\n else parent.R = next;\n } else {\n this._ = next;\n }\n\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) { node.C = false; return; }\n\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n RedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n RedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n RedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if ((sibling.L && sibling.L.C)\n || (sibling.R && sibling.R.C)) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n RedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n RedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n\n if (node) node.C = false;\n }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n var p = node,\n q = node.R,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n var p = node,\n q = node.L,\n parent = p.U;\n\n if (parent) {\n if (parent.L === p) parent.L = q;\n else parent.R = q;\n } else {\n tree._ = q;\n }\n\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n var edge = [null, null],\n index = edges.push(edge) - 1;\n edge.left = left;\n edge.right = right;\n if (v0) setEdgeEnd(edge, left, right, v0);\n if (v1) setEdgeEnd(edge, right, left, v1);\n cells[left.index].halfedges.push(index);\n cells[right.index].halfedges.push(index);\n return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n var edge = [v0, v1];\n edge.left = left;\n return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n if (!edge[0] && !edge[1]) {\n edge[0] = vertex;\n edge.left = left;\n edge.right = right;\n } else if (edge.left === right) {\n edge[1] = vertex;\n } else {\n edge[0] = vertex;\n }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n var a = edge[0],\n b = edge[1],\n ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","'use strict';\n\n(function () {\n var out$ = typeof exports != 'undefined' && exports || typeof define != 'undefined' && {} || this || window;\n if (typeof define !== 'undefined') define('save-svg-as-png', [], function () {\n return out$;\n });\n out$.default = out$;\n\n var xmlNs = 'http://www.w3.org/2000/xmlns/';\n var xhtmlNs = 'http://www.w3.org/1999/xhtml';\n var svgNs = 'http://www.w3.org/2000/svg';\n var doctype = ']>';\n var urlRegex = /url\\([\"']?(.+?)[\"']?\\)/;\n var fontFormats = {\n woff2: 'font/woff2',\n woff: 'font/woff',\n otf: 'application/x-font-opentype',\n ttf: 'application/x-font-ttf',\n eot: 'application/vnd.ms-fontobject',\n sfnt: 'application/font-sfnt',\n svg: 'image/svg+xml'\n };\n\n var isElement = function isElement(obj) {\n return obj instanceof HTMLElement || obj instanceof SVGElement;\n };\n var requireDomNode = function requireDomNode(el) {\n if (!isElement(el)) throw new Error('an HTMLElement or SVGElement is required; got ' + el);\n };\n var requireDomNodePromise = function requireDomNodePromise(el) {\n return new Promise(function (resolve, reject) {\n if (isElement(el)) resolve(el);else reject(new Error('an HTMLElement or SVGElement is required; got ' + el));\n });\n };\n var isExternal = function isExternal(url) {\n return url && url.lastIndexOf('http', 0) === 0 && url.lastIndexOf(window.location.host) === -1;\n };\n\n var getFontMimeTypeFromUrl = function getFontMimeTypeFromUrl(fontUrl) {\n var formats = Object.keys(fontFormats).filter(function (extension) {\n return fontUrl.indexOf('.' + extension) > 0;\n }).map(function (extension) {\n return fontFormats[extension];\n });\n if (formats) return formats[0];\n console.error('Unknown font format for ' + fontUrl + '. Fonts may not be working correctly.');\n return 'application/octet-stream';\n };\n\n var arrayBufferToBase64 = function arrayBufferToBase64(buffer) {\n var binary = '';\n var bytes = new Uint8Array(buffer);\n for (var i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }return window.btoa(binary);\n };\n\n var getDimension = function getDimension(el, clone, dim) {\n var v = el.viewBox && el.viewBox.baseVal && el.viewBox.baseVal[dim] || clone.getAttribute(dim) !== null && !clone.getAttribute(dim).match(/%$/) && parseInt(clone.getAttribute(dim)) || el.getBoundingClientRect()[dim] || parseInt(clone.style[dim]) || parseInt(window.getComputedStyle(el).getPropertyValue(dim));\n return typeof v === 'undefined' || v === null || isNaN(parseFloat(v)) ? 0 : v;\n };\n\n var getDimensions = function getDimensions(el, clone, width, height) {\n if (el.tagName === 'svg') return {\n width: width || getDimension(el, clone, 'width'),\n height: height || getDimension(el, clone, 'height')\n };else if (el.getBBox) {\n var _el$getBBox = el.getBBox(),\n x = _el$getBBox.x,\n y = _el$getBBox.y,\n _width = _el$getBBox.width,\n _height = _el$getBBox.height;\n\n return {\n width: x + _width,\n height: y + _height\n };\n }\n };\n\n var reEncode = function reEncode(data) {\n return decodeURIComponent(encodeURIComponent(data).replace(/%([0-9A-F]{2})/g, function (match, p1) {\n var c = String.fromCharCode('0x' + p1);\n return c === '%' ? '%25' : c;\n }));\n };\n\n var uriToBlob = function uriToBlob(uri) {\n var byteString = window.atob(uri.split(',')[1]);\n var mimeString = uri.split(',')[0].split(':')[1].split(';')[0];\n var buffer = new ArrayBuffer(byteString.length);\n var intArray = new Uint8Array(buffer);\n for (var i = 0; i < byteString.length; i++) {\n intArray[i] = byteString.charCodeAt(i);\n }\n return new Blob([buffer], { type: mimeString });\n };\n\n var query = function query(el, selector) {\n if (!selector) return;\n try {\n return el.querySelector(selector) || el.parentNode && el.parentNode.querySelector(selector);\n } catch (err) {\n console.warn('Invalid CSS selector \"' + selector + '\"', err);\n }\n };\n\n var detectCssFont = function detectCssFont(rule, href) {\n // Match CSS font-face rules to external links.\n // @font-face {\n // src: local('Abel'), url(https://fonts.gstatic.com/s/abel/v6/UzN-iejR1VoXU2Oc-7LsbvesZW2xOQ-xsNqO47m55DA.woff2);\n // }\n var match = rule.cssText.match(urlRegex);\n var url = match && match[1] || '';\n if (!url || url.match(/^data:/) || url === 'about:blank') return;\n var fullUrl = url.startsWith('../') ? href + '/../' + url : url.startsWith('./') ? href + '/.' + url : url;\n return {\n text: rule.cssText,\n format: getFontMimeTypeFromUrl(fullUrl),\n url: fullUrl\n };\n };\n\n var inlineImages = function inlineImages(el) {\n return Promise.all(Array.from(el.querySelectorAll('image')).map(function (image) {\n var href = image.getAttributeNS('http://www.w3.org/1999/xlink', 'href') || image.getAttribute('href');\n if (!href) return Promise.resolve(null);\n if (isExternal(href)) {\n href += (href.indexOf('?') === -1 ? '?' : '&') + 't=' + new Date().valueOf();\n }\n return new Promise(function (resolve, reject) {\n var canvas = document.createElement('canvas');\n var img = new Image();\n img.crossOrigin = 'anonymous';\n img.src = href;\n img.onerror = function () {\n return reject(new Error('Could not load ' + href));\n };\n img.onload = function () {\n canvas.width = img.width;\n canvas.height = img.height;\n canvas.getContext('2d').drawImage(img, 0, 0);\n image.setAttributeNS('http://www.w3.org/1999/xlink', 'href', canvas.toDataURL('image/png'));\n resolve(true);\n };\n });\n }));\n };\n\n var cachedFonts = {};\n var inlineFonts = function inlineFonts(fonts) {\n return Promise.all(fonts.map(function (font) {\n return new Promise(function (resolve, reject) {\n if (cachedFonts[font.url]) return resolve(cachedFonts[font.url]);\n\n var req = new XMLHttpRequest();\n req.addEventListener('load', function () {\n // TODO: it may also be worth it to wait until fonts are fully loaded before\n // attempting to rasterize them. (e.g. use https://developer.mozilla.org/en-US/docs/Web/API/FontFaceSet)\n var fontInBase64 = arrayBufferToBase64(req.response);\n var fontUri = font.text.replace(urlRegex, 'url(\"data:' + font.format + ';base64,' + fontInBase64 + '\")') + '\\n';\n cachedFonts[font.url] = fontUri;\n resolve(fontUri);\n });\n req.addEventListener('error', function (e) {\n console.warn('Failed to load font from: ' + font.url, e);\n cachedFonts[font.url] = null;\n resolve(null);\n });\n req.addEventListener('abort', function (e) {\n console.warn('Aborted loading font from: ' + font.url, e);\n resolve(null);\n });\n req.open('GET', font.url);\n req.responseType = 'arraybuffer';\n req.send();\n });\n })).then(function (fontCss) {\n return fontCss.filter(function (x) {\n return x;\n }).join('');\n });\n };\n\n var cachedRules = null;\n var styleSheetRules = function styleSheetRules() {\n if (cachedRules) return cachedRules;\n return cachedRules = Array.from(document.styleSheets).map(function (sheet) {\n try {\n return { rules: sheet.cssRules, href: sheet.href };\n } catch (e) {\n console.warn('Stylesheet could not be loaded: ' + sheet.href, e);\n return {};\n }\n });\n };\n\n var inlineCss = function inlineCss(el, options) {\n var _ref = options || {},\n selectorRemap = _ref.selectorRemap,\n modifyStyle = _ref.modifyStyle,\n modifyCss = _ref.modifyCss,\n fonts = _ref.fonts,\n excludeUnusedCss = _ref.excludeUnusedCss;\n\n var generateCss = modifyCss || function (selector, properties) {\n var sel = selectorRemap ? selectorRemap(selector) : selector;\n var props = modifyStyle ? modifyStyle(properties) : properties;\n return sel + '{' + props + '}\\n';\n };\n var css = [];\n var detectFonts = typeof fonts === 'undefined';\n var fontList = fonts || [];\n styleSheetRules().forEach(function (_ref2) {\n var rules = _ref2.rules,\n href = _ref2.href;\n\n if (!rules) return;\n Array.from(rules).forEach(function (rule) {\n if (typeof rule.style != 'undefined') {\n if (query(el, rule.selectorText)) css.push(generateCss(rule.selectorText, rule.style.cssText));else if (detectFonts && rule.cssText.match(/^@font-face/)) {\n var font = detectCssFont(rule, href);\n if (font) fontList.push(font);\n } else if (!excludeUnusedCss) {\n css.push(rule.cssText);\n }\n }\n });\n });\n\n return inlineFonts(fontList).then(function (fontCss) {\n return css.join('\\n') + fontCss;\n });\n };\n\n var downloadOptions = function downloadOptions() {\n if (!navigator.msSaveOrOpenBlob && !('download' in document.createElement('a'))) {\n return { popup: window.open() };\n }\n };\n\n out$.prepareSvg = function (el, options, done) {\n requireDomNode(el);\n\n var _ref3 = options || {},\n _ref3$left = _ref3.left,\n left = _ref3$left === undefined ? 0 : _ref3$left,\n _ref3$top = _ref3.top,\n top = _ref3$top === undefined ? 0 : _ref3$top,\n w = _ref3.width,\n h = _ref3.height,\n _ref3$scale = _ref3.scale,\n scale = _ref3$scale === undefined ? 1 : _ref3$scale,\n _ref3$responsive = _ref3.responsive,\n responsive = _ref3$responsive === undefined ? false : _ref3$responsive,\n _ref3$excludeCss = _ref3.excludeCss,\n excludeCss = _ref3$excludeCss === undefined ? false : _ref3$excludeCss;\n\n return inlineImages(el).then(function () {\n var clone = el.cloneNode(true);\n clone.style.backgroundColor = (options || {}).backgroundColor || el.style.backgroundColor;\n\n var _getDimensions = getDimensions(el, clone, w, h),\n width = _getDimensions.width,\n height = _getDimensions.height;\n\n if (el.tagName !== 'svg') {\n if (el.getBBox) {\n if (clone.getAttribute('transform') != null) {\n clone.setAttribute('transform', clone.getAttribute('transform').replace(/translate\\(.*?\\)/, ''));\n }\n var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.appendChild(clone);\n clone = svg;\n } else {\n console.error('Attempted to render non-SVG element', el);\n return;\n }\n }\n\n clone.setAttribute('version', '1.1');\n clone.setAttribute('viewBox', [left, top, width, height].join(' '));\n if (!clone.getAttribute('xmlns')) clone.setAttributeNS(xmlNs, 'xmlns', svgNs);\n if (!clone.getAttribute('xmlns:xlink')) clone.setAttributeNS(xmlNs, 'xmlns:xlink', 'http://www.w3.org/1999/xlink');\n\n if (responsive) {\n clone.removeAttribute('width');\n clone.removeAttribute('height');\n clone.setAttribute('preserveAspectRatio', 'xMinYMin meet');\n } else {\n clone.setAttribute('width', width * scale);\n clone.setAttribute('height', height * scale);\n }\n\n Array.from(clone.querySelectorAll('foreignObject > *')).forEach(function (foreignObject) {\n foreignObject.setAttributeNS(xmlNs, 'xmlns', foreignObject.tagName === 'svg' ? svgNs : xhtmlNs);\n });\n\n if (excludeCss) {\n var outer = document.createElement('div');\n outer.appendChild(clone);\n var src = outer.innerHTML;\n if (typeof done === 'function') done(src, width, height);else return { src: src, width: width, height: height };\n } else {\n return inlineCss(el, options).then(function (css) {\n var style = document.createElement('style');\n style.setAttribute('type', 'text/css');\n style.innerHTML = '';\n\n var defs = document.createElement('defs');\n defs.appendChild(style);\n clone.insertBefore(defs, clone.firstChild);\n\n var outer = document.createElement('div');\n outer.appendChild(clone);\n var src = outer.innerHTML.replace(/NS\\d+:href/gi, 'xmlns:xlink=\"http://www.w3.org/1999/xlink\" xlink:href');\n\n if (typeof done === 'function') done(src, width, height);else return { src: src, width: width, height: height };\n });\n }\n });\n };\n\n out$.svgAsDataUri = function (el, options, done) {\n requireDomNode(el);\n return out$.prepareSvg(el, options).then(function (_ref4) {\n var src = _ref4.src,\n width = _ref4.width,\n height = _ref4.height;\n\n var svgXml = 'data:image/svg+xml;base64,' + window.btoa(reEncode(doctype + src));\n if (typeof done === 'function') {\n done(svgXml, width, height);\n }\n return svgXml;\n });\n };\n\n out$.svgAsPngUri = function (el, options, done) {\n requireDomNode(el);\n\n var _ref5 = options || {},\n _ref5$encoderType = _ref5.encoderType,\n encoderType = _ref5$encoderType === undefined ? 'image/png' : _ref5$encoderType,\n _ref5$encoderOptions = _ref5.encoderOptions,\n encoderOptions = _ref5$encoderOptions === undefined ? 0.8 : _ref5$encoderOptions,\n canvg = _ref5.canvg;\n\n var convertToPng = function convertToPng(_ref6) {\n var src = _ref6.src,\n width = _ref6.width,\n height = _ref6.height;\n\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var pixelRatio = window.devicePixelRatio || 1;\n\n canvas.width = width * pixelRatio;\n canvas.height = height * pixelRatio;\n canvas.style.width = canvas.width + 'px';\n canvas.style.height = canvas.height + 'px';\n context.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n\n if (canvg) canvg(canvas, src);else context.drawImage(src, 0, 0);\n\n var png = void 0;\n try {\n png = canvas.toDataURL(encoderType, encoderOptions);\n } catch (e) {\n if (typeof SecurityError !== 'undefined' && e instanceof SecurityError || e.name === 'SecurityError') {\n console.error('Rendered SVG images cannot be downloaded in this browser.');\n return;\n } else throw e;\n }\n if (typeof done === 'function') done(png, canvas.width, canvas.height);\n return Promise.resolve(png);\n };\n\n if (canvg) return out$.prepareSvg(el, options).then(convertToPng);else return out$.svgAsDataUri(el, options).then(function (uri) {\n return new Promise(function (resolve, reject) {\n var image = new Image();\n image.onload = function () {\n return resolve(convertToPng({\n src: image,\n width: image.width,\n height: image.height\n }));\n };\n image.onerror = function () {\n reject('There was an error loading the data URI as an image on the following SVG\\n' + window.atob(uri.slice(26)) + 'Open the following link to see browser\\'s diagnosis\\n' + uri);\n };\n image.src = uri;\n });\n });\n };\n\n out$.download = function (name, uri, options) {\n if (navigator.msSaveOrOpenBlob) navigator.msSaveOrOpenBlob(uriToBlob(uri), name);else {\n var saveLink = document.createElement('a');\n if ('download' in saveLink) {\n saveLink.download = name;\n saveLink.style.display = 'none';\n document.body.appendChild(saveLink);\n try {\n var blob = uriToBlob(uri);\n var url = URL.createObjectURL(blob);\n saveLink.href = url;\n saveLink.onclick = function () {\n return requestAnimationFrame(function () {\n return URL.revokeObjectURL(url);\n });\n };\n } catch (e) {\n console.error(e);\n console.warn('Error while getting object URL. Falling back to string URL.');\n saveLink.href = uri;\n }\n saveLink.click();\n document.body.removeChild(saveLink);\n } else if (options && options.popup) {\n options.popup.document.title = name;\n options.popup.location.replace(uri);\n }\n }\n };\n\n out$.saveSvg = function (el, name, options) {\n var downloadOpts = downloadOptions(); // don't inline, can't be async\n return requireDomNodePromise(el).then(function (el) {\n return out$.svgAsDataUri(el, options || {});\n }).then(function (uri) {\n return out$.download(name, uri, downloadOpts);\n });\n };\n\n out$.saveSvgAsPng = function (el, name, options) {\n var downloadOpts = downloadOptions(); // don't inline, can't be async\n return requireDomNodePromise(el).then(function (el) {\n return out$.svgAsPngUri(el, options || {});\n }).then(function (uri) {\n return out$.download(name, uri, downloadOpts);\n });\n };\n})();","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Correlation.vue?vue&type=style&index=0&id=952e83fe&lang=scss&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{style:(_vm.correlationStyle),on:{\"mousedown\":_vm.startDrag,\"mousemove\":_vm.doDrag,\"mouseup\":_vm.stopDrag}},[_c('div',{staticClass:\"box-head\"},[_vm._v(\" Allosteric Correlations \")]),_c('div',{staticClass:\"box-tool\"},[_c('a',{attrs:{\"href\":_vm.$store.state.host+\"/dokhlab/actions/ohm/result?id=\" + (_vm.task.id) + \"&file=corr&as=\" + (_vm.task.id) + \"-correlation.txt\"}},[_vm._v(_vm._s(_vm.task.id)+\"-correlation.txt\")]),_vm._v(\" \"),(_vm.matrixReady)?_c('a',{staticStyle:{\"cursor\":\"pointer\"},on:{\"click\":_vm.downloadPng}},[_vm._v(\" correlation-matrix.png\")]):_vm._e()]),_c('div',{ref:\"correlationContainer\",style:(_vm.correlationContainerStyle)},[(_vm.hideMatrix)?_c('div',[_c('el-button',{attrs:{\"type\":\"text\"},nativeOn:{\"click\":function($event){return _vm.showMatrix.apply(null, arguments)}}},[_vm._v(\"View Correlation\")])],1):_vm._e(),(!_vm.hideMatrix && !_vm.matrixReady)?_c('div',[_vm._v(\" Loading (This may take a few minutes) \"),_c('i',{staticClass:\"el-icon-loading\"})]):_vm._e(),(!_vm.hideMatrix && _vm.$store.state.task.results.ind.length>1000)?_c('div',{staticStyle:{\"padding\":\"10px\"}},[_vm._v(\" As the pdb file has more than 1000 residues, we suggest you to download the '\"),_c('a',{attrs:{\"href\":_vm.$store.state.host+\"/dokhlab/actions/ohm/result?id=\" + (_vm.task.id) + \"&file=corr&as=\" + (_vm.task.id) + \"-correlation.txt\"}},[_vm._v(\"txt\")]),_vm._v(\"' file of the correlation matrix and plot the correlation matrix in the local machine. We also provide the standalone version of Ohm for this type of analysis: \"),_c('a',{attrs:{\"href\":\"https://bitbucket.org/dokhlab/ohm\",\"target\":\"_blank\"}},[_vm._v(\"Ohm\")]),_vm._v(\". \")]):_vm._e(),(_vm.matrixReady)?_c('div',[_c('b',[_vm._v(\"Sort\")]),_vm._m(0)]):_vm._e(),_c('div',{style:(_vm.correlationMatrixStyle),attrs:{\"id\":\"correlation-matrix\"}})]),_c('div',{style:(_vm.popupStyle),domProps:{\"textContent\":_vm._s(_vm.popupText)}})])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('select',{attrs:{\"id\":\"correlation-order\"}},[_c('option',{attrs:{\"value\":\"sequence\"}},[_vm._v(\"by Sequence\")]),_c('option',{attrs:{\"value\":\"aci\"}},[_vm._v(\"by ACI\")])])}]\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Correlation.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Correlation.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Correlation.vue?vue&type=template&id=952e83fe&scoped=true&\"\nimport script from \"./Correlation.vue?vue&type=script&lang=js&\"\nexport * from \"./Correlation.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Correlation.vue?vue&type=style&index=0&id=952e83fe&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"952e83fe\",\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}