{"version":3,"sources":["webpack:////build/source/node_modules/d3-path/src/index.js","webpack:////build/source/node_modules/d3-selection/src/matcher.js","webpack:////build/source/node_modules/d3-selection/src/selector.js","webpack:////build/source/node_modules/d3-selection/src/selection/style.js","webpack:////build/source/node_modules/d3-axis/src/array.js","webpack:////build/source/node_modules/d3-dispatch/src/dispatch.js","webpack:////build/source/node_modules/d3-color/src/define.js","webpack:////build/source/node_modules/d3-color/src/color.js","webpack:////build/source/node_modules/d3-interpolate/src/basis.js","webpack:////build/source/node_modules/d3-interpolate/src/constant.js","webpack:////build/source/node_modules/d3-interpolate/src/color.js","webpack:////build/source/node_modules/d3-interpolate/src/rgb.js","webpack:////build/source/node_modules/d3-interpolate/src/basisClosed.js","webpack:////build/source/node_modules/d3-interpolate/src/date.js","webpack:////build/source/node_modules/d3-interpolate/src/number.js","webpack:////build/source/node_modules/d3-interpolate/src/string.js","webpack:////build/source/node_modules/d3-timer/src/timer.js","webpack:////build/source/node_modules/d3-timer/src/timeout.js","webpack:////build/source/node_modules/d3-transition/src/transition/schedule.js","webpack:////build/source/node_modules/d3-transition/src/interrupt.js","webpack:////build/source/node_modules/d3-interpolate/src/transform/parse.js","webpack:////build/source/node_modules/d3-interpolate/src/transform/decompose.js","webpack:////build/source/node_modules/d3-interpolate/src/transform/index.js","webpack:////build/source/node_modules/d3-transition/src/transition/tween.js","webpack:////build/source/node_modules/d3-transition/src/transition/interpolate.js","webpack:////build/source/node_modules/d3-transition/src/transition/attr.js","webpack:////build/source/node_modules/d3-transition/src/transition/attrTween.js","webpack:////build/source/node_modules/d3-transition/src/transition/delay.js","webpack:////build/source/node_modules/d3-transition/src/transition/duration.js","webpack:////build/source/node_modules/d3-transition/src/transition/ease.js","webpack:////build/source/node_modules/d3-transition/src/transition/on.js","webpack:////build/source/node_modules/d3-transition/src/transition/remove.js","webpack:////build/source/node_modules/d3-transition/src/transition/selection.js","webpack:////build/source/node_modules/d3-transition/src/transition/style.js","webpack:////build/source/node_modules/d3-transition/src/transition/styleTween.js","webpack:////build/source/node_modules/d3-transition/src/transition/textTween.js","webpack:////build/source/node_modules/d3-transition/src/transition/index.js","webpack:////build/source/node_modules/d3-transition/src/transition/select.js","webpack:////build/source/node_modules/d3-transition/src/transition/selectAll.js","webpack:////build/source/node_modules/d3-transition/src/transition/filter.js","webpack:////build/source/node_modules/d3-transition/src/transition/merge.js","webpack:////build/source/node_modules/d3-transition/src/transition/transition.js","webpack:////build/source/node_modules/d3-transition/src/transition/text.js","webpack:////build/source/node_modules/d3-transition/src/transition/end.js","webpack:////build/source/node_modules/d3-transition/src/selection/transition.js","webpack:////build/source/node_modules/d3-ease/src/cubic.js","webpack:////build/source/node_modules/d3-transition/src/selection/index.js","webpack:////build/source/node_modules/d3-transition/src/selection/interrupt.js","webpack:////build/source/node_modules/d3-brush/src/brush.js","webpack:////build/source/node_modules/d3-chord/src/math.js","webpack:////build/source/node_modules/d3-chord/src/array.js","webpack:////build/source/node_modules/d3-collection/src/map.js","webpack:////build/source/node_modules/d3-collection/src/set.js","webpack:////build/source/node_modules/d3-contour/src/array.js","webpack:////build/source/node_modules/d3-quadtree/src/add.js","webpack:////build/source/node_modules/d3-quadtree/src/cover.js","webpack:////build/source/node_modules/d3-quadtree/src/quad.js","webpack:////build/source/node_modules/d3-quadtree/src/x.js","webpack:////build/source/node_modules/d3-quadtree/src/y.js","webpack:////build/source/node_modules/d3-quadtree/src/quadtree.js","webpack:////build/source/node_modules/d3-quadtree/src/data.js","webpack:////build/source/node_modules/d3-quadtree/src/extent.js","webpack:////build/source/node_modules/d3-quadtree/src/find.js","webpack:////build/source/node_modules/d3-quadtree/src/remove.js","webpack:////build/source/node_modules/d3-quadtree/src/root.js","webpack:////build/source/node_modules/d3-quadtree/src/size.js","webpack:////build/source/node_modules/d3-quadtree/src/visit.js","webpack:////build/source/node_modules/d3-quadtree/src/visitAfter.js","webpack:////build/source/node_modules/d3-force/src/simulation.js","webpack:////build/source/node_modules/d3-random/src/defaultSource.js","webpack:////build/source/node_modules/d3-random/src/normal.js","webpack:////build/source/node_modules/d3-random/src/uniform.js","webpack:////build/source/node_modules/d3-random/src/irwinHall.js","webpack:////build/source/node_modules/d3-random/src/logNormal.js","webpack:////build/source/node_modules/d3-random/src/bates.js","webpack:////build/source/node_modules/d3-random/src/exponential.js","webpack:////build/source/node_modules/d3-scale/src/array.js","webpack:////build/source/node_modules/d3-format/src/formatSpecifier.js","webpack:////build/source/node_modules/d3-format/src/formatDecimal.js","webpack:////build/source/node_modules/d3-format/src/exponent.js","webpack:////build/source/node_modules/d3-format/src/formatPrefixAuto.js","webpack:////build/source/node_modules/d3-format/src/defaultLocale.js","webpack:////build/source/node_modules/d3-format/src/formatRounded.js","webpack:////build/source/node_modules/d3-format/src/formatTypes.js","webpack:////build/source/node_modules/d3-format/src/identity.js","webpack:////build/source/node_modules/d3-format/src/locale.js","webpack:////build/source/node_modules/d3-format/src/formatGroup.js","webpack:////build/source/node_modules/d3-format/src/formatNumerals.js","webpack:////build/source/node_modules/d3-format/src/formatTrim.js","webpack:////build/source/node_modules/d3-time/src/interval.js","webpack:////build/source/node_modules/d3-time/src/year.js","webpack:////build/source/node_modules/d3-time/src/month.js","webpack:////build/source/node_modules/d3-time/src/week.js","webpack:////build/source/node_modules/d3-time/src/duration.js","webpack:////build/source/node_modules/d3-time/src/day.js","webpack:////build/source/node_modules/d3-time/src/hour.js","webpack:////build/source/node_modules/d3-time/src/minute.js","webpack:////build/source/node_modules/d3-time/src/second.js","webpack:////build/source/node_modules/d3-time/src/millisecond.js","webpack:////build/source/node_modules/d3-time/src/utcWeek.js","webpack:////build/source/node_modules/d3-time/src/utcDay.js","webpack:////build/source/node_modules/d3-time/src/utcYear.js","webpack:////build/source/node_modules/d3-time-format/src/locale.js","webpack:////build/source/node_modules/d3-time-format/src/defaultLocale.js","webpack:////build/source/node_modules/d3-scale/src/time.js","webpack:////build/source/node_modules/d3-time/src/utcMonth.js","webpack:////build/source/node_modules/d3-time/src/utcHour.js","webpack:////build/source/node_modules/d3-time/src/utcMinute.js","webpack:////build/source/node_modules/d3-voronoi/src/RedBlackTree.js","webpack:////build/source/node_modules/d3-voronoi/src/Edge.js","webpack:////build/source/node_modules/d3-voronoi/src/Cell.js","webpack:////build/source/node_modules/d3-voronoi/src/Circle.js","webpack:////build/source/node_modules/d3-voronoi/src/Beach.js","webpack:////build/source/node_modules/d3-voronoi/src/Diagram.js","webpack:////build/source/node_modules/d3-interpolate/src/zoom.js","webpack:////build/source/node_modules/d3-zoom/src/transform.js","webpack:////build/source/node_modules/d3-selection/src/selection/sparse.js","webpack:////build/source/node_modules/d3-selection/src/selection/enter.js","webpack:////build/source/node_modules/d3-selection/src/selection/data.js","webpack:////build/source/node_modules/d3-selection/src/selection/sort.js","webpack:////build/source/node_modules/d3-selection/src/selection/call.js","webpack:////build/source/node_modules/d3-selection/src/selection/attr.js","webpack:////build/source/node_modules/d3-selection/src/selection/property.js","webpack:////build/source/node_modules/d3-selection/src/selection/classed.js","webpack:////build/source/node_modules/d3-selection/src/selection/text.js","webpack:////build/source/node_modules/d3-selection/src/selection/html.js","webpack:////build/source/node_modules/d3-selection/src/selection/raise.js","webpack:////build/source/node_modules/d3-selection/src/selection/lower.js","webpack:////build/source/node_modules/d3-selection/src/creator.js","webpack:////build/source/node_modules/d3-selection/src/selection/insert.js","webpack:////build/source/node_modules/d3-selection/src/selection/remove.js","webpack:////build/source/node_modules/d3-selection/src/selection/clone.js","webpack:////build/source/node_modules/d3-selection/src/selection/dispatch.js","webpack:////build/source/node_modules/d3-selection/src/selection/index.js","webpack:////build/source/node_modules/d3-selection/src/selection/select.js","webpack:////build/source/node_modules/d3-selection/src/selection/selectAll.js","webpack:////build/source/node_modules/d3-selection/src/selection/filter.js","webpack:////build/source/node_modules/d3-selection/src/constant.js","webpack:////build/source/node_modules/d3-selection/src/selection/exit.js","webpack:////build/source/node_modules/d3-selection/src/selection/join.js","webpack:////build/source/node_modules/d3-selection/src/selection/merge.js","webpack:////build/source/node_modules/d3-selection/src/selection/order.js","webpack:////build/source/node_modules/d3-selection/src/selection/nodes.js","webpack:////build/source/node_modules/d3-selection/src/selection/node.js","webpack:////build/source/node_modules/d3-selection/src/selection/size.js","webpack:////build/source/node_modules/d3-selection/src/selection/empty.js","webpack:////build/source/node_modules/d3-selection/src/selection/each.js","webpack:////build/source/node_modules/d3-selection/src/selection/append.js","webpack:////build/source/node_modules/d3-selection/src/selection/datum.js","webpack:////build/source/node_modules/d3-selection/src/namespace.js","webpack:////build/source/node_modules/core-js/internals/regexp-flags.js","webpack:////build/source/node_modules/@gitlab/ui/dist/components/regions/empty_state/empty_state.js","webpack:////build/source/node_modules/d3-selection/src/namespaces.js","webpack:////build/source/node_modules/d3-selection/src/window.js","webpack:////build/source/node_modules/core-js/modules/es.regexp.flags.js","webpack:////build/source/node_modules/@gitlab/ui/dist/components/base/avatar_link/avatar_link.js","webpack:////build/source/node_modules/d3-selection/src/select.js","webpack:////build/source/node_modules/d3-selection/src/selectorAll.js","webpack:////build/source/node_modules/d3-selection/src/selection/on.js"],"names":["this","matches","selector","none","querySelector","styleRemove","name","style","removeProperty","styleConstant","value","priority","setProperty","styleFunction","v","apply","arguments","styleValue","node","getPropertyValue","getComputedStyle","length","each","Array","prototype","slice","noop","dispatch","t","i","n","_","test","Error","Dispatch","parseTypenames","typenames","types","trim","split","map","indexOf","hasOwnProperty","type","get","c","set","callback","concat","push","constructor","on","typename","T","copy","call","that","args","factory","extend","parent","definition","Object","create","key","Color","reI","reN","reP","reHex","reRgbInteger","RegExp","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","format","m","l","toLowerCase","exec","parseInt","rgbn","Rgb","rgba","hsla","NaN","r","g","b","a","rgbConvert","o","opacity","rgb_formatHex","hex","rgb_formatRgb","isNaN","Math","max","min","round","toString","h","s","Hsl","hslConvert","hsl2rgb","m1","m2","basis","t1","v0","v1","v2","v3","t2","t3","define","channels","assign","displayable","formatHsl","brighter","k","pow","darker","x","linear","d","gamma","y","nogamma","exponential","constant","color","start","end","rgbGamma","rgbSpline","spline","colors","values","floor","reA","reB","source","taskHead","taskTail","am","bm","bs","bi","lastIndex","q","index","one","join","timeout","clockLast","clockNow","clockSkew","clock","performance","now","Date","setFrame","window","requestAnimationFrame","bind","f","setTimeout","clearNow","Timer","_call","_time","_next","timer","delay","time","restart","wake","e","timerFlush","t0","Infinity","sleep","nap","poke","clearTimeout","clearInterval","setInterval","TypeError","stop","elapsed","emptyOn","emptyTween","schedules","__transition","id","self","tween","j","state","__data__","group","tick","duration","ease","timing","init","schedule","cssNode","cssRoot","cssView","svgNode","active","empty","degrees","PI","translateX","translateY","rotate","skewX","scaleX","scaleY","sqrt","atan2","atan","interpolateTransform","parse","pxComma","pxParen","degParen","pop","xa","ya","xb","yb","translate","scale","interpolateTransformCss","document","createElement","documentElement","defaultView","transform","appendChild","removeChild","decompose","interpolateTransformSvg","createElementNS","setAttribute","baseVal","consolidate","matrix","tweenRemove","tween0","tween1","splice","tweenFunction","tweenValue","transition","_id","attrRemove","removeAttribute","attrRemoveNS","fullname","removeAttributeNS","space","local","attrConstant","interpolate","value1","string00","interpolate0","string1","string0","getAttribute","attrConstantNS","getAttributeNS","attrFunction","string10","attrFunctionNS","attrInterpolate","attrInterpolateNS","setAttributeNS","attrTweenNS","i0","_value","attrTween","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","onFunction","listener","on0","on1","sit","every","Selection","styleInterpolate","styleTween","textInterpolate","textContent","textTween","Transition","groups","parents","_groups","_parents","_name","newId","selection_prototype","select","subgroups","subnode","subgroup","selectAll","selectorAll","child","children","inherit","filter","match","matcher","merge","groups0","groups1","m0","merges","group0","group1","selection","id0","id1","nodes","size","attr","namespace","styleNull","listener0","remove","event","undefined","styleMaybeRemove","text","textFunction","textConstant","parentNode","Promise","resolve","reject","cancel","interrupt","defaultTiming","number1","number2","cos","sin","Map","object","isArray","has","property","clear","keys","entries","Set","proto","add","tree","xm","ym","xp","yp","right","bottom","_root","leaf","data","x0","_x0","y0","_y0","x1","_x1","y1","_y1","_x","_y","next","quadtree","Quadtree","addAll","leaf_copy","treeProto","target","cover","xz","yz","z","visit","extent","find","x2","y2","x3","y3","quads","radius","dx","dy","d2","retainer","previous","removeAll","root","visitAfter","random","randomUniform","sourceRandomUniform","randomNormal","mu","sigma","log","sourceRandomNormal","randomLogNormal","normal","exp","sourceRandomLogNormal","randomIrwinHall","sum","sourceRandomIrwinHall","randomBates","irwinHall","sourceRandomBates","randomExponential","lambda","sourceRandomExponential","re","formatSpecifier","specifier","FormatSpecifier","fill","align","sign","symbol","zero","width","comma","precision","formatDecimalParts","p","toExponential","coefficient","prefixExponent","abs","exponent","toFixed","toLocaleString","replace","toPrecision","formatRounded","toUpperCase","prefixes","locale","grouping","thousands","Number","substring","reverse","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","String","percent","minus","nan","newFormat","formatTypes","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","out","i1","formatTrim","charCodeAt","padding","formatPrefix","newInterval","floori","offseti","count","field","interval","date","ceil","d0","d1","offset","step","range","setTime","isFinite","setMonth","setHours","setFullYear","getFullYear","setDate","getMonth","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","pads","numberRe","percentRe","requoteRe","pad","string","requote","formatRe","names","formatLookup","parseWeekdayNumberSunday","w","parseWeekdayNumberMonday","u","parseWeekNumberSunday","U","parseWeekNumberISO","V","parseWeekNumberMonday","W","parseFullYear","parseYear","parseZone","Z","parseQuarter","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","Q","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","day","formatWeekNumberSunday","dISO","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYearISO","formatFullYear","formatFullYearISO","formatZone","formatUTCDayOfMonth","formatUTCHour24","getUTCHours","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","getUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","getUTCMonth","formatUTCMinutes","getUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","dow","formatUTCWeekNumberSunday","UTCdISO","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCYearISO","formatUTCFullYear","formatUTCFullYearISO","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_weekdays","days","locale_shortWeekdays","shortDays","locale_months","months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","utcFormats","parses","parseSpecifier","charAt","newParse","week","X","utcFormat","utcParse","formatLocale","utcMonth","utcHour","setUTCMinutes","utcMinute","setUTCSeconds","RedBlackTree","RedBlackNode","C","R","P","N","RedBlackRotateLeft","RedBlackRotateRight","RedBlackFirst","insert","after","grandpa","uncle","sibling","left","createEdge","edge","setEdgeEnd","cells","halfedges","createBorderEdge","vertex","clipEdge","ax","ay","connectEdge","fm","fb","lx","ly","rx","ry","fx","fy","cellHalfedgeAngle","cell","site","va","vb","cellHalfedgeStart","cellHalfedgeEnd","firstCircle","circlePool","Circle","arc","cy","attachCircle","lArc","rArc","lSite","cSite","rSite","bx","by","cx","epsilon2","ha","hc","circle","before","circles","detachCircle","beachPool","Beach","createBeach","beach","detachBeach","beaches","removeBeach","disappearing","unshift","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","createCell","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","lexicographic","Diagram","sites","sort","array","sortCellHalfedges","clipEdges","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","dc","v00","v01","v11","v10","clipCells","edges","polygons","polygon","triangles","forEach","s0","e1","s1","links","_found","vx","vy","SQRT2","Transform","point","applyX","applyY","invert","location","invertX","invertY","rescaleX","domain","rescaleY","update","EnterNode","datum","ownerDocument","namespaceURI","_parent","insertBefore","querySelectorAll","bindIndex","enter","exit","groupLength","dataLength","bindKey","keyValue","nodeByKeyValue","keyValues","ascending","propertyRemove","propertyConstant","propertyFunction","classArray","classList","ClassList","_node","_names","classedAdd","list","classedRemove","classedTrue","classedFalse","classedFunction","contains","textRemove","htmlRemove","innerHTML","htmlConstant","htmlFunction","raise","nextSibling","lower","previousSibling","firstChild","creatorInherit","uri","creatorFixed","constantNull","selection_cloneShallow","clone","cloneNode","selection_cloneDeep","dispatchEvent","params","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","dispatchConstant","dispatchFunction","enterGroup","updateGroup","_enter","_exit","sparse","onenter","append","onupdate","onexit","order","compareDocumentPosition","compareNode","compare","sortgroups","sortgroup","classed","html","creator","deep","anObject","module","exports","result","hasIndices","global","ignoreCase","multiline","dotAll","unicode","unicodeSets","sticky","__vue_script__","components","GlButton","props","title","required","default","svgPath","svgHeight","description","primaryButtonLink","primaryButtonText","secondaryButtonLink","secondaryButtonText","compact","Boolean","invertInDarkMode","contentClass","computed","shouldPreventImageReflow","__vue_component__","render","_vm","_h","$createElement","_c","_self","staticClass","class","attrs","height","_e","_v","contentClasses","_t","_s","$scopedSlots","ref","staticRenderFns","xhtml","svg","xlink","xml","xmlns","globalThis","DESCRIPTORS","defineBuiltInAccessor","regExpFlags","fails","RegExpPrototype","INDICES_SUPPORT","error","O","calls","expected","addGetter","chr","defineProperty","pairs","getOwnPropertyDescriptor","configurable","GlLink","_g","_b","$attrs","$listeners","filterEvents","mouseenter","mouseleave","filterContextListener","contextListener","related","relatedTarget","event1","event0","onRemove","__on","removeEventListener","capture","onAdd","wrap","addEventListener","customEvent","sourceEvent"],"mappings":"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","file":"234.1d58e248.chunk.js","sourcesContent":["export {default as path} from \"./path.js\";\n","export default function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n","function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\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","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","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","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","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(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 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 {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","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 {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 {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","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 {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","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 {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 {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 {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","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 {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","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 {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 interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\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","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","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(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","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","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","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","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","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\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 {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","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","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","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","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 {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","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","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","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 {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","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","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\";\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","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} 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","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","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(x) {\n  return function() {\n    return x;\n  };\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","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","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","export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\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","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.hasIndices) result += 'd';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.dotAll) result += 's';\n  if (that.unicode) result += 'u';\n  if (that.unicodeSets) result += 'v';\n  if (that.sticky) result += 'y';\n  return result;\n};\n","import GlButton from '../../base/button/button';\nimport __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';\n\nvar script = {\n  name: 'GlEmptyState',\n  components: {\n    GlButton\n  },\n  props: {\n    /**\n     * The title (heading) of the empty state.\n     */\n    title: {\n      type: String,\n      required: false,\n      default: null\n    },\n    /**\n     * The illustration's URL.\n     */\n    svgPath: {\n      type: String,\n      required: false,\n      default: null\n    },\n    /**\n     * The illustration's height used to prevent content reflow.\n     */\n    svgHeight: {\n      type: Number,\n      required: false,\n      default: 144\n    },\n    /**\n     * The desciption/body text of the empty state.\n     */\n    description: {\n      type: String,\n      required: false,\n      default: null\n    },\n    /**\n     * The primary GlButton's href.\n     */\n    primaryButtonLink: {\n      type: String,\n      required: false,\n      default: null\n    },\n    /**\n     * The primary GlButton's text. If falsey, the button is not shown.\n     */\n    primaryButtonText: {\n      type: String,\n      required: false,\n      default: null\n    },\n    /**\n     * The secondary GlButton's href.\n     */\n    secondaryButtonLink: {\n      type: String,\n      required: false,\n      default: null\n    },\n    /**\n     * The secondary GlButton's text. If falsey, the button is not shown.\n     */\n    secondaryButtonText: {\n      type: String,\n      required: false,\n      default: null\n    },\n    /**\n     * Determines whether to render the compact layout.\n     */\n    compact: {\n      type: Boolean,\n      required: false,\n      default: false\n    },\n    invertInDarkMode: {\n      type: Boolean,\n      required: false,\n      default: true\n    },\n    /**\n     * CSS classes to add to the content container\n     */\n    contentClass: {\n      type: [Array, String, Object],\n      required: false,\n      default: () => []\n    }\n  },\n  computed: {\n    height() {\n      return this.shouldPreventImageReflow ? this.svgHeight : null;\n    },\n    shouldPreventImageReflow() {\n      return Boolean(this.svgHeight);\n    },\n    shouldRenderPrimaryButton() {\n      return Boolean(this.primaryButtonLink && this.primaryButtonText);\n    },\n    shouldRenderSecondaryButton() {\n      return Boolean(this.secondaryButtonLink && this.secondaryButtonText);\n    },\n    contentClasses() {\n      return [this.compact ? 'gl-grow gl-basis-0 gl-px-4' : 'gl-m-auto gl-p-5', this.contentClass];\n    }\n  }\n};\n\n/* script */\nconst __vue_script__ = script;\n\n/* template */\nvar __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:\"gl-flex\",class:{\n    'gl-empty-state gl-flex-col gl-text-center': !_vm.compact,\n    'gl-flex-row': _vm.compact,\n  }},[_c('div',{class:{ 'gl-hidden gl-px-4 sm:gl-block': _vm.compact, 'gl-max-w-full': !_vm.compact }},[(_vm.svgPath)?_c('img',{staticClass:\"gl-max-w-full\",class:{ 'gl-dark-invert-keep-hue': _vm.invertInDarkMode },attrs:{\"src\":_vm.svgPath,\"alt\":\"\",\"height\":_vm.height}}):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"gl-empty-state-content gl-mx-auto gl-my-0\",class:_vm.contentClasses,attrs:{\"data-testid\":\"gl-empty-state-content\"}},[_vm._t(\"title\",function(){return [_c('h1',{staticClass:\"gl-mb-0 gl-mt-0 gl-text-size-h-display gl-leading-36\",class:_vm.compact ? 'h5' : 'h4'},[_vm._v(\"\\n        \"+_vm._s(_vm.title)+\"\\n      \")])]}),_vm._v(\" \"),(_vm.description || _vm.$scopedSlots.description)?_c('p',{ref:\"description\",staticClass:\"gl-mb-0 gl-mt-4 gl-text-subtle\"},[_vm._t(\"description\",function(){return [_vm._v(\"\\n        \"+_vm._s(_vm.description)+\"\\n      \")]})],2):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"gl-mt-5 gl-flex gl-flex-wrap\",class:{ 'gl-justify-center': !_vm.compact }},[_vm._t(\"actions\",function(){return [(_vm.shouldRenderPrimaryButton)?_c('gl-button',{staticClass:\"gl-mb-3\",class:_vm.compact ? 'gl-mr-3' : 'gl-mx-2',attrs:{\"variant\":\"confirm\",\"href\":_vm.primaryButtonLink}},[_vm._v(_vm._s(_vm.primaryButtonText))]):_vm._e(),_vm._v(\" \"),(_vm.shouldRenderSecondaryButton)?_c('gl-button',{staticClass:\"gl-mb-3 gl-mr-3\",class:{ '!gl-mx-2': !_vm.compact },attrs:{\"href\":_vm.secondaryButtonLink}},[_vm._v(_vm._s(_vm.secondaryButtonText)+\"\\n        \")]):_vm._e()]})],2)],2)])};\nvar __vue_staticRenderFns__ = [];\n\n  /* style */\n  const __vue_inject_styles__ = undefined;\n  /* scoped */\n  const __vue_scope_id__ = undefined;\n  /* module identifier */\n  const __vue_module_identifier__ = undefined;\n  /* functional template */\n  const __vue_is_functional_template__ = false;\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = __vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  );\n\nexport default __vue_component__;\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","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","'use strict';\nvar globalThis = require('../internals/global-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar regExpFlags = require('../internals/regexp-flags');\nvar fails = require('../internals/fails');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError\nvar RegExp = globalThis.RegExp;\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n  var INDICES_SUPPORT = true;\n  try {\n    RegExp('.', 'd');\n  } catch (error) {\n    INDICES_SUPPORT = false;\n  }\n\n  var O = {};\n  // modern V8 bug\n  var calls = '';\n  var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy';\n\n  var addGetter = function (key, chr) {\n    // eslint-disable-next-line es/no-object-defineproperty -- safe\n    Object.defineProperty(O, key, { get: function () {\n      calls += chr;\n      return true;\n    } });\n  };\n\n  var pairs = {\n    dotAll: 's',\n    global: 'g',\n    ignoreCase: 'i',\n    multiline: 'm',\n    sticky: 'y'\n  };\n\n  if (INDICES_SUPPORT) pairs.hasIndices = 'd';\n\n  for (var key in pairs) addGetter(key, pairs[key]);\n\n  // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n  var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O);\n\n  return result !== expected || calls !== expected;\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', {\n  configurable: true,\n  get: regExpFlags\n});\n","import GlLink from '../link/link';\nimport __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';\n\nvar script = {\n  name: 'AvatarLink',\n  components: {\n    GlLink\n  }\n};\n\n/* script */\nconst __vue_script__ = script;\n\n/* template */\nvar __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-link',_vm._g(_vm._b({staticClass:\"gl-avatar-link\"},'gl-link',_vm.$attrs,false),_vm.$listeners),[_vm._t(\"default\")],2)};\nvar __vue_staticRenderFns__ = [];\n\n  /* style */\n  const __vue_inject_styles__ = undefined;\n  /* scoped */\n  const __vue_scope_id__ = undefined;\n  /* module identifier */\n  const __vue_module_identifier__ = undefined;\n  /* functional template */\n  const __vue_is_functional_template__ = false;\n  /* style inject */\n  \n  /* style inject SSR */\n  \n  /* style inject shadow dom */\n  \n\n  \n  const __vue_component__ = __vue_normalize__(\n    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },\n    __vue_inject_styles__,\n    __vue_script__,\n    __vue_scope_id__,\n    __vue_is_functional_template__,\n    __vue_module_identifier__,\n    false,\n    undefined,\n    undefined,\n    undefined\n  );\n\nexport default __vue_component__;\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","function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\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"],"sourceRoot":""}