{"version":3,"sources":["../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/@material-ui/core/esm/FormControl/formControlState.js","../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/@material-ui/core/esm/FormControl/useFormControl.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@material-ui/core/esm/FormControl/FormControlContext.js","../node_modules/d3/dist/package.js","../node_modules/d3-array/src/ascending.js","../node_modules/d3-array/src/bisector.js","../node_modules/d3-array/src/bisect.js","../node_modules/d3-array/src/pairs.js","../node_modules/d3-array/src/cross.js","../node_modules/d3-array/src/descending.js","../node_modules/d3-array/src/number.js","../node_modules/d3-array/src/variance.js","../node_modules/d3-array/src/deviation.js","../node_modules/d3-array/src/extent.js","../node_modules/d3-array/src/array.js","../node_modules/d3-array/src/constant.js","../node_modules/d3-array/src/identity.js","../node_modules/d3-array/src/range.js","../node_modules/d3-array/src/ticks.js","../node_modules/d3-array/src/threshold/sturges.js","../node_modules/d3-array/src/histogram.js","../node_modules/d3-array/src/quantile.js","../node_modules/d3-array/src/threshold/freedmanDiaconis.js","../node_modules/d3-array/src/threshold/scott.js","../node_modules/d3-array/src/max.js","../node_modules/d3-array/src/mean.js","../node_modules/d3-array/src/median.js","../node_modules/d3-array/src/merge.js","../node_modules/d3-array/src/min.js","../node_modules/d3-array/src/permute.js","../node_modules/d3-array/src/scan.js","../node_modules/d3-array/src/shuffle.js","../node_modules/d3-array/src/sum.js","../node_modules/d3-array/src/transpose.js","../node_modules/d3-array/src/zip.js","../node_modules/d3-axis/src/array.js","../node_modules/d3-axis/src/identity.js","../node_modules/d3-axis/src/axis.js","../node_modules/d3-dispatch/src/dispatch.js","../node_modules/d3-selection/src/selector.js","../node_modules/d3-selection/src/selectorAll.js","../node_modules/d3-selection/src/matcher.js","../node_modules/d3-selection/src/selection/sparse.js","../node_modules/d3-selection/src/selection/enter.js","../node_modules/d3-selection/src/selection/data.js","../node_modules/d3-selection/src/selection/sort.js","../node_modules/d3-selection/src/selection/call.js","../node_modules/d3-selection/src/namespaces.js","../node_modules/d3-selection/src/namespace.js","../node_modules/d3-selection/src/selection/attr.js","../node_modules/d3-selection/src/window.js","../node_modules/d3-selection/src/selection/style.js","../node_modules/d3-selection/src/selection/property.js","../node_modules/d3-selection/src/selection/classed.js","../node_modules/d3-selection/src/selection/text.js","../node_modules/d3-selection/src/selection/html.js","../node_modules/d3-selection/src/selection/raise.js","../node_modules/d3-selection/src/selection/lower.js","../node_modules/d3-selection/src/creator.js","../node_modules/d3-selection/src/selection/insert.js","../node_modules/d3-selection/src/selection/remove.js","../node_modules/d3-selection/src/selection/clone.js","../node_modules/d3-selection/src/selection/on.js","../node_modules/d3-selection/src/selection/dispatch.js","../node_modules/d3-selection/src/selection/index.js","../node_modules/d3-selection/src/selection/select.js","../node_modules/d3-selection/src/selection/selectAll.js","../node_modules/d3-selection/src/selection/filter.js","../node_modules/d3-selection/src/constant.js","../node_modules/d3-selection/src/selection/exit.js","../node_modules/d3-selection/src/selection/join.js","../node_modules/d3-selection/src/selection/merge.js","../node_modules/d3-selection/src/selection/order.js","../node_modules/d3-selection/src/selection/nodes.js","../node_modules/d3-selection/src/selection/node.js","../node_modules/d3-selection/src/selection/size.js","../node_modules/d3-selection/src/selection/empty.js","../node_modules/d3-selection/src/selection/each.js","../node_modules/d3-selection/src/selection/append.js","../node_modules/d3-selection/src/selection/datum.js","../node_modules/d3-selection/src/select.js","../node_modules/d3-drag/src/noevent.js","../node_modules/d3-drag/src/nodrag.js","../node_modules/d3-color/src/define.js","../node_modules/d3-color/src/color.js","../node_modules/d3-interpolate/src/basis.js","../node_modules/d3-interpolate/src/basisClosed.js","../node_modules/d3-interpolate/src/constant.js","../node_modules/d3-interpolate/src/color.js","../node_modules/d3-interpolate/src/rgb.js","../node_modules/d3-interpolate/src/numberArray.js","../node_modules/d3-interpolate/src/array.js","../node_modules/d3-interpolate/src/date.js","../node_modules/d3-interpolate/src/number.js","../node_modules/d3-interpolate/src/object.js","../node_modules/d3-interpolate/src/string.js","../node_modules/d3-timer/src/timer.js","../node_modules/d3-interpolate/src/value.js","../node_modules/d3-selection/src/sourceEvent.js","../node_modules/d3-selection/src/point.js","../node_modules/d3-selection/src/touch.js","../node_modules/d3-selection/src/mouse.js","../node_modules/d3-timer/src/timeout.js","../node_modules/d3-transition/src/transition/schedule.js","../node_modules/d3-transition/src/interrupt.js","../node_modules/d3-interpolate/src/transform/parse.js","../node_modules/d3-interpolate/src/transform/decompose.js","../node_modules/d3-interpolate/src/transform/index.js","../node_modules/d3-transition/src/transition/tween.js","../node_modules/d3-transition/src/transition/interpolate.js","../node_modules/d3-transition/src/transition/attr.js","../node_modules/d3-transition/src/transition/attrTween.js","../node_modules/d3-transition/src/transition/delay.js","../node_modules/d3-transition/src/transition/duration.js","../node_modules/d3-transition/src/transition/ease.js","../node_modules/d3-transition/src/transition/on.js","../node_modules/d3-transition/src/transition/remove.js","../node_modules/d3-transition/src/transition/selection.js","../node_modules/d3-transition/src/transition/style.js","../node_modules/d3-transition/src/transition/styleTween.js","../node_modules/d3-transition/src/transition/textTween.js","../node_modules/d3-transition/src/transition/index.js","../node_modules/d3-ease/src/cubic.js","../node_modules/d3-transition/src/transition/select.js","../node_modules/d3-transition/src/transition/selectAll.js","../node_modules/d3-transition/src/transition/filter.js","../node_modules/d3-transition/src/transition/merge.js","../node_modules/d3-transition/src/transition/transition.js","../node_modules/d3-transition/src/transition/text.js","../node_modules/d3-transition/src/transition/end.js","../node_modules/d3-transition/src/selection/transition.js","../node_modules/d3-transition/src/selection/index.js","../node_modules/d3-transition/src/selection/interrupt.js","../node_modules/d3-transition/src/active.js","../node_modules/d3-brush/src/constant.js","../node_modules/d3-brush/src/event.js","../node_modules/d3-brush/src/noevent.js","../node_modules/d3-brush/src/brush.js","../node_modules/d3-chord/src/math.js","../node_modules/d3-chord/src/chord.js","../node_modules/d3-chord/src/array.js","../node_modules/d3-chord/src/constant.js","../node_modules/d3-path/src/path.js","../node_modules/d3-chord/src/ribbon.js","../node_modules/d3-collection/src/map.js","../node_modules/d3-collection/src/nest.js","../node_modules/d3-collection/src/set.js","../node_modules/d3-collection/src/keys.js","../node_modules/d3-collection/src/values.js","../node_modules/d3-collection/src/entries.js","../node_modules/d3-color/src/math.js","../node_modules/d3-color/src/lab.js","../node_modules/d3-color/src/cubehelix.js","../node_modules/d3-contour/src/array.js","../node_modules/d3-contour/src/ascending.js","../node_modules/d3-contour/src/constant.js","../node_modules/d3-contour/src/contains.js","../node_modules/d3-contour/src/noop.js","../node_modules/d3-contour/src/contours.js","../node_modules/d3-contour/src/area.js","../node_modules/d3-contour/src/blur.js","../node_modules/d3-contour/src/density.js","../node_modules/d3-drag/src/constant.js","../node_modules/d3-drag/src/event.js","../node_modules/d3-drag/src/drag.js","../node_modules/d3-dsv/src/dsv.js","../node_modules/d3-dsv/src/csv.js","../node_modules/d3-dsv/src/tsv.js","../node_modules/d3-dsv/src/autoType.js","../node_modules/d3-ease/src/linear.js","../node_modules/d3-ease/src/quad.js","../node_modules/d3-ease/src/poly.js","../node_modules/d3-ease/src/sin.js","../node_modules/d3-ease/src/math.js","../node_modules/d3-ease/src/exp.js","../node_modules/d3-ease/src/circle.js","../node_modules/d3-ease/src/bounce.js","../node_modules/d3-ease/src/back.js","../node_modules/d3-ease/src/elastic.js","../node_modules/d3-fetch/src/blob.js","../node_modules/d3-fetch/src/buffer.js","../node_modules/d3-fetch/src/text.js","../node_modules/d3-fetch/src/dsv.js","../node_modules/d3-fetch/src/image.js","../node_modules/d3-fetch/src/json.js","../node_modules/d3-fetch/src/xml.js","../node_modules/d3-force/src/center.js","../node_modules/d3-force/src/constant.js","../node_modules/d3-force/src/jiggle.js","../node_modules/d3-quadtree/src/add.js","../node_modules/d3-quadtree/src/cover.js","../node_modules/d3-quadtree/src/quad.js","../node_modules/d3-quadtree/src/x.js","../node_modules/d3-quadtree/src/y.js","../node_modules/d3-quadtree/src/quadtree.js","../node_modules/d3-force/src/collide.js","../node_modules/d3-quadtree/src/data.js","../node_modules/d3-quadtree/src/extent.js","../node_modules/d3-quadtree/src/find.js","../node_modules/d3-quadtree/src/remove.js","../node_modules/d3-quadtree/src/root.js","../node_modules/d3-quadtree/src/size.js","../node_modules/d3-quadtree/src/visit.js","../node_modules/d3-quadtree/src/visitAfter.js","../node_modules/d3-force/src/link.js","../node_modules/d3-force/src/simulation.js","../node_modules/d3-force/src/manyBody.js","../node_modules/d3-force/src/radial.js","../node_modules/d3-force/src/x.js","../node_modules/d3-force/src/y.js","../node_modules/d3-format/src/formatDecimal.js","../node_modules/d3-format/src/exponent.js","../node_modules/d3-format/src/formatSpecifier.js","../node_modules/d3-format/src/formatTrim.js","../node_modules/d3-format/src/formatPrefixAuto.js","../node_modules/d3-format/src/defaultLocale.js","../node_modules/d3-format/src/formatRounded.js","../node_modules/d3-format/src/formatTypes.js","../node_modules/d3-format/src/identity.js","../node_modules/d3-format/src/locale.js","../node_modules/d3-format/src/formatGroup.js","../node_modules/d3-format/src/formatNumerals.js","../node_modules/d3-format/src/precisionFixed.js","../node_modules/d3-format/src/precisionPrefix.js","../node_modules/d3-format/src/precisionRound.js","../node_modules/d3-geo/src/adder.js","../node_modules/d3-geo/src/math.js","../node_modules/d3-geo/src/noop.js","../node_modules/d3-geo/src/stream.js","../node_modules/d3-geo/src/area.js","../node_modules/d3-geo/src/cartesian.js","../node_modules/d3-geo/src/bounds.js","../node_modules/d3-geo/src/centroid.js","../node_modules/d3-geo/src/constant.js","../node_modules/d3-geo/src/compose.js","../node_modules/d3-geo/src/rotation.js","../node_modules/d3-geo/src/circle.js","../node_modules/d3-geo/src/clip/buffer.js","../node_modules/d3-geo/src/pointEqual.js","../node_modules/d3-geo/src/clip/rejoin.js","../node_modules/d3-geo/src/polygonContains.js","../node_modules/d3-geo/src/clip/index.js","../node_modules/d3-geo/src/clip/antimeridian.js","../node_modules/d3-geo/src/clip/circle.js","../node_modules/d3-geo/src/clip/rectangle.js","../node_modules/d3-geo/src/clip/line.js","../node_modules/d3-geo/src/clip/extent.js","../node_modules/d3-geo/src/length.js","../node_modules/d3-geo/src/distance.js","../node_modules/d3-geo/src/contains.js","../node_modules/d3-geo/src/graticule.js","../node_modules/d3-geo/src/interpolate.js","../node_modules/d3-geo/src/path/area.js","../node_modules/d3-geo/src/identity.js","../node_modules/d3-geo/src/path/bounds.js","../node_modules/d3-geo/src/path/centroid.js","../node_modules/d3-geo/src/path/context.js","../node_modules/d3-geo/src/path/measure.js","../node_modules/d3-geo/src/path/string.js","../node_modules/d3-geo/src/path/index.js","../node_modules/d3-geo/src/transform.js","../node_modules/d3-geo/src/projection/fit.js","../node_modules/d3-geo/src/projection/resample.js","../node_modules/d3-geo/src/projection/index.js","../node_modules/d3-geo/src/projection/conic.js","../node_modules/d3-geo/src/projection/conicEqualArea.js","../node_modules/d3-geo/src/projection/cylindricalEqualArea.js","../node_modules/d3-geo/src/projection/albers.js","../node_modules/d3-geo/src/projection/albersUsa.js","../node_modules/d3-geo/src/projection/azimuthal.js","../node_modules/d3-geo/src/projection/azimuthalEqualArea.js","../node_modules/d3-geo/src/projection/azimuthalEquidistant.js","../node_modules/d3-geo/src/projection/mercator.js","../node_modules/d3-geo/src/projection/conicConformal.js","../node_modules/d3-geo/src/projection/equirectangular.js","../node_modules/d3-geo/src/projection/conicEquidistant.js","../node_modules/d3-geo/src/projection/equalEarth.js","../node_modules/d3-geo/src/projection/gnomonic.js","../node_modules/d3-geo/src/projection/identity.js","../node_modules/d3-geo/src/projection/naturalEarth1.js","../node_modules/d3-geo/src/projection/orthographic.js","../node_modules/d3-geo/src/projection/stereographic.js","../node_modules/d3-geo/src/projection/transverseMercator.js","../node_modules/d3-hierarchy/src/cluster.js","../node_modules/d3-hierarchy/src/hierarchy/count.js","../node_modules/d3-hierarchy/src/hierarchy/index.js","../node_modules/d3-hierarchy/src/hierarchy/each.js","../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","../node_modules/d3-hierarchy/src/hierarchy/sum.js","../node_modules/d3-hierarchy/src/hierarchy/sort.js","../node_modules/d3-hierarchy/src/hierarchy/path.js","../node_modules/d3-hierarchy/src/hierarchy/ancestors.js","../node_modules/d3-hierarchy/src/hierarchy/descendants.js","../node_modules/d3-hierarchy/src/hierarchy/leaves.js","../node_modules/d3-hierarchy/src/hierarchy/links.js","../node_modules/d3-hierarchy/src/array.js","../node_modules/d3-hierarchy/src/pack/enclose.js","../node_modules/d3-hierarchy/src/pack/siblings.js","../node_modules/d3-hierarchy/src/accessors.js","../node_modules/d3-hierarchy/src/constant.js","../node_modules/d3-hierarchy/src/pack/index.js","../node_modules/d3-hierarchy/src/treemap/round.js","../node_modules/d3-hierarchy/src/treemap/dice.js","../node_modules/d3-hierarchy/src/partition.js","../node_modules/d3-hierarchy/src/stratify.js","../node_modules/d3-hierarchy/src/tree.js","../node_modules/d3-hierarchy/src/treemap/slice.js","../node_modules/d3-hierarchy/src/treemap/squarify.js","../node_modules/d3-hierarchy/src/treemap/index.js","../node_modules/d3-hierarchy/src/treemap/binary.js","../node_modules/d3-hierarchy/src/treemap/sliceDice.js","../node_modules/d3-hierarchy/src/treemap/resquarify.js","../node_modules/d3-interpolate/src/discrete.js","../node_modules/d3-interpolate/src/hue.js","../node_modules/d3-interpolate/src/round.js","../node_modules/d3-interpolate/src/zoom.js","../node_modules/d3-interpolate/src/hsl.js","../node_modules/d3-interpolate/src/lab.js","../node_modules/d3-interpolate/src/hcl.js","../node_modules/d3-interpolate/src/cubehelix.js","../node_modules/d3-interpolate/src/piecewise.js","../node_modules/d3-interpolate/src/quantize.js","../node_modules/d3-polygon/src/area.js","../node_modules/d3-polygon/src/centroid.js","../node_modules/d3-polygon/src/hull.js","../node_modules/d3-polygon/src/cross.js","../node_modules/d3-polygon/src/contains.js","../node_modules/d3-polygon/src/length.js","../node_modules/d3-random/src/defaultSource.js","../node_modules/d3-random/src/uniform.js","../node_modules/d3-random/src/normal.js","../node_modules/d3-random/src/logNormal.js","../node_modules/d3-random/src/irwinHall.js","../node_modules/d3-random/src/bates.js","../node_modules/d3-random/src/exponential.js","../node_modules/d3-scale/src/init.js","../node_modules/d3-scale/src/array.js","../node_modules/d3-scale/src/ordinal.js","../node_modules/d3-scale/src/band.js","../node_modules/d3-scale/src/constant.js","../node_modules/d3-scale/src/number.js","../node_modules/d3-scale/src/continuous.js","../node_modules/d3-scale/src/tickFormat.js","../node_modules/d3-scale/src/linear.js","../node_modules/d3-scale/src/identity.js","../node_modules/d3-scale/src/nice.js","../node_modules/d3-scale/src/log.js","../node_modules/d3-scale/src/symlog.js","../node_modules/d3-scale/src/pow.js","../node_modules/d3-scale/src/quantile.js","../node_modules/d3-scale/src/quantize.js","../node_modules/d3-scale/src/threshold.js","../node_modules/d3-time/src/interval.js","../node_modules/d3-time/src/year.js","../node_modules/d3-time/src/month.js","../node_modules/d3-time/src/week.js","../node_modules/d3-time/src/duration.js","../node_modules/d3-time/src/day.js","../node_modules/d3-time/src/hour.js","../node_modules/d3-time/src/minute.js","../node_modules/d3-time/src/second.js","../node_modules/d3-time/src/millisecond.js","../node_modules/d3-time/src/utcWeek.js","../node_modules/d3-time/src/utcDay.js","../node_modules/d3-time/src/utcYear.js","../node_modules/d3-time-format/src/locale.js","../node_modules/d3-time-format/src/defaultLocale.js","../node_modules/d3-scale/src/time.js","../node_modules/d3-time/src/utcMonth.js","../node_modules/d3-time/src/utcHour.js","../node_modules/d3-time/src/utcMinute.js","../node_modules/d3-scale/src/utcTime.js","../node_modules/d3-scale/src/sequential.js","../node_modules/d3-scale/src/sequentialQuantile.js","../node_modules/d3-scale/src/diverging.js","../node_modules/d3-scale-chromatic/src/colors.js","../node_modules/d3-scale-chromatic/src/categorical/category10.js","../node_modules/d3-scale-chromatic/src/categorical/Accent.js","../node_modules/d3-scale-chromatic/src/categorical/Dark2.js","../node_modules/d3-scale-chromatic/src/categorical/Paired.js","../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","../node_modules/d3-scale-chromatic/src/categorical/Set1.js","../node_modules/d3-scale-chromatic/src/categorical/Set2.js","../node_modules/d3-scale-chromatic/src/categorical/Set3.js","../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js","../node_modules/d3-scale-chromatic/src/ramp.js","../node_modules/d3-scale-chromatic/src/diverging/BrBG.js","../node_modules/d3-scale-chromatic/src/diverging/PRGn.js","../node_modules/d3-scale-chromatic/src/diverging/PiYG.js","../node_modules/d3-scale-chromatic/src/diverging/PuOr.js","../node_modules/d3-scale-chromatic/src/diverging/RdBu.js","../node_modules/d3-scale-chromatic/src/diverging/RdGy.js","../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","../node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","../node_modules/d3-scale-chromatic/src/diverging/Spectral.js","../node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","../node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","../node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","../node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","../node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","../node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","../node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","../node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","../node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","../node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","../node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","../node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","../node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","../node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","../node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","../node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","../node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js","../node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","../node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","../node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","../node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js","../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","../node_modules/d3-selection/src/create.js","../node_modules/d3-selection/src/local.js","../node_modules/d3-selection/src/selectAll.js","../node_modules/d3-selection/src/touches.js","../node_modules/d3-shape/src/constant.js","../node_modules/d3-shape/src/math.js","../node_modules/d3-shape/src/arc.js","../node_modules/d3-shape/src/curve/linear.js","../node_modules/d3-shape/src/point.js","../node_modules/d3-shape/src/line.js","../node_modules/d3-shape/src/area.js","../node_modules/d3-shape/src/descending.js","../node_modules/d3-shape/src/identity.js","../node_modules/d3-shape/src/pie.js","../node_modules/d3-shape/src/curve/radial.js","../node_modules/d3-shape/src/lineRadial.js","../node_modules/d3-shape/src/areaRadial.js","../node_modules/d3-shape/src/pointRadial.js","../node_modules/d3-shape/src/array.js","../node_modules/d3-shape/src/link/index.js","../node_modules/d3-shape/src/symbol/circle.js","../node_modules/d3-shape/src/symbol/cross.js","../node_modules/d3-shape/src/symbol/diamond.js","../node_modules/d3-shape/src/symbol/star.js","../node_modules/d3-shape/src/symbol/square.js","../node_modules/d3-shape/src/symbol/triangle.js","../node_modules/d3-shape/src/symbol/wye.js","../node_modules/d3-shape/src/symbol.js","../node_modules/d3-shape/src/noop.js","../node_modules/d3-shape/src/curve/basis.js","../node_modules/d3-shape/src/curve/basisClosed.js","../node_modules/d3-shape/src/curve/basisOpen.js","../node_modules/d3-shape/src/curve/bundle.js","../node_modules/d3-shape/src/curve/cardinal.js","../node_modules/d3-shape/src/curve/cardinalClosed.js","../node_modules/d3-shape/src/curve/cardinalOpen.js","../node_modules/d3-shape/src/curve/catmullRom.js","../node_modules/d3-shape/src/curve/catmullRomClosed.js","../node_modules/d3-shape/src/curve/catmullRomOpen.js","../node_modules/d3-shape/src/curve/linearClosed.js","../node_modules/d3-shape/src/curve/monotone.js","../node_modules/d3-shape/src/curve/natural.js","../node_modules/d3-shape/src/curve/step.js","../node_modules/d3-shape/src/offset/none.js","../node_modules/d3-shape/src/order/none.js","../node_modules/d3-shape/src/stack.js","../node_modules/d3-shape/src/offset/expand.js","../node_modules/d3-shape/src/offset/diverging.js","../node_modules/d3-shape/src/offset/silhouette.js","../node_modules/d3-shape/src/offset/wiggle.js","../node_modules/d3-shape/src/order/appearance.js","../node_modules/d3-shape/src/order/ascending.js","../node_modules/d3-shape/src/order/descending.js","../node_modules/d3-shape/src/order/insideOut.js","../node_modules/d3-shape/src/order/reverse.js","../node_modules/d3-time-format/src/isoFormat.js","../node_modules/d3-time-format/src/isoParse.js","../node_modules/d3-timer/src/interval.js","../node_modules/d3-voronoi/src/constant.js","../node_modules/d3-voronoi/src/point.js","../node_modules/d3-voronoi/src/RedBlackTree.js","../node_modules/d3-voronoi/src/Edge.js","../node_modules/d3-voronoi/src/Cell.js","../node_modules/d3-voronoi/src/Circle.js","../node_modules/d3-voronoi/src/Beach.js","../node_modules/d3-voronoi/src/Diagram.js","../node_modules/d3-voronoi/src/voronoi.js","../node_modules/d3-zoom/src/constant.js","../node_modules/d3-zoom/src/event.js","../node_modules/d3-zoom/src/transform.js","../node_modules/d3-zoom/src/noevent.js","../node_modules/d3-zoom/src/zoom.js","../node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js","../node_modules/@material-ui/core/esm/InputBase/utils.js","../node_modules/c3/c3.js","../node_modules/@material-ui/core/esm/internal/svg-icons/ArrowDropDown.js","../node_modules/@material-ui/core/esm/NativeSelect/NativeSelectInput.js","../node_modules/@material-ui/core/esm/List/ListContext.js","../node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../node_modules/@material-ui/core/esm/Button/Button.js","../node_modules/@material-ui/core/esm/NativeSelect/NativeSelect.js","../node_modules/@material-ui/lab/esm/ToggleButton/ToggleButton.js","../node_modules/@material-ui/core/esm/Input/Input.js","../node_modules/@material-ui/core/esm/FilledInput/FilledInput.js","../node_modules/@material-ui/core/esm/List/List.js","../node_modules/@material-ui/core/esm/MenuList/MenuList.js","../node_modules/@material-ui/core/esm/Menu/Menu.js","../node_modules/@material-ui/core/esm/Select/SelectInput.js","../node_modules/@material-ui/core/esm/Select/Select.js","../node_modules/@material-ui/lab/esm/ToggleButtonGroup/isValueSelected.js","../node_modules/@material-ui/lab/esm/ToggleButtonGroup/ToggleButtonGroup.js","../node_modules/@material-ui/core/esm/TextareaAutosize/TextareaAutosize.js","../node_modules/@material-ui/core/esm/InputBase/InputBase.js","../node_modules/@material-ui/core/esm/OutlinedInput/NotchedOutline.js","../node_modules/@material-ui/core/esm/OutlinedInput/OutlinedInput.js","../node_modules/@material-ui/core/esm/ListItem/ListItem.js","../node_modules/@material-ui/core/esm/MenuItem/MenuItem.js"],"names":["_setPrototypeOf","o","p","Object","setPrototypeOf","__proto__","_inherits","subClass","superClass","TypeError","prototype","create","constructor","value","writable","configurable","formControlState","_ref","props","states","muiFormControl","reduce","acc","state","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","Date","toString","call","e","_createSuper","Derived","result","Super","getPrototypeOf","NewTarget","this","arguments","apply","possibleConstructorReturn","useFormControl","React","FormControlContext","_possibleConstructorReturn","self","_getPrototypeOf","version","a","b","NaN","compare","f","length","d","x","ascending","left","lo","hi","mid","right","ascendingBisect","bisector","bisectRight","bisectLeft","array","pair","i","n","pairs","Array","values0","values1","i0","i1","value0","n0","n1","values","valueof","delta","m","mean","sum","isNaN","number","v","variance","Math","sqrt","min","max","slice","map","start","stop","step","ceil","range","e10","e5","e2","count","reverse","ticks","tickIncrement","isFinite","floor","power","log","LN10","error","pow","tickStep","step0","abs","step1","LN2","identity","domain","extent","threshold","sturges","histogram","data","xz","x0","x1","tz","isArray","shift","pop","bin","bins","bisect","push","_","constant","thresholds","sort","quantile","deviation","numbers","arrays","merged","j","indexes","permutes","xi","xj","t","random","matrix","transpose","row","translateX","translateY","y","scale","center","offset","bandwidth","round","entering","__axis","axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","k","transform","context","format","spacing","range0","range1","position","copy","selection","path","selectAll","tick","order","tickExit","exit","tickEnter","enter","append","attr","line","select","text","merge","insert","transition","getAttribute","parentNode","remove","filter","each","tickSize","axisTop","axisRight","axisBottom","axisLeft","noop","dispatch","test","Error","Dispatch","parseTypenames","typenames","types","trim","split","name","indexOf","hasOwnProperty","type","get","c","set","callback","concat","on","typename","T","that","args","none","selector","querySelector","empty","querySelectorAll","matches","update","EnterNode","parent","datum","ownerDocument","namespaceURI","_next","_parent","__data__","appendChild","child","insertBefore","next","bindIndex","group","node","groupLength","dataLength","bindKey","key","keyValue","nodeByKeyValue","keyValues","xhtml","svg","xlink","xml","xmlns","prefix","namespaces","space","local","attrRemove","removeAttribute","attrRemoveNS","fullname","removeAttributeNS","attrConstant","setAttribute","attrConstantNS","setAttributeNS","attrFunction","attrFunctionNS","defaultView","document","styleRemove","style","removeProperty","styleConstant","priority","setProperty","styleFunction","styleValue","getPropertyValue","getComputedStyle","propertyRemove","propertyConstant","propertyFunction","classArray","string","classList","ClassList","_node","_names","classedAdd","names","list","add","classedRemove","classedTrue","classedFalse","classedFunction","join","splice","contains","textRemove","textContent","textConstant","textFunction","htmlRemove","innerHTML","htmlConstant","htmlFunction","raise","nextSibling","lower","previousSibling","firstChild","creatorInherit","uri","documentElement","createElement","createElementNS","creatorFixed","namespace","constantNull","removeChild","selection_cloneShallow","clone","cloneNode","selection_cloneDeep","filterEvents","event","mouseenter","mouseleave","filterContextListener","listener","index","contextListener","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","__on","removeEventListener","capture","onAdd","wrap","addEventListener","customEvent","sourceEvent","dispatchEvent","params","window","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","dispatchConstant","dispatchFunction","root","Selection","groups","parents","_groups","_parents","subgroups","subnode","subgroup","selectorAll","match","matcher","size","bind","enterGroup","updateGroup","previous","_enter","_exit","sparse","onenter","onupdate","onexit","groups0","groups1","m0","m1","merges","group0","group1","compareNode","sortgroups","sortgroup","nodes","getAttributeNS","property","classed","html","creator","before","deep","nopropagation","stopImmediatePropagation","preventDefault","view","noevent","__noselect","MozUserSelect","yesdrag","noclick","setTimeout","factory","extend","definition","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","color","l","toLowerCase","exec","parseInt","rgbn","Rgb","rgba","hsla","r","g","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","h","s","Hsl","hslConvert","hsl","hsl2rgb","m2","basis","t1","v0","v1","v2","v3","t2","t3","define","channels","assign","displayable","formatHsl","brighter","darker","linear","hue","gamma","nogamma","exponential","rgbGamma","end","colorRgb","rgbSpline","spline","colors","rgbBasis","rgbBasisClosed","basisClosed","isNumberArray","ArrayBuffer","isView","DataView","numberArray","genericArray","nb","na","setTime","reA","reB","source","taskHead","taskTail","am","bm","bs","bi","lastIndex","q","one","zero","date","valueOf","object","current","ownerSVGElement","createSVGPoint","point","clientX","clientY","matrixTransform","getScreenCTM","inverse","rect","getBoundingClientRect","clientLeft","top","clientTop","touches","identifier","changedTouches","touch","frame","timeout","interval","clockLast","clockNow","clockSkew","clock","performance","now","setFrame","requestAnimationFrame","clearNow","Timer","_call","_time","timer","delay","time","restart","timerFlush","wake","t0","Infinity","sleep","nap","poke","clearTimeout","clearInterval","setInterval","elapsed","emptyOn","emptyTween","id","timing","schedules","__transition","tween","duration","ease","init","schedule","cssNode","cssRoot","cssView","svgNode","active","degrees","PI","rotate","skewX","scaleX","scaleY","atan2","atan","interpolateTransform","parse","pxComma","pxParen","degParen","xa","ya","xb","yb","translate","interpolateTransformCss","decompose","interpolateTransformSvg","baseVal","consolidate","tweenRemove","tween0","tween1","tweenFunction","tweenValue","_id","interpolateNumber","interpolateRgb","interpolateString","interpolate","value1","string00","interpolate0","string1","string0","string10","attrInterpolate","attrInterpolateNS","attrTweenNS","_value","attrTween","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","onFunction","on0","on1","sit","every","styleInterpolate","styleTween","textInterpolate","textTween","Transition","_name","newId","selection_prototype","cubicIn","cubicOut","cubicInOut","children","inherit","id0","id1","styleNull","listener0","undefined","styleMaybeRemove","Promise","resolve","reject","cancel","interrupt","defaultTiming","easeCubicInOut","target","MODE_DRAG","MODE_SPACE","MODE_HANDLE","MODE_CENTER","number1","number2","toucher","X","handles","input","output","xy","Y","XY","cursors","overlay","w","nw","ne","se","sw","flipX","flipY","signsX","signsY","defaultFilter","ctrlKey","button","defaultExtent","hasAttribute","viewBox","width","height","defaultTouchable","navigator","maxTouchPoints","__brush","brushSelection","dim","brushX","brush","brushY","touchending","touchable","keys","listeners","handleSize","initialize","handle","redraw","started","touchmoved","touchended","emitter","clean","emit","Emitter","w0","w1","e0","e1","s0","s1","moving","lockX","lockY","mode","metaKey","altKey","signX","signY","W","N","E","S","dx","dy","shifting","shiftKey","pointer","mouse","point0","beforestart","moved","ended","keydowned","keyupped","dragDisable","point1","move","dragEnable","keyCode","selection0","selection1","clear","starting","BrushEvent","keyModifiers","cos","sin","pi","halfPi","tau","compareValue","padAngle","sortGroups","sortSubgroups","sortChords","chord","groupSums","groupIndex","subgroupIndex","chords","forEach","di","dj","a0","a1","subindex","startAngle","endAngle","tauEpsilon","Path","_x0","_y0","_x1","_y1","moveTo","closePath","lineTo","quadraticCurveTo","y1","bezierCurveTo","x2","y2","arcTo","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","ccw","cw","da","defaultSource","defaultTarget","defaultRadius","radius","defaultStartAngle","defaultEndAngle","ribbon","buffer","argv","sr","sa0","sa1","sx0","sy0","tr","ta0","ta1","Map","has","entries","sortValues","rollup","nest","sortKeys","depth","createResult","setResult","valuesByKey","createObject","setObject","createMap","setMap","sortKey","Set","proto","deg2rad","rad2deg","labConvert","Lab","Hcl","hcl2lab","z","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","lch","hcl","C","ED","EB","BC_DA","B","cubehelixConvert","Cubehelix","bl","cubehelix","cosh","sinh","ring","hole","ringContains","yi","pj","yj","segmentContains","collinear","cases","thresholdSturges","smooth","smoothLinear","contours","contour","polygons","holes","fragmentByStart","fragmentByEnd","stitch","startIndex","endIndex","unshift","isorings","area","polygon","coordinates","xt","yt","_0","_1","blurX","blurY","defaultX","defaultY","defaultWeight","weight","density","Float32Array","wi","geometry","transformPolygon","transformRing","transformPoint","resize","cellSize","DragEvent","subject","defaultContainer","defaultSubject","mousedownx","mousedowny","mousemoving","container","gestures","clickDistance2","drag","mousedowned","touchstarted","gesture","mousemoved","mouseupped","nodrag","sublisteners","p0","clickDistance","EOL","EOF","objectConverter","columns","Function","JSON","stringify","inferColumns","rows","columnSet","column","pad","formatDate","year","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","delimiter","reFormat","DELIMITER","charCodeAt","parseRows","I","eof","eol","token","replace","preformatBody","formatValue","formatRow","convert","customConverter","formatBody","formatRows","csv","dsv","csvParse","csvParseRows","csvFormat","csvFormatBody","csvFormatRows","csvFormatRow","csvFormatValue","tsv","tsvParse","tsvParseRows","tsvFormat","tsvFormatBody","tsvFormatRows","tsvFormatRow","tsvFormatValue","autoType","fixtz","getHours","quadIn","quadOut","quadInOut","polyIn","custom","exponent","polyOut","polyInOut","sinIn","sinOut","sinInOut","tpmt","expIn","expOut","expInOut","circleIn","circleOut","circleInOut","bounceIn","bounceOut","bounceInOut","backIn","overshoot","backOut","backInOut","elasticIn","asin","amplitude","period","elasticOut","elasticInOut","responseBlob","response","ok","status","statusText","blob","fetch","then","responseArrayBuffer","arrayBuffer","responseText","dsvParse","dsvFormat","image","Image","onerror","onload","src","responseJson","json","parser","DOMParser","parseFromString","force","sx","sy","tree","xm","ym","xp","yp","bottom","_root","leaf","_x","_y","quadtree","Quadtree","addAll","leaf_copy","treeProto","vx","vy","cover","yz","visit","find","x3","y3","quads","Quad","d2","retainer","removeAll","visitAfter","radii","strength","iterations","ri","ri2","prepare","quad","rj","jiggle","nodeById","nodeId","links","strengths","distances","bias","link","distance","alpha","initializeStrength","initializeDistance","initialAngle","simulation","alphaMin","alphaDecay","alphaTarget","velocityDecay","forces","stepper","fx","fy","initializeNodes","angle","initializeForce","closest","distanceMin2","distanceMax2","theta2","accumulate","distanceMin","distanceMax","theta","radiuses","formatDecimalParts","toExponential","coefficient","re","formatSpecifier","specifier","FormatSpecifier","fill","align","sign","symbol","comma","precision","prefixExponent","locale","formatPrefix","toFixed","toLocaleString","toPrecision","formatRounded","toUpperCase","prefixes","grouping","thousands","Number","substring","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","String","percent","minus","nan","newFormat","formatTypes","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","out","formatTrim","padding","defaultLocale","formatLocale","Adder","reset","temp","adder","bv","av","quarterPi","radians","exp","haversin","streamGeometry","stream","streamGeometryType","streamObjectType","Feature","FeatureCollection","features","Sphere","sphere","Point","MultiPoint","LineString","streamLine","MultiLineString","Polygon","streamPolygon","MultiPolygon","GeometryCollection","geometries","closed","coordinate","lineStart","lineEnd","polygonStart","polygonEnd","lambda00","phi00","lambda0","cosPhi0","sinPhi0","areaRingSum","areaSum","areaStream","areaRingStart","areaRingEnd","areaRing","areaPointFirst","areaPoint","lambda","phi","dLambda","sdLambda","adLambda","cosPhi","sinPhi","u","spherical","cartesian","cartesianDot","cartesianCross","cartesianAddInPlace","cartesianScale","vector","cartesianNormalizeInPlace","phi0","lambda1","phi1","lambda2","ranges","deltaSum","boundsStream","boundsPoint","boundsLineStart","boundsLineEnd","boundsRingPoint","boundsRingStart","boundsRingEnd","linePoint","normal","inflection","phii","lambdai","antimeridian","rangeCompare","rangeContains","W0","W1","X0","Y0","Z0","X1","Y1","Z1","X2","Y2","Z2","z0","feature","deltaMax","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroidPointCartesian","centroidLinePointFirst","centroidLinePoint","centroidRingPointFirst","centroidRingPoint","cx","cy","cz","compose","invert","rotationIdentity","rotateRadians","deltaLambda","deltaPhi","deltaGamma","rotationLambda","rotationPhiGamma","forwardRotationLambda","rotation","cosDeltaPhi","sinDeltaPhi","cosDeltaGamma","sinDeltaGamma","forward","circleStream","direction","cosRadius","sinRadius","circleRadius","circle","lines","rejoin","Intersection","points","other","entry","segments","compareIntersection","startInside","clip","segment","p1","pointEqual","isSubject","longitude","winding","sinPhi1","cosPhi1","absDelta","intersection","phiArc","pointVisible","clipLine","sink","ringBuffer","clipBuffer","ringSink","polygonStarted","pointRing","ringStart","ringEnd","polygonContains","clipRejoin","pointLine","ringSegments","validSegment","sign0","sign1","sinLambda0Lambda1","clipAntimeridianIntersect","from","to","cr","smallRadius","notHemisphere","visible","intersect","two","n2","n2n2","n1n2","determinant","c1","c2","n1xn2","A","uu","polar","q1","code","c0","v00","point2","clipRectangle","corner","comparePoint","ca","cb","x__","y__","v__","x_","y_","v_","first","activeStream","bufferStream","clipStream","b0","b1","polygonInside","cleanInside","ax","ay","cache","cacheStream","lengthSum","lengthStream","lengthPointFirst","lengthLineEnd","lengthPoint","cosDelta","containsObjectType","containsGeometry","containsGeometryType","containsPoint","containsLine","containsPolygon","ao","bo","ab","ringRadians","pointRadians","graticuleX","graticuleY","graticule","DX","DY","outline","extentMajor","extentMinor","stepMajor","stepMinor","graticule10","x00","y00","cy0","cy1","sy1","kx0","ky0","kx1","ky1","bounds","centroid","centroidPointFirstLine","centroidPointLine","centroidPointFirstRing","centroidPointRing","PathContext","_context","_radius","pointRadius","_line","_point","lengthRing","PathString","_string","_circle","projection","projectionStream","contextStream","pathArea","measure","pathMeasure","pathBounds","pathCentroid","methods","transformer","TransformStream","fit","fitBounds","clipExtent","geoStream","fitExtent","fitSize","fitWidth","fitHeight","cosMinDistance","project","delta2","resampleLineTo","phi2","dx2","dy2","dz","a00","b00","c00","resampleStream","ringPoint","resample","resampleNone","transformRadians","scaleTranslate","scaleTranslateRotate","cosAlpha","sinAlpha","ai","ci","fi","projectionMutator","projectAt","projectResample","projectTransform","projectRotateTransform","preclip","clipAntimeridian","postclip","recenter","transformRotate","clipAngle","clipCircle","reflectX","reflectY","conicProjection","parallels","conicEqualAreaRaw","cylindricalEqualAreaRaw","r0","r0y","conicEqualArea","lower48Point","alaskaPoint","hawaiiPoint","lower48","albers","alaska","hawaii","pointStream","albersUsa","streams","multiplex","azimuthalRaw","azimuthalInvert","sc","cc","azimuthalEqualAreaRaw","cxcy","azimuthalEquidistantRaw","mercatorRaw","mercatorProjection","reclip","tany","conicConformalRaw","equirectangularRaw","conicEquidistantRaw","gy","nx","A1","A2","A3","A4","M","equalEarthRaw","l2","l6","gnomonicRaw","sa","tx","ty","kx","ky","naturalEarth1Raw","phi4","orthographicRaw","stereographicRaw","transverseMercatorRaw","defaultSeparation","meanXReduce","maxYReduce","separation","nodeSize","cluster","previousNode","eachAfter","meanX","maxY","leafLeft","leafRight","hierarchy","childs","Node","valued","defaultChildren","eachBefore","computeHeight","copyData","ancestor","aNodes","ancestors","bNodes","leastCommonAncestor","descendants","leaves","circles","shuffle","enclosesWeak","encloseBasis","extendBasis","enclosesWeakAll","enclosesNot","encloseBasis2","encloseBasis3","dr","r1","r2","r21","r3","a2","a3","b2","b3","c3","d1","d3","place","intersects","score","packEnclose","aa","sj","sk","pack","enclose","optional","required","constantZero","radiusLeaf","packChildren","translateChild","partition","treemapDice","positionNode","roundNode","preroot","ambiguous","defaultId","defaultParentId","parentId","stratify","nodeKey","nodeByKey","nextLeft","nextRight","moveSubtree","wm","wp","change","nextAncestor","vim","TreeNode","treeRoot","firstWalk","secondWalk","sizeNode","siblings","executeShifts","midpoint","vip","vop","vom","sip","sop","sim","som","apportion","squarifyRatio","ratio","nodeValue","sumValue","minValue","maxValue","newRatio","minRatio","beta","dice","treemapSlice","squarify","tile","paddingStack","paddingInner","paddingTop","paddingRight","paddingBottom","paddingLeft","treemap","paddingOuter","sums","valueOffset","valueTarget","valueLeft","valueRight","xk","yk","resquarify","_squarify","rho","SQRT2","ux0","uy0","ux1","uy1","coshr0","colorHsl","hslLong","colorLab","colorHcl","hclLong","cubehelixGamma","colorCubehelix","cubehelixLong","piecewise","interpolator","samples","lexicographicOrder","computeUpperHullIndexes","sortedPoints","flippedPoints","upperIndexes","lowerIndexes","skipLeft","skipRight","hull","inside","perimeter","sourceRandomUniform","randomUniform","sourceRandomNormal","randomNormal","mu","sigma","sourceRandomLogNormal","randomLogNormal","sourceRandomIrwinHall","randomIrwinHall","sourceRandomBates","randomBates","irwinHall","sourceRandomExponential","randomExponential","initRange","initInterpolator","implicit","ordinal","unknown","band","ordinalRange","rescale","sequence","rangeRound","pointish","unit","normalize","clamper","bimap","d0","polymap","clamp","untransform","interpolateValue","interpolateRound","continuous","precisionPrefix","precisionRound","precisionFixed","linearish","nice","transformLog","transformExp","transformLogn","transformExpn","pow10","reflect","loggish","logs","pows","base","log10","log2","logp","powp","transformSymlog","log1p","transformSymexp","expm1","symlogish","symlog","transformPow","transformSqrt","transformSquare","powish","invertExtent","quantiles","quantize","newInterval","floori","offseti","field","setMonth","setHours","setFullYear","getFullYear","years","month","setDate","getMonth","months","weekday","getDate","getDay","getTimezoneOffset","sunday","monday","tuesday","wednesday","thursday","friday","saturday","sundays","mondays","tuesdays","wednesdays","thursdays","fridays","saturdays","day","days","hour","getMilliseconds","getSeconds","getMinutes","minute","second","millisecond","utcWeekday","setUTCDate","getUTCDay","setUTCHours","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcSundays","utcMondays","utcTuesdays","utcWednesdays","utcThursdays","utcFridays","utcSaturdays","utcDay","utcDays","utcYear","setUTCMonth","setUTCFullYear","utcYears","localDate","H","L","utcDate","UTC","newDate","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_weekdays","locale_shortWeekdays","shortDays","locale_months","locale_shortMonths","shortMonths","periodRe","formatRe","periodLookup","formatLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatDayOfMonth","formatMicroseconds","formatYearISO","formatFullYearISO","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMonthNumber","formatMinutes","formatUnixTimestamp","formatUnixTimestampSeconds","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatYear","formatFullYear","formatZone","formatLiteralPercent","utcFormats","formatUTCDayOfMonth","formatUTCMicroseconds","formatUTCYearISO","formatUTCFullYearISO","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","parses","parseSpecifier","parseDayOfMonth","parseMicroseconds","parseYear","parseFullYear","parseHour24","parseDayOfYear","parseMilliseconds","parseMonthNumber","parseMinutes","parseQuarter","parseUnixTimestamp","parseUnixTimestampSeconds","parseSeconds","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekdayNumberSunday","parseWeekNumberMonday","parseZone","parseLiteralPercent","pads","charAt","newParse","Z","week","Q","V","timeMonday","timeDay","U","utcFormat","utcParse","timeFormat","timeParse","numberRe","percentRe","requoteRe","requote","timeYear","timeSunday","dISO","timeThursday","dow","UTCdISO","calendar","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","tickIntervals","durationSecond","durationMinute","durationHour","durationDay","tickInterval","timeMonth","timeWeek","timeHour","timeMinute","timeSecond","timeMillisecond","utcMonth","utcMonths","utcHour","setUTCMinutes","utcHours","utcMinute","setUTCSeconds","utcMinutes","utcWeek","utcSecond","utcMillisecond","k10","sequential","sequentialLog","sequentialSymlog","sequentialPow","sequentialSqrt","sequentialQuantile","k21","diverging","divergingLog","divergingSymlog","divergingPow","divergingSqrt","scheme","interpolateRgbBasis","ramp","interpolateCubehelixLong","warm","cool","ts","pi_1_3","pi_2_3","magma","inferno","plasma","nextId","Local","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","arcEndAngle","arcPadAngle","x10","y10","x32","y32","cornerTangents","rc","ox","oy","x11","y11","D","cx0","cx1","dx0","dy0","dx1","dy1","cornerRadius","padRadius","a01","a11","a10","da0","da1","ap","rp","rc0","rc1","oc","bx","by","kc","lc","Linear","areaStart","areaEnd","pointX","pointY","defined","curve","curveLinear","defined0","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","descending","pie","arcs","pa","curveRadialLinear","curveRadial","Radial","_curve","radial","lineRadial","lineStartAngle","lineEndAngle","lineInnerRadius","lineOuterRadius","linkSource","linkTarget","curveHorizontal","curveVertical","pointRadial","p2","p3","linkHorizontal","linkVertical","linkRadial","draw","tan30","tan30_2","kr","sqrt3","symbols","cross","diamond","square","star","triangle","wye","Basis","BasisClosed","_x2","_x3","_x4","_y2","_y3","_y4","BasisOpen","Bundle","_basis","_beta","bundle","_k","Cardinal","tension","cardinal","CardinalClosed","_x5","_y5","CardinalOpen","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","_alpha","x23","y23","catmullRom","CatmullRomClosed","CatmullRomOpen","LinearClosed","slope3","h0","h1","slope2","MonotoneX","MonotoneY","ReflectContext","monotoneX","monotoneY","Natural","controlPoints","_t0","px","py","Step","_t","stepBefore","stepAfter","series","stackValue","orderNone","offsetNone","stack","oz","kz","sz","sij","ki","si","yn","s2","sij0","s3","peaks","peak","vi","vj","appearance","tops","bottoms","formatIso","toISOString","parseIso","total","RedBlackTree","RedBlackNode","R","P","RedBlackRotateLeft","RedBlackRotateRight","RedBlackFirst","after","grandpa","uncle","sibling","createEdge","edge","edges","setEdgeEnd","cells","halfedges","createBorderEdge","vertex","clipEdge","connectEdge","fm","fb","lx","ly","rx","ry","cellHalfedgeAngle","cell","site","va","vb","cellHalfedgeStart","cellHalfedgeEnd","firstCircle","circlePool","Circle","attachCircle","lArc","rArc","lSite","cSite","rSite","epsilon2","ha","hc","detachCircle","beachPool","Beach","createBeach","beach","detachBeach","beaches","removeBeach","disappearing","epsilon","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","createCell","newArc","hb","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","lexicographic","Diagram","sites","sortCellHalfedges","clipEdges","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","dc","v01","v11","v10","clipCells","triangles","_found","voronoi","ZoomEvent","Transform","applyX","applyY","location","invertX","invertY","rescaleX","rescaleY","__zoom","SVGElement","clientWidth","clientHeight","defaultTransform","defaultWheelDelta","deltaY","deltaMode","defaultConstrain","translateExtent","touchstarting","constrain","wheelDelta","scaleExtent","interpolateZoom","zoom","wheeled","dblclicked","__zooming","Gesture","taps","wheel","wheelidled","k1","touch0","touch1","l0","l1","dp","dl","collection","scaleBy","scaleTo","k0","translateBy","translateTo","_createForOfIteratorHelper","Symbol","iterator","F","done","_e","it","err","normalCompletion","didErr","_e2","hasValue","isFilled","obj","SSR","defaultValue","isAdornedStart","startAdornment","module","exports","ChartInternal","api","$$","require","config","getDefaultConfig","axes","Chart","internal","loadConfig","beforeInit","afterInit","bindThis","fn","argThis","asHalfPixel","ceil10","diffDomain","getOption","options","isDefined","getPathBox","box","getBBox","items","pathSegList","getItem","element","ignore","isEmpty","isString","isFunction","isNumber","isUndefined","isValue","notEmpty","sanitise","str","isIE","ver","agent","userAgent","pos","getIEVersion","AxisInternal","component","scaleLinear","innerTickSize","outerTickSize","withOuterTick","tickOffset","tickCulling","tickCentered","tickTextCharSize","tickTextRotate","tickLength","generateAxis","axisX","axisY","generateTicks","copyScale","newScale","isCategory","textFormatted","formatted","updateRange","rangeExtent","updateTickTextCharSize","isVertical","tspanData","splitted","tickMultiline","splitTickText","tickMultilineMax","ellipsify","subtext","spaceIndex","textWidth","tickText","maxWidth","tickWidth","substr","ellipsified","remaining","available","padEnd","updateTickLength","lineY2","tickPosition","textY","textTransform","textTextAnchor","tspanDx","tspanDy","tickTransform","tickX","tickY","scale0","__chart__","scale1","ticksValues","tickUpdate","lineUpdate","textUpdate","tspans","tspanUpdate","pathUpdate","rangeBand","isCentered","getTotalLength","culling","CLASS","chart","chartLine","chartLines","chartBar","chartBars","chartText","chartTexts","chartArc","chartArcs","chartArcsTitle","chartArcsBackground","chartArcsGaugeUnit","chartArcsGaugeMax","chartArcsGaugeMin","selectedCircle","selectedCircles","eventRect","eventRects","eventRectsSingle","eventRectsMultiple","zoomRect","dragZoom","focused","defocused","region","regions","title","tooltipContainer","tooltip","tooltipName","shape","shapes","bar","bars","arcLabelLine","areas","texts","gaugeValue","grid","gridLines","xgrid","xgrids","xgridLine","xgridLines","xgridFocus","ygrid","ygrids","ygridLine","ygridLines","colorScale","stanfordElements","stanfordLine","stanfordLines","stanfordRegion","stanfordRegions","stanfordText","stanfordTexts","axisXLabel","axisYLabel","axisY2","axisY2Label","legendBackground","legendItem","legendItemEvent","legendItemTile","legendItemHidden","legendItemFocused","dragarea","EXPANDED","SELECTED","INCLUDED","AxisClass","owner","Axis","main","axis_x_inner","clipPathForXAxis","getTranslate","axis_x_show","axis_rotated","textAnchorForXAxisLabel","axis_y_inner","clipPathForYAxis","axis_y_show","textAnchorForYAxisLabel","axis_y2_show","textAnchorForY2AxisLabel","getXAxis","withoutTransition","withoutRotateTickText","axisParams","isCategorized","axis_x_tick_multiline","axis_x_tick_multilineMax","axis_x_tick_width","axis_x_tick_rotate","isTimeSeries","parseDate","axis_x_tick_centered","axis_x_tick_culling","updateXAxisTickValues","targets","axis_x_tick_fit","axis_x_tick_count","generateTickValues","mapTargetsToUniqueXs","xAxis","subXAxis","getYAxis","axisId","isAxisNormalized","axis_y_tick_rotate","isTimeSeriesY","axis_y_tick_time_type","axis_y_tick_time_interval","getId","data_axes","getXAxisTickFormat","defaultAxisTimeFormat","categoryName","axis_x_tick_format","axisTimeFormat","getTickValues","getXAxisTickValues","axis_x_tick_values","getYAxisTickValues","axis_y_tick_values","yAxis","getY2AxisTickValues","axis_y2_tick_values","y2Axis","getLabelOptionByAxisId","option","axis_y_label","axis_y2_label","axis_x_label","getLabelText","setLabelText","getLabelPosition","defaultPosition","isInner","isOuter","isLeft","isCenter","isRight","isTop","isMiddle","isBottom","getXAxisLabelPosition","getYAxisLabelPosition","getY2AxisLabelPosition","getLabelPositionById","textForXAxisLabel","textForYAxisLabel","textForY2AxisLabel","xForAxisLabel","forHorizontal","dxForAxisLabel","textAnchorForAxisLabel","xForXAxisLabel","xForYAxisLabel","xForY2AxisLabel","dxForXAxisLabel","dxForYAxisLabel","dxForY2AxisLabel","dyForXAxisLabel","getMaxTickWidth","getHorizontalAxisHeight","dyForYAxisLabel","dyForY2AxisLabel","axis_y2_inner","withoutRecompute","targetsToShow","dummy","currentMaxTickWidths","filterTargetsToShow","getYDomain","yOrient","yAxisTickValues","y2Orient","y2AxisTickValues","getXDomain","xOrient","xAxisTickFormat","xAxisTickValues","updateLabels","withTransition","getPadding","domainLength","convertPixelsToAxisPadding","pixels","tickCount","forTimeSeries","targetCount","tickValue","generateTransitions","axisSubX","subx","isHidden","generate","c3LogScale","linearScale","logScale","PROJECTION","scaleLog","len","arr","tmp","logspace","powerOfTen","initParams","data_url","convertUrlToData","data_mimeType","data_headers","data_keys","initWithData","data_json","convertJsonToData","data_rows","convertRowsToData","data_columns","convertColumnsToData","clipId","clipIdForXAxis","clipIdForYAxis","clipIdForGrid","clipIdForSubchart","clipPath","getClipPath","clipPathForGrid","clipPathForSubchart","dragStart","dragging","flowing","cancelClick","mouseover","transiting","generateColor","levelColor","generateLevelColor","dataTimeParse","data_xLocaltime","data_xFormat","axis_x_localtime","hiddenTargetIds","hiddenLegendIds","focusedTargetIds","defocusedTargetIds","subXOrient","isLegendRight","legend_position","isLegendInset","isLegendTop","legend_inset_anchor","isLegendLeft","legendStep","legendItemWidth","legendItemHeight","rotated_padding_left","rotated_padding_right","rotated_padding_top","withoutFadeIn","intervalForObserveInserted","initChartElements","initBar","initLine","initArc","initGauge","initText","defs","binding","bindto","selectChart","observeInserted","xs","convertDataToTargets","data_filter","data_hide","addHiddenTargetIds","mapToIds","legend_hide","addHiddenLegendIds","isStanfordGraphType","initStanfordData","updateSizes","updateScales","subX","subY","subY2","orgXDomain","onmouseover","onmouseout","svg_classname","clipChart","appendClip","clipXAxis","clipYAxis","clipGrid","clipSubchart","updateSvgSize","initPie","initDragZoom","subchart_show","initSubchart","initTooltip","initLegend","initTitle","initZoom","drawColorScale","initSubchartBrush","initRegion","initGrid","grid_lines_front","initGridLines","initStanfordElements","initEventRect","updateTargets","axis_x_selection","selectionAsValue","getDefaultSelection","updateDimension","oninit","withTransform","withUpdateXDomain","withUpdateOrgXDomain","withTransitionForAxis","bindResize","bindWindowFocus","smoothLines","el","legendHeight","legend","getLegendHeight","legendWidth","getLegendWidth","legendHeightForBottom","hasArc","hasArcType","xAxisHeight","subchartXAxisHeight","subchartHeight","subchart_size_height","currentWidth","getCurrentWidth","currentHeight","getCurrentHeight","margin","getCurrentPaddingTop","getCurrentPaddingRight","getCurrentPaddingBottom","getCurrentPaddingLeft","margin2","margin3","updateSizeForLegend","width2","height2","arcWidth","arcHeight","hasType","gauge_fullCircle","getGaugeLabelHeight","updateRadius","radiusExpanded","updateTargetsForText","updateTargetsForBar","updateTargetsForLine","updateTargetsForArc","updateTargetsForSubchart","showTargets","isTargetToShow","transition_duration","transitions","withY","withSubchart","withTransitionForExit","withTrimXDomain","withLegend","withEventRect","withDimension","withUpdateXAxis","drawArea","drawBar","drawLine","xForText","yForText","durationForExit","durationForAxis","transitionsToWait","waitForDraw","flow","intervalForCulling","xDomainForZoom","areaIndices","getShapeIndices","isAreaType","barIndices","isBarType","lineIndices","isLineType","hideAxis","xv","legend_show","updateLegend","updateXDomain","zoom_rescale","orgDomain","axis_y_tick_count","axis_y2_tick_count","axis_x_tick_culling_max","generateDrawArea","generateDrawBar","generateDrawLine","generateXYForText","updateCircleY","circleY","circleX","updateXgridFocus","data_empty_label_text","redrawEventRect","updateGrid","updateStanfordElements","updateRegion","updateBar","updateLine","updateArea","updateCircle","hasDataLabel","updateText","redrawTitle","redrawArc","redrawSubchart","generateFlow","isTabVisible","redrawBar","redrawLine","redrawArea","redrawCircle","redrawText","redrawRegion","redrawGrid","generateWait","onrendered","updateAndRedraw","withTransitionForTransform","transformAll","redrawWithoutRescale","axis_x_type","isCustomX","data_x","data_xs","axis_y_type","initialOpacity","initialOpacityForCircle","opacityForCircle","point_show","isStanfordType","isScatterType","opacityForText","xx","xvCustom","xyValue","axis_x_categories","yvCustom","yScale","yv","subxx","transformMain","transformContext","transformLegend","getXAxisClipX","getXAxisClipY","getXAxisClipWidth","getXAxisClipHeight","getYAxisClipX","getYAxisClipY","getYAxisClipWidth","getYAxisClipHeight","withoutAxis","observer","MutationObserver","mutations","mutation","disconnect","observe","attributes","childList","characterData","console","resizeFunction","generateResize","onresize","resize_auto","resizeTimeout","onresized","resizeIfElementDisplayed","offsetParent","_this","windowFocusHandler","unbindWindowFocus","resizeFunctions","callResizeFunctions","endall","parsedDate","hidden","SVGPathSeg","typeAsLetter","owningPathSegList","pathSegType","pathSegTypeAsLetter","_owningPathSegList","classname","PATHSEG_UNKNOWN","PATHSEG_CLOSEPATH","PATHSEG_MOVETO_ABS","PATHSEG_MOVETO_REL","PATHSEG_LINETO_ABS","PATHSEG_LINETO_REL","PATHSEG_CURVETO_CUBIC_ABS","PATHSEG_CURVETO_CUBIC_REL","PATHSEG_CURVETO_QUADRATIC_ABS","PATHSEG_CURVETO_QUADRATIC_REL","PATHSEG_ARC_ABS","PATHSEG_ARC_REL","PATHSEG_LINETO_HORIZONTAL_ABS","PATHSEG_LINETO_HORIZONTAL_REL","PATHSEG_LINETO_VERTICAL_ABS","PATHSEG_LINETO_VERTICAL_REL","PATHSEG_CURVETO_CUBIC_SMOOTH_ABS","PATHSEG_CURVETO_CUBIC_SMOOTH_REL","PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS","PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL","_segmentChanged","segmentChanged","SVGPathSegClosePath","_asPathString","SVGPathSegMovetoAbs","defineProperty","enumerable","SVGPathSegMovetoRel","SVGPathSegLinetoAbs","SVGPathSegLinetoRel","SVGPathSegCurvetoCubicAbs","SVGPathSegCurvetoCubicRel","SVGPathSegCurvetoQuadraticAbs","SVGPathSegCurvetoQuadraticRel","SVGPathSegArcAbs","largeArcFlag","sweepFlag","_r1","_r2","_angle","_largeArcFlag","_sweepFlag","SVGPathSegArcRel","SVGPathSegLinetoHorizontalAbs","SVGPathSegLinetoHorizontalRel","SVGPathSegLinetoVerticalAbs","SVGPathSegLinetoVerticalRel","SVGPathSegCurvetoCubicSmoothAbs","SVGPathSegCurvetoCubicSmoothRel","SVGPathSegCurvetoQuadraticSmoothAbs","SVGPathSegCurvetoQuadraticSmoothRel","SVGPathElement","createSVGPathSegClosePath","createSVGPathSegMovetoAbs","createSVGPathSegMovetoRel","createSVGPathSegLinetoAbs","createSVGPathSegLinetoRel","createSVGPathSegCurvetoCubicAbs","createSVGPathSegCurvetoCubicRel","createSVGPathSegCurvetoQuadraticAbs","createSVGPathSegCurvetoQuadraticRel","createSVGPathSegArcAbs","createSVGPathSegArcRel","createSVGPathSegLinetoHorizontalAbs","createSVGPathSegLinetoHorizontalRel","createSVGPathSegLinetoVerticalAbs","createSVGPathSegLinetoVerticalRel","createSVGPathSegCurvetoCubicSmoothAbs","createSVGPathSegCurvetoCubicSmoothRel","createSVGPathSegCurvetoQuadraticSmoothAbs","createSVGPathSegCurvetoQuadraticSmoothRel","getPathSegAtLength","measurementElement","lastPathSegment","numberOfItems","removeItem","SVGPathSegList","pathElement","_pathElement","_list","_parsePath","_mutationObserverConfig","attributeFilter","_pathElementMutationObserver","_updateListFromPathMutations","_checkPathSynchronizedToList","_pathSegList","takeRecords","mutationRecords","hasPathMutations","record","attributeName","_writeListToPath","_pathSegArrayAsString","pathSeg","newItem","_checkValidIndex","insertItemBefore","replaceItem","item","appendItem","pathSegArray","Builder","appendSegment","Source","_currentIndex","_endIndex","_previousCommand","_skipOptionalSpaces","_isCurrentSpace","character","_skipOptionalSpacesOrDelimiter","hasMoreData","peekSegmentType","lookahead","_pathSegTypeFromChar","_nextCommandHelper","previousCommand","initialCommandIsMoveTo","command","_parseNumber","integer","frac","expsign","startIntPartIndex","scanIntPartIndex","multiplier","_parseArcFlag","flag","flagChar","parseSegment","arcAngle","arcLarge","arcSweep","builder","targetLength","padString","repeat","varArgs","nextSource","nextKey","labels","axis_x_max","axis_y_max","axis_y2_max","axis_x_min","axis_y_min","axis_y2_min","axis_y2_type","category","categories","size_width","size_height","flush","destroy","targetIds","shown","targetId","flat","ret","dataValue","clearLegendItemTextBoxCache","updateDataAttributes","stackNormalized","normalized","isStackNormalized","data_stack_normalize","donut","donut_padAngle","baseTarget","baseValue","diff","notfoundIds","orgDataCount","getMaxDataCount","tail","found","getOtherTargetX","missing","mainRegion","mainText","mainBar","mainLine","mainArea","mainCircle","flowIndex","flowLength","flowStart","getValueOnIndex","flowEnd","durationForFlow","wait","updateXGrid","hideXGridFocus","flowTransition","easeLinear","isRegionOnX","xgridAttr","regionX","regionWidth","focus","candidates","mapToTargetIds","selectorTargets","revert","defocus","expandArc","toggleFocusLegend","unexpandArc","showLegend","isLegendToShow","selectorLegends","grids","grid_x_lines","removeGridLines","grid_y_lines","data_groups","show","hide","hideLegend","load","addXs","classes","data_classes","data_colors","hasCaches","cacheIds","getCaches","unload","loadFromArgs","ids","pie_padAngle","selected","getTargetSelectorSuffix","indices","resetOther","data_selection_enabled","toggle","getToggle","isTargetId","data_selection_grouped","isTargetIndex","isSelected","data_selection_isselectable","unselect","removeHiddenTargetIds","subchart","isShown","getTargets","removeSubchart","filterByX","getMousePosition","tooltip_onshow","tooltip_onhide","transformTo","optionsForRedraw","setTargetType","updateTargetX","updateTargetXs","zoom_onzoom","enable","enabled","zoom_enabled","unzoom","zoom_x_max","zoom_x_min","getPadAngle","orderFct","getOrderFunction","isOrderAsc","isOrderDesc","defaultSort_1","gauge_width","donut_width","gaugeArcWidth","gauge_arcs_minWidth","innerRadiusRatio","updateArc","svgArc","getSvgArc","svgArcExpanded","getSvgArcExpanded","svgArcExpandedSub","updateAngle","gMin","gMax","gTic","gValue","isGaugeType","gauge_min","gauge_max","gauge_startingAngle","hasGaugeType","singleArcWidth","withoutUpdate","updated","rate","expandWidth","getArc","isArcType","transformForArcLabel","hasGauge","donut_label_ratio","pie_label_ratio","getArcRatio","getRatio","convertToArcData","addName","textForArcLabel","shouldShowArcLabel","meetsArcLabelThreshold","getArcLabelFormat","defaultArcValueFormat","textForGaugeMinMax","isMax","getGaugeLabelExtents","shouldExpand","expandDuration","isDonutType","donut_expand_duration","gauge_expand_duration","isPieType","pie_expand_duration","donut_expand","gauge_expand","pie_expand","shouldShow","donut_label_show","pie_label_show","donut_label_threshold","pie_label_threshold","pie_label_format","gauge_label_format","donut_label_format","gauge_label_extents","getArcTitle","donut_title","mainPieEnter","classChartArc","classArcs","classFocus","mainArc","arcLabelLines","mainArcLabelLine","arcData","classArc","interaction_enabled","_current","gauge_labelLine_show","lineLength","innerLineLength","lineAngle","linePositioningAngle","data_onmouseover","selectedData","showTooltip","revertLegend","hideTooltip","data_onmouseout","toggleShape","data_onclick","interpolated","index_1","backgroundArc","gauge_label_show","gauge_units","addToCache","getFromCache","resetCache","addCache","cloneTarget","generateTargetClass","generateClass","classText","classTexts","classShape","classShapes","classLine","classLines","classCircle","classCircles","classBar","classBars","classArea","classAreas","classRegion","classEvent","classTarget","additionalClassSuffix","additionalClass","classFocused","classDefocused","classChartText","classChartLine","classChartBar","targetClass","CSS","escape","selectorTarget","selectorLegend","URL","getAxisClipX","getAxisClipY","getAxisClipWidth","getAxisClipHeight","pattern","color_pattern","schemeCategory10","data_color","color_threshold","asValue","padding_left","padding_right","padding_top","padding_bottom","zoom_initialRange","zoom_type","zoom_disableDefaultBehavior","zoom_privileged","zoom_onzoomstart","zoom_onzoomend","interaction_brighten","data_epochs","data_xSort","data_idConverter","data_names","data_type","data_types","data_labels","data_order","data_regions","data_selection_multiple","data_selection_draggable","data_onselected","data_onunselected","subchart_axis_x_show","subchart_onbrush","legend_inset_x","legend_inset_y","legend_inset_step","legend_item_onclick","legend_item_onmouseover","legend_item_onmouseout","legend_equally","legend_padding","legend_item_tile_width","legend_item_tile_height","axis_x_tick_outer","axis_x_padding","axis_x_height","axis_y_inverted","axis_y_center","axis_y_tick_format","axis_y_tick_outer","axis_y_padding","axis_y_default","axis_y2_inverted","axis_y2_center","axis_y2_tick_format","axis_y2_tick_outer","axis_y2_padding","axis_y2_default","grid_x_show","grid_x_type","grid_y_show","grid_y_ticks","grid_focus_show","point_r","point_sensitivity","point_focus_expand_enabled","point_focus_expand_r","point_select_r","line_connectNull","line_step_type","bar_width","bar_width_ratio","bar_width_max","bar_zerobased","bar_space","area_zerobased","area_above","spline_interpolation_type","stanford_lines","stanford_regions","stanford_texts","stanford_scaleMin","stanford_scaleMax","stanford_scaleWidth","stanford_scaleFormat","stanford_scaleValues","stanford_colors","stanford_padding","tooltip_show","tooltip_grouped","tooltip_order","tooltip_format_title","tooltip_format_name","tooltip_format_value","tooltip_horizontal","tooltip_position","tooltip_contents","defaultTitleFormat","defaultValueFormat","getTooltipContent","tooltip_init_show","tooltip_init_x","tooltip_init_position","title_text","title_padding","title_position","additionalConfig","read","this_config","url","mimeType","headers","converter","convertXsvToData","catch","xsv","_a","targetKeys","new_rows","new_row","findValueInJson","pathArray","newRows","newRow","appendXs","epochs","isX","isEpochs","isNotXAndNotEpochs","isNotX","xKey","getXKey","rawX","generateTargetX","getOtherTargetXs","getXValuesOfXKey","convertedId","id_org","returnData","hasNegativeValue","hasNegativeValueInTargets","hasPositiveValue","hasPositiveValueInTargets","dict","some","isTargetNormalized","includes","getTotalPerIndex","cached","sumByAxis","getTotalDataSum","totalDataSum","xValues","getXValue","idsForX","valueOnIndex","hasTarget","getTargetsToShow","removeHiddenLegendIds","getValuesAsIdKeyed","ys","checkValueInTargets","checker","orderAsc","orderDesc","reducer","t1Sum","t2Sum","orderTargets","fct","filterByIndex","filterRemoveNull","filterByXDomain","xDomain","getDataLabelLength","lengths","dataLabelFormat","isNoneArc","isArc","findClosestFromTargets","findClosest","horizontalDistance","dist","findClosestFromTargetsByX","newDiff","dataPoints","computeDist","minDist","isWithinBar","xIndex","yIndex","convertValuesToStep","converted","asPercent","attrs","getYDomainMin","baseId","idsInGroup","getYDomainMax","yDomainAbs","isAllPositive","isAllNegative","targetsByAxisId","yTargets","yMin","yMax","yDomainMin","yDomainMax","isZeroBased","isInverted","showHorizontalDataLabel","showVerticalDataLabel","pixelsToAxisPadding","getY","getXDomainMin","getXDomainMax","getXDomainPadding","maxDataCount","firstX","lastX","getTime","withTrim","updateScale","trimXDomain","zoomDomain","getZoomDomain","mx","my","minX","maxX","minY","_w","_h","isIncluded","isWithin","togglePoint","togglePath","dragstart","dragend","getYFormat","forArc","formatForY","yFormat","formatForY2","y2Format","defaultFormat","xgridData","generateGridData","xgridEnter","updateYGrid","gridValues","ygridEnter","gridTextAnchor","gridTextDx","xGridTextX","yGridTextX","xgridLineEnter","ygridLineEnter","showXGridFocus","dataToShow","focusEl","firstYear","lastYear","gridData","tickNum","getGridFilterToRemove","param","forX","toRemove","toShow","zoomTransform","mouseout","unexpandCircles","unexpandBars","isHoveringDataPoint","withName","isMouseCloseToDataPoint","closestByX","mouseX","expandCircles","expandBars","isWithinShape","getYScale","initMouseEvent","legendItemTextBox","legendHasRendered","updateLegendWithDefaults","insetLegendPosition","updateLegendStep","updateLegendItemWidth","updateLegendItemHeight","opacityForLegend","opacityForUnfocusedLegend","xForLegend","xForLegendText","xForLegendRect","yForLegend","yForLegendText","yForLegendRect","x1ForLegendTile","x2ForLegendTile","yForLegendTile","rects","tiles","background","maxHeight","tileWidth","totalLength","offsets","widths","heights","margins","steps","updatePositions","textElement","maxLength","isLast","getTextRect","getTextBox","itemWidth","itemHeight","itemLength","areaLength","updateValues","withoutStep","regionY","regionHeight","labelRegion","regionLabels","labelOffsetX","labelOffsetY","labelTransform","label","vertical","paddingX","paddingY","getScale","forTimeseries","scaleTime","getX","_scale","raw","getSubYScale","forInit","xMin","xMax","subXMin","subXMax","subYMin","subYMax","selectPoint","pointSelectR","unselectPoint","selectPath","unselectPath","nodeName","isStepType","barData","mainBarEnter","getBarW","barTargetsNum","getBars","isSub","getPoints","generateGetBarPoints","indexX","indexY","__max__","barW","barX","getShapeX","barY","getShapeY","barOffset","getShapeOffset","barSpaceOffset","posX","posY","barShape","sensitivity","xStart","xEnd","yStart","yEnd","isWithinBox","typeFilter","targetsNum","rowValues","isWithinStep","isWithinCircle","getInterpolate","curveLinearClosed","curveBasis","curveBasisOpen","curveBasisClosed","curveBundle","curveCardinal","curveCardinalOpen","curveCardinalClosed","monotone","curveMonotoneX","curveStep","curveStepBefore","curveStepAfter","isSplineType","mainLineEnter","lineData","generateGetLinePoints","yScaleGetter","xValue","yValue","lineWithRegions","lineTargetsNum","lineOffset","_regions","sWithRegion","diffx2","xOffset","isWithinRegions","generateM","x_diff","xv0","xv1","mainAreaEnter","orgAreaOpacity","generateGetAreaPoints","getAreaBaseValue","areaTargetsNum","areaOffset","lineOrScatterOrStanfordData","mainCircleEnter","pointR","getStanfordPointColor","getCircles","pointExpandedR","d3_this","getParentWidth","getParentHeight","getTitlePadding","getAxisWidthByAxisId","legendWidthOnRight","getColorScalePadding","getParentRectValue","tagName","offsetWidth","getSvgLeft","hasLeftAxisRect","leftAxisClass","leftAxis","svgRect","chartRect","svgLeft","isSubchart","initBrush","redrawForBrush","updateExtent","contextLineEnter","contextLine","contextBarEnter","contextBar","updateBarForSubchart","redrawBarForSubchart","drawBarOnSub","updateLineForSubchart","redrawLineForSubchart","drawLineOnSub","updateAreaForSubchart","contextArea","contextAreaEnter","redrawAreaForSubchart","drawAreaOnSub","zoomIdentity","mainTextEnter","barOrLineData","forFlow","cls","font","getAreaPoints","getBarPoints","getLinePoints","getter","getXForText","getYForText","xPos","yPos","isSafari","isChrome","xForTitle","yForTitle","barWidth","legendAxis","axisScale","inverseScale","scaleSequential","minEpochs","maxEpochs","xForColorScale","compareEpochs","interpolateHslLong","colorscale","scaleSequentialLog","getCentroid","getRegionArea","getStanfordTooltipTitle","labelX","labelY","countEpochsInRegion","accumulator","currentValue","pointInRegion","percentage","stanfordLineEnter","stanfordRegionEnter","stanfordTextEnter","countPointsInRegion","content","getTooltipSortFunction","sortFunction","bgcolor","titleFormat","nameFormat","valueFormat","tooltipSortFunction","tooltipPosition","tWidth","tHeight","tooltipLeft","tooltipRight","tooltipTop","chartRight","positionFunction","ua","startEvent","redrawForZoom","updateDomain","brushXPos","brushYPos","getZoomedDomain","dragZoomBrush","zoomedDomain","createSvgIcon","NativeSelectInput","ref","className","disabled","IconComponent","inputRef","_props$variant","variant","_objectWithoutProperties","_extends","clsx","multiple","icon","capitalize","ListContext","ownKeys","enumerableOnly","getOwnPropertySymbols","sym","getOwnPropertyDescriptor","_objectSpread2","getOwnPropertyDescriptors","defineProperties","Button","_props$color","_props$component","_props$disabled","_props$disableElevati","disableElevation","_props$disableFocusRi","disableFocusRipple","endIconProp","endIcon","focusVisibleClassName","_props$fullWidth","fullWidth","_props$size","startIconProp","startIcon","_props$type","ButtonBase","colorInherit","focusRipple","focusVisible","withStyles","theme","typography","boxSizing","minWidth","borderRadius","palette","primary","short","textDecoration","backgroundColor","action","hoverOpacity","display","alignItems","justifyContent","textPrimary","textSecondary","secondary","outlined","border","disabledBackground","outlinedPrimary","outlinedSecondary","contained","getContrastText","boxShadow","shadows","A100","containedPrimary","contrastText","dark","containedSecondary","borderColor","textSizeSmall","fontSize","pxToRem","textSizeLarge","outlinedSizeSmall","outlinedSizeLarge","containedSizeSmall","containedSizeLarge","sizeSmall","sizeLarge","marginRight","marginLeft","iconSizeSmall","iconSizeMedium","iconSizeLarge","styles","userSelect","cursor","paper","filled","selectMenu","minHeight","textOverflow","whiteSpace","overflow","pointerEvents","iconOpen","iconFilled","iconOutlined","nativeInput","defaultInput","Input","NativeSelect","_props$IconComponent","ArrowDropDownIcon","_props$input","inputProps","fcs","inputComponent","muiName","ToggleButton","onChange","onClick","isDefaultPrevented","borderLeft","disableUnderline","_props$inputComponent","_props$multiline","multiline","InputBase","underline","bottomLineColor","formControl","marginTop","colorSecondary","borderBottomColor","borderBottom","shorter","easing","easeOut","borderBottomStyle","marginDense","inputMarginDense","inputMultiline","inputTypeSearch","FilledInput","light","borderTopLeftRadius","borderTopRightRadius","adornedStart","adornedEnd","WebkitBoxShadow","WebkitTextFillColor","caretColor","inputHiddenLabel","inputAdornedStart","inputAdornedEnd","List","Component","_props$dense","dense","_props$disablePadding","disablePadding","subheader","Provider","listStyle","nextItem","disableListWrap","nextElementSibling","previousItem","lastChild","previousElementSibling","textCriteriaMatches","nextFocus","textCriteria","innerText","repeating","moveFocus","currentFocus","disabledItemsFocusable","traversalFunction","wrappedOnce","nextFocusDisabled","useEnhancedEffect","MenuList","actions","_props$autoFocus","autoFocus","_props$autoFocusItem","autoFocusItem","_props$disabledItemsF","_props$disableListWra","onKeyDown","listRef","textCriteriaRef","previousKeyMatched","lastTime","adjustStyleForScrollbar","containerElement","noExplicitWidth","scrollbarSize","getScrollbarSize","handleOwnRef","instance","ReactDOM","handleRef","useForkRef","activeItemIndex","newChildProps","tabIndex","role","activeElement","criteria","lowerKey","currTime","keepFocusOnCurrent","RTL_ORIGIN","horizontal","LTR_ORIGIN","Menu","_props$disableAutoFoc","disableAutoFocusItem","_props$MenuListProps","MenuListProps","onClose","onEnteringProp","onEntering","open","_props$PaperProps","PaperProps","PopoverClasses","_props$transitionDura","transitionDuration","_props$TransitionProp","TransitionProps","useTheme","menuListActionsRef","contentAnchorRef","setRef","Popover","getContentAnchorEl","isAppearing","anchorOrigin","transformOrigin","WebkitOverflowScrolling","areEqualValues","_typeof","SelectInput","ariaLabel","autoWidth","displayEmpty","inputRefProp","labelId","_props$MenuProps","MenuProps","onBlur","onFocus","onOpen","openProp","readOnly","renderValue","_props$SelectDisplayP","SelectDisplayProps","tabIndexProp","valueProp","_useControlled","useControlled","controlled","default","_useControlled2","_slicedToArray","setValue","_React$useState","displayNode","setDisplayNode","isOpenControlled","_React$useState2","menuMinWidthState","setMenuMinWidthState","_React$useState3","openState","setOpenState","getElementById","handler","getSelection","isCollapsed","displaySingle","childrenArray","toArray","handleItemClick","newValue","itemIndex","persist","displayMultiple","computeDisplay","_formatMuiErrorMessage","onKeyUp","menuMinWidth","buttonId","Boolean","onMouseDown","dangerouslySetInnerHTML","__html","anchorEl","nativeSelectStyles","_ref2","Select","_props$autoWidth","_props$displayEmpty","_props$labelWidth","labelWidth","_props$multiple","_props$native","native","variantProps","InputComponent","standard","OutlinedInput","mergeClasses","baseClasses","newClasses","isValueSelected","candidate","ToggleButtonGroup","_props$exclusive","exclusive","_props$orientation","orientation","handleChange","buttonValue","handleExclusiveChange","grouped","flexDirection","groupedHorizontal","borderBottomLeftRadius","borderBottomRightRadius","groupedVertical","borderTop","getStyleValue","computedStyle","visibility","TextareaAutosize","rowsMax","rowsMinProp","rowsMin","maxRowsProp","maxRows","_props$minRows","minRows","minRowsProp","isControlled","shadowRef","renders","setState","syncHeight","inputShallow","placeholder","innerHeight","scrollHeight","singleRowHeight","outerHeight","outerHeightStyle","prevState","handleResize","debounce","ariaDescribedby","autoComplete","endAdornment","_props$inputProps","inputPropsProp","renderSuffix","handleInputRefWarning","process","handleInputPropsRefProp","handleInputRefProp","handleInputRef","setFocused","onFilled","onEmpty","checkDirty","setAdornedStart","currentTarget","onAnimationStart","animationName","hiddenLabel","_len","_key","stopPropagation","placeholderHidden","placeholderVisible","body1","lineHeight","letterSpacing","WebkitTapHighlightColor","animationDuration","NotchedOutline","labelWidthProp","notched","legendLabelled","legendNotched","_defineProperty","borderStyle","borderWidth","textAlign","notchedOutline","ListItem","_props$alignItems","_props$button","childrenProp","componentProp","_props$ContainerCompo","ContainerComponent","_props$ContainerProps","ContainerProps","ContainerClassName","_props$disableGutters","disableGutters","_props$divider","divider","_props$selected","childContext","listItemRef","hasSecondaryAction","isMuiElement","componentProps","gutters","alignItemsFlexStart","secondaryAction","backgroundClip","shortest","hover","MenuItem","ListItemClasses","_props$role","breakpoints","up","body2"],"mappings":"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,sEACAtI,IAAIoiB,IAES6/C,MAAKF,ICZTA,GAAS,IAAItjE,MAAM,GAAG6J,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAtI,IAAIoiB,IAES6/C,MAAKF,ICZTA,GAAS,IAAItjE,MAAM,GAAG6J,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAtI,IAAIoiB,IAES6/C,MAAKF,ICZTA,GAAS,IAAItjE,MAAM,GAAG6J,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAtI,IAAIoiB,IAES6/C,MAAKF,ICZTA,GAAS,IAAItjE,MAAM,GAAG6J,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAtI,IAAIoiB,IAES6/C,MAAKF,ICZTA,GAAS,IAAItjE,MAAM,GAAG6J,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAtI,IAAIoiB,IAES6/C,MAAKF,ICZTA,GAAS,IAAItjE,MAAM,GAAG6J,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAtI,IAAIoiB,IAES6/C,MAAKF,ICZTA,GAAS,IAAItjE,MAAM,GAAG6J,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAtI,IAAIoiB,IAES6/C,MAAKF,ICZTA,GAAS,IAAItjE,MAAM,GAAG6J,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAtI,IAAIoiB,IAES6/C,MAAKF,ICZTA,GAAS,IAAItjE,MAAM,GAAG6J,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAtI,IAAIoiB,IAES6/C,MAAKF,ICVTA,GAAS,IAAItjE,MAAM,GAAG6J,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAtI,IAAIoiB,IAES6/C,MAAKF,ICVTA,GAAS,IAAItjE,MAAM,GAAG6J,OAC/B,qBACA,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","file":"static/js/2.475b1653.chunk.js","sourcesContent":["export default function _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n\n  return _setPrototypeOf(o, p);\n}","import setPrototypeOf from \"./setPrototypeOf\";\nexport default function _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function\");\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function formControlState(_ref) {\n  var props = _ref.props,\n      states = _ref.states,\n      muiFormControl = _ref.muiFormControl;\n  return states.reduce(function (acc, state) {\n    acc[state] = props[state];\n\n    if (muiFormControl) {\n      if (typeof props[state] === 'undefined') {\n        acc[state] = muiFormControl[state];\n      }\n    }\n\n    return acc;\n  }, {});\n}","export default function _isNativeReflectConstruct() {\n  if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n  if (Reflect.construct.sham) return false;\n  if (typeof Proxy === \"function\") return true;\n\n  try {\n    Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n    return true;\n  } catch (e) {\n    return false;\n  }\n}","import getPrototypeOf from \"./getPrototypeOf\";\nimport isNativeReflectConstruct from \"./isNativeReflectConstruct\";\nimport possibleConstructorReturn from \"./possibleConstructorReturn\";\nexport default function _createSuper(Derived) {\n  return function () {\n    var Super = getPrototypeOf(Derived),\n        result;\n\n    if (isNativeReflectConstruct()) {\n      var NewTarget = getPrototypeOf(this).constructor;\n      result = Reflect.construct(Super, arguments, NewTarget);\n    } else {\n      result = Super.apply(this, arguments);\n    }\n\n    return possibleConstructorReturn(this, result);\n  };\n}","import * as React from 'react';\nimport FormControlContext from './FormControlContext';\nexport default function useFormControl() {\n  return React.useContext(FormControlContext);\n}","import _typeof from \"../../helpers/esm/typeof\";\nimport assertThisInitialized from \"./assertThisInitialized\";\nexport default function _possibleConstructorReturn(self, call) {\n  if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n    return call;\n  }\n\n  return assertThisInitialized(self);\n}","export default function _getPrototypeOf(o) {\n  _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  };\n  return _getPrototypeOf(o);\n}","import * as React from 'react';\n/**\n * @ignore - internal component.\n */\n\nvar FormControlContext = React.createContext();\n\nif (process.env.NODE_ENV !== 'production') {\n  FormControlContext.displayName = 'FormControlContext';\n}\n\nexport function useFormControl() {\n  return React.useContext(FormControlContext);\n}\nexport default FormControlContext;","export var name = \"d3\";\nexport var version = \"5.16.0\";\nexport var description = \"Data-Driven Documents\";\nexport var keywords = [\"dom\",\"visualization\",\"svg\",\"animation\",\"canvas\"];\nexport var homepage = \"https://d3js.org\";\nexport var license = \"BSD-3-Clause\";\nexport var author = {\"name\":\"Mike Bostock\",\"url\":\"https://bost.ocks.org/mike\"};\nexport var main = \"dist/d3.node.js\";\nexport var unpkg = \"dist/d3.min.js\";\nexport var jsdelivr = \"dist/d3.min.js\";\nexport var module = \"index.js\";\nexport var repository = {\"type\":\"git\",\"url\":\"https://github.com/d3/d3.git\"};\nexport var files = [\"dist/**/*.js\",\"index.js\"];\nexport var scripts = {\"pretest\":\"rimraf dist && mkdir dist && json2module package.json > dist/package.js && rollup -c\",\"test\":\"tape 'test/**/*-test.js'\",\"prepublishOnly\":\"yarn test\",\"postpublish\":\"git push && git push --tags && cd ../d3.github.com && git pull && cp ../d3/dist/d3.js d3.v5.js && cp ../d3/dist/d3.min.js d3.v5.min.js && git add d3.v5.js d3.v5.min.js && git commit -m \\\"d3 ${npm_package_version}\\\" && git push && cd - && cd ../d3-bower && git pull && cp ../d3/LICENSE ../d3/README.md ../d3/dist/d3.js ../d3/dist/d3.min.js . && git add -- LICENSE README.md d3.js d3.min.js && git commit -m \\\"${npm_package_version}\\\" && git tag -am \\\"${npm_package_version}\\\" v${npm_package_version} && git push && git push --tags && cd - && zip -j dist/d3.zip -- LICENSE README.md API.md CHANGES.md dist/d3.js dist/d3.min.js\"};\nexport var devDependencies = {\"json2module\":\"0.0\",\"rimraf\":\"2\",\"rollup\":\"1\",\"rollup-plugin-ascii\":\"0.0\",\"rollup-plugin-node-resolve\":\"3\",\"rollup-plugin-terser\":\"5\",\"tape\":\"4\"};\nexport var dependencies = {\"d3-array\":\"1\",\"d3-axis\":\"1\",\"d3-brush\":\"1\",\"d3-chord\":\"1\",\"d3-collection\":\"1\",\"d3-color\":\"1\",\"d3-contour\":\"1\",\"d3-dispatch\":\"1\",\"d3-drag\":\"1\",\"d3-dsv\":\"1\",\"d3-ease\":\"1\",\"d3-fetch\":\"1\",\"d3-force\":\"1\",\"d3-format\":\"1\",\"d3-geo\":\"1\",\"d3-hierarchy\":\"1\",\"d3-interpolate\":\"1\",\"d3-path\":\"1\",\"d3-polygon\":\"1\",\"d3-quadtree\":\"1\",\"d3-random\":\"1\",\"d3-scale\":\"2\",\"d3-scale-chromatic\":\"1\",\"d3-selection\":\"1\",\"d3-shape\":\"1\",\"d3-time\":\"1\",\"d3-time-format\":\"2\",\"d3-timer\":\"1\",\"d3-transition\":\"1\",\"d3-voronoi\":\"1\",\"d3-zoom\":\"1\"};\n","export default function(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n  if (compare.length === 1) compare = ascendingComparator(compare);\n  return {\n    left: function(a, x, lo, hi) {\n      if (lo == null) lo = 0;\n      if (hi == null) hi = a.length;\n      while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (compare(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      }\n      return lo;\n    },\n    right: function(a, x, lo, hi) {\n      if (lo == null) lo = 0;\n      if (hi == null) hi = a.length;\n      while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (compare(a[mid], x) > 0) hi = mid;\n        else lo = mid + 1;\n      }\n      return lo;\n    }\n  };\n}\n\nfunction ascendingComparator(f) {\n  return function(d, x) {\n    return ascending(f(d), x);\n  };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(array, f) {\n  if (f == null) f = pair;\n  var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);\n  while (i < n) pairs[i] = f(p, p = array[++i]);\n  return pairs;\n}\n\nexport function pair(a, b) {\n  return [a, b];\n}\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n  var n0 = values0.length,\n      n1 = values1.length,\n      values = new Array(n0 * n1),\n      i0,\n      i1,\n      i,\n      value0;\n\n  if (reduce == null) reduce = pair;\n\n  for (i0 = i = 0; i0 < n0; ++i0) {\n    for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n      values[i] = reduce(value0, values1[i1]);\n    }\n  }\n\n  return values;\n}\n","export default function(a, b) {\n  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(x) {\n  return x === null ? NaN : +x;\n}\n","import number from \"./number\";\n\nexport default function(values, valueof) {\n  var n = values.length,\n      m = 0,\n      i = -1,\n      mean = 0,\n      value,\n      delta,\n      sum = 0;\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (!isNaN(value = number(values[i]))) {\n        delta = value - mean;\n        mean += delta / ++m;\n        sum += delta * (value - mean);\n      }\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (!isNaN(value = number(valueof(values[i], i, values)))) {\n        delta = value - mean;\n        mean += delta / ++m;\n        sum += delta * (value - mean);\n      }\n    }\n  }\n\n  if (m > 1) return sum / (m - 1);\n}\n","import variance from \"./variance\";\n\nexport default function(array, f) {\n  var v = variance(array, f);\n  return v ? Math.sqrt(v) : v;\n}\n","export default function(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      min,\n      max;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        min = max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null) {\n            if (min > value) min = value;\n            if (max < value) max = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        min = max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null) {\n            if (min > value) min = value;\n            if (max < value) max = value;\n          }\n        }\n      }\n    }\n  }\n\n  return [min, max];\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function(x) {\n  return x;\n}\n","export default function(start, stop, step) {\n  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n  var i = -1,\n      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n      range = new Array(n);\n\n  while (++i < n) {\n    range[i] = start + i * step;\n  }\n\n  return range;\n}\n","var e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n  var reverse,\n      i = -1,\n      n,\n      ticks,\n      step;\n\n  stop = +stop, start = +start, count = +count;\n  if (start === stop && count > 0) return [start];\n  if (reverse = stop < start) n = start, start = stop, stop = n;\n  if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n  if (step > 0) {\n    start = Math.ceil(start / step);\n    stop = Math.floor(stop / step);\n    ticks = new Array(n = Math.ceil(stop - start + 1));\n    while (++i < n) ticks[i] = (start + i) * step;\n  } else {\n    start = Math.floor(start * step);\n    stop = Math.ceil(stop * step);\n    ticks = new Array(n = Math.ceil(start - stop + 1));\n    while (++i < n) ticks[i] = (start - i) / step;\n  }\n\n  if (reverse) ticks.reverse();\n\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  var step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log(step) / Math.LN10),\n      error = step / Math.pow(10, power);\n  return power >= 0\n      ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n      : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n  var step0 = Math.abs(stop - start) / Math.max(0, count),\n      step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n      error = step0 / step1;\n  if (error >= e10) step1 *= 10;\n  else if (error >= e5) step1 *= 5;\n  else if (error >= e2) step1 *= 2;\n  return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n  return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","import {slice} from \"./array\";\nimport bisect from \"./bisect\";\nimport constant from \"./constant\";\nimport extent from \"./extent\";\nimport identity from \"./identity\";\nimport range from \"./range\";\nimport {tickStep} from \"./ticks\";\nimport sturges from \"./threshold/sturges\";\n\nexport default function() {\n  var value = identity,\n      domain = extent,\n      threshold = sturges;\n\n  function histogram(data) {\n    var i,\n        n = data.length,\n        x,\n        values = new Array(n);\n\n    for (i = 0; i < n; ++i) {\n      values[i] = value(data[i], i, data);\n    }\n\n    var xz = domain(values),\n        x0 = xz[0],\n        x1 = xz[1],\n        tz = threshold(values, x0, x1);\n\n    // Convert number of thresholds into uniform thresholds.\n    if (!Array.isArray(tz)) {\n      tz = tickStep(x0, x1, tz);\n      tz = range(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive\n    }\n\n    // Remove any thresholds outside the domain.\n    var m = tz.length;\n    while (tz[0] <= x0) tz.shift(), --m;\n    while (tz[m - 1] > x1) tz.pop(), --m;\n\n    var bins = new Array(m + 1),\n        bin;\n\n    // Initialize bins.\n    for (i = 0; i <= m; ++i) {\n      bin = bins[i] = [];\n      bin.x0 = i > 0 ? tz[i - 1] : x0;\n      bin.x1 = i < m ? tz[i] : x1;\n    }\n\n    // Assign data to bins by value, ignoring any outside the domain.\n    for (i = 0; i < n; ++i) {\n      x = values[i];\n      if (x0 <= x && x <= x1) {\n        bins[bisect(tz, x, 0, m)].push(data[i]);\n      }\n    }\n\n    return bins;\n  }\n\n  histogram.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(_), histogram) : value;\n  };\n\n  histogram.domain = function(_) {\n    return arguments.length ? (domain = typeof _ === \"function\" ? _ : constant([_[0], _[1]]), histogram) : domain;\n  };\n\n  histogram.thresholds = function(_) {\n    return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold;\n  };\n\n  return histogram;\n}\n","import number from \"./number\";\n\nexport default function(values, p, valueof) {\n  if (valueof == null) valueof = number;\n  if (!(n = values.length)) return;\n  if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n  if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n  var n,\n      i = (n - 1) * p,\n      i0 = Math.floor(i),\n      value0 = +valueof(values[i0], i0, values),\n      value1 = +valueof(values[i0 + 1], i0 + 1, values);\n  return value0 + (value1 - value0) * (i - i0);\n}\n","import {map} from \"../array\";\nimport ascending from \"../ascending\";\nimport number from \"../number\";\nimport quantile from \"../quantile\";\n\nexport default function(values, min, max) {\n  values = map.call(values, number).sort(ascending);\n  return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(values.length, -1 / 3)));\n}\n","import deviation from \"../deviation\";\n\nexport default function(values, min, max) {\n  return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));\n}\n","export default function(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      max;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null && value > max) {\n            max = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        max = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null && value > max) {\n            max = value;\n          }\n        }\n      }\n    }\n  }\n\n  return max;\n}\n","import number from \"./number\";\n\nexport default function(values, valueof) {\n  var n = values.length,\n      m = n,\n      i = -1,\n      value,\n      sum = 0;\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (!isNaN(value = number(values[i]))) sum += value;\n      else --m;\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (!isNaN(value = number(valueof(values[i], i, values)))) sum += value;\n      else --m;\n    }\n  }\n\n  if (m) return sum / m;\n}\n","import ascending from \"./ascending\";\nimport number from \"./number\";\nimport quantile from \"./quantile\";\n\nexport default function(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      numbers = [];\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (!isNaN(value = number(values[i]))) {\n        numbers.push(value);\n      }\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (!isNaN(value = number(valueof(values[i], i, values)))) {\n        numbers.push(value);\n      }\n    }\n  }\n\n  return quantile(numbers.sort(ascending), 0.5);\n}\n","export default function(arrays) {\n  var n = arrays.length,\n      m,\n      i = -1,\n      j = 0,\n      merged,\n      array;\n\n  while (++i < n) j += arrays[i].length;\n  merged = new Array(j);\n\n  while (--n >= 0) {\n    array = arrays[n];\n    m = array.length;\n    while (--m >= 0) {\n      merged[--j] = array[m];\n    }\n  }\n\n  return merged;\n}\n","export default function(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      min;\n\n  if (valueof == null) {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = values[i]) != null && value >= value) {\n        min = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = values[i]) != null && min > value) {\n            min = value;\n          }\n        }\n      }\n    }\n  }\n\n  else {\n    while (++i < n) { // Find the first comparable value.\n      if ((value = valueof(values[i], i, values)) != null && value >= value) {\n        min = value;\n        while (++i < n) { // Compare the remaining values.\n          if ((value = valueof(values[i], i, values)) != null && min > value) {\n            min = value;\n          }\n        }\n      }\n    }\n  }\n\n  return min;\n}\n","export default function(array, indexes) {\n  var i = indexes.length, permutes = new Array(i);\n  while (i--) permutes[i] = array[indexes[i]];\n  return permutes;\n}\n","import ascending from \"./ascending\";\n\nexport default function(values, compare) {\n  if (!(n = values.length)) return;\n  var n,\n      i = 0,\n      j = 0,\n      xi,\n      xj = values[j];\n\n  if (compare == null) compare = ascending;\n\n  while (++i < n) {\n    if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) {\n      xj = xi, j = i;\n    }\n  }\n\n  if (compare(xj, xj) === 0) return j;\n}\n","export default function(array, i0, i1) {\n  var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),\n      t,\n      i;\n\n  while (m) {\n    i = Math.random() * m-- | 0;\n    t = array[m + i0];\n    array[m + i0] = array[i + i0];\n    array[i + i0] = t;\n  }\n\n  return array;\n}\n","export default function(values, valueof) {\n  var n = values.length,\n      i = -1,\n      value,\n      sum = 0;\n\n  if (valueof == null) {\n    while (++i < n) {\n      if (value = +values[i]) sum += value; // Note: zero and null are equivalent.\n    }\n  }\n\n  else {\n    while (++i < n) {\n      if (value = +valueof(values[i], i, values)) sum += value;\n    }\n  }\n\n  return sum;\n}\n","import min from \"./min\";\n\nexport default function(matrix) {\n  if (!(n = matrix.length)) return [];\n  for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {\n    for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {\n      row[j] = matrix[j][i];\n    }\n  }\n  return transpose;\n}\n\nfunction length(d) {\n  return d.length;\n}\n","import transpose from \"./transpose\";\n\nexport default function() {\n  return transpose(arguments);\n}\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n  return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n    right = 2,\n    bottom = 3,\n    left = 4,\n    epsilon = 1e-6;\n\nfunction translateX(x) {\n  return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n  return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n  return function(d) {\n    return +scale(d);\n  };\n}\n\nfunction center(scale) {\n  var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n  if (scale.round()) offset = Math.round(offset);\n  return function(d) {\n    return +scale(d) + offset;\n  };\n}\n\nfunction entering() {\n  return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n  var tickArguments = [],\n      tickValues = null,\n      tickFormat = null,\n      tickSizeInner = 6,\n      tickSizeOuter = 6,\n      tickPadding = 3,\n      k = orient === top || orient === left ? -1 : 1,\n      x = orient === left || orient === right ? \"x\" : \"y\",\n      transform = orient === top || orient === bottom ? translateX : translateY;\n\n  function axis(context) {\n    var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n        format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n        spacing = Math.max(tickSizeInner, 0) + tickPadding,\n        range = scale.range(),\n        range0 = +range[0] + 0.5,\n        range1 = +range[range.length - 1] + 0.5,\n        position = (scale.bandwidth ? center : number)(scale.copy()),\n        selection = context.selection ? context.selection() : context,\n        path = selection.selectAll(\".domain\").data([null]),\n        tick = selection.selectAll(\".tick\").data(values, scale).order(),\n        tickExit = tick.exit(),\n        tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n        line = tick.select(\"line\"),\n        text = tick.select(\"text\");\n\n    path = path.merge(path.enter().insert(\"path\", \".tick\")\n        .attr(\"class\", \"domain\")\n        .attr(\"stroke\", \"currentColor\"));\n\n    tick = tick.merge(tickEnter);\n\n    line = line.merge(tickEnter.append(\"line\")\n        .attr(\"stroke\", \"currentColor\")\n        .attr(x + \"2\", k * tickSizeInner));\n\n    text = text.merge(tickEnter.append(\"text\")\n        .attr(\"fill\", \"currentColor\")\n        .attr(x, k * spacing)\n        .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n    if (context !== selection) {\n      path = path.transition(context);\n      tick = tick.transition(context);\n      line = line.transition(context);\n      text = text.transition(context);\n\n      tickExit = tickExit.transition(context)\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n      tickEnter\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n    }\n\n    tickExit.remove();\n\n    path\n        .attr(\"d\", orient === left || orient == right\n            ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter : \"M0.5,\" + range0 + \"V\" + range1)\n            : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",0.5H\" + range1));\n\n    tick\n        .attr(\"opacity\", 1)\n        .attr(\"transform\", function(d) { return transform(position(d)); });\n\n    line\n        .attr(x + \"2\", k * tickSizeInner);\n\n    text\n        .attr(x, k * spacing)\n        .text(format);\n\n    selection.filter(entering)\n        .attr(\"fill\", \"none\")\n        .attr(\"font-size\", 10)\n        .attr(\"font-family\", \"sans-serif\")\n        .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n    selection\n        .each(function() { this.__axis = position; });\n  }\n\n  axis.scale = function(_) {\n    return arguments.length ? (scale = _, axis) : scale;\n  };\n\n  axis.ticks = function() {\n    return tickArguments = slice.call(arguments), axis;\n  };\n\n  axis.tickArguments = function(_) {\n    return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n  };\n\n  axis.tickValues = function(_) {\n    return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n  };\n\n  axis.tickFormat = function(_) {\n    return arguments.length ? (tickFormat = _, axis) : tickFormat;\n  };\n\n  axis.tickSize = function(_) {\n    return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeInner = function(_) {\n    return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeOuter = function(_) {\n    return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n  };\n\n  axis.tickPadding = function(_) {\n    return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n  };\n\n  return axis;\n}\n\nexport function axisTop(scale) {\n  return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n  return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n  return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n  return axis(left, scale);\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nexport default dispatch;\n","function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n","function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n","export default function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\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","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nexport default function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nexport default function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n","function classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nexport default function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n","function textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n","function htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n","function raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n  return this.each(raise);\n}\n","function lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n  return this.each(lower);\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nexport default function(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n","import creator from \"../creator\";\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","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n  var element = document.documentElement;\n  if (!(\"onmouseenter\" in element)) {\n    filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n  }\n}\n\nfunction filterContextListener(listener, index, group) {\n  listener = contextListener(listener, index, group);\n  return function(event) {\n    var related = event.relatedTarget;\n    if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n      listener.call(this, event);\n    }\n  };\n}\n\nfunction contextListener(listener, index, group) {\n  return function(event1) {\n    var event0 = event; // Events can be reentrant (e.g., focus).\n    event = event1;\n    try {\n      listener.call(this, this.__data__, index, group);\n    } finally {\n      event = event0;\n    }\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.capture);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, capture) {\n  var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n  return function(d, i, group) {\n    var on = this.__on, o, listener = wrap(value, i, group);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.capture);\n        this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, capture);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, capture) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  if (capture == null) capture = false;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n  return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n  var event0 = event;\n  event1.sourceEvent = event;\n  event = event1;\n  try {\n    return listener.apply(that, args);\n  } finally {\n    event = event0;\n  }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nexport default function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_join from \"./join\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} 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 {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","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n  event.stopImmediatePropagation();\n}\n\nexport default function() {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent from \"./noevent.js\";\n\nexport default function(view) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", noevent, true);\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", noevent, true);\n  } else {\n    root.__noselect = root.style.MozUserSelect;\n    root.style.MozUserSelect = \"none\";\n  }\n}\n\nexport function yesdrag(view, noclick) {\n  var root = view.document.documentElement,\n      selection = select(view).on(\"dragstart.drag\", null);\n  if (noclick) {\n    selection.on(\"click.drag\", noevent, true);\n    setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n  }\n  if (\"onselectstart\" in root) {\n    selection.on(\"selectstart.drag\", null);\n  } else {\n    root.style.MozUserSelect = root.__noselect;\n    delete root.__noselect;\n  }\n}\n","export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex = /^#([0-9a-f]{3,8})$/,\n    reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n    reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n    reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n    reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n    reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n    reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy: function(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable: function() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m, l;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n      : null) // invalid hex\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb: function() {\n    return this;\n  },\n  displayable: function() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n  var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n  return (a === 1 ? \"rgb(\" : \"rgba(\")\n      + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n      + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n  value = Math.max(0, Math.min(255, Math.round(value) || 0));\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb: function() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  displayable: function() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl: function() {\n    var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n    return (a === 1 ? \"hsl(\" : \"hsla(\")\n        + (this.h || 0) + \", \"\n        + (this.s || 0) * 100 + \"%, \"\n        + (this.l || 0) * 100 + \"%\"\n        + (a === 1 ? \")\" : \", \" + a + \")\");\n  }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n","export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","import {basis} from \"./basis.js\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n  if (!b) b = [];\n  var n = a ? Math.min(b.length, a.length) : 0,\n      c = b.slice(),\n      i;\n  return function(t) {\n    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n    return c;\n  };\n}\n\nexport function isNumberArray(x) {\n  return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n  var nb = b ? b.length : 0,\n      na = a ? Math.min(nb, a.length) : 0,\n      x = new Array(na),\n      c = new Array(nb),\n      i;\n\n  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n  for (; i < nb; ++i) c[i] = b[i];\n\n  return function(t) {\n    for (i = 0; i < na; ++i) c[i] = x[i](t);\n    return c;\n  };\n}\n","export default function(a, b) {\n  var d = new Date;\n  return a = +a, b = +b, function(t) {\n    return d.setTime(a * (1 - t) + b * t), d;\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return a * (1 - t) + b * t;\n  };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n  var i = {},\n      c = {},\n      k;\n\n  if (a === null || typeof a !== \"object\") a = {};\n  if (b === null || typeof b !== \"object\") b = {};\n\n  for (k in b) {\n    if (k in a) {\n      i[k] = value(a[k], b[k]);\n    } else {\n      c[k] = b[k];\n    }\n  }\n\n  return function(t) {\n    for (k in i) c[k] = i[k](t);\n    return c;\n  };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n","var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n  var t = typeof b, c;\n  return b == null || t === \"boolean\" ? constant(b)\n      : (t === \"number\" ? number\n      : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n      : b instanceof color ? rgb\n      : b instanceof Date ? date\n      : isNumberArray(b) ? numberArray\n      : Array.isArray(b) ? genericArray\n      : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n      : number)(a, b);\n}\n","import {event} from \"./selection/on\";\n\nexport default function() {\n  var current = event, source;\n  while (source = current.sourceEvent) current = source;\n  return current;\n}\n","export default function(node, event) {\n  var svg = node.ownerSVGElement || node;\n\n  if (svg.createSVGPoint) {\n    var point = svg.createSVGPoint();\n    point.x = event.clientX, point.y = event.clientY;\n    point = point.matrixTransform(node.getScreenCTM().inverse());\n    return [point.x, point.y];\n  }\n\n  var rect = node.getBoundingClientRect();\n  return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches, identifier) {\n  if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;\n\n  for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {\n    if ((touch = touches[i]).identifier === identifier) {\n      return point(node, touch);\n    }\n  }\n\n  return null;\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node) {\n  var event = sourceEvent();\n  if (event.changedTouches) event = event.changedTouches[0];\n  return point(node, event);\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","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 {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","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 {Transition} from \"./transition/index.js\";\nimport {SCHEDULED} from \"./transition/schedule.js\";\n\nvar root = [null];\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      i;\n\n  if (schedules) {\n    name = name == null ? null : name + \"\";\n    for (i in schedules) {\n      if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {\n        return new Transition([[node]], root, name, +i);\n      }\n    }\n  }\n\n  return null;\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function(target, type, selection) {\n  this.target = target;\n  this.type = type;\n  this.selection = selection;\n}\n","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n  event.stopImmediatePropagation();\n}\n\nexport default function() {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {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","import {range} from \"d3-array\";\nimport {max, tau} from \"./math\";\n\nfunction compareValue(compare) {\n  return function(a, b) {\n    return compare(\n      a.source.value + a.target.value,\n      b.source.value + b.target.value\n    );\n  };\n}\n\nexport default function() {\n  var padAngle = 0,\n      sortGroups = null,\n      sortSubgroups = null,\n      sortChords = null;\n\n  function chord(matrix) {\n    var n = matrix.length,\n        groupSums = [],\n        groupIndex = range(n),\n        subgroupIndex = [],\n        chords = [],\n        groups = chords.groups = new Array(n),\n        subgroups = new Array(n * n),\n        k,\n        x,\n        x0,\n        dx,\n        i,\n        j;\n\n    // Compute the sum.\n    k = 0, i = -1; while (++i < n) {\n      x = 0, j = -1; while (++j < n) {\n        x += matrix[i][j];\n      }\n      groupSums.push(x);\n      subgroupIndex.push(range(n));\n      k += x;\n    }\n\n    // Sort groups…\n    if (sortGroups) groupIndex.sort(function(a, b) {\n      return sortGroups(groupSums[a], groupSums[b]);\n    });\n\n    // Sort subgroups…\n    if (sortSubgroups) subgroupIndex.forEach(function(d, i) {\n      d.sort(function(a, b) {\n        return sortSubgroups(matrix[i][a], matrix[i][b]);\n      });\n    });\n\n    // Convert the sum to scaling factor for [0, 2pi].\n    // TODO Allow start and end angle to be specified?\n    // TODO Allow padding to be specified as percentage?\n    k = max(0, tau - padAngle * n) / k;\n    dx = k ? padAngle : tau / n;\n\n    // Compute the start and end angle for each group and subgroup.\n    // Note: Opera has a bug reordering object literal properties!\n    x = 0, i = -1; while (++i < n) {\n      x0 = x, j = -1; while (++j < n) {\n        var di = groupIndex[i],\n            dj = subgroupIndex[di][j],\n            v = matrix[di][dj],\n            a0 = x,\n            a1 = x += v * k;\n        subgroups[dj * n + di] = {\n          index: di,\n          subindex: dj,\n          startAngle: a0,\n          endAngle: a1,\n          value: v\n        };\n      }\n      groups[di] = {\n        index: di,\n        startAngle: x0,\n        endAngle: x,\n        value: groupSums[di]\n      };\n      x += dx;\n    }\n\n    // Generate chords for each (non-empty) subgroup-subgroup link.\n    i = -1; while (++i < n) {\n      j = i - 1; while (++j < n) {\n        var source = subgroups[j * n + i],\n            target = subgroups[i * n + j];\n        if (source.value || target.value) {\n          chords.push(source.value < target.value\n              ? {source: target, target: source}\n              : {source: source, target: target});\n        }\n      }\n    }\n\n    return sortChords ? chords.sort(sortChords) : chords;\n  }\n\n  chord.padAngle = function(_) {\n    return arguments.length ? (padAngle = max(0, _), chord) : padAngle;\n  };\n\n  chord.sortGroups = function(_) {\n    return arguments.length ? (sortGroups = _, chord) : sortGroups;\n  };\n\n  chord.sortSubgroups = function(_) {\n    return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;\n  };\n\n  chord.sortChords = function(_) {\n    return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;\n  };\n\n  return chord;\n}\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","var pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction Path() {\n  this._x0 = this._y0 = // start of current subpath\n  this._x1 = this._y1 = null; // end of current subpath\n  this._ = \"\";\n}\n\nfunction path() {\n  return new Path;\n}\n\nPath.prototype = path.prototype = {\n  constructor: Path,\n  moveTo: function(x, y) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n  },\n  closePath: function() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._ += \"Z\";\n    }\n  },\n  lineTo: function(x, y) {\n    this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  quadraticCurveTo: function(x1, y1, x, y) {\n    this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n    this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  arcTo: function(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n    var x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      var x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n      }\n\n      this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n    }\n  },\n  arc: function(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n    var dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._ += \"M\" + x0 + \",\" + y0;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._ += \"L\" + x0 + \",\" + y0;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n    }\n  },\n  rect: function(x, y, w, h) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n  },\n  toString: function() {\n    return this._;\n  }\n};\n\nexport default path;\n","import {slice} from \"./array\";\nimport constant from \"./constant\";\nimport {cos, halfPi, sin} from \"./math\";\nimport {path} from \"d3-path\";\n\nfunction defaultSource(d) {\n  return d.source;\n}\n\nfunction defaultTarget(d) {\n  return d.target;\n}\n\nfunction defaultRadius(d) {\n  return d.radius;\n}\n\nfunction defaultStartAngle(d) {\n  return d.startAngle;\n}\n\nfunction defaultEndAngle(d) {\n  return d.endAngle;\n}\n\nexport default function() {\n  var source = defaultSource,\n      target = defaultTarget,\n      radius = defaultRadius,\n      startAngle = defaultStartAngle,\n      endAngle = defaultEndAngle,\n      context = null;\n\n  function ribbon() {\n    var buffer,\n        argv = slice.call(arguments),\n        s = source.apply(this, argv),\n        t = target.apply(this, argv),\n        sr = +radius.apply(this, (argv[0] = s, argv)),\n        sa0 = startAngle.apply(this, argv) - halfPi,\n        sa1 = endAngle.apply(this, argv) - halfPi,\n        sx0 = sr * cos(sa0),\n        sy0 = sr * sin(sa0),\n        tr = +radius.apply(this, (argv[0] = t, argv)),\n        ta0 = startAngle.apply(this, argv) - halfPi,\n        ta1 = endAngle.apply(this, argv) - halfPi;\n\n    if (!context) context = buffer = path();\n\n    context.moveTo(sx0, sy0);\n    context.arc(0, 0, sr, sa0, sa1);\n    if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?\n      context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));\n      context.arc(0, 0, tr, ta0, ta1);\n    }\n    context.quadraticCurveTo(0, 0, sx0, sy0);\n    context.closePath();\n\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  ribbon.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : radius;\n  };\n\n  ribbon.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : startAngle;\n  };\n\n  ribbon.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : endAngle;\n  };\n\n  ribbon.source = function(_) {\n    return arguments.length ? (source = _, ribbon) : source;\n  };\n\n  ribbon.target = function(_) {\n    return arguments.length ? (target = _, ribbon) : target;\n  };\n\n  ribbon.context = function(_) {\n    return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;\n  };\n\n  return ribbon;\n}\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n  constructor: Map,\n  has: function(key) {\n    return (prefix + key) in this;\n  },\n  get: function(key) {\n    return this[prefix + key];\n  },\n  set: function(key, value) {\n    this[prefix + key] = value;\n    return this;\n  },\n  remove: function(key) {\n    var property = prefix + key;\n    return property in this && delete this[property];\n  },\n  clear: function() {\n    for (var property in this) if (property[0] === prefix) delete this[property];\n  },\n  keys: function() {\n    var keys = [];\n    for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n    return keys;\n  },\n  values: function() {\n    var values = [];\n    for (var property in this) if (property[0] === prefix) values.push(this[property]);\n    return values;\n  },\n  entries: function() {\n    var entries = [];\n    for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n    return entries;\n  },\n  size: function() {\n    var size = 0;\n    for (var property in this) if (property[0] === prefix) ++size;\n    return size;\n  },\n  empty: function() {\n    for (var property in this) if (property[0] === prefix) return false;\n    return true;\n  },\n  each: function(f) {\n    for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n  }\n};\n\nfunction map(object, f) {\n  var map = new Map;\n\n  // Copy constructor.\n  if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n  // Index array by numeric index or specified key function.\n  else if (Array.isArray(object)) {\n    var i = -1,\n        n = object.length,\n        o;\n\n    if (f == null) while (++i < n) map.set(i, object[i]);\n    else while (++i < n) map.set(f(o = object[i], i, object), o);\n  }\n\n  // Convert object to map.\n  else if (object) for (var key in object) map.set(key, object[key]);\n\n  return map;\n}\n\nexport default map;\n","import map from \"./map\";\n\nexport default function() {\n  var keys = [],\n      sortKeys = [],\n      sortValues,\n      rollup,\n      nest;\n\n  function apply(array, depth, createResult, setResult) {\n    if (depth >= keys.length) {\n      if (sortValues != null) array.sort(sortValues);\n      return rollup != null ? rollup(array) : array;\n    }\n\n    var i = -1,\n        n = array.length,\n        key = keys[depth++],\n        keyValue,\n        value,\n        valuesByKey = map(),\n        values,\n        result = createResult();\n\n    while (++i < n) {\n      if (values = valuesByKey.get(keyValue = key(value = array[i]) + \"\")) {\n        values.push(value);\n      } else {\n        valuesByKey.set(keyValue, [value]);\n      }\n    }\n\n    valuesByKey.each(function(values, key) {\n      setResult(result, key, apply(values, depth, createResult, setResult));\n    });\n\n    return result;\n  }\n\n  function entries(map, depth) {\n    if (++depth > keys.length) return map;\n    var array, sortKey = sortKeys[depth - 1];\n    if (rollup != null && depth >= keys.length) array = map.entries();\n    else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });\n    return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;\n  }\n\n  return nest = {\n    object: function(array) { return apply(array, 0, createObject, setObject); },\n    map: function(array) { return apply(array, 0, createMap, setMap); },\n    entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },\n    key: function(d) { keys.push(d); return nest; },\n    sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },\n    sortValues: function(order) { sortValues = order; return nest; },\n    rollup: function(f) { rollup = f; return nest; }\n  };\n}\n\nfunction createObject() {\n  return {};\n}\n\nfunction setObject(object, key, value) {\n  object[key] = value;\n}\n\nfunction createMap() {\n  return map();\n}\n\nfunction setMap(map, key, value) {\n  map.set(key, value);\n}\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","export default function(map) {\n  var keys = [];\n  for (var key in map) keys.push(key);\n  return keys;\n}\n","export default function(map) {\n  var values = [];\n  for (var key in map) values.push(map[key]);\n  return values;\n}\n","export default function(map) {\n  var entries = [];\n  for (var key in map) entries.push({key: key, value: map[key]});\n  return entries;\n}\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {deg2rad, rad2deg} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n    Xn = 0.96422,\n    Yn = 1,\n    Zn = 0.82521,\n    t0 = 4 / 29,\n    t1 = 6 / 29,\n    t2 = 3 * t1 * t1,\n    t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n  if (o instanceof Hcl) return hcl2lab(o);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = rgb2lrgb(o.r),\n      g = rgb2lrgb(o.g),\n      b = rgb2lrgb(o.b),\n      y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n  if (r === g && g === b) x = z = y; else {\n    x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n    z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n  }\n  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n  return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n  this.l = +l;\n  this.a = +a;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n  brighter: function(k) {\n    return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  darker: function(k) {\n    return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  rgb: function() {\n    var y = (this.l + 16) / 116,\n        x = isNaN(this.a) ? y : y + this.a / 500,\n        z = isNaN(this.b) ? y : y - this.b / 200;\n    x = Xn * lab2xyz(x);\n    y = Yn * lab2xyz(y);\n    z = Zn * lab2xyz(z);\n    return new Rgb(\n      lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n      lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n      lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n      this.opacity\n    );\n  }\n}));\n\nfunction xyz2lab(t) {\n  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n  return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n  if (!(o instanceof Lab)) o = labConvert(o);\n  if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n  var h = Math.atan2(o.b, o.a) * rad2deg;\n  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n  return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n  this.h = +h;\n  this.c = +c;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n  if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n  var h = o.h * deg2rad;\n  return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n  brighter: function(k) {\n    return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n  },\n  darker: function(k) {\n    return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n  },\n  rgb: function() {\n    return hcl2lab(this).rgb();\n  }\n}));\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {deg2rad, rad2deg} from \"./math.js\";\n\nvar A = -0.14861,\n    B = +1.78277,\n    C = -0.29227,\n    D = -0.90649,\n    E = +1.97294,\n    ED = E * D,\n    EB = E * B,\n    BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n      bl = b - l,\n      k = (E * (g - l) - C * bl) / D,\n      s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n      h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb: function() {\n    var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n        l = +this.l,\n        a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n        cosh = Math.cos(h),\n        sinh = Math.sin(h);\n    return new Rgb(\n      255 * (l + a * (A * cosh + B * sinh)),\n      255 * (l + a * (C * cosh + D * sinh)),\n      255 * (l + a * (E * cosh)),\n      this.opacity\n    );\n  }\n}));\n","var array = Array.prototype;\n\nexport var slice = array.slice;\n","export default function(a, b) {\n  return a - b;\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function(ring, hole) {\n  var i = -1, n = hole.length, c;\n  while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n  return 0;\n}\n\nfunction ringContains(ring, point) {\n  var x = point[0], y = point[1], contains = -1;\n  for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n    var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];\n    if (segmentContains(pi, pj, point)) return 0;\n    if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;\n  }\n  return contains;\n}\n\nfunction segmentContains(a, b, c) {\n  var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\n\nfunction collinear(a, b, c) {\n  return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\n\nfunction within(p, q, r) {\n  return p <= q && q <= r || r <= q && q <= p;\n}\n","export default function() {}\n","import {extent, thresholdSturges, tickStep, range} from \"d3-array\";\nimport {slice} from \"./array\";\nimport ascending from \"./ascending\";\nimport area from \"./area\";\nimport constant from \"./constant\";\nimport contains from \"./contains\";\nimport noop from \"./noop\";\n\nvar cases = [\n  [],\n  [[[1.0, 1.5], [0.5, 1.0]]],\n  [[[1.5, 1.0], [1.0, 1.5]]],\n  [[[1.5, 1.0], [0.5, 1.0]]],\n  [[[1.0, 0.5], [1.5, 1.0]]],\n  [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],\n  [[[1.0, 0.5], [1.0, 1.5]]],\n  [[[1.0, 0.5], [0.5, 1.0]]],\n  [[[0.5, 1.0], [1.0, 0.5]]],\n  [[[1.0, 1.5], [1.0, 0.5]]],\n  [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],\n  [[[1.5, 1.0], [1.0, 0.5]]],\n  [[[0.5, 1.0], [1.5, 1.0]]],\n  [[[1.0, 1.5], [1.5, 1.0]]],\n  [[[0.5, 1.0], [1.0, 1.5]]],\n  []\n];\n\nexport default function() {\n  var dx = 1,\n      dy = 1,\n      threshold = thresholdSturges,\n      smooth = smoothLinear;\n\n  function contours(values) {\n    var tz = threshold(values);\n\n    // Convert number of thresholds into uniform thresholds.\n    if (!Array.isArray(tz)) {\n      var domain = extent(values), start = domain[0], stop = domain[1];\n      tz = tickStep(start, stop, tz);\n      tz = range(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz);\n    } else {\n      tz = tz.slice().sort(ascending);\n    }\n\n    return tz.map(function(value) {\n      return contour(values, value);\n    });\n  }\n\n  // Accumulate, smooth contour rings, assign holes to exterior rings.\n  // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n  function contour(values, value) {\n    var polygons = [],\n        holes = [];\n\n    isorings(values, value, function(ring) {\n      smooth(ring, values, value);\n      if (area(ring) > 0) polygons.push([ring]);\n      else holes.push(ring);\n    });\n\n    holes.forEach(function(hole) {\n      for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n        if (contains((polygon = polygons[i])[0], hole) !== -1) {\n          polygon.push(hole);\n          return;\n        }\n      }\n    });\n\n    return {\n      type: \"MultiPolygon\",\n      value: value,\n      coordinates: polygons\n    };\n  }\n\n  // Marching squares with isolines stitched into rings.\n  // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n  function isorings(values, value, callback) {\n    var fragmentByStart = new Array,\n        fragmentByEnd = new Array,\n        x, y, t0, t1, t2, t3;\n\n    // Special case for the first row (y = -1, t2 = t3 = 0).\n    x = y = -1;\n    t1 = values[0] >= value;\n    cases[t1 << 1].forEach(stitch);\n    while (++x < dx - 1) {\n      t0 = t1, t1 = values[x + 1] >= value;\n      cases[t0 | t1 << 1].forEach(stitch);\n    }\n    cases[t1 << 0].forEach(stitch);\n\n    // General case for the intermediate rows.\n    while (++y < dy - 1) {\n      x = -1;\n      t1 = values[y * dx + dx] >= value;\n      t2 = values[y * dx] >= value;\n      cases[t1 << 1 | t2 << 2].forEach(stitch);\n      while (++x < dx - 1) {\n        t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n        t3 = t2, t2 = values[y * dx + x + 1] >= value;\n        cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n      }\n      cases[t1 | t2 << 3].forEach(stitch);\n    }\n\n    // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n    x = -1;\n    t2 = values[y * dx] >= value;\n    cases[t2 << 2].forEach(stitch);\n    while (++x < dx - 1) {\n      t3 = t2, t2 = values[y * dx + x + 1] >= value;\n      cases[t2 << 2 | t3 << 3].forEach(stitch);\n    }\n    cases[t2 << 3].forEach(stitch);\n\n    function stitch(line) {\n      var start = [line[0][0] + x, line[0][1] + y],\n          end = [line[1][0] + x, line[1][1] + y],\n          startIndex = index(start),\n          endIndex = index(end),\n          f, g;\n      if (f = fragmentByEnd[startIndex]) {\n        if (g = fragmentByStart[endIndex]) {\n          delete fragmentByEnd[f.end];\n          delete fragmentByStart[g.start];\n          if (f === g) {\n            f.ring.push(end);\n            callback(f.ring);\n          } else {\n            fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};\n          }\n        } else {\n          delete fragmentByEnd[f.end];\n          f.ring.push(end);\n          fragmentByEnd[f.end = endIndex] = f;\n        }\n      } else if (f = fragmentByStart[endIndex]) {\n        if (g = fragmentByEnd[startIndex]) {\n          delete fragmentByStart[f.start];\n          delete fragmentByEnd[g.end];\n          if (f === g) {\n            f.ring.push(end);\n            callback(f.ring);\n          } else {\n            fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};\n          }\n        } else {\n          delete fragmentByStart[f.start];\n          f.ring.unshift(start);\n          fragmentByStart[f.start = startIndex] = f;\n        }\n      } else {\n        fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};\n      }\n    }\n  }\n\n  function index(point) {\n    return point[0] * 2 + point[1] * (dx + 1) * 4;\n  }\n\n  function smoothLinear(ring, values, value) {\n    ring.forEach(function(point) {\n      var x = point[0],\n          y = point[1],\n          xt = x | 0,\n          yt = y | 0,\n          v0,\n          v1 = values[yt * dx + xt];\n      if (x > 0 && x < dx && xt === x) {\n        v0 = values[yt * dx + xt - 1];\n        point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n      }\n      if (y > 0 && y < dy && yt === y) {\n        v0 = values[(yt - 1) * dx + xt];\n        point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n      }\n    });\n  }\n\n  contours.contour = contour;\n\n  contours.size = function(_) {\n    if (!arguments.length) return [dx, dy];\n    var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n    if (!(_0 > 0) || !(_1 > 0)) throw new Error(\"invalid size\");\n    return dx = _0, dy = _1, contours;\n  };\n\n  contours.thresholds = function(_) {\n    return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), contours) : threshold;\n  };\n\n  contours.smooth = function(_) {\n    return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\n  };\n\n  return contours;\n}\n","export default function(ring) {\n  var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n  while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n  return area;\n}\n","// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nexport function blurX(source, target, r) {\n  var n = source.width,\n      m = source.height,\n      w = (r << 1) + 1;\n  for (var j = 0; j < m; ++j) {\n    for (var i = 0, sr = 0; i < n + r; ++i) {\n      if (i < n) {\n        sr += source.data[i + j * n];\n      }\n      if (i >= r) {\n        if (i >= w) {\n          sr -= source.data[i - w + j * n];\n        }\n        target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n      }\n    }\n  }\n}\n\n// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nexport function blurY(source, target, r) {\n  var n = source.width,\n      m = source.height,\n      w = (r << 1) + 1;\n  for (var i = 0; i < n; ++i) {\n    for (var j = 0, sr = 0; j < m + r; ++j) {\n      if (j < m) {\n        sr += source.data[i + j * n];\n      }\n      if (j >= r) {\n        if (j >= w) {\n          sr -= source.data[i + (j - w) * n];\n        }\n        target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n      }\n    }\n  }\n}\n","import {max, range, tickStep} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {blurX, blurY} from \"./blur\";\nimport constant from \"./constant\";\nimport contours from \"./contours\";\n\nfunction defaultX(d) {\n  return d[0];\n}\n\nfunction defaultY(d) {\n  return d[1];\n}\n\nfunction defaultWeight() {\n  return 1;\n}\n\nexport default function() {\n  var x = defaultX,\n      y = defaultY,\n      weight = defaultWeight,\n      dx = 960,\n      dy = 500,\n      r = 20, // blur radius\n      k = 2, // log2(grid cell size)\n      o = r * 3, // grid offset, to pad for blur\n      n = (dx + o * 2) >> k, // grid width\n      m = (dy + o * 2) >> k, // grid height\n      threshold = constant(20);\n\n  function density(data) {\n    var values0 = new Float32Array(n * m),\n        values1 = new Float32Array(n * m);\n\n    data.forEach(function(d, i, data) {\n      var xi = (+x(d, i, data) + o) >> k,\n          yi = (+y(d, i, data) + o) >> k,\n          wi = +weight(d, i, data);\n      if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n        values0[xi + yi * n] += wi;\n      }\n    });\n\n    // TODO Optimize.\n    blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n    blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n    blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n    blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n    blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n    blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n\n    var tz = threshold(values0);\n\n    // Convert number of thresholds into uniform thresholds.\n    if (!Array.isArray(tz)) {\n      var stop = max(values0);\n      tz = tickStep(0, stop, tz);\n      tz = range(0, Math.floor(stop / tz) * tz, tz);\n      tz.shift();\n    }\n\n    return contours()\n        .thresholds(tz)\n        .size([n, m])\n      (values0)\n        .map(transform);\n  }\n\n  function transform(geometry) {\n    geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.\n    geometry.coordinates.forEach(transformPolygon);\n    return geometry;\n  }\n\n  function transformPolygon(coordinates) {\n    coordinates.forEach(transformRing);\n  }\n\n  function transformRing(coordinates) {\n    coordinates.forEach(transformPoint);\n  }\n\n  // TODO Optimize.\n  function transformPoint(coordinates) {\n    coordinates[0] = coordinates[0] * Math.pow(2, k) - o;\n    coordinates[1] = coordinates[1] * Math.pow(2, k) - o;\n  }\n\n  function resize() {\n    o = r * 3;\n    n = (dx + o * 2) >> k;\n    m = (dy + o * 2) >> k;\n    return density;\n  }\n\n  density.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), density) : x;\n  };\n\n  density.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), density) : y;\n  };\n\n  density.weight = function(_) {\n    return arguments.length ? (weight = typeof _ === \"function\" ? _ : constant(+_), density) : weight;\n  };\n\n  density.size = function(_) {\n    if (!arguments.length) return [dx, dy];\n    var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n    if (!(_0 >= 0) && !(_0 >= 0)) throw new Error(\"invalid size\");\n    return dx = _0, dy = _1, resize();\n  };\n\n  density.cellSize = function(_) {\n    if (!arguments.length) return 1 << k;\n    if (!((_ = +_) >= 1)) throw new Error(\"invalid cell size\");\n    return k = Math.floor(Math.log(_) / Math.LN2), resize();\n  };\n\n  density.thresholds = function(_) {\n    return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), density) : threshold;\n  };\n\n  density.bandwidth = function(_) {\n    if (!arguments.length) return Math.sqrt(r * (r + 1));\n    if (!((_ = +_) >= 0)) throw new Error(\"invalid bandwidth\");\n    return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();\n  };\n\n  return density;\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n  this.target = target;\n  this.type = type;\n  this.subject = subject;\n  this.identifier = id;\n  this.active = active;\n  this.x = x;\n  this.y = y;\n  this.dx = dx;\n  this.dy = dy;\n  this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n  var value = this._.on.apply(this._, arguments);\n  return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n  return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n  return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n  var filter = defaultFilter,\n      container = defaultContainer,\n      subject = defaultSubject,\n      touchable = defaultTouchable,\n      gestures = {},\n      listeners = dispatch(\"start\", \"drag\", \"end\"),\n      active = 0,\n      mousedownx,\n      mousedowny,\n      mousemoving,\n      touchending,\n      clickDistance2 = 0;\n\n  function drag(selection) {\n    selection\n        .on(\"mousedown.drag\", mousedowned)\n      .filter(touchable)\n        .on(\"touchstart.drag\", touchstarted)\n        .on(\"touchmove.drag\", touchmoved)\n        .on(\"touchend.drag touchcancel.drag\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  function mousedowned() {\n    if (touchending || !filter.apply(this, arguments)) return;\n    var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n    if (!gesture) return;\n    select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n    nodrag(event.view);\n    nopropagation();\n    mousemoving = false;\n    mousedownx = event.clientX;\n    mousedowny = event.clientY;\n    gesture(\"start\");\n  }\n\n  function mousemoved() {\n    noevent();\n    if (!mousemoving) {\n      var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n      mousemoving = dx * dx + dy * dy > clickDistance2;\n    }\n    gestures.mouse(\"drag\");\n  }\n\n  function mouseupped() {\n    select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n    yesdrag(event.view, mousemoving);\n    noevent();\n    gestures.mouse(\"end\");\n  }\n\n  function touchstarted() {\n    if (!filter.apply(this, arguments)) return;\n    var touches = event.changedTouches,\n        c = container.apply(this, arguments),\n        n = touches.length, i, gesture;\n\n    for (i = 0; i < n; ++i) {\n      if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n        nopropagation();\n        gesture(\"start\");\n      }\n    }\n  }\n\n  function touchmoved() {\n    var touches = event.changedTouches,\n        n = touches.length, i, gesture;\n\n    for (i = 0; i < n; ++i) {\n      if (gesture = gestures[touches[i].identifier]) {\n        noevent();\n        gesture(\"drag\");\n      }\n    }\n  }\n\n  function touchended() {\n    var touches = event.changedTouches,\n        n = touches.length, i, gesture;\n\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n    for (i = 0; i < n; ++i) {\n      if (gesture = gestures[touches[i].identifier]) {\n        nopropagation();\n        gesture(\"end\");\n      }\n    }\n  }\n\n  function beforestart(id, container, point, that, args) {\n    var p = point(container, id), s, dx, dy,\n        sublisteners = listeners.copy();\n\n    if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n      if ((event.subject = s = subject.apply(that, args)) == null) return false;\n      dx = s.x - p[0] || 0;\n      dy = s.y - p[1] || 0;\n      return true;\n    })) return;\n\n    return function gesture(type) {\n      var p0 = p, n;\n      switch (type) {\n        case \"start\": gestures[id] = gesture, n = active++; break;\n        case \"end\": delete gestures[id], --active; // nobreak\n        case \"drag\": p = point(container, id), n = active; break;\n      }\n      customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n    };\n  }\n\n  drag.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n  };\n\n  drag.container = function(_) {\n    return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n  };\n\n  drag.subject = function(_) {\n    return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n  };\n\n  drag.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n  };\n\n  drag.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? drag : value;\n  };\n\n  drag.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n  };\n\n  return drag;\n}\n","var EOL = {},\n    EOF = {},\n    QUOTE = 34,\n    NEWLINE = 10,\n    RETURN = 13;\n\nfunction objectConverter(columns) {\n  return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n    return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n  }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n  var object = objectConverter(columns);\n  return function(row, i) {\n    return f(object(row), i, columns);\n  };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n  var columnSet = Object.create(null),\n      columns = [];\n\n  rows.forEach(function(row) {\n    for (var column in row) {\n      if (!(column in columnSet)) {\n        columns.push(columnSet[column] = column);\n      }\n    }\n  });\n\n  return columns;\n}\n\nfunction pad(value, width) {\n  var s = value + \"\", length = s.length;\n  return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n  return year < 0 ? \"-\" + pad(-year, 6)\n    : year > 9999 ? \"+\" + pad(year, 6)\n    : pad(year, 4);\n}\n\nfunction formatDate(date) {\n  var hours = date.getUTCHours(),\n      minutes = date.getUTCMinutes(),\n      seconds = date.getUTCSeconds(),\n      milliseconds = date.getUTCMilliseconds();\n  return isNaN(date) ? \"Invalid Date\"\n      : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n      + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n      : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n      : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n      : \"\");\n}\n\nexport default function(delimiter) {\n  var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n      DELIMITER = delimiter.charCodeAt(0);\n\n  function parse(text, f) {\n    var convert, columns, rows = parseRows(text, function(row, i) {\n      if (convert) return convert(row, i - 1);\n      columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n    });\n    rows.columns = columns || [];\n    return rows;\n  }\n\n  function parseRows(text, f) {\n    var rows = [], // output rows\n        N = text.length,\n        I = 0, // current character index\n        n = 0, // current line number\n        t, // current token\n        eof = N <= 0, // current token followed by EOF?\n        eol = false; // current token followed by EOL?\n\n    // Strip the trailing newline.\n    if (text.charCodeAt(N - 1) === NEWLINE) --N;\n    if (text.charCodeAt(N - 1) === RETURN) --N;\n\n    function token() {\n      if (eof) return EOF;\n      if (eol) return eol = false, EOL;\n\n      // Unescape quotes.\n      var i, j = I, c;\n      if (text.charCodeAt(j) === QUOTE) {\n        while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n        if ((i = I) >= N) eof = true;\n        else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n        else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n        return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n      }\n\n      // Find next delimiter or newline.\n      while (I < N) {\n        if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n        else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n        else if (c !== DELIMITER) continue;\n        return text.slice(j, i);\n      }\n\n      // Return last token before EOF.\n      return eof = true, text.slice(j, N);\n    }\n\n    while ((t = token()) !== EOF) {\n      var row = [];\n      while (t !== EOL && t !== EOF) row.push(t), t = token();\n      if (f && (row = f(row, n++)) == null) continue;\n      rows.push(row);\n    }\n\n    return rows;\n  }\n\n  function preformatBody(rows, columns) {\n    return rows.map(function(row) {\n      return columns.map(function(column) {\n        return formatValue(row[column]);\n      }).join(delimiter);\n    });\n  }\n\n  function format(rows, columns) {\n    if (columns == null) columns = inferColumns(rows);\n    return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n  }\n\n  function formatBody(rows, columns) {\n    if (columns == null) columns = inferColumns(rows);\n    return preformatBody(rows, columns).join(\"\\n\");\n  }\n\n  function formatRows(rows) {\n    return rows.map(formatRow).join(\"\\n\");\n  }\n\n  function formatRow(row) {\n    return row.map(formatValue).join(delimiter);\n  }\n\n  function formatValue(value) {\n    return value == null ? \"\"\n        : value instanceof Date ? formatDate(value)\n        : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n        : value;\n  }\n\n  return {\n    parse: parse,\n    parseRows: parseRows,\n    format: format,\n    formatBody: formatBody,\n    formatRows: formatRows,\n    formatRow: formatRow,\n    formatValue: formatValue\n  };\n}\n","import dsv from \"./dsv.js\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\nexport var csvFormatRow = csv.formatRow;\nexport var csvFormatValue = csv.formatValue;\n","import dsv from \"./dsv.js\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\nexport var tsvFormatRow = tsv.formatRow;\nexport var tsvFormatValue = tsv.formatValue;\n","export default function autoType(object) {\n  for (var key in object) {\n    var value = object[key].trim(), number, m;\n    if (!value) value = null;\n    else if (value === \"true\") value = true;\n    else if (value === \"false\") value = false;\n    else if (value === \"NaN\") value = NaN;\n    else if (!isNaN(number = +value)) value = number;\n    else if (m = value.match(/^([-+]\\d{2})?\\d{4}(-\\d{2}(-\\d{2})?)?(T\\d{2}:\\d{2}(:\\d{2}(\\.\\d{3})?)?(Z|[-+]\\d{2}:\\d{2})?)?$/)) {\n      if (fixtz && !!m[4] && !m[7]) value = value.replace(/-/g, \"/\").replace(/T/, \" \");\n      value = new Date(value);\n    }\n    else continue;\n    object[key] = value;\n  }\n  return object;\n}\n\n// https://github.com/d3/d3-dsv/issues/45\nvar fixtz = new Date(\"2019-01-01T00:00\").getHours() || new Date(\"2019-07-01T00:00\").getHours();","export function linear(t) {\n  return +t;\n}\n","export function quadIn(t) {\n  return t * t;\n}\n\nexport function quadOut(t) {\n  return t * (2 - t);\n}\n\nexport function quadInOut(t) {\n  return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n  e = +e;\n\n  function polyIn(t) {\n    return Math.pow(t, e);\n  }\n\n  polyIn.exponent = custom;\n\n  return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n  e = +e;\n\n  function polyOut(t) {\n    return 1 - Math.pow(1 - t, e);\n  }\n\n  polyOut.exponent = custom;\n\n  return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n  e = +e;\n\n  function polyInOut(t) {\n    return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n  }\n\n  polyInOut.exponent = custom;\n\n  return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n    halfPi = pi / 2;\n\nexport function sinIn(t) {\n  return (+t === 1) ? 1 : 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n  return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n  return (1 - Math.cos(pi * t)) / 2;\n}\n","// tpmt is two power minus ten times t scaled to [0,1]\nexport function tpmt(x) {\n  return (Math.pow(2, -10 * x) - 0.0009765625) * 1.0009775171065494;\n}\n","import {tpmt} from \"./math.js\";\n\nexport function expIn(t) {\n  return tpmt(1 - +t);\n}\n\nexport function expOut(t) {\n  return 1 - tpmt(t);\n}\n\nexport function expInOut(t) {\n  return ((t *= 2) <= 1 ? tpmt(1 - t) : 2 - tpmt(t - 1)) / 2;\n}\n","export function circleIn(t) {\n  return 1 - Math.sqrt(1 - t * t);\n}\n\nexport function circleOut(t) {\n  return Math.sqrt(1 - --t * t);\n}\n\nexport function circleInOut(t) {\n  return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;\n}\n","var b1 = 4 / 11,\n    b2 = 6 / 11,\n    b3 = 8 / 11,\n    b4 = 3 / 4,\n    b5 = 9 / 11,\n    b6 = 10 / 11,\n    b7 = 15 / 16,\n    b8 = 21 / 22,\n    b9 = 63 / 64,\n    b0 = 1 / b1 / b1;\n\nexport function bounceIn(t) {\n  return 1 - bounceOut(1 - t);\n}\n\nexport function bounceOut(t) {\n  return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;\n}\n\nexport function bounceInOut(t) {\n  return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n  s = +s;\n\n  function backIn(t) {\n    return (t = +t) * t * (s * (t - 1) + t);\n  }\n\n  backIn.overshoot = custom;\n\n  return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n  s = +s;\n\n  function backOut(t) {\n    return --t * t * ((t + 1) * s + t) + 1;\n  }\n\n  backOut.overshoot = custom;\n\n  return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n  s = +s;\n\n  function backInOut(t) {\n    return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n  }\n\n  backInOut.overshoot = custom;\n\n  return backInOut;\n})(overshoot);\n","import {tpmt} from \"./math.js\";\n\nvar tau = 2 * Math.PI,\n    amplitude = 1,\n    period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n  function elasticIn(t) {\n    return a * tpmt(-(--t)) * Math.sin((s - t) / p);\n  }\n\n  elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n  elasticIn.period = function(p) { return custom(a, p); };\n\n  return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n  function elasticOut(t) {\n    return 1 - a * tpmt(t = +t) * Math.sin((t + s) / p);\n  }\n\n  elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n  elasticOut.period = function(p) { return custom(a, p); };\n\n  return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n  function elasticInOut(t) {\n    return ((t = t * 2 - 1) < 0\n        ? a * tpmt(-t) * Math.sin((s - t) / p)\n        : 2 - a * tpmt(t) * Math.sin((s + t) / p)) / 2;\n  }\n\n  elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n  elasticInOut.period = function(p) { return custom(a, p); };\n\n  return elasticInOut;\n})(amplitude, period);\n","function responseBlob(response) {\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n  return response.blob();\n}\n\nexport default function(input, init) {\n  return fetch(input, init).then(responseBlob);\n}\n","function responseArrayBuffer(response) {\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n  return response.arrayBuffer();\n}\n\nexport default function(input, init) {\n  return fetch(input, init).then(responseArrayBuffer);\n}\n","function responseText(response) {\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n  return response.text();\n}\n\nexport default function(input, init) {\n  return fetch(input, init).then(responseText);\n}\n","import {csvParse, dsvFormat, tsvParse} from \"d3-dsv\";\nimport text from \"./text.js\";\n\nfunction dsvParse(parse) {\n  return function(input, init, row) {\n    if (arguments.length === 2 && typeof init === \"function\") row = init, init = undefined;\n    return text(input, init).then(function(response) {\n      return parse(response, row);\n    });\n  };\n}\n\nexport default function dsv(delimiter, input, init, row) {\n  if (arguments.length === 3 && typeof init === \"function\") row = init, init = undefined;\n  var format = dsvFormat(delimiter);\n  return text(input, init).then(function(response) {\n    return format.parse(response, row);\n  });\n}\n\nexport var csv = dsvParse(csvParse);\nexport var tsv = dsvParse(tsvParse);\n","export default function(input, init) {\n  return new Promise(function(resolve, reject) {\n    var image = new Image;\n    for (var key in init) image[key] = init[key];\n    image.onerror = reject;\n    image.onload = function() { resolve(image); };\n    image.src = input;\n  });\n}\n","function responseJson(response) {\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n  if (response.status === 204 || response.status === 205) return;\n  return response.json();\n}\n\nexport default function(input, init) {\n  return fetch(input, init).then(responseJson);\n}\n","import text from \"./text.js\";\n\nfunction parser(type) {\n  return function(input, init)  {\n    return text(input, init).then(function(text) {\n      return (new DOMParser).parseFromString(text, type);\n    });\n  };\n}\n\nexport default parser(\"application/xml\");\n\nexport var html = parser(\"text/html\");\n\nexport var svg = parser(\"image/svg+xml\");\n","export default function(x, y) {\n  var nodes;\n\n  if (x == null) x = 0;\n  if (y == null) y = 0;\n\n  function force() {\n    var i,\n        n = nodes.length,\n        node,\n        sx = 0,\n        sy = 0;\n\n    for (i = 0; i < n; ++i) {\n      node = nodes[i], sx += node.x, sy += node.y;\n    }\n\n    for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {\n      node = nodes[i], node.x -= sx, node.y -= sy;\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n  };\n\n  force.x = function(_) {\n    return arguments.length ? (x = +_, force) : x;\n  };\n\n  force.y = function(_) {\n    return arguments.length ? (y = +_, force) : y;\n  };\n\n  return force;\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function() {\n  return (Math.random() - 0.5) * 1e-6;\n}\n","export default function(d) {\n  var x = +this._x.call(null, d),\n      y = +this._y.call(null, d);\n  return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n  if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n  var parent,\n      node = tree._root,\n      leaf = {data: d},\n      x0 = tree._x0,\n      y0 = tree._y0,\n      x1 = tree._x1,\n      y1 = tree._y1,\n      xm,\n      ym,\n      xp,\n      yp,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return tree._root = leaf, tree;\n\n  // Find the existing leaf for the new point, or add it.\n  while (node.length) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n  }\n\n  // Is the new point is exactly coincident with the existing point?\n  xp = +tree._x.call(null, node.data);\n  yp = +tree._y.call(null, node.data);\n  if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n  // Otherwise, split the leaf node until the old and new point are separated.\n  do {\n    parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n  } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n  return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n  var d, i, n = data.length,\n      x,\n      y,\n      xz = new Array(n),\n      yz = new Array(n),\n      x0 = Infinity,\n      y0 = Infinity,\n      x1 = -Infinity,\n      y1 = -Infinity;\n\n  // Compute the points and their extent.\n  for (i = 0; i < n; ++i) {\n    if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n    xz[i] = x;\n    yz[i] = y;\n    if (x < x0) x0 = x;\n    if (x > x1) x1 = x;\n    if (y < y0) y0 = y;\n    if (y > y1) y1 = y;\n  }\n\n  // If there were no (valid) points, abort.\n  if (x0 > x1 || y0 > y1) return this;\n\n  // Expand the tree to cover the new points.\n  this.cover(x0, y0).cover(x1, y1);\n\n  // Add the new points.\n  for (i = 0; i < n; ++i) {\n    add(this, xz[i], yz[i], data[i]);\n  }\n\n  return this;\n}\n","export default function(x, y) {\n  if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n  var x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1;\n\n  // If the quadtree has no extent, initialize them.\n  // Integer extent are necessary so that if we later double the extent,\n  // the existing quadrant boundaries don’t change due to floating point error!\n  if (isNaN(x0)) {\n    x1 = (x0 = Math.floor(x)) + 1;\n    y1 = (y0 = Math.floor(y)) + 1;\n  }\n\n  // Otherwise, double repeatedly to cover.\n  else {\n    var z = x1 - x0,\n        node = this._root,\n        parent,\n        i;\n\n    while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n      i = (y < y0) << 1 | (x < x0);\n      parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n      switch (i) {\n        case 0: x1 = x0 + z, y1 = y0 + z; break;\n        case 1: x0 = x1 - z, y1 = y0 + z; break;\n        case 2: x1 = x0 + z, y0 = y1 - z; break;\n        case 3: x0 = x1 - z, y0 = y1 - z; break;\n      }\n    }\n\n    if (this._root && this._root.length) this._root = node;\n  }\n\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  return this;\n}\n","export default function(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","import constant from \"./constant\";\nimport jiggle from \"./jiggle\";\nimport {quadtree} from \"d3-quadtree\";\n\nfunction x(d) {\n  return d.x + d.vx;\n}\n\nfunction y(d) {\n  return d.y + d.vy;\n}\n\nexport default function(radius) {\n  var nodes,\n      radii,\n      strength = 1,\n      iterations = 1;\n\n  if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n  function force() {\n    var i, n = nodes.length,\n        tree,\n        node,\n        xi,\n        yi,\n        ri,\n        ri2;\n\n    for (var k = 0; k < iterations; ++k) {\n      tree = quadtree(nodes, x, y).visitAfter(prepare);\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        ri = radii[node.index], ri2 = ri * ri;\n        xi = node.x + node.vx;\n        yi = node.y + node.vy;\n        tree.visit(apply);\n      }\n    }\n\n    function apply(quad, x0, y0, x1, y1) {\n      var data = quad.data, rj = quad.r, r = ri + rj;\n      if (data) {\n        if (data.index > node.index) {\n          var x = xi - data.x - data.vx,\n              y = yi - data.y - data.vy,\n              l = x * x + y * y;\n          if (l < r * r) {\n            if (x === 0) x = jiggle(), l += x * x;\n            if (y === 0) y = jiggle(), l += y * y;\n            l = (r - (l = Math.sqrt(l))) / l * strength;\n            node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n            node.vy += (y *= l) * r;\n            data.vx -= x * (r = 1 - r);\n            data.vy -= y * r;\n          }\n        }\n        return;\n      }\n      return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n    }\n  }\n\n  function prepare(quad) {\n    if (quad.data) return quad.r = radii[quad.data.index];\n    for (var i = quad.r = 0; i < 4; ++i) {\n      if (quad[i] && quad[i].r > quad.r) {\n        quad.r = quad[i].r;\n      }\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length, node;\n    radii = new Array(n);\n    for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.iterations = function(_) {\n    return arguments.length ? (iterations = +_, force) : iterations;\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = +_, force) : strength;\n  };\n\n  force.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n  };\n\n  return force;\n}\n","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 constant from \"./constant\";\nimport jiggle from \"./jiggle\";\nimport {map} from \"d3-collection\";\n\nfunction index(d) {\n  return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n  var node = nodeById.get(nodeId);\n  if (!node) throw new Error(\"missing: \" + nodeId);\n  return node;\n}\n\nexport default function(links) {\n  var id = index,\n      strength = defaultStrength,\n      strengths,\n      distance = constant(30),\n      distances,\n      nodes,\n      count,\n      bias,\n      iterations = 1;\n\n  if (links == null) links = [];\n\n  function defaultStrength(link) {\n    return 1 / Math.min(count[link.source.index], count[link.target.index]);\n  }\n\n  function force(alpha) {\n    for (var k = 0, n = links.length; k < iterations; ++k) {\n      for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n        link = links[i], source = link.source, target = link.target;\n        x = target.x + target.vx - source.x - source.vx || jiggle();\n        y = target.y + target.vy - source.y - source.vy || jiggle();\n        l = Math.sqrt(x * x + y * y);\n        l = (l - distances[i]) / l * alpha * strengths[i];\n        x *= l, y *= l;\n        target.vx -= x * (b = bias[i]);\n        target.vy -= y * b;\n        source.vx += x * (b = 1 - b);\n        source.vy += y * b;\n      }\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n\n    var i,\n        n = nodes.length,\n        m = links.length,\n        nodeById = map(nodes, id),\n        link;\n\n    for (i = 0, count = new Array(n); i < m; ++i) {\n      link = links[i], link.index = i;\n      if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n      if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n      count[link.source.index] = (count[link.source.index] || 0) + 1;\n      count[link.target.index] = (count[link.target.index] || 0) + 1;\n    }\n\n    for (i = 0, bias = new Array(m); i < m; ++i) {\n      link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n    }\n\n    strengths = new Array(m), initializeStrength();\n    distances = new Array(m), initializeDistance();\n  }\n\n  function initializeStrength() {\n    if (!nodes) return;\n\n    for (var i = 0, n = links.length; i < n; ++i) {\n      strengths[i] = +strength(links[i], i, links);\n    }\n  }\n\n  function initializeDistance() {\n    if (!nodes) return;\n\n    for (var i = 0, n = links.length; i < n; ++i) {\n      distances[i] = +distance(links[i], i, links);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.links = function(_) {\n    return arguments.length ? (links = _, initialize(), force) : links;\n  };\n\n  force.id = function(_) {\n    return arguments.length ? (id = _, force) : id;\n  };\n\n  force.iterations = function(_) {\n    return arguments.length ? (iterations = +_, force) : iterations;\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n  };\n\n  force.distance = function(_) {\n    return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n  };\n\n  return force;\n}\n","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","import constant from \"./constant\";\nimport jiggle from \"./jiggle\";\nimport {quadtree} from \"d3-quadtree\";\nimport {x, y} from \"./simulation\";\n\nexport default function() {\n  var nodes,\n      node,\n      alpha,\n      strength = constant(-30),\n      strengths,\n      distanceMin2 = 1,\n      distanceMax2 = Infinity,\n      theta2 = 0.81;\n\n  function force(_) {\n    var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n    for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length, node;\n    strengths = new Array(n);\n    for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n  }\n\n  function accumulate(quad) {\n    var strength = 0, q, c, weight = 0, x, y, i;\n\n    // For internal nodes, accumulate forces from child quadrants.\n    if (quad.length) {\n      for (x = y = i = 0; i < 4; ++i) {\n        if ((q = quad[i]) && (c = Math.abs(q.value))) {\n          strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n        }\n      }\n      quad.x = x / weight;\n      quad.y = y / weight;\n    }\n\n    // For leaf nodes, accumulate forces from coincident quadrants.\n    else {\n      q = quad;\n      q.x = q.data.x;\n      q.y = q.data.y;\n      do strength += strengths[q.data.index];\n      while (q = q.next);\n    }\n\n    quad.value = strength;\n  }\n\n  function apply(quad, x1, _, x2) {\n    if (!quad.value) return true;\n\n    var x = quad.x - node.x,\n        y = quad.y - node.y,\n        w = x2 - x1,\n        l = x * x + y * y;\n\n    // Apply the Barnes-Hut approximation if possible.\n    // Limit forces for very close nodes; randomize direction if coincident.\n    if (w * w / theta2 < l) {\n      if (l < distanceMax2) {\n        if (x === 0) x = jiggle(), l += x * x;\n        if (y === 0) y = jiggle(), l += y * y;\n        if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n        node.vx += x * quad.value * alpha / l;\n        node.vy += y * quad.value * alpha / l;\n      }\n      return true;\n    }\n\n    // Otherwise, process points directly.\n    else if (quad.length || l >= distanceMax2) return;\n\n    // Limit forces for very close nodes; randomize direction if coincident.\n    if (quad.data !== node || quad.next) {\n      if (x === 0) x = jiggle(), l += x * x;\n      if (y === 0) y = jiggle(), l += y * y;\n      if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n    }\n\n    do if (quad.data !== node) {\n      w = strengths[quad.data.index] * alpha / l;\n      node.vx += x * w;\n      node.vy += y * w;\n    } while (quad = quad.next);\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n  };\n\n  force.distanceMin = function(_) {\n    return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n  };\n\n  force.distanceMax = function(_) {\n    return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n  };\n\n  force.theta = function(_) {\n    return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n  };\n\n  return force;\n}\n","import constant from \"./constant\";\n\nexport default function(radius, x, y) {\n  var nodes,\n      strength = constant(0.1),\n      strengths,\n      radiuses;\n\n  if (typeof radius !== \"function\") radius = constant(+radius);\n  if (x == null) x = 0;\n  if (y == null) y = 0;\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length; i < n; ++i) {\n      var node = nodes[i],\n          dx = node.x - x || 1e-6,\n          dy = node.y - y || 1e-6,\n          r = Math.sqrt(dx * dx + dy * dy),\n          k = (radiuses[i] - r) * strengths[i] * alpha / r;\n      node.vx += dx * k;\n      node.vy += dy * k;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    radiuses = new Array(n);\n    for (i = 0; i < n; ++i) {\n      radiuses[i] = +radius(nodes[i], i, nodes);\n      strengths[i] = isNaN(radiuses[i]) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _, initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n  };\n\n  force.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n  };\n\n  force.x = function(_) {\n    return arguments.length ? (x = +_, force) : x;\n  };\n\n  force.y = function(_) {\n    return arguments.length ? (y = +_, force) : y;\n  };\n\n  return force;\n}\n","import constant from \"./constant\";\n\nexport default function(x) {\n  var strength = constant(0.1),\n      nodes,\n      strengths,\n      xz;\n\n  if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    xz = new Array(n);\n    for (i = 0; i < n; ++i) {\n      strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n  };\n\n  force.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n  };\n\n  return force;\n}\n","import constant from \"./constant\";\n\nexport default function(y) {\n  var strength = constant(0.1),\n      nodes,\n      strengths,\n      yz;\n\n  if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n  function force(alpha) {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n    }\n  }\n\n  function initialize() {\n    if (!nodes) return;\n    var i, n = nodes.length;\n    strengths = new Array(n);\n    yz = new Array(n);\n    for (i = 0; i < n; ++i) {\n      strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n    }\n  }\n\n  force.initialize = function(_) {\n    nodes = _;\n    initialize();\n  };\n\n  force.strength = function(_) {\n    return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n  };\n\n  force.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n  };\n\n  return force;\n}\n","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","// [[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","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport 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","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n  step = Math.abs(step), max = Math.abs(max) - step;\n  return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nexport default function() {\n  return new Adder;\n}\n\nfunction Adder() {\n  this.reset();\n}\n\nAdder.prototype = {\n  constructor: Adder,\n  reset: function() {\n    this.s = // rounded value\n    this.t = 0; // exact error\n  },\n  add: function(y) {\n    add(temp, y, this.t);\n    add(this, temp.s, this.s);\n    if (this.s) this.t += temp.t;\n    else this.s = temp.t;\n  },\n  valueOf: function() {\n    return this.s;\n  }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n  var x = adder.s = a + b,\n      bv = x - a,\n      av = x - bv;\n  adder.t = (a - av) + (b - bv);\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n  return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n    streamGeometryType[geometry.type](geometry, stream);\n  }\n}\n\nvar streamObjectType = {\n  Feature: function(object, stream) {\n    streamGeometry(object.geometry, stream);\n  },\n  FeatureCollection: function(object, stream) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) streamGeometry(features[i].geometry, stream);\n  }\n};\n\nvar streamGeometryType = {\n  Sphere: function(object, stream) {\n    stream.sphere();\n  },\n  Point: function(object, stream) {\n    object = object.coordinates;\n    stream.point(object[0], object[1], object[2]);\n  },\n  MultiPoint: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n  },\n  LineString: function(object, stream) {\n    streamLine(object.coordinates, stream, 0);\n  },\n  MultiLineString: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamLine(coordinates[i], stream, 0);\n  },\n  Polygon: function(object, stream) {\n    streamPolygon(object.coordinates, stream);\n  },\n  MultiPolygon: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamPolygon(coordinates[i], stream);\n  },\n  GeometryCollection: function(object, stream) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) streamGeometry(geometries[i], stream);\n  }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n  var i = -1, n = coordinates.length - closed, coordinate;\n  stream.lineStart();\n  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n  stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n  var i = -1, n = coordinates.length;\n  stream.polygonStart();\n  while (++i < n) streamLine(coordinates[i], stream, 1);\n  stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n  if (object && streamObjectType.hasOwnProperty(object.type)) {\n    streamObjectType[object.type](object, stream);\n  } else {\n    streamGeometry(object, stream);\n  }\n}\n","import adder from \"./adder.js\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nexport var areaRingSum = adder();\n\nvar areaSum = adder(),\n    lambda00,\n    phi00,\n    lambda0,\n    cosPhi0,\n    sinPhi0;\n\nexport var areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaRingSum.reset();\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    var areaRing = +areaRingSum;\n    areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n    this.lineStart = this.lineEnd = this.point = noop;\n  },\n  sphere: function() {\n    areaSum.add(tau);\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n  areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n  areaStream.point = areaPoint;\n  lambda00 = lambda, phi00 = phi;\n  lambda *= radians, phi *= radians;\n  lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n  // Spherical excess E for a spherical triangle with vertices: south pole,\n  // previous point, current point.  Uses a formula derived from Cagnoli’s\n  // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n  var dLambda = lambda - lambda0,\n      sdLambda = dLambda >= 0 ? 1 : -1,\n      adLambda = sdLambda * dLambda,\n      cosPhi = cos(phi),\n      sinPhi = sin(phi),\n      k = sinPhi0 * sinPhi,\n      u = cosPhi0 * cosPhi + k * cos(adLambda),\n      v = k * sdLambda * sin(adLambda);\n  areaRingSum.add(atan2(v, u));\n\n  // Advance the previous points.\n  lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n  areaSum.reset();\n  stream(object, areaStream);\n  return areaSum * 2;\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n  return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n  var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n  return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n  return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n  a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n  return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n  var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n  d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import adder from \"./adder.js\";\nimport {areaStream, areaRingSum} from \"./area.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport {abs, degrees, epsilon, radians} from \"./math.js\";\nimport stream from \"./stream.js\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n    lambda2, // previous lambda-coordinate\n    lambda00, phi00, // first point\n    p0, // previous 3D point\n    deltaSum = adder(),\n    ranges,\n    range;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: boundsLineStart,\n  lineEnd: boundsLineEnd,\n  polygonStart: function() {\n    boundsStream.point = boundsRingPoint;\n    boundsStream.lineStart = boundsRingStart;\n    boundsStream.lineEnd = boundsRingEnd;\n    deltaSum.reset();\n    areaStream.polygonStart();\n  },\n  polygonEnd: function() {\n    areaStream.polygonEnd();\n    boundsStream.point = boundsPoint;\n    boundsStream.lineStart = boundsLineStart;\n    boundsStream.lineEnd = boundsLineEnd;\n    if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n    else if (deltaSum > epsilon) phi1 = 90;\n    else if (deltaSum < -epsilon) phi0 = -90;\n    range[0] = lambda0, range[1] = lambda1;\n  },\n  sphere: function() {\n    lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n  }\n};\n\nfunction boundsPoint(lambda, phi) {\n  ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n  var p = cartesian([lambda * radians, phi * radians]);\n  if (p0) {\n    var normal = cartesianCross(p0, p),\n        equatorial = [normal[1], -normal[0], 0],\n        inflection = cartesianCross(equatorial, normal);\n    cartesianNormalizeInPlace(inflection);\n    inflection = spherical(inflection);\n    var delta = lambda - lambda2,\n        sign = delta > 0 ? 1 : -1,\n        lambdai = inflection[0] * degrees * sign,\n        phii,\n        antimeridian = abs(delta) > 180;\n    if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n      phii = inflection[1] * degrees;\n      if (phii > phi1) phi1 = phii;\n    } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n      phii = -inflection[1] * degrees;\n      if (phii < phi0) phi0 = phii;\n    } else {\n      if (phi < phi0) phi0 = phi;\n      if (phi > phi1) phi1 = phi;\n    }\n    if (antimeridian) {\n      if (lambda < lambda2) {\n        if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n      } else {\n        if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n      }\n    } else {\n      if (lambda1 >= lambda0) {\n        if (lambda < lambda0) lambda0 = lambda;\n        if (lambda > lambda1) lambda1 = lambda;\n      } else {\n        if (lambda > lambda2) {\n          if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n        } else {\n          if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n        }\n      }\n    }\n  } else {\n    ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n  }\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n  p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n  boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n  range[0] = lambda0, range[1] = lambda1;\n  boundsStream.point = boundsPoint;\n  p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n  if (p0) {\n    var delta = lambda - lambda2;\n    deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n  } else {\n    lambda00 = lambda, phi00 = phi;\n  }\n  areaStream.point(lambda, phi);\n  linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n  areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n  boundsRingPoint(lambda00, phi00);\n  areaStream.lineEnd();\n  if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n  range[0] = lambda0, range[1] = lambda1;\n  p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n  return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n  return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n  return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n  var i, n, a, b, merged, deltaMax, delta;\n\n  phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n  ranges = [];\n  stream(feature, boundsStream);\n\n  // First, sort ranges by their minimum longitudes.\n  if (n = ranges.length) {\n    ranges.sort(rangeCompare);\n\n    // Then, merge any ranges that overlap.\n    for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n      b = ranges[i];\n      if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n        if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n        if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n      } else {\n        merged.push(a = b);\n      }\n    }\n\n    // Finally, find the largest gap between the merged ranges.\n    // The final bounding box will be the inverse of this gap.\n    for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n      b = merged[i];\n      if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n    }\n  }\n\n  ranges = range = null;\n\n  return lambda0 === Infinity || phi0 === Infinity\n      ? [[NaN, NaN], [NaN, NaN]]\n      : [[lambda0, phi0], [lambda1, phi1]];\n}\n","import {asin, atan2, cos, degrees, epsilon, epsilon2, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar W0, W1,\n    X0, Y0, Z0,\n    X1, Y1, Z1,\n    X2, Y2, Z2,\n    lambda00, phi00, // first point\n    x0, y0, z0; // previous point\n\nvar centroidStream = {\n  sphere: noop,\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi);\n  centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n  ++W0;\n  X0 += (x - X0) / W0;\n  Y0 += (y - Y0) / W0;\n  Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi);\n  x0 = cosPhi * cos(lambda);\n  y0 = cosPhi * sin(lambda);\n  z0 = sin(phi);\n  centroidStream.point = centroidLinePoint;\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi),\n      x = cosPhi * cos(lambda),\n      y = cosPhi * sin(lambda),\n      z = sin(phi),\n      w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n  W1 += w;\n  X1 += w * (x0 + (x0 = x));\n  Y1 += w * (y0 + (y0 = y));\n  Z1 += w * (z0 + (z0 = z));\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n  centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n  centroidRingPoint(lambda00, phi00);\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n  lambda00 = lambda, phi00 = phi;\n  lambda *= radians, phi *= radians;\n  centroidStream.point = centroidRingPoint;\n  var cosPhi = cos(phi);\n  x0 = cosPhi * cos(lambda);\n  y0 = cosPhi * sin(lambda);\n  z0 = sin(phi);\n  centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var cosPhi = cos(phi),\n      x = cosPhi * cos(lambda),\n      y = cosPhi * sin(lambda),\n      z = sin(phi),\n      cx = y0 * z - z0 * y,\n      cy = z0 * x - x0 * z,\n      cz = x0 * y - y0 * x,\n      m = sqrt(cx * cx + cy * cy + cz * cz),\n      w = asin(m), // line weight = angle\n      v = m && -w / m; // area weight multiplier\n  X2 += v * cx;\n  Y2 += v * cy;\n  Z2 += v * cz;\n  W1 += w;\n  X1 += w * (x0 + (x0 = x));\n  Y1 += w * (y0 + (y0 = y));\n  Z1 += w * (z0 + (z0 = z));\n  centroidPointCartesian(x0, y0, z0);\n}\n\nexport default function(object) {\n  W0 = W1 =\n  X0 = Y0 = Z0 =\n  X1 = Y1 = Z1 =\n  X2 = Y2 = Z2 = 0;\n  stream(object, centroidStream);\n\n  var x = X2,\n      y = Y2,\n      z = Z2,\n      m = x * x + y * y + z * z;\n\n  // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n  if (m < epsilon2) {\n    x = X1, y = Y1, z = Z1;\n    // If the feature has zero length, fall back to arithmetic mean of point vectors.\n    if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n    m = x * x + y * y + z * z;\n    // If the feature still has an undefined ccentroid, then return.\n    if (m < epsilon2) return [NaN, NaN];\n  }\n\n  return [atan2(y, x) * degrees, asin(z / sqrt(m)) * degrees];\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function(a, b) {\n\n  function compose(x, y) {\n    return x = a(x, y), b(x[0], x[1]);\n  }\n\n  if (a.invert && b.invert) compose.invert = function(x, y) {\n    return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n  };\n\n  return compose;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n  return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n  return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n    : rotationLambda(deltaLambda))\n    : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n    : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n  return function(lambda, phi) {\n    return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n  };\n}\n\nfunction rotationLambda(deltaLambda) {\n  var rotation = forwardRotationLambda(deltaLambda);\n  rotation.invert = forwardRotationLambda(-deltaLambda);\n  return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n  var cosDeltaPhi = cos(deltaPhi),\n      sinDeltaPhi = sin(deltaPhi),\n      cosDeltaGamma = cos(deltaGamma),\n      sinDeltaGamma = sin(deltaGamma);\n\n  function rotation(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaPhi + x * sinDeltaPhi;\n    return [\n      atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n      asin(k * cosDeltaGamma + y * sinDeltaGamma)\n    ];\n  }\n\n  rotation.invert = function(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaGamma - y * sinDeltaGamma;\n    return [\n      atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n      asin(k * cosDeltaPhi - x * sinDeltaPhi)\n    ];\n  };\n\n  return rotation;\n}\n\nexport default function(rotate) {\n  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n  function forward(coordinates) {\n    coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  }\n\n  forward.invert = function(coordinates) {\n    coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  };\n\n  return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n  if (!delta) return;\n  var cosRadius = cos(radius),\n      sinRadius = sin(radius),\n      step = direction * delta;\n  if (t0 == null) {\n    t0 = radius + direction * tau;\n    t1 = radius - step / 2;\n  } else {\n    t0 = circleRadius(cosRadius, t0);\n    t1 = circleRadius(cosRadius, t1);\n    if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n  }\n  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n    point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n    stream.point(point[0], point[1]);\n  }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n  point = cartesian(point), point[0] -= cosRadius;\n  cartesianNormalizeInPlace(point);\n  var radius = acos(-point[1]);\n  return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n  var center = constant([0, 0]),\n      radius = constant(90),\n      precision = constant(6),\n      ring,\n      rotate,\n      stream = {point: point};\n\n  function point(x, y) {\n    ring.push(x = rotate(x, y));\n    x[0] *= degrees, x[1] *= degrees;\n  }\n\n  function circle() {\n    var c = center.apply(this, arguments),\n        r = radius.apply(this, arguments) * radians,\n        p = precision.apply(this, arguments) * radians;\n    ring = [];\n    rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n    circleStream(stream, r, p, 1);\n    c = {type: \"Polygon\", coordinates: [ring]};\n    ring = rotate = null;\n    return c;\n  }\n\n  circle.center = function(_) {\n    return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n  };\n\n  circle.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n  };\n\n  circle.precision = function(_) {\n    return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n  };\n\n  return circle;\n}\n","import noop from \"../noop.js\";\n\nexport default function() {\n  var lines = [],\n      line;\n  return {\n    point: function(x, y, m) {\n      line.push([x, y, m]);\n    },\n    lineStart: function() {\n      lines.push(line = []);\n    },\n    lineEnd: noop,\n    rejoin: function() {\n      if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n    },\n    result: function() {\n      var result = lines;\n      lines = [];\n      line = null;\n      return result;\n    }\n  };\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n  return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n  this.x = point;\n  this.z = points;\n  this.o = other; // another intersection\n  this.e = entry; // is an entry?\n  this.v = false; // visited\n  this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n  var subject = [],\n      clip = [],\n      i,\n      n;\n\n  segments.forEach(function(segment) {\n    if ((n = segment.length - 1) <= 0) return;\n    var n, p0 = segment[0], p1 = segment[n], x;\n\n    if (pointEqual(p0, p1)) {\n      if (!p0[2] && !p1[2]) {\n        stream.lineStart();\n        for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n        stream.lineEnd();\n        return;\n      }\n      // handle degenerate cases by moving the point\n      p1[0] += 2 * epsilon;\n    }\n\n    subject.push(x = new Intersection(p0, segment, null, true));\n    clip.push(x.o = new Intersection(p0, null, x, false));\n    subject.push(x = new Intersection(p1, segment, null, false));\n    clip.push(x.o = new Intersection(p1, null, x, true));\n  });\n\n  if (!subject.length) return;\n\n  clip.sort(compareIntersection);\n  link(subject);\n  link(clip);\n\n  for (i = 0, n = clip.length; i < n; ++i) {\n    clip[i].e = startInside = !startInside;\n  }\n\n  var start = subject[0],\n      points,\n      point;\n\n  while (1) {\n    // Find first unvisited intersection.\n    var current = start,\n        isSubject = true;\n    while (current.v) if ((current = current.n) === start) return;\n    points = current.z;\n    stream.lineStart();\n    do {\n      current.v = current.o.v = true;\n      if (current.e) {\n        if (isSubject) {\n          for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.n.x, 1, stream);\n        }\n        current = current.n;\n      } else {\n        if (isSubject) {\n          points = current.p.z;\n          for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.p.x, -1, stream);\n        }\n        current = current.p;\n      }\n      current = current.o;\n      points = current.z;\n      isSubject = !isSubject;\n    } while (!current.v);\n    stream.lineEnd();\n  }\n}\n\nfunction link(array) {\n  if (!(n = array.length)) return;\n  var n,\n      i = 0,\n      a = array[0],\n      b;\n  while (++i < n) {\n    a.n = b = array[i];\n    b.p = a;\n    a = b;\n  }\n  a.n = b = array[0];\n  b.p = a;\n}\n","import adder from \"./adder.js\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nvar sum = adder();\n\nfunction longitude(point) {\n  if (abs(point[0]) <= pi)\n    return point[0];\n  else\n    return sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n  var lambda = longitude(point),\n      phi = point[1],\n      sinPhi = sin(phi),\n      normal = [sin(lambda), -cos(lambda), 0],\n      angle = 0,\n      winding = 0;\n\n  sum.reset();\n\n  if (sinPhi === 1) phi = halfPi + epsilon;\n  else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n  for (var i = 0, n = polygon.length; i < n; ++i) {\n    if (!(m = (ring = polygon[i]).length)) continue;\n    var ring,\n        m,\n        point0 = ring[m - 1],\n        lambda0 = longitude(point0),\n        phi0 = point0[1] / 2 + quarterPi,\n        sinPhi0 = sin(phi0),\n        cosPhi0 = cos(phi0);\n\n    for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n      var point1 = ring[j],\n          lambda1 = longitude(point1),\n          phi1 = point1[1] / 2 + quarterPi,\n          sinPhi1 = sin(phi1),\n          cosPhi1 = cos(phi1),\n          delta = lambda1 - lambda0,\n          sign = delta >= 0 ? 1 : -1,\n          absDelta = sign * delta,\n          antimeridian = absDelta > pi,\n          k = sinPhi0 * sinPhi1;\n\n      sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n      angle += antimeridian ? delta + sign * tau : delta;\n\n      // Are the longitudes either side of the point’s meridian (lambda),\n      // and are the latitudes smaller than the parallel (phi)?\n      if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n        var arc = cartesianCross(cartesian(point0), cartesian(point1));\n        cartesianNormalizeInPlace(arc);\n        var intersection = cartesianCross(normal, arc);\n        cartesianNormalizeInPlace(intersection);\n        var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n        if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n          winding += antimeridian ^ delta >= 0 ? 1 : -1;\n        }\n      }\n    }\n  }\n\n  // First, determine whether the South pole is inside or outside:\n  //\n  // It is inside if:\n  // * the polygon winds around it in a clockwise direction.\n  // * the polygon does not (cumulatively) wind around it, but has a negative\n  //   (counter-clockwise) area.\n  //\n  // Second, count the (signed) number of times a segment crosses a lambda\n  // from the point to the South pole.  If it is zero, then the point is the\n  // same side as the South pole.\n\n  return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n  return function(sink) {\n    var line = clipLine(sink),\n        ringBuffer = clipBuffer(),\n        ringSink = clipLine(ringBuffer),\n        polygonStarted = false,\n        polygon,\n        segments,\n        ring;\n\n    var clip = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        clip.point = pointRing;\n        clip.lineStart = ringStart;\n        clip.lineEnd = ringEnd;\n        segments = [];\n        polygon = [];\n      },\n      polygonEnd: function() {\n        clip.point = point;\n        clip.lineStart = lineStart;\n        clip.lineEnd = lineEnd;\n        segments = merge(segments);\n        var startInside = polygonContains(polygon, start);\n        if (segments.length) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n        } else if (startInside) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          interpolate(null, null, 1, sink);\n          sink.lineEnd();\n        }\n        if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n        segments = polygon = null;\n      },\n      sphere: function() {\n        sink.polygonStart();\n        sink.lineStart();\n        interpolate(null, null, 1, sink);\n        sink.lineEnd();\n        sink.polygonEnd();\n      }\n    };\n\n    function point(lambda, phi) {\n      if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n    }\n\n    function pointLine(lambda, phi) {\n      line.point(lambda, phi);\n    }\n\n    function lineStart() {\n      clip.point = pointLine;\n      line.lineStart();\n    }\n\n    function lineEnd() {\n      clip.point = point;\n      line.lineEnd();\n    }\n\n    function pointRing(lambda, phi) {\n      ring.push([lambda, phi]);\n      ringSink.point(lambda, phi);\n    }\n\n    function ringStart() {\n      ringSink.lineStart();\n      ring = [];\n    }\n\n    function ringEnd() {\n      pointRing(ring[0][0], ring[0][1]);\n      ringSink.lineEnd();\n\n      var clean = ringSink.clean(),\n          ringSegments = ringBuffer.result(),\n          i, n = ringSegments.length, m,\n          segment,\n          point;\n\n      ring.pop();\n      polygon.push(ring);\n      ring = null;\n\n      if (!n) return;\n\n      // No intersections.\n      if (clean & 1) {\n        segment = ringSegments[0];\n        if ((m = segment.length - 1) > 0) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n          sink.lineEnd();\n        }\n        return;\n      }\n\n      // Rejoin connected segments.\n      // TODO reuse ringBuffer.rejoin()?\n      if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n      segments.push(ringSegments.filter(validSegment));\n    }\n\n    return clip;\n  };\n}\n\nfunction validSegment(segment) {\n  return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n  return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n       - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n  function() { return true; },\n  clipAntimeridianLine,\n  clipAntimeridianInterpolate,\n  [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n  var lambda0 = NaN,\n      phi0 = NaN,\n      sign0 = NaN,\n      clean; // no intersections\n\n  return {\n    lineStart: function() {\n      stream.lineStart();\n      clean = 1;\n    },\n    point: function(lambda1, phi1) {\n      var sign1 = lambda1 > 0 ? pi : -pi,\n          delta = abs(lambda1 - lambda0);\n      if (abs(delta - pi) < epsilon) { // line crosses a pole\n        stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        stream.point(lambda1, phi0);\n        clean = 0;\n      } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n        if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n        if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n        phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        clean = 0;\n      }\n      stream.point(lambda0 = lambda1, phi0 = phi1);\n      sign0 = sign1;\n    },\n    lineEnd: function() {\n      stream.lineEnd();\n      lambda0 = phi0 = NaN;\n    },\n    clean: function() {\n      return 2 - clean; // if intersections, rejoin first and last segments\n    }\n  };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n  var cosPhi0,\n      cosPhi1,\n      sinLambda0Lambda1 = sin(lambda0 - lambda1);\n  return abs(sinLambda0Lambda1) > epsilon\n      ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n          - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n          / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n      : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n  var phi;\n  if (from == null) {\n    phi = direction * halfPi;\n    stream.point(-pi, phi);\n    stream.point(0, phi);\n    stream.point(pi, phi);\n    stream.point(pi, 0);\n    stream.point(pi, -phi);\n    stream.point(0, -phi);\n    stream.point(-pi, -phi);\n    stream.point(-pi, 0);\n    stream.point(-pi, phi);\n  } else if (abs(from[0] - to[0]) > epsilon) {\n    var lambda = from[0] < to[0] ? pi : -pi;\n    phi = direction * lambda / 2;\n    stream.point(-lambda, phi);\n    stream.point(0, phi);\n    stream.point(lambda, phi);\n  } else {\n    stream.point(to[0], to[1]);\n  }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n  var cr = cos(radius),\n      delta = 6 * radians,\n      smallRadius = cr > 0,\n      notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n  function interpolate(from, to, direction, stream) {\n    circleStream(stream, radius, delta, direction, from, to);\n  }\n\n  function visible(lambda, phi) {\n    return cos(lambda) * cos(phi) > cr;\n  }\n\n  // Takes a line and cuts into visible segments. Return values used for polygon\n  // clipping: 0 - there were intersections or the line was empty; 1 - no\n  // intersections 2 - there were intersections, and the first and last segments\n  // should be rejoined.\n  function clipLine(stream) {\n    var point0, // previous point\n        c0, // code for previous point\n        v0, // visibility of previous point\n        v00, // visibility of first point\n        clean; // no intersections\n    return {\n      lineStart: function() {\n        v00 = v0 = false;\n        clean = 1;\n      },\n      point: function(lambda, phi) {\n        var point1 = [lambda, phi],\n            point2,\n            v = visible(lambda, phi),\n            c = smallRadius\n              ? v ? 0 : code(lambda, phi)\n              : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n        if (!point0 && (v00 = v0 = v)) stream.lineStart();\n        if (v !== v0) {\n          point2 = intersect(point0, point1);\n          if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n            point1[2] = 1;\n        }\n        if (v !== v0) {\n          clean = 0;\n          if (v) {\n            // outside going in\n            stream.lineStart();\n            point2 = intersect(point1, point0);\n            stream.point(point2[0], point2[1]);\n          } else {\n            // inside going out\n            point2 = intersect(point0, point1);\n            stream.point(point2[0], point2[1], 2);\n            stream.lineEnd();\n          }\n          point0 = point2;\n        } else if (notHemisphere && point0 && smallRadius ^ v) {\n          var t;\n          // If the codes for two points are different, or are both zero,\n          // and there this segment intersects with the small circle.\n          if (!(c & c0) && (t = intersect(point1, point0, true))) {\n            clean = 0;\n            if (smallRadius) {\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1]);\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n            } else {\n              stream.point(t[1][0], t[1][1]);\n              stream.lineEnd();\n              stream.lineStart();\n              stream.point(t[0][0], t[0][1], 3);\n            }\n          }\n        }\n        if (v && (!point0 || !pointEqual(point0, point1))) {\n          stream.point(point1[0], point1[1]);\n        }\n        point0 = point1, v0 = v, c0 = c;\n      },\n      lineEnd: function() {\n        if (v0) stream.lineEnd();\n        point0 = null;\n      },\n      // Rejoin first and last segments if there were intersections and the first\n      // and last points were visible.\n      clean: function() {\n        return clean | ((v00 && v0) << 1);\n      }\n    };\n  }\n\n  // Intersects the great circle between a and b with the clip circle.\n  function intersect(a, b, two) {\n    var pa = cartesian(a),\n        pb = cartesian(b);\n\n    // We have two planes, n1.p = d1 and n2.p = d2.\n    // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n    var n1 = [1, 0, 0], // normal\n        n2 = cartesianCross(pa, pb),\n        n2n2 = cartesianDot(n2, n2),\n        n1n2 = n2[0], // cartesianDot(n1, n2),\n        determinant = n2n2 - n1n2 * n1n2;\n\n    // Two polar points.\n    if (!determinant) return !two && a;\n\n    var c1 =  cr * n2n2 / determinant,\n        c2 = -cr * n1n2 / determinant,\n        n1xn2 = cartesianCross(n1, n2),\n        A = cartesianScale(n1, c1),\n        B = cartesianScale(n2, c2);\n    cartesianAddInPlace(A, B);\n\n    // Solve |p(t)|^2 = 1.\n    var u = n1xn2,\n        w = cartesianDot(A, u),\n        uu = cartesianDot(u, u),\n        t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n    if (t2 < 0) return;\n\n    var t = sqrt(t2),\n        q = cartesianScale(u, (-w - t) / uu);\n    cartesianAddInPlace(q, A);\n    q = spherical(q);\n\n    if (!two) return q;\n\n    // Two intersection points.\n    var lambda0 = a[0],\n        lambda1 = b[0],\n        phi0 = a[1],\n        phi1 = b[1],\n        z;\n\n    if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n    var delta = lambda1 - lambda0,\n        polar = abs(delta - pi) < epsilon,\n        meridian = polar || delta < epsilon;\n\n    if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n    // Check that the first point is between a and b.\n    if (meridian\n        ? polar\n          ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n          : phi0 <= q[1] && q[1] <= phi1\n        : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n      var q1 = cartesianScale(u, (-w + t) / uu);\n      cartesianAddInPlace(q1, A);\n      return [q, spherical(q1)];\n    }\n  }\n\n  // Generates a 4-bit vector representing the location of a point relative to\n  // the small circle's bounding box.\n  function code(lambda, phi) {\n    var r = smallRadius ? radius : pi - radius,\n        code = 0;\n    if (lambda < -r) code |= 1; // left\n    else if (lambda > r) code |= 2; // right\n    if (phi < -r) code |= 4; // below\n    else if (phi > r) code |= 8; // above\n    return code;\n  }\n\n  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n  function visible(x, y) {\n    return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n  }\n\n  function interpolate(from, to, direction, stream) {\n    var a = 0, a1 = 0;\n    if (from == null\n        || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n        || comparePoint(from, to) < 0 ^ direction > 0) {\n      do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n      while ((a = (a + direction + 4) % 4) !== a1);\n    } else {\n      stream.point(to[0], to[1]);\n    }\n  }\n\n  function corner(p, direction) {\n    return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n        : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n        : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n        : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n  }\n\n  function compareIntersection(a, b) {\n    return comparePoint(a.x, b.x);\n  }\n\n  function comparePoint(a, b) {\n    var ca = corner(a, 1),\n        cb = corner(b, 1);\n    return ca !== cb ? ca - cb\n        : ca === 0 ? b[1] - a[1]\n        : ca === 1 ? a[0] - b[0]\n        : ca === 2 ? a[1] - b[1]\n        : b[0] - a[0];\n  }\n\n  return function(stream) {\n    var activeStream = stream,\n        bufferStream = clipBuffer(),\n        segments,\n        polygon,\n        ring,\n        x__, y__, v__, // first point\n        x_, y_, v_, // previous point\n        first,\n        clean;\n\n    var clipStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: polygonStart,\n      polygonEnd: polygonEnd\n    };\n\n    function point(x, y) {\n      if (visible(x, y)) activeStream.point(x, y);\n    }\n\n    function polygonInside() {\n      var winding = 0;\n\n      for (var i = 0, n = polygon.length; i < n; ++i) {\n        for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n          a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n          if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n          else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n        }\n      }\n\n      return winding;\n    }\n\n    // Buffer geometry within a polygon and then clip it en masse.\n    function polygonStart() {\n      activeStream = bufferStream, segments = [], polygon = [], clean = true;\n    }\n\n    function polygonEnd() {\n      var startInside = polygonInside(),\n          cleanInside = clean && startInside,\n          visible = (segments = merge(segments)).length;\n      if (cleanInside || visible) {\n        stream.polygonStart();\n        if (cleanInside) {\n          stream.lineStart();\n          interpolate(null, null, 1, stream);\n          stream.lineEnd();\n        }\n        if (visible) {\n          clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n        }\n        stream.polygonEnd();\n      }\n      activeStream = stream, segments = polygon = ring = null;\n    }\n\n    function lineStart() {\n      clipStream.point = linePoint;\n      if (polygon) polygon.push(ring = []);\n      first = true;\n      v_ = false;\n      x_ = y_ = NaN;\n    }\n\n    // TODO rather than special-case polygons, simply handle them separately.\n    // Ideally, coincident intersection points should be jittered to avoid\n    // clipping issues.\n    function lineEnd() {\n      if (segments) {\n        linePoint(x__, y__);\n        if (v__ && v_) bufferStream.rejoin();\n        segments.push(bufferStream.result());\n      }\n      clipStream.point = point;\n      if (v_) activeStream.lineEnd();\n    }\n\n    function linePoint(x, y) {\n      var v = visible(x, y);\n      if (polygon) ring.push([x, y]);\n      if (first) {\n        x__ = x, y__ = y, v__ = v;\n        first = false;\n        if (v) {\n          activeStream.lineStart();\n          activeStream.point(x, y);\n        }\n      } else {\n        if (v && v_) activeStream.point(x, y);\n        else {\n          var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n              b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n          if (clipLine(a, b, x0, y0, x1, y1)) {\n            if (!v_) {\n              activeStream.lineStart();\n              activeStream.point(a[0], a[1]);\n            }\n            activeStream.point(b[0], b[1]);\n            if (!v) activeStream.lineEnd();\n            clean = false;\n          } else if (v) {\n            activeStream.lineStart();\n            activeStream.point(x, y);\n            clean = false;\n          }\n        }\n      }\n      x_ = x, y_ = y, v_ = v;\n    }\n\n    return clipStream;\n  };\n}\n","export default function(a, b, x0, y0, x1, y1) {\n  var 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) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n  return true;\n}\n","import clipRectangle from \"./rectangle.js\";\n\nexport default function() {\n  var x0 = 0,\n      y0 = 0,\n      x1 = 960,\n      y1 = 500,\n      cache,\n      cacheStream,\n      clip;\n\n  return clip = {\n    stream: function(stream) {\n      return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream);\n    },\n    extent: function(_) {\n      return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];\n    }\n  };\n}\n","import adder from \"./adder.js\";\nimport {abs, atan2, cos, radians, sin, sqrt} from \"./math.js\";\nimport noop from \"./noop.js\";\nimport stream from \"./stream.js\";\n\nvar lengthSum = adder(),\n    lambda0,\n    sinPhi0,\n    cosPhi0;\n\nvar lengthStream = {\n  sphere: noop,\n  point: noop,\n  lineStart: lengthLineStart,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n  lengthStream.point = lengthPointFirst;\n  lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n  lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  lambda0 = lambda, sinPhi0 = sin(phi), cosPhi0 = cos(phi);\n  lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var sinPhi = sin(phi),\n      cosPhi = cos(phi),\n      delta = abs(lambda - lambda0),\n      cosDelta = cos(delta),\n      sinDelta = sin(delta),\n      x = cosPhi * sinDelta,\n      y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n      z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n  lengthSum.add(atan2(sqrt(x * x + y * y), z));\n  lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\nexport default function(object) {\n  lengthSum.reset();\n  stream(object, lengthStream);\n  return +lengthSum;\n}\n","import length from \"./length.js\";\n\nvar coordinates = [null, null],\n    object = {type: \"LineString\", coordinates: coordinates};\n\nexport default function(a, b) {\n  coordinates[0] = a;\n  coordinates[1] = b;\n  return length(object);\n}\n","import {default as polygonContains} from \"./polygonContains.js\";\nimport {default as distance} from \"./distance.js\";\nimport {epsilon2, radians} from \"./math.js\";\n\nvar containsObjectType = {\n  Feature: function(object, point) {\n    return containsGeometry(object.geometry, point);\n  },\n  FeatureCollection: function(object, point) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) if (containsGeometry(features[i].geometry, point)) return true;\n    return false;\n  }\n};\n\nvar containsGeometryType = {\n  Sphere: function() {\n    return true;\n  },\n  Point: function(object, point) {\n    return containsPoint(object.coordinates, point);\n  },\n  MultiPoint: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsPoint(coordinates[i], point)) return true;\n    return false;\n  },\n  LineString: function(object, point) {\n    return containsLine(object.coordinates, point);\n  },\n  MultiLineString: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsLine(coordinates[i], point)) return true;\n    return false;\n  },\n  Polygon: function(object, point) {\n    return containsPolygon(object.coordinates, point);\n  },\n  MultiPolygon: function(object, point) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) if (containsPolygon(coordinates[i], point)) return true;\n    return false;\n  },\n  GeometryCollection: function(object, point) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) if (containsGeometry(geometries[i], point)) return true;\n    return false;\n  }\n};\n\nfunction containsGeometry(geometry, point) {\n  return geometry && containsGeometryType.hasOwnProperty(geometry.type)\n      ? containsGeometryType[geometry.type](geometry, point)\n      : false;\n}\n\nfunction containsPoint(coordinates, point) {\n  return distance(coordinates, point) === 0;\n}\n\nfunction containsLine(coordinates, point) {\n  var ao, bo, ab;\n  for (var i = 0, n = coordinates.length; i < n; i++) {\n    bo = distance(coordinates[i], point);\n    if (bo === 0) return true;\n    if (i > 0) {\n      ab = distance(coordinates[i], coordinates[i - 1]);\n      if (\n        ab > 0 &&\n        ao <= ab &&\n        bo <= ab &&\n        (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < epsilon2 * ab\n      )\n        return true;\n    }\n    ao = bo;\n  }\n  return false;\n}\n\nfunction containsPolygon(coordinates, point) {\n  return !!polygonContains(coordinates.map(ringRadians), pointRadians(point));\n}\n\nfunction ringRadians(ring) {\n  return ring = ring.map(pointRadians), ring.pop(), ring;\n}\n\nfunction pointRadians(point) {\n  return [point[0] * radians, point[1] * radians];\n}\n\nexport default function(object, point) {\n  return (object && containsObjectType.hasOwnProperty(object.type)\n      ? containsObjectType[object.type]\n      : containsGeometry)(object, point);\n}\n","import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math.js\";\n\nfunction graticuleX(y0, y1, dy) {\n  var y = range(y0, y1 - epsilon, dy).concat(y1);\n  return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n  var x = range(x0, x1 - epsilon, dx).concat(x1);\n  return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n  var x1, x0, X1, X0,\n      y1, y0, Y1, Y0,\n      dx = 10, dy = dx, DX = 90, DY = 360,\n      x, y, X, Y,\n      precision = 2.5;\n\n  function graticule() {\n    return {type: \"MultiLineString\", coordinates: lines()};\n  }\n\n  function lines() {\n    return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n        .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n        .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n        .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n  }\n\n  graticule.lines = function() {\n    return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n  };\n\n  graticule.outline = function() {\n    return {\n      type: \"Polygon\",\n      coordinates: [\n        X(X0).concat(\n        Y(Y1).slice(1),\n        X(X1).reverse().slice(1),\n        Y(Y0).reverse().slice(1))\n      ]\n    };\n  };\n\n  graticule.extent = function(_) {\n    if (!arguments.length) return graticule.extentMinor();\n    return graticule.extentMajor(_).extentMinor(_);\n  };\n\n  graticule.extentMajor = function(_) {\n    if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n    X0 = +_[0][0], X1 = +_[1][0];\n    Y0 = +_[0][1], Y1 = +_[1][1];\n    if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n    if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.extentMinor = function(_) {\n    if (!arguments.length) return [[x0, y0], [x1, y1]];\n    x0 = +_[0][0], x1 = +_[1][0];\n    y0 = +_[0][1], y1 = +_[1][1];\n    if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n    if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n    return graticule.precision(precision);\n  };\n\n  graticule.step = function(_) {\n    if (!arguments.length) return graticule.stepMinor();\n    return graticule.stepMajor(_).stepMinor(_);\n  };\n\n  graticule.stepMajor = function(_) {\n    if (!arguments.length) return [DX, DY];\n    DX = +_[0], DY = +_[1];\n    return graticule;\n  };\n\n  graticule.stepMinor = function(_) {\n    if (!arguments.length) return [dx, dy];\n    dx = +_[0], dy = +_[1];\n    return graticule;\n  };\n\n  graticule.precision = function(_) {\n    if (!arguments.length) return precision;\n    precision = +_;\n    x = graticuleX(y0, y1, 90);\n    y = graticuleY(x0, x1, precision);\n    X = graticuleX(Y0, Y1, 90);\n    Y = graticuleY(X0, X1, precision);\n    return graticule;\n  };\n\n  return graticule\n      .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n      .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n  return graticule()();\n}\n","import {asin, atan2, cos, degrees, haversin, radians, sin, sqrt} from \"./math.js\";\n\nexport default function(a, b) {\n  var x0 = a[0] * radians,\n      y0 = a[1] * radians,\n      x1 = b[0] * radians,\n      y1 = b[1] * radians,\n      cy0 = cos(y0),\n      sy0 = sin(y0),\n      cy1 = cos(y1),\n      sy1 = sin(y1),\n      kx0 = cy0 * cos(x0),\n      ky0 = cy0 * sin(x0),\n      kx1 = cy1 * cos(x1),\n      ky1 = cy1 * sin(x1),\n      d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),\n      k = sin(d);\n\n  var interpolate = d ? function(t) {\n    var B = sin(t *= d) / k,\n        A = sin(d - t) / k,\n        x = A * kx0 + B * kx1,\n        y = A * ky0 + B * ky1,\n        z = A * sy0 + B * sy1;\n    return [\n      atan2(y, x) * degrees,\n      atan2(z, sqrt(x * x + y * y)) * degrees\n    ];\n  } : function() {\n    return [x0 * degrees, y0 * degrees];\n  };\n\n  interpolate.distance = d;\n\n  return interpolate;\n}\n","import adder from \"../adder.js\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = adder(),\n    areaRingSum = adder(),\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n    areaSum.add(abs(areaRingSum));\n    areaRingSum.reset();\n  },\n  result: function() {\n    var area = areaSum / 2;\n    areaSum.reset();\n    return area;\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n  areaStream.point = areaPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n  areaRingSum.add(y0 * x - x0 * y);\n  x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n  areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","export default function(x) {\n  return x;\n}\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n    y0 = x0,\n    x1 = -x0,\n    y1 = x1;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop,\n  result: function() {\n    var bounds = [[x0, y0], [x1, y1]];\n    x1 = y1 = -(y0 = x0 = Infinity);\n    return bounds;\n  }\n};\n\nfunction boundsPoint(x, 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\nexport default boundsStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n    Y0 = 0,\n    Z0 = 0,\n    X1 = 0,\n    Y1 = 0,\n    Z1 = 0,\n    X2 = 0,\n    Y2 = 0,\n    Z2 = 0,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar centroidStream = {\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.point = centroidPoint;\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  },\n  result: function() {\n    var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n        : Z1 ? [X1 / Z1, Y1 / Z1]\n        : Z0 ? [X0 / Z0, Y0 / Z0]\n        : [NaN, NaN];\n    X0 = Y0 = Z0 =\n    X1 = Y1 = Z1 =\n    X2 = Y2 = Z2 = 0;\n    return centroid;\n  }\n};\n\nfunction centroidPoint(x, y) {\n  X0 += x;\n  Y0 += y;\n  ++Z0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n  centroidStream.point = centroidPointLine;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n  var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n  centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n  centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n  centroidStream.point = centroidPointRing;\n  centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n  var dx = x - x0,\n      dy = y - y0,\n      z = sqrt(dx * dx + dy * dy);\n\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n\n  z = y0 * x - x0 * y;\n  X2 += z * (x0 + x);\n  Y2 += z * (y0 + y);\n  Z2 += z * 3;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n  this._context = context;\n}\n\nPathContext.prototype = {\n  _radius: 4.5,\n  pointRadius: function(_) {\n    return this._radius = _, this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._context.closePath();\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._context.moveTo(x, y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._context.lineTo(x, y);\n        break;\n      }\n      default: {\n        this._context.moveTo(x + this._radius, y);\n        this._context.arc(x, y, this._radius, 0, tau);\n        break;\n      }\n    }\n  },\n  result: noop\n};\n","import adder from \"../adder.js\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = adder(),\n    lengthRing,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar lengthStream = {\n  point: noop,\n  lineStart: function() {\n    lengthStream.point = lengthPointFirst;\n  },\n  lineEnd: function() {\n    if (lengthRing) lengthPoint(x00, y00);\n    lengthStream.point = noop;\n  },\n  polygonStart: function() {\n    lengthRing = true;\n  },\n  polygonEnd: function() {\n    lengthRing = null;\n  },\n  result: function() {\n    var length = +lengthSum;\n    lengthSum.reset();\n    return length;\n  }\n};\n\nfunction lengthPointFirst(x, y) {\n  lengthStream.point = lengthPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n  x0 -= x, y0 -= y;\n  lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n  x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n  this._string = [];\n}\n\nPathString.prototype = {\n  _radius: 4.5,\n  _circle: circle(4.5),\n  pointRadius: function(_) {\n    if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n    return this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._string.push(\"Z\");\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._string.push(\"M\", x, \",\", y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._string.push(\"L\", x, \",\", y);\n        break;\n      }\n      default: {\n        if (this._circle == null) this._circle = circle(this._radius);\n        this._string.push(\"M\", x, \",\", y, this._circle);\n        break;\n      }\n    }\n  },\n  result: function() {\n    if (this._string.length) {\n      var result = this._string.join(\"\");\n      this._string = [];\n      return result;\n    } else {\n      return null;\n    }\n  }\n};\n\nfunction circle(radius) {\n  return \"m0,\" + radius\n      + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n      + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n      + \"z\";\n}\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n  var pointRadius = 4.5,\n      projectionStream,\n      contextStream;\n\n  function path(object) {\n    if (object) {\n      if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n      stream(object, projectionStream(contextStream));\n    }\n    return contextStream.result();\n  }\n\n  path.area = function(object) {\n    stream(object, projectionStream(pathArea));\n    return pathArea.result();\n  };\n\n  path.measure = function(object) {\n    stream(object, projectionStream(pathMeasure));\n    return pathMeasure.result();\n  };\n\n  path.bounds = function(object) {\n    stream(object, projectionStream(pathBounds));\n    return pathBounds.result();\n  };\n\n  path.centroid = function(object) {\n    stream(object, projectionStream(pathCentroid));\n    return pathCentroid.result();\n  };\n\n  path.projection = function(_) {\n    return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n  };\n\n  path.context = function(_) {\n    if (!arguments.length) return context;\n    contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n    if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n    return path;\n  };\n\n  path.pointRadius = function(_) {\n    if (!arguments.length) return pointRadius;\n    pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n    return path;\n  };\n\n  return path.projection(projection).context(context);\n}\n","export default function(methods) {\n  return {\n    stream: transformer(methods)\n  };\n}\n\nexport function transformer(methods) {\n  return function(stream) {\n    var s = new TransformStream;\n    for (var key in methods) s[key] = methods[key];\n    s.stream = stream;\n    return s;\n  };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n  constructor: TransformStream,\n  point: function(x, y) { this.stream.point(x, y); },\n  sphere: function() { this.stream.sphere(); },\n  lineStart: function() { this.stream.lineStart(); },\n  lineEnd: function() { this.stream.lineEnd(); },\n  polygonStart: function() { this.stream.polygonStart(); },\n  polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n  var clip = projection.clipExtent && projection.clipExtent();\n  projection.scale(150).translate([0, 0]);\n  if (clip != null) projection.clipExtent(null);\n  geoStream(object, projection.stream(boundsStream));\n  fitBounds(boundsStream.result());\n  if (clip != null) projection.clipExtent(clip);\n  return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n  return fit(projection, function(b) {\n    var w = extent[1][0] - extent[0][0],\n        h = extent[1][1] - extent[0][1],\n        k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n        x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n        y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitSize(projection, size, object) {\n  return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n  return fit(projection, function(b) {\n    var w = +width,\n        k = w / (b[1][0] - b[0][0]),\n        x = (w - k * (b[1][0] + b[0][0])) / 2,\n        y = -k * b[0][1];\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n  return fit(projection, function(b) {\n    var h = +height,\n        k = h / (b[1][1] - b[0][1]),\n        x = -k * b[0][0],\n        y = (h - k * (b[1][1] + b[0][1])) / 2;\n    projection.scale(150 * k).translate([x, y]);\n  }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n    cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n  return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n  return transformer({\n    point: function(x, y) {\n      x = project(x, y);\n      this.stream.point(x[0], x[1]);\n    }\n  });\n}\n\nfunction resample(project, delta2) {\n\n  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n    var dx = x1 - x0,\n        dy = y1 - y0,\n        d2 = dx * dx + dy * dy;\n    if (d2 > 4 * delta2 && depth--) {\n      var a = a0 + a1,\n          b = b0 + b1,\n          c = c0 + c1,\n          m = sqrt(a * a + b * b + c * c),\n          phi2 = asin(c /= m),\n          lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n          p = project(lambda2, phi2),\n          x2 = p[0],\n          y2 = p[1],\n          dx2 = x2 - x0,\n          dy2 = y2 - y0,\n          dz = dy * dx2 - dx * dy2;\n      if (dz * dz / d2 > delta2 // perpendicular projected distance\n          || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n          || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n        stream.point(x2, y2);\n        resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n      }\n    }\n  }\n  return function(stream) {\n    var lambda00, x00, y00, a00, b00, c00, // first point\n        lambda0, x0, y0, a0, b0, c0; // previous point\n\n    var resampleStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n      polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n    };\n\n    function point(x, y) {\n      x = project(x, y);\n      stream.point(x[0], x[1]);\n    }\n\n    function lineStart() {\n      x0 = NaN;\n      resampleStream.point = linePoint;\n      stream.lineStart();\n    }\n\n    function linePoint(lambda, phi) {\n      var c = cartesian([lambda, phi]), p = project(lambda, phi);\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n      stream.point(x0, y0);\n    }\n\n    function lineEnd() {\n      resampleStream.point = point;\n      stream.lineEnd();\n    }\n\n    function ringStart() {\n      lineStart();\n      resampleStream.point = ringPoint;\n      resampleStream.lineEnd = ringEnd;\n    }\n\n    function ringPoint(lambda, phi) {\n      linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n      resampleStream.point = linePoint;\n    }\n\n    function ringEnd() {\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n      resampleStream.lineEnd = lineEnd;\n      lineEnd();\n    }\n\n    return resampleStream;\n  };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n  point: function(x, y) {\n    this.stream.point(x * radians, y * radians);\n  }\n});\n\nfunction transformRotate(rotate) {\n  return transformer({\n    point: function(x, y) {\n      var r = rotate(x, y);\n      return this.stream.point(r[0], r[1]);\n    }\n  });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [dx + k * x, dy - k * y];\n  }\n  transform.invert = function(x, y) {\n    return [(x - dx) / k * sx, (dy - y) / k * sy];\n  };\n  return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n  var cosAlpha = cos(alpha),\n      sinAlpha = sin(alpha),\n      a = cosAlpha * k,\n      b = sinAlpha * k,\n      ai = cosAlpha / k,\n      bi = sinAlpha / k,\n      ci = (sinAlpha * dy - cosAlpha * dx) / k,\n      fi = (sinAlpha * dx + cosAlpha * dy) / k;\n  function transform(x, y) {\n    x *= sx; y *= sy;\n    return [a * x - b * y + dx, dy - b * x - a * y];\n  }\n  transform.invert = function(x, y) {\n    return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n  };\n  return transform;\n}\n\nexport default function projection(project) {\n  return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n  var project,\n      k = 150, // scale\n      x = 480, y = 250, // translate\n      lambda = 0, phi = 0, // center\n      deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n      alpha = 0, // post-rotate angle\n      sx = 1, // reflectX\n      sy = 1, // reflectX\n      theta = null, preclip = clipAntimeridian, // pre-clip angle\n      x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n      delta2 = 0.5, // precision\n      projectResample,\n      projectTransform,\n      projectRotateTransform,\n      cache,\n      cacheStream;\n\n  function projection(point) {\n    return projectRotateTransform(point[0] * radians, point[1] * radians);\n  }\n\n  function invert(point) {\n    point = projectRotateTransform.invert(point[0], point[1]);\n    return point && [point[0] * degrees, point[1] * degrees];\n  }\n\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n  };\n\n  projection.preclip = function(_) {\n    return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n  };\n\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n  };\n\n  projection.clipAngle = function(_) {\n    return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n  };\n\n  projection.clipExtent = function(_) {\n    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  projection.scale = function(_) {\n    return arguments.length ? (k = +_, recenter()) : k;\n  };\n\n  projection.translate = function(_) {\n    return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n  };\n\n  projection.center = function(_) {\n    return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n  };\n\n  projection.rotate = function(_) {\n    return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n  };\n\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n  };\n\n  projection.reflectX = function(_) {\n    return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n  };\n\n  projection.reflectY = function(_) {\n    return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n  };\n\n  projection.precision = function(_) {\n    return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n  };\n\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  function recenter() {\n    var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n        transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], sx, sy, alpha);\n    rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n    projectTransform = compose(project, transform);\n    projectRotateTransform = compose(rotate, projectTransform);\n    projectResample = resample(projectTransform, delta2);\n    return reset();\n  }\n\n  function reset() {\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  return function() {\n    project = projectAt.apply(this, arguments);\n    projection.invert = project.invert && invert;\n    return recenter();\n  };\n}\n","import {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n  var phi0 = 0,\n      phi1 = pi / 3,\n      m = projectionMutator(projectAt),\n      p = m(phi0, phi1);\n\n  p.parallels = function(_) {\n    return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n  };\n\n  return p;\n}\n","import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n  var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n  // Are the parallels symmetrical around the Equator?\n  if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n  var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n  function project(x, y) {\n    var r = sqrt(c - 2 * n * sin(y)) / n;\n    return [r * sin(x *= n), r0 - r * cos(x)];\n  }\n\n  project.invert = function(x, y) {\n    var r0y = r0 - y,\n        l = atan2(x, abs(r0y)) * sign(r0y);\n    if (r0y * n < 0)\n      l -= pi * sign(x) * sign(r0y);\n    return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n  };\n\n  return project;\n}\n\nexport default function() {\n  return conicProjection(conicEqualAreaRaw)\n      .scale(155.424)\n      .center([0, 33.6442]);\n}\n","import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n  var cosPhi0 = cos(phi0);\n\n  function forward(lambda, phi) {\n    return [lambda * cosPhi0, sin(phi) / cosPhi0];\n  }\n\n  forward.invert = function(x, y) {\n    return [x / cosPhi0, asin(y * cosPhi0)];\n  };\n\n  return forward;\n}\n","import conicEqualArea from \"./conicEqualArea.js\";\n\nexport default function() {\n  return conicEqualArea()\n      .parallels([29.5, 45.5])\n      .scale(1070)\n      .translate([480, 250])\n      .rotate([96, 0])\n      .center([-0.6, 38.7]);\n}\n","import {epsilon} from \"../math.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n  var n = streams.length;\n  return {\n    point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n    sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n    lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n    lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n    polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n    polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n  };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n  var cache,\n      cacheStream,\n      lower48 = albers(), lower48Point,\n      alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n      hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n      point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n  function albersUsa(coordinates) {\n    var x = coordinates[0], y = coordinates[1];\n    return point = null,\n        (lower48Point.point(x, y), point)\n        || (alaskaPoint.point(x, y), point)\n        || (hawaiiPoint.point(x, y), point);\n  }\n\n  albersUsa.invert = function(coordinates) {\n    var k = lower48.scale(),\n        t = lower48.translate(),\n        x = (coordinates[0] - t[0]) / k,\n        y = (coordinates[1] - t[1]) / k;\n    return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n        : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n        : lower48).invert(coordinates);\n  };\n\n  albersUsa.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n  };\n\n  albersUsa.precision = function(_) {\n    if (!arguments.length) return lower48.precision();\n    lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n    return reset();\n  };\n\n  albersUsa.scale = function(_) {\n    if (!arguments.length) return lower48.scale();\n    lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n    return albersUsa.translate(lower48.translate());\n  };\n\n  albersUsa.translate = function(_) {\n    if (!arguments.length) return lower48.translate();\n    var k = lower48.scale(), x = +_[0], y = +_[1];\n\n    lower48Point = lower48\n        .translate(_)\n        .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n        .stream(pointStream);\n\n    alaskaPoint = alaska\n        .translate([x - 0.307 * k, y + 0.201 * k])\n        .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n        .stream(pointStream);\n\n    hawaiiPoint = hawaii\n        .translate([x - 0.205 * k, y + 0.212 * k])\n        .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n        .stream(pointStream);\n\n    return reset();\n  };\n\n  albersUsa.fitExtent = function(extent, object) {\n    return fitExtent(albersUsa, extent, object);\n  };\n\n  albersUsa.fitSize = function(size, object) {\n    return fitSize(albersUsa, size, object);\n  };\n\n  albersUsa.fitWidth = function(width, object) {\n    return fitWidth(albersUsa, width, object);\n  };\n\n  albersUsa.fitHeight = function(height, object) {\n    return fitHeight(albersUsa, height, object);\n  };\n\n  function reset() {\n    cache = cacheStream = null;\n    return albersUsa;\n  }\n\n  return albersUsa.scale(1070);\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n  return function(x, y) {\n    var cx = cos(x),\n        cy = cos(y),\n        k = scale(cx * cy);\n    return [\n      k * cy * sin(x),\n      k * sin(y)\n    ];\n  }\n}\n\nexport function azimuthalInvert(angle) {\n  return function(x, y) {\n    var z = sqrt(x * x + y * y),\n        c = angle(z),\n        sc = sin(c),\n        cc = cos(c);\n    return [\n      atan2(x * sc, z * cc),\n      asin(z && y * sc / z)\n    ];\n  }\n}\n","import {asin, sqrt} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n  return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n  return 2 * asin(z / 2);\n});\n\nexport default function() {\n  return projection(azimuthalEqualAreaRaw)\n      .scale(124.75)\n      .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n  return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n  return z;\n});\n\nexport default function() {\n  return projection(azimuthalEquidistantRaw)\n      .scale(79.4188)\n      .clipAngle(180 - 1e-3);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n  return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n  return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n  return mercatorProjection(mercatorRaw)\n      .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n  var m = projection(project),\n      center = m.center,\n      scale = m.scale,\n      translate = m.translate,\n      clipExtent = m.clipExtent,\n      x0 = null, y0, x1, y1; // clip extent\n\n  m.scale = function(_) {\n    return arguments.length ? (scale(_), reclip()) : scale();\n  };\n\n  m.translate = function(_) {\n    return arguments.length ? (translate(_), reclip()) : translate();\n  };\n\n  m.center = function(_) {\n    return arguments.length ? (center(_), reclip()) : center();\n  };\n\n  m.clipExtent = function(_) {\n    return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  function reclip() {\n    var k = pi * scale(),\n        t = m(rotation(m.rotate()).invert([0, 0]));\n    return clipExtent(x0 == null\n        ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n        ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n        : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n  }\n\n  return reclip();\n}\n","import {abs, atan, atan2, cos, epsilon, halfPi, log, pi, pow, sign, sin, sqrt, tan} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {mercatorRaw} from \"./mercator.js\";\n\nfunction tany(y) {\n  return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n  var cy0 = cos(y0),\n      n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n      f = cy0 * pow(tany(y0), n) / n;\n\n  if (!n) return mercatorRaw;\n\n  function project(x, y) {\n    if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n    else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n    var r = f / pow(tany(y), n);\n    return [r * sin(n * x), f - r * cos(n * x)];\n  }\n\n  project.invert = function(x, y) {\n    var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy),\n      l = atan2(x, abs(fy)) * sign(fy);\n    if (fy * n < 0)\n      l -= pi * sign(x) * sign(fy);\n    return [l / n, 2 * atan(pow(f / r, 1 / n)) - halfPi];\n  };\n\n  return project;\n}\n\nexport default function() {\n  return conicProjection(conicConformalRaw)\n      .scale(109.5)\n      .parallels([30, 30]);\n}\n","import projection from \"./index.js\";\n\nexport function equirectangularRaw(lambda, phi) {\n  return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n  return projection(equirectangularRaw)\n      .scale(152.63);\n}\n","import {abs, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {equirectangularRaw} from \"./equirectangular.js\";\n\nexport function conicEquidistantRaw(y0, y1) {\n  var cy0 = cos(y0),\n      n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n      g = cy0 / n + y0;\n\n  if (abs(n) < epsilon) return equirectangularRaw;\n\n  function project(x, y) {\n    var gy = g - y, nx = n * x;\n    return [gy * sin(nx), g - gy * cos(nx)];\n  }\n\n  project.invert = function(x, y) {\n    var gy = g - y,\n        l = atan2(x, abs(gy)) * sign(gy);\n    if (gy * n < 0)\n      l -= pi * sign(x) * sign(gy);\n    return [l / n, g - sign(n) * sqrt(x * x + gy * gy)];\n  };\n\n  return project;\n}\n\nexport default function() {\n  return conicProjection(conicEquidistantRaw)\n      .scale(131.154)\n      .center([0, 13.9389]);\n}\n","import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n    A2 = -0.081106,\n    A3 = 0.000893,\n    A4 = 0.003796,\n    M = sqrt(3) / 2,\n    iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n  var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n  return [\n    lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n    l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n  ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n  var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n  for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n    fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n    fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n    l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n    if (abs(delta) < epsilon2) break;\n  }\n  return [\n    M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n    asin(sin(l) / M)\n  ];\n};\n\nexport default function() {\n  return projection(equalEarthRaw)\n      .scale(177.158);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function gnomonicRaw(x, y) {\n  var cy = cos(y), k = cos(x) * cy;\n  return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n  return projection(gnomonicRaw)\n      .scale(144.049)\n      .clipAngle(60);\n}\n","import clipRectangle from \"../clip/rectangle.js\";\nimport identity from \"../identity.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport {cos, degrees, radians, sin} from \"../math.js\";\n\nexport default function() {\n  var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, // scale, translate and reflect\n      alpha = 0, ca, sa, // angle\n      x0 = null, y0, x1, y1, // clip extent\n      kx = 1, ky = 1,\n      transform = transformer({\n        point: function(x, y) {\n          var p = projection([x, y])\n          this.stream.point(p[0], p[1]);\n        }\n      }),\n      postclip = identity,\n      cache,\n      cacheStream;\n\n  function reset() {\n    kx = k * sx;\n    ky = k * sy;\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  function projection (p) {\n    var x = p[0] * kx, y = p[1] * ky;\n    if (alpha) {\n      var t = y * ca - x * sa;\n      x = x * ca + y * sa;\n      y = t;\n    }    \n    return [x + tx, y + ty];\n  }\n  projection.invert = function(p) {\n    var x = p[0] - tx, y = p[1] - ty;\n    if (alpha) {\n      var t = y * ca + x * sa;\n      x = x * ca - y * sa;\n      y = t;\n    }\n    return [x / kx, y / ky];\n  };\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n  };\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n  };\n  projection.clipExtent = function(_) {\n    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n  projection.scale = function(_) {\n    return arguments.length ? (k = +_, reset()) : k;\n  };\n  projection.translate = function(_) {\n    return arguments.length ? (tx = +_[0], ty = +_[1], reset()) : [tx, ty];\n  }\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, sa = sin(alpha), ca = cos(alpha), reset()) : alpha * degrees;\n  };\n  projection.reflectX = function(_) {\n    return arguments.length ? (sx = _ ? -1 : 1, reset()) : sx < 0;\n  };\n  projection.reflectY = function(_) {\n    return arguments.length ? (sy = _ ? -1 : 1, reset()) : sy < 0;\n  };\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  return projection;\n}\n","import projection from \"./index.js\";\nimport {abs, epsilon} from \"../math.js\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n  var phi2 = phi * phi, phi4 = phi2 * phi2;\n  return [\n    lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n    phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n  ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n  var phi = y, i = 25, delta;\n  do {\n    var phi2 = phi * phi, phi4 = phi2 * phi2;\n    phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n        (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n  } while (abs(delta) > epsilon && --i > 0);\n  return [\n    x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n    phi\n  ];\n};\n\nexport default function() {\n  return projection(naturalEarth1Raw)\n      .scale(175.295);\n}\n","import {asin, cos, epsilon, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function orthographicRaw(x, y) {\n  return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n  return projection(orthographicRaw)\n      .scale(249.5)\n      .clipAngle(90 + epsilon);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function stereographicRaw(x, y) {\n  var cy = cos(y), k = 1 + cos(x) * cy;\n  return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n  return 2 * atan(z);\n});\n\nexport default function() {\n  return projection(stereographicRaw)\n      .scale(250)\n      .clipAngle(142);\n}\n","import {atan, exp, halfPi, log, tan} from \"../math.js\";\nimport {mercatorProjection} from \"./mercator.js\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n  return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n  return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n  var m = mercatorProjection(transverseMercatorRaw),\n      center = m.center,\n      rotate = m.rotate;\n\n  m.center = function(_) {\n    return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n  };\n\n  m.rotate = function(_) {\n    return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n  };\n\n  return rotate([0, 0, 90])\n      .scale(159.155);\n}\n","function defaultSeparation(a, b) {\n  return a.parent === b.parent ? 1 : 2;\n}\n\nfunction meanX(children) {\n  return children.reduce(meanXReduce, 0) / children.length;\n}\n\nfunction meanXReduce(x, c) {\n  return x + c.x;\n}\n\nfunction maxY(children) {\n  return 1 + children.reduce(maxYReduce, 0);\n}\n\nfunction maxYReduce(y, c) {\n  return Math.max(y, c.y);\n}\n\nfunction leafLeft(node) {\n  var children;\n  while (children = node.children) node = children[0];\n  return node;\n}\n\nfunction leafRight(node) {\n  var children;\n  while (children = node.children) node = children[children.length - 1];\n  return node;\n}\n\nexport default function() {\n  var separation = defaultSeparation,\n      dx = 1,\n      dy = 1,\n      nodeSize = false;\n\n  function cluster(root) {\n    var previousNode,\n        x = 0;\n\n    // First walk, computing the initial x & y values.\n    root.eachAfter(function(node) {\n      var children = node.children;\n      if (children) {\n        node.x = meanX(children);\n        node.y = maxY(children);\n      } else {\n        node.x = previousNode ? x += separation(node, previousNode) : 0;\n        node.y = 0;\n        previousNode = node;\n      }\n    });\n\n    var left = leafLeft(root),\n        right = leafRight(root),\n        x0 = left.x - separation(left, right) / 2,\n        x1 = right.x + separation(right, left) / 2;\n\n    // Second walk, normalizing x & y to the desired size.\n    return root.eachAfter(nodeSize ? function(node) {\n      node.x = (node.x - root.x) * dx;\n      node.y = (root.y - node.y) * dy;\n    } : function(node) {\n      node.x = (node.x - x0) / (x1 - x0) * dx;\n      node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;\n    });\n  }\n\n  cluster.separation = function(x) {\n    return arguments.length ? (separation = x, cluster) : separation;\n  };\n\n  cluster.size = function(x) {\n    return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);\n  };\n\n  cluster.nodeSize = function(x) {\n    return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);\n  };\n\n  return cluster;\n}\n","function count(node) {\n  var sum = 0,\n      children = node.children,\n      i = children && children.length;\n  if (!i) sum = 1;\n  else while (--i >= 0) sum += children[i].value;\n  node.value = sum;\n}\n\nexport default function() {\n  return this.eachAfter(count);\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\n\nexport default function hierarchy(data, children) {\n  var root = new Node(data),\n      valued = +data.value && (root.value = data.value),\n      node,\n      nodes = [root],\n      child,\n      childs,\n      i,\n      n;\n\n  if (children == null) children = defaultChildren;\n\n  while (node = nodes.pop()) {\n    if (valued) node.value = +node.data.value;\n    if ((childs = children(node.data)) && (n = childs.length)) {\n      node.children = new Array(n);\n      for (i = n - 1; i >= 0; --i) {\n        nodes.push(child = node.children[i] = new Node(childs[i]));\n        child.parent = node;\n        child.depth = node.depth + 1;\n      }\n    }\n  }\n\n  return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n  return hierarchy(this).eachBefore(copyData);\n}\n\nfunction defaultChildren(d) {\n  return d.children;\n}\n\nfunction copyData(node) {\n  node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n  var height = 0;\n  do node.height = height;\n  while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n  this.data = data;\n  this.depth =\n  this.height = 0;\n  this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n  constructor: Node,\n  count: node_count,\n  each: node_each,\n  eachAfter: node_eachAfter,\n  eachBefore: node_eachBefore,\n  sum: node_sum,\n  sort: node_sort,\n  path: node_path,\n  ancestors: node_ancestors,\n  descendants: node_descendants,\n  leaves: node_leaves,\n  links: node_links,\n  copy: node_copy\n};\n","export default function(callback) {\n  var node = this, current, next = [node], children, i, n;\n  do {\n    current = next.reverse(), next = [];\n    while (node = current.pop()) {\n      callback(node), children = node.children;\n      if (children) for (i = 0, n = children.length; i < n; ++i) {\n        next.push(children[i]);\n      }\n    }\n  } while (next.length);\n  return this;\n}\n","export default function(callback) {\n  var node = this, nodes = [node], next = [], children, i, n;\n  while (node = nodes.pop()) {\n    next.push(node), children = node.children;\n    if (children) for (i = 0, n = children.length; i < n; ++i) {\n      nodes.push(children[i]);\n    }\n  }\n  while (node = next.pop()) {\n    callback(node);\n  }\n  return this;\n}\n","export default function(callback) {\n  var node = this, nodes = [node], children, i;\n  while (node = nodes.pop()) {\n    callback(node), children = node.children;\n    if (children) for (i = children.length - 1; i >= 0; --i) {\n      nodes.push(children[i]);\n    }\n  }\n  return this;\n}\n","export default function(value) {\n  return this.eachAfter(function(node) {\n    var sum = +value(node.data) || 0,\n        children = node.children,\n        i = children && children.length;\n    while (--i >= 0) sum += children[i].value;\n    node.value = sum;\n  });\n}\n","export default function(compare) {\n  return this.eachBefore(function(node) {\n    if (node.children) {\n      node.children.sort(compare);\n    }\n  });\n}\n","export default function(end) {\n  var start = this,\n      ancestor = leastCommonAncestor(start, end),\n      nodes = [start];\n  while (start !== ancestor) {\n    start = start.parent;\n    nodes.push(start);\n  }\n  var k = nodes.length;\n  while (end !== ancestor) {\n    nodes.splice(k, 0, end);\n    end = end.parent;\n  }\n  return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n  if (a === b) return a;\n  var aNodes = a.ancestors(),\n      bNodes = b.ancestors(),\n      c = null;\n  a = aNodes.pop();\n  b = bNodes.pop();\n  while (a === b) {\n    c = a;\n    a = aNodes.pop();\n    b = bNodes.pop();\n  }\n  return c;\n}\n","export default function() {\n  var node = this, nodes = [node];\n  while (node = node.parent) {\n    nodes.push(node);\n  }\n  return nodes;\n}\n","export default function() {\n  var nodes = [];\n  this.each(function(node) {\n    nodes.push(node);\n  });\n  return nodes;\n}\n","export default function() {\n  var leaves = [];\n  this.eachBefore(function(node) {\n    if (!node.children) {\n      leaves.push(node);\n    }\n  });\n  return leaves;\n}\n","export default function() {\n  var root = this, links = [];\n  root.each(function(node) {\n    if (node !== root) { // Don’t include the root’s parent, if any.\n      links.push({source: node.parent, target: node});\n    }\n  });\n  return links;\n}\n","export var slice = Array.prototype.slice;\n\nexport function shuffle(array) {\n  var m = array.length,\n      t,\n      i;\n\n  while (m) {\n    i = Math.random() * m-- | 0;\n    t = array[m];\n    array[m] = array[i];\n    array[i] = t;\n  }\n\n  return array;\n}\n","import {shuffle, slice} from \"../array.js\";\n\nexport default function(circles) {\n  var i = 0, n = (circles = shuffle(slice.call(circles))).length, B = [], p, e;\n\n  while (i < n) {\n    p = circles[i];\n    if (e && enclosesWeak(e, p)) ++i;\n    else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n  }\n\n  return e;\n}\n\nfunction extendBasis(B, p) {\n  var i, j;\n\n  if (enclosesWeakAll(p, B)) return [p];\n\n  // If we get here then B must have at least one element.\n  for (i = 0; i < B.length; ++i) {\n    if (enclosesNot(p, B[i])\n        && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n      return [B[i], p];\n    }\n  }\n\n  // If we get here then B must have at least two elements.\n  for (i = 0; i < B.length - 1; ++i) {\n    for (j = i + 1; j < B.length; ++j) {\n      if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n          && enclosesNot(encloseBasis2(B[i], p), B[j])\n          && enclosesNot(encloseBasis2(B[j], p), B[i])\n          && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n        return [B[i], B[j], p];\n      }\n    }\n  }\n\n  // If we get here then something is very wrong.\n  throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n  var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n  return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n  var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n  return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n  for (var i = 0; i < B.length; ++i) {\n    if (!enclosesWeak(a, B[i])) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction encloseBasis(B) {\n  switch (B.length) {\n    case 1: return encloseBasis1(B[0]);\n    case 2: return encloseBasis2(B[0], B[1]);\n    case 3: return encloseBasis3(B[0], B[1], B[2]);\n  }\n}\n\nfunction encloseBasis1(a) {\n  return {\n    x: a.x,\n    y: a.y,\n    r: a.r\n  };\n}\n\nfunction encloseBasis2(a, b) {\n  var x1 = a.x, y1 = a.y, r1 = a.r,\n      x2 = b.x, y2 = b.y, r2 = b.r,\n      x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n      l = Math.sqrt(x21 * x21 + y21 * y21);\n  return {\n    x: (x1 + x2 + x21 / l * r21) / 2,\n    y: (y1 + y2 + y21 / l * r21) / 2,\n    r: (l + r1 + r2) / 2\n  };\n}\n\nfunction encloseBasis3(a, b, c) {\n  var x1 = a.x, y1 = a.y, r1 = a.r,\n      x2 = b.x, y2 = b.y, r2 = b.r,\n      x3 = c.x, y3 = c.y, r3 = c.r,\n      a2 = x1 - x2,\n      a3 = x1 - x3,\n      b2 = y1 - y2,\n      b3 = y1 - y3,\n      c2 = r2 - r1,\n      c3 = r3 - r1,\n      d1 = x1 * x1 + y1 * y1 - r1 * r1,\n      d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n      d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n      ab = a3 * b2 - a2 * b3,\n      xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n      xb = (b3 * c2 - b2 * c3) / ab,\n      ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n      yb = (a2 * c3 - a3 * c2) / ab,\n      A = xb * xb + yb * yb - 1,\n      B = 2 * (r1 + xa * xb + ya * yb),\n      C = xa * xa + ya * ya - r1 * r1,\n      r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n  return {\n    x: x1 + xa + xb * r,\n    y: y1 + ya + yb * r,\n    r: r\n  };\n}\n","import enclose from \"./enclose.js\";\n\nfunction place(b, a, c) {\n  var dx = b.x - a.x, x, a2,\n      dy = b.y - a.y, y, b2,\n      d2 = dx * dx + dy * dy;\n  if (d2) {\n    a2 = a.r + c.r, a2 *= a2;\n    b2 = b.r + c.r, b2 *= b2;\n    if (a2 > b2) {\n      x = (d2 + b2 - a2) / (2 * d2);\n      y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n      c.x = b.x - x * dx - y * dy;\n      c.y = b.y - x * dy + y * dx;\n    } else {\n      x = (d2 + a2 - b2) / (2 * d2);\n      y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n      c.x = a.x + x * dx - y * dy;\n      c.y = a.y + x * dy + y * dx;\n    }\n  } else {\n    c.x = a.x + c.r;\n    c.y = a.y;\n  }\n}\n\nfunction intersects(a, b) {\n  var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n  return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n  var a = node._,\n      b = node.next._,\n      ab = a.r + b.r,\n      dx = (a.x * b.r + b.x * a.r) / ab,\n      dy = (a.y * b.r + b.y * a.r) / ab;\n  return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n  this._ = circle;\n  this.next = null;\n  this.previous = null;\n}\n\nexport function packEnclose(circles) {\n  if (!(n = circles.length)) return 0;\n\n  var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n  // Place the first circle.\n  a = circles[0], a.x = 0, a.y = 0;\n  if (!(n > 1)) return a.r;\n\n  // Place the second circle.\n  b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n  if (!(n > 2)) return a.r + b.r;\n\n  // Place the third circle.\n  place(b, a, c = circles[2]);\n\n  // Initialize the front-chain using the first three circles a, b and c.\n  a = new Node(a), b = new Node(b), c = new Node(c);\n  a.next = c.previous = b;\n  b.next = a.previous = c;\n  c.next = b.previous = a;\n\n  // Attempt to place each remaining circle…\n  pack: for (i = 3; i < n; ++i) {\n    place(a._, b._, c = circles[i]), c = new Node(c);\n\n    // Find the closest intersecting circle on the front-chain, if any.\n    // “Closeness” is determined by linear distance along the front-chain.\n    // “Ahead” or “behind” is likewise determined by linear distance.\n    j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n    do {\n      if (sj <= sk) {\n        if (intersects(j._, c._)) {\n          b = j, a.next = b, b.previous = a, --i;\n          continue pack;\n        }\n        sj += j._.r, j = j.next;\n      } else {\n        if (intersects(k._, c._)) {\n          a = k, a.next = b, b.previous = a, --i;\n          continue pack;\n        }\n        sk += k._.r, k = k.previous;\n      }\n    } while (j !== k.next);\n\n    // Success! Insert the new circle c between a and b.\n    c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n    // Compute the new closest circle pair to the centroid.\n    aa = score(a);\n    while ((c = c.next) !== b) {\n      if ((ca = score(c)) < aa) {\n        a = c, aa = ca;\n      }\n    }\n    b = a.next;\n  }\n\n  // Compute the enclosing circle of the front chain.\n  a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);\n\n  // Translate the circles to put the enclosing circle around the origin.\n  for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n  return c.r;\n}\n\nexport default function(circles) {\n  packEnclose(circles);\n  return circles;\n}\n","export function optional(f) {\n  return f == null ? null : required(f);\n}\n\nexport function required(f) {\n  if (typeof f !== \"function\") throw new Error;\n  return f;\n}\n","export function constantZero() {\n  return 0;\n}\n\nexport default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import {packEnclose} from \"./siblings.js\";\nimport {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nfunction defaultRadius(d) {\n  return Math.sqrt(d.value);\n}\n\nexport default function() {\n  var radius = null,\n      dx = 1,\n      dy = 1,\n      padding = constantZero;\n\n  function pack(root) {\n    root.x = dx / 2, root.y = dy / 2;\n    if (radius) {\n      root.eachBefore(radiusLeaf(radius))\n          .eachAfter(packChildren(padding, 0.5))\n          .eachBefore(translateChild(1));\n    } else {\n      root.eachBefore(radiusLeaf(defaultRadius))\n          .eachAfter(packChildren(constantZero, 1))\n          .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n          .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n    }\n    return root;\n  }\n\n  pack.radius = function(x) {\n    return arguments.length ? (radius = optional(x), pack) : radius;\n  };\n\n  pack.size = function(x) {\n    return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n  };\n\n  pack.padding = function(x) {\n    return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n  };\n\n  return pack;\n}\n\nfunction radiusLeaf(radius) {\n  return function(node) {\n    if (!node.children) {\n      node.r = Math.max(0, +radius(node) || 0);\n    }\n  };\n}\n\nfunction packChildren(padding, k) {\n  return function(node) {\n    if (children = node.children) {\n      var children,\n          i,\n          n = children.length,\n          r = padding(node) * k || 0,\n          e;\n\n      if (r) for (i = 0; i < n; ++i) children[i].r += r;\n      e = packEnclose(children);\n      if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n      node.r = e + r;\n    }\n  };\n}\n\nfunction translateChild(k) {\n  return function(node) {\n    var parent = node.parent;\n    node.r *= k;\n    if (parent) {\n      node.x = parent.x + k * node.x;\n      node.y = parent.y + k * node.y;\n    }\n  };\n}\n","export default function(node) {\n  node.x0 = Math.round(node.x0);\n  node.y0 = Math.round(node.y0);\n  node.x1 = Math.round(node.x1);\n  node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n  var nodes = parent.children,\n      node,\n      i = -1,\n      n = nodes.length,\n      k = parent.value && (x1 - x0) / parent.value;\n\n  while (++i < n) {\n    node = nodes[i], node.y0 = y0, node.y1 = y1;\n    node.x0 = x0, node.x1 = x0 += node.value * k;\n  }\n}\n","import roundNode from \"./treemap/round.js\";\nimport treemapDice from \"./treemap/dice.js\";\n\nexport default function() {\n  var dx = 1,\n      dy = 1,\n      padding = 0,\n      round = false;\n\n  function partition(root) {\n    var n = root.height + 1;\n    root.x0 =\n    root.y0 = padding;\n    root.x1 = dx;\n    root.y1 = dy / n;\n    root.eachBefore(positionNode(dy, n));\n    if (round) root.eachBefore(roundNode);\n    return root;\n  }\n\n  function positionNode(dy, n) {\n    return function(node) {\n      if (node.children) {\n        treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n      }\n      var x0 = node.x0,\n          y0 = node.y0,\n          x1 = node.x1 - padding,\n          y1 = node.y1 - padding;\n      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n      node.x0 = x0;\n      node.y0 = y0;\n      node.x1 = x1;\n      node.y1 = y1;\n    };\n  }\n\n  partition.round = function(x) {\n    return arguments.length ? (round = !!x, partition) : round;\n  };\n\n  partition.size = function(x) {\n    return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n  };\n\n  partition.padding = function(x) {\n    return arguments.length ? (padding = +x, partition) : padding;\n  };\n\n  return partition;\n}\n","import {required} from \"./accessors.js\";\nimport {Node, computeHeight} from \"./hierarchy/index.js\";\n\nvar keyPrefix = \"$\", // Protect against keys like “__proto__”.\n    preroot = {depth: -1},\n    ambiguous = {};\n\nfunction defaultId(d) {\n  return d.id;\n}\n\nfunction defaultParentId(d) {\n  return d.parentId;\n}\n\nexport default function() {\n  var id = defaultId,\n      parentId = defaultParentId;\n\n  function stratify(data) {\n    var d,\n        i,\n        n = data.length,\n        root,\n        parent,\n        node,\n        nodes = new Array(n),\n        nodeId,\n        nodeKey,\n        nodeByKey = {};\n\n    for (i = 0; i < n; ++i) {\n      d = data[i], node = nodes[i] = new Node(d);\n      if ((nodeId = id(d, i, data)) != null && (nodeId += \"\")) {\n        nodeKey = keyPrefix + (node.id = nodeId);\n        nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;\n      }\n    }\n\n    for (i = 0; i < n; ++i) {\n      node = nodes[i], nodeId = parentId(data[i], i, data);\n      if (nodeId == null || !(nodeId += \"\")) {\n        if (root) throw new Error(\"multiple roots\");\n        root = node;\n      } else {\n        parent = nodeByKey[keyPrefix + nodeId];\n        if (!parent) throw new Error(\"missing: \" + nodeId);\n        if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n        if (parent.children) parent.children.push(node);\n        else parent.children = [node];\n        node.parent = parent;\n      }\n    }\n\n    if (!root) throw new Error(\"no root\");\n    root.parent = preroot;\n    root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n    root.parent = null;\n    if (n > 0) throw new Error(\"cycle\");\n\n    return root;\n  }\n\n  stratify.id = function(x) {\n    return arguments.length ? (id = required(x), stratify) : id;\n  };\n\n  stratify.parentId = function(x) {\n    return arguments.length ? (parentId = required(x), stratify) : parentId;\n  };\n\n  return stratify;\n}\n","import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n  return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n//   return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n  var children = v.children;\n  return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n  var children = v.children;\n  return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n  var change = shift / (wp.i - wm.i);\n  wp.c -= change;\n  wp.s += shift;\n  wm.c += change;\n  wp.z += shift;\n  wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n  var shift = 0,\n      change = 0,\n      children = v.children,\n      i = children.length,\n      w;\n  while (--i >= 0) {\n    w = children[i];\n    w.z += shift;\n    w.m += shift;\n    shift += w.s + (change += w.c);\n  }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n  return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n  this._ = node;\n  this.parent = null;\n  this.children = null;\n  this.A = null; // default ancestor\n  this.a = this; // ancestor\n  this.z = 0; // prelim\n  this.m = 0; // mod\n  this.c = 0; // change\n  this.s = 0; // shift\n  this.t = null; // thread\n  this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n  var tree = new TreeNode(root, 0),\n      node,\n      nodes = [tree],\n      child,\n      children,\n      i,\n      n;\n\n  while (node = nodes.pop()) {\n    if (children = node._.children) {\n      node.children = new Array(n = children.length);\n      for (i = n - 1; i >= 0; --i) {\n        nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n        child.parent = node;\n      }\n    }\n  }\n\n  (tree.parent = new TreeNode(null, 0)).children = [tree];\n  return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n  var separation = defaultSeparation,\n      dx = 1,\n      dy = 1,\n      nodeSize = null;\n\n  function tree(root) {\n    var t = treeRoot(root);\n\n    // Compute the layout using Buchheim et al.’s algorithm.\n    t.eachAfter(firstWalk), t.parent.m = -t.z;\n    t.eachBefore(secondWalk);\n\n    // If a fixed node size is specified, scale x and y.\n    if (nodeSize) root.eachBefore(sizeNode);\n\n    // If a fixed tree size is specified, scale x and y based on the extent.\n    // Compute the left-most, right-most, and depth-most nodes for extents.\n    else {\n      var left = root,\n          right = root,\n          bottom = root;\n      root.eachBefore(function(node) {\n        if (node.x < left.x) left = node;\n        if (node.x > right.x) right = node;\n        if (node.depth > bottom.depth) bottom = node;\n      });\n      var s = left === right ? 1 : separation(left, right) / 2,\n          tx = s - left.x,\n          kx = dx / (right.x + s + tx),\n          ky = dy / (bottom.depth || 1);\n      root.eachBefore(function(node) {\n        node.x = (node.x + tx) * kx;\n        node.y = node.depth * ky;\n      });\n    }\n\n    return root;\n  }\n\n  // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n  // applied recursively to the children of v, as well as the function\n  // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n  // node v is placed to the midpoint of its outermost children.\n  function firstWalk(v) {\n    var children = v.children,\n        siblings = v.parent.children,\n        w = v.i ? siblings[v.i - 1] : null;\n    if (children) {\n      executeShifts(v);\n      var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n      if (w) {\n        v.z = w.z + separation(v._, w._);\n        v.m = v.z - midpoint;\n      } else {\n        v.z = midpoint;\n      }\n    } else if (w) {\n      v.z = w.z + separation(v._, w._);\n    }\n    v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n  }\n\n  // Computes all real x-coordinates by summing up the modifiers recursively.\n  function secondWalk(v) {\n    v._.x = v.z + v.parent.m;\n    v.m += v.parent.m;\n  }\n\n  // The core of the algorithm. Here, a new subtree is combined with the\n  // previous subtrees. Threads are used to traverse the inside and outside\n  // contours of the left and right subtree up to the highest common level. The\n  // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n  // superscript o means outside and i means inside, the subscript - means left\n  // subtree and + means right subtree. For summing up the modifiers along the\n  // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n  // nodes of the inside contours conflict, we compute the left one of the\n  // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n  // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n  // Finally, we add a new thread (if necessary).\n  function apportion(v, w, ancestor) {\n    if (w) {\n      var vip = v,\n          vop = v,\n          vim = w,\n          vom = vip.parent.children[0],\n          sip = vip.m,\n          sop = vop.m,\n          sim = vim.m,\n          som = vom.m,\n          shift;\n      while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n        vom = nextLeft(vom);\n        vop = nextRight(vop);\n        vop.a = v;\n        shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n        if (shift > 0) {\n          moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n          sip += shift;\n          sop += shift;\n        }\n        sim += vim.m;\n        sip += vip.m;\n        som += vom.m;\n        sop += vop.m;\n      }\n      if (vim && !nextRight(vop)) {\n        vop.t = vim;\n        vop.m += sim - sop;\n      }\n      if (vip && !nextLeft(vom)) {\n        vom.t = vip;\n        vom.m += sip - som;\n        ancestor = v;\n      }\n    }\n    return ancestor;\n  }\n\n  function sizeNode(node) {\n    node.x *= dx;\n    node.y = node.depth * dy;\n  }\n\n  tree.separation = function(x) {\n    return arguments.length ? (separation = x, tree) : separation;\n  };\n\n  tree.size = function(x) {\n    return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n  };\n\n  tree.nodeSize = function(x) {\n    return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n  };\n\n  return tree;\n}\n","export default function(parent, x0, y0, x1, y1) {\n  var nodes = parent.children,\n      node,\n      i = -1,\n      n = nodes.length,\n      k = parent.value && (y1 - y0) / parent.value;\n\n  while (++i < n) {\n    node = nodes[i], node.x0 = x0, node.x1 = x1;\n    node.y0 = y0, node.y1 = y0 += node.value * k;\n  }\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n  var rows = [],\n      nodes = parent.children,\n      row,\n      nodeValue,\n      i0 = 0,\n      i1 = 0,\n      n = nodes.length,\n      dx, dy,\n      value = parent.value,\n      sumValue,\n      minValue,\n      maxValue,\n      newRatio,\n      minRatio,\n      alpha,\n      beta;\n\n  while (i0 < n) {\n    dx = x1 - x0, dy = y1 - y0;\n\n    // Find the next non-empty node.\n    do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n    minValue = maxValue = sumValue;\n    alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n    beta = sumValue * sumValue * alpha;\n    minRatio = Math.max(maxValue / beta, beta / minValue);\n\n    // Keep adding nodes while the aspect ratio maintains or improves.\n    for (; i1 < n; ++i1) {\n      sumValue += nodeValue = nodes[i1].value;\n      if (nodeValue < minValue) minValue = nodeValue;\n      if (nodeValue > maxValue) maxValue = nodeValue;\n      beta = sumValue * sumValue * alpha;\n      newRatio = Math.max(maxValue / beta, beta / minValue);\n      if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n      minRatio = newRatio;\n    }\n\n    // Position and record the row orientation.\n    rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n    if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n    else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n    value -= sumValue, i0 = i1;\n  }\n\n  return rows;\n}\n\nexport default (function custom(ratio) {\n\n  function squarify(parent, x0, y0, x1, y1) {\n    squarifyRatio(ratio, parent, x0, y0, x1, y1);\n  }\n\n  squarify.ratio = function(x) {\n    return custom((x = +x) > 1 ? x : 1);\n  };\n\n  return squarify;\n})(phi);\n","import roundNode from \"./round.js\";\nimport squarify from \"./squarify.js\";\nimport {required} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nexport default function() {\n  var tile = squarify,\n      round = false,\n      dx = 1,\n      dy = 1,\n      paddingStack = [0],\n      paddingInner = constantZero,\n      paddingTop = constantZero,\n      paddingRight = constantZero,\n      paddingBottom = constantZero,\n      paddingLeft = constantZero;\n\n  function treemap(root) {\n    root.x0 =\n    root.y0 = 0;\n    root.x1 = dx;\n    root.y1 = dy;\n    root.eachBefore(positionNode);\n    paddingStack = [0];\n    if (round) root.eachBefore(roundNode);\n    return root;\n  }\n\n  function positionNode(node) {\n    var p = paddingStack[node.depth],\n        x0 = node.x0 + p,\n        y0 = node.y0 + p,\n        x1 = node.x1 - p,\n        y1 = node.y1 - p;\n    if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n    if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n    node.x0 = x0;\n    node.y0 = y0;\n    node.x1 = x1;\n    node.y1 = y1;\n    if (node.children) {\n      p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n      x0 += paddingLeft(node) - p;\n      y0 += paddingTop(node) - p;\n      x1 -= paddingRight(node) - p;\n      y1 -= paddingBottom(node) - p;\n      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n      tile(node, x0, y0, x1, y1);\n    }\n  }\n\n  treemap.round = function(x) {\n    return arguments.length ? (round = !!x, treemap) : round;\n  };\n\n  treemap.size = function(x) {\n    return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n  };\n\n  treemap.tile = function(x) {\n    return arguments.length ? (tile = required(x), treemap) : tile;\n  };\n\n  treemap.padding = function(x) {\n    return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n  };\n\n  treemap.paddingInner = function(x) {\n    return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n  };\n\n  treemap.paddingOuter = function(x) {\n    return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n  };\n\n  treemap.paddingTop = function(x) {\n    return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n  };\n\n  treemap.paddingRight = function(x) {\n    return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n  };\n\n  treemap.paddingBottom = function(x) {\n    return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n  };\n\n  treemap.paddingLeft = function(x) {\n    return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n  };\n\n  return treemap;\n}\n","export default function(parent, x0, y0, x1, y1) {\n  var nodes = parent.children,\n      i, n = nodes.length,\n      sum, sums = new Array(n + 1);\n\n  for (sums[0] = sum = i = 0; i < n; ++i) {\n    sums[i + 1] = sum += nodes[i].value;\n  }\n\n  partition(0, n, parent.value, x0, y0, x1, y1);\n\n  function partition(i, j, value, x0, y0, x1, y1) {\n    if (i >= j - 1) {\n      var node = nodes[i];\n      node.x0 = x0, node.y0 = y0;\n      node.x1 = x1, node.y1 = y1;\n      return;\n    }\n\n    var valueOffset = sums[i],\n        valueTarget = (value / 2) + valueOffset,\n        k = i + 1,\n        hi = j - 1;\n\n    while (k < hi) {\n      var mid = k + hi >>> 1;\n      if (sums[mid] < valueTarget) k = mid + 1;\n      else hi = mid;\n    }\n\n    if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n    var valueLeft = sums[k] - valueOffset,\n        valueRight = value - valueLeft;\n\n    if ((x1 - x0) > (y1 - y0)) {\n      var xk = (x0 * valueRight + x1 * valueLeft) / value;\n      partition(i, k, valueLeft, x0, y0, xk, y1);\n      partition(k, j, valueRight, xk, y0, x1, y1);\n    } else {\n      var yk = (y0 * valueRight + y1 * valueLeft) / value;\n      partition(i, k, valueLeft, x0, y0, x1, yk);\n      partition(k, j, valueRight, x0, yk, x1, y1);\n    }\n  }\n}\n","import dice from \"./dice.js\";\nimport slice from \"./slice.js\";\n\nexport default function(parent, x0, y0, x1, y1) {\n  (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","import treemapDice from \"./dice.js\";\nimport treemapSlice from \"./slice.js\";\nimport {phi, squarifyRatio} from \"./squarify.js\";\n\nexport default (function custom(ratio) {\n\n  function resquarify(parent, x0, y0, x1, y1) {\n    if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n      var rows,\n          row,\n          nodes,\n          i,\n          j = -1,\n          n,\n          m = rows.length,\n          value = parent.value;\n\n      while (++j < m) {\n        row = rows[j], nodes = row.children;\n        for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n        if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);\n        else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);\n        value -= row.value;\n      }\n    } else {\n      parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n      rows.ratio = ratio;\n    }\n  }\n\n  resquarify.ratio = function(x) {\n    return custom((x = +x) > 1 ? x : 1);\n  };\n\n  return resquarify;\n})(phi);\n","export default function(range) {\n  var n = range.length;\n  return function(t) {\n    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n  };\n}\n","import {hue} from \"./color.js\";\n\nexport default function(a, b) {\n  var i = hue(+a, +b);\n  return function(t) {\n    var x = i(t);\n    return x - 360 * Math.floor(x / 360);\n  };\n}\n","export default function(a, b) {\n  return a = +a, b = +b, function(t) {\n    return Math.round(a * (1 - t) + b * t);\n  };\n}\n","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","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n        s = color(start.s, end.s),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.s = s(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {lab as colorLab} from \"d3-color\";\nimport color from \"./color.js\";\n\nexport default function lab(start, end) {\n  var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n      a = color(start.a, end.a),\n      b = color(start.b, end.b),\n      opacity = color(start.opacity, end.opacity);\n  return function(t) {\n    start.l = l(t);\n    start.a = a(t);\n    start.b = b(t);\n    start.opacity = opacity(t);\n    return start + \"\";\n  };\n}\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n        c = color(start.c, end.c),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.c = c(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n  return (function cubehelixGamma(y) {\n    y = +y;\n\n    function cubehelix(start, end) {\n      var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n          s = color(start.s, end.s),\n          l = color(start.l, end.l),\n          opacity = color(start.opacity, end.opacity);\n      return function(t) {\n        start.h = h(t);\n        start.s = s(t);\n        start.l = l(Math.pow(t, y));\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n\n    cubehelix.gamma = cubehelixGamma;\n\n    return cubehelix;\n  })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n  var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n  while (i < n) I[i] = interpolate(v, v = values[++i]);\n  return function(t) {\n    var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n    return I[i](t - i);\n  };\n}\n","export default function(interpolator, n) {\n  var samples = new Array(n);\n  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n  return samples;\n}\n","export default function(polygon) {\n  var i = -1,\n      n = polygon.length,\n      a,\n      b = polygon[n - 1],\n      area = 0;\n\n  while (++i < n) {\n    a = b;\n    b = polygon[i];\n    area += a[1] * b[0] - a[0] * b[1];\n  }\n\n  return area / 2;\n}\n","export default function(polygon) {\n  var i = -1,\n      n = polygon.length,\n      x = 0,\n      y = 0,\n      a,\n      b = polygon[n - 1],\n      c,\n      k = 0;\n\n  while (++i < n) {\n    a = b;\n    b = polygon[i];\n    k += c = a[0] * b[1] - b[0] * a[1];\n    x += (a[0] + b[0]) * c;\n    y += (a[1] + b[1]) * c;\n  }\n\n  return k *= 3, [x / k, y / k];\n}\n","import cross from \"./cross.js\";\n\nfunction lexicographicOrder(a, b) {\n  return a[0] - b[0] || a[1] - b[1];\n}\n\n// Computes the upper convex hull per the monotone chain algorithm.\n// Assumes points.length >= 3, is sorted by x, unique in y.\n// Returns an array of indices into points in left-to-right order.\nfunction computeUpperHullIndexes(points) {\n  var n = points.length,\n      indexes = [0, 1],\n      size = 2;\n\n  for (var i = 2; i < n; ++i) {\n    while (size > 1 && cross(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;\n    indexes[size++] = i;\n  }\n\n  return indexes.slice(0, size); // remove popped points\n}\n\nexport default function(points) {\n  if ((n = points.length) < 3) return null;\n\n  var i,\n      n,\n      sortedPoints = new Array(n),\n      flippedPoints = new Array(n);\n\n  for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];\n  sortedPoints.sort(lexicographicOrder);\n  for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];\n\n  var upperIndexes = computeUpperHullIndexes(sortedPoints),\n      lowerIndexes = computeUpperHullIndexes(flippedPoints);\n\n  // Construct the hull polygon, removing possible duplicate endpoints.\n  var skipLeft = lowerIndexes[0] === upperIndexes[0],\n      skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],\n      hull = [];\n\n  // Add upper hull in right-to-l order.\n  // Then add lower hull in left-to-right order.\n  for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);\n  for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);\n\n  return hull;\n}\n","// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of\n// the 3D cross product in a quadrant I Cartesian coordinate system (+x is\n// right, +y is up). Returns a positive value if ABC is counter-clockwise,\n// negative if clockwise, and zero if the points are collinear.\nexport default function(a, b, c) {\n  return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\n}\n","export default function(polygon, point) {\n  var n = polygon.length,\n      p = polygon[n - 1],\n      x = point[0], y = point[1],\n      x0 = p[0], y0 = p[1],\n      x1, y1,\n      inside = false;\n\n  for (var i = 0; i < n; ++i) {\n    p = polygon[i], x1 = p[0], y1 = p[1];\n    if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;\n    x0 = x1, y0 = y1;\n  }\n\n  return inside;\n}\n","export default function(polygon) {\n  var i = -1,\n      n = polygon.length,\n      b = polygon[n - 1],\n      xa,\n      ya,\n      xb = b[0],\n      yb = b[1],\n      perimeter = 0;\n\n  while (++i < n) {\n    xa = xb;\n    ya = yb;\n    b = polygon[i];\n    xb = b[0];\n    yb = b[1];\n    xa -= xb;\n    ya -= yb;\n    perimeter += Math.sqrt(xa * xa + ya * ya);\n  }\n\n  return perimeter;\n}\n","export default function() {\n  return Math.random();\n}\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 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\";\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\";\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 irwinHall from \"./irwinHall\";\n\nexport default (function sourceRandomBates(source) {\n  function randomBates(n) {\n    var randomIrwinHall = irwinHall.source(source)(n);\n    return function() {\n      return randomIrwinHall() / n;\n    };\n  }\n\n  randomBates.source = sourceRandomBates;\n\n  return randomBates;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomExponential(source) {\n  function randomExponential(lambda) {\n    return function() {\n      return -Math.log(1 - source()) / lambda;\n    };\n  }\n\n  randomExponential.source = sourceRandomExponential;\n\n  return randomExponential;\n})(defaultSource);\n","export function initRange(domain, range) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.range(domain); break;\n    default: this.range(range).domain(domain); break;\n  }\n  return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n  switch (arguments.length) {\n    case 0: break;\n    case 1: this.interpolator(domain); break;\n    default: this.interpolator(interpolator).domain(domain); break;\n  }\n  return this;\n}\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","import {map} from \"d3-collection\";\nimport {slice} from \"./array\";\nimport {initRange} from \"./init\";\n\nexport var implicit = {name: \"implicit\"};\n\nexport default function ordinal() {\n  var index = map(),\n      domain = [],\n      range = [],\n      unknown = implicit;\n\n  function scale(d) {\n    var key = d + \"\", i = index.get(key);\n    if (!i) {\n      if (unknown !== implicit) return unknown;\n      index.set(key, i = domain.push(d));\n    }\n    return range[(i - 1) % range.length];\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [], index = map();\n    var i = -1, n = _.length, d, key;\n    while (++i < n) if (!index.has(key = (d = _[i]) + \"\")) index.set(key, domain.push(d));\n    return scale;\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = slice.call(_), scale) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return ordinal(domain, range).unknown(unknown);\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init\";\nimport ordinal from \"./ordinal\";\n\nexport default function band() {\n  var scale = ordinal().unknown(undefined),\n      domain = scale.domain,\n      ordinalRange = scale.range,\n      range = [0, 1],\n      step,\n      bandwidth,\n      round = false,\n      paddingInner = 0,\n      paddingOuter = 0,\n      align = 0.5;\n\n  delete scale.unknown;\n\n  function rescale() {\n    var n = domain().length,\n        reverse = range[1] < range[0],\n        start = range[reverse - 0],\n        stop = range[1 - reverse];\n    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n    if (round) step = Math.floor(step);\n    start += (stop - start - step * (n - paddingInner)) * align;\n    bandwidth = step * (1 - paddingInner);\n    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n    var values = sequence(n).map(function(i) { return start + step * i; });\n    return ordinalRange(reverse ? values.reverse() : values);\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = [+_[0], +_[1]], rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = [+_[0], +_[1]], round = true, rescale();\n  };\n\n  scale.bandwidth = function() {\n    return bandwidth;\n  };\n\n  scale.step = function() {\n    return step;\n  };\n\n  scale.round = function(_) {\n    return arguments.length ? (round = !!_, rescale()) : round;\n  };\n\n  scale.padding = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n  };\n\n  scale.paddingInner = function(_) {\n    return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n  };\n\n  scale.paddingOuter = function(_) {\n    return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n  };\n\n  scale.align = function(_) {\n    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n  };\n\n  scale.copy = function() {\n    return band(domain(), range)\n        .round(round)\n        .paddingInner(paddingInner)\n        .paddingOuter(paddingOuter)\n        .align(align);\n  };\n\n  return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n  var copy = scale.copy;\n\n  scale.padding = scale.paddingOuter;\n  delete scale.paddingInner;\n  delete scale.paddingOuter;\n\n  scale.copy = function() {\n    return pointish(copy());\n  };\n\n  return scale;\n}\n\nexport function point() {\n  return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function(x) {\n  return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport {map, slice} from \"./array\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n  return x;\n}\n\nfunction normalize(a, b) {\n  return (b -= (a = +a))\n      ? function(x) { return (x - a) / b; }\n      : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(domain) {\n  var a = domain[0], b = domain[domain.length - 1], t;\n  if (a > b) t = a, a = b, b = t;\n  return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n  return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n  var j = Math.min(domain.length, range.length) - 1,\n      d = new Array(j),\n      r = new Array(j),\n      i = -1;\n\n  // Reverse descending domains.\n  if (domain[j] < domain[0]) {\n    domain = domain.slice().reverse();\n    range = range.slice().reverse();\n  }\n\n  while (++i < j) {\n    d[i] = normalize(domain[i], domain[i + 1]);\n    r[i] = interpolate(range[i], range[i + 1]);\n  }\n\n  return function(x) {\n    var i = bisect(domain, x, 1, j) - 1;\n    return r[i](d[i](x));\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .range(source.range())\n      .interpolate(source.interpolate())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport function transformer() {\n  var domain = unit,\n      range = unit,\n      interpolate = interpolateValue,\n      transform,\n      untransform,\n      unknown,\n      clamp = identity,\n      piecewise,\n      output,\n      input;\n\n  function rescale() {\n    piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n    output = input = null;\n    return scale;\n  }\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n  }\n\n  scale.invert = function(y) {\n    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = map.call(_, number), clamp === identity || (clamp = clamper(domain)), rescale()) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n  };\n\n  scale.rangeRound = function(_) {\n    return range = slice.call(_), interpolate = interpolateRound, rescale();\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = _ ? clamper(domain) : identity, scale) : clamp !== identity;\n  };\n\n  scale.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, rescale()) : interpolate;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t, u) {\n    transform = t, untransform = u;\n    return rescale();\n  };\n}\n\nexport default function continuous(transform, untransform) {\n  return transformer()(transform, untransform);\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(start, stop, count, specifier) {\n  var step = tickStep(start, stop, count),\n      precision;\n  specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n  switch (specifier.type) {\n    case \"s\": {\n      var value = Math.max(Math.abs(start), Math.abs(stop));\n      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n      return formatPrefix(specifier, value);\n    }\n    case \"\":\n    case \"e\":\n    case \"g\":\n    case \"p\":\n    case \"r\": {\n      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n      break;\n    }\n    case \"f\":\n    case \"%\": {\n      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n      break;\n    }\n  }\n  return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy, identity} from \"./continuous\";\nimport {initRange} from \"./init\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n  var domain = scale.domain;\n\n  scale.ticks = function(count) {\n    var d = domain();\n    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    var d = domain();\n    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n  };\n\n  scale.nice = function(count) {\n    if (count == null) count = 10;\n\n    var d = domain(),\n        i0 = 0,\n        i1 = d.length - 1,\n        start = d[i0],\n        stop = d[i1],\n        step;\n\n    if (stop < start) {\n      step = start, start = stop, stop = step;\n      step = i0, i0 = i1, i1 = step;\n    }\n\n    step = tickIncrement(start, stop, count);\n\n    if (step > 0) {\n      start = Math.floor(start / step) * step;\n      stop = Math.ceil(stop / step) * step;\n      step = tickIncrement(start, stop, count);\n    } else if (step < 0) {\n      start = Math.ceil(start * step) / step;\n      stop = Math.floor(stop * step) / step;\n      step = tickIncrement(start, stop, count);\n    }\n\n    if (step > 0) {\n      d[i0] = Math.floor(start / step) * step;\n      d[i1] = Math.ceil(stop / step) * step;\n      domain(d);\n    } else if (step < 0) {\n      d[i0] = Math.ceil(start * step) / step;\n      d[i1] = Math.floor(stop * step) / step;\n      domain(d);\n    }\n\n    return scale;\n  };\n\n  return scale;\n}\n\nexport default function linear() {\n  var scale = continuous(identity, identity);\n\n  scale.copy = function() {\n    return copy(scale, linear());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return linearish(scale);\n}\n","import {map} from \"./array\";\nimport {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity(domain) {\n  var unknown;\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : x;\n  }\n\n  scale.invert = scale;\n\n  scale.domain = scale.range = function(_) {\n    return arguments.length ? (domain = map.call(_, number), scale) : domain.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return identity(domain).unknown(unknown);\n  };\n\n  domain = arguments.length ? map.call(domain, number) : [0, 1];\n\n  return linearish(scale);\n}\n","export default function(domain, interval) {\n  domain = domain.slice();\n\n  var i0 = 0,\n      i1 = domain.length - 1,\n      x0 = domain[i0],\n      x1 = domain[i1],\n      t;\n\n  if (x1 < x0) {\n    t = i0, i0 = i1, i1 = t;\n    t = x0, x0 = x1, x1 = t;\n  }\n\n  domain[i0] = interval.floor(x0);\n  domain[i1] = interval.ceil(x1);\n  return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport nice from \"./nice\";\nimport {copy, transformer} from \"./continuous\";\nimport {initRange} from \"./init\";\n\nfunction transformLog(x) {\n  return Math.log(x);\n}\n\nfunction transformExp(x) {\n  return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n  return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n  return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n  return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n  return base === 10 ? pow10\n      : base === Math.E ? Math.exp\n      : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n  return base === Math.E ? Math.log\n      : base === 10 && Math.log10\n      || base === 2 && Math.log2\n      || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n  return function(x) {\n    return -f(-x);\n  };\n}\n\nexport function loggish(transform) {\n  var scale = transform(transformLog, transformExp),\n      domain = scale.domain,\n      base = 10,\n      logs,\n      pows;\n\n  function rescale() {\n    logs = logp(base), pows = powp(base);\n    if (domain()[0] < 0) {\n      logs = reflect(logs), pows = reflect(pows);\n      transform(transformLogn, transformExpn);\n    } else {\n      transform(transformLog, transformExp);\n    }\n    return scale;\n  }\n\n  scale.base = function(_) {\n    return arguments.length ? (base = +_, rescale()) : base;\n  };\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain(_), rescale()) : domain();\n  };\n\n  scale.ticks = function(count) {\n    var d = domain(),\n        u = d[0],\n        v = d[d.length - 1],\n        r;\n\n    if (r = v < u) i = u, u = v, v = i;\n\n    var i = logs(u),\n        j = logs(v),\n        p,\n        k,\n        t,\n        n = count == null ? 10 : +count,\n        z = [];\n\n    if (!(base % 1) && j - i < n) {\n      i = Math.round(i) - 1, j = Math.round(j) + 1;\n      if (u > 0) for (; i < j; ++i) {\n        for (k = 1, p = pows(i); k < base; ++k) {\n          t = p * k;\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      } else for (; i < j; ++i) {\n        for (k = base - 1, p = pows(i); k >= 1; --k) {\n          t = p * k;\n          if (t < u) continue;\n          if (t > v) break;\n          z.push(t);\n        }\n      }\n    } else {\n      z = ticks(i, j, Math.min(j - i, n)).map(pows);\n    }\n\n    return r ? z.reverse() : z;\n  };\n\n  scale.tickFormat = function(count, specifier) {\n    if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n    if (typeof specifier !== \"function\") specifier = format(specifier);\n    if (count === Infinity) return specifier;\n    if (count == null) count = 10;\n    var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n    return function(d) {\n      var i = d / pows(Math.round(logs(d)));\n      if (i * base < base - 0.5) i *= base;\n      return i <= k ? specifier(d) : \"\";\n    };\n  };\n\n  scale.nice = function() {\n    return domain(nice(domain(), {\n      floor: function(x) { return pows(Math.floor(logs(x))); },\n      ceil: function(x) { return pows(Math.ceil(logs(x))); }\n    }));\n  };\n\n  return scale;\n}\n\nexport default function log() {\n  var scale = loggish(transformer()).domain([1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, log()).base(scale.base());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n","import {linearish} from \"./linear\";\nimport {copy, transformer} from \"./continuous\";\nimport {initRange} from \"./init\";\n\nfunction transformSymlog(c) {\n  return function(x) {\n    return Math.sign(x) * Math.log1p(Math.abs(x / c));\n  };\n}\n\nfunction transformSymexp(c) {\n  return function(x) {\n    return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n  };\n}\n\nexport function symlogish(transform) {\n  var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n  scale.constant = function(_) {\n    return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n  };\n\n  return linearish(scale);\n}\n\nexport default function symlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, symlog()).constant(scale.constant());\n  };\n\n  return initRange.apply(scale, arguments);\n}\n","import {linearish} from \"./linear\";\nimport {copy, identity, transformer} from \"./continuous\";\nimport {initRange} from \"./init\";\n\nfunction transformPow(exponent) {\n  return function(x) {\n    return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n  };\n}\n\nfunction transformSqrt(x) {\n  return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n  return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n  var scale = transform(identity, identity),\n      exponent = 1;\n\n  function rescale() {\n    return exponent === 1 ? transform(identity, identity)\n        : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n        : transform(transformPow(exponent), transformPow(1 / exponent));\n  }\n\n  scale.exponent = function(_) {\n    return arguments.length ? (exponent = +_, rescale()) : exponent;\n  };\n\n  return linearish(scale);\n}\n\nexport default function pow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, pow()).exponent(scale.exponent());\n  };\n\n  initRange.apply(scale, arguments);\n\n  return scale;\n}\n\nexport function sqrt() {\n  return pow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {initRange} from \"./init\";\n\nexport default function quantile() {\n  var domain = [],\n      range = [],\n      thresholds = [],\n      unknown;\n\n  function rescale() {\n    var i = 0, n = Math.max(1, range.length);\n    thresholds = new Array(n - 1);\n    while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n    return scale;\n  }\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n  }\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN] : [\n      i > 0 ? thresholds[i - 1] : domain[0],\n      i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n    ];\n  };\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n    domain.sort(ascending);\n    return rescale();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = slice.call(_), rescale()) : range.slice();\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.quantiles = function() {\n    return thresholds.slice();\n  };\n\n  scale.copy = function() {\n    return quantile()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {linearish} from \"./linear\";\nimport {initRange} from \"./init\";\n\nexport default function quantize() {\n  var x0 = 0,\n      x1 = 1,\n      n = 1,\n      domain = [0.5],\n      range = [0, 1],\n      unknown;\n\n  function scale(x) {\n    return x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n  }\n\n  function rescale() {\n    var i = -1;\n    domain = new Array(n);\n    while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n    return scale;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (n = (range = slice.call(_)).length - 1, rescale()) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return i < 0 ? [NaN, NaN]\n        : i < 1 ? [x0, domain[0]]\n        : i >= n ? [domain[n - 1], x1]\n        : [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : scale;\n  };\n\n  scale.thresholds = function() {\n    return domain.slice();\n  };\n\n  scale.copy = function() {\n    return quantize()\n        .domain([x0, x1])\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(linearish(scale), arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {initRange} from \"./init\";\n\nexport default function threshold() {\n  var domain = [0.5],\n      range = [0, 1],\n      unknown,\n      n = 1;\n\n  function scale(x) {\n    return x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (domain = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n  };\n\n  scale.range = function(_) {\n    return arguments.length ? (range = slice.call(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n  };\n\n  scale.invertExtent = function(y) {\n    var i = range.indexOf(y);\n    return [domain[i - 1], domain[i]];\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  scale.copy = function() {\n    return threshold()\n        .domain(domain)\n        .range(range)\n        .unknown(unknown);\n  };\n\n  return initRange.apply(scale, arguments);\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","import {calendar} from \"./time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond} from \"d3-time\";\nimport {initRange} from \"./init\";\n\nexport default function() {\n  return initRange.apply(calendar(utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","import {identity} from \"./continuous\";\nimport {initInterpolator} from \"./init\";\nimport {linearish} from \"./linear\";\nimport {loggish} from \"./log\";\nimport {symlogish} from \"./symlog\";\nimport {powish} from \"./pow\";\n\nfunction transformer() {\n  var x0 = 0,\n      x1 = 1,\n      t0,\n      t1,\n      k10,\n      transform,\n      interpolator = identity,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n    return scale;\n  };\n}\n\nexport function copy(source, target) {\n  return target\n      .domain(source.domain())\n      .interpolator(source.interpolator())\n      .clamp(source.clamp())\n      .unknown(source.unknown());\n}\n\nexport default function sequential() {\n  var scale = linearish(transformer()(identity));\n\n  scale.copy = function() {\n    return copy(scale, sequential());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n  var scale = loggish(transformer()).domain([1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, sequentialLog()).base(scale.base());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, sequentialSymlog()).constant(scale.constant());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, sequentialPow()).exponent(scale.exponent());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n  return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect} from \"d3-array\";\nimport {identity} from \"./continuous\";\nimport {initInterpolator} from \"./init\";\n\nexport default function sequentialQuantile() {\n  var domain = [],\n      interpolator = identity;\n\n  function scale(x) {\n    if (!isNaN(x = +x)) return interpolator((bisect(domain, x) - 1) / (domain.length - 1));\n  }\n\n  scale.domain = function(_) {\n    if (!arguments.length) return domain.slice();\n    domain = [];\n    for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);\n    domain.sort(ascending);\n    return scale;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  scale.copy = function() {\n    return sequentialQuantile(interpolator).domain(domain);\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n","import {identity} from \"./continuous\";\nimport {initInterpolator} from \"./init\";\nimport {linearish} from \"./linear\";\nimport {loggish} from \"./log\";\nimport {copy} from \"./sequential\";\nimport {symlogish} from \"./symlog\";\nimport {powish} from \"./pow\";\n\nfunction transformer() {\n  var x0 = 0,\n      x1 = 0.5,\n      x2 = 1,\n      t0,\n      t1,\n      t2,\n      k10,\n      k21,\n      interpolator = identity,\n      transform,\n      clamp = false,\n      unknown;\n\n  function scale(x) {\n    return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (x < t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n  }\n\n  scale.domain = function(_) {\n    return arguments.length ? (t0 = transform(x0 = +_[0]), t1 = transform(x1 = +_[1]), t2 = transform(x2 = +_[2]), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), scale) : [x0, x1, x2];\n  };\n\n  scale.clamp = function(_) {\n    return arguments.length ? (clamp = !!_, scale) : clamp;\n  };\n\n  scale.interpolator = function(_) {\n    return arguments.length ? (interpolator = _, scale) : interpolator;\n  };\n\n  scale.unknown = function(_) {\n    return arguments.length ? (unknown = _, scale) : unknown;\n  };\n\n  return function(t) {\n    transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1);\n    return scale;\n  };\n}\n\nexport default function diverging() {\n  var scale = linearish(transformer()(identity));\n\n  scale.copy = function() {\n    return copy(scale, diverging());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n  var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n  scale.copy = function() {\n    return copy(scale, divergingLog()).base(scale.base());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n  var scale = symlogish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, divergingSymlog()).constant(scale.constant());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n  var scale = powish(transformer());\n\n  scale.copy = function() {\n    return copy(scale, divergingPow()).exponent(scale.exponent());\n  };\n\n  return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n  return divergingPow.apply(null, arguments).exponent(0.5);\n}\n","export default function(specifier) {\n  var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n  while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n  return colors;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default function(scheme) {\n  return interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"d8b365f5f5f55ab4ac\",\n  \"a6611adfc27d80cdc1018571\",\n  \"a6611adfc27df5f5f580cdc1018571\",\n  \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n  \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n  \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n  \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n  \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n  \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"af8dc3f7f7f77fbf7b\",\n  \"7b3294c2a5cfa6dba0008837\",\n  \"7b3294c2a5cff7f7f7a6dba0008837\",\n  \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n  \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n  \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n  \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n  \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n  \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e9a3c9f7f7f7a1d76a\",\n  \"d01c8bf1b6dab8e1864dac26\",\n  \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n  \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n  \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n  \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n  \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n  \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n  \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"998ec3f7f7f7f1a340\",\n  \"5e3c99b2abd2fdb863e66101\",\n  \"5e3c99b2abd2f7f7f7fdb863e66101\",\n  \"542788998ec3d8daebfee0b6f1a340b35806\",\n  \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n  \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n  \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n  \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n  \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ef8a62f7f7f767a9cf\",\n  \"ca0020f4a58292c5de0571b0\",\n  \"ca0020f4a582f7f7f792c5de0571b0\",\n  \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n  \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n  \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n  \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n  \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n  \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ef8a62ffffff999999\",\n  \"ca0020f4a582bababa404040\",\n  \"ca0020f4a582ffffffbababa404040\",\n  \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n  \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n  \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n  \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n  \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n  \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fc8d59ffffbf91bfdb\",\n  \"d7191cfdae61abd9e92c7bb6\",\n  \"d7191cfdae61ffffbfabd9e92c7bb6\",\n  \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n  \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n  \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n  \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n  \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n  \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fc8d59ffffbf91cf60\",\n  \"d7191cfdae61a6d96a1a9641\",\n  \"d7191cfdae61ffffbfa6d96a1a9641\",\n  \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n  \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n  \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n  \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n  \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n  \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fc8d59ffffbf99d594\",\n  \"d7191cfdae61abdda42b83ba\",\n  \"d7191cfdae61ffffbfabdda42b83ba\",\n  \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n  \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n  \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n  \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n  \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n  \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e5f5f999d8c92ca25f\",\n  \"edf8fbb2e2e266c2a4238b45\",\n  \"edf8fbb2e2e266c2a42ca25f006d2c\",\n  \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n  \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n  \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n  \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e0ecf49ebcda8856a7\",\n  \"edf8fbb3cde38c96c688419d\",\n  \"edf8fbb3cde38c96c68856a7810f7c\",\n  \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n  \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n  \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n  \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e0f3dba8ddb543a2ca\",\n  \"f0f9e8bae4bc7bccc42b8cbe\",\n  \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n  \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n  \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n  \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n  \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fee8c8fdbb84e34a33\",\n  \"fef0d9fdcc8afc8d59d7301f\",\n  \"fef0d9fdcc8afc8d59e34a33b30000\",\n  \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n  \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n  \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n  \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ece2f0a6bddb1c9099\",\n  \"f6eff7bdc9e167a9cf02818a\",\n  \"f6eff7bdc9e167a9cf1c9099016c59\",\n  \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n  \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n  \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n  \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ece7f2a6bddb2b8cbe\",\n  \"f1eef6bdc9e174a9cf0570b0\",\n  \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n  \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n  \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n  \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n  \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e7e1efc994c7dd1c77\",\n  \"f1eef6d7b5d8df65b0ce1256\",\n  \"f1eef6d7b5d8df65b0dd1c77980043\",\n  \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n  \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n  \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n  \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fde0ddfa9fb5c51b8a\",\n  \"feebe2fbb4b9f768a1ae017e\",\n  \"feebe2fbb4b9f768a1c51b8a7a0177\",\n  \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n  \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n  \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n  \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"edf8b17fcdbb2c7fb8\",\n  \"ffffcca1dab441b6c4225ea8\",\n  \"ffffcca1dab441b6c42c7fb8253494\",\n  \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n  \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n  \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n  \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"f7fcb9addd8e31a354\",\n  \"ffffccc2e69978c679238443\",\n  \"ffffccc2e69978c67931a354006837\",\n  \"ffffccd9f0a3addd8e78c67931a354006837\",\n  \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n  \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n  \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fff7bcfec44fd95f0e\",\n  \"ffffd4fed98efe9929cc4c02\",\n  \"ffffd4fed98efe9929d95f0e993404\",\n  \"ffffd4fee391fec44ffe9929d95f0e993404\",\n  \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n  \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n  \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"ffeda0feb24cf03b20\",\n  \"ffffb2fecc5cfd8d3ce31a1c\",\n  \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n  \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n  \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n  \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n  \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"deebf79ecae13182bd\",\n  \"eff3ffbdd7e76baed62171b5\",\n  \"eff3ffbdd7e76baed63182bd08519c\",\n  \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n  \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n  \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n  \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"e5f5e0a1d99b31a354\",\n  \"edf8e9bae4b374c476238b45\",\n  \"edf8e9bae4b374c47631a354006d2c\",\n  \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n  \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n  \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n  \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"f0f0f0bdbdbd636363\",\n  \"f7f7f7cccccc969696525252\",\n  \"f7f7f7cccccc969696636363252525\",\n  \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n  \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n  \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n  \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"efedf5bcbddc756bb1\",\n  \"f2f0f7cbc9e29e9ac86a51a3\",\n  \"f2f0f7cbc9e29e9ac8756bb154278f\",\n  \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n  \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n  \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n  \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fee0d2fc9272de2d26\",\n  \"fee5d9fcae91fb6a4acb181d\",\n  \"fee5d9fcae91fb6a4ade2d26a50f15\",\n  \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n  \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n  \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n  \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n  \"fee6cefdae6be6550d\",\n  \"feeddefdbe85fd8d3cd94701\",\n  \"feeddefdbe85fd8d3ce6550da63603\",\n  \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n  \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n  \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n  \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","export default function(t) {\n  t = Math.max(0, Math.min(1, t));\n  return \"rgb(\"\n      + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))\n      + \")\";\n}\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n  if (t < 0 || t > 1) t -= Math.floor(t);\n  var ts = Math.abs(t - 0.5);\n  c.h = 360 * t - 100;\n  c.s = 1.5 - 1.5 * ts;\n  c.l = 0.8 - 0.9 * ts;\n  return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n    pi_1_3 = Math.PI / 3,\n    pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n  var x;\n  t = (0.5 - t) * Math.PI;\n  c.r = 255 * (x = Math.sin(t)) * x;\n  c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n  c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n  return c + \"\";\n}\n","export default function(t) {\n  t = Math.max(0, Math.min(1, t));\n  return \"rgb(\"\n      + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + \", \"\n      + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))\n      + \")\";\n}\n","import colors from \"../colors.js\";\n\nfunction ramp(range) {\n  var n = range.length;\n  return function(t) {\n    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n  };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","import creator from \"./creator\";\nimport select from \"./select\";\n\nexport default function(name) {\n  return select(creator(name).call(document.documentElement));\n}\n","var nextId = 0;\n\nexport default function local() {\n  return new Local;\n}\n\nfunction Local() {\n  this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n  constructor: Local,\n  get: function(node) {\n    var id = this._;\n    while (!(id in node)) if (!(node = node.parentNode)) return;\n    return node[id];\n  },\n  set: function(node, value) {\n    return node[this._] = value;\n  },\n  remove: function(node) {\n    return this._ in node && delete node[this._];\n  },\n  toString: function() {\n    return this._;\n  }\n};\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([document.querySelectorAll(selector)], [document.documentElement])\n      : new Selection([selector == null ? [] : selector], root);\n}\n","import sourceEvent from \"./sourceEvent\";\nimport point from \"./point\";\n\nexport default function(node, touches) {\n  if (touches == null) touches = sourceEvent().touches;\n\n  for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {\n    points[i] = point(node, touches[i]);\n  }\n\n  return points;\n}\n","export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\n\nfunction arcInnerRadius(d) {\n  return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n  return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n  return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n  return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n  return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n  var x10 = x1 - x0, y10 = y1 - y0,\n      x32 = x3 - x2, y32 = y3 - y2,\n      t = y32 * x10 - x32 * y10;\n  if (t * t < epsilon) return;\n  t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n  return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n  var x01 = x0 - x1,\n      y01 = y0 - y1,\n      lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n      ox = lo * y01,\n      oy = -lo * x01,\n      x11 = x0 + ox,\n      y11 = y0 + oy,\n      x10 = x1 + ox,\n      y10 = y1 + oy,\n      x00 = (x11 + x10) / 2,\n      y00 = (y11 + y10) / 2,\n      dx = x10 - x11,\n      dy = y10 - y11,\n      d2 = dx * dx + dy * dy,\n      r = r1 - rc,\n      D = x11 * y10 - x10 * y11,\n      d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n      cx0 = (D * dy - dx * d) / d2,\n      cy0 = (-D * dx - dy * d) / d2,\n      cx1 = (D * dy + dx * d) / d2,\n      cy1 = (-D * dx + dy * d) / d2,\n      dx0 = cx0 - x00,\n      dy0 = cy0 - y00,\n      dx1 = cx1 - x00,\n      dy1 = cy1 - y00;\n\n  // Pick the closer of the two intersection points.\n  // TODO Is there a faster way to determine which intersection to use?\n  if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n  return {\n    cx: cx0,\n    cy: cy0,\n    x01: -ox,\n    y01: -oy,\n    x11: cx0 * (r1 / r - 1),\n    y11: cy0 * (r1 / r - 1)\n  };\n}\n\nexport default function() {\n  var innerRadius = arcInnerRadius,\n      outerRadius = arcOuterRadius,\n      cornerRadius = constant(0),\n      padRadius = null,\n      startAngle = arcStartAngle,\n      endAngle = arcEndAngle,\n      padAngle = arcPadAngle,\n      context = null;\n\n  function arc() {\n    var buffer,\n        r,\n        r0 = +innerRadius.apply(this, arguments),\n        r1 = +outerRadius.apply(this, arguments),\n        a0 = startAngle.apply(this, arguments) - halfPi,\n        a1 = endAngle.apply(this, arguments) - halfPi,\n        da = abs(a1 - a0),\n        cw = a1 > a0;\n\n    if (!context) context = buffer = path();\n\n    // Ensure that the outer radius is always larger than the inner radius.\n    if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n    // Is it a point?\n    if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n    // Or is it a circle or annulus?\n    else if (da > tau - epsilon) {\n      context.moveTo(r1 * cos(a0), r1 * sin(a0));\n      context.arc(0, 0, r1, a0, a1, !cw);\n      if (r0 > epsilon) {\n        context.moveTo(r0 * cos(a1), r0 * sin(a1));\n        context.arc(0, 0, r0, a1, a0, cw);\n      }\n    }\n\n    // Or is it a circular or annular sector?\n    else {\n      var a01 = a0,\n          a11 = a1,\n          a00 = a0,\n          a10 = a1,\n          da0 = da,\n          da1 = da,\n          ap = padAngle.apply(this, arguments) / 2,\n          rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n          rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n          rc0 = rc,\n          rc1 = rc,\n          t0,\n          t1;\n\n      // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n      if (rp > epsilon) {\n        var p0 = asin(rp / r0 * sin(ap)),\n            p1 = asin(rp / r1 * sin(ap));\n        if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n        else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n        if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n        else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n      }\n\n      var x01 = r1 * cos(a01),\n          y01 = r1 * sin(a01),\n          x10 = r0 * cos(a10),\n          y10 = r0 * sin(a10);\n\n      // Apply rounded corners?\n      if (rc > epsilon) {\n        var x11 = r1 * cos(a11),\n            y11 = r1 * sin(a11),\n            x00 = r0 * cos(a00),\n            y00 = r0 * sin(a00),\n            oc;\n\n        // Restrict the corner radius according to the sector angle.\n        if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n          var ax = x01 - oc[0],\n              ay = y01 - oc[1],\n              bx = x11 - oc[0],\n              by = y11 - oc[1],\n              kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n              lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n          rc0 = min(rc, (r0 - lc) / (kc - 1));\n          rc1 = min(rc, (r1 - lc) / (kc + 1));\n        }\n      }\n\n      // Is the sector collapsed to a line?\n      if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n      // Does the sector’s outer ring have rounded corners?\n      else if (rc1 > epsilon) {\n        t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n        t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n        context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n        // Have the corners merged?\n        if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n        // Otherwise, draw the two corners and the ring.\n        else {\n          context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n          context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n          context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n        }\n      }\n\n      // Or is the outer ring just a circular arc?\n      else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n      // Is there no inner ring, and it’s a circular sector?\n      // Or perhaps it’s an annular sector collapsed due to padding?\n      if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n      // Does the sector’s inner ring (or point) have rounded corners?\n      else if (rc0 > epsilon) {\n        t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n        t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n        context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n        // Have the corners merged?\n        if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n        // Otherwise, draw the two corners and the ring.\n        else {\n          context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n          context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n          context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n        }\n      }\n\n      // Or is the inner ring just a circular arc?\n      else context.arc(0, 0, r0, a10, a00, cw);\n    }\n\n    context.closePath();\n\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  arc.centroid = function() {\n    var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n        a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n    return [cos(a) * r, sin(a) * r];\n  };\n\n  arc.innerRadius = function(_) {\n    return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n  };\n\n  arc.outerRadius = function(_) {\n    return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n  };\n\n  arc.cornerRadius = function(_) {\n    return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n  };\n\n  arc.padRadius = function(_) {\n    return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n  };\n\n  arc.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n  };\n\n  arc.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n  };\n\n  arc.padAngle = function(_) {\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n  };\n\n  arc.context = function(_) {\n    return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n  };\n\n  return arc;\n}\n","function Linear(context) {\n  this._context = context;\n}\n\nLinear.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // proceed\n      default: this._context.lineTo(x, y); break;\n    }\n  }\n};\n\nexport default function(context) {\n  return new Linear(context);\n}\n","export function x(p) {\n  return p[0];\n}\n\nexport function y(p) {\n  return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n  var x = pointX,\n      y = pointY,\n      defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null;\n\n  function line(data) {\n    var i,\n        n = data.length,\n        d,\n        defined0 = false,\n        buffer;\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) output.lineStart();\n        else output.lineEnd();\n      }\n      if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  line.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n  };\n\n  line.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n  };\n\n  line.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n  };\n\n  line.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n  };\n\n  line.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n  };\n\n  return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n  var x0 = pointX,\n      x1 = null,\n      y0 = constant(0),\n      y1 = pointY,\n      defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null;\n\n  function area(data) {\n    var i,\n        j,\n        k,\n        n = data.length,\n        d,\n        defined0 = false,\n        buffer,\n        x0z = new Array(n),\n        y0z = new Array(n);\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) {\n          j = i;\n          output.areaStart();\n          output.lineStart();\n        } else {\n          output.lineEnd();\n          output.lineStart();\n          for (k = i - 1; k >= j; --k) {\n            output.point(x0z[k], y0z[k]);\n          }\n          output.lineEnd();\n          output.areaEnd();\n        }\n      }\n      if (defined0) {\n        x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n        output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n      }\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  function arealine() {\n    return line().defined(defined).curve(curve).context(context);\n  }\n\n  area.x = function(_) {\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n  };\n\n  area.x0 = function(_) {\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n  };\n\n  area.x1 = function(_) {\n    return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n  };\n\n  area.y = function(_) {\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n  };\n\n  area.y0 = function(_) {\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n  };\n\n  area.y1 = function(_) {\n    return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n  };\n\n  area.lineX0 =\n  area.lineY0 = function() {\n    return arealine().x(x0).y(y0);\n  };\n\n  area.lineY1 = function() {\n    return arealine().x(x0).y(y1);\n  };\n\n  area.lineX1 = function() {\n    return arealine().x(x1).y(y0);\n  };\n\n  area.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n  };\n\n  area.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n  };\n\n  area.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n  };\n\n  return area;\n}\n","export default function(a, b) {\n  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n  return d;\n}\n","import constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n  var value = identity,\n      sortValues = descending,\n      sort = null,\n      startAngle = constant(0),\n      endAngle = constant(tau),\n      padAngle = constant(0);\n\n  function pie(data) {\n    var i,\n        n = data.length,\n        j,\n        k,\n        sum = 0,\n        index = new Array(n),\n        arcs = new Array(n),\n        a0 = +startAngle.apply(this, arguments),\n        da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n        a1,\n        p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n        pa = p * (da < 0 ? -1 : 1),\n        v;\n\n    for (i = 0; i < n; ++i) {\n      if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n        sum += v;\n      }\n    }\n\n    // Optionally sort the arcs by previously-computed values or by data.\n    if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n    else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n    // Compute the arcs! They are stored in the original data's order.\n    for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n      j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n        data: data[j],\n        index: i,\n        value: v,\n        startAngle: a0,\n        endAngle: a1,\n        padAngle: p\n      };\n    }\n\n    return arcs;\n  }\n\n  pie.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n  };\n\n  pie.sortValues = function(_) {\n    return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n  };\n\n  pie.sort = function(_) {\n    return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n  };\n\n  pie.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n  };\n\n  pie.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n  };\n\n  pie.padAngle = function(_) {\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n  };\n\n  return pie;\n}\n","import curveLinear from \"./linear.js\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n  this._curve = curve;\n}\n\nRadial.prototype = {\n  areaStart: function() {\n    this._curve.areaStart();\n  },\n  areaEnd: function() {\n    this._curve.areaEnd();\n  },\n  lineStart: function() {\n    this._curve.lineStart();\n  },\n  lineEnd: function() {\n    this._curve.lineEnd();\n  },\n  point: function(a, r) {\n    this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n  }\n};\n\nexport default function curveRadial(curve) {\n\n  function radial(context) {\n    return new Radial(curve(context));\n  }\n\n  radial._curve = curve;\n\n  return radial;\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial.js\";\nimport line from \"./line.js\";\n\nexport function lineRadial(l) {\n  var c = l.curve;\n\n  l.angle = l.x, delete l.x;\n  l.radius = l.y, delete l.y;\n\n  l.curve = function(_) {\n    return arguments.length ? c(curveRadial(_)) : c()._curve;\n  };\n\n  return l;\n}\n\nexport default function() {\n  return lineRadial(line().curve(curveRadialLinear));\n}\n","import curveRadial, {curveRadialLinear} from \"./curve/radial.js\";\nimport area from \"./area.js\";\nimport {lineRadial} from \"./lineRadial.js\";\n\nexport default function() {\n  var a = area().curve(curveRadialLinear),\n      c = a.curve,\n      x0 = a.lineX0,\n      x1 = a.lineX1,\n      y0 = a.lineY0,\n      y1 = a.lineY1;\n\n  a.angle = a.x, delete a.x;\n  a.startAngle = a.x0, delete a.x0;\n  a.endAngle = a.x1, delete a.x1;\n  a.radius = a.y, delete a.y;\n  a.innerRadius = a.y0, delete a.y0;\n  a.outerRadius = a.y1, delete a.y1;\n  a.lineStartAngle = function() { return lineRadial(x0()); }, delete a.lineX0;\n  a.lineEndAngle = function() { return lineRadial(x1()); }, delete a.lineX1;\n  a.lineInnerRadius = function() { return lineRadial(y0()); }, delete a.lineY0;\n  a.lineOuterRadius = function() { return lineRadial(y1()); }, delete a.lineY1;\n\n  a.curve = function(_) {\n    return arguments.length ? c(curveRadial(_)) : c()._curve;\n  };\n\n  return a;\n}\n","export default function(x, y) {\n  return [(y = +y) * Math.cos(x -= Math.PI / 2), y * Math.sin(x)];\n}\n","export var slice = Array.prototype.slice;\n","import {path} from \"d3-path\";\nimport {slice} from \"../array.js\";\nimport constant from \"../constant.js\";\nimport {x as pointX, y as pointY} from \"../point.js\";\nimport pointRadial from \"../pointRadial.js\";\n\nfunction linkSource(d) {\n  return d.source;\n}\n\nfunction linkTarget(d) {\n  return d.target;\n}\n\nfunction link(curve) {\n  var source = linkSource,\n      target = linkTarget,\n      x = pointX,\n      y = pointY,\n      context = null;\n\n  function link() {\n    var buffer, argv = slice.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);\n    if (!context) context = buffer = path();\n    curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  link.source = function(_) {\n    return arguments.length ? (source = _, link) : source;\n  };\n\n  link.target = function(_) {\n    return arguments.length ? (target = _, link) : target;\n  };\n\n  link.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), link) : x;\n  };\n\n  link.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), link) : y;\n  };\n\n  link.context = function(_) {\n    return arguments.length ? ((context = _ == null ? null : _), link) : context;\n  };\n\n  return link;\n}\n\nfunction curveHorizontal(context, x0, y0, x1, y1) {\n  context.moveTo(x0, y0);\n  context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);\n}\n\nfunction curveVertical(context, x0, y0, x1, y1) {\n  context.moveTo(x0, y0);\n  context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);\n}\n\nfunction curveRadial(context, x0, y0, x1, y1) {\n  var p0 = pointRadial(x0, y0),\n      p1 = pointRadial(x0, y0 = (y0 + y1) / 2),\n      p2 = pointRadial(x1, y0),\n      p3 = pointRadial(x1, y1);\n  context.moveTo(p0[0], p0[1]);\n  context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);\n}\n\nexport function linkHorizontal() {\n  return link(curveHorizontal);\n}\n\nexport function linkVertical() {\n  return link(curveVertical);\n}\n\nexport function linkRadial() {\n  var l = link(curveRadial);\n  l.angle = l.x, delete l.x;\n  l.radius = l.y, delete l.y;\n  return l;\n}\n","import {pi, tau} from \"../math.js\";\n\nexport default {\n  draw: function(context, size) {\n    var r = Math.sqrt(size / pi);\n    context.moveTo(r, 0);\n    context.arc(0, 0, r, 0, tau);\n  }\n};\n","export default {\n  draw: function(context, size) {\n    var r = Math.sqrt(size / 5) / 2;\n    context.moveTo(-3 * r, -r);\n    context.lineTo(-r, -r);\n    context.lineTo(-r, -3 * r);\n    context.lineTo(r, -3 * r);\n    context.lineTo(r, -r);\n    context.lineTo(3 * r, -r);\n    context.lineTo(3 * r, r);\n    context.lineTo(r, r);\n    context.lineTo(r, 3 * r);\n    context.lineTo(-r, 3 * r);\n    context.lineTo(-r, r);\n    context.lineTo(-3 * r, r);\n    context.closePath();\n  }\n};\n","var tan30 = Math.sqrt(1 / 3),\n    tan30_2 = tan30 * 2;\n\nexport default {\n  draw: function(context, size) {\n    var y = Math.sqrt(size / tan30_2),\n        x = y * tan30;\n    context.moveTo(0, -y);\n    context.lineTo(x, 0);\n    context.lineTo(0, y);\n    context.lineTo(-x, 0);\n    context.closePath();\n  }\n};\n","import {pi, tau} from \"../math.js\";\n\nvar ka = 0.89081309152928522810,\n    kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n    kx = Math.sin(tau / 10) * kr,\n    ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n  draw: function(context, size) {\n    var r = Math.sqrt(size * ka),\n        x = kx * r,\n        y = ky * r;\n    context.moveTo(0, -r);\n    context.lineTo(x, y);\n    for (var i = 1; i < 5; ++i) {\n      var a = tau * i / 5,\n          c = Math.cos(a),\n          s = Math.sin(a);\n      context.lineTo(s * r, -c * r);\n      context.lineTo(c * x - s * y, s * x + c * y);\n    }\n    context.closePath();\n  }\n};\n","export default {\n  draw: function(context, size) {\n    var w = Math.sqrt(size),\n        x = -w / 2;\n    context.rect(x, x, w, w);\n  }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n  draw: function(context, size) {\n    var y = -Math.sqrt(size / (sqrt3 * 3));\n    context.moveTo(0, y * 2);\n    context.lineTo(-sqrt3 * y, -y);\n    context.lineTo(sqrt3 * y, -y);\n    context.closePath();\n  }\n};\n","var c = -0.5,\n    s = Math.sqrt(3) / 2,\n    k = 1 / Math.sqrt(12),\n    a = (k / 2 + 1) * 3;\n\nexport default {\n  draw: function(context, size) {\n    var r = Math.sqrt(size / a),\n        x0 = r / 2,\n        y0 = r * k,\n        x1 = x0,\n        y1 = r * k + r,\n        x2 = -x1,\n        y2 = y1;\n    context.moveTo(x0, y0);\n    context.lineTo(x1, y1);\n    context.lineTo(x2, y2);\n    context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n    context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n    context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n    context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n    context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n    context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n    context.closePath();\n  }\n};\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport star from \"./symbol/star.js\";\nimport square from \"./symbol/square.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport wye from \"./symbol/wye.js\";\nimport constant from \"./constant.js\";\n\nexport var symbols = [\n  circle,\n  cross,\n  diamond,\n  square,\n  star,\n  triangle,\n  wye\n];\n\nexport default function() {\n  var type = constant(circle),\n      size = constant(64),\n      context = null;\n\n  function symbol() {\n    var buffer;\n    if (!context) context = buffer = path();\n    type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  symbol.type = function(_) {\n    return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n  };\n\n  symbol.size = function(_) {\n    return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n  };\n\n  symbol.context = function(_) {\n    return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n  };\n\n  return symbol;\n}\n","export default function() {}\n","export function point(that, x, y) {\n  that._context.bezierCurveTo(\n    (2 * that._x0 + that._x1) / 3,\n    (2 * that._y0 + that._y1) / 3,\n    (that._x0 + 2 * that._x1) / 3,\n    (that._y0 + 2 * that._y1) / 3,\n    (that._x0 + 4 * that._x1 + x) / 6,\n    (that._y0 + 4 * that._y1 + y) / 6\n  );\n}\n\nexport function Basis(context) {\n  this._context = context;\n}\n\nBasis.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 3: point(this, this._x1, this._y1); // proceed\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new Basis(context);\n}\n","import noop from \"../noop.js\";\nimport {point} from \"./basis.js\";\n\nfunction BasisClosed(context) {\n  this._context = context;\n}\n\nBasisClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x2, this._y2);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n        this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x2, this._y2);\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n      case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n      case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new BasisClosed(context);\n}\n","import {point} from \"./basis.js\";\n\nfunction BasisOpen(context) {\n  this._context = context;\n}\n\nBasisOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n      case 3: this._point = 4; // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new BasisOpen(context);\n}\n","import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n  this._basis = new Basis(context);\n  this._beta = beta;\n}\n\nBundle.prototype = {\n  lineStart: function() {\n    this._x = [];\n    this._y = [];\n    this._basis.lineStart();\n  },\n  lineEnd: function() {\n    var x = this._x,\n        y = this._y,\n        j = x.length - 1;\n\n    if (j > 0) {\n      var x0 = x[0],\n          y0 = y[0],\n          dx = x[j] - x0,\n          dy = y[j] - y0,\n          i = -1,\n          t;\n\n      while (++i <= j) {\n        t = i / j;\n        this._basis.point(\n          this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n          this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n        );\n      }\n    }\n\n    this._x = this._y = null;\n    this._basis.lineEnd();\n  },\n  point: function(x, y) {\n    this._x.push(+x);\n    this._y.push(+y);\n  }\n};\n\nexport default (function custom(beta) {\n\n  function bundle(context) {\n    return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n  }\n\n  bundle.beta = function(beta) {\n    return custom(+beta);\n  };\n\n  return bundle;\n})(0.85);\n","export function point(that, x, y) {\n  that._context.bezierCurveTo(\n    that._x1 + that._k * (that._x2 - that._x0),\n    that._y1 + that._k * (that._y2 - that._y0),\n    that._x2 + that._k * (that._x1 - x),\n    that._y2 + that._k * (that._y1 - y),\n    that._x2,\n    that._y2\n  );\n}\n\nexport function Cardinal(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x2, this._y2); break;\n      case 3: point(this, this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n      case 2: this._point = 3; // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new Cardinal(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import noop from \"../noop.js\";\nimport {point} from \"./cardinal.js\";\n\nexport function CardinalClosed(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.lineTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        this.point(this._x5, this._y5);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new CardinalClosed(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import {point} from \"./cardinal.js\";\n\nexport function CardinalOpen(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n      case 3: this._point = 4; // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new CardinalOpen(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n  var x1 = that._x1,\n      y1 = that._y1,\n      x2 = that._x2,\n      y2 = that._y2;\n\n  if (that._l01_a > epsilon) {\n    var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n        n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n    x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n    y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n  }\n\n  if (that._l23_a > epsilon) {\n    var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n        m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n    x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n    y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n  }\n\n  that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x2, this._y2); break;\n      case 3: this.point(this._x2, this._y2); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; // proceed\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed.js\";\nimport noop from \"../noop.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomClosed(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.lineTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        this.point(this._x5, this._y5);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen.js\";\nimport {point} from \"./catmullRom.js\";\n\nfunction CatmullRomOpen(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n      case 3: this._point = 4; // proceed\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","import noop from \"../noop.js\";\n\nfunction LinearClosed(context) {\n  this._context = context;\n}\n\nLinearClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._point) this._context.closePath();\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    if (this._point) this._context.lineTo(x, y);\n    else this._point = 1, this._context.moveTo(x, y);\n  }\n};\n\nexport default function(context) {\n  return new LinearClosed(context);\n}\n","function sign(x) {\n  return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n  var h0 = that._x1 - that._x0,\n      h1 = x2 - that._x1,\n      s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n      s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n      p = (s0 * h1 + s1 * h0) / (h0 + h1);\n  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n  var h = that._x1 - that._x0;\n  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n  var x0 = that._x0,\n      y0 = that._y0,\n      x1 = that._x1,\n      y1 = that._y1,\n      dx = (x1 - x0) / 3;\n  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n  this._context = context;\n}\n\nMonotoneX.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 =\n    this._t0 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n      case 3: point(this, this._t0, slope2(this, this._t0)); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    var t1 = NaN;\n\n    x = +x, y = +y;\n    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n      default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n    }\n\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n    this._t0 = t1;\n  }\n}\n\nfunction MonotoneY(context) {\n  this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n  MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n  this._context = context;\n}\n\nReflectContext.prototype = {\n  moveTo: function(x, y) { this._context.moveTo(y, x); },\n  closePath: function() { this._context.closePath(); },\n  lineTo: function(x, y) { this._context.lineTo(y, x); },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n  return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n  return new MonotoneY(context);\n}\n","function Natural(context) {\n  this._context = context;\n}\n\nNatural.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = [];\n    this._y = [];\n  },\n  lineEnd: function() {\n    var x = this._x,\n        y = this._y,\n        n = x.length;\n\n    if (n) {\n      this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n      if (n === 2) {\n        this._context.lineTo(x[1], y[1]);\n      } else {\n        var px = controlPoints(x),\n            py = controlPoints(y);\n        for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n          this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n        }\n      }\n    }\n\n    if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n    this._x = this._y = null;\n  },\n  point: function(x, y) {\n    this._x.push(+x);\n    this._y.push(+y);\n  }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n  var i,\n      n = x.length - 1,\n      m,\n      a = new Array(n),\n      b = new Array(n),\n      r = new Array(n);\n  a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n  for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n  a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n  for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n  a[n - 1] = r[n - 1] / b[n - 1];\n  for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n  b[n - 1] = (x[n] + a[n - 1]) / 2;\n  for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n  return [a, b];\n}\n\nexport default function(context) {\n  return new Natural(context);\n}\n","function Step(context, t) {\n  this._context = context;\n  this._t = t;\n}\n\nStep.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = this._y = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // proceed\n      default: {\n        if (this._t <= 0) {\n          this._context.lineTo(this._x, y);\n          this._context.lineTo(x, y);\n        } else {\n          var x1 = this._x * (1 - this._t) + x * this._t;\n          this._context.lineTo(x1, this._y);\n          this._context.lineTo(x1, y);\n        }\n        break;\n      }\n    }\n    this._x = x, this._y = y;\n  }\n};\n\nexport default function(context) {\n  return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n  return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n  return new Step(context, 1);\n}\n","export default function(series, order) {\n  if (!((n = series.length) > 1)) return;\n  for (var i = 1, j, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {\n    s0 = s1, s1 = series[order[i]];\n    for (j = 0; j < m; ++j) {\n      s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];\n    }\n  }\n}\n","export default function(series) {\n  var n = series.length, o = new Array(n);\n  while (--n >= 0) o[n] = n;\n  return o;\n}\n","import {slice} from \"./array.js\";\nimport constant from \"./constant.js\";\nimport offsetNone from \"./offset/none.js\";\nimport orderNone from \"./order/none.js\";\n\nfunction stackValue(d, key) {\n  return d[key];\n}\n\nexport default function() {\n  var keys = constant([]),\n      order = orderNone,\n      offset = offsetNone,\n      value = stackValue;\n\n  function stack(data) {\n    var kz = keys.apply(this, arguments),\n        i,\n        m = data.length,\n        n = kz.length,\n        sz = new Array(n),\n        oz;\n\n    for (i = 0; i < n; ++i) {\n      for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {\n        si[j] = sij = [0, +value(data[j], ki, j, data)];\n        sij.data = data[j];\n      }\n      si.key = ki;\n    }\n\n    for (i = 0, oz = order(sz); i < n; ++i) {\n      sz[oz[i]].index = i;\n    }\n\n    offset(sz, oz);\n    return sz;\n  }\n\n  stack.keys = function(_) {\n    return arguments.length ? (keys = typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : keys;\n  };\n\n  stack.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), stack) : value;\n  };\n\n  stack.order = function(_) {\n    return arguments.length ? (order = _ == null ? orderNone : typeof _ === \"function\" ? _ : constant(slice.call(_)), stack) : order;\n  };\n\n  stack.offset = function(_) {\n    return arguments.length ? (offset = _ == null ? offsetNone : _, stack) : offset;\n  };\n\n  return stack;\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {\n    for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;\n    if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;\n  }\n  none(series, order);\n}\n","export default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) {\n    for (yp = yn = 0, i = 0; i < n; ++i) {\n      if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) {\n        d[0] = yp, d[1] = yp += dy;\n      } else if (dy < 0) {\n        d[1] = yn, d[0] = yn += dy;\n      } else {\n        d[0] = 0, d[1] = dy;\n      }\n    }\n  }\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0)) return;\n  for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {\n    for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;\n    s0[j][1] += s0[j][0] = -y / 2;\n  }\n  none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series, order) {\n  if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;\n  for (var y = 0, j = 1, s0, m, n; j < m; ++j) {\n    for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {\n      var si = series[order[i]],\n          sij0 = si[j][1] || 0,\n          sij1 = si[j - 1][1] || 0,\n          s3 = (sij0 - sij1) / 2;\n      for (var k = 0; k < i; ++k) {\n        var sk = series[order[k]],\n            skj0 = sk[j][1] || 0,\n            skj1 = sk[j - 1][1] || 0;\n        s3 += skj0 - skj1;\n      }\n      s1 += sij0, s2 += s3 * sij0;\n    }\n    s0[j - 1][1] += s0[j - 1][0] = y;\n    if (s1) y -= s2 / s1;\n  }\n  s0[j - 1][1] += s0[j - 1][0] = y;\n  none(series, order);\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n  var peaks = series.map(peak);\n  return none(series).sort(function(a, b) { return peaks[a] - peaks[b]; });\n}\n\nfunction peak(series) {\n  var i = -1, j = 0, n = series.length, vi, vj = -Infinity;\n  while (++i < n) if ((vi = +series[i][1]) > vj) vj = vi, j = i;\n  return j;\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n  var sums = series.map(sum);\n  return none(series).sort(function(a, b) { return sums[a] - sums[b]; });\n}\n\nexport function sum(series) {\n  var s = 0, i = -1, n = series.length, v;\n  while (++i < n) if (v = +series[i][1]) s += v;\n  return s;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(series) {\n  return ascending(series).reverse();\n}\n","import appearance from \"./appearance.js\";\nimport {sum} from \"./ascending.js\";\n\nexport default function(series) {\n  var n = series.length,\n      i,\n      j,\n      sums = series.map(sum),\n      order = appearance(series),\n      top = 0,\n      bottom = 0,\n      tops = [],\n      bottoms = [];\n\n  for (i = 0; i < n; ++i) {\n    j = order[i];\n    if (top < bottom) {\n      top += sums[j];\n      tops.push(j);\n    } else {\n      bottom += sums[j];\n      bottoms.push(j);\n    }\n  }\n\n  return bottoms.reverse().concat(tops);\n}\n","import none from \"./none.js\";\n\nexport default function(series) {\n  return none(series).reverse();\n}\n","import {utcFormat} from \"./defaultLocale.js\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n  return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n    ? formatIsoNative\n    : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat.js\";\nimport {utcParse} from \"./defaultLocale.js\";\n\nfunction parseIsoNative(string) {\n  var date = new Date(string);\n  return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n    ? parseIsoNative\n    : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import {Timer, now} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer, total = delay;\n  if (delay == null) return t.restart(callback, delay, time), t;\n  delay = +delay, time = time == null ? now() : +time;\n  t.restart(function tick(elapsed) {\n    elapsed += total;\n    t.restart(tick, total += delay, time);\n    callback(elapsed);\n  }, delay, time);\n  return t;\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","export function x(d) {\n  return d[0];\n}\n\nexport function y(d) {\n  return d[1];\n}\n","function RedBlackTree() {\n  this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n  node.U = // parent node\n  node.C = // color - true for red, false for black\n  node.L = // left node\n  node.R = // right node\n  node.P = // previous node\n  node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n  constructor: RedBlackTree,\n\n  insert: function(after, node) {\n    var parent, grandpa, uncle;\n\n    if (after) {\n      node.P = after;\n      node.N = after.N;\n      if (after.N) after.N.P = node;\n      after.N = node;\n      if (after.R) {\n        after = after.R;\n        while (after.L) after = after.L;\n        after.L = node;\n      } else {\n        after.R = node;\n      }\n      parent = after;\n    } else if (this._) {\n      after = RedBlackFirst(this._);\n      node.P = null;\n      node.N = after;\n      after.P = after.L = node;\n      parent = after;\n    } else {\n      node.P = node.N = null;\n      this._ = node;\n      parent = null;\n    }\n    node.L = node.R = null;\n    node.U = parent;\n    node.C = true;\n\n    after = node;\n    while (parent && parent.C) {\n      grandpa = parent.U;\n      if (parent === grandpa.L) {\n        uncle = grandpa.R;\n        if (uncle && uncle.C) {\n          parent.C = uncle.C = false;\n          grandpa.C = true;\n          after = grandpa;\n        } else {\n          if (after === parent.R) {\n            RedBlackRotateLeft(this, parent);\n            after = parent;\n            parent = after.U;\n          }\n          parent.C = false;\n          grandpa.C = true;\n          RedBlackRotateRight(this, grandpa);\n        }\n      } else {\n        uncle = grandpa.L;\n        if (uncle && uncle.C) {\n          parent.C = uncle.C = false;\n          grandpa.C = true;\n          after = grandpa;\n        } else {\n          if (after === parent.L) {\n            RedBlackRotateRight(this, parent);\n            after = parent;\n            parent = after.U;\n          }\n          parent.C = false;\n          grandpa.C = true;\n          RedBlackRotateLeft(this, grandpa);\n        }\n      }\n      parent = after.U;\n    }\n    this._.C = false;\n  },\n\n  remove: function(node) {\n    if (node.N) node.N.P = node.P;\n    if (node.P) node.P.N = node.N;\n    node.N = node.P = null;\n\n    var parent = node.U,\n        sibling,\n        left = node.L,\n        right = node.R,\n        next,\n        red;\n\n    if (!left) next = right;\n    else if (!right) next = left;\n    else next = RedBlackFirst(right);\n\n    if (parent) {\n      if (parent.L === node) parent.L = next;\n      else parent.R = next;\n    } else {\n      this._ = next;\n    }\n\n    if (left && right) {\n      red = next.C;\n      next.C = node.C;\n      next.L = left;\n      left.U = next;\n      if (next !== right) {\n        parent = next.U;\n        next.U = node.U;\n        node = next.R;\n        parent.L = node;\n        next.R = right;\n        right.U = next;\n      } else {\n        next.U = parent;\n        parent = next;\n        node = next.R;\n      }\n    } else {\n      red = node.C;\n      node = next;\n    }\n\n    if (node) node.U = parent;\n    if (red) return;\n    if (node && node.C) { node.C = false; return; }\n\n    do {\n      if (node === this._) break;\n      if (node === parent.L) {\n        sibling = parent.R;\n        if (sibling.C) {\n          sibling.C = false;\n          parent.C = true;\n          RedBlackRotateLeft(this, parent);\n          sibling = parent.R;\n        }\n        if ((sibling.L && sibling.L.C)\n            || (sibling.R && sibling.R.C)) {\n          if (!sibling.R || !sibling.R.C) {\n            sibling.L.C = false;\n            sibling.C = true;\n            RedBlackRotateRight(this, sibling);\n            sibling = parent.R;\n          }\n          sibling.C = parent.C;\n          parent.C = sibling.R.C = false;\n          RedBlackRotateLeft(this, parent);\n          node = this._;\n          break;\n        }\n      } else {\n        sibling = parent.L;\n        if (sibling.C) {\n          sibling.C = false;\n          parent.C = true;\n          RedBlackRotateRight(this, parent);\n          sibling = parent.L;\n        }\n        if ((sibling.L && sibling.L.C)\n          || (sibling.R && sibling.R.C)) {\n          if (!sibling.L || !sibling.L.C) {\n            sibling.R.C = false;\n            sibling.C = true;\n            RedBlackRotateLeft(this, sibling);\n            sibling = parent.L;\n          }\n          sibling.C = parent.C;\n          parent.C = sibling.L.C = false;\n          RedBlackRotateRight(this, parent);\n          node = this._;\n          break;\n        }\n      }\n      sibling.C = true;\n      node = parent;\n      parent = parent.U;\n    } while (!node.C);\n\n    if (node) node.C = false;\n  }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n  var p = node,\n      q = node.R,\n      parent = p.U;\n\n  if (parent) {\n    if (parent.L === p) parent.L = q;\n    else parent.R = q;\n  } else {\n    tree._ = q;\n  }\n\n  q.U = parent;\n  p.U = q;\n  p.R = q.L;\n  if (p.R) p.R.U = p;\n  q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n  var p = node,\n      q = node.L,\n      parent = p.U;\n\n  if (parent) {\n    if (parent.L === p) parent.L = q;\n    else parent.R = q;\n  } else {\n    tree._ = q;\n  }\n\n  q.U = parent;\n  p.U = q;\n  p.L = q.R;\n  if (p.L) p.L.U = p;\n  q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n  while (node.L) node = node.L;\n  return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n  var edge = [null, null],\n      index = edges.push(edge) - 1;\n  edge.left = left;\n  edge.right = right;\n  if (v0) setEdgeEnd(edge, left, right, v0);\n  if (v1) setEdgeEnd(edge, right, left, v1);\n  cells[left.index].halfedges.push(index);\n  cells[right.index].halfedges.push(index);\n  return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n  var edge = [v0, v1];\n  edge.left = left;\n  return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n  if (!edge[0] && !edge[1]) {\n    edge[0] = vertex;\n    edge.left = left;\n    edge.right = right;\n  } else if (edge.left === right) {\n    edge[1] = vertex;\n  } else {\n    edge[0] = vertex;\n  }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n  var a = edge[0],\n      b = edge[1],\n      ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\n  r = x0 - ax;\n  if (!dx && r > 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dx > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = x1 - ax;\n  if (!dx && r < 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dx > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  r = y0 - ay;\n  if (!dy && r > 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dy > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = y1 - ay;\n  if (!dy && r < 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dy > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n  if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n  if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n  return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n  var v1 = edge[1];\n  if (v1) return true;\n\n  var v0 = edge[0],\n      left = edge.left,\n      right = edge.right,\n      lx = left[0],\n      ly = left[1],\n      rx = right[0],\n      ry = right[1],\n      fx = (lx + rx) / 2,\n      fy = (ly + ry) / 2,\n      fm,\n      fb;\n\n  if (ry === ly) {\n    if (fx < x0 || fx >= x1) return;\n    if (lx > rx) {\n      if (!v0) v0 = [fx, y0];\n      else if (v0[1] >= y1) return;\n      v1 = [fx, y1];\n    } else {\n      if (!v0) v0 = [fx, y1];\n      else if (v0[1] < y0) return;\n      v1 = [fx, y0];\n    }\n  } else {\n    fm = (lx - rx) / (ry - ly);\n    fb = fy - fm * fx;\n    if (fm < -1 || fm > 1) {\n      if (lx > rx) {\n        if (!v0) v0 = [(y0 - fb) / fm, y0];\n        else if (v0[1] >= y1) return;\n        v1 = [(y1 - fb) / fm, y1];\n      } else {\n        if (!v0) v0 = [(y1 - fb) / fm, y1];\n        else if (v0[1] < y0) return;\n        v1 = [(y0 - fb) / fm, y0];\n      }\n    } else {\n      if (ly < ry) {\n        if (!v0) v0 = [x0, fm * x0 + fb];\n        else if (v0[0] >= x1) return;\n        v1 = [x1, fm * x1 + fb];\n      } else {\n        if (!v0) v0 = [x1, fm * x1 + fb];\n        else if (v0[0] < x0) return;\n        v1 = [x0, fm * x0 + fb];\n      }\n    }\n  }\n\n  edge[0] = v0;\n  edge[1] = v1;\n  return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n  var i = edges.length,\n      edge;\n\n  while (i--) {\n    if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n        || !clipEdge(edge, x0, y0, x1, y1)\n        || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n            || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n      delete edges[i];\n    }\n  }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n  return cells[site.index] = {\n    site: site,\n    halfedges: []\n  };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n  var site = cell.site,\n      va = edge.left,\n      vb = edge.right;\n  if (site === vb) vb = va, va = site;\n  if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n  if (site === va) va = edge[1], vb = edge[0];\n  else va = edge[0], vb = edge[1];\n  return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n  return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n  return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n  for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n    if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n      var index = new Array(m),\n          array = new Array(m);\n      for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n      index.sort(function(i, j) { return array[j] - array[i]; });\n      for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n      for (j = 0; j < m; ++j) halfedges[j] = array[j];\n    }\n  }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n  var nCells = cells.length,\n      iCell,\n      cell,\n      site,\n      iHalfedge,\n      halfedges,\n      nHalfedges,\n      start,\n      startX,\n      startY,\n      end,\n      endX,\n      endY,\n      cover = true;\n\n  for (iCell = 0; iCell < nCells; ++iCell) {\n    if (cell = cells[iCell]) {\n      site = cell.site;\n      halfedges = cell.halfedges;\n      iHalfedge = halfedges.length;\n\n      // Remove any dangling clipped edges.\n      while (iHalfedge--) {\n        if (!edges[halfedges[iHalfedge]]) {\n          halfedges.splice(iHalfedge, 1);\n        }\n      }\n\n      // Insert any border edges as necessary.\n      iHalfedge = 0, nHalfedges = halfedges.length;\n      while (iHalfedge < nHalfedges) {\n        end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n        start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n        if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n          halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n              Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n              : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n              : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n              : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n              : null)) - 1);\n          ++nHalfedges;\n        }\n      }\n\n      if (nHalfedges) cover = false;\n    }\n  }\n\n  // If there weren’t any edges, have the closest site cover the extent.\n  // It doesn’t matter which corner of the extent we measure!\n  if (cover) {\n    var dx, dy, d2, dc = Infinity;\n\n    for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n      if (cell = cells[iCell]) {\n        site = cell.site;\n        dx = site[0] - x0;\n        dy = site[1] - y0;\n        d2 = dx * dx + dy * dy;\n        if (d2 < dc) dc = d2, cover = cell;\n      }\n    }\n\n    if (cover) {\n      var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n      cover.halfedges.push(\n        edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n        edges.push(createBorderEdge(site, v01, v11)) - 1,\n        edges.push(createBorderEdge(site, v11, v10)) - 1,\n        edges.push(createBorderEdge(site, v10, v00)) - 1\n      );\n    }\n  }\n\n  // Lastly delete any cells with no edges; these were entirely clipped.\n  for (iCell = 0; iCell < nCells; ++iCell) {\n    if (cell = cells[iCell]) {\n      if (!cell.halfedges.length) {\n        delete cells[iCell];\n      }\n    }\n  }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n  RedBlackNode(this);\n  this.x =\n  this.y =\n  this.arc =\n  this.site =\n  this.cy = null;\n}\n\nexport function attachCircle(arc) {\n  var lArc = arc.P,\n      rArc = arc.N;\n\n  if (!lArc || !rArc) return;\n\n  var lSite = lArc.site,\n      cSite = arc.site,\n      rSite = rArc.site;\n\n  if (lSite === rSite) return;\n\n  var bx = cSite[0],\n      by = cSite[1],\n      ax = lSite[0] - bx,\n      ay = lSite[1] - by,\n      cx = rSite[0] - bx,\n      cy = rSite[1] - by;\n\n  var d = 2 * (ax * cy - ay * cx);\n  if (d >= -epsilon2) return;\n\n  var ha = ax * ax + ay * ay,\n      hc = cx * cx + cy * cy,\n      x = (cy * ha - ay * hc) / d,\n      y = (ax * hc - cx * ha) / d;\n\n  var circle = circlePool.pop() || new Circle;\n  circle.arc = arc;\n  circle.site = cSite;\n  circle.x = x + bx;\n  circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n  arc.circle = circle;\n\n  var before = null,\n      node = circles._;\n\n  while (node) {\n    if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n      if (node.L) node = node.L;\n      else { before = node.P; break; }\n    } else {\n      if (node.R) node = node.R;\n      else { before = node; break; }\n    }\n  }\n\n  circles.insert(before, circle);\n  if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n  var circle = arc.circle;\n  if (circle) {\n    if (!circle.P) firstCircle = circle.N;\n    circles.remove(circle);\n    circlePool.push(circle);\n    RedBlackNode(circle);\n    arc.circle = null;\n  }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n  RedBlackNode(this);\n  this.edge =\n  this.site =\n  this.circle = null;\n}\n\nfunction createBeach(site) {\n  var beach = beachPool.pop() || new Beach;\n  beach.site = site;\n  return beach;\n}\n\nfunction detachBeach(beach) {\n  detachCircle(beach);\n  beaches.remove(beach);\n  beachPool.push(beach);\n  RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n  var circle = beach.circle,\n      x = circle.x,\n      y = circle.cy,\n      vertex = [x, y],\n      previous = beach.P,\n      next = beach.N,\n      disappearing = [beach];\n\n  detachBeach(beach);\n\n  var lArc = previous;\n  while (lArc.circle\n      && Math.abs(x - lArc.circle.x) < epsilon\n      && Math.abs(y - lArc.circle.cy) < epsilon) {\n    previous = lArc.P;\n    disappearing.unshift(lArc);\n    detachBeach(lArc);\n    lArc = previous;\n  }\n\n  disappearing.unshift(lArc);\n  detachCircle(lArc);\n\n  var rArc = next;\n  while (rArc.circle\n      && Math.abs(x - rArc.circle.x) < epsilon\n      && Math.abs(y - rArc.circle.cy) < epsilon) {\n    next = rArc.N;\n    disappearing.push(rArc);\n    detachBeach(rArc);\n    rArc = next;\n  }\n\n  disappearing.push(rArc);\n  detachCircle(rArc);\n\n  var nArcs = disappearing.length,\n      iArc;\n  for (iArc = 1; iArc < nArcs; ++iArc) {\n    rArc = disappearing[iArc];\n    lArc = disappearing[iArc - 1];\n    setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n  }\n\n  lArc = disappearing[0];\n  rArc = disappearing[nArcs - 1];\n  rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n  attachCircle(lArc);\n  attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n  var x = site[0],\n      directrix = site[1],\n      lArc,\n      rArc,\n      dxl,\n      dxr,\n      node = beaches._;\n\n  while (node) {\n    dxl = leftBreakPoint(node, directrix) - x;\n    if (dxl > epsilon) node = node.L; else {\n      dxr = x - rightBreakPoint(node, directrix);\n      if (dxr > epsilon) {\n        if (!node.R) {\n          lArc = node;\n          break;\n        }\n        node = node.R;\n      } else {\n        if (dxl > -epsilon) {\n          lArc = node.P;\n          rArc = node;\n        } else if (dxr > -epsilon) {\n          lArc = node;\n          rArc = node.N;\n        } else {\n          lArc = rArc = node;\n        }\n        break;\n      }\n    }\n  }\n\n  createCell(site);\n  var newArc = createBeach(site);\n  beaches.insert(lArc, newArc);\n\n  if (!lArc && !rArc) return;\n\n  if (lArc === rArc) {\n    detachCircle(lArc);\n    rArc = createBeach(lArc.site);\n    beaches.insert(newArc, rArc);\n    newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n    attachCircle(lArc);\n    attachCircle(rArc);\n    return;\n  }\n\n  if (!rArc) { // && lArc\n    newArc.edge = createEdge(lArc.site, newArc.site);\n    return;\n  }\n\n  // else lArc !== rArc\n  detachCircle(lArc);\n  detachCircle(rArc);\n\n  var lSite = lArc.site,\n      ax = lSite[0],\n      ay = lSite[1],\n      bx = site[0] - ax,\n      by = site[1] - ay,\n      rSite = rArc.site,\n      cx = rSite[0] - ax,\n      cy = rSite[1] - ay,\n      d = 2 * (bx * cy - by * cx),\n      hb = bx * bx + by * by,\n      hc = cx * cx + cy * cy,\n      vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n  setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n  newArc.edge = createEdge(lSite, site, null, vertex);\n  rArc.edge = createEdge(site, rSite, null, vertex);\n  attachCircle(lArc);\n  attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n  var site = arc.site,\n      rfocx = site[0],\n      rfocy = site[1],\n      pby2 = rfocy - directrix;\n\n  if (!pby2) return rfocx;\n\n  var lArc = arc.P;\n  if (!lArc) return -Infinity;\n\n  site = lArc.site;\n  var lfocx = site[0],\n      lfocy = site[1],\n      plby2 = lfocy - directrix;\n\n  if (!plby2) return lfocx;\n\n  var hl = lfocx - rfocx,\n      aby2 = 1 / pby2 - 1 / plby2,\n      b = hl / plby2;\n\n  if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n  return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n  var rArc = arc.N;\n  if (rArc) return leftBreakPoint(rArc, directrix);\n  var site = arc.site;\n  return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n  return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n  return b[1] - a[1]\n      || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n  var site = sites.sort(lexicographic).pop(),\n      x,\n      y,\n      circle;\n\n  edges = [];\n  cells = new Array(sites.length);\n  beaches = new RedBlackTree;\n  circles = new RedBlackTree;\n\n  while (true) {\n    circle = firstCircle;\n    if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n      if (site[0] !== x || site[1] !== y) {\n        addBeach(site);\n        x = site[0], y = site[1];\n      }\n      site = sites.pop();\n    } else if (circle) {\n      removeBeach(circle.arc);\n    } else {\n      break;\n    }\n  }\n\n  sortCellHalfedges();\n\n  if (extent) {\n    var x0 = +extent[0][0],\n        y0 = +extent[0][1],\n        x1 = +extent[1][0],\n        y1 = +extent[1][1];\n    clipEdges(x0, y0, x1, y1);\n    clipCells(x0, y0, x1, y1);\n  }\n\n  this.edges = edges;\n  this.cells = cells;\n\n  beaches =\n  circles =\n  edges =\n  cells = null;\n}\n\nDiagram.prototype = {\n  constructor: Diagram,\n\n  polygons: function() {\n    var edges = this.edges;\n\n    return this.cells.map(function(cell) {\n      var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n      polygon.data = cell.site.data;\n      return polygon;\n    });\n  },\n\n  triangles: function() {\n    var triangles = [],\n        edges = this.edges;\n\n    this.cells.forEach(function(cell, i) {\n      if (!(m = (halfedges = cell.halfedges).length)) return;\n      var site = cell.site,\n          halfedges,\n          j = -1,\n          m,\n          s0,\n          e1 = edges[halfedges[m - 1]],\n          s1 = e1.left === site ? e1.right : e1.left;\n\n      while (++j < m) {\n        s0 = s1;\n        e1 = edges[halfedges[j]];\n        s1 = e1.left === site ? e1.right : e1.left;\n        if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n          triangles.push([site.data, s0.data, s1.data]);\n        }\n      }\n    });\n\n    return triangles;\n  },\n\n  links: function() {\n    return this.edges.filter(function(edge) {\n      return edge.right;\n    }).map(function(edge) {\n      return {\n        source: edge.left.data,\n        target: edge.right.data\n      };\n    });\n  },\n\n  find: function(x, y, radius) {\n    var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n    // Use the previously-found cell, or start with an arbitrary one.\n    while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n    var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n    // Traverse the half-edges to find a closer cell, if any.\n    do {\n      cell = that.cells[i0 = i1], i1 = null;\n      cell.halfedges.forEach(function(e) {\n        var edge = that.edges[e], v = edge.left;\n        if ((v === cell.site || !v) && !(v = edge.right)) return;\n        var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n        if (v2 < d2) d2 = v2, i1 = v.index;\n      });\n    } while (i1 !== null);\n\n    that._found = i0;\n\n    return radius == null || d2 <= radius * radius ? cell.site : null;\n  }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n  var x = pointX,\n      y = pointY,\n      extent = null;\n\n  function voronoi(data) {\n    return new Diagram(data.map(function(d, i) {\n      var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n      s.index = i;\n      s.data = d;\n      return s;\n    }), extent);\n  }\n\n  voronoi.polygons = function(data) {\n    return voronoi(data).polygons();\n  };\n\n  voronoi.links = function(data) {\n    return voronoi(data).links();\n  };\n\n  voronoi.triangles = function(data) {\n    return voronoi(data).triangles();\n  };\n\n  voronoi.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n  };\n\n  voronoi.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n  };\n\n  voronoi.extent = function(_) {\n    return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n  };\n\n  voronoi.size = function(_) {\n    return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n  };\n\n  return voronoi;\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function ZoomEvent(target, type, transform) {\n  this.target = target;\n  this.type = type;\n  this.transform = transform;\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","import {event} from \"d3-selection\";\n\nexport function nopropagation() {\n  event.stopImmediatePropagation();\n}\n\nexport default function() {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\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 e = this;\n  if (e instanceof SVGElement) {\n    e = e.ownerSVGElement || e;\n    if (e.hasAttribute(\"viewBox\")) {\n      e = e.viewBox.baseVal;\n      return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n    }\n    return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n  }\n  return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n  return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta() {\n  return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002);\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n  var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n      dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n      dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n      dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n  return transform.translate(\n    dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n    dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n  );\n}\n\nexport default function() {\n  var filter = defaultFilter,\n      extent = defaultExtent,\n      constrain = defaultConstrain,\n      wheelDelta = defaultWheelDelta,\n      touchable = defaultTouchable,\n      scaleExtent = [0, Infinity],\n      translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n      duration = 250,\n      interpolate = interpolateZoom,\n      listeners = dispatch(\"start\", \"zoom\", \"end\"),\n      touchstarting,\n      touchending,\n      touchDelay = 500,\n      wheelDelay = 150,\n      clickDistance2 = 0;\n\n  function zoom(selection) {\n    selection\n        .property(\"__zoom\", defaultTransform)\n        .on(\"wheel.zoom\", wheeled)\n        .on(\"mousedown.zoom\", mousedowned)\n        .on(\"dblclick.zoom\", dblclicked)\n      .filter(touchable)\n        .on(\"touchstart.zoom\", touchstarted)\n        .on(\"touchmove.zoom\", touchmoved)\n        .on(\"touchend.zoom touchcancel.zoom\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  zoom.transform = function(collection, transform, point) {\n    var selection = collection.selection ? collection.selection() : collection;\n    selection.property(\"__zoom\", defaultTransform);\n    if (collection !== selection) {\n      schedule(collection, transform, point);\n    } else {\n      selection.interrupt().each(function() {\n        gesture(this, arguments)\n            .start()\n            .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n            .end();\n      });\n    }\n  };\n\n  zoom.scaleBy = function(selection, k, p) {\n    zoom.scaleTo(selection, function() {\n      var k0 = this.__zoom.k,\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return k0 * k1;\n    }, p);\n  };\n\n  zoom.scaleTo = function(selection, k, p) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t0 = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n          p1 = t0.invert(p0),\n          k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n      return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n    }, p);\n  };\n\n  zoom.translateBy = function(selection, x, y) {\n    zoom.transform(selection, function() {\n      return constrain(this.__zoom.translate(\n        typeof x === \"function\" ? x.apply(this, arguments) : x,\n        typeof y === \"function\" ? y.apply(this, arguments) : y\n      ), extent.apply(this, arguments), translateExtent);\n    });\n  };\n\n  zoom.translateTo = function(selection, x, y, p) {\n    zoom.transform(selection, function() {\n      var e = extent.apply(this, arguments),\n          t = this.__zoom,\n          p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n      return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n        typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n        typeof y === \"function\" ? -y.apply(this, arguments) : -y\n      ), e, translateExtent);\n    }, p);\n  };\n\n  function scale(transform, k) {\n    k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n    return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n  }\n\n  function translate(transform, p0, p1) {\n    var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n    return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n  }\n\n  function centroid(extent) {\n    return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n  }\n\n  function schedule(transition, transform, point) {\n    transition\n        .on(\"start.zoom\", function() { gesture(this, arguments).start(); })\n        .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).end(); })\n        .tween(\"zoom\", function() {\n          var that = this,\n              args = arguments,\n              g = gesture(that, args),\n              e = extent.apply(that, args),\n              p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n              w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n              a = that.__zoom,\n              b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n              i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n          return function(t) {\n            if (t === 1) t = b; // Avoid rounding error on end.\n            else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n            g.zoom(null, t);\n          };\n        });\n  }\n\n  function gesture(that, args, clean) {\n    return (!clean && that.__zooming) || new Gesture(that, args);\n  }\n\n  function Gesture(that, args) {\n    this.that = that;\n    this.args = args;\n    this.active = 0;\n    this.extent = extent.apply(that, args);\n    this.taps = 0;\n  }\n\n  Gesture.prototype = {\n    start: function() {\n      if (++this.active === 1) {\n        this.that.__zooming = this;\n        this.emit(\"start\");\n      }\n      return this;\n    },\n    zoom: function(key, transform) {\n      if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n      if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n      if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n      this.that.__zoom = transform;\n      this.emit(\"zoom\");\n      return this;\n    },\n    end: function() {\n      if (--this.active === 0) {\n        delete this.that.__zooming;\n        this.emit(\"end\");\n      }\n      return this;\n    },\n    emit: function(type) {\n      customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);\n    }\n  };\n\n  function wheeled() {\n    if (!filter.apply(this, arguments)) return;\n    var g = gesture(this, arguments),\n        t = this.__zoom,\n        k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n        p = mouse(this);\n\n    // If the mouse is in the same location as before, reuse it.\n    // If there were recent wheel events, reset the wheel idle timeout.\n    if (g.wheel) {\n      if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n        g.mouse[1] = t.invert(g.mouse[0] = p);\n      }\n      clearTimeout(g.wheel);\n    }\n\n    // If this wheel event won’t trigger a transform change, ignore it.\n    else if (t.k === k) return;\n\n    // Otherwise, capture the mouse point and location at the start.\n    else {\n      g.mouse = [p, t.invert(p)];\n      interrupt(this);\n      g.start();\n    }\n\n    noevent();\n    g.wheel = setTimeout(wheelidled, wheelDelay);\n    g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n    function wheelidled() {\n      g.wheel = null;\n      g.end();\n    }\n  }\n\n  function mousedowned() {\n    if (touchending || !filter.apply(this, arguments)) return;\n    var g = gesture(this, arguments, true),\n        v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n        p = mouse(this),\n        x0 = event.clientX,\n        y0 = event.clientY;\n\n    dragDisable(event.view);\n    nopropagation();\n    g.mouse = [p, this.__zoom.invert(p)];\n    interrupt(this);\n    g.start();\n\n    function mousemoved() {\n      noevent();\n      if (!g.moved) {\n        var dx = event.clientX - x0, dy = event.clientY - y0;\n        g.moved = dx * dx + dy * dy > clickDistance2;\n      }\n      g.zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent, translateExtent));\n    }\n\n    function mouseupped() {\n      v.on(\"mousemove.zoom mouseup.zoom\", null);\n      dragEnable(event.view, g.moved);\n      noevent();\n      g.end();\n    }\n  }\n\n  function dblclicked() {\n    if (!filter.apply(this, arguments)) return;\n    var t0 = this.__zoom,\n        p0 = mouse(this),\n        p1 = t0.invert(p0),\n        k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n        t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments), translateExtent);\n\n    noevent();\n    if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0);\n    else select(this).call(zoom.transform, t1);\n  }\n\n  function touchstarted() {\n    if (!filter.apply(this, arguments)) return;\n    var touches = event.touches,\n        n = touches.length,\n        g = gesture(this, arguments, event.changedTouches.length === n),\n        started, i, t, p;\n\n    nopropagation();\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = touch(this, touches, t.identifier);\n      p = [p, this.__zoom.invert(p), t.identifier];\n      if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n      else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n    }\n\n    if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n    if (started) {\n      if (g.taps < 2) touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n      interrupt(this);\n      g.start();\n    }\n  }\n\n  function touchmoved() {\n    if (!this.__zooming) return;\n    var g = gesture(this, arguments),\n        touches = event.changedTouches,\n        n = touches.length, i, t, p, l;\n\n    noevent();\n    if (touchstarting) touchstarting = clearTimeout(touchstarting);\n    g.taps = 0;\n    for (i = 0; i < n; ++i) {\n      t = touches[i], p = touch(this, touches, t.identifier);\n      if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n      else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n    }\n    t = g.that.__zoom;\n    if (g.touch1) {\n      var p0 = g.touch0[0], l0 = g.touch0[1],\n          p1 = g.touch1[0], l1 = g.touch1[1],\n          dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n          dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n      t = scale(t, Math.sqrt(dp / dl));\n      p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n      l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n    }\n    else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n    else return;\n    g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n  }\n\n  function touchended() {\n    if (!this.__zooming) return;\n    var g = gesture(this, arguments),\n        touches = event.changedTouches,\n        n = touches.length, i, t;\n\n    nopropagation();\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, touchDelay);\n    for (i = 0; i < n; ++i) {\n      t = touches[i];\n      if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n      else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n    }\n    if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n    if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n    else {\n      g.end();\n      // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n      if (g.taps === 2) {\n        var p = select(this).on(\"dblclick.zoom\");\n        if (p) p.apply(this, arguments);\n      }\n    }\n  }\n\n  zoom.wheelDelta = function(_) {\n    return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n  };\n\n  zoom.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n  };\n\n  zoom.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n  };\n\n  zoom.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n  };\n\n  zoom.scaleExtent = function(_) {\n    return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n  };\n\n  zoom.translateExtent = function(_) {\n    return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n  };\n\n  zoom.constrain = function(_) {\n    return arguments.length ? (constrain = _, zoom) : constrain;\n  };\n\n  zoom.duration = function(_) {\n    return arguments.length ? (duration = +_, zoom) : duration;\n  };\n\n  zoom.interpolate = function(_) {\n    return arguments.length ? (interpolate = _, zoom) : interpolate;\n  };\n\n  zoom.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? zoom : value;\n  };\n\n  zoom.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n  };\n\n  return zoom;\n}\n","import unsupportedIterableToArray from \"./unsupportedIterableToArray\";\nexport default function _createForOfIteratorHelper(o) {\n  if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n    if (Array.isArray(o) || (o = unsupportedIterableToArray(o))) {\n      var i = 0;\n\n      var F = function F() {};\n\n      return {\n        s: F,\n        n: function n() {\n          if (i >= o.length) return {\n            done: true\n          };\n          return {\n            done: false,\n            value: o[i++]\n          };\n        },\n        e: function e(_e) {\n          throw _e;\n        },\n        f: F\n      };\n    }\n\n    throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n  }\n\n  var it,\n      normalCompletion = true,\n      didErr = false,\n      err;\n  return {\n    s: function s() {\n      it = o[Symbol.iterator]();\n    },\n    n: function n() {\n      var step = it.next();\n      normalCompletion = step.done;\n      return step;\n    },\n    e: function e(_e2) {\n      didErr = true;\n      err = _e2;\n    },\n    f: function f() {\n      try {\n        if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n      } finally {\n        if (didErr) throw err;\n      }\n    }\n  };\n}","// Supports determination of isControlled().\n// Controlled input accepts its current value as a prop.\n//\n// @see https://facebook.github.io/react/docs/forms.html#controlled-components\n// @param value\n// @returns {boolean} true if string (including '') or number (including zero)\nexport function hasValue(value) {\n  return value != null && !(Array.isArray(value) && value.length === 0);\n} // Determine if field is empty or filled.\n// Response determines if label is presented above field or as placeholder.\n//\n// @param obj\n// @param SSR\n// @returns {boolean} False when not present or empty string.\n//                    True when any number or string with length.\n\nexport function isFilled(obj) {\n  var SSR = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n  return obj && (hasValue(obj.value) && obj.value !== '' || SSR && hasValue(obj.defaultValue) && obj.defaultValue !== '');\n} // Determine if an Input is adorned on start.\n// It's corresponding to the left with LTR.\n//\n// @param obj\n// @returns {boolean} False when no adornments.\n//                    True when adorned at the start.\n\nexport function isAdornedStart(obj) {\n  return obj.startAdornment;\n}","/* @license C3.js v0.7.20 | (c) C3 Team and other contributors | http://c3js.org/ */\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = global || self, global.c3 = factory());\n}(this, (function () { 'use strict';\n\n  function ChartInternal(api) {\r\n      var $$ = this;\r\n      // Note: This part will be replaced by rollup-plugin-modify\r\n      // When bundling esm output. Beware of changing this line.\r\n      // TODO: Maybe we should check that the modification by rollup-plugin-modify\r\n      // is valid during unit tests.\r\n      $$.d3 = window.d3\r\n          ? window.d3\r\n          : typeof require !== 'undefined'\r\n              ? require('d3')\r\n              : undefined;\r\n      $$.api = api;\r\n      $$.config = $$.getDefaultConfig();\r\n      $$.data = {};\r\n      $$.cache = {};\r\n      $$.axes = {};\r\n  }\n\n  /**\r\n   * The Chart class\r\n   *\r\n   * The methods of this class is the public APIs of the chart object.\r\n   */\r\n  function Chart(config) {\r\n      this.internal = new ChartInternal(this);\r\n      this.internal.loadConfig(config);\r\n      this.internal.beforeInit(config);\r\n      this.internal.init();\r\n      this.internal.afterInit(config);\r\n      (function bindThis(fn, target, argThis) {\r\n          Object.keys(fn).forEach(function (key) {\r\n              target[key] = fn[key].bind(argThis);\r\n              if (Object.keys(fn[key]).length > 0) {\r\n                  bindThis(fn[key], target[key], argThis);\r\n              }\r\n          });\r\n      })(Chart.prototype, this, this);\r\n  }\n\n  var asHalfPixel = function (n) {\r\n      return Math.ceil(n) + 0.5;\r\n  };\r\n  var ceil10 = function (v) {\r\n      return Math.ceil(v / 10) * 10;\r\n  };\r\n  var diffDomain = function (d) {\r\n      return d[1] - d[0];\r\n  };\r\n  var getOption = function (options, key, defaultValue) {\r\n      return isDefined(options[key]) ? options[key] : defaultValue;\r\n  };\r\n  var getPathBox = function (path) {\r\n      var box = getBBox(path), items = [path.pathSegList.getItem(0), path.pathSegList.getItem(1)], minX = items[0].x, minY = Math.min(items[0].y, items[1].y);\r\n      return { x: minX, y: minY, width: box.width, height: box.height };\r\n  };\r\n  var getBBox = function (element) {\r\n      try {\r\n          return element.getBBox();\r\n      }\r\n      catch (ignore) {\r\n          // Firefox will throw an exception if getBBox() is called whereas the\r\n          // element is rendered with display:none\r\n          // See https://github.com/c3js/c3/issues/2692\r\n          // The previous code was using `getBoundingClientRect` which was returning\r\n          // everything at 0 in this case so let's reproduce this behavior here.\r\n          return { x: 0, y: 0, width: 0, height: 0 };\r\n      }\r\n  };\r\n  var hasValue = function (dict, value) {\r\n      var found = false;\r\n      Object.keys(dict).forEach(function (key) {\r\n          if (dict[key] === value) {\r\n              found = true;\r\n          }\r\n      });\r\n      return found;\r\n  };\r\n  var isArray = function (o) {\r\n      return Array.isArray(o);\r\n  };\r\n  var isDefined = function (v) {\r\n      return typeof v !== 'undefined';\r\n  };\r\n  var isEmpty = function (o) {\r\n      return (typeof o === 'undefined' ||\r\n          o === null ||\r\n          (isString(o) && o.length === 0) ||\r\n          (typeof o === 'object' && Object.keys(o).length === 0));\r\n  };\r\n  var isFunction = function (o) {\r\n      return typeof o === 'function';\r\n  };\r\n  var isNumber = function (o) {\r\n      return typeof o === 'number';\r\n  };\r\n  var isString = function (o) {\r\n      return typeof o === 'string';\r\n  };\r\n  var isUndefined = function (v) {\r\n      return typeof v === 'undefined';\r\n  };\r\n  var isValue = function (v) {\r\n      return v || v === 0;\r\n  };\r\n  var notEmpty = function (o) {\r\n      return !isEmpty(o);\r\n  };\r\n  var sanitise = function (str) {\r\n      return typeof str === 'string'\r\n          ? str.replace(/</g, '&lt;').replace(/>/g, '&gt;')\r\n          : str;\r\n  };\r\n  var flattenArray = function (arr) {\r\n      return Array.isArray(arr) ? [].concat.apply([], arr) : [];\r\n  };\r\n  /**\r\n   * Returns whether the point is within the given box.\r\n   *\r\n   * @param {Array} point An [x,y] coordinate\r\n   * @param {Object} box An object with {x, y, width, height} keys\r\n   * @param {Number} sensitivity An offset to ease check on very small boxes\r\n   */\r\n  var isWithinBox = function (point, box, sensitivity) {\r\n      if (sensitivity === void 0) { sensitivity = 0; }\r\n      var xStart = box.x - sensitivity;\r\n      var xEnd = box.x + box.width + sensitivity;\r\n      var yStart = box.y + box.height + sensitivity;\r\n      var yEnd = box.y - sensitivity;\r\n      return (xStart < point[0] && point[0] < xEnd && yEnd < point[1] && point[1] < yStart);\r\n  };\r\n  /**\r\n   * Returns Internet Explorer version number (or false if no Internet Explorer used).\r\n   *\r\n   * @param string agent Optional parameter to specify user agent\r\n   */\r\n  var getIEVersion = function (agent) {\r\n      // https://stackoverflow.com/questions/19999388/check-if-user-is-using-ie\r\n      if (typeof agent === 'undefined') {\r\n          agent = window.navigator.userAgent;\r\n      }\r\n      var pos = agent.indexOf('MSIE '); // up to IE10\r\n      if (pos > 0) {\r\n          return parseInt(agent.substring(pos + 5, agent.indexOf('.', pos)), 10);\r\n      }\r\n      pos = agent.indexOf('Trident/'); // IE11\r\n      if (pos > 0) {\r\n          pos = agent.indexOf('rv:');\r\n          return parseInt(agent.substring(pos + 3, agent.indexOf('.', pos)), 10);\r\n      }\r\n      return false;\r\n  };\r\n  /**\r\n   * Returns whether the used browser is Internet Explorer.\r\n   *\r\n   * @param version Optional parameter to specify IE version\r\n   */\r\n  var isIE = function (version) {\r\n      var ver = getIEVersion();\r\n      if (typeof version === 'undefined') {\r\n          return !!ver;\r\n      }\r\n      return version === ver;\r\n  };\n\n  function AxisInternal(component, params) {\r\n      var internal = this;\r\n      internal.component = component;\r\n      internal.params = params || {};\r\n      internal.d3 = component.d3;\r\n      internal.scale = internal.d3.scaleLinear();\r\n      internal.range;\r\n      internal.orient = 'bottom';\r\n      internal.innerTickSize = 6;\r\n      internal.outerTickSize = this.params.withOuterTick ? 6 : 0;\r\n      internal.tickPadding = 3;\r\n      internal.tickValues = null;\r\n      internal.tickFormat;\r\n      internal.tickArguments;\r\n      internal.tickOffset = 0;\r\n      internal.tickCulling = true;\r\n      internal.tickCentered;\r\n      internal.tickTextCharSize;\r\n      internal.tickTextRotate = internal.params.tickTextRotate;\r\n      internal.tickLength;\r\n      internal.axis = internal.generateAxis();\r\n  }\r\n  AxisInternal.prototype.axisX = function (selection, x, tickOffset) {\r\n      selection.attr('transform', function (d) {\r\n          return 'translate(' + Math.ceil(x(d) + tickOffset) + ', 0)';\r\n      });\r\n  };\r\n  AxisInternal.prototype.axisY = function (selection, y) {\r\n      selection.attr('transform', function (d) {\r\n          return 'translate(0,' + Math.ceil(y(d)) + ')';\r\n      });\r\n  };\r\n  AxisInternal.prototype.scaleExtent = function (domain) {\r\n      var start = domain[0], stop = domain[domain.length - 1];\r\n      return start < stop ? [start, stop] : [stop, start];\r\n  };\r\n  AxisInternal.prototype.generateTicks = function (scale) {\r\n      var internal = this;\r\n      var i, domain, ticks = [];\r\n      if (scale.ticks) {\r\n          return scale.ticks.apply(scale, internal.tickArguments);\r\n      }\r\n      domain = scale.domain();\r\n      for (i = Math.ceil(domain[0]); i < domain[1]; i++) {\r\n          ticks.push(i);\r\n      }\r\n      if (ticks.length > 0 && ticks[0] > 0) {\r\n          ticks.unshift(ticks[0] - (ticks[1] - ticks[0]));\r\n      }\r\n      return ticks;\r\n  };\r\n  AxisInternal.prototype.copyScale = function () {\r\n      var internal = this;\r\n      var newScale = internal.scale.copy(), domain;\r\n      if (internal.params.isCategory) {\r\n          domain = internal.scale.domain();\r\n          newScale.domain([domain[0], domain[1] - 1]);\r\n      }\r\n      return newScale;\r\n  };\r\n  AxisInternal.prototype.textFormatted = function (v) {\r\n      var internal = this, formatted = internal.tickFormat ? internal.tickFormat(v) : v;\r\n      return typeof formatted !== 'undefined' ? formatted : '';\r\n  };\r\n  AxisInternal.prototype.updateRange = function () {\r\n      var internal = this;\r\n      internal.range = internal.scale.rangeExtent\r\n          ? internal.scale.rangeExtent()\r\n          : internal.scaleExtent(internal.scale.range());\r\n      return internal.range;\r\n  };\r\n  AxisInternal.prototype.updateTickTextCharSize = function (tick) {\r\n      var internal = this;\r\n      if (internal.tickTextCharSize) {\r\n          return internal.tickTextCharSize;\r\n      }\r\n      var size = {\r\n          h: 11.5,\r\n          w: 5.5\r\n      };\r\n      tick\r\n          .select('text')\r\n          .text(function (d) {\r\n          return internal.textFormatted(d);\r\n      })\r\n          .each(function (d) {\r\n          var box = getBBox(this), text = internal.textFormatted(d), h = box.height, w = text ? box.width / text.length : undefined;\r\n          if (h && w) {\r\n              size.h = h;\r\n              size.w = w;\r\n          }\r\n      })\r\n          .text('');\r\n      internal.tickTextCharSize = size;\r\n      return size;\r\n  };\r\n  AxisInternal.prototype.isVertical = function () {\r\n      return this.orient === 'left' || this.orient === 'right';\r\n  };\r\n  AxisInternal.prototype.tspanData = function (d, i, scale) {\r\n      var internal = this;\r\n      var splitted = internal.params.tickMultiline\r\n          ? internal.splitTickText(d, scale)\r\n          : [].concat(internal.textFormatted(d));\r\n      if (internal.params.tickMultiline && internal.params.tickMultilineMax > 0) {\r\n          splitted = internal.ellipsify(splitted, internal.params.tickMultilineMax);\r\n      }\r\n      return splitted.map(function (s) {\r\n          return { index: i, splitted: s, length: splitted.length };\r\n      });\r\n  };\r\n  AxisInternal.prototype.splitTickText = function (d, scale) {\r\n      var internal = this, tickText = internal.textFormatted(d), maxWidth = internal.params.tickWidth, subtext, spaceIndex, textWidth, splitted = [];\r\n      if (Object.prototype.toString.call(tickText) === '[object Array]') {\r\n          return tickText;\r\n      }\r\n      if (!maxWidth || maxWidth <= 0) {\r\n          maxWidth = internal.isVertical()\r\n              ? 95\r\n              : internal.params.isCategory\r\n                  ? Math.ceil(scale(1) - scale(0)) - 12\r\n                  : 110;\r\n      }\r\n      function split(splitted, text) {\r\n          spaceIndex = undefined;\r\n          for (var i = 1; i < text.length; i++) {\r\n              if (text.charAt(i) === ' ') {\r\n                  spaceIndex = i;\r\n              }\r\n              subtext = text.substr(0, i + 1);\r\n              textWidth = internal.tickTextCharSize.w * subtext.length;\r\n              // if text width gets over tick width, split by space index or crrent index\r\n              if (maxWidth < textWidth) {\r\n                  return split(splitted.concat(text.substr(0, spaceIndex ? spaceIndex : i)), text.slice(spaceIndex ? spaceIndex + 1 : i));\r\n              }\r\n          }\r\n          return splitted.concat(text);\r\n      }\r\n      return split(splitted, tickText + '');\r\n  };\r\n  AxisInternal.prototype.ellipsify = function (splitted, max) {\r\n      if (splitted.length <= max) {\r\n          return splitted;\r\n      }\r\n      var ellipsified = splitted.slice(0, max);\r\n      var remaining = 3;\r\n      for (var i = max - 1; i >= 0; i--) {\r\n          var available = ellipsified[i].length;\r\n          ellipsified[i] = ellipsified[i]\r\n              .substr(0, available - remaining)\r\n              .padEnd(available, '.');\r\n          remaining -= available;\r\n          if (remaining <= 0) {\r\n              break;\r\n          }\r\n      }\r\n      return ellipsified;\r\n  };\r\n  AxisInternal.prototype.updateTickLength = function () {\r\n      var internal = this;\r\n      internal.tickLength =\r\n          Math.max(internal.innerTickSize, 0) + internal.tickPadding;\r\n  };\r\n  AxisInternal.prototype.lineY2 = function (d) {\r\n      var internal = this, tickPosition = internal.scale(d) + (internal.tickCentered ? 0 : internal.tickOffset);\r\n      return internal.range[0] < tickPosition && tickPosition < internal.range[1]\r\n          ? internal.innerTickSize\r\n          : 0;\r\n  };\r\n  AxisInternal.prototype.textY = function () {\r\n      var internal = this, rotate = internal.tickTextRotate;\r\n      return rotate\r\n          ? 11.5 - 2.5 * (rotate / 15) * (rotate > 0 ? 1 : -1)\r\n          : internal.tickLength;\r\n  };\r\n  AxisInternal.prototype.textTransform = function () {\r\n      var internal = this, rotate = internal.tickTextRotate;\r\n      return rotate ? 'rotate(' + rotate + ')' : '';\r\n  };\r\n  AxisInternal.prototype.textTextAnchor = function () {\r\n      var internal = this, rotate = internal.tickTextRotate;\r\n      return rotate ? (rotate > 0 ? 'start' : 'end') : 'middle';\r\n  };\r\n  AxisInternal.prototype.tspanDx = function () {\r\n      var internal = this, rotate = internal.tickTextRotate;\r\n      return rotate ? 8 * Math.sin(Math.PI * (rotate / 180)) : 0;\r\n  };\r\n  AxisInternal.prototype.tspanDy = function (d, i) {\r\n      var internal = this, dy = internal.tickTextCharSize.h;\r\n      if (i === 0) {\r\n          if (internal.isVertical()) {\r\n              dy = -((d.length - 1) * (internal.tickTextCharSize.h / 2) - 3);\r\n          }\r\n          else {\r\n              dy = '.71em';\r\n          }\r\n      }\r\n      return dy;\r\n  };\r\n  AxisInternal.prototype.generateAxis = function () {\r\n      var internal = this, d3 = internal.d3, params = internal.params;\r\n      function axis(g, transition) {\r\n          var self;\r\n          g.each(function () {\r\n              var g = (axis.g = d3.select(this));\r\n              var scale0 = this.__chart__ || internal.scale, scale1 = (this.__chart__ = internal.copyScale());\r\n              var ticksValues = internal.tickValues\r\n                  ? internal.tickValues\r\n                  : internal.generateTicks(scale1), ticks = g.selectAll('.tick').data(ticksValues, scale1), tickEnter = ticks\r\n                  .enter()\r\n                  .insert('g', '.domain')\r\n                  .attr('class', 'tick')\r\n                  .style('opacity', 1e-6), \r\n              // MEMO: No exit transition. The reason is this transition affects max tick width calculation because old tick will be included in the ticks.\r\n              tickExit = ticks.exit().remove(), tickUpdate = ticks.merge(tickEnter), tickTransform, tickX, tickY;\r\n              if (params.isCategory) {\r\n                  internal.tickOffset = Math.ceil((scale1(1) - scale1(0)) / 2);\r\n                  tickX = internal.tickCentered ? 0 : internal.tickOffset;\r\n                  tickY = internal.tickCentered ? internal.tickOffset : 0;\r\n              }\r\n              else {\r\n                  internal.tickOffset = tickX = 0;\r\n              }\r\n              internal.updateRange();\r\n              internal.updateTickLength();\r\n              internal.updateTickTextCharSize(g.select('.tick'));\r\n              var lineUpdate = tickUpdate\r\n                  .select('line')\r\n                  .merge(tickEnter.append('line')), textUpdate = tickUpdate.select('text').merge(tickEnter.append('text'));\r\n              var tspans = tickUpdate\r\n                  .selectAll('text')\r\n                  .selectAll('tspan')\r\n                  .data(function (d, i) {\r\n                  return internal.tspanData(d, i, scale1);\r\n              }), tspanEnter = tspans.enter().append('tspan'), tspanUpdate = tspanEnter.merge(tspans).text(function (d) {\r\n                  return d.splitted;\r\n              });\r\n              tspans.exit().remove();\r\n              var path = g.selectAll('.domain').data([0]), pathUpdate = path\r\n                  .enter()\r\n                  .append('path')\r\n                  .merge(path)\r\n                  .attr('class', 'domain');\r\n              // TODO: each attr should be one function and change its behavior by internal.orient, probably\r\n              switch (internal.orient) {\r\n                  case 'bottom': {\r\n                      tickTransform = internal.axisX;\r\n                      lineUpdate\r\n                          .attr('x1', tickX)\r\n                          .attr('x2', tickX)\r\n                          .attr('y2', function (d, i) {\r\n                          return internal.lineY2(d, i);\r\n                      });\r\n                      textUpdate\r\n                          .attr('x', 0)\r\n                          .attr('y', function (d, i) {\r\n                          return internal.textY(d, i);\r\n                      })\r\n                          .attr('transform', function (d, i) {\r\n                          return internal.textTransform(d, i);\r\n                      })\r\n                          .style('text-anchor', function (d, i) {\r\n                          return internal.textTextAnchor(d, i);\r\n                      });\r\n                      tspanUpdate\r\n                          .attr('x', 0)\r\n                          .attr('dy', function (d, i) {\r\n                          return internal.tspanDy(d, i);\r\n                      })\r\n                          .attr('dx', function (d, i) {\r\n                          return internal.tspanDx(d, i);\r\n                      });\r\n                      pathUpdate.attr('d', 'M' +\r\n                          internal.range[0] +\r\n                          ',' +\r\n                          internal.outerTickSize +\r\n                          'V0H' +\r\n                          internal.range[1] +\r\n                          'V' +\r\n                          internal.outerTickSize);\r\n                      break;\r\n                  }\r\n                  case 'top': {\r\n                      // TODO: rotated tick text\r\n                      tickTransform = internal.axisX;\r\n                      lineUpdate\r\n                          .attr('x1', tickX)\r\n                          .attr('x2', tickX)\r\n                          .attr('y2', function (d, i) {\r\n                          return -1 * internal.lineY2(d, i);\r\n                      });\r\n                      textUpdate\r\n                          .attr('x', 0)\r\n                          .attr('y', function (d, i) {\r\n                          return (-1 * internal.textY(d, i) -\r\n                              (params.isCategory ? 2 : internal.tickLength - 2));\r\n                      })\r\n                          .attr('transform', function (d, i) {\r\n                          return internal.textTransform(d, i);\r\n                      })\r\n                          .style('text-anchor', function (d, i) {\r\n                          return internal.textTextAnchor(d, i);\r\n                      });\r\n                      tspanUpdate\r\n                          .attr('x', 0)\r\n                          .attr('dy', function (d, i) {\r\n                          return internal.tspanDy(d, i);\r\n                      })\r\n                          .attr('dx', function (d, i) {\r\n                          return internal.tspanDx(d, i);\r\n                      });\r\n                      pathUpdate.attr('d', 'M' +\r\n                          internal.range[0] +\r\n                          ',' +\r\n                          -internal.outerTickSize +\r\n                          'V0H' +\r\n                          internal.range[1] +\r\n                          'V' +\r\n                          -internal.outerTickSize);\r\n                      break;\r\n                  }\r\n                  case 'left': {\r\n                      tickTransform = internal.axisY;\r\n                      lineUpdate\r\n                          .attr('x2', -internal.innerTickSize)\r\n                          .attr('y1', tickY)\r\n                          .attr('y2', tickY);\r\n                      textUpdate\r\n                          .attr('x', -internal.tickLength)\r\n                          .attr('y', internal.tickOffset)\r\n                          .style('text-anchor', 'end');\r\n                      tspanUpdate\r\n                          .attr('x', -internal.tickLength)\r\n                          .attr('dy', function (d, i) {\r\n                          return internal.tspanDy(d, i);\r\n                      });\r\n                      pathUpdate.attr('d', 'M' +\r\n                          -internal.outerTickSize +\r\n                          ',' +\r\n                          internal.range[0] +\r\n                          'H0V' +\r\n                          internal.range[1] +\r\n                          'H' +\r\n                          -internal.outerTickSize);\r\n                      break;\r\n                  }\r\n                  case 'right': {\r\n                      tickTransform = internal.axisY;\r\n                      lineUpdate\r\n                          .attr('x2', internal.innerTickSize)\r\n                          .attr('y1', tickY)\r\n                          .attr('y2', tickY);\r\n                      textUpdate\r\n                          .attr('x', internal.tickLength)\r\n                          .attr('y', internal.tickOffset)\r\n                          .style('text-anchor', 'start');\r\n                      tspanUpdate.attr('x', internal.tickLength).attr('dy', function (d, i) {\r\n                          return internal.tspanDy(d, i);\r\n                      });\r\n                      pathUpdate.attr('d', 'M' +\r\n                          internal.outerTickSize +\r\n                          ',' +\r\n                          internal.range[0] +\r\n                          'H0V' +\r\n                          internal.range[1] +\r\n                          'H' +\r\n                          internal.outerTickSize);\r\n                      break;\r\n                  }\r\n              }\r\n              if (scale1.rangeBand) {\r\n                  var x = scale1, dx = x.rangeBand() / 2;\r\n                  scale0 = scale1 = function (d) {\r\n                      return x(d) + dx;\r\n                  };\r\n              }\r\n              else if (scale0.rangeBand) {\r\n                  scale0 = scale1;\r\n              }\r\n              else {\r\n                  tickExit.call(tickTransform, scale1, internal.tickOffset);\r\n              }\r\n              tickEnter.call(tickTransform, scale0, internal.tickOffset);\r\n              self = (transition ? tickUpdate.transition(transition) : tickUpdate)\r\n                  .style('opacity', 1)\r\n                  .call(tickTransform, scale1, internal.tickOffset);\r\n          });\r\n          return self;\r\n      }\r\n      axis.scale = function (x) {\r\n          if (!arguments.length) {\r\n              return internal.scale;\r\n          }\r\n          internal.scale = x;\r\n          return axis;\r\n      };\r\n      axis.orient = function (x) {\r\n          if (!arguments.length) {\r\n              return internal.orient;\r\n          }\r\n          internal.orient =\r\n              x in { top: 1, right: 1, bottom: 1, left: 1 } ? x + '' : 'bottom';\r\n          return axis;\r\n      };\r\n      axis.tickFormat = function (format) {\r\n          if (!arguments.length) {\r\n              return internal.tickFormat;\r\n          }\r\n          internal.tickFormat = format;\r\n          return axis;\r\n      };\r\n      axis.tickCentered = function (isCentered) {\r\n          if (!arguments.length) {\r\n              return internal.tickCentered;\r\n          }\r\n          internal.tickCentered = isCentered;\r\n          return axis;\r\n      };\r\n      axis.tickOffset = function () {\r\n          return internal.tickOffset;\r\n      };\r\n      axis.tickInterval = function () {\r\n          var interval, length;\r\n          if (params.isCategory) {\r\n              interval = internal.tickOffset * 2;\r\n          }\r\n          else {\r\n              length =\r\n                  axis.g\r\n                      .select('path.domain')\r\n                      .node()\r\n                      .getTotalLength() -\r\n                      internal.outerTickSize * 2;\r\n              interval = length / axis.g.selectAll('line').size();\r\n          }\r\n          return interval === Infinity ? 0 : interval;\r\n      };\r\n      axis.ticks = function () {\r\n          if (!arguments.length) {\r\n              return internal.tickArguments;\r\n          }\r\n          internal.tickArguments = arguments;\r\n          return axis;\r\n      };\r\n      axis.tickCulling = function (culling) {\r\n          if (!arguments.length) {\r\n              return internal.tickCulling;\r\n          }\r\n          internal.tickCulling = culling;\r\n          return axis;\r\n      };\r\n      axis.tickValues = function (x) {\r\n          if (typeof x === 'function') {\r\n              internal.tickValues = function () {\r\n                  return x(internal.scale.domain());\r\n              };\r\n          }\r\n          else {\r\n              if (!arguments.length) {\r\n                  return internal.tickValues;\r\n              }\r\n              internal.tickValues = x;\r\n          }\r\n          return axis;\r\n      };\r\n      return axis;\r\n  };\n\n  var CLASS = {\r\n      target: 'c3-target',\r\n      chart: 'c3-chart',\r\n      chartLine: 'c3-chart-line',\r\n      chartLines: 'c3-chart-lines',\r\n      chartBar: 'c3-chart-bar',\r\n      chartBars: 'c3-chart-bars',\r\n      chartText: 'c3-chart-text',\r\n      chartTexts: 'c3-chart-texts',\r\n      chartArc: 'c3-chart-arc',\r\n      chartArcs: 'c3-chart-arcs',\r\n      chartArcsTitle: 'c3-chart-arcs-title',\r\n      chartArcsBackground: 'c3-chart-arcs-background',\r\n      chartArcsGaugeUnit: 'c3-chart-arcs-gauge-unit',\r\n      chartArcsGaugeMax: 'c3-chart-arcs-gauge-max',\r\n      chartArcsGaugeMin: 'c3-chart-arcs-gauge-min',\r\n      selectedCircle: 'c3-selected-circle',\r\n      selectedCircles: 'c3-selected-circles',\r\n      eventRect: 'c3-event-rect',\r\n      eventRects: 'c3-event-rects',\r\n      eventRectsSingle: 'c3-event-rects-single',\r\n      eventRectsMultiple: 'c3-event-rects-multiple',\r\n      zoomRect: 'c3-zoom-rect',\r\n      brush: 'c3-brush',\r\n      dragZoom: 'c3-drag-zoom',\r\n      focused: 'c3-focused',\r\n      defocused: 'c3-defocused',\r\n      region: 'c3-region',\r\n      regions: 'c3-regions',\r\n      title: 'c3-title',\r\n      tooltipContainer: 'c3-tooltip-container',\r\n      tooltip: 'c3-tooltip',\r\n      tooltipName: 'c3-tooltip-name',\r\n      shape: 'c3-shape',\r\n      shapes: 'c3-shapes',\r\n      line: 'c3-line',\r\n      lines: 'c3-lines',\r\n      bar: 'c3-bar',\r\n      bars: 'c3-bars',\r\n      circle: 'c3-circle',\r\n      circles: 'c3-circles',\r\n      arc: 'c3-arc',\r\n      arcLabelLine: 'c3-arc-label-line',\r\n      arcs: 'c3-arcs',\r\n      area: 'c3-area',\r\n      areas: 'c3-areas',\r\n      empty: 'c3-empty',\r\n      text: 'c3-text',\r\n      texts: 'c3-texts',\r\n      gaugeValue: 'c3-gauge-value',\r\n      grid: 'c3-grid',\r\n      gridLines: 'c3-grid-lines',\r\n      xgrid: 'c3-xgrid',\r\n      xgrids: 'c3-xgrids',\r\n      xgridLine: 'c3-xgrid-line',\r\n      xgridLines: 'c3-xgrid-lines',\r\n      xgridFocus: 'c3-xgrid-focus',\r\n      ygrid: 'c3-ygrid',\r\n      ygrids: 'c3-ygrids',\r\n      ygridLine: 'c3-ygrid-line',\r\n      ygridLines: 'c3-ygrid-lines',\r\n      colorScale: 'c3-colorscale',\r\n      stanfordElements: 'c3-stanford-elements',\r\n      stanfordLine: 'c3-stanford-line',\r\n      stanfordLines: 'c3-stanford-lines',\r\n      stanfordRegion: 'c3-stanford-region',\r\n      stanfordRegions: 'c3-stanford-regions',\r\n      stanfordText: 'c3-stanford-text',\r\n      stanfordTexts: 'c3-stanford-texts',\r\n      axis: 'c3-axis',\r\n      axisX: 'c3-axis-x',\r\n      axisXLabel: 'c3-axis-x-label',\r\n      axisY: 'c3-axis-y',\r\n      axisYLabel: 'c3-axis-y-label',\r\n      axisY2: 'c3-axis-y2',\r\n      axisY2Label: 'c3-axis-y2-label',\r\n      legendBackground: 'c3-legend-background',\r\n      legendItem: 'c3-legend-item',\r\n      legendItemEvent: 'c3-legend-item-event',\r\n      legendItemTile: 'c3-legend-item-tile',\r\n      legendItemHidden: 'c3-legend-item-hidden',\r\n      legendItemFocused: 'c3-legend-item-focused',\r\n      dragarea: 'c3-dragarea',\r\n      EXPANDED: '_expanded_',\r\n      SELECTED: '_selected_',\r\n      INCLUDED: '_included_'\r\n  };\n\n  var AxisClass = /** @class */ (function () {\r\n      function AxisClass(owner) {\r\n          this.owner = owner;\r\n          this.d3 = owner.d3;\r\n          this.internal = AxisInternal;\r\n      }\r\n      return AxisClass;\r\n  }());\r\n  var Axis = AxisClass;\r\n  Axis.prototype.init = function init() {\r\n      var $$ = this.owner, config = $$.config, main = $$.main;\r\n      $$.axes.x = main\r\n          .append('g')\r\n          .attr('class', CLASS.axis + ' ' + CLASS.axisX)\r\n          .attr('clip-path', config.axis_x_inner ? '' : $$.clipPathForXAxis)\r\n          .attr('transform', $$.getTranslate('x'))\r\n          .style('visibility', config.axis_x_show ? 'visible' : 'hidden');\r\n      $$.axes.x\r\n          .append('text')\r\n          .attr('class', CLASS.axisXLabel)\r\n          .attr('transform', config.axis_rotated ? 'rotate(-90)' : '')\r\n          .style('text-anchor', this.textAnchorForXAxisLabel.bind(this));\r\n      $$.axes.y = main\r\n          .append('g')\r\n          .attr('class', CLASS.axis + ' ' + CLASS.axisY)\r\n          .attr('clip-path', config.axis_y_inner ? '' : $$.clipPathForYAxis)\r\n          .attr('transform', $$.getTranslate('y'))\r\n          .style('visibility', config.axis_y_show ? 'visible' : 'hidden');\r\n      $$.axes.y\r\n          .append('text')\r\n          .attr('class', CLASS.axisYLabel)\r\n          .attr('transform', config.axis_rotated ? '' : 'rotate(-90)')\r\n          .style('text-anchor', this.textAnchorForYAxisLabel.bind(this));\r\n      $$.axes.y2 = main\r\n          .append('g')\r\n          .attr('class', CLASS.axis + ' ' + CLASS.axisY2)\r\n          // clip-path?\r\n          .attr('transform', $$.getTranslate('y2'))\r\n          .style('visibility', config.axis_y2_show ? 'visible' : 'hidden');\r\n      $$.axes.y2\r\n          .append('text')\r\n          .attr('class', CLASS.axisY2Label)\r\n          .attr('transform', config.axis_rotated ? '' : 'rotate(-90)')\r\n          .style('text-anchor', this.textAnchorForY2AxisLabel.bind(this));\r\n  };\r\n  Axis.prototype.getXAxis = function getXAxis(scale, orient, tickFormat, tickValues, withOuterTick, withoutTransition, withoutRotateTickText) {\r\n      var $$ = this.owner, config = $$.config, axisParams = {\r\n          isCategory: $$.isCategorized(),\r\n          withOuterTick: withOuterTick,\r\n          tickMultiline: config.axis_x_tick_multiline,\r\n          tickMultilineMax: config.axis_x_tick_multiline\r\n              ? Number(config.axis_x_tick_multilineMax)\r\n              : 0,\r\n          tickWidth: config.axis_x_tick_width,\r\n          tickTextRotate: withoutRotateTickText ? 0 : config.axis_x_tick_rotate,\r\n          withoutTransition: withoutTransition\r\n      }, axis = new this.internal(this, axisParams).axis.scale(scale).orient(orient);\r\n      if ($$.isTimeSeries() && tickValues && typeof tickValues !== 'function') {\r\n          tickValues = tickValues.map(function (v) {\r\n              return $$.parseDate(v);\r\n          });\r\n      }\r\n      // Set tick\r\n      axis.tickFormat(tickFormat).tickValues(tickValues);\r\n      if ($$.isCategorized()) {\r\n          axis.tickCentered(config.axis_x_tick_centered);\r\n          if (isEmpty(config.axis_x_tick_culling)) {\r\n              config.axis_x_tick_culling = false;\r\n          }\r\n      }\r\n      return axis;\r\n  };\r\n  Axis.prototype.updateXAxisTickValues = function updateXAxisTickValues(targets, axis) {\r\n      var $$ = this.owner, config = $$.config, tickValues;\r\n      if (config.axis_x_tick_fit || config.axis_x_tick_count) {\r\n          tickValues = this.generateTickValues($$.mapTargetsToUniqueXs(targets), config.axis_x_tick_count, $$.isTimeSeries());\r\n      }\r\n      if (axis) {\r\n          axis.tickValues(tickValues);\r\n      }\r\n      else {\r\n          $$.xAxis.tickValues(tickValues);\r\n          $$.subXAxis.tickValues(tickValues);\r\n      }\r\n      return tickValues;\r\n  };\r\n  Axis.prototype.getYAxis = function getYAxis(axisId, scale, orient, tickValues, withOuterTick, withoutTransition, withoutRotateTickText) {\r\n      var $$ = this.owner;\r\n      var config = $$.config;\r\n      var tickFormat = config[\"axis_\" + axisId + \"_tick_format\"];\r\n      if (!tickFormat && $$.isAxisNormalized(axisId)) {\r\n          tickFormat = function (x) { return x + \"%\"; };\r\n      }\r\n      var axis = new this.internal(this, {\r\n          withOuterTick: withOuterTick,\r\n          withoutTransition: withoutTransition,\r\n          tickTextRotate: withoutRotateTickText ? 0 : config.axis_y_tick_rotate\r\n      }).axis\r\n          .scale(scale)\r\n          .orient(orient);\r\n      if (tickFormat) {\r\n          axis.tickFormat(tickFormat);\r\n      }\r\n      if ($$.isTimeSeriesY()) {\r\n          axis.ticks(config.axis_y_tick_time_type, config.axis_y_tick_time_interval);\r\n      }\r\n      else {\r\n          axis.tickValues(tickValues);\r\n      }\r\n      return axis;\r\n  };\r\n  Axis.prototype.getId = function getId(id) {\r\n      var config = this.owner.config;\r\n      return id in config.data_axes ? config.data_axes[id] : 'y';\r\n  };\r\n  Axis.prototype.getXAxisTickFormat = function getXAxisTickFormat() {\r\n      // #2251 previously set any negative values to a whole number,\r\n      // however both should be truncated according to the users format specification\r\n      var $$ = this.owner, config = $$.config;\r\n      var format = $$.isTimeSeries()\r\n          ? $$.defaultAxisTimeFormat\r\n          : $$.isCategorized()\r\n              ? $$.categoryName\r\n              : function (v) {\r\n                  return v;\r\n              };\r\n      if (config.axis_x_tick_format) {\r\n          if (isFunction(config.axis_x_tick_format)) {\r\n              format = config.axis_x_tick_format;\r\n          }\r\n          else if ($$.isTimeSeries()) {\r\n              format = function (date) {\r\n                  return date ? $$.axisTimeFormat(config.axis_x_tick_format)(date) : '';\r\n              };\r\n          }\r\n      }\r\n      return isFunction(format)\r\n          ? function (v) {\r\n              return format.call($$, v);\r\n          }\r\n          : format;\r\n  };\r\n  Axis.prototype.getTickValues = function getTickValues(tickValues, axis) {\r\n      return tickValues ? tickValues : axis ? axis.tickValues() : undefined;\r\n  };\r\n  Axis.prototype.getXAxisTickValues = function getXAxisTickValues() {\r\n      return this.getTickValues(this.owner.config.axis_x_tick_values, this.owner.xAxis);\r\n  };\r\n  Axis.prototype.getYAxisTickValues = function getYAxisTickValues() {\r\n      return this.getTickValues(this.owner.config.axis_y_tick_values, this.owner.yAxis);\r\n  };\r\n  Axis.prototype.getY2AxisTickValues = function getY2AxisTickValues() {\r\n      return this.getTickValues(this.owner.config.axis_y2_tick_values, this.owner.y2Axis);\r\n  };\r\n  Axis.prototype.getLabelOptionByAxisId = function getLabelOptionByAxisId(axisId) {\r\n      var $$ = this.owner, config = $$.config, option;\r\n      if (axisId === 'y') {\r\n          option = config.axis_y_label;\r\n      }\r\n      else if (axisId === 'y2') {\r\n          option = config.axis_y2_label;\r\n      }\r\n      else if (axisId === 'x') {\r\n          option = config.axis_x_label;\r\n      }\r\n      return option;\r\n  };\r\n  Axis.prototype.getLabelText = function getLabelText(axisId) {\r\n      var option = this.getLabelOptionByAxisId(axisId);\r\n      return isString(option) ? option : option ? option.text : null;\r\n  };\r\n  Axis.prototype.setLabelText = function setLabelText(axisId, text) {\r\n      var $$ = this.owner, config = $$.config, option = this.getLabelOptionByAxisId(axisId);\r\n      if (isString(option)) {\r\n          if (axisId === 'y') {\r\n              config.axis_y_label = text;\r\n          }\r\n          else if (axisId === 'y2') {\r\n              config.axis_y2_label = text;\r\n          }\r\n          else if (axisId === 'x') {\r\n              config.axis_x_label = text;\r\n          }\r\n      }\r\n      else if (option) {\r\n          option.text = text;\r\n      }\r\n  };\r\n  Axis.prototype.getLabelPosition = function getLabelPosition(axisId, defaultPosition) {\r\n      var option = this.getLabelOptionByAxisId(axisId), position = option && typeof option === 'object' && option.position\r\n          ? option.position\r\n          : defaultPosition;\r\n      return {\r\n          isInner: position.indexOf('inner') >= 0,\r\n          isOuter: position.indexOf('outer') >= 0,\r\n          isLeft: position.indexOf('left') >= 0,\r\n          isCenter: position.indexOf('center') >= 0,\r\n          isRight: position.indexOf('right') >= 0,\r\n          isTop: position.indexOf('top') >= 0,\r\n          isMiddle: position.indexOf('middle') >= 0,\r\n          isBottom: position.indexOf('bottom') >= 0\r\n      };\r\n  };\r\n  Axis.prototype.getXAxisLabelPosition = function getXAxisLabelPosition() {\r\n      return this.getLabelPosition('x', this.owner.config.axis_rotated ? 'inner-top' : 'inner-right');\r\n  };\r\n  Axis.prototype.getYAxisLabelPosition = function getYAxisLabelPosition() {\r\n      return this.getLabelPosition('y', this.owner.config.axis_rotated ? 'inner-right' : 'inner-top');\r\n  };\r\n  Axis.prototype.getY2AxisLabelPosition = function getY2AxisLabelPosition() {\r\n      return this.getLabelPosition('y2', this.owner.config.axis_rotated ? 'inner-right' : 'inner-top');\r\n  };\r\n  Axis.prototype.getLabelPositionById = function getLabelPositionById(id) {\r\n      return id === 'y2'\r\n          ? this.getY2AxisLabelPosition()\r\n          : id === 'y'\r\n              ? this.getYAxisLabelPosition()\r\n              : this.getXAxisLabelPosition();\r\n  };\r\n  Axis.prototype.textForXAxisLabel = function textForXAxisLabel() {\r\n      return this.getLabelText('x');\r\n  };\r\n  Axis.prototype.textForYAxisLabel = function textForYAxisLabel() {\r\n      return this.getLabelText('y');\r\n  };\r\n  Axis.prototype.textForY2AxisLabel = function textForY2AxisLabel() {\r\n      return this.getLabelText('y2');\r\n  };\r\n  Axis.prototype.xForAxisLabel = function xForAxisLabel(forHorizontal, position) {\r\n      var $$ = this.owner;\r\n      if (forHorizontal) {\r\n          return position.isLeft ? 0 : position.isCenter ? $$.width / 2 : $$.width;\r\n      }\r\n      else {\r\n          return position.isBottom\r\n              ? -$$.height\r\n              : position.isMiddle\r\n                  ? -$$.height / 2\r\n                  : 0;\r\n      }\r\n  };\r\n  Axis.prototype.dxForAxisLabel = function dxForAxisLabel(forHorizontal, position) {\r\n      if (forHorizontal) {\r\n          return position.isLeft ? '0.5em' : position.isRight ? '-0.5em' : '0';\r\n      }\r\n      else {\r\n          return position.isTop ? '-0.5em' : position.isBottom ? '0.5em' : '0';\r\n      }\r\n  };\r\n  Axis.prototype.textAnchorForAxisLabel = function textAnchorForAxisLabel(forHorizontal, position) {\r\n      if (forHorizontal) {\r\n          return position.isLeft ? 'start' : position.isCenter ? 'middle' : 'end';\r\n      }\r\n      else {\r\n          return position.isBottom ? 'start' : position.isMiddle ? 'middle' : 'end';\r\n      }\r\n  };\r\n  Axis.prototype.xForXAxisLabel = function xForXAxisLabel() {\r\n      return this.xForAxisLabel(!this.owner.config.axis_rotated, this.getXAxisLabelPosition());\r\n  };\r\n  Axis.prototype.xForYAxisLabel = function xForYAxisLabel() {\r\n      return this.xForAxisLabel(this.owner.config.axis_rotated, this.getYAxisLabelPosition());\r\n  };\r\n  Axis.prototype.xForY2AxisLabel = function xForY2AxisLabel() {\r\n      return this.xForAxisLabel(this.owner.config.axis_rotated, this.getY2AxisLabelPosition());\r\n  };\r\n  Axis.prototype.dxForXAxisLabel = function dxForXAxisLabel() {\r\n      return this.dxForAxisLabel(!this.owner.config.axis_rotated, this.getXAxisLabelPosition());\r\n  };\r\n  Axis.prototype.dxForYAxisLabel = function dxForYAxisLabel() {\r\n      return this.dxForAxisLabel(this.owner.config.axis_rotated, this.getYAxisLabelPosition());\r\n  };\r\n  Axis.prototype.dxForY2AxisLabel = function dxForY2AxisLabel() {\r\n      return this.dxForAxisLabel(this.owner.config.axis_rotated, this.getY2AxisLabelPosition());\r\n  };\r\n  Axis.prototype.dyForXAxisLabel = function dyForXAxisLabel() {\r\n      var $$ = this.owner, config = $$.config, position = this.getXAxisLabelPosition();\r\n      if (config.axis_rotated) {\r\n          return position.isInner\r\n              ? '1.2em'\r\n              : -25 - ($$.config.axis_x_inner ? 0 : this.getMaxTickWidth('x'));\r\n      }\r\n      else {\r\n          return position.isInner ? '-0.5em' : $$.getHorizontalAxisHeight('x') - 10;\r\n      }\r\n  };\r\n  Axis.prototype.dyForYAxisLabel = function dyForYAxisLabel() {\r\n      var $$ = this.owner, position = this.getYAxisLabelPosition();\r\n      if ($$.config.axis_rotated) {\r\n          return position.isInner ? '-0.5em' : '3em';\r\n      }\r\n      else {\r\n          return position.isInner\r\n              ? '1.2em'\r\n              : -10 - ($$.config.axis_y_inner ? 0 : this.getMaxTickWidth('y') + 10);\r\n      }\r\n  };\r\n  Axis.prototype.dyForY2AxisLabel = function dyForY2AxisLabel() {\r\n      var $$ = this.owner, position = this.getY2AxisLabelPosition();\r\n      if ($$.config.axis_rotated) {\r\n          return position.isInner ? '1.2em' : '-2.2em';\r\n      }\r\n      else {\r\n          return position.isInner\r\n              ? '-0.5em'\r\n              : 15 + ($$.config.axis_y2_inner ? 0 : this.getMaxTickWidth('y2') + 15);\r\n      }\r\n  };\r\n  Axis.prototype.textAnchorForXAxisLabel = function textAnchorForXAxisLabel() {\r\n      var $$ = this.owner;\r\n      return this.textAnchorForAxisLabel(!$$.config.axis_rotated, this.getXAxisLabelPosition());\r\n  };\r\n  Axis.prototype.textAnchorForYAxisLabel = function textAnchorForYAxisLabel() {\r\n      var $$ = this.owner;\r\n      return this.textAnchorForAxisLabel($$.config.axis_rotated, this.getYAxisLabelPosition());\r\n  };\r\n  Axis.prototype.textAnchorForY2AxisLabel = function textAnchorForY2AxisLabel() {\r\n      var $$ = this.owner;\r\n      return this.textAnchorForAxisLabel($$.config.axis_rotated, this.getY2AxisLabelPosition());\r\n  };\r\n  Axis.prototype.getMaxTickWidth = function getMaxTickWidth(id, withoutRecompute) {\r\n      var $$ = this.owner, maxWidth = 0, targetsToShow, scale, axis, dummy, svg;\r\n      if (withoutRecompute && $$.currentMaxTickWidths[id]) {\r\n          return $$.currentMaxTickWidths[id];\r\n      }\r\n      if ($$.svg) {\r\n          targetsToShow = $$.filterTargetsToShow($$.data.targets);\r\n          if (id === 'y') {\r\n              scale = $$.y.copy().domain($$.getYDomain(targetsToShow, 'y'));\r\n              axis = this.getYAxis(id, scale, $$.yOrient, $$.yAxisTickValues, false, true, true);\r\n          }\r\n          else if (id === 'y2') {\r\n              scale = $$.y2.copy().domain($$.getYDomain(targetsToShow, 'y2'));\r\n              axis = this.getYAxis(id, scale, $$.y2Orient, $$.y2AxisTickValues, false, true, true);\r\n          }\r\n          else {\r\n              scale = $$.x.copy().domain($$.getXDomain(targetsToShow));\r\n              axis = this.getXAxis(scale, $$.xOrient, $$.xAxisTickFormat, $$.xAxisTickValues, false, true, true);\r\n              this.updateXAxisTickValues(targetsToShow, axis);\r\n          }\r\n          dummy = $$.d3\r\n              .select('body')\r\n              .append('div')\r\n              .classed('c3', true);\r\n          (svg = dummy\r\n              .append('svg')\r\n              .style('visibility', 'hidden')\r\n              .style('position', 'fixed')\r\n              .style('top', 0)\r\n              .style('left', 0)),\r\n              svg\r\n                  .append('g')\r\n                  .call(axis)\r\n                  .each(function () {\r\n                  $$.d3\r\n                      .select(this)\r\n                      .selectAll('text')\r\n                      .each(function () {\r\n                      var box = getBBox(this);\r\n                      if (maxWidth < box.width) {\r\n                          maxWidth = box.width;\r\n                      }\r\n                  });\r\n                  dummy.remove();\r\n              });\r\n      }\r\n      $$.currentMaxTickWidths[id] =\r\n          maxWidth <= 0 ? $$.currentMaxTickWidths[id] : maxWidth;\r\n      return $$.currentMaxTickWidths[id];\r\n  };\r\n  Axis.prototype.updateLabels = function updateLabels(withTransition) {\r\n      var $$ = this.owner;\r\n      var axisXLabel = $$.main.select('.' + CLASS.axisX + ' .' + CLASS.axisXLabel), axisYLabel = $$.main.select('.' + CLASS.axisY + ' .' + CLASS.axisYLabel), axisY2Label = $$.main.select('.' + CLASS.axisY2 + ' .' + CLASS.axisY2Label);\r\n      (withTransition ? axisXLabel.transition() : axisXLabel)\r\n          .attr('x', this.xForXAxisLabel.bind(this))\r\n          .attr('dx', this.dxForXAxisLabel.bind(this))\r\n          .attr('dy', this.dyForXAxisLabel.bind(this))\r\n          .text(this.textForXAxisLabel.bind(this));\r\n      (withTransition ? axisYLabel.transition() : axisYLabel)\r\n          .attr('x', this.xForYAxisLabel.bind(this))\r\n          .attr('dx', this.dxForYAxisLabel.bind(this))\r\n          .attr('dy', this.dyForYAxisLabel.bind(this))\r\n          .text(this.textForYAxisLabel.bind(this));\r\n      (withTransition ? axisY2Label.transition() : axisY2Label)\r\n          .attr('x', this.xForY2AxisLabel.bind(this))\r\n          .attr('dx', this.dxForY2AxisLabel.bind(this))\r\n          .attr('dy', this.dyForY2AxisLabel.bind(this))\r\n          .text(this.textForY2AxisLabel.bind(this));\r\n  };\r\n  Axis.prototype.getPadding = function getPadding(padding, key, defaultValue, domainLength) {\r\n      var p = typeof padding === 'number' ? padding : padding[key];\r\n      if (!isValue(p)) {\r\n          return defaultValue;\r\n      }\r\n      if (padding.unit === 'ratio') {\r\n          return padding[key] * domainLength;\r\n      }\r\n      // assume padding is pixels if unit is not specified\r\n      return this.convertPixelsToAxisPadding(p, domainLength);\r\n  };\r\n  Axis.prototype.convertPixelsToAxisPadding = function convertPixelsToAxisPadding(pixels, domainLength) {\r\n      var $$ = this.owner, length = $$.config.axis_rotated ? $$.width : $$.height;\r\n      return domainLength * (pixels / length);\r\n  };\r\n  Axis.prototype.generateTickValues = function generateTickValues(values, tickCount, forTimeSeries) {\r\n      var tickValues = values, targetCount, start, end, count, interval, i, tickValue;\r\n      if (tickCount) {\r\n          targetCount = isFunction(tickCount) ? tickCount() : tickCount;\r\n          // compute ticks according to tickCount\r\n          if (targetCount === 1) {\r\n              tickValues = [values[0]];\r\n          }\r\n          else if (targetCount === 2) {\r\n              tickValues = [values[0], values[values.length - 1]];\r\n          }\r\n          else if (targetCount > 2) {\r\n              count = targetCount - 2;\r\n              start = values[0];\r\n              end = values[values.length - 1];\r\n              interval = (end - start) / (count + 1);\r\n              // re-construct unique values\r\n              tickValues = [start];\r\n              for (i = 0; i < count; i++) {\r\n                  tickValue = +start + interval * (i + 1);\r\n                  tickValues.push(forTimeSeries ? new Date(tickValue) : tickValue);\r\n              }\r\n              tickValues.push(end);\r\n          }\r\n      }\r\n      if (!forTimeSeries) {\r\n          tickValues = tickValues.sort(function (a, b) {\r\n              return a - b;\r\n          });\r\n      }\r\n      return tickValues;\r\n  };\r\n  Axis.prototype.generateTransitions = function generateTransitions(duration) {\r\n      var $$ = this.owner, axes = $$.axes;\r\n      return {\r\n          axisX: duration ? axes.x.transition().duration(duration) : axes.x,\r\n          axisY: duration ? axes.y.transition().duration(duration) : axes.y,\r\n          axisY2: duration ? axes.y2.transition().duration(duration) : axes.y2,\r\n          axisSubX: duration ? axes.subx.transition().duration(duration) : axes.subx\r\n      };\r\n  };\r\n  Axis.prototype.redraw = function redraw(duration, isHidden) {\r\n      var $$ = this.owner, transition = duration ? $$.d3.transition().duration(duration) : null;\r\n      $$.axes.x.style('opacity', isHidden ? 0 : 1).call($$.xAxis, transition);\r\n      $$.axes.y.style('opacity', isHidden ? 0 : 1).call($$.yAxis, transition);\r\n      $$.axes.y2.style('opacity', isHidden ? 0 : 1).call($$.y2Axis, transition);\r\n      $$.axes.subx.style('opacity', isHidden ? 0 : 1).call($$.subXAxis, transition);\r\n  };\n\n  var c3 = {\r\n      version: '0.7.20',\r\n      chart: {\r\n          fn: Chart.prototype,\r\n          internal: {\r\n              fn: ChartInternal.prototype,\r\n              axis: {\r\n                  fn: AxisClass.prototype,\r\n                  internal: {\r\n                      fn: AxisInternal.prototype\r\n                  }\r\n              }\r\n          }\r\n      },\r\n      generate: function (config) {\r\n          return new Chart(config);\r\n      }\r\n  };\r\n  ChartInternal.prototype.beforeInit = function () {\r\n      // can do something\r\n  };\r\n  ChartInternal.prototype.afterInit = function () {\r\n      // can do something\r\n  };\r\n  ChartInternal.prototype.init = function () {\r\n      var $$ = this, config = $$.config;\r\n      $$.initParams();\r\n      if (config.data_url) {\r\n          $$.convertUrlToData(config.data_url, config.data_mimeType, config.data_headers, config.data_keys, $$.initWithData);\r\n      }\r\n      else if (config.data_json) {\r\n          $$.initWithData($$.convertJsonToData(config.data_json, config.data_keys));\r\n      }\r\n      else if (config.data_rows) {\r\n          $$.initWithData($$.convertRowsToData(config.data_rows));\r\n      }\r\n      else if (config.data_columns) {\r\n          $$.initWithData($$.convertColumnsToData(config.data_columns));\r\n      }\r\n      else {\r\n          throw Error('url or json or rows or columns is required.');\r\n      }\r\n  };\r\n  ChartInternal.prototype.initParams = function () {\r\n      var $$ = this, d3 = $$.d3, config = $$.config;\r\n      // MEMO: clipId needs to be unique because it conflicts when multiple charts exist\r\n      $$.clipId = 'c3-' + new Date().valueOf() + '-clip';\r\n      $$.clipIdForXAxis = $$.clipId + '-xaxis';\r\n      $$.clipIdForYAxis = $$.clipId + '-yaxis';\r\n      $$.clipIdForGrid = $$.clipId + '-grid';\r\n      $$.clipIdForSubchart = $$.clipId + '-subchart';\r\n      $$.clipPath = $$.getClipPath($$.clipId);\r\n      $$.clipPathForXAxis = $$.getClipPath($$.clipIdForXAxis);\r\n      $$.clipPathForYAxis = $$.getClipPath($$.clipIdForYAxis);\r\n      $$.clipPathForGrid = $$.getClipPath($$.clipIdForGrid);\r\n      $$.clipPathForSubchart = $$.getClipPath($$.clipIdForSubchart);\r\n      $$.dragStart = null;\r\n      $$.dragging = false;\r\n      $$.flowing = false;\r\n      $$.cancelClick = false;\r\n      $$.mouseover = undefined;\r\n      $$.transiting = false;\r\n      $$.color = $$.generateColor();\r\n      $$.levelColor = $$.generateLevelColor();\r\n      $$.dataTimeParse = (config.data_xLocaltime ? d3.timeParse : d3.utcParse)($$.config.data_xFormat);\r\n      $$.axisTimeFormat = config.axis_x_localtime ? d3.timeFormat : d3.utcFormat;\r\n      $$.defaultAxisTimeFormat = function (date) {\r\n          if (date.getMilliseconds()) {\r\n              return d3.timeFormat('.%L')(date);\r\n          }\r\n          if (date.getSeconds()) {\r\n              return d3.timeFormat(':%S')(date);\r\n          }\r\n          if (date.getMinutes()) {\r\n              return d3.timeFormat('%I:%M')(date);\r\n          }\r\n          if (date.getHours()) {\r\n              return d3.timeFormat('%I %p')(date);\r\n          }\r\n          if (date.getDay() && date.getDate() !== 1) {\r\n              return d3.timeFormat('%-m/%-d')(date);\r\n          }\r\n          if (date.getDate() !== 1) {\r\n              return d3.timeFormat('%-m/%-d')(date);\r\n          }\r\n          if (date.getMonth()) {\r\n              return d3.timeFormat('%-m/%-d')(date);\r\n          }\r\n          return d3.timeFormat('%Y/%-m/%-d')(date);\r\n      };\r\n      $$.hiddenTargetIds = [];\r\n      $$.hiddenLegendIds = [];\r\n      $$.focusedTargetIds = [];\r\n      $$.defocusedTargetIds = [];\r\n      $$.xOrient = config.axis_rotated\r\n          ? config.axis_x_inner\r\n              ? 'right'\r\n              : 'left'\r\n          : config.axis_x_inner\r\n              ? 'top'\r\n              : 'bottom';\r\n      $$.yOrient = config.axis_rotated\r\n          ? config.axis_y_inner\r\n              ? 'top'\r\n              : 'bottom'\r\n          : config.axis_y_inner\r\n              ? 'right'\r\n              : 'left';\r\n      $$.y2Orient = config.axis_rotated\r\n          ? config.axis_y2_inner\r\n              ? 'bottom'\r\n              : 'top'\r\n          : config.axis_y2_inner\r\n              ? 'left'\r\n              : 'right';\r\n      $$.subXOrient = config.axis_rotated ? 'left' : 'bottom';\r\n      $$.isLegendRight = config.legend_position === 'right';\r\n      $$.isLegendInset = config.legend_position === 'inset';\r\n      $$.isLegendTop =\r\n          config.legend_inset_anchor === 'top-left' ||\r\n              config.legend_inset_anchor === 'top-right';\r\n      $$.isLegendLeft =\r\n          config.legend_inset_anchor === 'top-left' ||\r\n              config.legend_inset_anchor === 'bottom-left';\r\n      $$.legendStep = 0;\r\n      $$.legendItemWidth = 0;\r\n      $$.legendItemHeight = 0;\r\n      $$.currentMaxTickWidths = {\r\n          x: 0,\r\n          y: 0,\r\n          y2: 0\r\n      };\r\n      $$.rotated_padding_left = 30;\r\n      $$.rotated_padding_right = config.axis_rotated && !config.axis_x_show ? 0 : 30;\r\n      $$.rotated_padding_top = 5;\r\n      $$.withoutFadeIn = {};\r\n      $$.intervalForObserveInserted = undefined;\r\n      $$.axes.subx = d3.selectAll([]); // needs when excluding subchart.js\r\n  };\r\n  ChartInternal.prototype.initChartElements = function () {\r\n      if (this.initBar) {\r\n          this.initBar();\r\n      }\r\n      if (this.initLine) {\r\n          this.initLine();\r\n      }\r\n      if (this.initArc) {\r\n          this.initArc();\r\n      }\r\n      if (this.initGauge) {\r\n          this.initGauge();\r\n      }\r\n      if (this.initText) {\r\n          this.initText();\r\n      }\r\n  };\r\n  ChartInternal.prototype.initWithData = function (data) {\r\n      var $$ = this, d3 = $$.d3, config = $$.config;\r\n      var defs, main, binding = true;\r\n      $$.axis = new AxisClass($$);\r\n      if (!config.bindto) {\r\n          $$.selectChart = d3.selectAll([]);\r\n      }\r\n      else if (typeof config.bindto.node === 'function') {\r\n          $$.selectChart = config.bindto;\r\n      }\r\n      else {\r\n          $$.selectChart = d3.select(config.bindto);\r\n      }\r\n      if ($$.selectChart.empty()) {\r\n          $$.selectChart = d3\r\n              .select(document.createElement('div'))\r\n              .style('opacity', 0);\r\n          $$.observeInserted($$.selectChart);\r\n          binding = false;\r\n      }\r\n      $$.selectChart.html('').classed('c3', true);\r\n      // Init data as targets\r\n      $$.data.xs = {};\r\n      $$.data.targets = $$.convertDataToTargets(data);\r\n      if (config.data_filter) {\r\n          $$.data.targets = $$.data.targets.filter(config.data_filter);\r\n      }\r\n      // Set targets to hide if needed\r\n      if (config.data_hide) {\r\n          $$.addHiddenTargetIds(config.data_hide === true\r\n              ? $$.mapToIds($$.data.targets)\r\n              : config.data_hide);\r\n      }\r\n      if (config.legend_hide) {\r\n          $$.addHiddenLegendIds(config.legend_hide === true\r\n              ? $$.mapToIds($$.data.targets)\r\n              : config.legend_hide);\r\n      }\r\n      if ($$.isStanfordGraphType()) {\r\n          $$.initStanfordData();\r\n      }\r\n      // Init sizes and scales\r\n      $$.updateSizes();\r\n      $$.updateScales();\r\n      // Set domains for each scale\r\n      $$.x.domain(d3.extent($$.getXDomain($$.data.targets)));\r\n      $$.y.domain($$.getYDomain($$.data.targets, 'y'));\r\n      $$.y2.domain($$.getYDomain($$.data.targets, 'y2'));\r\n      $$.subX.domain($$.x.domain());\r\n      $$.subY.domain($$.y.domain());\r\n      $$.subY2.domain($$.y2.domain());\r\n      // Save original x domain for zoom update\r\n      $$.orgXDomain = $$.x.domain();\r\n      /*-- Basic Elements --*/\r\n      // Define svgs\r\n      $$.svg = $$.selectChart\r\n          .append('svg')\r\n          .style('overflow', 'hidden')\r\n          .on('mouseenter', function () {\r\n          return config.onmouseover.call($$);\r\n      })\r\n          .on('mouseleave', function () {\r\n          return config.onmouseout.call($$);\r\n      });\r\n      if ($$.config.svg_classname) {\r\n          $$.svg.attr('class', $$.config.svg_classname);\r\n      }\r\n      // Define defs\r\n      defs = $$.svg.append('defs');\r\n      $$.clipChart = $$.appendClip(defs, $$.clipId);\r\n      $$.clipXAxis = $$.appendClip(defs, $$.clipIdForXAxis);\r\n      $$.clipYAxis = $$.appendClip(defs, $$.clipIdForYAxis);\r\n      $$.clipGrid = $$.appendClip(defs, $$.clipIdForGrid);\r\n      $$.clipSubchart = $$.appendClip(defs, $$.clipIdForSubchart);\r\n      $$.updateSvgSize();\r\n      // Define regions\r\n      main = $$.main = $$.svg.append('g').attr('transform', $$.getTranslate('main'));\r\n      if ($$.initPie) {\r\n          $$.initPie();\r\n      }\r\n      if ($$.initDragZoom) {\r\n          $$.initDragZoom();\r\n      }\r\n      if (config.subchart_show && $$.initSubchart) {\r\n          $$.initSubchart();\r\n      }\r\n      if ($$.initTooltip) {\r\n          $$.initTooltip();\r\n      }\r\n      if ($$.initLegend) {\r\n          $$.initLegend();\r\n      }\r\n      if ($$.initTitle) {\r\n          $$.initTitle();\r\n      }\r\n      if ($$.initZoom) {\r\n          $$.initZoom();\r\n      }\r\n      if ($$.isStanfordGraphType()) {\r\n          $$.drawColorScale();\r\n      }\r\n      // Update selection based on size and scale\r\n      // TODO: currently this must be called after initLegend because of update of sizes, but it should be done in initSubchart.\r\n      if (config.subchart_show && $$.initSubchartBrush) {\r\n          $$.initSubchartBrush();\r\n      }\r\n      /*-- Main Region --*/\r\n      // text when empty\r\n      main\r\n          .append('text')\r\n          .attr('class', CLASS.text + ' ' + CLASS.empty)\r\n          .attr('text-anchor', 'middle') // horizontal centering of text at x position in all browsers.\r\n          .attr('dominant-baseline', 'middle'); // vertical centering of text at y position in all browsers, except IE.\r\n      // Regions\r\n      $$.initRegion();\r\n      // Grids\r\n      $$.initGrid();\r\n      // Define g for chart area\r\n      main\r\n          .append('g')\r\n          .attr('clip-path', $$.clipPath)\r\n          .attr('class', CLASS.chart);\r\n      // Grid lines\r\n      if (config.grid_lines_front) {\r\n          $$.initGridLines();\r\n      }\r\n      $$.initStanfordElements();\r\n      // Cover whole with rects for events\r\n      $$.initEventRect();\r\n      // Define g for chart\r\n      $$.initChartElements();\r\n      // Add Axis\r\n      $$.axis.init();\r\n      // Set targets\r\n      $$.updateTargets($$.data.targets);\r\n      // Set default extent if defined\r\n      if (config.axis_x_selection) {\r\n          $$.brush.selectionAsValue($$.getDefaultSelection());\r\n      }\r\n      // Draw with targets\r\n      if (binding) {\r\n          $$.updateDimension();\r\n          $$.config.oninit.call($$);\r\n          $$.redraw({\r\n              withTransition: false,\r\n              withTransform: true,\r\n              withUpdateXDomain: true,\r\n              withUpdateOrgXDomain: true,\r\n              withTransitionForAxis: false\r\n          });\r\n      }\r\n      // Bind to resize event\r\n      $$.bindResize();\r\n      // Bind to window focus event\r\n      $$.bindWindowFocus();\r\n      // export element of the chart\r\n      $$.api.element = $$.selectChart.node();\r\n  };\r\n  ChartInternal.prototype.smoothLines = function (el, type) {\r\n      var $$ = this;\r\n      if (type === 'grid') {\r\n          el.each(function () {\r\n              var g = $$.d3.select(this), x1 = g.attr('x1'), x2 = g.attr('x2'), y1 = g.attr('y1'), y2 = g.attr('y2');\r\n              g.attr({\r\n                  x1: Math.ceil(x1),\r\n                  x2: Math.ceil(x2),\r\n                  y1: Math.ceil(y1),\r\n                  y2: Math.ceil(y2)\r\n              });\r\n          });\r\n      }\r\n  };\r\n  ChartInternal.prototype.updateSizes = function () {\r\n      var $$ = this, config = $$.config;\r\n      var legendHeight = $$.legend ? $$.getLegendHeight() : 0, legendWidth = $$.legend ? $$.getLegendWidth() : 0, legendHeightForBottom = $$.isLegendRight || $$.isLegendInset ? 0 : legendHeight, hasArc = $$.hasArcType(), xAxisHeight = config.axis_rotated || hasArc ? 0 : $$.getHorizontalAxisHeight('x'), subchartXAxisHeight = config.axis_rotated || hasArc ? 0 : $$.getHorizontalAxisHeight('x', true), subchartHeight = config.subchart_show && !hasArc\r\n          ? config.subchart_size_height + subchartXAxisHeight\r\n          : 0;\r\n      $$.currentWidth = $$.getCurrentWidth();\r\n      $$.currentHeight = $$.getCurrentHeight();\r\n      // for main\r\n      $$.margin = config.axis_rotated\r\n          ? {\r\n              top: $$.getHorizontalAxisHeight('y2') + $$.getCurrentPaddingTop(),\r\n              right: hasArc ? 0 : $$.getCurrentPaddingRight(),\r\n              bottom: $$.getHorizontalAxisHeight('y') +\r\n                  legendHeightForBottom +\r\n                  $$.getCurrentPaddingBottom(),\r\n              left: subchartHeight + (hasArc ? 0 : $$.getCurrentPaddingLeft())\r\n          }\r\n          : {\r\n              top: 4 + $$.getCurrentPaddingTop(),\r\n              right: hasArc ? 0 : $$.getCurrentPaddingRight(),\r\n              bottom: xAxisHeight +\r\n                  subchartHeight +\r\n                  legendHeightForBottom +\r\n                  $$.getCurrentPaddingBottom(),\r\n              left: hasArc ? 0 : $$.getCurrentPaddingLeft()\r\n          };\r\n      // for subchart\r\n      $$.margin2 = config.axis_rotated\r\n          ? {\r\n              top: $$.margin.top,\r\n              right: NaN,\r\n              bottom: 20 + legendHeightForBottom,\r\n              left: $$.rotated_padding_left\r\n          }\r\n          : {\r\n              top: $$.currentHeight - subchartHeight - legendHeightForBottom,\r\n              right: NaN,\r\n              bottom: subchartXAxisHeight + legendHeightForBottom,\r\n              left: $$.margin.left\r\n          };\r\n      // for legend\r\n      $$.margin3 = {\r\n          top: 0,\r\n          right: NaN,\r\n          bottom: 0,\r\n          left: 0\r\n      };\r\n      if ($$.updateSizeForLegend) {\r\n          $$.updateSizeForLegend(legendHeight, legendWidth);\r\n      }\r\n      $$.width = $$.currentWidth - $$.margin.left - $$.margin.right;\r\n      $$.height = $$.currentHeight - $$.margin.top - $$.margin.bottom;\r\n      if ($$.width < 0) {\r\n          $$.width = 0;\r\n      }\r\n      if ($$.height < 0) {\r\n          $$.height = 0;\r\n      }\r\n      $$.width2 = config.axis_rotated\r\n          ? $$.margin.left - $$.rotated_padding_left - $$.rotated_padding_right\r\n          : $$.width;\r\n      $$.height2 = config.axis_rotated\r\n          ? $$.height\r\n          : $$.currentHeight - $$.margin2.top - $$.margin2.bottom;\r\n      if ($$.width2 < 0) {\r\n          $$.width2 = 0;\r\n      }\r\n      if ($$.height2 < 0) {\r\n          $$.height2 = 0;\r\n      }\r\n      // for arc\r\n      $$.arcWidth = $$.width - ($$.isLegendRight ? legendWidth + 10 : 0);\r\n      $$.arcHeight = $$.height - ($$.isLegendRight ? 0 : 10);\r\n      if ($$.hasType('gauge') && !config.gauge_fullCircle) {\r\n          $$.arcHeight += $$.height - $$.getGaugeLabelHeight();\r\n      }\r\n      if ($$.updateRadius) {\r\n          $$.updateRadius();\r\n      }\r\n      if ($$.isLegendRight && hasArc) {\r\n          $$.margin3.left = $$.arcWidth / 2 + $$.radiusExpanded * 1.1;\r\n      }\r\n  };\r\n  ChartInternal.prototype.updateTargets = function (targets) {\r\n      var $$ = this, config = $$.config;\r\n      /*-- Main --*/\r\n      //-- Text --//\r\n      $$.updateTargetsForText(targets);\r\n      //-- Bar --//\r\n      $$.updateTargetsForBar(targets);\r\n      //-- Line --//\r\n      $$.updateTargetsForLine(targets);\r\n      //-- Arc --//\r\n      if ($$.hasArcType() && $$.updateTargetsForArc) {\r\n          $$.updateTargetsForArc(targets);\r\n      }\r\n      /*-- Sub --*/\r\n      if (config.subchart_show && $$.updateTargetsForSubchart) {\r\n          $$.updateTargetsForSubchart(targets);\r\n      }\r\n      // Fade-in each chart\r\n      $$.showTargets();\r\n  };\r\n  ChartInternal.prototype.showTargets = function () {\r\n      var $$ = this;\r\n      $$.svg\r\n          .selectAll('.' + CLASS.target)\r\n          .filter(function (d) {\r\n          return $$.isTargetToShow(d.id);\r\n      })\r\n          .transition()\r\n          .duration($$.config.transition_duration)\r\n          .style('opacity', 1);\r\n  };\r\n  ChartInternal.prototype.redraw = function (options, transitions) {\r\n      var $$ = this, main = $$.main, d3 = $$.d3, config = $$.config;\r\n      var areaIndices = $$.getShapeIndices($$.isAreaType), barIndices = $$.getShapeIndices($$.isBarType), lineIndices = $$.getShapeIndices($$.isLineType);\r\n      var withY, withSubchart, withTransition, withTransitionForExit, withTransitionForAxis, withTransform, withUpdateXDomain, withUpdateOrgXDomain, withTrimXDomain, withLegend, withEventRect, withDimension, withUpdateXAxis;\r\n      var hideAxis = $$.hasArcType();\r\n      var drawArea, drawBar, drawLine, xForText, yForText;\r\n      var duration, durationForExit, durationForAxis;\r\n      var transitionsToWait, waitForDraw, flow, transition;\r\n      var targetsToShow = $$.filterTargetsToShow($$.data.targets), tickValues, i, intervalForCulling, xDomainForZoom;\r\n      var xv = $$.xv.bind($$), cx, cy;\r\n      options = options || {};\r\n      withY = getOption(options, 'withY', true);\r\n      withSubchart = getOption(options, 'withSubchart', true);\r\n      withTransition = getOption(options, 'withTransition', true);\r\n      withTransform = getOption(options, 'withTransform', false);\r\n      withUpdateXDomain = getOption(options, 'withUpdateXDomain', false);\r\n      withUpdateOrgXDomain = getOption(options, 'withUpdateOrgXDomain', false);\r\n      withTrimXDomain = getOption(options, 'withTrimXDomain', true);\r\n      withUpdateXAxis = getOption(options, 'withUpdateXAxis', withUpdateXDomain);\r\n      withLegend = getOption(options, 'withLegend', false);\r\n      withEventRect = getOption(options, 'withEventRect', true);\r\n      withDimension = getOption(options, 'withDimension', true);\r\n      withTransitionForExit = getOption(options, 'withTransitionForExit', withTransition);\r\n      withTransitionForAxis = getOption(options, 'withTransitionForAxis', withTransition);\r\n      duration = withTransition ? config.transition_duration : 0;\r\n      durationForExit = withTransitionForExit ? duration : 0;\r\n      durationForAxis = withTransitionForAxis ? duration : 0;\r\n      transitions = transitions || $$.axis.generateTransitions(durationForAxis);\r\n      // update legend and transform each g\r\n      if (withLegend && config.legend_show) {\r\n          $$.updateLegend($$.mapToIds($$.data.targets), options, transitions);\r\n      }\r\n      else if (withDimension) {\r\n          // need to update dimension (e.g. axis.y.tick.values) because y tick values should change\r\n          // no need to update axis in it because they will be updated in redraw()\r\n          $$.updateDimension(true);\r\n      }\r\n      // MEMO: needed for grids calculation\r\n      if ($$.isCategorized() && targetsToShow.length === 0) {\r\n          $$.x.domain([0, $$.axes.x.selectAll('.tick').size()]);\r\n      }\r\n      if (targetsToShow.length) {\r\n          $$.updateXDomain(targetsToShow, withUpdateXDomain, withUpdateOrgXDomain, withTrimXDomain);\r\n          if (!config.axis_x_tick_values) {\r\n              tickValues = $$.axis.updateXAxisTickValues(targetsToShow);\r\n          }\r\n      }\r\n      else {\r\n          $$.xAxis.tickValues([]);\r\n          $$.subXAxis.tickValues([]);\r\n      }\r\n      if (config.zoom_rescale && !options.flow) {\r\n          xDomainForZoom = $$.x.orgDomain();\r\n      }\r\n      $$.y.domain($$.getYDomain(targetsToShow, 'y', xDomainForZoom));\r\n      $$.y2.domain($$.getYDomain(targetsToShow, 'y2', xDomainForZoom));\r\n      if (!config.axis_y_tick_values && config.axis_y_tick_count) {\r\n          $$.yAxis.tickValues($$.axis.generateTickValues($$.y.domain(), config.axis_y_tick_count));\r\n      }\r\n      if (!config.axis_y2_tick_values && config.axis_y2_tick_count) {\r\n          $$.y2Axis.tickValues($$.axis.generateTickValues($$.y2.domain(), config.axis_y2_tick_count));\r\n      }\r\n      // axes\r\n      $$.axis.redraw(durationForAxis, hideAxis);\r\n      // Update axis label\r\n      $$.axis.updateLabels(withTransition);\r\n      // show/hide if manual culling needed\r\n      if ((withUpdateXDomain || withUpdateXAxis) && targetsToShow.length) {\r\n          if (config.axis_x_tick_culling && tickValues) {\r\n              for (i = 1; i < tickValues.length; i++) {\r\n                  if (tickValues.length / i < config.axis_x_tick_culling_max) {\r\n                      intervalForCulling = i;\r\n                      break;\r\n                  }\r\n              }\r\n              $$.svg.selectAll('.' + CLASS.axisX + ' .tick text').each(function (e) {\r\n                  var index = tickValues.indexOf(e);\r\n                  if (index >= 0) {\r\n                      d3.select(this).style('display', index % intervalForCulling ? 'none' : 'block');\r\n                  }\r\n              });\r\n          }\r\n          else {\r\n              $$.svg\r\n                  .selectAll('.' + CLASS.axisX + ' .tick text')\r\n                  .style('display', 'block');\r\n          }\r\n      }\r\n      // setup drawer - MEMO: these must be called after axis updated\r\n      drawArea = $$.generateDrawArea\r\n          ? $$.generateDrawArea(areaIndices, false)\r\n          : undefined;\r\n      drawBar = $$.generateDrawBar ? $$.generateDrawBar(barIndices) : undefined;\r\n      drawLine = $$.generateDrawLine\r\n          ? $$.generateDrawLine(lineIndices, false)\r\n          : undefined;\r\n      xForText = $$.generateXYForText(areaIndices, barIndices, lineIndices, true);\r\n      yForText = $$.generateXYForText(areaIndices, barIndices, lineIndices, false);\r\n      // update circleY based on updated parameters\r\n      $$.updateCircleY();\r\n      // generate circle x/y functions depending on updated params\r\n      cx = ($$.config.axis_rotated ? $$.circleY : $$.circleX).bind($$);\r\n      cy = ($$.config.axis_rotated ? $$.circleX : $$.circleY).bind($$);\r\n      // Update sub domain\r\n      if (withY) {\r\n          $$.subY.domain($$.getYDomain(targetsToShow, 'y'));\r\n          $$.subY2.domain($$.getYDomain(targetsToShow, 'y2'));\r\n      }\r\n      // xgrid focus\r\n      $$.updateXgridFocus();\r\n      // Data empty label positioning and text.\r\n      main\r\n          .select('text.' + CLASS.text + '.' + CLASS.empty)\r\n          .attr('x', $$.width / 2)\r\n          .attr('y', $$.height / 2)\r\n          .text(config.data_empty_label_text)\r\n          .transition()\r\n          .style('opacity', targetsToShow.length ? 0 : 1);\r\n      // event rect\r\n      if (withEventRect) {\r\n          $$.redrawEventRect();\r\n      }\r\n      // grid\r\n      $$.updateGrid(duration);\r\n      $$.updateStanfordElements(duration);\r\n      // rect for regions\r\n      $$.updateRegion(duration);\r\n      // bars\r\n      $$.updateBar(durationForExit);\r\n      // lines, areas and circles\r\n      $$.updateLine(durationForExit);\r\n      $$.updateArea(durationForExit);\r\n      $$.updateCircle(cx, cy);\r\n      // text\r\n      if ($$.hasDataLabel()) {\r\n          $$.updateText(xForText, yForText, durationForExit);\r\n      }\r\n      // title\r\n      if ($$.redrawTitle) {\r\n          $$.redrawTitle();\r\n      }\r\n      // arc\r\n      if ($$.redrawArc) {\r\n          $$.redrawArc(duration, durationForExit, withTransform);\r\n      }\r\n      // subchart\r\n      if (config.subchart_show && $$.redrawSubchart) {\r\n          $$.redrawSubchart(withSubchart, transitions, duration, durationForExit, areaIndices, barIndices, lineIndices);\r\n      }\r\n      if ($$.isStanfordGraphType()) {\r\n          $$.drawColorScale();\r\n      }\r\n      // circles for select\r\n      main\r\n          .selectAll('.' + CLASS.selectedCircles)\r\n          .filter($$.isBarType.bind($$))\r\n          .selectAll('circle')\r\n          .remove();\r\n      if (options.flow) {\r\n          flow = $$.generateFlow({\r\n              targets: targetsToShow,\r\n              flow: options.flow,\r\n              duration: options.flow.duration,\r\n              drawBar: drawBar,\r\n              drawLine: drawLine,\r\n              drawArea: drawArea,\r\n              cx: cx,\r\n              cy: cy,\r\n              xv: xv,\r\n              xForText: xForText,\r\n              yForText: yForText\r\n          });\r\n      }\r\n      if (duration && $$.isTabVisible()) {\r\n          // Only use transition if tab visible. See #938.\r\n          // transition should be derived from one transition\r\n          transition = d3.transition().duration(duration);\r\n          transitionsToWait = [];\r\n          [\r\n              $$.redrawBar(drawBar, true, transition),\r\n              $$.redrawLine(drawLine, true, transition),\r\n              $$.redrawArea(drawArea, true, transition),\r\n              $$.redrawCircle(cx, cy, true, transition),\r\n              $$.redrawText(xForText, yForText, options.flow, true, transition),\r\n              $$.redrawRegion(true, transition),\r\n              $$.redrawGrid(true, transition)\r\n          ].forEach(function (transitions) {\r\n              transitions.forEach(function (transition) {\r\n                  transitionsToWait.push(transition);\r\n              });\r\n          });\r\n          // Wait for end of transitions to call flow and onrendered callback\r\n          waitForDraw = $$.generateWait();\r\n          transitionsToWait.forEach(function (t) {\r\n              waitForDraw.add(t);\r\n          });\r\n          waitForDraw(function () {\r\n              if (flow) {\r\n                  flow();\r\n              }\r\n              if (config.onrendered) {\r\n                  config.onrendered.call($$);\r\n              }\r\n          });\r\n      }\r\n      else {\r\n          $$.redrawBar(drawBar);\r\n          $$.redrawLine(drawLine);\r\n          $$.redrawArea(drawArea);\r\n          $$.redrawCircle(cx, cy);\r\n          $$.redrawText(xForText, yForText, options.flow);\r\n          $$.redrawRegion();\r\n          $$.redrawGrid();\r\n          if (flow) {\r\n              flow();\r\n          }\r\n          if (config.onrendered) {\r\n              config.onrendered.call($$);\r\n          }\r\n      }\r\n      // update fadein condition\r\n      $$.mapToIds($$.data.targets).forEach(function (id) {\r\n          $$.withoutFadeIn[id] = true;\r\n      });\r\n  };\r\n  ChartInternal.prototype.updateAndRedraw = function (options) {\r\n      var $$ = this, config = $$.config, transitions;\r\n      options = options || {};\r\n      // same with redraw\r\n      options.withTransition = getOption(options, 'withTransition', true);\r\n      options.withTransform = getOption(options, 'withTransform', false);\r\n      options.withLegend = getOption(options, 'withLegend', false);\r\n      // NOT same with redraw\r\n      options.withUpdateXDomain = getOption(options, 'withUpdateXDomain', true);\r\n      options.withUpdateOrgXDomain = getOption(options, 'withUpdateOrgXDomain', true);\r\n      options.withTransitionForExit = false;\r\n      options.withTransitionForTransform = getOption(options, 'withTransitionForTransform', options.withTransition);\r\n      // MEMO: this needs to be called before updateLegend and it means this ALWAYS needs to be called)\r\n      $$.updateSizes();\r\n      // MEMO: called in updateLegend in redraw if withLegend\r\n      if (!(options.withLegend && config.legend_show)) {\r\n          transitions = $$.axis.generateTransitions(options.withTransitionForAxis ? config.transition_duration : 0);\r\n          // Update scales\r\n          $$.updateScales();\r\n          $$.updateSvgSize();\r\n          // Update g positions\r\n          $$.transformAll(options.withTransitionForTransform, transitions);\r\n      }\r\n      // Draw with new sizes & scales\r\n      $$.redraw(options, transitions);\r\n  };\r\n  ChartInternal.prototype.redrawWithoutRescale = function () {\r\n      this.redraw({\r\n          withY: false,\r\n          withSubchart: false,\r\n          withEventRect: false,\r\n          withTransitionForAxis: false\r\n      });\r\n  };\r\n  ChartInternal.prototype.isTimeSeries = function () {\r\n      return this.config.axis_x_type === 'timeseries';\r\n  };\r\n  ChartInternal.prototype.isCategorized = function () {\r\n      return this.config.axis_x_type.indexOf('categor') >= 0;\r\n  };\r\n  ChartInternal.prototype.isCustomX = function () {\r\n      var $$ = this, config = $$.config;\r\n      return !$$.isTimeSeries() && (config.data_x || notEmpty(config.data_xs));\r\n  };\r\n  ChartInternal.prototype.isTimeSeriesY = function () {\r\n      return this.config.axis_y_type === 'timeseries';\r\n  };\r\n  ChartInternal.prototype.getTranslate = function (target) {\r\n      var $$ = this, config = $$.config, x, y;\r\n      if (target === 'main') {\r\n          x = asHalfPixel($$.margin.left);\r\n          y = asHalfPixel($$.margin.top);\r\n      }\r\n      else if (target === 'context') {\r\n          x = asHalfPixel($$.margin2.left);\r\n          y = asHalfPixel($$.margin2.top);\r\n      }\r\n      else if (target === 'legend') {\r\n          x = $$.margin3.left;\r\n          y = $$.margin3.top;\r\n      }\r\n      else if (target === 'x') {\r\n          x = 0;\r\n          y = config.axis_rotated ? 0 : $$.height;\r\n      }\r\n      else if (target === 'y') {\r\n          x = 0;\r\n          y = config.axis_rotated ? $$.height : 0;\r\n      }\r\n      else if (target === 'y2') {\r\n          x = config.axis_rotated ? 0 : $$.width;\r\n          y = config.axis_rotated ? 1 : 0;\r\n      }\r\n      else if (target === 'subx') {\r\n          x = 0;\r\n          y = config.axis_rotated ? 0 : $$.height2;\r\n      }\r\n      else if (target === 'arc') {\r\n          x = $$.arcWidth / 2;\r\n          y = $$.arcHeight / 2 - ($$.hasType('gauge') ? 6 : 0); // to prevent wrong display of min and max label\r\n      }\r\n      return 'translate(' + x + ',' + y + ')';\r\n  };\r\n  ChartInternal.prototype.initialOpacity = function (d) {\r\n      return d.value !== null && this.withoutFadeIn[d.id] ? 1 : 0;\r\n  };\r\n  ChartInternal.prototype.initialOpacityForCircle = function (d) {\r\n      return d.value !== null && this.withoutFadeIn[d.id]\r\n          ? this.opacityForCircle(d)\r\n          : 0;\r\n  };\r\n  ChartInternal.prototype.opacityForCircle = function (d) {\r\n      var isPointShouldBeShown = isFunction(this.config.point_show)\r\n          ? this.config.point_show(d)\r\n          : this.config.point_show;\r\n      var opacity = isPointShouldBeShown || this.isStanfordType(d) ? 1 : 0;\r\n      return isValue(d.value) ? (this.isScatterType(d) ? 0.5 : opacity) : 0;\r\n  };\r\n  ChartInternal.prototype.opacityForText = function () {\r\n      return this.hasDataLabel() ? 1 : 0;\r\n  };\r\n  ChartInternal.prototype.xx = function (d) {\r\n      return d ? this.x(d.x) : null;\r\n  };\r\n  ChartInternal.prototype.xvCustom = function (d, xyValue) {\r\n      var $$ = this, value = xyValue ? d[xyValue] : d.value;\r\n      if ($$.isTimeSeries()) {\r\n          value = $$.parseDate(d.value);\r\n      }\r\n      else if ($$.isCategorized() && typeof d.value === 'string') {\r\n          value = $$.config.axis_x_categories.indexOf(d.value);\r\n      }\r\n      return Math.ceil($$.x(value));\r\n  };\r\n  ChartInternal.prototype.yvCustom = function (d, xyValue) {\r\n      var $$ = this, yScale = d.axis && d.axis === 'y2' ? $$.y2 : $$.y, value = xyValue ? d[xyValue] : d.value;\r\n      return Math.ceil(yScale(value));\r\n  };\r\n  ChartInternal.prototype.xv = function (d) {\r\n      var $$ = this, value = d.value;\r\n      if ($$.isTimeSeries()) {\r\n          value = $$.parseDate(d.value);\r\n      }\r\n      else if ($$.isCategorized() && typeof d.value === 'string') {\r\n          value = $$.config.axis_x_categories.indexOf(d.value);\r\n      }\r\n      return Math.ceil($$.x(value));\r\n  };\r\n  ChartInternal.prototype.yv = function (d) {\r\n      var $$ = this, yScale = d.axis && d.axis === 'y2' ? $$.y2 : $$.y;\r\n      return Math.ceil(yScale(d.value));\r\n  };\r\n  ChartInternal.prototype.subxx = function (d) {\r\n      return d ? this.subX(d.x) : null;\r\n  };\r\n  ChartInternal.prototype.transformMain = function (withTransition, transitions) {\r\n      var $$ = this, xAxis, yAxis, y2Axis;\r\n      if (transitions && transitions.axisX) {\r\n          xAxis = transitions.axisX;\r\n      }\r\n      else {\r\n          xAxis = $$.main.select('.' + CLASS.axisX);\r\n          if (withTransition) {\r\n              xAxis = xAxis.transition();\r\n          }\r\n      }\r\n      if (transitions && transitions.axisY) {\r\n          yAxis = transitions.axisY;\r\n      }\r\n      else {\r\n          yAxis = $$.main.select('.' + CLASS.axisY);\r\n          if (withTransition) {\r\n              yAxis = yAxis.transition();\r\n          }\r\n      }\r\n      if (transitions && transitions.axisY2) {\r\n          y2Axis = transitions.axisY2;\r\n      }\r\n      else {\r\n          y2Axis = $$.main.select('.' + CLASS.axisY2);\r\n          if (withTransition) {\r\n              y2Axis = y2Axis.transition();\r\n          }\r\n      }\r\n      (withTransition ? $$.main.transition() : $$.main).attr('transform', $$.getTranslate('main'));\r\n      xAxis.attr('transform', $$.getTranslate('x'));\r\n      yAxis.attr('transform', $$.getTranslate('y'));\r\n      y2Axis.attr('transform', $$.getTranslate('y2'));\r\n      $$.main\r\n          .select('.' + CLASS.chartArcs)\r\n          .attr('transform', $$.getTranslate('arc'));\r\n  };\r\n  ChartInternal.prototype.transformAll = function (withTransition, transitions) {\r\n      var $$ = this;\r\n      $$.transformMain(withTransition, transitions);\r\n      if ($$.config.subchart_show) {\r\n          $$.transformContext(withTransition, transitions);\r\n      }\r\n      if ($$.legend) {\r\n          $$.transformLegend(withTransition);\r\n      }\r\n  };\r\n  ChartInternal.prototype.updateSvgSize = function () {\r\n      var $$ = this, brush = $$.svg.select(\".\" + CLASS.brush + \" .overlay\");\r\n      $$.svg.attr('width', $$.currentWidth).attr('height', $$.currentHeight);\r\n      $$.svg\r\n          .selectAll(['#' + $$.clipId, '#' + $$.clipIdForGrid])\r\n          .select('rect')\r\n          .attr('width', $$.width)\r\n          .attr('height', $$.height);\r\n      $$.svg\r\n          .select('#' + $$.clipIdForXAxis)\r\n          .select('rect')\r\n          .attr('x', $$.getXAxisClipX.bind($$))\r\n          .attr('y', $$.getXAxisClipY.bind($$))\r\n          .attr('width', $$.getXAxisClipWidth.bind($$))\r\n          .attr('height', $$.getXAxisClipHeight.bind($$));\r\n      $$.svg\r\n          .select('#' + $$.clipIdForYAxis)\r\n          .select('rect')\r\n          .attr('x', $$.getYAxisClipX.bind($$))\r\n          .attr('y', $$.getYAxisClipY.bind($$))\r\n          .attr('width', $$.getYAxisClipWidth.bind($$))\r\n          .attr('height', $$.getYAxisClipHeight.bind($$));\r\n      $$.svg\r\n          .select('#' + $$.clipIdForSubchart)\r\n          .select('rect')\r\n          .attr('width', $$.width)\r\n          .attr('height', (brush.size() && brush.attr('height')) || 0);\r\n      // MEMO: parent div's height will be bigger than svg when <!DOCTYPE html>\r\n      $$.selectChart.style('max-height', $$.currentHeight + 'px');\r\n  };\r\n  ChartInternal.prototype.updateDimension = function (withoutAxis) {\r\n      var $$ = this;\r\n      if (!withoutAxis) {\r\n          if ($$.config.axis_rotated) {\r\n              $$.axes.x.call($$.xAxis);\r\n              $$.axes.subx.call($$.subXAxis);\r\n          }\r\n          else {\r\n              $$.axes.y.call($$.yAxis);\r\n              $$.axes.y2.call($$.y2Axis);\r\n          }\r\n      }\r\n      $$.updateSizes();\r\n      $$.updateScales();\r\n      $$.updateSvgSize();\r\n      $$.transformAll(false);\r\n  };\r\n  ChartInternal.prototype.observeInserted = function (selection) {\r\n      var $$ = this, observer;\r\n      if (typeof MutationObserver === 'undefined') {\r\n          window.console.error('MutationObserver not defined.');\r\n          return;\r\n      }\r\n      observer = new MutationObserver(function (mutations) {\r\n          mutations.forEach(function (mutation) {\r\n              if (mutation.type === 'childList' && mutation.previousSibling) {\r\n                  observer.disconnect();\r\n                  // need to wait for completion of load because size calculation requires the actual sizes determined after that completion\r\n                  $$.intervalForObserveInserted = window.setInterval(function () {\r\n                      // parentNode will NOT be null when completed\r\n                      if (selection.node().parentNode) {\r\n                          window.clearInterval($$.intervalForObserveInserted);\r\n                          $$.updateDimension();\r\n                          if ($$.brush) {\r\n                              $$.brush.update();\r\n                          }\r\n                          $$.config.oninit.call($$);\r\n                          $$.redraw({\r\n                              withTransform: true,\r\n                              withUpdateXDomain: true,\r\n                              withUpdateOrgXDomain: true,\r\n                              withTransition: false,\r\n                              withTransitionForTransform: false,\r\n                              withLegend: true\r\n                          });\r\n                          selection.transition().style('opacity', 1);\r\n                      }\r\n                  }, 10);\r\n              }\r\n          });\r\n      });\r\n      observer.observe(selection.node(), {\r\n          attributes: true,\r\n          childList: true,\r\n          characterData: true\r\n      });\r\n  };\r\n  /**\r\n   * Binds handlers to the window resize event.\r\n   */\r\n  ChartInternal.prototype.bindResize = function () {\r\n      var $$ = this, config = $$.config;\r\n      $$.resizeFunction = $$.generateResize(); // need to call .remove\r\n      $$.resizeFunction.add(function () {\r\n          config.onresize.call($$);\r\n      });\r\n      if (config.resize_auto) {\r\n          $$.resizeFunction.add(function () {\r\n              if ($$.resizeTimeout !== undefined) {\r\n                  window.clearTimeout($$.resizeTimeout);\r\n              }\r\n              $$.resizeTimeout = window.setTimeout(function () {\r\n                  delete $$.resizeTimeout;\r\n                  $$.updateAndRedraw({\r\n                      withUpdateXDomain: false,\r\n                      withUpdateOrgXDomain: false,\r\n                      withTransition: false,\r\n                      withTransitionForTransform: false,\r\n                      withLegend: true\r\n                  });\r\n                  if ($$.brush) {\r\n                      $$.brush.update();\r\n                  }\r\n              }, 100);\r\n          });\r\n      }\r\n      $$.resizeFunction.add(function () {\r\n          config.onresized.call($$);\r\n      });\r\n      $$.resizeIfElementDisplayed = function () {\r\n          // if element not displayed skip it\r\n          if ($$.api == null || !$$.api.element.offsetParent) {\r\n              return;\r\n          }\r\n          $$.resizeFunction();\r\n      };\r\n      window.addEventListener('resize', $$.resizeIfElementDisplayed, false);\r\n  };\r\n  /**\r\n   * Binds handlers to the window focus event.\r\n   */\r\n  ChartInternal.prototype.bindWindowFocus = function () {\r\n      var _this = this;\r\n      if (this.windowFocusHandler) {\r\n          // The handler is already set\r\n          return;\r\n      }\r\n      this.windowFocusHandler = function () {\r\n          _this.redraw();\r\n      };\r\n      window.addEventListener('focus', this.windowFocusHandler);\r\n  };\r\n  /**\r\n   * Unbinds from the window focus event.\r\n   */\r\n  ChartInternal.prototype.unbindWindowFocus = function () {\r\n      window.removeEventListener('focus', this.windowFocusHandler);\r\n      delete this.windowFocusHandler;\r\n  };\r\n  ChartInternal.prototype.generateResize = function () {\r\n      var resizeFunctions = [];\r\n      function callResizeFunctions() {\r\n          resizeFunctions.forEach(function (f) {\r\n              f();\r\n          });\r\n      }\r\n      callResizeFunctions.add = function (f) {\r\n          resizeFunctions.push(f);\r\n      };\r\n      callResizeFunctions.remove = function (f) {\r\n          for (var i = 0; i < resizeFunctions.length; i++) {\r\n              if (resizeFunctions[i] === f) {\r\n                  resizeFunctions.splice(i, 1);\r\n                  break;\r\n              }\r\n          }\r\n      };\r\n      return callResizeFunctions;\r\n  };\r\n  ChartInternal.prototype.endall = function (transition, callback) {\r\n      var n = 0;\r\n      transition\r\n          .each(function () {\r\n          ++n;\r\n      })\r\n          .on('end', function () {\r\n          if (!--n) {\r\n              callback.apply(this, arguments);\r\n          }\r\n      });\r\n  };\r\n  ChartInternal.prototype.generateWait = function () {\r\n      var $$ = this;\r\n      var transitionsToWait = [], f = function (callback) {\r\n          var timer = setInterval(function () {\r\n              if (!$$.isTabVisible()) {\r\n                  return;\r\n              }\r\n              var done = 0;\r\n              transitionsToWait.forEach(function (t) {\r\n                  if (t.empty()) {\r\n                      done += 1;\r\n                      return;\r\n                  }\r\n                  try {\r\n                      t.transition();\r\n                  }\r\n                  catch (e) {\r\n                      done += 1;\r\n                  }\r\n              });\r\n              if (done === transitionsToWait.length) {\r\n                  clearInterval(timer);\r\n                  if (callback) {\r\n                      callback();\r\n                  }\r\n              }\r\n          }, 50);\r\n      };\r\n      f.add = function (transition) {\r\n          transitionsToWait.push(transition);\r\n      };\r\n      return f;\r\n  };\r\n  ChartInternal.prototype.parseDate = function (date) {\r\n      var $$ = this, parsedDate;\r\n      if (date instanceof Date) {\r\n          parsedDate = date;\r\n      }\r\n      else if (typeof date === 'string') {\r\n          parsedDate = $$.dataTimeParse(date);\r\n      }\r\n      else if (typeof date === 'object') {\r\n          parsedDate = new Date(+date);\r\n      }\r\n      else if (typeof date === 'number' && !isNaN(date)) {\r\n          parsedDate = new Date(+date);\r\n      }\r\n      if (!parsedDate || isNaN(+parsedDate)) {\r\n          window.console.error(\"Failed to parse x '\" + date + \"' to Date object\");\r\n      }\r\n      return parsedDate;\r\n  };\r\n  ChartInternal.prototype.isTabVisible = function () {\r\n      return !document.hidden;\r\n  };\r\n  ChartInternal.prototype.getPathBox = getPathBox;\r\n  ChartInternal.prototype.CLASS = CLASS;\n\n  /* jshint ignore:start */\r\n  (function () {\r\n      if (!('SVGPathSeg' in window)) {\r\n          // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathSeg\r\n          window.SVGPathSeg = function (type, typeAsLetter, owningPathSegList) {\r\n              this.pathSegType = type;\r\n              this.pathSegTypeAsLetter = typeAsLetter;\r\n              this._owningPathSegList = owningPathSegList;\r\n          };\r\n          window.SVGPathSeg.prototype.classname = 'SVGPathSeg';\r\n          window.SVGPathSeg.PATHSEG_UNKNOWN = 0;\r\n          window.SVGPathSeg.PATHSEG_CLOSEPATH = 1;\r\n          window.SVGPathSeg.PATHSEG_MOVETO_ABS = 2;\r\n          window.SVGPathSeg.PATHSEG_MOVETO_REL = 3;\r\n          window.SVGPathSeg.PATHSEG_LINETO_ABS = 4;\r\n          window.SVGPathSeg.PATHSEG_LINETO_REL = 5;\r\n          window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS = 6;\r\n          window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL = 7;\r\n          window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS = 8;\r\n          window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL = 9;\r\n          window.SVGPathSeg.PATHSEG_ARC_ABS = 10;\r\n          window.SVGPathSeg.PATHSEG_ARC_REL = 11;\r\n          window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS = 12;\r\n          window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL = 13;\r\n          window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS = 14;\r\n          window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL = 15;\r\n          window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS = 16;\r\n          window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL = 17;\r\n          window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS = 18;\r\n          window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL = 19;\r\n          // Notify owning PathSegList on any changes so they can be synchronized back to the path element.\r\n          window.SVGPathSeg.prototype._segmentChanged = function () {\r\n              if (this._owningPathSegList)\r\n                  this._owningPathSegList.segmentChanged(this);\r\n          };\r\n          window.SVGPathSegClosePath = function (owningPathSegList) {\r\n              window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CLOSEPATH, 'z', owningPathSegList);\r\n          };\r\n          window.SVGPathSegClosePath.prototype = Object.create(window.SVGPathSeg.prototype);\r\n          window.SVGPathSegClosePath.prototype.toString = function () {\r\n              return '[object SVGPathSegClosePath]';\r\n          };\r\n          window.SVGPathSegClosePath.prototype._asPathString = function () {\r\n              return this.pathSegTypeAsLetter;\r\n          };\r\n          window.SVGPathSegClosePath.prototype.clone = function () {\r\n              return new window.SVGPathSegClosePath(undefined);\r\n          };\r\n          window.SVGPathSegMovetoAbs = function (owningPathSegList, x, y) {\r\n              window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_MOVETO_ABS, 'M', owningPathSegList);\r\n              this._x = x;\r\n              this._y = y;\r\n          };\r\n          window.SVGPathSegMovetoAbs.prototype = Object.create(window.SVGPathSeg.prototype);\r\n          window.SVGPathSegMovetoAbs.prototype.toString = function () {\r\n              return '[object SVGPathSegMovetoAbs]';\r\n          };\r\n          window.SVGPathSegMovetoAbs.prototype._asPathString = function () {\r\n              return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y;\r\n          };\r\n          window.SVGPathSegMovetoAbs.prototype.clone = function () {\r\n              return new window.SVGPathSegMovetoAbs(undefined, this._x, this._y);\r\n          };\r\n          Object.defineProperty(window.SVGPathSegMovetoAbs.prototype, 'x', {\r\n              get: function () {\r\n                  return this._x;\r\n              },\r\n              set: function (x) {\r\n                  this._x = x;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegMovetoAbs.prototype, 'y', {\r\n              get: function () {\r\n                  return this._y;\r\n              },\r\n              set: function (y) {\r\n                  this._y = y;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          window.SVGPathSegMovetoRel = function (owningPathSegList, x, y) {\r\n              window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_MOVETO_REL, 'm', owningPathSegList);\r\n              this._x = x;\r\n              this._y = y;\r\n          };\r\n          window.SVGPathSegMovetoRel.prototype = Object.create(window.SVGPathSeg.prototype);\r\n          window.SVGPathSegMovetoRel.prototype.toString = function () {\r\n              return '[object SVGPathSegMovetoRel]';\r\n          };\r\n          window.SVGPathSegMovetoRel.prototype._asPathString = function () {\r\n              return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y;\r\n          };\r\n          window.SVGPathSegMovetoRel.prototype.clone = function () {\r\n              return new window.SVGPathSegMovetoRel(undefined, this._x, this._y);\r\n          };\r\n          Object.defineProperty(window.SVGPathSegMovetoRel.prototype, 'x', {\r\n              get: function () {\r\n                  return this._x;\r\n              },\r\n              set: function (x) {\r\n                  this._x = x;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegMovetoRel.prototype, 'y', {\r\n              get: function () {\r\n                  return this._y;\r\n              },\r\n              set: function (y) {\r\n                  this._y = y;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          window.SVGPathSegLinetoAbs = function (owningPathSegList, x, y) {\r\n              window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_ABS, 'L', owningPathSegList);\r\n              this._x = x;\r\n              this._y = y;\r\n          };\r\n          window.SVGPathSegLinetoAbs.prototype = Object.create(window.SVGPathSeg.prototype);\r\n          window.SVGPathSegLinetoAbs.prototype.toString = function () {\r\n              return '[object SVGPathSegLinetoAbs]';\r\n          };\r\n          window.SVGPathSegLinetoAbs.prototype._asPathString = function () {\r\n              return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y;\r\n          };\r\n          window.SVGPathSegLinetoAbs.prototype.clone = function () {\r\n              return new window.SVGPathSegLinetoAbs(undefined, this._x, this._y);\r\n          };\r\n          Object.defineProperty(window.SVGPathSegLinetoAbs.prototype, 'x', {\r\n              get: function () {\r\n                  return this._x;\r\n              },\r\n              set: function (x) {\r\n                  this._x = x;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegLinetoAbs.prototype, 'y', {\r\n              get: function () {\r\n                  return this._y;\r\n              },\r\n              set: function (y) {\r\n                  this._y = y;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          window.SVGPathSegLinetoRel = function (owningPathSegList, x, y) {\r\n              window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_REL, 'l', owningPathSegList);\r\n              this._x = x;\r\n              this._y = y;\r\n          };\r\n          window.SVGPathSegLinetoRel.prototype = Object.create(window.SVGPathSeg.prototype);\r\n          window.SVGPathSegLinetoRel.prototype.toString = function () {\r\n              return '[object SVGPathSegLinetoRel]';\r\n          };\r\n          window.SVGPathSegLinetoRel.prototype._asPathString = function () {\r\n              return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y;\r\n          };\r\n          window.SVGPathSegLinetoRel.prototype.clone = function () {\r\n              return new window.SVGPathSegLinetoRel(undefined, this._x, this._y);\r\n          };\r\n          Object.defineProperty(window.SVGPathSegLinetoRel.prototype, 'x', {\r\n              get: function () {\r\n                  return this._x;\r\n              },\r\n              set: function (x) {\r\n                  this._x = x;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegLinetoRel.prototype, 'y', {\r\n              get: function () {\r\n                  return this._y;\r\n              },\r\n              set: function (y) {\r\n                  this._y = y;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          window.SVGPathSegCurvetoCubicAbs = function (owningPathSegList, x, y, x1, y1, x2, y2) {\r\n              window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS, 'C', owningPathSegList);\r\n              this._x = x;\r\n              this._y = y;\r\n              this._x1 = x1;\r\n              this._y1 = y1;\r\n              this._x2 = x2;\r\n              this._y2 = y2;\r\n          };\r\n          window.SVGPathSegCurvetoCubicAbs.prototype = Object.create(window.SVGPathSeg.prototype);\r\n          window.SVGPathSegCurvetoCubicAbs.prototype.toString = function () {\r\n              return '[object SVGPathSegCurvetoCubicAbs]';\r\n          };\r\n          window.SVGPathSegCurvetoCubicAbs.prototype._asPathString = function () {\r\n              return (this.pathSegTypeAsLetter +\r\n                  ' ' +\r\n                  this._x1 +\r\n                  ' ' +\r\n                  this._y1 +\r\n                  ' ' +\r\n                  this._x2 +\r\n                  ' ' +\r\n                  this._y2 +\r\n                  ' ' +\r\n                  this._x +\r\n                  ' ' +\r\n                  this._y);\r\n          };\r\n          window.SVGPathSegCurvetoCubicAbs.prototype.clone = function () {\r\n              return new window.SVGPathSegCurvetoCubicAbs(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2);\r\n          };\r\n          Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, 'x', {\r\n              get: function () {\r\n                  return this._x;\r\n              },\r\n              set: function (x) {\r\n                  this._x = x;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, 'y', {\r\n              get: function () {\r\n                  return this._y;\r\n              },\r\n              set: function (y) {\r\n                  this._y = y;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, 'x1', {\r\n              get: function () {\r\n                  return this._x1;\r\n              },\r\n              set: function (x1) {\r\n                  this._x1 = x1;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, 'y1', {\r\n              get: function () {\r\n                  return this._y1;\r\n              },\r\n              set: function (y1) {\r\n                  this._y1 = y1;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, 'x2', {\r\n              get: function () {\r\n                  return this._x2;\r\n              },\r\n              set: function (x2) {\r\n                  this._x2 = x2;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoCubicAbs.prototype, 'y2', {\r\n              get: function () {\r\n                  return this._y2;\r\n              },\r\n              set: function (y2) {\r\n                  this._y2 = y2;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          window.SVGPathSegCurvetoCubicRel = function (owningPathSegList, x, y, x1, y1, x2, y2) {\r\n              window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL, 'c', owningPathSegList);\r\n              this._x = x;\r\n              this._y = y;\r\n              this._x1 = x1;\r\n              this._y1 = y1;\r\n              this._x2 = x2;\r\n              this._y2 = y2;\r\n          };\r\n          window.SVGPathSegCurvetoCubicRel.prototype = Object.create(window.SVGPathSeg.prototype);\r\n          window.SVGPathSegCurvetoCubicRel.prototype.toString = function () {\r\n              return '[object SVGPathSegCurvetoCubicRel]';\r\n          };\r\n          window.SVGPathSegCurvetoCubicRel.prototype._asPathString = function () {\r\n              return (this.pathSegTypeAsLetter +\r\n                  ' ' +\r\n                  this._x1 +\r\n                  ' ' +\r\n                  this._y1 +\r\n                  ' ' +\r\n                  this._x2 +\r\n                  ' ' +\r\n                  this._y2 +\r\n                  ' ' +\r\n                  this._x +\r\n                  ' ' +\r\n                  this._y);\r\n          };\r\n          window.SVGPathSegCurvetoCubicRel.prototype.clone = function () {\r\n              return new window.SVGPathSegCurvetoCubicRel(undefined, this._x, this._y, this._x1, this._y1, this._x2, this._y2);\r\n          };\r\n          Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, 'x', {\r\n              get: function () {\r\n                  return this._x;\r\n              },\r\n              set: function (x) {\r\n                  this._x = x;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, 'y', {\r\n              get: function () {\r\n                  return this._y;\r\n              },\r\n              set: function (y) {\r\n                  this._y = y;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, 'x1', {\r\n              get: function () {\r\n                  return this._x1;\r\n              },\r\n              set: function (x1) {\r\n                  this._x1 = x1;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, 'y1', {\r\n              get: function () {\r\n                  return this._y1;\r\n              },\r\n              set: function (y1) {\r\n                  this._y1 = y1;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, 'x2', {\r\n              get: function () {\r\n                  return this._x2;\r\n              },\r\n              set: function (x2) {\r\n                  this._x2 = x2;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoCubicRel.prototype, 'y2', {\r\n              get: function () {\r\n                  return this._y2;\r\n              },\r\n              set: function (y2) {\r\n                  this._y2 = y2;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          window.SVGPathSegCurvetoQuadraticAbs = function (owningPathSegList, x, y, x1, y1) {\r\n              window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS, 'Q', owningPathSegList);\r\n              this._x = x;\r\n              this._y = y;\r\n              this._x1 = x1;\r\n              this._y1 = y1;\r\n          };\r\n          window.SVGPathSegCurvetoQuadraticAbs.prototype = Object.create(window.SVGPathSeg.prototype);\r\n          window.SVGPathSegCurvetoQuadraticAbs.prototype.toString = function () {\r\n              return '[object SVGPathSegCurvetoQuadraticAbs]';\r\n          };\r\n          window.SVGPathSegCurvetoQuadraticAbs.prototype._asPathString = function () {\r\n              return (this.pathSegTypeAsLetter +\r\n                  ' ' +\r\n                  this._x1 +\r\n                  ' ' +\r\n                  this._y1 +\r\n                  ' ' +\r\n                  this._x +\r\n                  ' ' +\r\n                  this._y);\r\n          };\r\n          window.SVGPathSegCurvetoQuadraticAbs.prototype.clone = function () {\r\n              return new window.SVGPathSegCurvetoQuadraticAbs(undefined, this._x, this._y, this._x1, this._y1);\r\n          };\r\n          Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, 'x', {\r\n              get: function () {\r\n                  return this._x;\r\n              },\r\n              set: function (x) {\r\n                  this._x = x;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, 'y', {\r\n              get: function () {\r\n                  return this._y;\r\n              },\r\n              set: function (y) {\r\n                  this._y = y;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, 'x1', {\r\n              get: function () {\r\n                  return this._x1;\r\n              },\r\n              set: function (x1) {\r\n                  this._x1 = x1;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoQuadraticAbs.prototype, 'y1', {\r\n              get: function () {\r\n                  return this._y1;\r\n              },\r\n              set: function (y1) {\r\n                  this._y1 = y1;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          window.SVGPathSegCurvetoQuadraticRel = function (owningPathSegList, x, y, x1, y1) {\r\n              window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL, 'q', owningPathSegList);\r\n              this._x = x;\r\n              this._y = y;\r\n              this._x1 = x1;\r\n              this._y1 = y1;\r\n          };\r\n          window.SVGPathSegCurvetoQuadraticRel.prototype = Object.create(window.SVGPathSeg.prototype);\r\n          window.SVGPathSegCurvetoQuadraticRel.prototype.toString = function () {\r\n              return '[object SVGPathSegCurvetoQuadraticRel]';\r\n          };\r\n          window.SVGPathSegCurvetoQuadraticRel.prototype._asPathString = function () {\r\n              return (this.pathSegTypeAsLetter +\r\n                  ' ' +\r\n                  this._x1 +\r\n                  ' ' +\r\n                  this._y1 +\r\n                  ' ' +\r\n                  this._x +\r\n                  ' ' +\r\n                  this._y);\r\n          };\r\n          window.SVGPathSegCurvetoQuadraticRel.prototype.clone = function () {\r\n              return new window.SVGPathSegCurvetoQuadraticRel(undefined, this._x, this._y, this._x1, this._y1);\r\n          };\r\n          Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, 'x', {\r\n              get: function () {\r\n                  return this._x;\r\n              },\r\n              set: function (x) {\r\n                  this._x = x;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, 'y', {\r\n              get: function () {\r\n                  return this._y;\r\n              },\r\n              set: function (y) {\r\n                  this._y = y;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, 'x1', {\r\n              get: function () {\r\n                  return this._x1;\r\n              },\r\n              set: function (x1) {\r\n                  this._x1 = x1;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoQuadraticRel.prototype, 'y1', {\r\n              get: function () {\r\n                  return this._y1;\r\n              },\r\n              set: function (y1) {\r\n                  this._y1 = y1;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          window.SVGPathSegArcAbs = function (owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) {\r\n              window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_ARC_ABS, 'A', owningPathSegList);\r\n              this._x = x;\r\n              this._y = y;\r\n              this._r1 = r1;\r\n              this._r2 = r2;\r\n              this._angle = angle;\r\n              this._largeArcFlag = largeArcFlag;\r\n              this._sweepFlag = sweepFlag;\r\n          };\r\n          window.SVGPathSegArcAbs.prototype = Object.create(window.SVGPathSeg.prototype);\r\n          window.SVGPathSegArcAbs.prototype.toString = function () {\r\n              return '[object SVGPathSegArcAbs]';\r\n          };\r\n          window.SVGPathSegArcAbs.prototype._asPathString = function () {\r\n              return (this.pathSegTypeAsLetter +\r\n                  ' ' +\r\n                  this._r1 +\r\n                  ' ' +\r\n                  this._r2 +\r\n                  ' ' +\r\n                  this._angle +\r\n                  ' ' +\r\n                  (this._largeArcFlag ? '1' : '0') +\r\n                  ' ' +\r\n                  (this._sweepFlag ? '1' : '0') +\r\n                  ' ' +\r\n                  this._x +\r\n                  ' ' +\r\n                  this._y);\r\n          };\r\n          window.SVGPathSegArcAbs.prototype.clone = function () {\r\n              return new window.SVGPathSegArcAbs(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag);\r\n          };\r\n          Object.defineProperty(window.SVGPathSegArcAbs.prototype, 'x', {\r\n              get: function () {\r\n                  return this._x;\r\n              },\r\n              set: function (x) {\r\n                  this._x = x;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegArcAbs.prototype, 'y', {\r\n              get: function () {\r\n                  return this._y;\r\n              },\r\n              set: function (y) {\r\n                  this._y = y;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegArcAbs.prototype, 'r1', {\r\n              get: function () {\r\n                  return this._r1;\r\n              },\r\n              set: function (r1) {\r\n                  this._r1 = r1;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegArcAbs.prototype, 'r2', {\r\n              get: function () {\r\n                  return this._r2;\r\n              },\r\n              set: function (r2) {\r\n                  this._r2 = r2;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegArcAbs.prototype, 'angle', {\r\n              get: function () {\r\n                  return this._angle;\r\n              },\r\n              set: function (angle) {\r\n                  this._angle = angle;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegArcAbs.prototype, 'largeArcFlag', {\r\n              get: function () {\r\n                  return this._largeArcFlag;\r\n              },\r\n              set: function (largeArcFlag) {\r\n                  this._largeArcFlag = largeArcFlag;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegArcAbs.prototype, 'sweepFlag', {\r\n              get: function () {\r\n                  return this._sweepFlag;\r\n              },\r\n              set: function (sweepFlag) {\r\n                  this._sweepFlag = sweepFlag;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          window.SVGPathSegArcRel = function (owningPathSegList, x, y, r1, r2, angle, largeArcFlag, sweepFlag) {\r\n              window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_ARC_REL, 'a', owningPathSegList);\r\n              this._x = x;\r\n              this._y = y;\r\n              this._r1 = r1;\r\n              this._r2 = r2;\r\n              this._angle = angle;\r\n              this._largeArcFlag = largeArcFlag;\r\n              this._sweepFlag = sweepFlag;\r\n          };\r\n          window.SVGPathSegArcRel.prototype = Object.create(window.SVGPathSeg.prototype);\r\n          window.SVGPathSegArcRel.prototype.toString = function () {\r\n              return '[object SVGPathSegArcRel]';\r\n          };\r\n          window.SVGPathSegArcRel.prototype._asPathString = function () {\r\n              return (this.pathSegTypeAsLetter +\r\n                  ' ' +\r\n                  this._r1 +\r\n                  ' ' +\r\n                  this._r2 +\r\n                  ' ' +\r\n                  this._angle +\r\n                  ' ' +\r\n                  (this._largeArcFlag ? '1' : '0') +\r\n                  ' ' +\r\n                  (this._sweepFlag ? '1' : '0') +\r\n                  ' ' +\r\n                  this._x +\r\n                  ' ' +\r\n                  this._y);\r\n          };\r\n          window.SVGPathSegArcRel.prototype.clone = function () {\r\n              return new window.SVGPathSegArcRel(undefined, this._x, this._y, this._r1, this._r2, this._angle, this._largeArcFlag, this._sweepFlag);\r\n          };\r\n          Object.defineProperty(window.SVGPathSegArcRel.prototype, 'x', {\r\n              get: function () {\r\n                  return this._x;\r\n              },\r\n              set: function (x) {\r\n                  this._x = x;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegArcRel.prototype, 'y', {\r\n              get: function () {\r\n                  return this._y;\r\n              },\r\n              set: function (y) {\r\n                  this._y = y;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegArcRel.prototype, 'r1', {\r\n              get: function () {\r\n                  return this._r1;\r\n              },\r\n              set: function (r1) {\r\n                  this._r1 = r1;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegArcRel.prototype, 'r2', {\r\n              get: function () {\r\n                  return this._r2;\r\n              },\r\n              set: function (r2) {\r\n                  this._r2 = r2;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegArcRel.prototype, 'angle', {\r\n              get: function () {\r\n                  return this._angle;\r\n              },\r\n              set: function (angle) {\r\n                  this._angle = angle;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegArcRel.prototype, 'largeArcFlag', {\r\n              get: function () {\r\n                  return this._largeArcFlag;\r\n              },\r\n              set: function (largeArcFlag) {\r\n                  this._largeArcFlag = largeArcFlag;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegArcRel.prototype, 'sweepFlag', {\r\n              get: function () {\r\n                  return this._sweepFlag;\r\n              },\r\n              set: function (sweepFlag) {\r\n                  this._sweepFlag = sweepFlag;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          window.SVGPathSegLinetoHorizontalAbs = function (owningPathSegList, x) {\r\n              window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS, 'H', owningPathSegList);\r\n              this._x = x;\r\n          };\r\n          window.SVGPathSegLinetoHorizontalAbs.prototype = Object.create(window.SVGPathSeg.prototype);\r\n          window.SVGPathSegLinetoHorizontalAbs.prototype.toString = function () {\r\n              return '[object SVGPathSegLinetoHorizontalAbs]';\r\n          };\r\n          window.SVGPathSegLinetoHorizontalAbs.prototype._asPathString = function () {\r\n              return this.pathSegTypeAsLetter + ' ' + this._x;\r\n          };\r\n          window.SVGPathSegLinetoHorizontalAbs.prototype.clone = function () {\r\n              return new window.SVGPathSegLinetoHorizontalAbs(undefined, this._x);\r\n          };\r\n          Object.defineProperty(window.SVGPathSegLinetoHorizontalAbs.prototype, 'x', {\r\n              get: function () {\r\n                  return this._x;\r\n              },\r\n              set: function (x) {\r\n                  this._x = x;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          window.SVGPathSegLinetoHorizontalRel = function (owningPathSegList, x) {\r\n              window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL, 'h', owningPathSegList);\r\n              this._x = x;\r\n          };\r\n          window.SVGPathSegLinetoHorizontalRel.prototype = Object.create(window.SVGPathSeg.prototype);\r\n          window.SVGPathSegLinetoHorizontalRel.prototype.toString = function () {\r\n              return '[object SVGPathSegLinetoHorizontalRel]';\r\n          };\r\n          window.SVGPathSegLinetoHorizontalRel.prototype._asPathString = function () {\r\n              return this.pathSegTypeAsLetter + ' ' + this._x;\r\n          };\r\n          window.SVGPathSegLinetoHorizontalRel.prototype.clone = function () {\r\n              return new window.SVGPathSegLinetoHorizontalRel(undefined, this._x);\r\n          };\r\n          Object.defineProperty(window.SVGPathSegLinetoHorizontalRel.prototype, 'x', {\r\n              get: function () {\r\n                  return this._x;\r\n              },\r\n              set: function (x) {\r\n                  this._x = x;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          window.SVGPathSegLinetoVerticalAbs = function (owningPathSegList, y) {\r\n              window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS, 'V', owningPathSegList);\r\n              this._y = y;\r\n          };\r\n          window.SVGPathSegLinetoVerticalAbs.prototype = Object.create(window.SVGPathSeg.prototype);\r\n          window.SVGPathSegLinetoVerticalAbs.prototype.toString = function () {\r\n              return '[object SVGPathSegLinetoVerticalAbs]';\r\n          };\r\n          window.SVGPathSegLinetoVerticalAbs.prototype._asPathString = function () {\r\n              return this.pathSegTypeAsLetter + ' ' + this._y;\r\n          };\r\n          window.SVGPathSegLinetoVerticalAbs.prototype.clone = function () {\r\n              return new window.SVGPathSegLinetoVerticalAbs(undefined, this._y);\r\n          };\r\n          Object.defineProperty(window.SVGPathSegLinetoVerticalAbs.prototype, 'y', {\r\n              get: function () {\r\n                  return this._y;\r\n              },\r\n              set: function (y) {\r\n                  this._y = y;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          window.SVGPathSegLinetoVerticalRel = function (owningPathSegList, y) {\r\n              window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL, 'v', owningPathSegList);\r\n              this._y = y;\r\n          };\r\n          window.SVGPathSegLinetoVerticalRel.prototype = Object.create(window.SVGPathSeg.prototype);\r\n          window.SVGPathSegLinetoVerticalRel.prototype.toString = function () {\r\n              return '[object SVGPathSegLinetoVerticalRel]';\r\n          };\r\n          window.SVGPathSegLinetoVerticalRel.prototype._asPathString = function () {\r\n              return this.pathSegTypeAsLetter + ' ' + this._y;\r\n          };\r\n          window.SVGPathSegLinetoVerticalRel.prototype.clone = function () {\r\n              return new window.SVGPathSegLinetoVerticalRel(undefined, this._y);\r\n          };\r\n          Object.defineProperty(window.SVGPathSegLinetoVerticalRel.prototype, 'y', {\r\n              get: function () {\r\n                  return this._y;\r\n              },\r\n              set: function (y) {\r\n                  this._y = y;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          window.SVGPathSegCurvetoCubicSmoothAbs = function (owningPathSegList, x, y, x2, y2) {\r\n              window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS, 'S', owningPathSegList);\r\n              this._x = x;\r\n              this._y = y;\r\n              this._x2 = x2;\r\n              this._y2 = y2;\r\n          };\r\n          window.SVGPathSegCurvetoCubicSmoothAbs.prototype = Object.create(window.SVGPathSeg.prototype);\r\n          window.SVGPathSegCurvetoCubicSmoothAbs.prototype.toString = function () {\r\n              return '[object SVGPathSegCurvetoCubicSmoothAbs]';\r\n          };\r\n          window.SVGPathSegCurvetoCubicSmoothAbs.prototype._asPathString = function () {\r\n              return (this.pathSegTypeAsLetter +\r\n                  ' ' +\r\n                  this._x2 +\r\n                  ' ' +\r\n                  this._y2 +\r\n                  ' ' +\r\n                  this._x +\r\n                  ' ' +\r\n                  this._y);\r\n          };\r\n          window.SVGPathSegCurvetoCubicSmoothAbs.prototype.clone = function () {\r\n              return new window.SVGPathSegCurvetoCubicSmoothAbs(undefined, this._x, this._y, this._x2, this._y2);\r\n          };\r\n          Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, 'x', {\r\n              get: function () {\r\n                  return this._x;\r\n              },\r\n              set: function (x) {\r\n                  this._x = x;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, 'y', {\r\n              get: function () {\r\n                  return this._y;\r\n              },\r\n              set: function (y) {\r\n                  this._y = y;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, 'x2', {\r\n              get: function () {\r\n                  return this._x2;\r\n              },\r\n              set: function (x2) {\r\n                  this._x2 = x2;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothAbs.prototype, 'y2', {\r\n              get: function () {\r\n                  return this._y2;\r\n              },\r\n              set: function (y2) {\r\n                  this._y2 = y2;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          window.SVGPathSegCurvetoCubicSmoothRel = function (owningPathSegList, x, y, x2, y2) {\r\n              window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL, 's', owningPathSegList);\r\n              this._x = x;\r\n              this._y = y;\r\n              this._x2 = x2;\r\n              this._y2 = y2;\r\n          };\r\n          window.SVGPathSegCurvetoCubicSmoothRel.prototype = Object.create(window.SVGPathSeg.prototype);\r\n          window.SVGPathSegCurvetoCubicSmoothRel.prototype.toString = function () {\r\n              return '[object SVGPathSegCurvetoCubicSmoothRel]';\r\n          };\r\n          window.SVGPathSegCurvetoCubicSmoothRel.prototype._asPathString = function () {\r\n              return (this.pathSegTypeAsLetter +\r\n                  ' ' +\r\n                  this._x2 +\r\n                  ' ' +\r\n                  this._y2 +\r\n                  ' ' +\r\n                  this._x +\r\n                  ' ' +\r\n                  this._y);\r\n          };\r\n          window.SVGPathSegCurvetoCubicSmoothRel.prototype.clone = function () {\r\n              return new window.SVGPathSegCurvetoCubicSmoothRel(undefined, this._x, this._y, this._x2, this._y2);\r\n          };\r\n          Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, 'x', {\r\n              get: function () {\r\n                  return this._x;\r\n              },\r\n              set: function (x) {\r\n                  this._x = x;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, 'y', {\r\n              get: function () {\r\n                  return this._y;\r\n              },\r\n              set: function (y) {\r\n                  this._y = y;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, 'x2', {\r\n              get: function () {\r\n                  return this._x2;\r\n              },\r\n              set: function (x2) {\r\n                  this._x2 = x2;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoCubicSmoothRel.prototype, 'y2', {\r\n              get: function () {\r\n                  return this._y2;\r\n              },\r\n              set: function (y2) {\r\n                  this._y2 = y2;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          window.SVGPathSegCurvetoQuadraticSmoothAbs = function (owningPathSegList, x, y) {\r\n              window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS, 'T', owningPathSegList);\r\n              this._x = x;\r\n              this._y = y;\r\n          };\r\n          window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype = Object.create(window.SVGPathSeg.prototype);\r\n          window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype.toString = function () {\r\n              return '[object SVGPathSegCurvetoQuadraticSmoothAbs]';\r\n          };\r\n          window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype._asPathString = function () {\r\n              return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y;\r\n          };\r\n          window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype.clone = function () {\r\n              return new window.SVGPathSegCurvetoQuadraticSmoothAbs(undefined, this._x, this._y);\r\n          };\r\n          Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype, 'x', {\r\n              get: function () {\r\n                  return this._x;\r\n              },\r\n              set: function (x) {\r\n                  this._x = x;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothAbs.prototype, 'y', {\r\n              get: function () {\r\n                  return this._y;\r\n              },\r\n              set: function (y) {\r\n                  this._y = y;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          window.SVGPathSegCurvetoQuadraticSmoothRel = function (owningPathSegList, x, y) {\r\n              window.SVGPathSeg.call(this, window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL, 't', owningPathSegList);\r\n              this._x = x;\r\n              this._y = y;\r\n          };\r\n          window.SVGPathSegCurvetoQuadraticSmoothRel.prototype = Object.create(window.SVGPathSeg.prototype);\r\n          window.SVGPathSegCurvetoQuadraticSmoothRel.prototype.toString = function () {\r\n              return '[object SVGPathSegCurvetoQuadraticSmoothRel]';\r\n          };\r\n          window.SVGPathSegCurvetoQuadraticSmoothRel.prototype._asPathString = function () {\r\n              return this.pathSegTypeAsLetter + ' ' + this._x + ' ' + this._y;\r\n          };\r\n          window.SVGPathSegCurvetoQuadraticSmoothRel.prototype.clone = function () {\r\n              return new window.SVGPathSegCurvetoQuadraticSmoothRel(undefined, this._x, this._y);\r\n          };\r\n          Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothRel.prototype, 'x', {\r\n              get: function () {\r\n                  return this._x;\r\n              },\r\n              set: function (x) {\r\n                  this._x = x;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathSegCurvetoQuadraticSmoothRel.prototype, 'y', {\r\n              get: function () {\r\n                  return this._y;\r\n              },\r\n              set: function (y) {\r\n                  this._y = y;\r\n                  this._segmentChanged();\r\n              },\r\n              enumerable: true\r\n          });\r\n          // Add createSVGPathSeg* functions to window.SVGPathElement.\r\n          // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-Interfacewindow.SVGPathElement.\r\n          window.SVGPathElement.prototype.createSVGPathSegClosePath = function () {\r\n              return new window.SVGPathSegClosePath(undefined);\r\n          };\r\n          window.SVGPathElement.prototype.createSVGPathSegMovetoAbs = function (x, y) {\r\n              return new window.SVGPathSegMovetoAbs(undefined, x, y);\r\n          };\r\n          window.SVGPathElement.prototype.createSVGPathSegMovetoRel = function (x, y) {\r\n              return new window.SVGPathSegMovetoRel(undefined, x, y);\r\n          };\r\n          window.SVGPathElement.prototype.createSVGPathSegLinetoAbs = function (x, y) {\r\n              return new window.SVGPathSegLinetoAbs(undefined, x, y);\r\n          };\r\n          window.SVGPathElement.prototype.createSVGPathSegLinetoRel = function (x, y) {\r\n              return new window.SVGPathSegLinetoRel(undefined, x, y);\r\n          };\r\n          window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicAbs = function (x, y, x1, y1, x2, y2) {\r\n              return new window.SVGPathSegCurvetoCubicAbs(undefined, x, y, x1, y1, x2, y2);\r\n          };\r\n          window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicRel = function (x, y, x1, y1, x2, y2) {\r\n              return new window.SVGPathSegCurvetoCubicRel(undefined, x, y, x1, y1, x2, y2);\r\n          };\r\n          window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticAbs = function (x, y, x1, y1) {\r\n              return new window.SVGPathSegCurvetoQuadraticAbs(undefined, x, y, x1, y1);\r\n          };\r\n          window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticRel = function (x, y, x1, y1) {\r\n              return new window.SVGPathSegCurvetoQuadraticRel(undefined, x, y, x1, y1);\r\n          };\r\n          window.SVGPathElement.prototype.createSVGPathSegArcAbs = function (x, y, r1, r2, angle, largeArcFlag, sweepFlag) {\r\n              return new window.SVGPathSegArcAbs(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag);\r\n          };\r\n          window.SVGPathElement.prototype.createSVGPathSegArcRel = function (x, y, r1, r2, angle, largeArcFlag, sweepFlag) {\r\n              return new window.SVGPathSegArcRel(undefined, x, y, r1, r2, angle, largeArcFlag, sweepFlag);\r\n          };\r\n          window.SVGPathElement.prototype.createSVGPathSegLinetoHorizontalAbs = function (x) {\r\n              return new window.SVGPathSegLinetoHorizontalAbs(undefined, x);\r\n          };\r\n          window.SVGPathElement.prototype.createSVGPathSegLinetoHorizontalRel = function (x) {\r\n              return new window.SVGPathSegLinetoHorizontalRel(undefined, x);\r\n          };\r\n          window.SVGPathElement.prototype.createSVGPathSegLinetoVerticalAbs = function (y) {\r\n              return new window.SVGPathSegLinetoVerticalAbs(undefined, y);\r\n          };\r\n          window.SVGPathElement.prototype.createSVGPathSegLinetoVerticalRel = function (y) {\r\n              return new window.SVGPathSegLinetoVerticalRel(undefined, y);\r\n          };\r\n          window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothAbs = function (x, y, x2, y2) {\r\n              return new window.SVGPathSegCurvetoCubicSmoothAbs(undefined, x, y, x2, y2);\r\n          };\r\n          window.SVGPathElement.prototype.createSVGPathSegCurvetoCubicSmoothRel = function (x, y, x2, y2) {\r\n              return new window.SVGPathSegCurvetoCubicSmoothRel(undefined, x, y, x2, y2);\r\n          };\r\n          window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothAbs = function (x, y) {\r\n              return new window.SVGPathSegCurvetoQuadraticSmoothAbs(undefined, x, y);\r\n          };\r\n          window.SVGPathElement.prototype.createSVGPathSegCurvetoQuadraticSmoothRel = function (x, y) {\r\n              return new window.SVGPathSegCurvetoQuadraticSmoothRel(undefined, x, y);\r\n          };\r\n          if (!('getPathSegAtLength' in window.SVGPathElement.prototype)) {\r\n              // Add getPathSegAtLength to SVGPathElement.\r\n              // Spec: https://www.w3.org/TR/SVG11/single-page.html#paths-__svg__SVGPathElement__getPathSegAtLength\r\n              // This polyfill requires SVGPathElement.getTotalLength to implement the distance-along-a-path algorithm.\r\n              window.SVGPathElement.prototype.getPathSegAtLength = function (distance) {\r\n                  if (distance === undefined || !isFinite(distance))\r\n                      throw 'Invalid arguments.';\r\n                  var measurementElement = document.createElementNS('http://www.w3.org/2000/svg', 'path');\r\n                  measurementElement.setAttribute('d', this.getAttribute('d'));\r\n                  var lastPathSegment = measurementElement.pathSegList.numberOfItems - 1;\r\n                  // If the path is empty, return 0.\r\n                  if (lastPathSegment <= 0)\r\n                      return 0;\r\n                  do {\r\n                      measurementElement.pathSegList.removeItem(lastPathSegment);\r\n                      if (distance > measurementElement.getTotalLength())\r\n                          break;\r\n                      lastPathSegment--;\r\n                  } while (lastPathSegment > 0);\r\n                  return lastPathSegment;\r\n              };\r\n          }\r\n      }\r\n      if (!('SVGPathSegList' in window)) {\r\n          // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGPathSegList\r\n          window.SVGPathSegList = function (pathElement) {\r\n              this._pathElement = pathElement;\r\n              this._list = this._parsePath(this._pathElement.getAttribute('d'));\r\n              // Use a MutationObserver to catch changes to the path's \"d\" attribute.\r\n              this._mutationObserverConfig = {\r\n                  attributes: true,\r\n                  attributeFilter: ['d']\r\n              };\r\n              this._pathElementMutationObserver = new MutationObserver(this._updateListFromPathMutations.bind(this));\r\n              this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig);\r\n          };\r\n          window.SVGPathSegList.prototype.classname = 'SVGPathSegList';\r\n          Object.defineProperty(window.SVGPathSegList.prototype, 'numberOfItems', {\r\n              get: function () {\r\n                  this._checkPathSynchronizedToList();\r\n                  return this._list.length;\r\n              },\r\n              enumerable: true\r\n          });\r\n          // Add the pathSegList accessors to window.SVGPathElement.\r\n          // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-InterfaceSVGAnimatedPathData\r\n          Object.defineProperty(window.SVGPathElement.prototype, 'pathSegList', {\r\n              get: function () {\r\n                  if (!this._pathSegList)\r\n                      this._pathSegList = new window.SVGPathSegList(this);\r\n                  return this._pathSegList;\r\n              },\r\n              enumerable: true\r\n          });\r\n          // FIXME: The following are not implemented and simply return window.SVGPathElement.pathSegList.\r\n          Object.defineProperty(window.SVGPathElement.prototype, 'normalizedPathSegList', {\r\n              get: function () {\r\n                  return this.pathSegList;\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathElement.prototype, 'animatedPathSegList', {\r\n              get: function () {\r\n                  return this.pathSegList;\r\n              },\r\n              enumerable: true\r\n          });\r\n          Object.defineProperty(window.SVGPathElement.prototype, 'animatedNormalizedPathSegList', {\r\n              get: function () {\r\n                  return this.pathSegList;\r\n              },\r\n              enumerable: true\r\n          });\r\n          // Process any pending mutations to the path element and update the list as needed.\r\n          // This should be the first call of all public functions and is needed because\r\n          // MutationObservers are not synchronous so we can have pending asynchronous mutations.\r\n          window.SVGPathSegList.prototype._checkPathSynchronizedToList = function () {\r\n              this._updateListFromPathMutations(this._pathElementMutationObserver.takeRecords());\r\n          };\r\n          window.SVGPathSegList.prototype._updateListFromPathMutations = function (mutationRecords) {\r\n              if (!this._pathElement)\r\n                  return;\r\n              var hasPathMutations = false;\r\n              mutationRecords.forEach(function (record) {\r\n                  if (record.attributeName == 'd')\r\n                      hasPathMutations = true;\r\n              });\r\n              if (hasPathMutations)\r\n                  this._list = this._parsePath(this._pathElement.getAttribute('d'));\r\n          };\r\n          // Serialize the list and update the path's 'd' attribute.\r\n          window.SVGPathSegList.prototype._writeListToPath = function () {\r\n              this._pathElementMutationObserver.disconnect();\r\n              this._pathElement.setAttribute('d', window.SVGPathSegList._pathSegArrayAsString(this._list));\r\n              this._pathElementMutationObserver.observe(this._pathElement, this._mutationObserverConfig);\r\n          };\r\n          // When a path segment changes the list needs to be synchronized back to the path element.\r\n          window.SVGPathSegList.prototype.segmentChanged = function (pathSeg) {\r\n              this._writeListToPath();\r\n          };\r\n          window.SVGPathSegList.prototype.clear = function () {\r\n              this._checkPathSynchronizedToList();\r\n              this._list.forEach(function (pathSeg) {\r\n                  pathSeg._owningPathSegList = null;\r\n              });\r\n              this._list = [];\r\n              this._writeListToPath();\r\n          };\r\n          window.SVGPathSegList.prototype.initialize = function (newItem) {\r\n              this._checkPathSynchronizedToList();\r\n              this._list = [newItem];\r\n              newItem._owningPathSegList = this;\r\n              this._writeListToPath();\r\n              return newItem;\r\n          };\r\n          window.SVGPathSegList.prototype._checkValidIndex = function (index) {\r\n              if (isNaN(index) || index < 0 || index >= this.numberOfItems)\r\n                  throw 'INDEX_SIZE_ERR';\r\n          };\r\n          window.SVGPathSegList.prototype.getItem = function (index) {\r\n              this._checkPathSynchronizedToList();\r\n              this._checkValidIndex(index);\r\n              return this._list[index];\r\n          };\r\n          window.SVGPathSegList.prototype.insertItemBefore = function (newItem, index) {\r\n              this._checkPathSynchronizedToList();\r\n              // Spec: If the index is greater than or equal to numberOfItems, then the new item is appended to the end of the list.\r\n              if (index > this.numberOfItems)\r\n                  index = this.numberOfItems;\r\n              if (newItem._owningPathSegList) {\r\n                  // SVG2 spec says to make a copy.\r\n                  newItem = newItem.clone();\r\n              }\r\n              this._list.splice(index, 0, newItem);\r\n              newItem._owningPathSegList = this;\r\n              this._writeListToPath();\r\n              return newItem;\r\n          };\r\n          window.SVGPathSegList.prototype.replaceItem = function (newItem, index) {\r\n              this._checkPathSynchronizedToList();\r\n              if (newItem._owningPathSegList) {\r\n                  // SVG2 spec says to make a copy.\r\n                  newItem = newItem.clone();\r\n              }\r\n              this._checkValidIndex(index);\r\n              this._list[index] = newItem;\r\n              newItem._owningPathSegList = this;\r\n              this._writeListToPath();\r\n              return newItem;\r\n          };\r\n          window.SVGPathSegList.prototype.removeItem = function (index) {\r\n              this._checkPathSynchronizedToList();\r\n              this._checkValidIndex(index);\r\n              var item = this._list[index];\r\n              this._list.splice(index, 1);\r\n              this._writeListToPath();\r\n              return item;\r\n          };\r\n          window.SVGPathSegList.prototype.appendItem = function (newItem) {\r\n              this._checkPathSynchronizedToList();\r\n              if (newItem._owningPathSegList) {\r\n                  // SVG2 spec says to make a copy.\r\n                  newItem = newItem.clone();\r\n              }\r\n              this._list.push(newItem);\r\n              newItem._owningPathSegList = this;\r\n              // TODO: Optimize this to just append to the existing attribute.\r\n              this._writeListToPath();\r\n              return newItem;\r\n          };\r\n          window.SVGPathSegList._pathSegArrayAsString = function (pathSegArray) {\r\n              var string = '';\r\n              var first = true;\r\n              pathSegArray.forEach(function (pathSeg) {\r\n                  if (first) {\r\n                      first = false;\r\n                      string += pathSeg._asPathString();\r\n                  }\r\n                  else {\r\n                      string += ' ' + pathSeg._asPathString();\r\n                  }\r\n              });\r\n              return string;\r\n          };\r\n          // This closely follows SVGPathParser::parsePath from Source/core/svg/SVGPathParser.cpp.\r\n          window.SVGPathSegList.prototype._parsePath = function (string) {\r\n              if (!string || string.length == 0)\r\n                  return [];\r\n              var owningPathSegList = this;\r\n              var Builder = function () {\r\n                  this.pathSegList = [];\r\n              };\r\n              Builder.prototype.appendSegment = function (pathSeg) {\r\n                  this.pathSegList.push(pathSeg);\r\n              };\r\n              var Source = function (string) {\r\n                  this._string = string;\r\n                  this._currentIndex = 0;\r\n                  this._endIndex = this._string.length;\r\n                  this._previousCommand = window.SVGPathSeg.PATHSEG_UNKNOWN;\r\n                  this._skipOptionalSpaces();\r\n              };\r\n              Source.prototype._isCurrentSpace = function () {\r\n                  var character = this._string[this._currentIndex];\r\n                  return (character <= ' ' &&\r\n                      (character == ' ' ||\r\n                          character == '\\n' ||\r\n                          character == '\\t' ||\r\n                          character == '\\r' ||\r\n                          character == '\\f'));\r\n              };\r\n              Source.prototype._skipOptionalSpaces = function () {\r\n                  while (this._currentIndex < this._endIndex && this._isCurrentSpace())\r\n                      this._currentIndex++;\r\n                  return this._currentIndex < this._endIndex;\r\n              };\r\n              Source.prototype._skipOptionalSpacesOrDelimiter = function () {\r\n                  if (this._currentIndex < this._endIndex &&\r\n                      !this._isCurrentSpace() &&\r\n                      this._string.charAt(this._currentIndex) != ',')\r\n                      return false;\r\n                  if (this._skipOptionalSpaces()) {\r\n                      if (this._currentIndex < this._endIndex &&\r\n                          this._string.charAt(this._currentIndex) == ',') {\r\n                          this._currentIndex++;\r\n                          this._skipOptionalSpaces();\r\n                      }\r\n                  }\r\n                  return this._currentIndex < this._endIndex;\r\n              };\r\n              Source.prototype.hasMoreData = function () {\r\n                  return this._currentIndex < this._endIndex;\r\n              };\r\n              Source.prototype.peekSegmentType = function () {\r\n                  var lookahead = this._string[this._currentIndex];\r\n                  return this._pathSegTypeFromChar(lookahead);\r\n              };\r\n              Source.prototype._pathSegTypeFromChar = function (lookahead) {\r\n                  switch (lookahead) {\r\n                      case 'Z':\r\n                      case 'z':\r\n                          return window.SVGPathSeg.PATHSEG_CLOSEPATH;\r\n                      case 'M':\r\n                          return window.SVGPathSeg.PATHSEG_MOVETO_ABS;\r\n                      case 'm':\r\n                          return window.SVGPathSeg.PATHSEG_MOVETO_REL;\r\n                      case 'L':\r\n                          return window.SVGPathSeg.PATHSEG_LINETO_ABS;\r\n                      case 'l':\r\n                          return window.SVGPathSeg.PATHSEG_LINETO_REL;\r\n                      case 'C':\r\n                          return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS;\r\n                      case 'c':\r\n                          return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL;\r\n                      case 'Q':\r\n                          return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS;\r\n                      case 'q':\r\n                          return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL;\r\n                      case 'A':\r\n                          return window.SVGPathSeg.PATHSEG_ARC_ABS;\r\n                      case 'a':\r\n                          return window.SVGPathSeg.PATHSEG_ARC_REL;\r\n                      case 'H':\r\n                          return window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS;\r\n                      case 'h':\r\n                          return window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL;\r\n                      case 'V':\r\n                          return window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS;\r\n                      case 'v':\r\n                          return window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL;\r\n                      case 'S':\r\n                          return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS;\r\n                      case 's':\r\n                          return window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL;\r\n                      case 'T':\r\n                          return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS;\r\n                      case 't':\r\n                          return window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL;\r\n                      default:\r\n                          return window.SVGPathSeg.PATHSEG_UNKNOWN;\r\n                  }\r\n              };\r\n              Source.prototype._nextCommandHelper = function (lookahead, previousCommand) {\r\n                  // Check for remaining coordinates in the current command.\r\n                  if ((lookahead == '+' ||\r\n                      lookahead == '-' ||\r\n                      lookahead == '.' ||\r\n                      (lookahead >= '0' && lookahead <= '9')) &&\r\n                      previousCommand != window.SVGPathSeg.PATHSEG_CLOSEPATH) {\r\n                      if (previousCommand == window.SVGPathSeg.PATHSEG_MOVETO_ABS)\r\n                          return window.SVGPathSeg.PATHSEG_LINETO_ABS;\r\n                      if (previousCommand == window.SVGPathSeg.PATHSEG_MOVETO_REL)\r\n                          return window.SVGPathSeg.PATHSEG_LINETO_REL;\r\n                      return previousCommand;\r\n                  }\r\n                  return window.SVGPathSeg.PATHSEG_UNKNOWN;\r\n              };\r\n              Source.prototype.initialCommandIsMoveTo = function () {\r\n                  // If the path is empty it is still valid, so return true.\r\n                  if (!this.hasMoreData())\r\n                      return true;\r\n                  var command = this.peekSegmentType();\r\n                  // Path must start with moveTo.\r\n                  return (command == window.SVGPathSeg.PATHSEG_MOVETO_ABS ||\r\n                      command == window.SVGPathSeg.PATHSEG_MOVETO_REL);\r\n              };\r\n              // Parse a number from an SVG path. This very closely follows genericParseNumber(...) from Source/core/svg/SVGParserUtilities.cpp.\r\n              // Spec: http://www.w3.org/TR/SVG11/single-page.html#paths-PathDataBNF\r\n              Source.prototype._parseNumber = function () {\r\n                  var exponent = 0;\r\n                  var integer = 0;\r\n                  var frac = 1;\r\n                  var decimal = 0;\r\n                  var sign = 1;\r\n                  var expsign = 1;\r\n                  var startIndex = this._currentIndex;\r\n                  this._skipOptionalSpaces();\r\n                  // Read the sign.\r\n                  if (this._currentIndex < this._endIndex &&\r\n                      this._string.charAt(this._currentIndex) == '+')\r\n                      this._currentIndex++;\r\n                  else if (this._currentIndex < this._endIndex &&\r\n                      this._string.charAt(this._currentIndex) == '-') {\r\n                      this._currentIndex++;\r\n                      sign = -1;\r\n                  }\r\n                  if (this._currentIndex == this._endIndex ||\r\n                      ((this._string.charAt(this._currentIndex) < '0' ||\r\n                          this._string.charAt(this._currentIndex) > '9') &&\r\n                          this._string.charAt(this._currentIndex) != '.'))\r\n                      // The first character of a number must be one of [0-9+-.].\r\n                      return undefined;\r\n                  // Read the integer part, build right-to-left.\r\n                  var startIntPartIndex = this._currentIndex;\r\n                  while (this._currentIndex < this._endIndex &&\r\n                      this._string.charAt(this._currentIndex) >= '0' &&\r\n                      this._string.charAt(this._currentIndex) <= '9')\r\n                      this._currentIndex++; // Advance to first non-digit.\r\n                  if (this._currentIndex != startIntPartIndex) {\r\n                      var scanIntPartIndex = this._currentIndex - 1;\r\n                      var multiplier = 1;\r\n                      while (scanIntPartIndex >= startIntPartIndex) {\r\n                          integer +=\r\n                              multiplier * (this._string.charAt(scanIntPartIndex--) - '0');\r\n                          multiplier *= 10;\r\n                      }\r\n                  }\r\n                  // Read the decimals.\r\n                  if (this._currentIndex < this._endIndex &&\r\n                      this._string.charAt(this._currentIndex) == '.') {\r\n                      this._currentIndex++;\r\n                      // There must be a least one digit following the .\r\n                      if (this._currentIndex >= this._endIndex ||\r\n                          this._string.charAt(this._currentIndex) < '0' ||\r\n                          this._string.charAt(this._currentIndex) > '9')\r\n                          return undefined;\r\n                      while (this._currentIndex < this._endIndex &&\r\n                          this._string.charAt(this._currentIndex) >= '0' &&\r\n                          this._string.charAt(this._currentIndex) <= '9') {\r\n                          frac *= 10;\r\n                          decimal += (this._string.charAt(this._currentIndex) - '0') / frac;\r\n                          this._currentIndex += 1;\r\n                      }\r\n                  }\r\n                  // Read the exponent part.\r\n                  if (this._currentIndex != startIndex &&\r\n                      this._currentIndex + 1 < this._endIndex &&\r\n                      (this._string.charAt(this._currentIndex) == 'e' ||\r\n                          this._string.charAt(this._currentIndex) == 'E') &&\r\n                      this._string.charAt(this._currentIndex + 1) != 'x' &&\r\n                      this._string.charAt(this._currentIndex + 1) != 'm') {\r\n                      this._currentIndex++;\r\n                      // Read the sign of the exponent.\r\n                      if (this._string.charAt(this._currentIndex) == '+') {\r\n                          this._currentIndex++;\r\n                      }\r\n                      else if (this._string.charAt(this._currentIndex) == '-') {\r\n                          this._currentIndex++;\r\n                          expsign = -1;\r\n                      }\r\n                      // There must be an exponent.\r\n                      if (this._currentIndex >= this._endIndex ||\r\n                          this._string.charAt(this._currentIndex) < '0' ||\r\n                          this._string.charAt(this._currentIndex) > '9')\r\n                          return undefined;\r\n                      while (this._currentIndex < this._endIndex &&\r\n                          this._string.charAt(this._currentIndex) >= '0' &&\r\n                          this._string.charAt(this._currentIndex) <= '9') {\r\n                          exponent *= 10;\r\n                          exponent += this._string.charAt(this._currentIndex) - '0';\r\n                          this._currentIndex++;\r\n                      }\r\n                  }\r\n                  var number = integer + decimal;\r\n                  number *= sign;\r\n                  if (exponent)\r\n                      number *= Math.pow(10, expsign * exponent);\r\n                  if (startIndex == this._currentIndex)\r\n                      return undefined;\r\n                  this._skipOptionalSpacesOrDelimiter();\r\n                  return number;\r\n              };\r\n              Source.prototype._parseArcFlag = function () {\r\n                  if (this._currentIndex >= this._endIndex)\r\n                      return undefined;\r\n                  var flag = false;\r\n                  var flagChar = this._string.charAt(this._currentIndex++);\r\n                  if (flagChar == '0')\r\n                      flag = false;\r\n                  else if (flagChar == '1')\r\n                      flag = true;\r\n                  else\r\n                      return undefined;\r\n                  this._skipOptionalSpacesOrDelimiter();\r\n                  return flag;\r\n              };\r\n              Source.prototype.parseSegment = function () {\r\n                  var lookahead = this._string[this._currentIndex];\r\n                  var command = this._pathSegTypeFromChar(lookahead);\r\n                  if (command == window.SVGPathSeg.PATHSEG_UNKNOWN) {\r\n                      // Possibly an implicit command. Not allowed if this is the first command.\r\n                      if (this._previousCommand == window.SVGPathSeg.PATHSEG_UNKNOWN)\r\n                          return null;\r\n                      command = this._nextCommandHelper(lookahead, this._previousCommand);\r\n                      if (command == window.SVGPathSeg.PATHSEG_UNKNOWN)\r\n                          return null;\r\n                  }\r\n                  else {\r\n                      this._currentIndex++;\r\n                  }\r\n                  this._previousCommand = command;\r\n                  switch (command) {\r\n                      case window.SVGPathSeg.PATHSEG_MOVETO_REL:\r\n                          return new window.SVGPathSegMovetoRel(owningPathSegList, this._parseNumber(), this._parseNumber());\r\n                      case window.SVGPathSeg.PATHSEG_MOVETO_ABS:\r\n                          return new window.SVGPathSegMovetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber());\r\n                      case window.SVGPathSeg.PATHSEG_LINETO_REL:\r\n                          return new window.SVGPathSegLinetoRel(owningPathSegList, this._parseNumber(), this._parseNumber());\r\n                      case window.SVGPathSeg.PATHSEG_LINETO_ABS:\r\n                          return new window.SVGPathSegLinetoAbs(owningPathSegList, this._parseNumber(), this._parseNumber());\r\n                      case window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL:\r\n                          return new window.SVGPathSegLinetoHorizontalRel(owningPathSegList, this._parseNumber());\r\n                      case window.SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS:\r\n                          return new window.SVGPathSegLinetoHorizontalAbs(owningPathSegList, this._parseNumber());\r\n                      case window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL:\r\n                          return new window.SVGPathSegLinetoVerticalRel(owningPathSegList, this._parseNumber());\r\n                      case window.SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS:\r\n                          return new window.SVGPathSegLinetoVerticalAbs(owningPathSegList, this._parseNumber());\r\n                      case window.SVGPathSeg.PATHSEG_CLOSEPATH:\r\n                          this._skipOptionalSpaces();\r\n                          return new window.SVGPathSegClosePath(owningPathSegList);\r\n                      case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL:\r\n                          var points = {\r\n                              x1: this._parseNumber(),\r\n                              y1: this._parseNumber(),\r\n                              x2: this._parseNumber(),\r\n                              y2: this._parseNumber(),\r\n                              x: this._parseNumber(),\r\n                              y: this._parseNumber()\r\n                          };\r\n                          return new window.SVGPathSegCurvetoCubicRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2);\r\n                      case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS:\r\n                          var points = {\r\n                              x1: this._parseNumber(),\r\n                              y1: this._parseNumber(),\r\n                              x2: this._parseNumber(),\r\n                              y2: this._parseNumber(),\r\n                              x: this._parseNumber(),\r\n                              y: this._parseNumber()\r\n                          };\r\n                          return new window.SVGPathSegCurvetoCubicAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.x2, points.y2);\r\n                      case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL:\r\n                          var points = {\r\n                              x2: this._parseNumber(),\r\n                              y2: this._parseNumber(),\r\n                              x: this._parseNumber(),\r\n                              y: this._parseNumber()\r\n                          };\r\n                          return new window.SVGPathSegCurvetoCubicSmoothRel(owningPathSegList, points.x, points.y, points.x2, points.y2);\r\n                      case window.SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS:\r\n                          var points = {\r\n                              x2: this._parseNumber(),\r\n                              y2: this._parseNumber(),\r\n                              x: this._parseNumber(),\r\n                              y: this._parseNumber()\r\n                          };\r\n                          return new window.SVGPathSegCurvetoCubicSmoothAbs(owningPathSegList, points.x, points.y, points.x2, points.y2);\r\n                      case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL:\r\n                          var points = {\r\n                              x1: this._parseNumber(),\r\n                              y1: this._parseNumber(),\r\n                              x: this._parseNumber(),\r\n                              y: this._parseNumber()\r\n                          };\r\n                          return new window.SVGPathSegCurvetoQuadraticRel(owningPathSegList, points.x, points.y, points.x1, points.y1);\r\n                      case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS:\r\n                          var points = {\r\n                              x1: this._parseNumber(),\r\n                              y1: this._parseNumber(),\r\n                              x: this._parseNumber(),\r\n                              y: this._parseNumber()\r\n                          };\r\n                          return new window.SVGPathSegCurvetoQuadraticAbs(owningPathSegList, points.x, points.y, points.x1, points.y1);\r\n                      case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL:\r\n                          return new window.SVGPathSegCurvetoQuadraticSmoothRel(owningPathSegList, this._parseNumber(), this._parseNumber());\r\n                      case window.SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS:\r\n                          return new window.SVGPathSegCurvetoQuadraticSmoothAbs(owningPathSegList, this._parseNumber(), this._parseNumber());\r\n                      case window.SVGPathSeg.PATHSEG_ARC_REL:\r\n                          var points = {\r\n                              x1: this._parseNumber(),\r\n                              y1: this._parseNumber(),\r\n                              arcAngle: this._parseNumber(),\r\n                              arcLarge: this._parseArcFlag(),\r\n                              arcSweep: this._parseArcFlag(),\r\n                              x: this._parseNumber(),\r\n                              y: this._parseNumber()\r\n                          };\r\n                          return new window.SVGPathSegArcRel(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep);\r\n                      case window.SVGPathSeg.PATHSEG_ARC_ABS:\r\n                          var points = {\r\n                              x1: this._parseNumber(),\r\n                              y1: this._parseNumber(),\r\n                              arcAngle: this._parseNumber(),\r\n                              arcLarge: this._parseArcFlag(),\r\n                              arcSweep: this._parseArcFlag(),\r\n                              x: this._parseNumber(),\r\n                              y: this._parseNumber()\r\n                          };\r\n                          return new window.SVGPathSegArcAbs(owningPathSegList, points.x, points.y, points.x1, points.y1, points.arcAngle, points.arcLarge, points.arcSweep);\r\n                      default:\r\n                          throw 'Unknown path seg type.';\r\n                  }\r\n              };\r\n              var builder = new Builder();\r\n              var source = new Source(string);\r\n              if (!source.initialCommandIsMoveTo())\r\n                  return [];\r\n              while (source.hasMoreData()) {\r\n                  var pathSeg = source.parseSegment();\r\n                  if (!pathSeg)\r\n                      return [];\r\n                  builder.appendSegment(pathSeg);\r\n              }\r\n              return builder.pathSegList;\r\n          };\r\n      }\r\n  })();\r\n  // String.padEnd polyfill for IE11\r\n  //\r\n  // https://github.com/uxitten/polyfill/blob/master/string.polyfill.js\r\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd\r\n  if (!String.prototype.padEnd) {\r\n      String.prototype.padEnd = function padEnd(targetLength, padString) {\r\n          targetLength = targetLength >> 0; //floor if number or convert non-number to 0;\r\n          padString = String(typeof padString !== 'undefined' ? padString : ' ');\r\n          if (this.length > targetLength) {\r\n              return String(this);\r\n          }\r\n          else {\r\n              targetLength = targetLength - this.length;\r\n              if (targetLength > padString.length) {\r\n                  padString += padString.repeat(targetLength / padString.length); //append to original to ensure we are longer than needed\r\n              }\r\n              return String(this) + padString.slice(0, targetLength);\r\n          }\r\n      };\r\n  }\r\n  // Object.assign polyfill for IE11\r\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill\r\n  if (typeof Object.assign !== 'function') {\r\n      // Must be writable: true, enumerable: false, configurable: true\r\n      Object.defineProperty(Object, 'assign', {\r\n          value: function assign(target, varArgs) {\r\n              if (target === null || target === undefined) {\r\n                  throw new TypeError('Cannot convert undefined or null to object');\r\n              }\r\n              var to = Object(target);\r\n              for (var index = 1; index < arguments.length; index++) {\r\n                  var nextSource = arguments[index];\r\n                  if (nextSource !== null && nextSource !== undefined) {\r\n                      for (var nextKey in nextSource) {\r\n                          // Avoid bugs when hasOwnProperty is shadowed\r\n                          if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\r\n                              to[nextKey] = nextSource[nextKey];\r\n                          }\r\n                      }\r\n                  }\r\n              }\r\n              return to;\r\n          },\r\n          writable: true,\r\n          configurable: true\r\n      });\r\n  }\r\n  /* jshint ignore:end */\n\n  Chart.prototype.axis = function () { };\r\n  Chart.prototype.axis.labels = function (labels) {\r\n      var $$ = this.internal;\r\n      if (arguments.length) {\r\n          Object.keys(labels).forEach(function (axisId) {\r\n              $$.axis.setLabelText(axisId, labels[axisId]);\r\n          });\r\n          $$.axis.updateLabels();\r\n      }\r\n      // TODO: return some values?\r\n  };\r\n  Chart.prototype.axis.max = function (max) {\r\n      var $$ = this.internal, config = $$.config;\r\n      if (arguments.length) {\r\n          if (typeof max === 'object') {\r\n              if (isValue(max.x)) {\r\n                  config.axis_x_max = max.x;\r\n              }\r\n              if (isValue(max.y)) {\r\n                  config.axis_y_max = max.y;\r\n              }\r\n              if (isValue(max.y2)) {\r\n                  config.axis_y2_max = max.y2;\r\n              }\r\n          }\r\n          else {\r\n              config.axis_y_max = config.axis_y2_max = max;\r\n          }\r\n          $$.redraw({ withUpdateOrgXDomain: true, withUpdateXDomain: true });\r\n      }\r\n      else {\r\n          return {\r\n              x: config.axis_x_max,\r\n              y: config.axis_y_max,\r\n              y2: config.axis_y2_max\r\n          };\r\n      }\r\n  };\r\n  Chart.prototype.axis.min = function (min) {\r\n      var $$ = this.internal, config = $$.config;\r\n      if (arguments.length) {\r\n          if (typeof min === 'object') {\r\n              if (isValue(min.x)) {\r\n                  config.axis_x_min = min.x;\r\n              }\r\n              if (isValue(min.y)) {\r\n                  config.axis_y_min = min.y;\r\n              }\r\n              if (isValue(min.y2)) {\r\n                  config.axis_y2_min = min.y2;\r\n              }\r\n          }\r\n          else {\r\n              config.axis_y_min = config.axis_y2_min = min;\r\n          }\r\n          $$.redraw({ withUpdateOrgXDomain: true, withUpdateXDomain: true });\r\n      }\r\n      else {\r\n          return {\r\n              x: config.axis_x_min,\r\n              y: config.axis_y_min,\r\n              y2: config.axis_y2_min\r\n          };\r\n      }\r\n  };\r\n  Chart.prototype.axis.range = function (range) {\r\n      if (arguments.length) {\r\n          if (isDefined(range.max)) {\r\n              this.axis.max(range.max);\r\n          }\r\n          if (isDefined(range.min)) {\r\n              this.axis.min(range.min);\r\n          }\r\n      }\r\n      else {\r\n          return {\r\n              max: this.axis.max(),\r\n              min: this.axis.min()\r\n          };\r\n      }\r\n  };\r\n  Chart.prototype.axis.types = function (types) {\r\n      var $$ = this.internal;\r\n      if (types === undefined) {\r\n          return {\r\n              y: $$.config.axis_y_type,\r\n              y2: $$.config.axis_y2_type\r\n          };\r\n      }\r\n      else {\r\n          if (isDefined(types.y)) {\r\n              $$.config.axis_y_type = types.y;\r\n          }\r\n          if (isDefined(types.y2)) {\r\n              $$.config.axis_y2_type = types.y2;\r\n          }\r\n          $$.updateScales();\r\n          $$.redraw();\r\n      }\r\n  };\n\n  Chart.prototype.category = function (i, category) {\r\n      var $$ = this.internal, config = $$.config;\r\n      if (arguments.length > 1) {\r\n          config.axis_x_categories[i] = category;\r\n          $$.redraw();\r\n      }\r\n      return config.axis_x_categories[i];\r\n  };\r\n  Chart.prototype.categories = function (categories) {\r\n      var $$ = this.internal, config = $$.config;\r\n      if (!arguments.length) {\r\n          return config.axis_x_categories;\r\n      }\r\n      config.axis_x_categories = categories;\r\n      $$.redraw();\r\n      return config.axis_x_categories;\r\n  };\n\n  Chart.prototype.resize = function (size) {\r\n      var $$ = this.internal, config = $$.config;\r\n      config.size_width = size ? size.width : null;\r\n      config.size_height = size ? size.height : null;\r\n      this.flush();\r\n  };\r\n  Chart.prototype.flush = function () {\r\n      var $$ = this.internal;\r\n      $$.updateAndRedraw({\r\n          withLegend: true,\r\n          withTransition: false,\r\n          withTransitionForTransform: false\r\n      });\r\n  };\r\n  Chart.prototype.destroy = function () {\r\n      var $$ = this.internal;\r\n      window.clearInterval($$.intervalForObserveInserted);\r\n      if ($$.resizeTimeout !== undefined) {\r\n          window.clearTimeout($$.resizeTimeout);\r\n      }\r\n      window.removeEventListener('resize', $$.resizeIfElementDisplayed);\r\n      // Removes the inner resize functions\r\n      $$.resizeFunction.remove();\r\n      // Unbinds from the window focus event\r\n      $$.unbindWindowFocus();\r\n      $$.selectChart.classed('c3', false).html('');\r\n      // MEMO: this is needed because the reference of some elements will not be released, then memory leak will happen.\r\n      Object.keys($$).forEach(function (key) {\r\n          $$[key] = null;\r\n      });\r\n      return null;\r\n  };\n\n  // TODO: fix\r\n  Chart.prototype.color = function (id) {\r\n      var $$ = this.internal;\r\n      return $$.color(id); // more patterns\r\n  };\n\n  Chart.prototype.data = function (targetIds) {\r\n      var targets = this.internal.data.targets;\r\n      return typeof targetIds === 'undefined'\r\n          ? targets\r\n          : targets.filter(function (t) {\r\n              return [].concat(targetIds).indexOf(t.id) >= 0;\r\n          });\r\n  };\r\n  Chart.prototype.data.shown = function (targetIds) {\r\n      return this.internal.filterTargetsToShow(this.data(targetIds));\r\n  };\r\n  /**\r\n   * Get values of the data loaded in the chart.\r\n   *\r\n   * @param {String|Array} targetId This API returns the value of specified target.\r\n   * @param flat\r\n   * @return {Array} Data values\r\n   */\r\n  Chart.prototype.data.values = function (targetId, flat) {\r\n      if (flat === void 0) { flat = true; }\r\n      var values = null;\r\n      if (targetId) {\r\n          var targets = this.data(targetId);\r\n          if (targets && isArray(targets)) {\r\n              values = targets.reduce(function (ret, v) {\r\n                  var dataValue = v.values.map(function (d) { return d.value; });\r\n                  if (flat) {\r\n                      ret = ret.concat(dataValue);\r\n                  }\r\n                  else {\r\n                      ret.push(dataValue);\r\n                  }\r\n                  return ret;\r\n              }, []);\r\n          }\r\n      }\r\n      return values;\r\n  };\r\n  Chart.prototype.data.names = function (names) {\r\n      this.internal.clearLegendItemTextBoxCache();\r\n      return this.internal.updateDataAttributes('names', names);\r\n  };\r\n  Chart.prototype.data.colors = function (colors) {\r\n      return this.internal.updateDataAttributes('colors', colors);\r\n  };\r\n  Chart.prototype.data.axes = function (axes) {\r\n      return this.internal.updateDataAttributes('axes', axes);\r\n  };\r\n  Chart.prototype.data.stackNormalized = function (normalized) {\r\n      if (normalized === undefined) {\r\n          return this.internal.isStackNormalized();\r\n      }\r\n      this.internal.config.data_stack_normalize = !!normalized;\r\n      this.internal.redraw();\r\n  };\n\n  Chart.prototype.donut = function () { };\r\n  Chart.prototype.donut.padAngle = function (padAngle) {\r\n      if (padAngle === undefined) {\r\n          return this.internal.config.donut_padAngle;\r\n      }\r\n      this.internal.config.donut_padAngle = padAngle;\r\n      this.flush();\r\n  };\n\n  Chart.prototype.flow = function (args) {\r\n      var $$ = this.internal, targets, data, notfoundIds = [], orgDataCount = $$.getMaxDataCount(), dataCount, domain, baseTarget, baseValue, length = 0, tail = 0, diff, to;\r\n      if (args.json) {\r\n          data = $$.convertJsonToData(args.json, args.keys);\r\n      }\r\n      else if (args.rows) {\r\n          data = $$.convertRowsToData(args.rows);\r\n      }\r\n      else if (args.columns) {\r\n          data = $$.convertColumnsToData(args.columns);\r\n      }\r\n      else {\r\n          return;\r\n      }\r\n      targets = $$.convertDataToTargets(data, true);\r\n      // Update/Add data\r\n      $$.data.targets.forEach(function (t) {\r\n          var found = false, i, j;\r\n          for (i = 0; i < targets.length; i++) {\r\n              if (t.id === targets[i].id) {\r\n                  found = true;\r\n                  if (t.values[t.values.length - 1]) {\r\n                      tail = t.values[t.values.length - 1].index + 1;\r\n                  }\r\n                  length = targets[i].values.length;\r\n                  for (j = 0; j < length; j++) {\r\n                      targets[i].values[j].index = tail + j;\r\n                      if (!$$.isTimeSeries()) {\r\n                          targets[i].values[j].x = tail + j;\r\n                      }\r\n                  }\r\n                  t.values = t.values.concat(targets[i].values);\r\n                  targets.splice(i, 1);\r\n                  break;\r\n              }\r\n          }\r\n          if (!found) {\r\n              notfoundIds.push(t.id);\r\n          }\r\n      });\r\n      // Append null for not found targets\r\n      $$.data.targets.forEach(function (t) {\r\n          var i, j;\r\n          for (i = 0; i < notfoundIds.length; i++) {\r\n              if (t.id === notfoundIds[i]) {\r\n                  tail = t.values[t.values.length - 1].index + 1;\r\n                  for (j = 0; j < length; j++) {\r\n                      t.values.push({\r\n                          id: t.id,\r\n                          index: tail + j,\r\n                          x: $$.isTimeSeries() ? $$.getOtherTargetX(tail + j) : tail + j,\r\n                          value: null\r\n                      });\r\n                  }\r\n              }\r\n          }\r\n      });\r\n      // Generate null values for new target\r\n      if ($$.data.targets.length) {\r\n          targets.forEach(function (t) {\r\n              var i, missing = [];\r\n              for (i = $$.data.targets[0].values[0].index; i < tail; i++) {\r\n                  missing.push({\r\n                      id: t.id,\r\n                      index: i,\r\n                      x: $$.isTimeSeries() ? $$.getOtherTargetX(i) : i,\r\n                      value: null\r\n                  });\r\n              }\r\n              t.values.forEach(function (v) {\r\n                  v.index += tail;\r\n                  if (!$$.isTimeSeries()) {\r\n                      v.x += tail;\r\n                  }\r\n              });\r\n              t.values = missing.concat(t.values);\r\n          });\r\n      }\r\n      $$.data.targets = $$.data.targets.concat(targets); // add remained\r\n      // check data count because behavior needs to change when it's only one\r\n      dataCount = $$.getMaxDataCount();\r\n      baseTarget = $$.data.targets[0];\r\n      baseValue = baseTarget.values[0];\r\n      // Update length to flow if needed\r\n      if (isDefined(args.to)) {\r\n          length = 0;\r\n          to = $$.isTimeSeries() ? $$.parseDate(args.to) : args.to;\r\n          baseTarget.values.forEach(function (v) {\r\n              if (v.x < to) {\r\n                  length++;\r\n              }\r\n          });\r\n      }\r\n      else if (isDefined(args.length)) {\r\n          length = args.length;\r\n      }\r\n      // If only one data, update the domain to flow from left edge of the chart\r\n      if (!orgDataCount) {\r\n          if ($$.isTimeSeries()) {\r\n              if (baseTarget.values.length > 1) {\r\n                  diff = baseTarget.values[baseTarget.values.length - 1].x - baseValue.x;\r\n              }\r\n              else {\r\n                  diff = baseValue.x - $$.getXDomain($$.data.targets)[0];\r\n              }\r\n          }\r\n          else {\r\n              diff = 1;\r\n          }\r\n          domain = [baseValue.x - diff, baseValue.x];\r\n          $$.updateXDomain(null, true, true, false, domain);\r\n      }\r\n      else if (orgDataCount === 1) {\r\n          if ($$.isTimeSeries()) {\r\n              diff =\r\n                  (baseTarget.values[baseTarget.values.length - 1].x - baseValue.x) / 2;\r\n              domain = [new Date(+baseValue.x - diff), new Date(+baseValue.x + diff)];\r\n              $$.updateXDomain(null, true, true, false, domain);\r\n          }\r\n      }\r\n      // Set targets\r\n      $$.updateTargets($$.data.targets);\r\n      // Redraw with new targets\r\n      $$.redraw({\r\n          flow: {\r\n              index: baseValue.index,\r\n              length: length,\r\n              duration: isValue(args.duration)\r\n                  ? args.duration\r\n                  : $$.config.transition_duration,\r\n              done: args.done,\r\n              orgDataCount: orgDataCount\r\n          },\r\n          withLegend: true,\r\n          withTransition: orgDataCount > 1,\r\n          withTrimXDomain: false,\r\n          withUpdateXAxis: true\r\n      });\r\n  };\r\n  ChartInternal.prototype.generateFlow = function (args) {\r\n      var $$ = this, config = $$.config, d3 = $$.d3;\r\n      return function () {\r\n          var targets = args.targets, flow = args.flow, drawBar = args.drawBar, drawLine = args.drawLine, drawArea = args.drawArea, cx = args.cx, cy = args.cy, xv = args.xv, xForText = args.xForText, yForText = args.yForText, duration = args.duration;\r\n          var translateX, scaleX = 1, transform, flowIndex = flow.index, flowLength = flow.length, flowStart = $$.getValueOnIndex($$.data.targets[0].values, flowIndex), flowEnd = $$.getValueOnIndex($$.data.targets[0].values, flowIndex + flowLength), orgDomain = $$.x.domain(), domain, durationForFlow = flow.duration || duration, done = flow.done || function () { }, wait = $$.generateWait();\r\n          var xgrid, xgridLines, mainRegion, mainText, mainBar, mainLine, mainArea, mainCircle;\r\n          // set flag\r\n          $$.flowing = true;\r\n          // remove head data after rendered\r\n          $$.data.targets.forEach(function (d) {\r\n              d.values.splice(0, flowLength);\r\n          });\r\n          // update x domain to generate axis elements for flow\r\n          domain = $$.updateXDomain(targets, true, true);\r\n          // update elements related to x scale\r\n          if ($$.updateXGrid) {\r\n              $$.updateXGrid(true);\r\n          }\r\n          xgrid = $$.xgrid || d3.selectAll([]); // xgrid needs to be obtained after updateXGrid\r\n          xgridLines = $$.xgridLines || d3.selectAll([]);\r\n          mainRegion = $$.mainRegion || d3.selectAll([]);\r\n          mainText = $$.mainText || d3.selectAll([]);\r\n          mainBar = $$.mainBar || d3.selectAll([]);\r\n          mainLine = $$.mainLine || d3.selectAll([]);\r\n          mainArea = $$.mainArea || d3.selectAll([]);\r\n          mainCircle = $$.mainCircle || d3.selectAll([]);\r\n          // generate transform to flow\r\n          if (!flow.orgDataCount) {\r\n              // if empty\r\n              if ($$.data.targets[0].values.length !== 1) {\r\n                  translateX = $$.x(orgDomain[0]) - $$.x(domain[0]);\r\n              }\r\n              else {\r\n                  if ($$.isTimeSeries()) {\r\n                      flowStart = $$.getValueOnIndex($$.data.targets[0].values, 0);\r\n                      flowEnd = $$.getValueOnIndex($$.data.targets[0].values, $$.data.targets[0].values.length - 1);\r\n                      translateX = $$.x(flowStart.x) - $$.x(flowEnd.x);\r\n                  }\r\n                  else {\r\n                      translateX = diffDomain(domain) / 2;\r\n                  }\r\n              }\r\n          }\r\n          else if (flow.orgDataCount === 1 ||\r\n              (flowStart && flowStart.x) === (flowEnd && flowEnd.x)) {\r\n              translateX = $$.x(orgDomain[0]) - $$.x(domain[0]);\r\n          }\r\n          else {\r\n              if ($$.isTimeSeries()) {\r\n                  translateX = $$.x(orgDomain[0]) - $$.x(domain[0]);\r\n              }\r\n              else {\r\n                  translateX = $$.x(flowStart.x) - $$.x(flowEnd.x);\r\n              }\r\n          }\r\n          scaleX = diffDomain(orgDomain) / diffDomain(domain);\r\n          transform = 'translate(' + translateX + ',0) scale(' + scaleX + ',1)';\r\n          $$.hideXGridFocus();\r\n          var flowTransition = d3\r\n              .transition()\r\n              .ease(d3.easeLinear)\r\n              .duration(durationForFlow);\r\n          wait.add($$.xAxis($$.axes.x, flowTransition));\r\n          wait.add(mainBar.transition(flowTransition).attr('transform', transform));\r\n          wait.add(mainLine.transition(flowTransition).attr('transform', transform));\r\n          wait.add(mainArea.transition(flowTransition).attr('transform', transform));\r\n          wait.add(mainCircle.transition(flowTransition).attr('transform', transform));\r\n          wait.add(mainText.transition(flowTransition).attr('transform', transform));\r\n          wait.add(mainRegion\r\n              .filter($$.isRegionOnX)\r\n              .transition(flowTransition)\r\n              .attr('transform', transform));\r\n          wait.add(xgrid.transition(flowTransition).attr('transform', transform));\r\n          wait.add(xgridLines.transition(flowTransition).attr('transform', transform));\r\n          wait(function () {\r\n              var i, shapes = [], texts = [];\r\n              // remove flowed elements\r\n              if (flowLength) {\r\n                  for (i = 0; i < flowLength; i++) {\r\n                      shapes.push('.' + CLASS.shape + '-' + (flowIndex + i));\r\n                      texts.push('.' + CLASS.text + '-' + (flowIndex + i));\r\n                  }\r\n                  $$.svg\r\n                      .selectAll('.' + CLASS.shapes)\r\n                      .selectAll(shapes)\r\n                      .remove();\r\n                  $$.svg\r\n                      .selectAll('.' + CLASS.texts)\r\n                      .selectAll(texts)\r\n                      .remove();\r\n                  $$.svg.select('.' + CLASS.xgrid).remove();\r\n              }\r\n              // draw again for removing flowed elements and reverting attr\r\n              xgrid\r\n                  .attr('transform', null)\r\n                  .attr('x1', $$.xgridAttr.x1)\r\n                  .attr('x2', $$.xgridAttr.x2)\r\n                  .attr('y1', $$.xgridAttr.y1)\r\n                  .attr('y2', $$.xgridAttr.y2)\r\n                  .style('opacity', $$.xgridAttr.opacity);\r\n              xgridLines.attr('transform', null);\r\n              xgridLines\r\n                  .select('line')\r\n                  .attr('x1', config.axis_rotated ? 0 : xv)\r\n                  .attr('x2', config.axis_rotated ? $$.width : xv);\r\n              xgridLines\r\n                  .select('text')\r\n                  .attr('x', config.axis_rotated ? $$.width : 0)\r\n                  .attr('y', xv);\r\n              mainBar.attr('transform', null).attr('d', drawBar);\r\n              mainLine.attr('transform', null).attr('d', drawLine);\r\n              mainArea.attr('transform', null).attr('d', drawArea);\r\n              mainCircle\r\n                  .attr('transform', null)\r\n                  .attr('cx', cx)\r\n                  .attr('cy', cy);\r\n              mainText\r\n                  .attr('transform', null)\r\n                  .attr('x', xForText)\r\n                  .attr('y', yForText)\r\n                  .style('fill-opacity', $$.opacityForText.bind($$));\r\n              mainRegion.attr('transform', null);\r\n              mainRegion\r\n                  .filter($$.isRegionOnX)\r\n                  .attr('x', $$.regionX.bind($$))\r\n                  .attr('width', $$.regionWidth.bind($$));\r\n              // callback for end of flow\r\n              done();\r\n              $$.flowing = false;\r\n          });\r\n      };\r\n  };\n\n  Chart.prototype.focus = function (targetIds) {\r\n      var $$ = this.internal, candidates;\r\n      targetIds = $$.mapToTargetIds(targetIds);\r\n      (candidates = $$.svg.selectAll($$.selectorTargets(targetIds.filter($$.isTargetToShow, $$)))),\r\n          this.revert();\r\n      this.defocus();\r\n      candidates.classed(CLASS.focused, true).classed(CLASS.defocused, false);\r\n      if ($$.hasArcType()) {\r\n          $$.expandArc(targetIds);\r\n      }\r\n      $$.toggleFocusLegend(targetIds, true);\r\n      $$.focusedTargetIds = targetIds;\r\n      $$.defocusedTargetIds = $$.defocusedTargetIds.filter(function (id) {\r\n          return targetIds.indexOf(id) < 0;\r\n      });\r\n  };\r\n  Chart.prototype.defocus = function (targetIds) {\r\n      var $$ = this.internal, candidates;\r\n      targetIds = $$.mapToTargetIds(targetIds);\r\n      (candidates = $$.svg.selectAll($$.selectorTargets(targetIds.filter($$.isTargetToShow, $$)))),\r\n          candidates.classed(CLASS.focused, false).classed(CLASS.defocused, true);\r\n      if ($$.hasArcType()) {\r\n          $$.unexpandArc(targetIds);\r\n      }\r\n      $$.toggleFocusLegend(targetIds, false);\r\n      $$.focusedTargetIds = $$.focusedTargetIds.filter(function (id) {\r\n          return targetIds.indexOf(id) < 0;\r\n      });\r\n      $$.defocusedTargetIds = targetIds;\r\n  };\r\n  Chart.prototype.revert = function (targetIds) {\r\n      var $$ = this.internal, candidates;\r\n      targetIds = $$.mapToTargetIds(targetIds);\r\n      candidates = $$.svg.selectAll($$.selectorTargets(targetIds)); // should be for all targets\r\n      candidates.classed(CLASS.focused, false).classed(CLASS.defocused, false);\r\n      if ($$.hasArcType()) {\r\n          $$.unexpandArc(targetIds);\r\n      }\r\n      if ($$.config.legend_show) {\r\n          $$.showLegend(targetIds.filter($$.isLegendToShow.bind($$)));\r\n          $$.legend\r\n              .selectAll($$.selectorLegends(targetIds))\r\n              .filter(function () {\r\n              return $$.d3.select(this).classed(CLASS.legendItemFocused);\r\n          })\r\n              .classed(CLASS.legendItemFocused, false);\r\n      }\r\n      $$.focusedTargetIds = [];\r\n      $$.defocusedTargetIds = [];\r\n  };\n\n  Chart.prototype.xgrids = function (grids) {\r\n      var $$ = this.internal, config = $$.config;\r\n      if (!grids) {\r\n          return config.grid_x_lines;\r\n      }\r\n      config.grid_x_lines = grids;\r\n      $$.redrawWithoutRescale();\r\n      return config.grid_x_lines;\r\n  };\r\n  Chart.prototype.xgrids.add = function (grids) {\r\n      var $$ = this.internal;\r\n      return this.xgrids($$.config.grid_x_lines.concat(grids ? grids : []));\r\n  };\r\n  Chart.prototype.xgrids.remove = function (params) {\r\n      // TODO: multiple\r\n      var $$ = this.internal;\r\n      $$.removeGridLines(params, true);\r\n  };\r\n  Chart.prototype.ygrids = function (grids) {\r\n      var $$ = this.internal, config = $$.config;\r\n      if (!grids) {\r\n          return config.grid_y_lines;\r\n      }\r\n      config.grid_y_lines = grids;\r\n      $$.redrawWithoutRescale();\r\n      return config.grid_y_lines;\r\n  };\r\n  Chart.prototype.ygrids.add = function (grids) {\r\n      var $$ = this.internal;\r\n      return this.ygrids($$.config.grid_y_lines.concat(grids ? grids : []));\r\n  };\r\n  Chart.prototype.ygrids.remove = function (params) {\r\n      // TODO: multiple\r\n      var $$ = this.internal;\r\n      $$.removeGridLines(params, false);\r\n  };\n\n  Chart.prototype.groups = function (groups) {\r\n      var $$ = this.internal, config = $$.config;\r\n      if (isUndefined(groups)) {\r\n          return config.data_groups;\r\n      }\r\n      config.data_groups = groups;\r\n      $$.redraw();\r\n      return config.data_groups;\r\n  };\n\n  Chart.prototype.legend = function () { };\r\n  Chart.prototype.legend.show = function (targetIds) {\r\n      var $$ = this.internal;\r\n      $$.showLegend($$.mapToTargetIds(targetIds));\r\n      $$.updateAndRedraw({ withLegend: true });\r\n  };\r\n  Chart.prototype.legend.hide = function (targetIds) {\r\n      var $$ = this.internal;\r\n      $$.hideLegend($$.mapToTargetIds(targetIds));\r\n      $$.updateAndRedraw({ withLegend: false });\r\n  };\n\n  Chart.prototype.load = function (args) {\r\n      var $$ = this.internal, config = $$.config;\r\n      // update xs if specified\r\n      if (args.xs) {\r\n          $$.addXs(args.xs);\r\n      }\r\n      // update names if exists\r\n      if ('names' in args) {\r\n          Chart.prototype.data.names.bind(this)(args.names);\r\n      }\r\n      // update classes if exists\r\n      if ('classes' in args) {\r\n          Object.keys(args.classes).forEach(function (id) {\r\n              config.data_classes[id] = args.classes[id];\r\n          });\r\n      }\r\n      // update categories if exists\r\n      if ('categories' in args && $$.isCategorized()) {\r\n          config.axis_x_categories = args.categories;\r\n      }\r\n      // update axes if exists\r\n      if ('axes' in args) {\r\n          Object.keys(args.axes).forEach(function (id) {\r\n              config.data_axes[id] = args.axes[id];\r\n          });\r\n      }\r\n      // update colors if exists\r\n      if ('colors' in args) {\r\n          Object.keys(args.colors).forEach(function (id) {\r\n              config.data_colors[id] = args.colors[id];\r\n          });\r\n      }\r\n      // use cache if exists\r\n      if ('cacheIds' in args && $$.hasCaches(args.cacheIds)) {\r\n          $$.load($$.getCaches(args.cacheIds), args.done);\r\n          return;\r\n      }\r\n      // unload if needed\r\n      if (args.unload) {\r\n          // TODO: do not unload if target will load (included in url/rows/columns)\r\n          $$.unload($$.mapToTargetIds(args.unload === true ? null : args.unload), function () {\r\n              $$.loadFromArgs(args);\r\n          });\r\n      }\r\n      else {\r\n          $$.loadFromArgs(args);\r\n      }\r\n  };\r\n  Chart.prototype.unload = function (args) {\r\n      var $$ = this.internal;\r\n      args = args || {};\r\n      if (args instanceof Array) {\r\n          args = { ids: args };\r\n      }\r\n      else if (typeof args === 'string') {\r\n          args = { ids: [args] };\r\n      }\r\n      $$.unload($$.mapToTargetIds(args.ids), function () {\r\n          $$.redraw({\r\n              withUpdateOrgXDomain: true,\r\n              withUpdateXDomain: true,\r\n              withLegend: true\r\n          });\r\n          if (args.done) {\r\n              args.done();\r\n          }\r\n      });\r\n  };\n\n  Chart.prototype.pie = function () { };\r\n  Chart.prototype.pie.padAngle = function (padAngle) {\r\n      if (padAngle === undefined) {\r\n          return this.internal.config.pie_padAngle;\r\n      }\r\n      this.internal.config.pie_padAngle = padAngle;\r\n      this.flush();\r\n  };\n\n  Chart.prototype.regions = function (regions) {\r\n      var $$ = this.internal, config = $$.config;\r\n      if (!regions) {\r\n          return config.regions;\r\n      }\r\n      config.regions = regions;\r\n      $$.redrawWithoutRescale();\r\n      return config.regions;\r\n  };\r\n  Chart.prototype.regions.add = function (regions) {\r\n      var $$ = this.internal, config = $$.config;\r\n      if (!regions) {\r\n          return config.regions;\r\n      }\r\n      config.regions = config.regions.concat(regions);\r\n      $$.redrawWithoutRescale();\r\n      return config.regions;\r\n  };\r\n  Chart.prototype.regions.remove = function (options) {\r\n      var $$ = this.internal, config = $$.config, duration, classes, regions;\r\n      options = options || {};\r\n      duration = getOption(options, 'duration', config.transition_duration);\r\n      classes = getOption(options, 'classes', [CLASS.region]);\r\n      regions = $$.main.select('.' + CLASS.regions).selectAll(classes.map(function (c) {\r\n          return '.' + c;\r\n      }));\r\n      (duration ? regions.transition().duration(duration) : regions)\r\n          .style('opacity', 0)\r\n          .remove();\r\n      config.regions = config.regions.filter(function (region) {\r\n          var found = false;\r\n          if (!region['class']) {\r\n              return true;\r\n          }\r\n          region['class'].split(' ').forEach(function (c) {\r\n              if (classes.indexOf(c) >= 0) {\r\n                  found = true;\r\n              }\r\n          });\r\n          return !found;\r\n      });\r\n      return config.regions;\r\n  };\n\n  Chart.prototype.selected = function (targetId) {\r\n      var $$ = this.internal, d3 = $$.d3;\r\n      return $$.main\r\n          .selectAll('.' + CLASS.shapes + $$.getTargetSelectorSuffix(targetId))\r\n          .selectAll('.' + CLASS.shape)\r\n          .filter(function () {\r\n          return d3.select(this).classed(CLASS.SELECTED);\r\n      })\r\n          .nodes()\r\n          .map(function (d) {\r\n          var data = d.__data__;\r\n          return data.data ? data.data : data;\r\n      });\r\n  };\r\n  Chart.prototype.select = function (ids, indices, resetOther) {\r\n      var $$ = this.internal, d3 = $$.d3, config = $$.config;\r\n      if (!config.data_selection_enabled) {\r\n          return;\r\n      }\r\n      $$.main\r\n          .selectAll('.' + CLASS.shapes)\r\n          .selectAll('.' + CLASS.shape)\r\n          .each(function (d, i) {\r\n          var shape = d3.select(this), id = d.data ? d.data.id : d.id, toggle = $$.getToggle(this, d).bind($$), isTargetId = config.data_selection_grouped || !ids || ids.indexOf(id) >= 0, isTargetIndex = !indices || indices.indexOf(i) >= 0, isSelected = shape.classed(CLASS.SELECTED);\r\n          // line/area selection not supported yet\r\n          if (shape.classed(CLASS.line) || shape.classed(CLASS.area)) {\r\n              return;\r\n          }\r\n          if (isTargetId && isTargetIndex) {\r\n              if (config.data_selection_isselectable(d) && !isSelected) {\r\n                  toggle(true, shape.classed(CLASS.SELECTED, true), d, i);\r\n              }\r\n          }\r\n          else if (isDefined(resetOther) && resetOther) {\r\n              if (isSelected) {\r\n                  toggle(false, shape.classed(CLASS.SELECTED, false), d, i);\r\n              }\r\n          }\r\n      });\r\n  };\r\n  Chart.prototype.unselect = function (ids, indices) {\r\n      var $$ = this.internal, d3 = $$.d3, config = $$.config;\r\n      if (!config.data_selection_enabled) {\r\n          return;\r\n      }\r\n      $$.main\r\n          .selectAll('.' + CLASS.shapes)\r\n          .selectAll('.' + CLASS.shape)\r\n          .each(function (d, i) {\r\n          var shape = d3.select(this), id = d.data ? d.data.id : d.id, toggle = $$.getToggle(this, d).bind($$), isTargetId = config.data_selection_grouped || !ids || ids.indexOf(id) >= 0, isTargetIndex = !indices || indices.indexOf(i) >= 0, isSelected = shape.classed(CLASS.SELECTED);\r\n          // line/area selection not supported yet\r\n          if (shape.classed(CLASS.line) || shape.classed(CLASS.area)) {\r\n              return;\r\n          }\r\n          if (isTargetId && isTargetIndex) {\r\n              if (config.data_selection_isselectable(d)) {\r\n                  if (isSelected) {\r\n                      toggle(false, shape.classed(CLASS.SELECTED, false), d, i);\r\n                  }\r\n              }\r\n          }\r\n      });\r\n  };\n\n  Chart.prototype.show = function (targetIds, options) {\r\n      var $$ = this.internal, targets;\r\n      targetIds = $$.mapToTargetIds(targetIds);\r\n      options = options || {};\r\n      $$.removeHiddenTargetIds(targetIds);\r\n      targets = $$.svg.selectAll($$.selectorTargets(targetIds));\r\n      targets\r\n          .transition()\r\n          .style('display', isIE() ? 'block' : 'initial', 'important')\r\n          .style('opacity', 1, 'important')\r\n          .call($$.endall, function () {\r\n          targets.style('opacity', null).style('opacity', 1);\r\n      });\r\n      if (options.withLegend) {\r\n          $$.showLegend(targetIds);\r\n      }\r\n      $$.redraw({\r\n          withUpdateOrgXDomain: true,\r\n          withUpdateXDomain: true,\r\n          withLegend: true\r\n      });\r\n  };\r\n  Chart.prototype.hide = function (targetIds, options) {\r\n      var $$ = this.internal, targets;\r\n      targetIds = $$.mapToTargetIds(targetIds);\r\n      options = options || {};\r\n      $$.addHiddenTargetIds(targetIds);\r\n      targets = $$.svg.selectAll($$.selectorTargets(targetIds));\r\n      targets\r\n          .transition()\r\n          .style('opacity', 0, 'important')\r\n          .call($$.endall, function () {\r\n          targets.style('opacity', null).style('opacity', 0);\r\n          targets.style('display', 'none');\r\n      });\r\n      if (options.withLegend) {\r\n          $$.hideLegend(targetIds);\r\n      }\r\n      $$.redraw({\r\n          withUpdateOrgXDomain: true,\r\n          withUpdateXDomain: true,\r\n          withLegend: true\r\n      });\r\n  };\r\n  Chart.prototype.toggle = function (targetIds, options) {\r\n      var that = this, $$ = this.internal;\r\n      $$.mapToTargetIds(targetIds).forEach(function (targetId) {\r\n          $$.isTargetToShow(targetId)\r\n              ? that.hide(targetId, options)\r\n              : that.show(targetId, options);\r\n      });\r\n  };\n\n  Chart.prototype.subchart = function () { };\r\n  Chart.prototype.subchart.isShown = function () {\r\n      var $$ = this.internal;\r\n      return $$.config.subchart_show;\r\n  };\r\n  Chart.prototype.subchart.show = function () {\r\n      var $$ = this.internal;\r\n      if ($$.config.subchart_show) {\r\n          return;\r\n      }\r\n      $$.config.subchart_show = true;\r\n      // insert DOM\r\n      $$.initSubchart();\r\n      // update dimensions with sub chart now visible\r\n      $$.updateDimension();\r\n      // insert brush (depends on sizes previously updated)\r\n      $$.initSubchartBrush();\r\n      // attach data\r\n      $$.updateTargetsForSubchart($$.getTargets());\r\n      // reset fade-in state\r\n      $$.mapToIds($$.data.targets).forEach(function (id) {\r\n          $$.withoutFadeIn[id] = false;\r\n      });\r\n      // redraw chart !\r\n      $$.updateAndRedraw();\r\n      // update visible targets !\r\n      $$.showTargets();\r\n  };\r\n  Chart.prototype.subchart.hide = function () {\r\n      var $$ = this.internal;\r\n      if (!$$.config.subchart_show) {\r\n          return;\r\n      }\r\n      $$.config.subchart_show = false;\r\n      // remove DOM\r\n      $$.removeSubchart();\r\n      // re-render chart\r\n      $$.redraw();\r\n  };\n\n  Chart.prototype.tooltip = function () { };\r\n  Chart.prototype.tooltip.show = function (args) {\r\n      var $$ = this.internal, targets, data, mouse = {};\r\n      // determine mouse position on the chart\r\n      if (args.mouse) {\r\n          mouse = args.mouse;\r\n      }\r\n      else {\r\n          // determine focus data\r\n          if (args.data) {\r\n              data = args.data;\r\n          }\r\n          else if (typeof args.x !== 'undefined') {\r\n              if (args.id) {\r\n                  targets = $$.data.targets.filter(function (t) {\r\n                      return t.id === args.id;\r\n                  });\r\n              }\r\n              else {\r\n                  targets = $$.data.targets;\r\n              }\r\n              data = $$.filterByX(targets, args.x).slice(0, 1)[0];\r\n          }\r\n          mouse = data ? $$.getMousePosition(data) : null;\r\n      }\r\n      // emulate mouse events to show\r\n      $$.dispatchEvent('mousemove', mouse);\r\n      $$.config.tooltip_onshow.call($$, data);\r\n  };\r\n  Chart.prototype.tooltip.hide = function () {\r\n      // TODO: get target data by checking the state of focus\r\n      this.internal.dispatchEvent('mouseout', 0);\r\n      this.internal.config.tooltip_onhide.call(this);\r\n  };\n\n  Chart.prototype.transform = function (type, targetIds) {\r\n      var $$ = this.internal, options = ['pie', 'donut'].indexOf(type) >= 0 ? { withTransform: true } : null;\r\n      $$.transformTo(targetIds, type, options);\r\n  };\r\n  ChartInternal.prototype.transformTo = function (targetIds, type, optionsForRedraw) {\r\n      var $$ = this, withTransitionForAxis = !$$.hasArcType(), options = optionsForRedraw || {\r\n          withTransitionForAxis: withTransitionForAxis\r\n      };\r\n      options.withTransitionForTransform = false;\r\n      $$.transiting = false;\r\n      $$.setTargetType(targetIds, type);\r\n      $$.updateTargets($$.data.targets); // this is needed when transforming to arc\r\n      $$.updateAndRedraw(options);\r\n  };\n\n  Chart.prototype.x = function (x) {\r\n      var $$ = this.internal;\r\n      if (arguments.length) {\r\n          $$.updateTargetX($$.data.targets, x);\r\n          $$.redraw({ withUpdateOrgXDomain: true, withUpdateXDomain: true });\r\n      }\r\n      return $$.data.xs;\r\n  };\r\n  Chart.prototype.xs = function (xs) {\r\n      var $$ = this.internal;\r\n      if (arguments.length) {\r\n          $$.updateTargetXs($$.data.targets, xs);\r\n          $$.redraw({ withUpdateOrgXDomain: true, withUpdateXDomain: true });\r\n      }\r\n      return $$.data.xs;\r\n  };\n\n  Chart.prototype.zoom = function (domain) {\r\n      var $$ = this.internal;\r\n      if (domain) {\r\n          if ($$.isTimeSeries()) {\r\n              domain = domain.map(function (x) {\r\n                  return $$.parseDate(x);\r\n              });\r\n          }\r\n          if ($$.config.subchart_show) {\r\n              $$.brush.selectionAsValue(domain, true);\r\n          }\r\n          else {\r\n              $$.updateXDomain(null, true, false, false, domain);\r\n              $$.redraw({ withY: $$.config.zoom_rescale, withSubchart: false });\r\n          }\r\n          $$.config.zoom_onzoom.call(this, $$.x.orgDomain());\r\n          return domain;\r\n      }\r\n      else {\r\n          return $$.x.domain();\r\n      }\r\n  };\r\n  Chart.prototype.zoom.enable = function (enabled) {\r\n      var $$ = this.internal;\r\n      $$.config.zoom_enabled = enabled;\r\n      $$.updateAndRedraw();\r\n  };\r\n  Chart.prototype.unzoom = function () {\r\n      var $$ = this.internal;\r\n      if ($$.config.subchart_show) {\r\n          $$.brush.clear();\r\n      }\r\n      else {\r\n          $$.updateXDomain(null, true, false, false, $$.subX.domain());\r\n          $$.redraw({ withY: $$.config.zoom_rescale, withSubchart: false });\r\n      }\r\n  };\r\n  Chart.prototype.zoom.max = function (max) {\r\n      var $$ = this.internal, config = $$.config, d3 = $$.d3;\r\n      if (max === 0 || max) {\r\n          config.zoom_x_max = d3.max([$$.orgXDomain[1], max]);\r\n      }\r\n      else {\r\n          return config.zoom_x_max;\r\n      }\r\n  };\r\n  Chart.prototype.zoom.min = function (min) {\r\n      var $$ = this.internal, config = $$.config, d3 = $$.d3;\r\n      if (min === 0 || min) {\r\n          config.zoom_x_min = d3.min([$$.orgXDomain[0], min]);\r\n      }\r\n      else {\r\n          return config.zoom_x_min;\r\n      }\r\n  };\r\n  Chart.prototype.zoom.range = function (range) {\r\n      if (arguments.length) {\r\n          if (isDefined(range.max)) {\r\n              this.domain.max(range.max);\r\n          }\r\n          if (isDefined(range.min)) {\r\n              this.domain.min(range.min);\r\n          }\r\n      }\r\n      else {\r\n          return {\r\n              max: this.domain.max(),\r\n              min: this.domain.min()\r\n          };\r\n      }\r\n  };\n\n  ChartInternal.prototype.initPie = function () {\r\n      var $$ = this, d3 = $$.d3;\r\n      $$.pie = d3\r\n          .pie()\r\n          .padAngle(this.getPadAngle.bind(this))\r\n          .value(function (d) {\r\n          return d.values.reduce(function (a, b) {\r\n              return a + b.value;\r\n          }, 0);\r\n      });\r\n      var orderFct = $$.getOrderFunction();\r\n      // we need to reverse the returned order if asc or desc to have the slice in expected order.\r\n      if (orderFct && ($$.isOrderAsc() || $$.isOrderDesc())) {\r\n          var defaultSort_1 = orderFct;\r\n          orderFct = function (t1, t2) { return defaultSort_1(t1, t2) * -1; };\r\n      }\r\n      $$.pie.sort(orderFct || null);\r\n  };\r\n  ChartInternal.prototype.updateRadius = function () {\r\n      var $$ = this, config = $$.config, w = config.gauge_width || config.donut_width, gaugeArcWidth = $$.filterTargetsToShow($$.data.targets).length *\r\n          $$.config.gauge_arcs_minWidth;\r\n      $$.radiusExpanded =\r\n          (Math.min($$.arcWidth, $$.arcHeight) / 2) * ($$.hasType('gauge') ? 0.85 : 1);\r\n      $$.radius = $$.radiusExpanded * 0.95;\r\n      $$.innerRadiusRatio = w ? ($$.radius - w) / $$.radius : 0.6;\r\n      $$.innerRadius =\r\n          $$.hasType('donut') || $$.hasType('gauge')\r\n              ? $$.radius * $$.innerRadiusRatio\r\n              : 0;\r\n      $$.gaugeArcWidth = w\r\n          ? w\r\n          : gaugeArcWidth <= $$.radius - $$.innerRadius\r\n              ? $$.radius - $$.innerRadius\r\n              : gaugeArcWidth <= $$.radius\r\n                  ? gaugeArcWidth\r\n                  : $$.radius;\r\n  };\r\n  ChartInternal.prototype.getPadAngle = function () {\r\n      if (this.hasType('pie')) {\r\n          return this.config.pie_padAngle || 0;\r\n      }\r\n      else if (this.hasType('donut')) {\r\n          return this.config.donut_padAngle || 0;\r\n      }\r\n      else {\r\n          return 0;\r\n      }\r\n  };\r\n  ChartInternal.prototype.updateArc = function () {\r\n      var $$ = this;\r\n      $$.svgArc = $$.getSvgArc();\r\n      $$.svgArcExpanded = $$.getSvgArcExpanded();\r\n      $$.svgArcExpandedSub = $$.getSvgArcExpanded(0.98);\r\n  };\r\n  ChartInternal.prototype.updateAngle = function (d) {\r\n      var $$ = this, config = $$.config, found = false, index = 0, gMin, gMax, gTic, gValue;\r\n      if (!config) {\r\n          return null;\r\n      }\r\n      $$.pie($$.filterTargetsToShow($$.data.targets)).forEach(function (t) {\r\n          if (!found && t.data.id === d.data.id) {\r\n              found = true;\r\n              d = t;\r\n              d.index = index;\r\n          }\r\n          index++;\r\n      });\r\n      if (isNaN(d.startAngle)) {\r\n          d.startAngle = 0;\r\n      }\r\n      if (isNaN(d.endAngle)) {\r\n          d.endAngle = d.startAngle;\r\n      }\r\n      if ($$.isGaugeType(d.data)) {\r\n          gMin = config.gauge_min;\r\n          gMax = config.gauge_max;\r\n          gTic = (Math.PI * (config.gauge_fullCircle ? 2 : 1)) / (gMax - gMin);\r\n          gValue = d.value < gMin ? 0 : d.value < gMax ? d.value - gMin : gMax - gMin;\r\n          d.startAngle = config.gauge_startingAngle;\r\n          d.endAngle = d.startAngle + gTic * gValue;\r\n      }\r\n      return found ? d : null;\r\n  };\r\n  ChartInternal.prototype.getSvgArc = function () {\r\n      var $$ = this, hasGaugeType = $$.hasType('gauge'), singleArcWidth = $$.gaugeArcWidth / $$.filterTargetsToShow($$.data.targets).length, arc = $$.d3\r\n          .arc()\r\n          .outerRadius(function (d) {\r\n          return hasGaugeType ? $$.radius - singleArcWidth * d.index : $$.radius;\r\n      })\r\n          .innerRadius(function (d) {\r\n          return hasGaugeType\r\n              ? $$.radius - singleArcWidth * (d.index + 1)\r\n              : $$.innerRadius;\r\n      }), newArc = function (d, withoutUpdate) {\r\n          var updated;\r\n          if (withoutUpdate) {\r\n              return arc(d);\r\n          } // for interpolate\r\n          updated = $$.updateAngle(d);\r\n          return updated ? arc(updated) : 'M 0 0';\r\n      };\r\n      newArc.centroid = arc.centroid;\r\n      return newArc;\r\n  };\r\n  ChartInternal.prototype.getSvgArcExpanded = function (rate) {\r\n      rate = rate || 1;\r\n      var $$ = this, hasGaugeType = $$.hasType('gauge'), singleArcWidth = $$.gaugeArcWidth / $$.filterTargetsToShow($$.data.targets).length, expandWidth = Math.min($$.radiusExpanded * rate - $$.radius, singleArcWidth * 0.8 - (1 - rate) * 100), arc = $$.d3\r\n          .arc()\r\n          .outerRadius(function (d) {\r\n          return hasGaugeType\r\n              ? $$.radius - singleArcWidth * d.index + expandWidth\r\n              : $$.radiusExpanded * rate;\r\n      })\r\n          .innerRadius(function (d) {\r\n          return hasGaugeType\r\n              ? $$.radius - singleArcWidth * (d.index + 1)\r\n              : $$.innerRadius;\r\n      });\r\n      return function (d) {\r\n          var updated = $$.updateAngle(d);\r\n          return updated ? arc(updated) : 'M 0 0';\r\n      };\r\n  };\r\n  ChartInternal.prototype.getArc = function (d, withoutUpdate, force) {\r\n      return force || this.isArcType(d.data)\r\n          ? this.svgArc(d, withoutUpdate)\r\n          : 'M 0 0';\r\n  };\r\n  ChartInternal.prototype.transformForArcLabel = function (d) {\r\n      var $$ = this, config = $$.config, updated = $$.updateAngle(d), c, x, y, h, ratio, translate = '', hasGauge = $$.hasType('gauge');\r\n      if (updated && !hasGauge) {\r\n          c = this.svgArc.centroid(updated);\r\n          x = isNaN(c[0]) ? 0 : c[0];\r\n          y = isNaN(c[1]) ? 0 : c[1];\r\n          h = Math.sqrt(x * x + y * y);\r\n          if ($$.hasType('donut') && config.donut_label_ratio) {\r\n              ratio = isFunction(config.donut_label_ratio)\r\n                  ? config.donut_label_ratio(d, $$.radius, h)\r\n                  : config.donut_label_ratio;\r\n          }\r\n          else if ($$.hasType('pie') && config.pie_label_ratio) {\r\n              ratio = isFunction(config.pie_label_ratio)\r\n                  ? config.pie_label_ratio(d, $$.radius, h)\r\n                  : config.pie_label_ratio;\r\n          }\r\n          else {\r\n              ratio =\r\n                  $$.radius && h\r\n                      ? ((36 / $$.radius > 0.375 ? 1.175 - 36 / $$.radius : 0.8) *\r\n                          $$.radius) /\r\n                          h\r\n                      : 0;\r\n          }\r\n          translate = 'translate(' + x * ratio + ',' + y * ratio + ')';\r\n      }\r\n      else if (updated &&\r\n          hasGauge &&\r\n          $$.filterTargetsToShow($$.data.targets).length > 1) {\r\n          var y1 = Math.sin(updated.endAngle - Math.PI / 2);\r\n          x = Math.cos(updated.endAngle - Math.PI / 2) * ($$.radiusExpanded + 25);\r\n          y = y1 * ($$.radiusExpanded + 15 - Math.abs(y1 * 10)) + 3;\r\n          translate = 'translate(' + x + ',' + y + ')';\r\n      }\r\n      return translate;\r\n  };\r\n  /**\r\n   * @deprecated Use `getRatio('arc', d)` instead.\r\n   */\r\n  ChartInternal.prototype.getArcRatio = function (d) {\r\n      return this.getRatio('arc', d);\r\n  };\r\n  ChartInternal.prototype.convertToArcData = function (d) {\r\n      return this.addName({\r\n          id: d.data.id,\r\n          value: d.value,\r\n          ratio: this.getRatio('arc', d),\r\n          index: d.index\r\n      });\r\n  };\r\n  ChartInternal.prototype.textForArcLabel = function (d) {\r\n      var $$ = this, updated, value, ratio, id, format;\r\n      if (!$$.shouldShowArcLabel()) {\r\n          return '';\r\n      }\r\n      updated = $$.updateAngle(d);\r\n      value = updated ? updated.value : null;\r\n      ratio = $$.getRatio('arc', updated);\r\n      id = d.data.id;\r\n      if (!$$.hasType('gauge') && !$$.meetsArcLabelThreshold(ratio)) {\r\n          return '';\r\n      }\r\n      format = $$.getArcLabelFormat();\r\n      return format\r\n          ? format(value, ratio, id)\r\n          : $$.defaultArcValueFormat(value, ratio);\r\n  };\r\n  ChartInternal.prototype.textForGaugeMinMax = function (value, isMax) {\r\n      var $$ = this, format = $$.getGaugeLabelExtents();\r\n      return format ? format(value, isMax) : value;\r\n  };\r\n  ChartInternal.prototype.expandArc = function (targetIds) {\r\n      var $$ = this, interval;\r\n      // MEMO: avoid to cancel transition\r\n      if ($$.transiting) {\r\n          interval = window.setInterval(function () {\r\n              if (!$$.transiting) {\r\n                  window.clearInterval(interval);\r\n                  if ($$.legend.selectAll('.c3-legend-item-focused').size() > 0) {\r\n                      $$.expandArc(targetIds);\r\n                  }\r\n              }\r\n          }, 10);\r\n          return;\r\n      }\r\n      targetIds = $$.mapToTargetIds(targetIds);\r\n      $$.svg\r\n          .selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc))\r\n          .each(function (d) {\r\n          if (!$$.shouldExpand(d.data.id)) {\r\n              return;\r\n          }\r\n          $$.d3\r\n              .select(this)\r\n              .selectAll('path')\r\n              .transition()\r\n              .duration($$.expandDuration(d.data.id))\r\n              .attr('d', $$.svgArcExpanded)\r\n              .transition()\r\n              .duration($$.expandDuration(d.data.id) * 2)\r\n              .attr('d', $$.svgArcExpandedSub)\r\n              .each(function (d) {\r\n              if ($$.isDonutType(d.data)) ;\r\n          });\r\n      });\r\n  };\r\n  ChartInternal.prototype.unexpandArc = function (targetIds) {\r\n      var $$ = this;\r\n      if ($$.transiting) {\r\n          return;\r\n      }\r\n      targetIds = $$.mapToTargetIds(targetIds);\r\n      $$.svg\r\n          .selectAll($$.selectorTargets(targetIds, '.' + CLASS.chartArc))\r\n          .selectAll('path')\r\n          .transition()\r\n          .duration(function (d) {\r\n          return $$.expandDuration(d.data.id);\r\n      })\r\n          .attr('d', $$.svgArc);\r\n      $$.svg.selectAll('.' + CLASS.arc);\r\n  };\r\n  ChartInternal.prototype.expandDuration = function (id) {\r\n      var $$ = this, config = $$.config;\r\n      if ($$.isDonutType(id)) {\r\n          return config.donut_expand_duration;\r\n      }\r\n      else if ($$.isGaugeType(id)) {\r\n          return config.gauge_expand_duration;\r\n      }\r\n      else if ($$.isPieType(id)) {\r\n          return config.pie_expand_duration;\r\n      }\r\n      else {\r\n          return 50;\r\n      }\r\n  };\r\n  ChartInternal.prototype.shouldExpand = function (id) {\r\n      var $$ = this, config = $$.config;\r\n      return (($$.isDonutType(id) && config.donut_expand) ||\r\n          ($$.isGaugeType(id) && config.gauge_expand) ||\r\n          ($$.isPieType(id) && config.pie_expand));\r\n  };\r\n  ChartInternal.prototype.shouldShowArcLabel = function () {\r\n      var $$ = this, config = $$.config, shouldShow = true;\r\n      if ($$.hasType('donut')) {\r\n          shouldShow = config.donut_label_show;\r\n      }\r\n      else if ($$.hasType('pie')) {\r\n          shouldShow = config.pie_label_show;\r\n      }\r\n      // when gauge, always true\r\n      return shouldShow;\r\n  };\r\n  ChartInternal.prototype.meetsArcLabelThreshold = function (ratio) {\r\n      var $$ = this, config = $$.config, threshold = $$.hasType('donut')\r\n          ? config.donut_label_threshold\r\n          : config.pie_label_threshold;\r\n      return ratio >= threshold;\r\n  };\r\n  ChartInternal.prototype.getArcLabelFormat = function () {\r\n      var $$ = this, config = $$.config, format = config.pie_label_format;\r\n      if ($$.hasType('gauge')) {\r\n          format = config.gauge_label_format;\r\n      }\r\n      else if ($$.hasType('donut')) {\r\n          format = config.donut_label_format;\r\n      }\r\n      return format;\r\n  };\r\n  ChartInternal.prototype.getGaugeLabelExtents = function () {\r\n      var $$ = this, config = $$.config;\r\n      return config.gauge_label_extents;\r\n  };\r\n  ChartInternal.prototype.getArcTitle = function () {\r\n      var $$ = this;\r\n      return $$.hasType('donut') ? $$.config.donut_title : '';\r\n  };\r\n  ChartInternal.prototype.updateTargetsForArc = function (targets) {\r\n      var $$ = this, main = $$.main, mainPies, mainPieEnter, classChartArc = $$.classChartArc.bind($$), classArcs = $$.classArcs.bind($$), classFocus = $$.classFocus.bind($$);\r\n      mainPies = main\r\n          .select('.' + CLASS.chartArcs)\r\n          .selectAll('.' + CLASS.chartArc)\r\n          .data($$.pie(targets))\r\n          .attr('class', function (d) {\r\n          return classChartArc(d) + classFocus(d.data);\r\n      });\r\n      mainPieEnter = mainPies\r\n          .enter()\r\n          .append('g')\r\n          .attr('class', classChartArc);\r\n      mainPieEnter.append('g').attr('class', classArcs);\r\n      mainPieEnter\r\n          .append('text')\r\n          .attr('dy', $$.hasType('gauge') ? '-.1em' : '.35em')\r\n          .style('opacity', 0)\r\n          .style('text-anchor', 'middle')\r\n          .style('pointer-events', 'none');\r\n      // MEMO: can not keep same color..., but not bad to update color in redraw\r\n      //mainPieUpdate.exit().remove();\r\n  };\r\n  ChartInternal.prototype.initArc = function () {\r\n      var $$ = this;\r\n      $$.arcs = $$.main\r\n          .select('.' + CLASS.chart)\r\n          .append('g')\r\n          .attr('class', CLASS.chartArcs)\r\n          .attr('transform', $$.getTranslate('arc'));\r\n      $$.arcs\r\n          .append('text')\r\n          .attr('class', CLASS.chartArcsTitle)\r\n          .style('text-anchor', 'middle')\r\n          .text($$.getArcTitle());\r\n  };\r\n  ChartInternal.prototype.redrawArc = function (duration, durationForExit, withTransform) {\r\n      var $$ = this, d3 = $$.d3, config = $$.config, main = $$.main, arcs, mainArc, arcLabelLines, mainArcLabelLine, hasGaugeType = $$.hasType('gauge');\r\n      arcs = main\r\n          .selectAll('.' + CLASS.arcs)\r\n          .selectAll('.' + CLASS.arc)\r\n          .data($$.arcData.bind($$));\r\n      mainArc = arcs\r\n          .enter()\r\n          .append('path')\r\n          .attr('class', $$.classArc.bind($$))\r\n          .style('fill', function (d) {\r\n          return $$.color(d.data);\r\n      })\r\n          .style('cursor', function (d) {\r\n          return config.interaction_enabled && config.data_selection_isselectable(d)\r\n              ? 'pointer'\r\n              : null;\r\n      })\r\n          .each(function (d) {\r\n          if ($$.isGaugeType(d.data)) {\r\n              d.startAngle = d.endAngle = config.gauge_startingAngle;\r\n          }\r\n          this._current = d;\r\n      })\r\n          .merge(arcs);\r\n      if (hasGaugeType) {\r\n          arcLabelLines = main\r\n              .selectAll('.' + CLASS.arcs)\r\n              .selectAll('.' + CLASS.arcLabelLine)\r\n              .data($$.arcData.bind($$));\r\n          mainArcLabelLine = arcLabelLines\r\n              .enter()\r\n              .append('rect')\r\n              .attr('class', function (d) {\r\n              return (CLASS.arcLabelLine +\r\n                  ' ' +\r\n                  CLASS.target +\r\n                  ' ' +\r\n                  CLASS.target +\r\n                  '-' +\r\n                  d.data.id);\r\n          })\r\n              .merge(arcLabelLines);\r\n          if ($$.filterTargetsToShow($$.data.targets).length === 1) {\r\n              mainArcLabelLine.style('display', 'none');\r\n          }\r\n          else {\r\n              mainArcLabelLine\r\n                  .style('fill', function (d) {\r\n                  return $$.levelColor\r\n                      ? $$.levelColor(d.data.values.reduce(function (total, item) {\r\n                          return total + item.value;\r\n                      }, 0))\r\n                      : $$.color(d.data);\r\n              })\r\n                  .style('display', config.gauge_labelLine_show ? '' : 'none')\r\n                  .each(function (d) {\r\n                  var lineLength = 0, lineThickness = 2, x = 0, y = 0, transform = '';\r\n                  if ($$.hiddenTargetIds.indexOf(d.data.id) < 0) {\r\n                      var updated = $$.updateAngle(d), innerLineLength = ($$.gaugeArcWidth /\r\n                          $$.filterTargetsToShow($$.data.targets).length) *\r\n                          (updated.index + 1), lineAngle = updated.endAngle - Math.PI / 2, arcInnerRadius = $$.radius - innerLineLength, linePositioningAngle = lineAngle - (arcInnerRadius === 0 ? 0 : 1 / arcInnerRadius);\r\n                      lineLength = $$.radiusExpanded - $$.radius + innerLineLength;\r\n                      x = Math.cos(linePositioningAngle) * arcInnerRadius;\r\n                      y = Math.sin(linePositioningAngle) * arcInnerRadius;\r\n                      transform =\r\n                          'rotate(' +\r\n                              (lineAngle * 180) / Math.PI +\r\n                              ', ' +\r\n                              x +\r\n                              ', ' +\r\n                              y +\r\n                              ')';\r\n                  }\r\n                  d3.select(this)\r\n                      .attr('x', x)\r\n                      .attr('y', y)\r\n                      .attr('width', lineLength)\r\n                      .attr('height', lineThickness)\r\n                      .attr('transform', transform)\r\n                      .style('stroke-dasharray', '0, ' + (lineLength + lineThickness) + ', 0');\r\n              });\r\n          }\r\n      }\r\n      mainArc\r\n          .attr('transform', function (d) {\r\n          return !$$.isGaugeType(d.data) && withTransform ? 'scale(0)' : '';\r\n      })\r\n          .on('mouseover', config.interaction_enabled\r\n          ? function (d) {\r\n              var updated, arcData;\r\n              if ($$.transiting) {\r\n                  // skip while transiting\r\n                  return;\r\n              }\r\n              updated = $$.updateAngle(d);\r\n              if (updated) {\r\n                  arcData = $$.convertToArcData(updated);\r\n                  // transitions\r\n                  $$.expandArc(updated.data.id);\r\n                  $$.api.focus(updated.data.id);\r\n                  $$.toggleFocusLegend(updated.data.id, true);\r\n                  $$.config.data_onmouseover(arcData, this);\r\n              }\r\n          }\r\n          : null)\r\n          .on('mousemove', config.interaction_enabled\r\n          ? function (d) {\r\n              var updated = $$.updateAngle(d), arcData, selectedData;\r\n              if (updated) {\r\n                  (arcData = $$.convertToArcData(updated)),\r\n                      (selectedData = [arcData]);\r\n                  $$.showTooltip(selectedData, this);\r\n              }\r\n          }\r\n          : null)\r\n          .on('mouseout', config.interaction_enabled\r\n          ? function (d) {\r\n              var updated, arcData;\r\n              if ($$.transiting) {\r\n                  // skip while transiting\r\n                  return;\r\n              }\r\n              updated = $$.updateAngle(d);\r\n              if (updated) {\r\n                  arcData = $$.convertToArcData(updated);\r\n                  // transitions\r\n                  $$.unexpandArc(updated.data.id);\r\n                  $$.api.revert();\r\n                  $$.revertLegend();\r\n                  $$.hideTooltip();\r\n                  $$.config.data_onmouseout(arcData, this);\r\n              }\r\n          }\r\n          : null)\r\n          .on('click', config.interaction_enabled\r\n          ? function (d, i) {\r\n              var updated = $$.updateAngle(d), arcData;\r\n              if (updated) {\r\n                  arcData = $$.convertToArcData(updated);\r\n                  if ($$.toggleShape) {\r\n                      $$.toggleShape(this, arcData, i);\r\n                  }\r\n                  $$.config.data_onclick.call($$.api, arcData, this);\r\n              }\r\n          }\r\n          : null)\r\n          .each(function () {\r\n          $$.transiting = true;\r\n      })\r\n          .transition()\r\n          .duration(duration)\r\n          .attrTween('d', function (d) {\r\n          var updated = $$.updateAngle(d), interpolate;\r\n          if (!updated) {\r\n              return function () {\r\n                  return 'M 0 0';\r\n              };\r\n          }\r\n          //                if (this._current === d) {\r\n          //                    this._current = {\r\n          //                        startAngle: Math.PI*2,\r\n          //                        endAngle: Math.PI*2,\r\n          //                    };\r\n          //                }\r\n          if (isNaN(this._current.startAngle)) {\r\n              this._current.startAngle = 0;\r\n          }\r\n          if (isNaN(this._current.endAngle)) {\r\n              this._current.endAngle = this._current.startAngle;\r\n          }\r\n          interpolate = d3.interpolate(this._current, updated);\r\n          this._current = interpolate(0);\r\n          return function (t) {\r\n              // prevents crashing the charts once in transition and chart.destroy() has been called\r\n              if ($$.config === null) {\r\n                  return 'M 0 0';\r\n              }\r\n              var interpolated = interpolate(t);\r\n              interpolated.data = d.data; // data.id will be updated by interporator\r\n              return $$.getArc(interpolated, true);\r\n          };\r\n      })\r\n          .attr('transform', withTransform ? 'scale(1)' : '')\r\n          .style('fill', function (d) {\r\n          return $$.levelColor\r\n              ? $$.levelColor(d.data.values.reduce(function (total, item) {\r\n                  return total + item.value;\r\n              }, 0))\r\n              : $$.color(d.data.id);\r\n      }) // Where gauge reading color would receive customization.\r\n          .call($$.endall, function () {\r\n          $$.transiting = false;\r\n      });\r\n      arcs\r\n          .exit()\r\n          .transition()\r\n          .duration(durationForExit)\r\n          .style('opacity', 0)\r\n          .remove();\r\n      main\r\n          .selectAll('.' + CLASS.chartArc)\r\n          .select('text')\r\n          .style('opacity', 0)\r\n          .attr('class', function (d) {\r\n          return $$.isGaugeType(d.data) ? CLASS.gaugeValue : '';\r\n      })\r\n          .text($$.textForArcLabel.bind($$))\r\n          .attr('transform', $$.transformForArcLabel.bind($$))\r\n          .style('font-size', function (d) {\r\n          return $$.isGaugeType(d.data) &&\r\n              $$.filterTargetsToShow($$.data.targets).length === 1\r\n              ? Math.round($$.radius / 5) + 'px'\r\n              : '';\r\n      })\r\n          .transition()\r\n          .duration(duration)\r\n          .style('opacity', function (d) {\r\n          return $$.isTargetToShow(d.data.id) && $$.isArcType(d.data) ? 1 : 0;\r\n      });\r\n      main\r\n          .select('.' + CLASS.chartArcsTitle)\r\n          .style('opacity', $$.hasType('donut') || hasGaugeType ? 1 : 0);\r\n      if (hasGaugeType) {\r\n          var index_1 = 0;\r\n          var backgroundArc = $$.arcs\r\n              .select('g.' + CLASS.chartArcsBackground)\r\n              .selectAll('path.' + CLASS.chartArcsBackground)\r\n              .data($$.data.targets);\r\n          backgroundArc\r\n              .enter()\r\n              .append('path')\r\n              .attr('class', function (d, i) {\r\n              return CLASS.chartArcsBackground + ' ' + CLASS.chartArcsBackground + '-' + i;\r\n          })\r\n              .merge(backgroundArc)\r\n              .attr('d', function (d1) {\r\n              if ($$.hiddenTargetIds.indexOf(d1.id) >= 0) {\r\n                  return 'M 0 0';\r\n              }\r\n              var d = {\r\n                  data: [{ value: config.gauge_max }],\r\n                  startAngle: config.gauge_startingAngle,\r\n                  endAngle: -1 *\r\n                      config.gauge_startingAngle *\r\n                      (config.gauge_fullCircle ? Math.PI : 1),\r\n                  index: index_1++\r\n              };\r\n              return $$.getArc(d, true, true);\r\n          });\r\n          backgroundArc.exit().remove();\r\n          $$.arcs\r\n              .select('.' + CLASS.chartArcsGaugeUnit)\r\n              .attr('dy', '.75em')\r\n              .text(config.gauge_label_show ? config.gauge_units : '');\r\n          $$.arcs\r\n              .select('.' + CLASS.chartArcsGaugeMin)\r\n              .attr('dx', -1 *\r\n              ($$.innerRadius +\r\n                  ($$.radius - $$.innerRadius) / (config.gauge_fullCircle ? 1 : 2)) +\r\n              'px')\r\n              .attr('dy', '1.2em')\r\n              .text(config.gauge_label_show\r\n              ? $$.textForGaugeMinMax(config.gauge_min, false)\r\n              : '');\r\n          $$.arcs\r\n              .select('.' + CLASS.chartArcsGaugeMax)\r\n              .attr('dx', $$.innerRadius +\r\n              ($$.radius - $$.innerRadius) / (config.gauge_fullCircle ? 1 : 2) +\r\n              'px')\r\n              .attr('dy', '1.2em')\r\n              .text(config.gauge_label_show\r\n              ? $$.textForGaugeMinMax(config.gauge_max, true)\r\n              : '');\r\n      }\r\n  };\r\n  ChartInternal.prototype.initGauge = function () {\r\n      var arcs = this.arcs;\r\n      if (this.hasType('gauge')) {\r\n          arcs.append('g').attr('class', CLASS.chartArcsBackground);\r\n          arcs\r\n              .append('text')\r\n              .attr('class', CLASS.chartArcsGaugeUnit)\r\n              .style('text-anchor', 'middle')\r\n              .style('pointer-events', 'none');\r\n          arcs\r\n              .append('text')\r\n              .attr('class', CLASS.chartArcsGaugeMin)\r\n              .style('text-anchor', 'middle')\r\n              .style('pointer-events', 'none');\r\n          arcs\r\n              .append('text')\r\n              .attr('class', CLASS.chartArcsGaugeMax)\r\n              .style('text-anchor', 'middle')\r\n              .style('pointer-events', 'none');\r\n      }\r\n  };\r\n  ChartInternal.prototype.getGaugeLabelHeight = function () {\r\n      return this.config.gauge_label_show ? 20 : 0;\r\n  };\n\n  /**\r\n   * Store value into cache\r\n   *\r\n   * @param key\r\n   * @param value\r\n   */\r\n  ChartInternal.prototype.addToCache = function (key, value) {\r\n      this.cache[\"$\" + key] = value;\r\n  };\r\n  /**\r\n   * Returns a cached value or undefined\r\n   *\r\n   * @param key\r\n   * @return {*}\r\n   */\r\n  ChartInternal.prototype.getFromCache = function (key) {\r\n      return this.cache[\"$\" + key];\r\n  };\r\n  /**\r\n   * Reset cached data\r\n   */\r\n  ChartInternal.prototype.resetCache = function () {\r\n      var _this = this;\r\n      Object.keys(this.cache)\r\n          .filter(function (key) { return /^\\$/.test(key); })\r\n          .forEach(function (key) {\r\n          delete _this.cache[key];\r\n      });\r\n  };\r\n  // Old API that stores Targets\r\n  ChartInternal.prototype.hasCaches = function (ids) {\r\n      for (var i = 0; i < ids.length; i++) {\r\n          if (!(ids[i] in this.cache)) {\r\n              return false;\r\n          }\r\n      }\r\n      return true;\r\n  };\r\n  ChartInternal.prototype.addCache = function (id, target) {\r\n      this.cache[id] = this.cloneTarget(target);\r\n  };\r\n  ChartInternal.prototype.getCaches = function (ids) {\r\n      var targets = [], i;\r\n      for (i = 0; i < ids.length; i++) {\r\n          if (ids[i] in this.cache) {\r\n              targets.push(this.cloneTarget(this.cache[ids[i]]));\r\n          }\r\n      }\r\n      return targets;\r\n  };\n\n  ChartInternal.prototype.categoryName = function (i) {\r\n      var config = this.config;\r\n      return i < config.axis_x_categories.length ? config.axis_x_categories[i] : i;\r\n  };\n\n  ChartInternal.prototype.generateTargetClass = function (targetId) {\r\n      return targetId || targetId === 0 ? ('-' + targetId).replace(/\\s/g, '-') : '';\r\n  };\r\n  ChartInternal.prototype.generateClass = function (prefix, targetId) {\r\n      return ' ' + prefix + ' ' + prefix + this.generateTargetClass(targetId);\r\n  };\r\n  ChartInternal.prototype.classText = function (d) {\r\n      return this.generateClass(CLASS.text, d.index);\r\n  };\r\n  ChartInternal.prototype.classTexts = function (d) {\r\n      return this.generateClass(CLASS.texts, d.id);\r\n  };\r\n  ChartInternal.prototype.classShape = function (d) {\r\n      return this.generateClass(CLASS.shape, d.index);\r\n  };\r\n  ChartInternal.prototype.classShapes = function (d) {\r\n      return this.generateClass(CLASS.shapes, d.id);\r\n  };\r\n  ChartInternal.prototype.classLine = function (d) {\r\n      return this.classShape(d) + this.generateClass(CLASS.line, d.id);\r\n  };\r\n  ChartInternal.prototype.classLines = function (d) {\r\n      return this.classShapes(d) + this.generateClass(CLASS.lines, d.id);\r\n  };\r\n  ChartInternal.prototype.classCircle = function (d) {\r\n      return this.classShape(d) + this.generateClass(CLASS.circle, d.index);\r\n  };\r\n  ChartInternal.prototype.classCircles = function (d) {\r\n      return this.classShapes(d) + this.generateClass(CLASS.circles, d.id);\r\n  };\r\n  ChartInternal.prototype.classBar = function (d) {\r\n      return this.classShape(d) + this.generateClass(CLASS.bar, d.index);\r\n  };\r\n  ChartInternal.prototype.classBars = function (d) {\r\n      return this.classShapes(d) + this.generateClass(CLASS.bars, d.id);\r\n  };\r\n  ChartInternal.prototype.classArc = function (d) {\r\n      return this.classShape(d.data) + this.generateClass(CLASS.arc, d.data.id);\r\n  };\r\n  ChartInternal.prototype.classArcs = function (d) {\r\n      return this.classShapes(d.data) + this.generateClass(CLASS.arcs, d.data.id);\r\n  };\r\n  ChartInternal.prototype.classArea = function (d) {\r\n      return this.classShape(d) + this.generateClass(CLASS.area, d.id);\r\n  };\r\n  ChartInternal.prototype.classAreas = function (d) {\r\n      return this.classShapes(d) + this.generateClass(CLASS.areas, d.id);\r\n  };\r\n  ChartInternal.prototype.classRegion = function (d, i) {\r\n      return (this.generateClass(CLASS.region, i) + ' ' + ('class' in d ? d['class'] : ''));\r\n  };\r\n  ChartInternal.prototype.classEvent = function (d) {\r\n      return this.generateClass(CLASS.eventRect, d.index);\r\n  };\r\n  ChartInternal.prototype.classTarget = function (id) {\r\n      var $$ = this;\r\n      var additionalClassSuffix = $$.config.data_classes[id], additionalClass = '';\r\n      if (additionalClassSuffix) {\r\n          additionalClass = ' ' + CLASS.target + '-' + additionalClassSuffix;\r\n      }\r\n      return $$.generateClass(CLASS.target, id) + additionalClass;\r\n  };\r\n  ChartInternal.prototype.classFocus = function (d) {\r\n      return this.classFocused(d) + this.classDefocused(d);\r\n  };\r\n  ChartInternal.prototype.classFocused = function (d) {\r\n      return ' ' + (this.focusedTargetIds.indexOf(d.id) >= 0 ? CLASS.focused : '');\r\n  };\r\n  ChartInternal.prototype.classDefocused = function (d) {\r\n      return (' ' + (this.defocusedTargetIds.indexOf(d.id) >= 0 ? CLASS.defocused : ''));\r\n  };\r\n  ChartInternal.prototype.classChartText = function (d) {\r\n      return CLASS.chartText + this.classTarget(d.id);\r\n  };\r\n  ChartInternal.prototype.classChartLine = function (d) {\r\n      return CLASS.chartLine + this.classTarget(d.id);\r\n  };\r\n  ChartInternal.prototype.classChartBar = function (d) {\r\n      return CLASS.chartBar + this.classTarget(d.id);\r\n  };\r\n  ChartInternal.prototype.classChartArc = function (d) {\r\n      return CLASS.chartArc + this.classTarget(d.data.id);\r\n  };\r\n  ChartInternal.prototype.getTargetSelectorSuffix = function (targetId) {\r\n      var targetClass = this.generateTargetClass(targetId);\r\n      if (window.CSS && window.CSS.escape) {\r\n          return window.CSS.escape(targetClass);\r\n      }\r\n      // fallback on imperfect method for old browsers (does not handles unicode)\r\n      return targetClass.replace(/([?!@#$%^&*()=+,.<>'\":;\\[\\]\\/|~`{}\\\\])/g, '\\\\$1');\r\n  };\r\n  ChartInternal.prototype.selectorTarget = function (id, prefix) {\r\n      return (prefix || '') + '.' + CLASS.target + this.getTargetSelectorSuffix(id);\r\n  };\r\n  ChartInternal.prototype.selectorTargets = function (ids, prefix) {\r\n      var $$ = this;\r\n      ids = ids || [];\r\n      return ids.length\r\n          ? ids.map(function (id) {\r\n              return $$.selectorTarget(id, prefix);\r\n          })\r\n          : null;\r\n  };\r\n  ChartInternal.prototype.selectorLegend = function (id) {\r\n      return '.' + CLASS.legendItem + this.getTargetSelectorSuffix(id);\r\n  };\r\n  ChartInternal.prototype.selectorLegends = function (ids) {\r\n      var $$ = this;\r\n      return ids && ids.length\r\n          ? ids.map(function (id) {\r\n              return $$.selectorLegend(id);\r\n          })\r\n          : null;\r\n  };\n\n  ChartInternal.prototype.getClipPath = function (id) {\r\n      return 'url(' + (isIE(9) ? '' : document.URL.split('#')[0]) + '#' + id + ')';\r\n  };\r\n  ChartInternal.prototype.appendClip = function (parent, id) {\r\n      return parent\r\n          .append('clipPath')\r\n          .attr('id', id)\r\n          .append('rect');\r\n  };\r\n  ChartInternal.prototype.getAxisClipX = function (forHorizontal) {\r\n      // axis line width + padding for left\r\n      var left = Math.max(30, this.margin.left);\r\n      return forHorizontal ? -(1 + left) : -(left - 1);\r\n  };\r\n  ChartInternal.prototype.getAxisClipY = function (forHorizontal) {\r\n      return forHorizontal ? -20 : -this.margin.top;\r\n  };\r\n  ChartInternal.prototype.getXAxisClipX = function () {\r\n      var $$ = this;\r\n      return $$.getAxisClipX(!$$.config.axis_rotated);\r\n  };\r\n  ChartInternal.prototype.getXAxisClipY = function () {\r\n      var $$ = this;\r\n      return $$.getAxisClipY(!$$.config.axis_rotated);\r\n  };\r\n  ChartInternal.prototype.getYAxisClipX = function () {\r\n      var $$ = this;\r\n      return $$.config.axis_y_inner ? -1 : $$.getAxisClipX($$.config.axis_rotated);\r\n  };\r\n  ChartInternal.prototype.getYAxisClipY = function () {\r\n      var $$ = this;\r\n      return $$.getAxisClipY($$.config.axis_rotated);\r\n  };\r\n  ChartInternal.prototype.getAxisClipWidth = function (forHorizontal) {\r\n      var $$ = this, left = Math.max(30, $$.margin.left), right = Math.max(30, $$.margin.right);\r\n      // width + axis line width + padding for left/right\r\n      return forHorizontal ? $$.width + 2 + left + right : $$.margin.left + 20;\r\n  };\r\n  ChartInternal.prototype.getAxisClipHeight = function (forHorizontal) {\r\n      // less than 20 is not enough to show the axis label 'outer' without legend\r\n      return ((forHorizontal ? this.margin.bottom : this.margin.top + this.height) + 20);\r\n  };\r\n  ChartInternal.prototype.getXAxisClipWidth = function () {\r\n      var $$ = this;\r\n      return $$.getAxisClipWidth(!$$.config.axis_rotated);\r\n  };\r\n  ChartInternal.prototype.getXAxisClipHeight = function () {\r\n      var $$ = this;\r\n      return $$.getAxisClipHeight(!$$.config.axis_rotated);\r\n  };\r\n  ChartInternal.prototype.getYAxisClipWidth = function () {\r\n      var $$ = this;\r\n      return ($$.getAxisClipWidth($$.config.axis_rotated) +\r\n          ($$.config.axis_y_inner ? 20 : 0));\r\n  };\r\n  ChartInternal.prototype.getYAxisClipHeight = function () {\r\n      var $$ = this;\r\n      return $$.getAxisClipHeight($$.config.axis_rotated);\r\n  };\n\n  ChartInternal.prototype.generateColor = function () {\r\n      var $$ = this, config = $$.config, d3 = $$.d3, colors = config.data_colors, pattern = notEmpty(config.color_pattern)\r\n          ? config.color_pattern\r\n          : d3.schemeCategory10, callback = config.data_color, ids = [];\r\n      return function (d) {\r\n          var id = d.id || (d.data && d.data.id) || d, color;\r\n          // if callback function is provided\r\n          if (colors[id] instanceof Function) {\r\n              color = colors[id](d);\r\n          }\r\n          // if specified, choose that color\r\n          else if (colors[id]) {\r\n              color = colors[id];\r\n          }\r\n          // if not specified, choose from pattern\r\n          else {\r\n              if (ids.indexOf(id) < 0) {\r\n                  ids.push(id);\r\n              }\r\n              color = pattern[ids.indexOf(id) % pattern.length];\r\n              colors[id] = color;\r\n          }\r\n          return callback instanceof Function ? callback(color, d) : color;\r\n      };\r\n  };\r\n  ChartInternal.prototype.generateLevelColor = function () {\r\n      var $$ = this, config = $$.config, colors = config.color_pattern, threshold = config.color_threshold, asValue = threshold.unit === 'value', values = threshold.values && threshold.values.length ? threshold.values : [], max = threshold.max || 100;\r\n      return notEmpty(threshold) && notEmpty(colors)\r\n          ? function (value) {\r\n              var i, v, color = colors[colors.length - 1];\r\n              for (i = 0; i < values.length; i++) {\r\n                  v = asValue ? value : (value * 100) / max;\r\n                  if (v < values[i]) {\r\n                      color = colors[i];\r\n                      break;\r\n                  }\r\n              }\r\n              return color;\r\n          }\r\n          : null;\r\n  };\n\n  ChartInternal.prototype.getDefaultConfig = function () {\r\n      var config = {\r\n          bindto: '#chart',\r\n          svg_classname: undefined,\r\n          size_width: undefined,\r\n          size_height: undefined,\r\n          padding_left: undefined,\r\n          padding_right: undefined,\r\n          padding_top: undefined,\r\n          padding_bottom: undefined,\r\n          resize_auto: true,\r\n          zoom_enabled: false,\r\n          zoom_initialRange: undefined,\r\n          zoom_type: 'scroll',\r\n          zoom_disableDefaultBehavior: false,\r\n          zoom_privileged: false,\r\n          zoom_rescale: false,\r\n          zoom_onzoom: function () { },\r\n          zoom_onzoomstart: function () { },\r\n          zoom_onzoomend: function () { },\r\n          zoom_x_min: undefined,\r\n          zoom_x_max: undefined,\r\n          interaction_brighten: true,\r\n          interaction_enabled: true,\r\n          onmouseover: function () { },\r\n          onmouseout: function () { },\r\n          onresize: function () { },\r\n          onresized: function () { },\r\n          oninit: function () { },\r\n          onrendered: function () { },\r\n          transition_duration: 350,\r\n          data_epochs: 'epochs',\r\n          data_x: undefined,\r\n          data_xs: {},\r\n          data_xFormat: '%Y-%m-%d',\r\n          data_xLocaltime: true,\r\n          data_xSort: true,\r\n          data_idConverter: function (id) {\r\n              return id;\r\n          },\r\n          data_names: {},\r\n          data_classes: {},\r\n          data_groups: [],\r\n          data_axes: {},\r\n          data_type: undefined,\r\n          data_types: {},\r\n          data_labels: {},\r\n          data_order: 'desc',\r\n          data_regions: {},\r\n          data_color: undefined,\r\n          data_colors: {},\r\n          data_hide: false,\r\n          data_filter: undefined,\r\n          data_selection_enabled: false,\r\n          data_selection_grouped: false,\r\n          data_selection_isselectable: function () {\r\n              return true;\r\n          },\r\n          data_selection_multiple: true,\r\n          data_selection_draggable: false,\r\n          data_stack_normalize: false,\r\n          data_onclick: function () { },\r\n          data_onmouseover: function () { },\r\n          data_onmouseout: function () { },\r\n          data_onselected: function () { },\r\n          data_onunselected: function () { },\r\n          data_url: undefined,\r\n          data_headers: undefined,\r\n          data_json: undefined,\r\n          data_rows: undefined,\r\n          data_columns: undefined,\r\n          data_mimeType: undefined,\r\n          data_keys: undefined,\r\n          // configuration for no plot-able data supplied.\r\n          data_empty_label_text: '',\r\n          // subchart\r\n          subchart_show: false,\r\n          subchart_size_height: 60,\r\n          subchart_axis_x_show: true,\r\n          subchart_onbrush: function () { },\r\n          // color\r\n          color_pattern: [],\r\n          color_threshold: {},\r\n          // legend\r\n          legend_show: true,\r\n          legend_hide: false,\r\n          legend_position: 'bottom',\r\n          legend_inset_anchor: 'top-left',\r\n          legend_inset_x: 10,\r\n          legend_inset_y: 0,\r\n          legend_inset_step: undefined,\r\n          legend_item_onclick: undefined,\r\n          legend_item_onmouseover: undefined,\r\n          legend_item_onmouseout: undefined,\r\n          legend_equally: false,\r\n          legend_padding: 0,\r\n          legend_item_tile_width: 10,\r\n          legend_item_tile_height: 10,\r\n          // axis\r\n          axis_rotated: false,\r\n          axis_x_show: true,\r\n          axis_x_type: 'indexed',\r\n          axis_x_localtime: true,\r\n          axis_x_categories: [],\r\n          axis_x_tick_centered: false,\r\n          axis_x_tick_format: undefined,\r\n          axis_x_tick_culling: {},\r\n          axis_x_tick_culling_max: 10,\r\n          axis_x_tick_count: undefined,\r\n          axis_x_tick_fit: true,\r\n          axis_x_tick_values: null,\r\n          axis_x_tick_rotate: 0,\r\n          axis_x_tick_outer: true,\r\n          axis_x_tick_multiline: true,\r\n          axis_x_tick_multilineMax: 0,\r\n          axis_x_tick_width: null,\r\n          axis_x_max: undefined,\r\n          axis_x_min: undefined,\r\n          axis_x_padding: {},\r\n          axis_x_height: undefined,\r\n          axis_x_selection: undefined,\r\n          axis_x_label: {},\r\n          axis_x_inner: undefined,\r\n          axis_y_show: true,\r\n          axis_y_type: 'linear',\r\n          axis_y_max: undefined,\r\n          axis_y_min: undefined,\r\n          axis_y_inverted: false,\r\n          axis_y_center: undefined,\r\n          axis_y_inner: undefined,\r\n          axis_y_label: {},\r\n          axis_y_tick_format: undefined,\r\n          axis_y_tick_outer: true,\r\n          axis_y_tick_values: null,\r\n          axis_y_tick_rotate: 0,\r\n          axis_y_tick_count: undefined,\r\n          axis_y_tick_time_type: undefined,\r\n          axis_y_tick_time_interval: undefined,\r\n          axis_y_padding: {},\r\n          axis_y_default: undefined,\r\n          axis_y2_show: false,\r\n          axis_y2_type: 'linear',\r\n          axis_y2_max: undefined,\r\n          axis_y2_min: undefined,\r\n          axis_y2_inverted: false,\r\n          axis_y2_center: undefined,\r\n          axis_y2_inner: undefined,\r\n          axis_y2_label: {},\r\n          axis_y2_tick_format: undefined,\r\n          axis_y2_tick_outer: true,\r\n          axis_y2_tick_values: null,\r\n          axis_y2_tick_count: undefined,\r\n          axis_y2_padding: {},\r\n          axis_y2_default: undefined,\r\n          // grid\r\n          grid_x_show: false,\r\n          grid_x_type: 'tick',\r\n          grid_x_lines: [],\r\n          grid_y_show: false,\r\n          // not used\r\n          // grid_y_type: 'tick',\r\n          grid_y_lines: [],\r\n          grid_y_ticks: 10,\r\n          grid_focus_show: true,\r\n          grid_lines_front: true,\r\n          // point - point of each data\r\n          point_show: true,\r\n          point_r: 2.5,\r\n          point_sensitivity: 10,\r\n          point_focus_expand_enabled: true,\r\n          point_focus_expand_r: undefined,\r\n          point_select_r: undefined,\r\n          // line\r\n          line_connectNull: false,\r\n          line_step_type: 'step',\r\n          // bar\r\n          bar_width: undefined,\r\n          bar_width_ratio: 0.6,\r\n          bar_width_max: undefined,\r\n          bar_zerobased: true,\r\n          bar_space: 0,\r\n          // area\r\n          area_zerobased: true,\r\n          area_above: false,\r\n          // pie\r\n          pie_label_show: true,\r\n          pie_label_format: undefined,\r\n          pie_label_threshold: 0.05,\r\n          pie_label_ratio: undefined,\r\n          pie_expand: {},\r\n          pie_expand_duration: 50,\r\n          pie_padAngle: 0,\r\n          // gauge\r\n          gauge_fullCircle: false,\r\n          gauge_label_show: true,\r\n          gauge_labelLine_show: true,\r\n          gauge_label_format: undefined,\r\n          gauge_min: 0,\r\n          gauge_max: 100,\r\n          gauge_startingAngle: (-1 * Math.PI) / 2,\r\n          gauge_label_extents: undefined,\r\n          gauge_units: undefined,\r\n          gauge_width: undefined,\r\n          gauge_arcs_minWidth: 5,\r\n          gauge_expand: {},\r\n          gauge_expand_duration: 50,\r\n          // donut\r\n          donut_label_show: true,\r\n          donut_label_format: undefined,\r\n          donut_label_threshold: 0.05,\r\n          donut_label_ratio: undefined,\r\n          donut_width: undefined,\r\n          donut_title: '',\r\n          donut_expand: {},\r\n          donut_expand_duration: 50,\r\n          donut_padAngle: 0,\r\n          // spline\r\n          spline_interpolation_type: 'cardinal',\r\n          // stanford\r\n          stanford_lines: [],\r\n          stanford_regions: [],\r\n          stanford_texts: [],\r\n          stanford_scaleMin: undefined,\r\n          stanford_scaleMax: undefined,\r\n          stanford_scaleWidth: undefined,\r\n          stanford_scaleFormat: undefined,\r\n          stanford_scaleValues: undefined,\r\n          stanford_colors: undefined,\r\n          stanford_padding: {\r\n              top: 0,\r\n              right: 0,\r\n              bottom: 0,\r\n              left: 0\r\n          },\r\n          // region - region to change style\r\n          regions: [],\r\n          // tooltip - show when mouseover on each data\r\n          tooltip_show: true,\r\n          tooltip_grouped: true,\r\n          tooltip_order: undefined,\r\n          tooltip_format_title: undefined,\r\n          tooltip_format_name: undefined,\r\n          tooltip_format_value: undefined,\r\n          tooltip_horizontal: undefined,\r\n          tooltip_position: undefined,\r\n          tooltip_contents: function (d, defaultTitleFormat, defaultValueFormat, color) {\r\n              return this.getTooltipContent\r\n                  ? this.getTooltipContent(d, defaultTitleFormat, defaultValueFormat, color)\r\n                  : '';\r\n          },\r\n          tooltip_init_show: false,\r\n          tooltip_init_x: 0,\r\n          tooltip_init_position: { top: '0px', left: '50px' },\r\n          tooltip_onshow: function () { },\r\n          tooltip_onhide: function () { },\r\n          // title\r\n          title_text: undefined,\r\n          title_padding: {\r\n              top: 0,\r\n              right: 0,\r\n              bottom: 0,\r\n              left: 0\r\n          },\r\n          title_position: 'top-center'\r\n      };\r\n      Object.keys(this.additionalConfig).forEach(function (key) {\r\n          config[key] = this.additionalConfig[key];\r\n      }, this);\r\n      return config;\r\n  };\r\n  ChartInternal.prototype.additionalConfig = {};\r\n  ChartInternal.prototype.loadConfig = function (config) {\r\n      var this_config = this.config, target, keys, read;\r\n      function find() {\r\n          var key = keys.shift();\r\n          //        console.log(\"key =>\", key, \", target =>\", target);\r\n          if (key && target && typeof target === 'object' && key in target) {\r\n              target = target[key];\r\n              return find();\r\n          }\r\n          else if (!key) {\r\n              return target;\r\n          }\r\n          else {\r\n              return undefined;\r\n          }\r\n      }\r\n      Object.keys(this_config).forEach(function (key) {\r\n          target = config;\r\n          keys = key.split('_');\r\n          read = find();\r\n          //        console.log(\"CONFIG : \", key, read);\r\n          if (isDefined(read)) {\r\n              this_config[key] = read;\r\n          }\r\n      });\r\n  };\n\n  ChartInternal.prototype.convertUrlToData = function (url, mimeType, headers, keys, done) {\r\n      var $$ = this, type = mimeType ? mimeType : 'csv', f, converter;\r\n      if (type === 'json') {\r\n          f = $$.d3.json;\r\n          converter = $$.convertJsonToData;\r\n      }\r\n      else if (type === 'tsv') {\r\n          f = $$.d3.tsv;\r\n          converter = $$.convertXsvToData;\r\n      }\r\n      else {\r\n          f = $$.d3.csv;\r\n          converter = $$.convertXsvToData;\r\n      }\r\n      f(url, headers)\r\n          .then(function (data) {\r\n          done.call($$, converter.call($$, data, keys));\r\n      })\r\n          .catch(function (error) {\r\n          throw error;\r\n      });\r\n  };\r\n  ChartInternal.prototype.convertXsvToData = function (xsv) {\r\n      var keys = xsv.columns, rows = xsv;\r\n      if (rows.length === 0) {\r\n          return {\r\n              keys: keys,\r\n              rows: [keys.reduce(function (row, key) {\r\n                      var _a;\r\n                      return Object.assign(row, (_a = {}, _a[key] = null, _a));\r\n                  }, {})]\r\n          };\r\n      }\r\n      else {\r\n          // [].concat() is to convert result into a plain array otherwise\r\n          // test is not happy because rows have properties.\r\n          return { keys: keys, rows: [].concat(xsv) };\r\n      }\r\n  };\r\n  ChartInternal.prototype.convertJsonToData = function (json, keys) {\r\n      var $$ = this, new_rows = [], targetKeys, data;\r\n      if (keys) {\r\n          // when keys specified, json would be an array that includes objects\r\n          if (keys.x) {\r\n              targetKeys = keys.value.concat(keys.x);\r\n              $$.config.data_x = keys.x;\r\n          }\r\n          else {\r\n              targetKeys = keys.value;\r\n          }\r\n          new_rows.push(targetKeys);\r\n          json.forEach(function (o) {\r\n              var new_row = [];\r\n              targetKeys.forEach(function (key) {\r\n                  // convert undefined to null because undefined data will be removed in convertDataToTargets()\r\n                  var v = $$.findValueInJson(o, key);\r\n                  if (isUndefined(v)) {\r\n                      v = null;\r\n                  }\r\n                  new_row.push(v);\r\n              });\r\n              new_rows.push(new_row);\r\n          });\r\n          data = $$.convertRowsToData(new_rows);\r\n      }\r\n      else {\r\n          Object.keys(json).forEach(function (key) {\r\n              new_rows.push([key].concat(json[key]));\r\n          });\r\n          data = $$.convertColumnsToData(new_rows);\r\n      }\r\n      return data;\r\n  };\r\n  /**\r\n   * Finds value from the given nested object by the given path.\r\n   * If it's not found, then this returns undefined.\r\n   * @param {Object} object the object\r\n   * @param {string} path the path\r\n   */\r\n  ChartInternal.prototype.findValueInJson = function (object, path) {\r\n      if (path in object) {\r\n          // If object has a key that contains . or [], return the key's value\r\n          // instead of searching for an inner object.\r\n          // See https://github.com/c3js/c3/issues/1691 for details.\r\n          return object[path];\r\n      }\r\n      path = path.replace(/\\[(\\w+)\\]/g, '.$1'); // convert indexes to properties (replace [] with .)\r\n      path = path.replace(/^\\./, ''); // strip a leading dot\r\n      var pathArray = path.split('.');\r\n      for (var i = 0; i < pathArray.length; ++i) {\r\n          var k = pathArray[i];\r\n          if (k in object) {\r\n              object = object[k];\r\n          }\r\n          else {\r\n              return;\r\n          }\r\n      }\r\n      return object;\r\n  };\r\n  /**\r\n   * Converts the rows to normalized data.\r\n   * @param {any[][]} rows The row data\r\n   * @return {Object}\r\n   */\r\n  ChartInternal.prototype.convertRowsToData = function (rows) {\r\n      var newRows = [];\r\n      var keys = rows[0];\r\n      for (var i = 1; i < rows.length; i++) {\r\n          var newRow = {};\r\n          for (var j = 0; j < rows[i].length; j++) {\r\n              if (isUndefined(rows[i][j])) {\r\n                  throw new Error('Source data is missing a component at (' + i + ',' + j + ')!');\r\n              }\r\n              newRow[keys[j]] = rows[i][j];\r\n          }\r\n          newRows.push(newRow);\r\n      }\r\n      return { keys: keys, rows: newRows };\r\n  };\r\n  /**\r\n   * Converts the columns to normalized data.\r\n   * @param {any[][]} columns The column data\r\n   * @return {Object}\r\n   */\r\n  ChartInternal.prototype.convertColumnsToData = function (columns) {\r\n      var newRows = [];\r\n      var keys = [];\r\n      for (var i = 0; i < columns.length; i++) {\r\n          var key = columns[i][0];\r\n          for (var j = 1; j < columns[i].length; j++) {\r\n              if (isUndefined(newRows[j - 1])) {\r\n                  newRows[j - 1] = {};\r\n              }\r\n              if (isUndefined(columns[i][j])) {\r\n                  throw new Error('Source data is missing a component at (' + i + ',' + j + ')!');\r\n              }\r\n              newRows[j - 1][key] = columns[i][j];\r\n          }\r\n          keys.push(key);\r\n      }\r\n      return { keys: keys, rows: newRows };\r\n  };\r\n  /**\r\n   * Converts the data format into the target format.\r\n   * @param {!Object} data\r\n   * @param {!Array} data.keys Ordered list of target IDs.\r\n   * @param {!Array} data.rows Rows of data to convert.\r\n   * @param {boolean} appendXs True to append to $$.data.xs, False to replace.\r\n   * @return {!Array}\r\n   */\r\n  ChartInternal.prototype.convertDataToTargets = function (data, appendXs) {\r\n      var $$ = this, config = $$.config, targets, ids, xs, keys, epochs;\r\n      // handles format where keys are not orderly provided\r\n      if (isArray(data)) {\r\n          keys = Object.keys(data[0]);\r\n      }\r\n      else {\r\n          keys = data.keys;\r\n          data = data.rows;\r\n      }\r\n      xs = keys.filter($$.isX, $$);\r\n      if (!$$.isStanfordGraphType()) {\r\n          ids = keys.filter($$.isNotX, $$);\r\n      }\r\n      else {\r\n          epochs = keys.filter($$.isEpochs, $$);\r\n          ids = keys.filter($$.isNotXAndNotEpochs, $$);\r\n          if (xs.length !== 1 || epochs.length !== 1 || ids.length !== 1) {\r\n              throw new Error(\"You must define the 'x' key name and the 'epochs' for Stanford Diagrams\");\r\n          }\r\n      }\r\n      // save x for update data by load when custom x and c3.x API\r\n      ids.forEach(function (id) {\r\n          var xKey = $$.getXKey(id);\r\n          if ($$.isCustomX() || $$.isTimeSeries()) {\r\n              // if included in input data\r\n              if (xs.indexOf(xKey) >= 0) {\r\n                  $$.data.xs[id] = (appendXs && $$.data.xs[id]\r\n                      ? $$.data.xs[id]\r\n                      : []).concat(data\r\n                      .map(function (d) {\r\n                      return d[xKey];\r\n                  })\r\n                      .filter(isValue)\r\n                      .map(function (rawX, i) {\r\n                      return $$.generateTargetX(rawX, id, i);\r\n                  }));\r\n              }\r\n              // if not included in input data, find from preloaded data of other id's x\r\n              else if (config.data_x) {\r\n                  $$.data.xs[id] = $$.getOtherTargetXs();\r\n              }\r\n              // if not included in input data, find from preloaded data\r\n              else if (notEmpty(config.data_xs)) {\r\n                  $$.data.xs[id] = $$.getXValuesOfXKey(xKey, $$.data.targets);\r\n              }\r\n              // MEMO: if no x included, use same x of current will be used\r\n          }\r\n          else {\r\n              $$.data.xs[id] = data.map(function (d, i) {\r\n                  return i;\r\n              });\r\n          }\r\n      });\r\n      // check x is defined\r\n      ids.forEach(function (id) {\r\n          if (!$$.data.xs[id]) {\r\n              throw new Error('x is not defined for id = \"' + id + '\".');\r\n          }\r\n      });\r\n      // convert to target\r\n      targets = ids.map(function (id, index) {\r\n          var convertedId = config.data_idConverter(id);\r\n          return {\r\n              id: convertedId,\r\n              id_org: id,\r\n              values: data\r\n                  .map(function (d, i) {\r\n                  var xKey = $$.getXKey(id), rawX = d[xKey], value = d[id] !== null && !isNaN(d[id]) ? +d[id] : null, x, returnData;\r\n                  // use x as categories if custom x and categorized\r\n                  if ($$.isCustomX() && $$.isCategorized() && !isUndefined(rawX)) {\r\n                      if (index === 0 && i === 0) {\r\n                          config.axis_x_categories = [];\r\n                      }\r\n                      x = config.axis_x_categories.indexOf(rawX);\r\n                      if (x === -1) {\r\n                          x = config.axis_x_categories.length;\r\n                          config.axis_x_categories.push(rawX);\r\n                      }\r\n                  }\r\n                  else {\r\n                      x = $$.generateTargetX(rawX, id, i);\r\n                  }\r\n                  // mark as x = undefined if value is undefined and filter to remove after mapped\r\n                  if (isUndefined(d[id]) || $$.data.xs[id].length <= i) {\r\n                      x = undefined;\r\n                  }\r\n                  returnData = { x: x, value: value, id: convertedId };\r\n                  if ($$.isStanfordGraphType()) {\r\n                      returnData.epochs = d[epochs];\r\n                  }\r\n                  return returnData;\r\n              })\r\n                  .filter(function (v) {\r\n                  return isDefined(v.x);\r\n              })\r\n          };\r\n      });\r\n      // finish targets\r\n      targets.forEach(function (t) {\r\n          var i;\r\n          // sort values by its x\r\n          if (config.data_xSort) {\r\n              t.values = t.values.sort(function (v1, v2) {\r\n                  var x1 = v1.x || v1.x === 0 ? v1.x : Infinity, x2 = v2.x || v2.x === 0 ? v2.x : Infinity;\r\n                  return x1 - x2;\r\n              });\r\n          }\r\n          // indexing each value\r\n          i = 0;\r\n          t.values.forEach(function (v) {\r\n              v.index = i++;\r\n          });\r\n          // this needs to be sorted because its index and value.index is identical\r\n          $$.data.xs[t.id].sort(function (v1, v2) {\r\n              return v1 - v2;\r\n          });\r\n      });\r\n      // cache information about values\r\n      $$.hasNegativeValue = $$.hasNegativeValueInTargets(targets);\r\n      $$.hasPositiveValue = $$.hasPositiveValueInTargets(targets);\r\n      // set target types\r\n      if (config.data_type) {\r\n          $$.setTargetType($$.mapToIds(targets).filter(function (id) {\r\n              return !(id in config.data_types);\r\n          }), config.data_type);\r\n      }\r\n      // cache as original id keyed\r\n      targets.forEach(function (d) {\r\n          $$.addCache(d.id_org, d);\r\n      });\r\n      return targets;\r\n  };\n\n  ChartInternal.prototype.isEpochs = function (key) {\r\n      var $$ = this, config = $$.config;\r\n      return config.data_epochs && key === config.data_epochs;\r\n  };\r\n  ChartInternal.prototype.isX = function (key) {\r\n      var $$ = this, config = $$.config;\r\n      return ((config.data_x && key === config.data_x) ||\r\n          (notEmpty(config.data_xs) && hasValue(config.data_xs, key)));\r\n  };\r\n  ChartInternal.prototype.isNotX = function (key) {\r\n      return !this.isX(key);\r\n  };\r\n  ChartInternal.prototype.isNotXAndNotEpochs = function (key) {\r\n      return !this.isX(key) && !this.isEpochs(key);\r\n  };\r\n  /**\r\n   * Returns whether the normalized stack option is enabled or not.\r\n   *\r\n   * To be enabled it must also have data.groups defined.\r\n   *\r\n   * @return {boolean}\r\n   */\r\n  ChartInternal.prototype.isStackNormalized = function () {\r\n      return this.config.data_stack_normalize && this.config.data_groups.length > 0;\r\n  };\r\n  /**\r\n   * Returns whether the axis is normalized or not.\r\n   *\r\n   * An axis is normalized as long as one of its associated target\r\n   * is normalized.\r\n   *\r\n   * @param axisId Axis ID (y or y2)\r\n   * @return {Boolean}\r\n   */\r\n  ChartInternal.prototype.isAxisNormalized = function (axisId) {\r\n      var $$ = this;\r\n      if (!$$.isStackNormalized()) {\r\n          // shortcut\r\n          return false;\r\n      }\r\n      return $$.data.targets\r\n          .filter(function (target) { return $$.axis.getId(target.id) === axisId; })\r\n          .some(function (target) { return $$.isTargetNormalized(target.id); });\r\n  };\r\n  /**\r\n   * Returns whether the values for this target ID is normalized or not.\r\n   *\r\n   * To be normalized the option needs to be enabled and target needs\r\n   * to be defined in `data.groups`.\r\n   *\r\n   * @param targetId ID of the target\r\n   * @return {Boolean} True if the target is normalized, false otherwise.\r\n   */\r\n  ChartInternal.prototype.isTargetNormalized = function (targetId) {\r\n      var $$ = this;\r\n      return ($$.isStackNormalized() &&\r\n          $$.config.data_groups.some(function (group) { return group.includes(targetId); }));\r\n  };\r\n  ChartInternal.prototype.getXKey = function (id) {\r\n      var $$ = this, config = $$.config;\r\n      return config.data_x\r\n          ? config.data_x\r\n          : notEmpty(config.data_xs)\r\n              ? config.data_xs[id]\r\n              : null;\r\n  };\r\n  /**\r\n   * Get sum of visible data per index for given axis.\r\n   *\r\n   * Expect axisId to be either 'y' or 'y2'.\r\n   *\r\n   * @private\r\n   * @param axisId Compute sum for data associated to given axis.\r\n   * @return {Array}\r\n   */\r\n  ChartInternal.prototype.getTotalPerIndex = function (axisId) {\r\n      var $$ = this;\r\n      if (!$$.isStackNormalized()) {\r\n          return null;\r\n      }\r\n      var cached = $$.getFromCache('getTotalPerIndex');\r\n      if (cached !== undefined) {\r\n          return cached[axisId];\r\n      }\r\n      var sum = { y: [], y2: [] };\r\n      $$.data.targets\r\n          // keep only target that are normalized\r\n          .filter(function (target) { return $$.isTargetNormalized(target.id); })\r\n          // keep only target that are visible\r\n          .filter(function (target) { return $$.isTargetToShow(target.id); })\r\n          // compute sum per axis\r\n          .forEach(function (target) {\r\n          var sumByAxis = sum[$$.axis.getId(target.id)];\r\n          target.values.forEach(function (v, i) {\r\n              if (!sumByAxis[i]) {\r\n                  sumByAxis[i] = 0;\r\n              }\r\n              sumByAxis[i] += isNumber(v.value) ? v.value : 0;\r\n          });\r\n      });\r\n      $$.addToCache('getTotalPerIndex', sum);\r\n      return sum[axisId];\r\n  };\r\n  /**\r\n   * Get sum of visible data.\r\n   *\r\n   * Should be used for normalised data only since all values\r\n   * are expected to be positive.\r\n   *\r\n   * @private\r\n   * @return {Number}\r\n   */\r\n  ChartInternal.prototype.getTotalDataSum = function () {\r\n      var $$ = this;\r\n      var cached = $$.getFromCache('getTotalDataSum');\r\n      if (cached !== undefined) {\r\n          return cached;\r\n      }\r\n      var totalDataSum = flattenArray($$.data.targets\r\n          .filter(function (target) { return $$.isTargetToShow(target.id); })\r\n          .map(function (target) { return target.values; }))\r\n          .map(function (d) { return d.value; })\r\n          .reduce(function (p, c) { return p + c; }, 0);\r\n      $$.addToCache('getTotalDataSum', totalDataSum);\r\n      return totalDataSum;\r\n  };\r\n  ChartInternal.prototype.getXValuesOfXKey = function (key, targets) {\r\n      var $$ = this, xValues, ids = targets && notEmpty(targets) ? $$.mapToIds(targets) : [];\r\n      ids.forEach(function (id) {\r\n          if ($$.getXKey(id) === key) {\r\n              xValues = $$.data.xs[id];\r\n          }\r\n      });\r\n      return xValues;\r\n  };\r\n  ChartInternal.prototype.getXValue = function (id, i) {\r\n      var $$ = this;\r\n      return id in $$.data.xs && $$.data.xs[id] && isValue($$.data.xs[id][i])\r\n          ? $$.data.xs[id][i]\r\n          : i;\r\n  };\r\n  ChartInternal.prototype.getOtherTargetXs = function () {\r\n      var $$ = this, idsForX = Object.keys($$.data.xs);\r\n      return idsForX.length ? $$.data.xs[idsForX[0]] : null;\r\n  };\r\n  ChartInternal.prototype.getOtherTargetX = function (index) {\r\n      var xs = this.getOtherTargetXs();\r\n      return xs && index < xs.length ? xs[index] : null;\r\n  };\r\n  ChartInternal.prototype.addXs = function (xs) {\r\n      var $$ = this;\r\n      Object.keys(xs).forEach(function (id) {\r\n          $$.config.data_xs[id] = xs[id];\r\n      });\r\n  };\r\n  ChartInternal.prototype.addName = function (data) {\r\n      var $$ = this, name;\r\n      if (data) {\r\n          name = $$.config.data_names[data.id];\r\n          data.name = name !== undefined ? name : data.id;\r\n      }\r\n      return data;\r\n  };\r\n  ChartInternal.prototype.getValueOnIndex = function (values, index) {\r\n      var valueOnIndex = values.filter(function (v) {\r\n          return v.index === index;\r\n      });\r\n      return valueOnIndex.length ? valueOnIndex[0] : null;\r\n  };\r\n  ChartInternal.prototype.updateTargetX = function (targets, x) {\r\n      var $$ = this;\r\n      targets.forEach(function (t) {\r\n          t.values.forEach(function (v, i) {\r\n              v.x = $$.generateTargetX(x[i], t.id, i);\r\n          });\r\n          $$.data.xs[t.id] = x;\r\n      });\r\n  };\r\n  ChartInternal.prototype.updateTargetXs = function (targets, xs) {\r\n      var $$ = this;\r\n      targets.forEach(function (t) {\r\n          if (xs[t.id]) {\r\n              $$.updateTargetX([t], xs[t.id]);\r\n          }\r\n      });\r\n  };\r\n  ChartInternal.prototype.generateTargetX = function (rawX, id, index) {\r\n      var $$ = this, x;\r\n      if ($$.isTimeSeries()) {\r\n          x = rawX ? $$.parseDate(rawX) : $$.parseDate($$.getXValue(id, index));\r\n      }\r\n      else if ($$.isCustomX() && !$$.isCategorized()) {\r\n          x = isValue(rawX) ? +rawX : $$.getXValue(id, index);\r\n      }\r\n      else {\r\n          x = index;\r\n      }\r\n      return x;\r\n  };\r\n  ChartInternal.prototype.cloneTarget = function (target) {\r\n      return {\r\n          id: target.id,\r\n          id_org: target.id_org,\r\n          values: target.values.map(function (d) {\r\n              return {\r\n                  x: d.x,\r\n                  value: d.value,\r\n                  id: d.id\r\n              };\r\n          })\r\n      };\r\n  };\r\n  ChartInternal.prototype.getMaxDataCount = function () {\r\n      var $$ = this;\r\n      return $$.d3.max($$.data.targets, function (t) {\r\n          return t.values.length;\r\n      });\r\n  };\r\n  ChartInternal.prototype.mapToIds = function (targets) {\r\n      return targets.map(function (d) {\r\n          return d.id;\r\n      });\r\n  };\r\n  ChartInternal.prototype.mapToTargetIds = function (ids) {\r\n      var $$ = this;\r\n      return ids ? [].concat(ids) : $$.mapToIds($$.data.targets);\r\n  };\r\n  ChartInternal.prototype.hasTarget = function (targets, id) {\r\n      var ids = this.mapToIds(targets), i;\r\n      for (i = 0; i < ids.length; i++) {\r\n          if (ids[i] === id) {\r\n              return true;\r\n          }\r\n      }\r\n      return false;\r\n  };\r\n  ChartInternal.prototype.isTargetToShow = function (targetId) {\r\n      return this.hiddenTargetIds.indexOf(targetId) < 0;\r\n  };\r\n  ChartInternal.prototype.isLegendToShow = function (targetId) {\r\n      return this.hiddenLegendIds.indexOf(targetId) < 0;\r\n  };\r\n  /**\r\n   * Returns only visible targets.\r\n   *\r\n   * This is the same as calling {@link filterTargetsToShow} on $$.data.targets.\r\n   *\r\n   * @return {Array}\r\n   */\r\n  ChartInternal.prototype.getTargetsToShow = function () {\r\n      var $$ = this;\r\n      return $$.filterTargetsToShow($$.data.targets);\r\n  };\r\n  ChartInternal.prototype.filterTargetsToShow = function (targets) {\r\n      var $$ = this;\r\n      return targets.filter(function (t) {\r\n          return $$.isTargetToShow(t.id);\r\n      });\r\n  };\r\n  /**\r\n   * @return {Array} Returns all the targets attached to the chart, visible or not\r\n   */\r\n  ChartInternal.prototype.getTargets = function () {\r\n      var $$ = this;\r\n      return $$.data.targets;\r\n  };\r\n  ChartInternal.prototype.mapTargetsToUniqueXs = function (targets) {\r\n      var $$ = this;\r\n      var xs = $$.d3\r\n          .set($$.d3.merge(targets.map(function (t) {\r\n          return t.values.map(function (v) {\r\n              return +v.x;\r\n          });\r\n      })))\r\n          .values();\r\n      xs = $$.isTimeSeries()\r\n          ? xs.map(function (x) {\r\n              return new Date(+x);\r\n          })\r\n          : xs.map(function (x) {\r\n              return +x;\r\n          });\r\n      return xs.sort(function (a, b) {\r\n          return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\r\n      });\r\n  };\r\n  ChartInternal.prototype.addHiddenTargetIds = function (targetIds) {\r\n      targetIds = targetIds instanceof Array ? targetIds : new Array(targetIds);\r\n      for (var i = 0; i < targetIds.length; i++) {\r\n          if (this.hiddenTargetIds.indexOf(targetIds[i]) < 0) {\r\n              this.hiddenTargetIds = this.hiddenTargetIds.concat(targetIds[i]);\r\n          }\r\n      }\r\n      this.resetCache();\r\n  };\r\n  ChartInternal.prototype.removeHiddenTargetIds = function (targetIds) {\r\n      this.hiddenTargetIds = this.hiddenTargetIds.filter(function (id) {\r\n          return targetIds.indexOf(id) < 0;\r\n      });\r\n      this.resetCache();\r\n  };\r\n  ChartInternal.prototype.addHiddenLegendIds = function (targetIds) {\r\n      targetIds = targetIds instanceof Array ? targetIds : new Array(targetIds);\r\n      for (var i = 0; i < targetIds.length; i++) {\r\n          if (this.hiddenLegendIds.indexOf(targetIds[i]) < 0) {\r\n              this.hiddenLegendIds = this.hiddenLegendIds.concat(targetIds[i]);\r\n          }\r\n      }\r\n  };\r\n  ChartInternal.prototype.removeHiddenLegendIds = function (targetIds) {\r\n      this.hiddenLegendIds = this.hiddenLegendIds.filter(function (id) {\r\n          return targetIds.indexOf(id) < 0;\r\n      });\r\n  };\r\n  ChartInternal.prototype.getValuesAsIdKeyed = function (targets) {\r\n      var ys = {};\r\n      targets.forEach(function (t) {\r\n          ys[t.id] = [];\r\n          t.values.forEach(function (v) {\r\n              ys[t.id].push(v.value);\r\n          });\r\n      });\r\n      return ys;\r\n  };\r\n  ChartInternal.prototype.checkValueInTargets = function (targets, checker) {\r\n      var ids = Object.keys(targets), i, j, values;\r\n      for (i = 0; i < ids.length; i++) {\r\n          values = targets[ids[i]].values;\r\n          for (j = 0; j < values.length; j++) {\r\n              if (checker(values[j].value)) {\r\n                  return true;\r\n              }\r\n          }\r\n      }\r\n      return false;\r\n  };\r\n  ChartInternal.prototype.hasNegativeValueInTargets = function (targets) {\r\n      return this.checkValueInTargets(targets, function (v) {\r\n          return v < 0;\r\n      });\r\n  };\r\n  ChartInternal.prototype.hasPositiveValueInTargets = function (targets) {\r\n      return this.checkValueInTargets(targets, function (v) {\r\n          return v > 0;\r\n      });\r\n  };\r\n  ChartInternal.prototype.isOrderDesc = function () {\r\n      var config = this.config;\r\n      return (typeof config.data_order === 'string' &&\r\n          config.data_order.toLowerCase() === 'desc');\r\n  };\r\n  ChartInternal.prototype.isOrderAsc = function () {\r\n      var config = this.config;\r\n      return (typeof config.data_order === 'string' &&\r\n          config.data_order.toLowerCase() === 'asc');\r\n  };\r\n  ChartInternal.prototype.getOrderFunction = function () {\r\n      var $$ = this, config = $$.config, orderAsc = $$.isOrderAsc(), orderDesc = $$.isOrderDesc();\r\n      if (orderAsc || orderDesc) {\r\n          var reducer = function (p, c) {\r\n              return p + Math.abs(c.value);\r\n          };\r\n          return function (t1, t2) {\r\n              var t1Sum = t1.values.reduce(reducer, 0), t2Sum = t2.values.reduce(reducer, 0);\r\n              return orderAsc ? t2Sum - t1Sum : t1Sum - t2Sum;\r\n          };\r\n      }\r\n      else if (isFunction(config.data_order)) {\r\n          return config.data_order;\r\n      }\r\n      else if (isArray(config.data_order)) {\r\n          var order = config.data_order;\r\n          return function (t1, t2) {\r\n              return order.indexOf(t1.id) - order.indexOf(t2.id);\r\n          };\r\n      }\r\n  };\r\n  ChartInternal.prototype.orderTargets = function (targets) {\r\n      var fct = this.getOrderFunction();\r\n      if (fct) {\r\n          targets.sort(fct);\r\n      }\r\n      return targets;\r\n  };\r\n  /**\r\n   * Returns all the values from the given targets at the given index.\r\n   *\r\n   * @param {Array} targets\r\n   * @param {Number} index\r\n   * @return {Array}\r\n   */\r\n  ChartInternal.prototype.filterByIndex = function (targets, index) {\r\n      return this.d3.merge(targets.map(function (t) { return t.values.filter(function (v) { return v.index === index; }); }));\r\n  };\r\n  ChartInternal.prototype.filterByX = function (targets, x) {\r\n      return this.d3\r\n          .merge(targets.map(function (t) {\r\n          return t.values;\r\n      }))\r\n          .filter(function (v) {\r\n          return v.x - x === 0;\r\n      });\r\n  };\r\n  ChartInternal.prototype.filterRemoveNull = function (data) {\r\n      return data.filter(function (d) {\r\n          return isValue(d.value);\r\n      });\r\n  };\r\n  ChartInternal.prototype.filterByXDomain = function (targets, xDomain) {\r\n      return targets.map(function (t) {\r\n          return {\r\n              id: t.id,\r\n              id_org: t.id_org,\r\n              values: t.values.filter(function (v) {\r\n                  return xDomain[0] <= v.x && v.x <= xDomain[1];\r\n              })\r\n          };\r\n      });\r\n  };\r\n  ChartInternal.prototype.hasDataLabel = function () {\r\n      var config = this.config;\r\n      if (typeof config.data_labels === 'boolean' && config.data_labels) {\r\n          return true;\r\n      }\r\n      else if (typeof config.data_labels === 'object' &&\r\n          notEmpty(config.data_labels)) {\r\n          return true;\r\n      }\r\n      return false;\r\n  };\r\n  ChartInternal.prototype.getDataLabelLength = function (min, max, key) {\r\n      var $$ = this, lengths = [0, 0], paddingCoef = 1.3;\r\n      $$.selectChart\r\n          .select('svg')\r\n          .selectAll('.dummy')\r\n          .data([min, max])\r\n          .enter()\r\n          .append('text')\r\n          .text(function (d) {\r\n          return $$.dataLabelFormat(d.id)(d);\r\n      })\r\n          .each(function (d, i) {\r\n          lengths[i] = getBBox(this)[key] * paddingCoef;\r\n      })\r\n          .remove();\r\n      return lengths;\r\n  };\r\n  /**\r\n   * Returns true if the given data point is not arc type, otherwise false.\r\n   * @param {Object} d The data point\r\n   * @return {boolean}\r\n   */\r\n  ChartInternal.prototype.isNoneArc = function (d) {\r\n      return this.hasTarget(this.data.targets, d.id);\r\n  };\r\n  /**\r\n   * Returns true if the given data point is arc type, otherwise false.\r\n   * @param {Object} d The data point\r\n   * @return {boolean}\r\n   */\r\n  ChartInternal.prototype.isArc = function (d) {\r\n      return 'data' in d && this.hasTarget(this.data.targets, d.data.id);\r\n  };\r\n  /**\r\n   * Find the closest point from the given pos among the given targets or\r\n   * undefined if none satisfies conditions.\r\n   *\r\n   * @param {Array} targets\r\n   * @param {Array} pos An [x,y] coordinate\r\n   * @return {Object|undefined}\r\n   */\r\n  ChartInternal.prototype.findClosestFromTargets = function (targets, pos) {\r\n      var $$ = this;\r\n      // for each target, find the closest point\r\n      var candidates = targets\r\n          .map(function (t) {\r\n          return $$.findClosest(t.values, pos, $$.config.tooltip_horizontal\r\n              ? $$.horizontalDistance.bind($$)\r\n              : $$.dist.bind($$), $$.config.point_sensitivity);\r\n      })\r\n          .filter(function (v) { return v; });\r\n      // returns the closest of candidates\r\n      if (candidates.length === 0) {\r\n          return undefined;\r\n      }\r\n      else if (candidates.length === 1) {\r\n          return candidates[0];\r\n      }\r\n      else {\r\n          return $$.findClosest(candidates, pos, $$.dist.bind($$));\r\n      }\r\n  };\r\n  /**\r\n   * Find the closest point from the x value or undefined if none satisfies conditions.\r\n   *\r\n   * @param {Array} targets\r\n   * @param {Array} x A value on X axis\r\n   * @return {Object|undefined}\r\n   */\r\n  ChartInternal.prototype.findClosestFromTargetsByX = function (targets, x) {\r\n      var closest;\r\n      var diff;\r\n      targets.forEach(function (t) {\r\n          t.values.forEach(function (d) {\r\n              var newDiff = Math.abs(x - d.x);\r\n              if (diff === undefined || newDiff < diff) {\r\n                  closest = d;\r\n                  diff = newDiff;\r\n              }\r\n          });\r\n      });\r\n      return closest;\r\n  };\r\n  /**\r\n   * Using given compute distance method, returns the closest data point from the\r\n   * given position.\r\n   *\r\n   * Giving optionally a minimum distance to satisfy.\r\n   *\r\n   * @param {Array} dataPoints List of DataPoints\r\n   * @param {Array} pos An [x,y] coordinate\r\n   * @param {Function} computeDist Function to compute distance between 2 points\r\n   * @param {Number} minDist Minimal distance to satisfy\r\n   * @return {Object|undefined} Closest data point\r\n   */\r\n  ChartInternal.prototype.findClosest = function (dataPoints, pos, computeDist, minDist) {\r\n      if (minDist === void 0) { minDist = Infinity; }\r\n      var $$ = this;\r\n      var closest;\r\n      // find closest bar\r\n      dataPoints\r\n          .filter(function (v) { return v && $$.isBarType(v.id); })\r\n          .forEach(function (v) {\r\n          if (!closest) {\r\n              var shape = $$.main\r\n                  .select('.' +\r\n                  CLASS.bars +\r\n                  $$.getTargetSelectorSuffix(v.id) +\r\n                  ' .' +\r\n                  CLASS.bar +\r\n                  '-' +\r\n                  v.index)\r\n                  .node();\r\n              if ($$.isWithinBar(pos, shape)) {\r\n                  closest = v;\r\n              }\r\n          }\r\n      });\r\n      // find closest point from non-bar\r\n      dataPoints\r\n          .filter(function (v) { return v && !$$.isBarType(v.id); })\r\n          .forEach(function (v) {\r\n          var d = computeDist(v, pos);\r\n          if (d < minDist) {\r\n              minDist = d;\r\n              closest = v;\r\n          }\r\n      });\r\n      return closest;\r\n  };\r\n  ChartInternal.prototype.dist = function (data, pos) {\r\n      var $$ = this, config = $$.config, xIndex = config.axis_rotated ? 1 : 0, yIndex = config.axis_rotated ? 0 : 1, y = $$.circleY(data, data.index), x = $$.x(data.x);\r\n      return Math.sqrt(Math.pow(x - pos[xIndex], 2) + Math.pow(y - pos[yIndex], 2));\r\n  };\r\n  ChartInternal.prototype.horizontalDistance = function (data, pos) {\r\n      var $$ = this, config = $$.config, xIndex = config.axis_rotated ? 1 : 0, x = $$.x(data.x);\r\n      return Math.abs(x - pos[xIndex]);\r\n  };\r\n  ChartInternal.prototype.convertValuesToStep = function (values) {\r\n      var converted = [].concat(values), i;\r\n      if (!this.isCategorized()) {\r\n          return values;\r\n      }\r\n      for (i = values.length + 1; 0 < i; i--) {\r\n          converted[i] = converted[i - 1];\r\n      }\r\n      converted[0] = {\r\n          x: converted[0].x - 1,\r\n          value: converted[0].value,\r\n          id: converted[0].id\r\n      };\r\n      converted[values.length + 1] = {\r\n          x: converted[values.length].x + 1,\r\n          value: converted[values.length].value,\r\n          id: converted[values.length].id\r\n      };\r\n      return converted;\r\n  };\r\n  /**\r\n   * Get ratio value\r\n   *\r\n   * @param {String} type Ratio for given type\r\n   * @param {Object} d Data value object\r\n   * @param {Boolean} asPercent Convert the return as percent or not\r\n   * @return {Number} Ratio value\r\n   * @private\r\n   */\r\n  ChartInternal.prototype.getRatio = function (type, d, asPercent) {\r\n      if (asPercent === void 0) { asPercent = false; }\r\n      var $$ = this;\r\n      var api = $$.api;\r\n      var ratio = 0;\r\n      if (d && api.data.shown.call(api).length) {\r\n          ratio = d.ratio || d.value;\r\n          if (type === 'arc') {\r\n              if ($$.hasType('gauge')) {\r\n                  ratio =\r\n                      (d.endAngle - d.startAngle) /\r\n                          (Math.PI * ($$.config.gauge_fullCircle ? 2 : 1));\r\n              }\r\n              else {\r\n                  var total = $$.getTotalDataSum();\r\n                  ratio = d.value / total;\r\n              }\r\n          }\r\n          else if (type === 'index') {\r\n              var total = $$.getTotalPerIndex($$.axis.getId(d.id));\r\n              d.ratio =\r\n                  isNumber(d.value) && total && total[d.index] > 0\r\n                      ? d.value / total[d.index]\r\n                      : 0;\r\n              ratio = d.ratio;\r\n          }\r\n      }\r\n      return asPercent && ratio ? ratio * 100 : ratio;\r\n  };\r\n  ChartInternal.prototype.updateDataAttributes = function (name, attrs) {\r\n      var $$ = this, config = $$.config, current = config['data_' + name];\r\n      if (typeof attrs === 'undefined') {\r\n          return current;\r\n      }\r\n      Object.keys(attrs).forEach(function (id) {\r\n          current[id] = attrs[id];\r\n      });\r\n      $$.redraw({\r\n          withLegend: true\r\n      });\r\n      return current;\r\n  };\n\n  ChartInternal.prototype.load = function (targets, args) {\r\n      var $$ = this;\r\n      if (targets) {\r\n          // filter loading targets if needed\r\n          if (args.filter) {\r\n              targets = targets.filter(args.filter);\r\n          }\r\n          // set type if args.types || args.type specified\r\n          if (args.type || args.types) {\r\n              targets.forEach(function (t) {\r\n                  var type = args.types && args.types[t.id] ? args.types[t.id] : args.type;\r\n                  $$.setTargetType(t.id, type);\r\n              });\r\n          }\r\n          // Update/Add data\r\n          $$.data.targets.forEach(function (d) {\r\n              for (var i = 0; i < targets.length; i++) {\r\n                  if (d.id === targets[i].id) {\r\n                      d.values = targets[i].values;\r\n                      targets.splice(i, 1);\r\n                      break;\r\n                  }\r\n              }\r\n          });\r\n          $$.data.targets = $$.data.targets.concat(targets); // add remained\r\n      }\r\n      // Set targets\r\n      $$.updateTargets($$.data.targets);\r\n      // Redraw with new targets\r\n      $$.redraw({\r\n          withUpdateOrgXDomain: true,\r\n          withUpdateXDomain: true,\r\n          withLegend: true\r\n      });\r\n      if (args.done) {\r\n          args.done();\r\n      }\r\n  };\r\n  ChartInternal.prototype.loadFromArgs = function (args) {\r\n      var $$ = this;\r\n      $$.resetCache();\r\n      if (args.data) {\r\n          $$.load($$.convertDataToTargets(args.data), args);\r\n      }\r\n      else if (args.url) {\r\n          $$.convertUrlToData(args.url, args.mimeType, args.headers, args.keys, function (data) {\r\n              $$.load($$.convertDataToTargets(data), args);\r\n          });\r\n      }\r\n      else if (args.json) {\r\n          $$.load($$.convertDataToTargets($$.convertJsonToData(args.json, args.keys)), args);\r\n      }\r\n      else if (args.rows) {\r\n          $$.load($$.convertDataToTargets($$.convertRowsToData(args.rows)), args);\r\n      }\r\n      else if (args.columns) {\r\n          $$.load($$.convertDataToTargets($$.convertColumnsToData(args.columns)), args);\r\n      }\r\n      else {\r\n          $$.load(null, args);\r\n      }\r\n  };\r\n  ChartInternal.prototype.unload = function (targetIds, done) {\r\n      var $$ = this;\r\n      $$.resetCache();\r\n      if (!done) {\r\n          done = function () { };\r\n      }\r\n      // filter existing target\r\n      targetIds = targetIds.filter(function (id) {\r\n          return $$.hasTarget($$.data.targets, id);\r\n      });\r\n      // If no target, call done and return\r\n      if (!targetIds || targetIds.length === 0) {\r\n          done();\r\n          return;\r\n      }\r\n      $$.svg\r\n          .selectAll(targetIds.map(function (id) {\r\n          return $$.selectorTarget(id);\r\n      }))\r\n          .transition()\r\n          .style('opacity', 0)\r\n          .remove()\r\n          .call($$.endall, done);\r\n      targetIds.forEach(function (id) {\r\n          // Reset fadein for future load\r\n          $$.withoutFadeIn[id] = false;\r\n          // Remove target's elements\r\n          if ($$.legend) {\r\n              $$.legend\r\n                  .selectAll('.' + CLASS.legendItem + $$.getTargetSelectorSuffix(id))\r\n                  .remove();\r\n          }\r\n          // Remove target\r\n          $$.data.targets = $$.data.targets.filter(function (t) {\r\n              return t.id !== id;\r\n          });\r\n      });\r\n  };\n\n  ChartInternal.prototype.getYDomainMin = function (targets) {\r\n      var $$ = this, config = $$.config, ids = $$.mapToIds(targets), ys = $$.getValuesAsIdKeyed(targets), j, k, baseId, idsInGroup, id, hasNegativeValue;\r\n      if (config.data_groups.length > 0) {\r\n          hasNegativeValue = $$.hasNegativeValueInTargets(targets);\r\n          for (j = 0; j < config.data_groups.length; j++) {\r\n              // Determine baseId\r\n              idsInGroup = config.data_groups[j].filter(function (id) {\r\n                  return ids.indexOf(id) >= 0;\r\n              });\r\n              if (idsInGroup.length === 0) {\r\n                  continue;\r\n              }\r\n              baseId = idsInGroup[0];\r\n              // Consider negative values\r\n              if (hasNegativeValue && ys[baseId]) {\r\n                  ys[baseId].forEach(function (v, i) {\r\n                      ys[baseId][i] = v < 0 ? v : 0;\r\n                  });\r\n              }\r\n              // Compute min\r\n              for (k = 1; k < idsInGroup.length; k++) {\r\n                  id = idsInGroup[k];\r\n                  if (!ys[id]) {\r\n                      continue;\r\n                  }\r\n                  ys[id].forEach(function (v, i) {\r\n                      if ($$.axis.getId(id) === $$.axis.getId(baseId) &&\r\n                          ys[baseId] &&\r\n                          !(hasNegativeValue && +v > 0)) {\r\n                          ys[baseId][i] += +v;\r\n                      }\r\n                  });\r\n              }\r\n          }\r\n      }\r\n      return $$.d3.min(Object.keys(ys).map(function (key) {\r\n          return $$.d3.min(ys[key]);\r\n      }));\r\n  };\r\n  ChartInternal.prototype.getYDomainMax = function (targets) {\r\n      var $$ = this, config = $$.config, ids = $$.mapToIds(targets), ys = $$.getValuesAsIdKeyed(targets), j, k, baseId, idsInGroup, id, hasPositiveValue;\r\n      if (config.data_groups.length > 0) {\r\n          hasPositiveValue = $$.hasPositiveValueInTargets(targets);\r\n          for (j = 0; j < config.data_groups.length; j++) {\r\n              // Determine baseId\r\n              idsInGroup = config.data_groups[j].filter(function (id) {\r\n                  return ids.indexOf(id) >= 0;\r\n              });\r\n              if (idsInGroup.length === 0) {\r\n                  continue;\r\n              }\r\n              baseId = idsInGroup[0];\r\n              // Consider positive values\r\n              if (hasPositiveValue && ys[baseId]) {\r\n                  ys[baseId].forEach(function (v, i) {\r\n                      ys[baseId][i] = v > 0 ? v : 0;\r\n                  });\r\n              }\r\n              // Compute max\r\n              for (k = 1; k < idsInGroup.length; k++) {\r\n                  id = idsInGroup[k];\r\n                  if (!ys[id]) {\r\n                      continue;\r\n                  }\r\n                  ys[id].forEach(function (v, i) {\r\n                      if ($$.axis.getId(id) === $$.axis.getId(baseId) &&\r\n                          ys[baseId] &&\r\n                          !(hasPositiveValue && +v < 0)) {\r\n                          ys[baseId][i] += +v;\r\n                      }\r\n                  });\r\n              }\r\n          }\r\n      }\r\n      return $$.d3.max(Object.keys(ys).map(function (key) {\r\n          return $$.d3.max(ys[key]);\r\n      }));\r\n  };\r\n  ChartInternal.prototype.getYDomain = function (targets, axisId, xDomain) {\r\n      var $$ = this, config = $$.config;\r\n      if ($$.isAxisNormalized(axisId)) {\r\n          return [0, 100];\r\n      }\r\n      var targetsByAxisId = targets.filter(function (t) {\r\n          return $$.axis.getId(t.id) === axisId;\r\n      }), yTargets = xDomain\r\n          ? $$.filterByXDomain(targetsByAxisId, xDomain)\r\n          : targetsByAxisId, yMin = axisId === 'y2' ? config.axis_y2_min : config.axis_y_min, yMax = axisId === 'y2' ? config.axis_y2_max : config.axis_y_max, yDomainMin = $$.getYDomainMin(yTargets), yDomainMax = $$.getYDomainMax(yTargets), domain, domainLength, padding_top, padding_bottom, center = axisId === 'y2' ? config.axis_y2_center : config.axis_y_center, yDomainAbs, lengths, diff, ratio, isAllPositive, isAllNegative, isZeroBased = ($$.hasType('bar', yTargets) && config.bar_zerobased) ||\r\n          ($$.hasType('area', yTargets) && config.area_zerobased), isInverted = axisId === 'y2' ? config.axis_y2_inverted : config.axis_y_inverted, showHorizontalDataLabel = $$.hasDataLabel() && config.axis_rotated, showVerticalDataLabel = $$.hasDataLabel() && !config.axis_rotated;\r\n      // MEMO: avoid inverting domain unexpectedly\r\n      yDomainMin = isValue(yMin)\r\n          ? yMin\r\n          : isValue(yMax)\r\n              ? yDomainMin < yMax\r\n                  ? yDomainMin\r\n                  : yMax - 10\r\n              : yDomainMin;\r\n      yDomainMax = isValue(yMax)\r\n          ? yMax\r\n          : isValue(yMin)\r\n              ? yMin < yDomainMax\r\n                  ? yDomainMax\r\n                  : yMin + 10\r\n              : yDomainMax;\r\n      if (yTargets.length === 0) {\r\n          // use current domain if target of axisId is none\r\n          return axisId === 'y2' ? $$.y2.domain() : $$.y.domain();\r\n      }\r\n      if (isNaN(yDomainMin)) {\r\n          // set minimum to zero when not number\r\n          yDomainMin = 0;\r\n      }\r\n      if (isNaN(yDomainMax)) {\r\n          // set maximum to have same value as yDomainMin\r\n          yDomainMax = yDomainMin;\r\n      }\r\n      if (yDomainMin === yDomainMax) {\r\n          yDomainMin < 0 ? (yDomainMax = 0) : (yDomainMin = 0);\r\n      }\r\n      isAllPositive = yDomainMin >= 0 && yDomainMax >= 0;\r\n      isAllNegative = yDomainMin <= 0 && yDomainMax <= 0;\r\n      // Cancel zerobased if axis_*_min / axis_*_max specified\r\n      if ((isValue(yMin) && isAllPositive) || (isValue(yMax) && isAllNegative)) {\r\n          isZeroBased = false;\r\n      }\r\n      // Bar/Area chart should be 0-based if all positive|negative\r\n      if (isZeroBased) {\r\n          if (isAllPositive) {\r\n              yDomainMin = 0;\r\n          }\r\n          if (isAllNegative) {\r\n              yDomainMax = 0;\r\n          }\r\n      }\r\n      domainLength = Math.abs(yDomainMax - yDomainMin);\r\n      padding_top = padding_bottom = domainLength * 0.1;\r\n      if (typeof center !== 'undefined') {\r\n          yDomainAbs = Math.max(Math.abs(yDomainMin), Math.abs(yDomainMax));\r\n          yDomainMax = center + yDomainAbs;\r\n          yDomainMin = center - yDomainAbs;\r\n      }\r\n      // add padding for data label\r\n      if (showHorizontalDataLabel) {\r\n          lengths = $$.getDataLabelLength(yDomainMin, yDomainMax, 'width');\r\n          diff = diffDomain($$.y.range());\r\n          ratio = [lengths[0] / diff, lengths[1] / diff];\r\n          padding_top += domainLength * (ratio[1] / (1 - ratio[0] - ratio[1]));\r\n          padding_bottom += domainLength * (ratio[0] / (1 - ratio[0] - ratio[1]));\r\n      }\r\n      else if (showVerticalDataLabel) {\r\n          lengths = $$.getDataLabelLength(yDomainMin, yDomainMax, 'height');\r\n          var pixelsToAxisPadding = $$.getY(config[\"axis_\" + axisId + \"_type\"], \r\n          // input domain as pixels\r\n          [0, config.axis_rotated ? $$.width : $$.height], \r\n          // output range as axis padding\r\n          [0, domainLength]);\r\n          padding_top += pixelsToAxisPadding(lengths[1]);\r\n          padding_bottom += pixelsToAxisPadding(lengths[0]);\r\n      }\r\n      if (axisId === 'y' && notEmpty(config.axis_y_padding)) {\r\n          padding_top = $$.axis.getPadding(config.axis_y_padding, 'top', padding_top, domainLength);\r\n          padding_bottom = $$.axis.getPadding(config.axis_y_padding, 'bottom', padding_bottom, domainLength);\r\n      }\r\n      if (axisId === 'y2' && notEmpty(config.axis_y2_padding)) {\r\n          padding_top = $$.axis.getPadding(config.axis_y2_padding, 'top', padding_top, domainLength);\r\n          padding_bottom = $$.axis.getPadding(config.axis_y2_padding, 'bottom', padding_bottom, domainLength);\r\n      }\r\n      // Bar/Area chart should be 0-based if all positive|negative\r\n      if (isZeroBased) {\r\n          if (isAllPositive) {\r\n              padding_bottom = yDomainMin;\r\n          }\r\n          if (isAllNegative) {\r\n              padding_top = -yDomainMax;\r\n          }\r\n      }\r\n      domain = [yDomainMin - padding_bottom, yDomainMax + padding_top];\r\n      return isInverted ? domain.reverse() : domain;\r\n  };\r\n  ChartInternal.prototype.getXDomainMin = function (targets) {\r\n      var $$ = this, config = $$.config;\r\n      return isDefined(config.axis_x_min)\r\n          ? $$.isTimeSeries()\r\n              ? this.parseDate(config.axis_x_min)\r\n              : config.axis_x_min\r\n          : $$.d3.min(targets, function (t) {\r\n              return $$.d3.min(t.values, function (v) {\r\n                  return v.x;\r\n              });\r\n          });\r\n  };\r\n  ChartInternal.prototype.getXDomainMax = function (targets) {\r\n      var $$ = this, config = $$.config;\r\n      return isDefined(config.axis_x_max)\r\n          ? $$.isTimeSeries()\r\n              ? this.parseDate(config.axis_x_max)\r\n              : config.axis_x_max\r\n          : $$.d3.max(targets, function (t) {\r\n              return $$.d3.max(t.values, function (v) {\r\n                  return v.x;\r\n              });\r\n          });\r\n  };\r\n  ChartInternal.prototype.getXDomainPadding = function (domain) {\r\n      var $$ = this, config = $$.config, diff = domain[1] - domain[0], maxDataCount, padding, paddingLeft, paddingRight;\r\n      if ($$.isCategorized()) {\r\n          padding = 0;\r\n      }\r\n      else if ($$.hasType('bar')) {\r\n          maxDataCount = $$.getMaxDataCount();\r\n          padding = maxDataCount > 1 ? diff / (maxDataCount - 1) / 2 : 0.5;\r\n      }\r\n      else {\r\n          padding = diff * 0.01;\r\n      }\r\n      if (typeof config.axis_x_padding === 'object' &&\r\n          notEmpty(config.axis_x_padding)) {\r\n          paddingLeft = isValue(config.axis_x_padding.left)\r\n              ? config.axis_x_padding.left\r\n              : padding;\r\n          paddingRight = isValue(config.axis_x_padding.right)\r\n              ? config.axis_x_padding.right\r\n              : padding;\r\n      }\r\n      else if (typeof config.axis_x_padding === 'number') {\r\n          paddingLeft = paddingRight = config.axis_x_padding;\r\n      }\r\n      else {\r\n          paddingLeft = paddingRight = padding;\r\n      }\r\n      return { left: paddingLeft, right: paddingRight };\r\n  };\r\n  ChartInternal.prototype.getXDomain = function (targets) {\r\n      var $$ = this, xDomain = [$$.getXDomainMin(targets), $$.getXDomainMax(targets)], firstX = xDomain[0], lastX = xDomain[1], padding = $$.getXDomainPadding(xDomain), min = 0, max = 0;\r\n      // show center of x domain if min and max are the same\r\n      if (firstX - lastX === 0 && !$$.isCategorized()) {\r\n          if ($$.isTimeSeries()) {\r\n              firstX = new Date(firstX.getTime() * 0.5);\r\n              lastX = new Date(lastX.getTime() * 1.5);\r\n          }\r\n          else {\r\n              firstX = firstX === 0 ? 1 : firstX * 0.5;\r\n              lastX = lastX === 0 ? -1 : lastX * 1.5;\r\n          }\r\n      }\r\n      if (firstX || firstX === 0) {\r\n          min = $$.isTimeSeries()\r\n              ? new Date(firstX.getTime() - padding.left)\r\n              : firstX - padding.left;\r\n      }\r\n      if (lastX || lastX === 0) {\r\n          max = $$.isTimeSeries()\r\n              ? new Date(lastX.getTime() + padding.right)\r\n              : lastX + padding.right;\r\n      }\r\n      return [min, max];\r\n  };\r\n  ChartInternal.prototype.updateXDomain = function (targets, withUpdateXDomain, withUpdateOrgXDomain, withTrim, domain) {\r\n      var $$ = this, config = $$.config;\r\n      if (withUpdateOrgXDomain) {\r\n          $$.x.domain(domain ? domain : $$.d3.extent($$.getXDomain(targets)));\r\n          $$.orgXDomain = $$.x.domain();\r\n          if (config.zoom_enabled) {\r\n              $$.zoom.update();\r\n          }\r\n          $$.subX.domain($$.x.domain());\r\n          if ($$.brush) {\r\n              $$.brush.updateScale($$.subX);\r\n          }\r\n      }\r\n      if (withUpdateXDomain) {\r\n          $$.x.domain(domain\r\n              ? domain\r\n              : !$$.brush || $$.brush.empty()\r\n                  ? $$.orgXDomain\r\n                  : $$.brush.selectionAsValue());\r\n      }\r\n      // Trim domain when too big by zoom mousemove event\r\n      if (withTrim) {\r\n          $$.x.domain($$.trimXDomain($$.x.orgDomain()));\r\n      }\r\n      return $$.x.domain();\r\n  };\r\n  ChartInternal.prototype.trimXDomain = function (domain) {\r\n      var zoomDomain = this.getZoomDomain(), min = zoomDomain[0], max = zoomDomain[1];\r\n      if (domain[0] <= min) {\r\n          domain[1] = +domain[1] + (min - domain[0]);\r\n          domain[0] = min;\r\n      }\r\n      if (max <= domain[1]) {\r\n          domain[0] = +domain[0] - (domain[1] - max);\r\n          domain[1] = max;\r\n      }\r\n      return domain;\r\n  };\n\n  ChartInternal.prototype.drag = function (mouse) {\r\n      var $$ = this, config = $$.config, main = $$.main, d3 = $$.d3;\r\n      var sx, sy, mx, my, minX, maxX, minY, maxY;\r\n      if ($$.hasArcType()) {\r\n          return;\r\n      }\r\n      if (!config.data_selection_enabled) {\r\n          return;\r\n      } // do nothing if not selectable\r\n      if (!config.data_selection_multiple) {\r\n          return;\r\n      } // skip when single selection because drag is used for multiple selection\r\n      sx = $$.dragStart[0];\r\n      sy = $$.dragStart[1];\r\n      mx = mouse[0];\r\n      my = mouse[1];\r\n      minX = Math.min(sx, mx);\r\n      maxX = Math.max(sx, mx);\r\n      minY = config.data_selection_grouped ? $$.margin.top : Math.min(sy, my);\r\n      maxY = config.data_selection_grouped ? $$.height : Math.max(sy, my);\r\n      main\r\n          .select('.' + CLASS.dragarea)\r\n          .attr('x', minX)\r\n          .attr('y', minY)\r\n          .attr('width', maxX - minX)\r\n          .attr('height', maxY - minY);\r\n      // TODO: binary search when multiple xs\r\n      main\r\n          .selectAll('.' + CLASS.shapes)\r\n          .selectAll('.' + CLASS.shape)\r\n          .each(function (d, i) {\r\n          if (!config.data_selection_isselectable(d)) {\r\n              return;\r\n          }\r\n          var shape = d3.select(this), isSelected = shape.classed(CLASS.SELECTED), isIncluded = shape.classed(CLASS.INCLUDED), _x, _y, _w, _h, toggle, isWithin = false, box;\r\n          if (shape.classed(CLASS.circle)) {\r\n              _x = shape.attr('cx') * 1;\r\n              _y = shape.attr('cy') * 1;\r\n              toggle = $$.togglePoint;\r\n              isWithin = minX < _x && _x < maxX && minY < _y && _y < maxY;\r\n          }\r\n          else if (shape.classed(CLASS.bar)) {\r\n              box = getPathBox(this);\r\n              _x = box.x;\r\n              _y = box.y;\r\n              _w = box.width;\r\n              _h = box.height;\r\n              toggle = $$.togglePath;\r\n              isWithin =\r\n                  !(maxX < _x || _x + _w < minX) && !(maxY < _y || _y + _h < minY);\r\n          }\r\n          else {\r\n              // line/area selection not supported yet\r\n              return;\r\n          }\r\n          if (isWithin ^ isIncluded) {\r\n              shape.classed(CLASS.INCLUDED, !isIncluded);\r\n              // TODO: included/unincluded callback here\r\n              shape.classed(CLASS.SELECTED, !isSelected);\r\n              toggle.call($$, !isSelected, shape, d, i);\r\n          }\r\n      });\r\n  };\r\n  ChartInternal.prototype.dragstart = function (mouse) {\r\n      var $$ = this, config = $$.config;\r\n      if ($$.hasArcType()) {\r\n          return;\r\n      }\r\n      if (!config.data_selection_enabled) {\r\n          return;\r\n      } // do nothing if not selectable\r\n      $$.dragStart = mouse;\r\n      $$.main\r\n          .select('.' + CLASS.chart)\r\n          .append('rect')\r\n          .attr('class', CLASS.dragarea)\r\n          .style('opacity', 0.1);\r\n      $$.dragging = true;\r\n  };\r\n  ChartInternal.prototype.dragend = function () {\r\n      var $$ = this, config = $$.config;\r\n      if ($$.hasArcType()) {\r\n          return;\r\n      }\r\n      if (!config.data_selection_enabled) {\r\n          return;\r\n      } // do nothing if not selectable\r\n      $$.main\r\n          .select('.' + CLASS.dragarea)\r\n          .transition()\r\n          .duration(100)\r\n          .style('opacity', 0)\r\n          .remove();\r\n      $$.main.selectAll('.' + CLASS.shape).classed(CLASS.INCLUDED, false);\r\n      $$.dragging = false;\r\n  };\n\n  ChartInternal.prototype.getYFormat = function (forArc) {\r\n      var $$ = this, formatForY = forArc && !$$.hasType('gauge') ? $$.defaultArcValueFormat : $$.yFormat, formatForY2 = forArc && !$$.hasType('gauge') ? $$.defaultArcValueFormat : $$.y2Format;\r\n      return function (v, ratio, id) {\r\n          var format = $$.axis.getId(id) === 'y2' ? formatForY2 : formatForY;\r\n          return format.call($$, v, ratio);\r\n      };\r\n  };\r\n  ChartInternal.prototype.yFormat = function (v) {\r\n      var $$ = this, config = $$.config, format = config.axis_y_tick_format\r\n          ? config.axis_y_tick_format\r\n          : $$.defaultValueFormat;\r\n      return format(v);\r\n  };\r\n  ChartInternal.prototype.y2Format = function (v) {\r\n      var $$ = this, config = $$.config, format = config.axis_y2_tick_format\r\n          ? config.axis_y2_tick_format\r\n          : $$.defaultValueFormat;\r\n      return format(v);\r\n  };\r\n  ChartInternal.prototype.defaultValueFormat = function (v) {\r\n      return isValue(v) ? +v : '';\r\n  };\r\n  ChartInternal.prototype.defaultArcValueFormat = function (v, ratio) {\r\n      return (ratio * 100).toFixed(1) + '%';\r\n  };\r\n  ChartInternal.prototype.dataLabelFormat = function (targetId) {\r\n      var $$ = this, data_labels = $$.config.data_labels, format, defaultFormat = function (v) {\r\n          return isValue(v) ? +v : '';\r\n      };\r\n      // find format according to axis id\r\n      if (typeof data_labels.format === 'function') {\r\n          format = data_labels.format;\r\n      }\r\n      else if (typeof data_labels.format === 'object') {\r\n          if (data_labels.format[targetId]) {\r\n              format =\r\n                  data_labels.format[targetId] === true\r\n                      ? defaultFormat\r\n                      : data_labels.format[targetId];\r\n          }\r\n          else {\r\n              format = function () {\r\n                  return '';\r\n              };\r\n          }\r\n      }\r\n      else {\r\n          format = defaultFormat;\r\n      }\r\n      return format;\r\n  };\n\n  ChartInternal.prototype.initGrid = function () {\r\n      var $$ = this, config = $$.config, d3 = $$.d3;\r\n      $$.grid = $$.main\r\n          .append('g')\r\n          .attr('clip-path', $$.clipPathForGrid)\r\n          .attr('class', CLASS.grid);\r\n      if (config.grid_x_show) {\r\n          $$.grid.append('g').attr('class', CLASS.xgrids);\r\n      }\r\n      if (config.grid_y_show) {\r\n          $$.grid.append('g').attr('class', CLASS.ygrids);\r\n      }\r\n      if (config.grid_focus_show) {\r\n          $$.grid\r\n              .append('g')\r\n              .attr('class', CLASS.xgridFocus)\r\n              .append('line')\r\n              .attr('class', CLASS.xgridFocus);\r\n      }\r\n      $$.xgrid = d3.selectAll([]);\r\n      if (!config.grid_lines_front) {\r\n          $$.initGridLines();\r\n      }\r\n  };\r\n  ChartInternal.prototype.initGridLines = function () {\r\n      var $$ = this, d3 = $$.d3;\r\n      $$.gridLines = $$.main\r\n          .append('g')\r\n          .attr('clip-path', $$.clipPathForGrid)\r\n          .attr('class', CLASS.grid + ' ' + CLASS.gridLines);\r\n      $$.gridLines.append('g').attr('class', CLASS.xgridLines);\r\n      $$.gridLines.append('g').attr('class', CLASS.ygridLines);\r\n      $$.xgridLines = d3.selectAll([]);\r\n  };\r\n  ChartInternal.prototype.updateXGrid = function (withoutUpdate) {\r\n      var $$ = this, config = $$.config, d3 = $$.d3, xgridData = $$.generateGridData(config.grid_x_type, $$.x), tickOffset = $$.isCategorized() ? $$.xAxis.tickOffset() : 0;\r\n      $$.xgridAttr = config.axis_rotated\r\n          ? {\r\n              x1: 0,\r\n              x2: $$.width,\r\n              y1: function (d) {\r\n                  return $$.x(d) - tickOffset;\r\n              },\r\n              y2: function (d) {\r\n                  return $$.x(d) - tickOffset;\r\n              }\r\n          }\r\n          : {\r\n              x1: function (d) {\r\n                  return $$.x(d) + tickOffset;\r\n              },\r\n              x2: function (d) {\r\n                  return $$.x(d) + tickOffset;\r\n              },\r\n              y1: 0,\r\n              y2: $$.height\r\n          };\r\n      $$.xgridAttr.opacity = function () {\r\n          var pos = +d3.select(this).attr(config.axis_rotated ? 'y1' : 'x1');\r\n          return pos === (config.axis_rotated ? $$.height : 0) ? 0 : 1;\r\n      };\r\n      var xgrid = $$.main\r\n          .select('.' + CLASS.xgrids)\r\n          .selectAll('.' + CLASS.xgrid)\r\n          .data(xgridData);\r\n      var xgridEnter = xgrid\r\n          .enter()\r\n          .append('line')\r\n          .attr('class', CLASS.xgrid)\r\n          .attr('x1', $$.xgridAttr.x1)\r\n          .attr('x2', $$.xgridAttr.x2)\r\n          .attr('y1', $$.xgridAttr.y1)\r\n          .attr('y2', $$.xgridAttr.y2)\r\n          .style('opacity', 0);\r\n      $$.xgrid = xgridEnter.merge(xgrid);\r\n      if (!withoutUpdate) {\r\n          $$.xgrid\r\n              .attr('x1', $$.xgridAttr.x1)\r\n              .attr('x2', $$.xgridAttr.x2)\r\n              .attr('y1', $$.xgridAttr.y1)\r\n              .attr('y2', $$.xgridAttr.y2)\r\n              .style('opacity', $$.xgridAttr.opacity);\r\n      }\r\n      xgrid.exit().remove();\r\n  };\r\n  ChartInternal.prototype.updateYGrid = function () {\r\n      var $$ = this, config = $$.config, gridValues = $$.yAxis.tickValues() || $$.y.ticks(config.grid_y_ticks);\r\n      var ygrid = $$.main\r\n          .select('.' + CLASS.ygrids)\r\n          .selectAll('.' + CLASS.ygrid)\r\n          .data(gridValues);\r\n      var ygridEnter = ygrid\r\n          .enter()\r\n          .append('line')\r\n          // TODO: x1, x2, y1, y2, opacity need to be set here maybe\r\n          .attr('class', CLASS.ygrid);\r\n      $$.ygrid = ygridEnter.merge(ygrid);\r\n      $$.ygrid\r\n          .attr('x1', config.axis_rotated ? $$.y : 0)\r\n          .attr('x2', config.axis_rotated ? $$.y : $$.width)\r\n          .attr('y1', config.axis_rotated ? 0 : $$.y)\r\n          .attr('y2', config.axis_rotated ? $$.height : $$.y);\r\n      ygrid.exit().remove();\r\n      $$.smoothLines($$.ygrid, 'grid');\r\n  };\r\n  ChartInternal.prototype.gridTextAnchor = function (d) {\r\n      return d.position ? d.position : 'end';\r\n  };\r\n  ChartInternal.prototype.gridTextDx = function (d) {\r\n      return d.position === 'start' ? 4 : d.position === 'middle' ? 0 : -4;\r\n  };\r\n  ChartInternal.prototype.xGridTextX = function (d) {\r\n      return d.position === 'start'\r\n          ? -this.height\r\n          : d.position === 'middle'\r\n              ? -this.height / 2\r\n              : 0;\r\n  };\r\n  ChartInternal.prototype.yGridTextX = function (d) {\r\n      return d.position === 'start'\r\n          ? 0\r\n          : d.position === 'middle'\r\n              ? this.width / 2\r\n              : this.width;\r\n  };\r\n  ChartInternal.prototype.updateGrid = function (duration) {\r\n      var $$ = this, main = $$.main, config = $$.config, xgridLine, xgridLineEnter, ygridLine, ygridLineEnter, xv = $$.xv.bind($$), yv = $$.yv.bind($$), xGridTextX = $$.xGridTextX.bind($$), yGridTextX = $$.yGridTextX.bind($$);\r\n      // hide if arc type\r\n      $$.grid.style('visibility', $$.hasArcType() ? 'hidden' : 'visible');\r\n      main.select('line.' + CLASS.xgridFocus).style('visibility', 'hidden');\r\n      if (config.grid_x_show) {\r\n          $$.updateXGrid();\r\n      }\r\n      xgridLine = main\r\n          .select('.' + CLASS.xgridLines)\r\n          .selectAll('.' + CLASS.xgridLine)\r\n          .data(config.grid_x_lines);\r\n      // enter\r\n      xgridLineEnter = xgridLine\r\n          .enter()\r\n          .append('g')\r\n          .attr('class', function (d) {\r\n          return CLASS.xgridLine + (d['class'] ? ' ' + d['class'] : '');\r\n      });\r\n      xgridLineEnter\r\n          .append('line')\r\n          .attr('x1', config.axis_rotated ? 0 : xv)\r\n          .attr('x2', config.axis_rotated ? $$.width : xv)\r\n          .attr('y1', config.axis_rotated ? xv : 0)\r\n          .attr('y2', config.axis_rotated ? xv : $$.height)\r\n          .style('opacity', 0);\r\n      xgridLineEnter\r\n          .append('text')\r\n          .attr('text-anchor', $$.gridTextAnchor)\r\n          .attr('transform', config.axis_rotated ? '' : 'rotate(-90)')\r\n          .attr('x', config.axis_rotated ? yGridTextX : xGridTextX)\r\n          .attr('y', xv)\r\n          .attr('dx', $$.gridTextDx)\r\n          .attr('dy', -5)\r\n          .style('opacity', 0);\r\n      // udpate\r\n      $$.xgridLines = xgridLineEnter.merge(xgridLine);\r\n      // done in d3.transition() of the end of this function\r\n      // exit\r\n      xgridLine\r\n          .exit()\r\n          .transition()\r\n          .duration(duration)\r\n          .style('opacity', 0)\r\n          .remove();\r\n      // Y-Grid\r\n      if (config.grid_y_show) {\r\n          $$.updateYGrid();\r\n      }\r\n      ygridLine = main\r\n          .select('.' + CLASS.ygridLines)\r\n          .selectAll('.' + CLASS.ygridLine)\r\n          .data(config.grid_y_lines);\r\n      // enter\r\n      ygridLineEnter = ygridLine\r\n          .enter()\r\n          .append('g')\r\n          .attr('class', function (d) {\r\n          return CLASS.ygridLine + (d['class'] ? ' ' + d['class'] : '');\r\n      });\r\n      ygridLineEnter\r\n          .append('line')\r\n          .attr('x1', config.axis_rotated ? yv : 0)\r\n          .attr('x2', config.axis_rotated ? yv : $$.width)\r\n          .attr('y1', config.axis_rotated ? 0 : yv)\r\n          .attr('y2', config.axis_rotated ? $$.height : yv)\r\n          .style('opacity', 0);\r\n      ygridLineEnter\r\n          .append('text')\r\n          .attr('text-anchor', $$.gridTextAnchor)\r\n          .attr('transform', config.axis_rotated ? 'rotate(-90)' : '')\r\n          .attr('x', config.axis_rotated ? xGridTextX : yGridTextX)\r\n          .attr('y', yv)\r\n          .attr('dx', $$.gridTextDx)\r\n          .attr('dy', -5)\r\n          .style('opacity', 0);\r\n      // update\r\n      $$.ygridLines = ygridLineEnter.merge(ygridLine);\r\n      $$.ygridLines\r\n          .select('line')\r\n          .transition()\r\n          .duration(duration)\r\n          .attr('x1', config.axis_rotated ? yv : 0)\r\n          .attr('x2', config.axis_rotated ? yv : $$.width)\r\n          .attr('y1', config.axis_rotated ? 0 : yv)\r\n          .attr('y2', config.axis_rotated ? $$.height : yv)\r\n          .style('opacity', 1);\r\n      $$.ygridLines\r\n          .select('text')\r\n          .transition()\r\n          .duration(duration)\r\n          .attr('x', config.axis_rotated ? $$.xGridTextX.bind($$) : $$.yGridTextX.bind($$))\r\n          .attr('y', yv)\r\n          .text(function (d) {\r\n          return d.text;\r\n      })\r\n          .style('opacity', 1);\r\n      // exit\r\n      ygridLine\r\n          .exit()\r\n          .transition()\r\n          .duration(duration)\r\n          .style('opacity', 0)\r\n          .remove();\r\n  };\r\n  ChartInternal.prototype.redrawGrid = function (withTransition, transition) {\r\n      var $$ = this, config = $$.config, xv = $$.xv.bind($$), lines = $$.xgridLines.select('line'), texts = $$.xgridLines.select('text');\r\n      return [\r\n          (withTransition ? lines.transition(transition) : lines)\r\n              .attr('x1', config.axis_rotated ? 0 : xv)\r\n              .attr('x2', config.axis_rotated ? $$.width : xv)\r\n              .attr('y1', config.axis_rotated ? xv : 0)\r\n              .attr('y2', config.axis_rotated ? xv : $$.height)\r\n              .style('opacity', 1),\r\n          (withTransition ? texts.transition(transition) : texts)\r\n              .attr('x', config.axis_rotated ? $$.yGridTextX.bind($$) : $$.xGridTextX.bind($$))\r\n              .attr('y', xv)\r\n              .text(function (d) {\r\n              return d.text;\r\n          })\r\n              .style('opacity', 1)\r\n      ];\r\n  };\r\n  ChartInternal.prototype.showXGridFocus = function (selectedData) {\r\n      var $$ = this, config = $$.config, dataToShow = selectedData.filter(function (d) {\r\n          return d && isValue(d.value);\r\n      }), focusEl = $$.main.selectAll('line.' + CLASS.xgridFocus), xx = $$.xx.bind($$);\r\n      if (!config.tooltip_show) {\r\n          return;\r\n      }\r\n      // Hide when stanford plot exists\r\n      if ($$.hasType('stanford') || $$.hasArcType()) {\r\n          return;\r\n      }\r\n      focusEl\r\n          .style('visibility', 'visible')\r\n          .data([dataToShow[0]])\r\n          .attr(config.axis_rotated ? 'y1' : 'x1', xx)\r\n          .attr(config.axis_rotated ? 'y2' : 'x2', xx);\r\n      $$.smoothLines(focusEl, 'grid');\r\n  };\r\n  ChartInternal.prototype.hideXGridFocus = function () {\r\n      this.main.select('line.' + CLASS.xgridFocus).style('visibility', 'hidden');\r\n  };\r\n  ChartInternal.prototype.updateXgridFocus = function () {\r\n      var $$ = this, config = $$.config;\r\n      $$.main\r\n          .select('line.' + CLASS.xgridFocus)\r\n          .attr('x1', config.axis_rotated ? 0 : -10)\r\n          .attr('x2', config.axis_rotated ? $$.width : -10)\r\n          .attr('y1', config.axis_rotated ? -10 : 0)\r\n          .attr('y2', config.axis_rotated ? -10 : $$.height);\r\n  };\r\n  ChartInternal.prototype.generateGridData = function (type, scale) {\r\n      var $$ = this, gridData = [], xDomain, firstYear, lastYear, i, tickNum = $$.main\r\n          .select('.' + CLASS.axisX)\r\n          .selectAll('.tick')\r\n          .size();\r\n      if (type === 'year') {\r\n          xDomain = $$.getXDomain();\r\n          firstYear = xDomain[0].getFullYear();\r\n          lastYear = xDomain[1].getFullYear();\r\n          for (i = firstYear; i <= lastYear; i++) {\r\n              gridData.push(new Date(i + '-01-01 00:00:00'));\r\n          }\r\n      }\r\n      else {\r\n          gridData = scale.ticks(10);\r\n          if (gridData.length > tickNum) {\r\n              // use only int\r\n              gridData = gridData.filter(function (d) {\r\n                  return ('' + d).indexOf('.') < 0;\r\n              });\r\n          }\r\n      }\r\n      return gridData;\r\n  };\r\n  ChartInternal.prototype.getGridFilterToRemove = function (params) {\r\n      return params\r\n          ? function (line) {\r\n              var found = false;\r\n              [].concat(params).forEach(function (param) {\r\n                  if (('value' in param && line.value === param.value) ||\r\n                      ('class' in param && line['class'] === param['class'])) {\r\n                      found = true;\r\n                  }\r\n              });\r\n              return found;\r\n          }\r\n          : function () {\r\n              return true;\r\n          };\r\n  };\r\n  ChartInternal.prototype.removeGridLines = function (params, forX) {\r\n      var $$ = this, config = $$.config, toRemove = $$.getGridFilterToRemove(params), toShow = function (line) {\r\n          return !toRemove(line);\r\n      }, classLines = forX ? CLASS.xgridLines : CLASS.ygridLines, classLine = forX ? CLASS.xgridLine : CLASS.ygridLine;\r\n      $$.main\r\n          .select('.' + classLines)\r\n          .selectAll('.' + classLine)\r\n          .filter(toRemove)\r\n          .transition()\r\n          .duration(config.transition_duration)\r\n          .style('opacity', 0)\r\n          .remove();\r\n      if (forX) {\r\n          config.grid_x_lines = config.grid_x_lines.filter(toShow);\r\n      }\r\n      else {\r\n          config.grid_y_lines = config.grid_y_lines.filter(toShow);\r\n      }\r\n  };\n\n  ChartInternal.prototype.initEventRect = function () {\r\n      var $$ = this, config = $$.config;\r\n      $$.main\r\n          .select('.' + CLASS.chart)\r\n          .append('g')\r\n          .attr('class', CLASS.eventRects)\r\n          .style('fill-opacity', 0);\r\n      $$.eventRect = $$.main\r\n          .select('.' + CLASS.eventRects)\r\n          .append('rect')\r\n          .attr('class', CLASS.eventRect);\r\n      // event rect handle zoom event as well\r\n      if (config.zoom_enabled && $$.zoom) {\r\n          $$.eventRect.call($$.zoom).on('dblclick.zoom', null);\r\n          if (config.zoom_initialRange) {\r\n              // WORKAROUND: Add transition to apply transform immediately when no subchart\r\n              $$.eventRect\r\n                  .transition()\r\n                  .duration(0)\r\n                  .call($$.zoom.transform, $$.zoomTransform(config.zoom_initialRange));\r\n          }\r\n      }\r\n  };\r\n  ChartInternal.prototype.redrawEventRect = function () {\r\n      var $$ = this, d3 = $$.d3, config = $$.config;\r\n      function mouseout() {\r\n          $$.svg.select('.' + CLASS.eventRect).style('cursor', null);\r\n          $$.hideXGridFocus();\r\n          $$.hideTooltip();\r\n          $$.unexpandCircles();\r\n          $$.unexpandBars();\r\n      }\r\n      var isHoveringDataPoint = function (mouse, closest) {\r\n          return closest &&\r\n              ($$.isBarType(closest.id) ||\r\n                  $$.dist(closest, mouse) < config.point_sensitivity);\r\n      };\r\n      var withName = function (d) { return (d ? $$.addName(Object.assign({}, d)) : null); };\r\n      // rects for mouseover\r\n      $$.main\r\n          .select('.' + CLASS.eventRects)\r\n          .style('cursor', config.zoom_enabled\r\n          ? config.axis_rotated\r\n              ? 'ns-resize'\r\n              : 'ew-resize'\r\n          : null);\r\n      $$.eventRect\r\n          .attr('x', 0)\r\n          .attr('y', 0)\r\n          .attr('width', $$.width)\r\n          .attr('height', $$.height)\r\n          .on('mouseout', config.interaction_enabled\r\n          ? function () {\r\n              if (!config) {\r\n                  return;\r\n              } // chart is destroyed\r\n              if ($$.hasArcType()) {\r\n                  return;\r\n              }\r\n              if ($$.mouseover) {\r\n                  config.data_onmouseout.call($$.api, $$.mouseover);\r\n                  $$.mouseover = undefined;\r\n              }\r\n              mouseout();\r\n          }\r\n          : null)\r\n          .on('mousemove', config.interaction_enabled\r\n          ? function () {\r\n              // do nothing when dragging\r\n              if ($$.dragging) {\r\n                  return;\r\n              }\r\n              var targetsToShow = $$.getTargetsToShow();\r\n              // do nothing if arc type\r\n              if ($$.hasArcType(targetsToShow)) {\r\n                  return;\r\n              }\r\n              var mouse = d3.mouse(this);\r\n              var closest = withName($$.findClosestFromTargets(targetsToShow, mouse));\r\n              var isMouseCloseToDataPoint = isHoveringDataPoint(mouse, closest);\r\n              // ensure onmouseout is always called if mousemove switch between 2 targets\r\n              if ($$.mouseover &&\r\n                  (!closest ||\r\n                      closest.id !== $$.mouseover.id ||\r\n                      closest.index !== $$.mouseover.index)) {\r\n                  config.data_onmouseout.call($$.api, $$.mouseover);\r\n                  $$.mouseover = undefined;\r\n              }\r\n              if (closest && !$$.mouseover) {\r\n                  config.data_onmouseover.call($$.api, closest);\r\n                  $$.mouseover = closest;\r\n              }\r\n              // show cursor as pointer if we're hovering a data point close enough\r\n              $$.svg\r\n                  .select('.' + CLASS.eventRect)\r\n                  .style('cursor', isMouseCloseToDataPoint ? 'pointer' : null);\r\n              // if tooltip not grouped, we want to display only data from closest data point\r\n              var showSingleDataPoint = !config.tooltip_grouped || $$.hasType('stanford', targetsToShow);\r\n              // find data to highlight\r\n              var selectedData;\r\n              if (showSingleDataPoint) {\r\n                  if (closest) {\r\n                      selectedData = [closest];\r\n                  }\r\n              }\r\n              else {\r\n                  var closestByX = void 0;\r\n                  if (closest) {\r\n                      // reuse closest value\r\n                      closestByX = closest;\r\n                  }\r\n                  else {\r\n                      // try to find the closest value by X values from the mouse position\r\n                      var mouseX = config.axis_rotated ? mouse[1] : mouse[0];\r\n                      closestByX = $$.findClosestFromTargetsByX(targetsToShow, $$.x.invert(mouseX));\r\n                  }\r\n                  // highlight all data for this 'x' value\r\n                  if (closestByX) {\r\n                      selectedData = $$.filterByX(targetsToShow, closestByX.x);\r\n                  }\r\n              }\r\n              // ensure we have data to show\r\n              if (!selectedData || selectedData.length === 0) {\r\n                  return mouseout();\r\n              }\r\n              // inject names for each point\r\n              selectedData = selectedData.map(withName);\r\n              // show tooltip\r\n              $$.showTooltip(selectedData, this);\r\n              // expand points\r\n              if (config.point_focus_expand_enabled) {\r\n                  $$.unexpandCircles();\r\n                  selectedData.forEach(function (d) {\r\n                      $$.expandCircles(d.index, d.id, false);\r\n                  });\r\n              }\r\n              // expand bars\r\n              $$.unexpandBars();\r\n              selectedData.forEach(function (d) {\r\n                  $$.expandBars(d.index, d.id, false);\r\n              });\r\n              // Show xgrid focus line\r\n              $$.showXGridFocus(selectedData);\r\n          }\r\n          : null)\r\n          .on('click', config.interaction_enabled\r\n          ? function () {\r\n              var targetsToShow = $$.getTargetsToShow();\r\n              if ($$.hasArcType(targetsToShow)) {\r\n                  return;\r\n              }\r\n              var mouse = d3.mouse(this);\r\n              var closest = withName($$.findClosestFromTargets(targetsToShow, mouse));\r\n              if (!isHoveringDataPoint(mouse, closest)) {\r\n                  return;\r\n              }\r\n              // select if selection enabled\r\n              var sameXData;\r\n              if (!config.data_selection_grouped || $$.isStanfordType(closest)) {\r\n                  sameXData = [closest];\r\n              }\r\n              else {\r\n                  sameXData = $$.filterByX(targetsToShow, closest.x);\r\n              }\r\n              // toggle selected state\r\n              sameXData.forEach(function (d) {\r\n                  $$.main\r\n                      .selectAll('.' + CLASS.shapes + $$.getTargetSelectorSuffix(d.id))\r\n                      .selectAll('.' + CLASS.shape + '-' + d.index)\r\n                      .each(function () {\r\n                      if (config.data_selection_grouped ||\r\n                          $$.isWithinShape(this, d)) {\r\n                          $$.toggleShape(this, d, d.index);\r\n                      }\r\n                  });\r\n              });\r\n              // call data_onclick on the closest data point\r\n              if (closest) {\r\n                  var shape = $$.main\r\n                      .selectAll('.' + CLASS.shapes + $$.getTargetSelectorSuffix(closest.id))\r\n                      .select('.' + CLASS.shape + '-' + closest.index);\r\n                  config.data_onclick.call($$.api, closest, shape.node());\r\n              }\r\n          }\r\n          : null)\r\n          .call(config.interaction_enabled && config.data_selection_draggable && $$.drag\r\n          ? d3\r\n              .drag()\r\n              .on('drag', function () {\r\n              $$.drag(d3.mouse(this));\r\n          })\r\n              .on('start', function () {\r\n              $$.dragstart(d3.mouse(this));\r\n          })\r\n              .on('end', function () {\r\n              $$.dragend();\r\n          })\r\n          : function () { });\r\n  };\r\n  ChartInternal.prototype.getMousePosition = function (data) {\r\n      var $$ = this;\r\n      return [$$.x(data.x), $$.getYScale(data.id)(data.value)];\r\n  };\r\n  ChartInternal.prototype.dispatchEvent = function (type, mouse) {\r\n      var $$ = this, selector = '.' + CLASS.eventRect, eventRect = $$.main.select(selector).node(), box = eventRect.getBoundingClientRect(), x = box.left + (mouse ? mouse[0] : 0), y = box.top + (mouse ? mouse[1] : 0), event = document.createEvent('MouseEvents');\r\n      event.initMouseEvent(type, true, true, window, 0, x, y, x, y, false, false, false, false, 0, null);\r\n      eventRect.dispatchEvent(event);\r\n  };\n\n  ChartInternal.prototype.initLegend = function () {\r\n      var $$ = this;\r\n      $$.legendItemTextBox = {};\r\n      $$.legendHasRendered = false;\r\n      $$.legend = $$.svg.append('g').attr('transform', $$.getTranslate('legend'));\r\n      if (!$$.config.legend_show) {\r\n          $$.legend.style('visibility', 'hidden');\r\n          $$.hiddenLegendIds = $$.mapToIds($$.data.targets);\r\n          return;\r\n      }\r\n      // MEMO: call here to update legend box and tranlate for all\r\n      // MEMO: translate will be updated by this, so transform not needed in updateLegend()\r\n      $$.updateLegendWithDefaults();\r\n  };\r\n  ChartInternal.prototype.updateLegendWithDefaults = function () {\r\n      var $$ = this;\r\n      $$.updateLegend($$.mapToIds($$.data.targets), {\r\n          withTransform: false,\r\n          withTransitionForTransform: false,\r\n          withTransition: false\r\n      });\r\n  };\r\n  ChartInternal.prototype.updateSizeForLegend = function (legendHeight, legendWidth) {\r\n      var $$ = this, config = $$.config, insetLegendPosition = {\r\n          top: $$.isLegendTop\r\n              ? $$.getCurrentPaddingTop() + config.legend_inset_y + 5.5\r\n              : $$.currentHeight -\r\n                  legendHeight -\r\n                  $$.getCurrentPaddingBottom() -\r\n                  config.legend_inset_y,\r\n          left: $$.isLegendLeft\r\n              ? $$.getCurrentPaddingLeft() + config.legend_inset_x + 0.5\r\n              : $$.currentWidth -\r\n                  legendWidth -\r\n                  $$.getCurrentPaddingRight() -\r\n                  config.legend_inset_x +\r\n                  0.5\r\n      };\r\n      $$.margin3 = {\r\n          top: $$.isLegendRight\r\n              ? 0\r\n              : $$.isLegendInset\r\n                  ? insetLegendPosition.top\r\n                  : $$.currentHeight - legendHeight,\r\n          right: NaN,\r\n          bottom: 0,\r\n          left: $$.isLegendRight\r\n              ? $$.currentWidth - legendWidth\r\n              : $$.isLegendInset\r\n                  ? insetLegendPosition.left\r\n                  : 0\r\n      };\r\n  };\r\n  ChartInternal.prototype.transformLegend = function (withTransition) {\r\n      var $$ = this;\r\n      (withTransition ? $$.legend.transition() : $$.legend).attr('transform', $$.getTranslate('legend'));\r\n  };\r\n  ChartInternal.prototype.updateLegendStep = function (step) {\r\n      this.legendStep = step;\r\n  };\r\n  ChartInternal.prototype.updateLegendItemWidth = function (w) {\r\n      this.legendItemWidth = w;\r\n  };\r\n  ChartInternal.prototype.updateLegendItemHeight = function (h) {\r\n      this.legendItemHeight = h;\r\n  };\r\n  ChartInternal.prototype.getLegendWidth = function () {\r\n      var $$ = this;\r\n      return $$.config.legend_show\r\n          ? $$.isLegendRight || $$.isLegendInset\r\n              ? $$.legendItemWidth * ($$.legendStep + 1)\r\n              : $$.currentWidth\r\n          : 0;\r\n  };\r\n  ChartInternal.prototype.getLegendHeight = function () {\r\n      var $$ = this, h = 0;\r\n      if ($$.config.legend_show) {\r\n          if ($$.isLegendRight) {\r\n              h = $$.currentHeight;\r\n          }\r\n          else {\r\n              h = Math.max(20, $$.legendItemHeight) * ($$.legendStep + 1);\r\n          }\r\n      }\r\n      return h;\r\n  };\r\n  ChartInternal.prototype.opacityForLegend = function (legendItem) {\r\n      return legendItem.classed(CLASS.legendItemHidden) ? null : 1;\r\n  };\r\n  ChartInternal.prototype.opacityForUnfocusedLegend = function (legendItem) {\r\n      return legendItem.classed(CLASS.legendItemHidden) ? null : 0.3;\r\n  };\r\n  ChartInternal.prototype.toggleFocusLegend = function (targetIds, focus) {\r\n      var $$ = this;\r\n      targetIds = $$.mapToTargetIds(targetIds);\r\n      $$.legend\r\n          .selectAll('.' + CLASS.legendItem)\r\n          .filter(function (id) {\r\n          return targetIds.indexOf(id) >= 0;\r\n      })\r\n          .classed(CLASS.legendItemFocused, focus)\r\n          .transition()\r\n          .duration(100)\r\n          .style('opacity', function () {\r\n          var opacity = focus ? $$.opacityForLegend : $$.opacityForUnfocusedLegend;\r\n          return opacity.call($$, $$.d3.select(this));\r\n      });\r\n  };\r\n  ChartInternal.prototype.revertLegend = function () {\r\n      var $$ = this, d3 = $$.d3;\r\n      $$.legend\r\n          .selectAll('.' + CLASS.legendItem)\r\n          .classed(CLASS.legendItemFocused, false)\r\n          .transition()\r\n          .duration(100)\r\n          .style('opacity', function () {\r\n          return $$.opacityForLegend(d3.select(this));\r\n      });\r\n  };\r\n  ChartInternal.prototype.showLegend = function (targetIds) {\r\n      var $$ = this, config = $$.config;\r\n      if (!config.legend_show) {\r\n          config.legend_show = true;\r\n          $$.legend.style('visibility', 'visible');\r\n          if (!$$.legendHasRendered) {\r\n              $$.updateLegendWithDefaults();\r\n          }\r\n      }\r\n      $$.removeHiddenLegendIds(targetIds);\r\n      $$.legend\r\n          .selectAll($$.selectorLegends(targetIds))\r\n          .style('visibility', 'visible')\r\n          .transition()\r\n          .style('opacity', function () {\r\n          return $$.opacityForLegend($$.d3.select(this));\r\n      });\r\n  };\r\n  ChartInternal.prototype.hideLegend = function (targetIds) {\r\n      var $$ = this, config = $$.config;\r\n      if (config.legend_show && isEmpty(targetIds)) {\r\n          config.legend_show = false;\r\n          $$.legend.style('visibility', 'hidden');\r\n      }\r\n      $$.addHiddenLegendIds(targetIds);\r\n      $$.legend\r\n          .selectAll($$.selectorLegends(targetIds))\r\n          .style('opacity', 0)\r\n          .style('visibility', 'hidden');\r\n  };\r\n  ChartInternal.prototype.clearLegendItemTextBoxCache = function () {\r\n      this.legendItemTextBox = {};\r\n  };\r\n  ChartInternal.prototype.updateLegend = function (targetIds, options, transitions) {\r\n      var $$ = this, config = $$.config;\r\n      var xForLegend, xForLegendText, xForLegendRect, yForLegend, yForLegendText, yForLegendRect, x1ForLegendTile, x2ForLegendTile, yForLegendTile;\r\n      var paddingTop = 4, paddingRight = 10, maxWidth = 0, maxHeight = 0, posMin = 10, tileWidth = config.legend_item_tile_width + 5;\r\n      var l, totalLength = 0, offsets = {}, widths = {}, heights = {}, margins = [0], steps = {}, step = 0;\r\n      var withTransition, withTransitionForTransform;\r\n      var texts, rects, tiles, background;\r\n      // Skip elements when their name is set to null\r\n      targetIds = targetIds.filter(function (id) {\r\n          return !isDefined(config.data_names[id]) || config.data_names[id] !== null;\r\n      });\r\n      options = options || {};\r\n      withTransition = getOption(options, 'withTransition', true);\r\n      withTransitionForTransform = getOption(options, 'withTransitionForTransform', true);\r\n      function getTextBox(textElement, id) {\r\n          if (!$$.legendItemTextBox[id]) {\r\n              $$.legendItemTextBox[id] = $$.getTextRect(textElement.textContent, CLASS.legendItem, textElement);\r\n          }\r\n          return $$.legendItemTextBox[id];\r\n      }\r\n      function updatePositions(textElement, id, index) {\r\n          var reset = index === 0, isLast = index === targetIds.length - 1, box = getTextBox(textElement, id), itemWidth = box.width +\r\n              tileWidth +\r\n              (isLast && !($$.isLegendRight || $$.isLegendInset) ? 0 : paddingRight) +\r\n              config.legend_padding, itemHeight = box.height + paddingTop, itemLength = $$.isLegendRight || $$.isLegendInset ? itemHeight : itemWidth, areaLength = $$.isLegendRight || $$.isLegendInset\r\n              ? $$.getLegendHeight()\r\n              : $$.getLegendWidth(), margin, maxLength;\r\n          // MEMO: care about condifion of step, totalLength\r\n          function updateValues(id, withoutStep) {\r\n              if (!withoutStep) {\r\n                  margin = (areaLength - totalLength - itemLength) / 2;\r\n                  if (margin < posMin) {\r\n                      margin = (areaLength - itemLength) / 2;\r\n                      totalLength = 0;\r\n                      step++;\r\n                  }\r\n              }\r\n              steps[id] = step;\r\n              margins[step] = $$.isLegendInset ? 10 : margin;\r\n              offsets[id] = totalLength;\r\n              totalLength += itemLength;\r\n          }\r\n          if (reset) {\r\n              totalLength = 0;\r\n              step = 0;\r\n              maxWidth = 0;\r\n              maxHeight = 0;\r\n          }\r\n          if (config.legend_show && !$$.isLegendToShow(id)) {\r\n              widths[id] = heights[id] = steps[id] = offsets[id] = 0;\r\n              return;\r\n          }\r\n          widths[id] = itemWidth;\r\n          heights[id] = itemHeight;\r\n          if (!maxWidth || itemWidth >= maxWidth) {\r\n              maxWidth = itemWidth;\r\n          }\r\n          if (!maxHeight || itemHeight >= maxHeight) {\r\n              maxHeight = itemHeight;\r\n          }\r\n          maxLength = $$.isLegendRight || $$.isLegendInset ? maxHeight : maxWidth;\r\n          if (config.legend_equally) {\r\n              Object.keys(widths).forEach(function (id) {\r\n                  widths[id] = maxWidth;\r\n              });\r\n              Object.keys(heights).forEach(function (id) {\r\n                  heights[id] = maxHeight;\r\n              });\r\n              margin = (areaLength - maxLength * targetIds.length) / 2;\r\n              if (margin < posMin) {\r\n                  totalLength = 0;\r\n                  step = 0;\r\n                  targetIds.forEach(function (id) {\r\n                      updateValues(id);\r\n                  });\r\n              }\r\n              else {\r\n                  updateValues(id, true);\r\n              }\r\n          }\r\n          else {\r\n              updateValues(id);\r\n          }\r\n      }\r\n      if ($$.isLegendInset) {\r\n          step = config.legend_inset_step\r\n              ? config.legend_inset_step\r\n              : targetIds.length;\r\n          $$.updateLegendStep(step);\r\n      }\r\n      if ($$.isLegendRight) {\r\n          xForLegend = function (id) {\r\n              return maxWidth * steps[id];\r\n          };\r\n          yForLegend = function (id) {\r\n              return margins[steps[id]] + offsets[id];\r\n          };\r\n      }\r\n      else if ($$.isLegendInset) {\r\n          xForLegend = function (id) {\r\n              return maxWidth * steps[id] + 10;\r\n          };\r\n          yForLegend = function (id) {\r\n              return margins[steps[id]] + offsets[id];\r\n          };\r\n      }\r\n      else {\r\n          xForLegend = function (id) {\r\n              return margins[steps[id]] + offsets[id];\r\n          };\r\n          yForLegend = function (id) {\r\n              return maxHeight * steps[id];\r\n          };\r\n      }\r\n      xForLegendText = function (id, i) {\r\n          return xForLegend(id, i) + 4 + config.legend_item_tile_width;\r\n      };\r\n      yForLegendText = function (id, i) {\r\n          return yForLegend(id, i) + 9;\r\n      };\r\n      xForLegendRect = function (id, i) {\r\n          return xForLegend(id, i);\r\n      };\r\n      yForLegendRect = function (id, i) {\r\n          return yForLegend(id, i) - 5;\r\n      };\r\n      x1ForLegendTile = function (id, i) {\r\n          return xForLegend(id, i) - 2;\r\n      };\r\n      x2ForLegendTile = function (id, i) {\r\n          return xForLegend(id, i) - 2 + config.legend_item_tile_width;\r\n      };\r\n      yForLegendTile = function (id, i) {\r\n          return yForLegend(id, i) + 4;\r\n      };\r\n      // Define g for legend area\r\n      l = $$.legend\r\n          .selectAll('.' + CLASS.legendItem)\r\n          .data(targetIds)\r\n          .enter()\r\n          .append('g')\r\n          .attr('class', function (id) {\r\n          return $$.generateClass(CLASS.legendItem, id);\r\n      })\r\n          .style('visibility', function (id) {\r\n          return $$.isLegendToShow(id) ? 'visible' : 'hidden';\r\n      })\r\n          .style('cursor', function () {\r\n          return config.interaction_enabled ? 'pointer' : 'auto';\r\n      })\r\n          .on('click', config.interaction_enabled\r\n          ? function (id) {\r\n              if (config.legend_item_onclick) {\r\n                  config.legend_item_onclick.call($$, id);\r\n              }\r\n              else {\r\n                  if ($$.d3.event.altKey) {\r\n                      $$.api.hide();\r\n                      $$.api.show(id);\r\n                  }\r\n                  else {\r\n                      $$.api.toggle(id);\r\n                      $$.isTargetToShow(id) ? $$.api.focus(id) : $$.api.revert();\r\n                  }\r\n              }\r\n          }\r\n          : null)\r\n          .on('mouseover', config.interaction_enabled\r\n          ? function (id) {\r\n              if (config.legend_item_onmouseover) {\r\n                  config.legend_item_onmouseover.call($$, id);\r\n              }\r\n              else {\r\n                  $$.d3.select(this).classed(CLASS.legendItemFocused, true);\r\n                  if (!$$.transiting && $$.isTargetToShow(id)) {\r\n                      $$.api.focus(id);\r\n                  }\r\n              }\r\n          }\r\n          : null)\r\n          .on('mouseout', config.interaction_enabled\r\n          ? function (id) {\r\n              if (config.legend_item_onmouseout) {\r\n                  config.legend_item_onmouseout.call($$, id);\r\n              }\r\n              else {\r\n                  $$.d3.select(this).classed(CLASS.legendItemFocused, false);\r\n                  $$.api.revert();\r\n              }\r\n          }\r\n          : null);\r\n      l.append('text')\r\n          .text(function (id) {\r\n          return isDefined(config.data_names[id]) ? config.data_names[id] : id;\r\n      })\r\n          .each(function (id, i) {\r\n          updatePositions(this, id, i);\r\n      })\r\n          .style('pointer-events', 'none')\r\n          .attr('x', $$.isLegendRight || $$.isLegendInset ? xForLegendText : -200)\r\n          .attr('y', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendText);\r\n      l.append('rect')\r\n          .attr('class', CLASS.legendItemEvent)\r\n          .style('fill-opacity', 0)\r\n          .attr('x', $$.isLegendRight || $$.isLegendInset ? xForLegendRect : -200)\r\n          .attr('y', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendRect);\r\n      l.append('line')\r\n          .attr('class', CLASS.legendItemTile)\r\n          .style('stroke', $$.color)\r\n          .style('pointer-events', 'none')\r\n          .attr('x1', $$.isLegendRight || $$.isLegendInset ? x1ForLegendTile : -200)\r\n          .attr('y1', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendTile)\r\n          .attr('x2', $$.isLegendRight || $$.isLegendInset ? x2ForLegendTile : -200)\r\n          .attr('y2', $$.isLegendRight || $$.isLegendInset ? -200 : yForLegendTile)\r\n          .attr('stroke-width', config.legend_item_tile_height);\r\n      // Set background for inset legend\r\n      background = $$.legend.select('.' + CLASS.legendBackground + ' rect');\r\n      if ($$.isLegendInset && maxWidth > 0 && background.size() === 0) {\r\n          background = $$.legend\r\n              .insert('g', '.' + CLASS.legendItem)\r\n              .attr('class', CLASS.legendBackground)\r\n              .append('rect');\r\n      }\r\n      texts = $$.legend\r\n          .selectAll('text')\r\n          .data(targetIds)\r\n          .text(function (id) {\r\n          return isDefined(config.data_names[id]) ? config.data_names[id] : id;\r\n      }) // MEMO: needed for update\r\n          .each(function (id, i) {\r\n          updatePositions(this, id, i);\r\n      });\r\n      (withTransition ? texts.transition() : texts)\r\n          .attr('x', xForLegendText)\r\n          .attr('y', yForLegendText);\r\n      rects = $$.legend.selectAll('rect.' + CLASS.legendItemEvent).data(targetIds);\r\n      (withTransition ? rects.transition() : rects)\r\n          .attr('width', function (id) {\r\n          return widths[id];\r\n      })\r\n          .attr('height', function (id) {\r\n          return heights[id];\r\n      })\r\n          .attr('x', xForLegendRect)\r\n          .attr('y', yForLegendRect);\r\n      tiles = $$.legend.selectAll('line.' + CLASS.legendItemTile).data(targetIds);\r\n      (withTransition ? tiles.transition() : tiles)\r\n          .style('stroke', $$.levelColor\r\n          ? function (id) {\r\n              return $$.levelColor($$.cache[id].values.reduce(function (total, item) {\r\n                  return total + item.value;\r\n              }, 0));\r\n          }\r\n          : $$.color)\r\n          .attr('x1', x1ForLegendTile)\r\n          .attr('y1', yForLegendTile)\r\n          .attr('x2', x2ForLegendTile)\r\n          .attr('y2', yForLegendTile);\r\n      if (background) {\r\n          (withTransition ? background.transition() : background)\r\n              .attr('height', $$.getLegendHeight() - 12)\r\n              .attr('width', maxWidth * (step + 1) + 10);\r\n      }\r\n      // toggle legend state\r\n      $$.legend\r\n          .selectAll('.' + CLASS.legendItem)\r\n          .classed(CLASS.legendItemHidden, function (id) {\r\n          return !$$.isTargetToShow(id);\r\n      });\r\n      // Update all to reflect change of legend\r\n      $$.updateLegendItemWidth(maxWidth);\r\n      $$.updateLegendItemHeight(maxHeight);\r\n      $$.updateLegendStep(step);\r\n      // Update size and scale\r\n      $$.updateSizes();\r\n      $$.updateScales();\r\n      $$.updateSvgSize();\r\n      // Update g positions\r\n      $$.transformAll(withTransitionForTransform, transitions);\r\n      $$.legendHasRendered = true;\r\n  };\n\n  ChartInternal.prototype.initRegion = function () {\r\n      var $$ = this;\r\n      $$.region = $$.main\r\n          .append('g')\r\n          .attr('clip-path', $$.clipPath)\r\n          .attr('class', CLASS.regions);\r\n  };\r\n  ChartInternal.prototype.updateRegion = function (duration) {\r\n      var $$ = this, config = $$.config;\r\n      // hide if arc type\r\n      $$.region.style('visibility', $$.hasArcType() ? 'hidden' : 'visible');\r\n      var mainRegion = $$.main\r\n          .select('.' + CLASS.regions)\r\n          .selectAll('.' + CLASS.region)\r\n          .data(config.regions);\r\n      var g = mainRegion.enter().append('g');\r\n      g.append('rect')\r\n          .attr('x', $$.regionX.bind($$))\r\n          .attr('y', $$.regionY.bind($$))\r\n          .attr('width', $$.regionWidth.bind($$))\r\n          .attr('height', $$.regionHeight.bind($$))\r\n          .style('fill-opacity', function (d) {\r\n          return isValue(d.opacity) ? d.opacity : 0.1;\r\n      });\r\n      g.append('text').text($$.labelRegion.bind($$));\r\n      $$.mainRegion = g.merge(mainRegion).attr('class', $$.classRegion.bind($$));\r\n      mainRegion\r\n          .exit()\r\n          .transition()\r\n          .duration(duration)\r\n          .style('opacity', 0)\r\n          .remove();\r\n  };\r\n  ChartInternal.prototype.redrawRegion = function (withTransition, transition) {\r\n      var $$ = this, regions = $$.mainRegion, regionLabels = $$.mainRegion.selectAll('text');\r\n      return [\r\n          (withTransition ? regions.transition(transition) : regions)\r\n              .attr('x', $$.regionX.bind($$))\r\n              .attr('y', $$.regionY.bind($$))\r\n              .attr('width', $$.regionWidth.bind($$))\r\n              .attr('height', $$.regionHeight.bind($$))\r\n              .style('fill-opacity', function (d) {\r\n              return isValue(d.opacity) ? d.opacity : 0.1;\r\n          }),\r\n          (withTransition ? regionLabels.transition(transition) : regionLabels)\r\n              .attr('x', $$.labelOffsetX.bind($$))\r\n              .attr('y', $$.labelOffsetY.bind($$))\r\n              .attr('transform', $$.labelTransform.bind($$))\r\n              .attr('style', 'text-anchor: left;')\r\n      ];\r\n  };\r\n  ChartInternal.prototype.regionX = function (d) {\r\n      var $$ = this, config = $$.config, xPos, yScale = d.axis === 'y' ? $$.y : $$.y2;\r\n      if (d.axis === 'y' || d.axis === 'y2') {\r\n          xPos = config.axis_rotated ? ('start' in d ? yScale(d.start) : 0) : 0;\r\n      }\r\n      else {\r\n          xPos = config.axis_rotated\r\n              ? 0\r\n              : 'start' in d\r\n                  ? $$.x($$.isTimeSeries() ? $$.parseDate(d.start) : d.start)\r\n                  : 0;\r\n      }\r\n      return xPos;\r\n  };\r\n  ChartInternal.prototype.regionY = function (d) {\r\n      var $$ = this, config = $$.config, yPos, yScale = d.axis === 'y' ? $$.y : $$.y2;\r\n      if (d.axis === 'y' || d.axis === 'y2') {\r\n          yPos = config.axis_rotated ? 0 : 'end' in d ? yScale(d.end) : 0;\r\n      }\r\n      else {\r\n          yPos = config.axis_rotated\r\n              ? 'start' in d\r\n                  ? $$.x($$.isTimeSeries() ? $$.parseDate(d.start) : d.start)\r\n                  : 0\r\n              : 0;\r\n      }\r\n      return yPos;\r\n  };\r\n  ChartInternal.prototype.regionWidth = function (d) {\r\n      var $$ = this, config = $$.config, start = $$.regionX(d), end, yScale = d.axis === 'y' ? $$.y : $$.y2;\r\n      if (d.axis === 'y' || d.axis === 'y2') {\r\n          end = config.axis_rotated\r\n              ? 'end' in d\r\n                  ? yScale(d.end)\r\n                  : $$.width\r\n              : $$.width;\r\n      }\r\n      else {\r\n          end = config.axis_rotated\r\n              ? $$.width\r\n              : 'end' in d\r\n                  ? $$.x($$.isTimeSeries() ? $$.parseDate(d.end) : d.end)\r\n                  : $$.width;\r\n      }\r\n      return end < start ? 0 : end - start;\r\n  };\r\n  ChartInternal.prototype.regionHeight = function (d) {\r\n      var $$ = this, config = $$.config, start = this.regionY(d), end, yScale = d.axis === 'y' ? $$.y : $$.y2;\r\n      if (d.axis === 'y' || d.axis === 'y2') {\r\n          end = config.axis_rotated\r\n              ? $$.height\r\n              : 'start' in d\r\n                  ? yScale(d.start)\r\n                  : $$.height;\r\n      }\r\n      else {\r\n          end = config.axis_rotated\r\n              ? 'end' in d\r\n                  ? $$.x($$.isTimeSeries() ? $$.parseDate(d.end) : d.end)\r\n                  : $$.height\r\n              : $$.height;\r\n      }\r\n      return end < start ? 0 : end - start;\r\n  };\r\n  ChartInternal.prototype.isRegionOnX = function (d) {\r\n      return !d.axis || d.axis === 'x';\r\n  };\r\n  ChartInternal.prototype.labelRegion = function (d) {\r\n      return 'label' in d ? d.label : '';\r\n  };\r\n  ChartInternal.prototype.labelTransform = function (d) {\r\n      return 'vertical' in d && d.vertical ? 'rotate(90)' : '';\r\n  };\r\n  ChartInternal.prototype.labelOffsetX = function (d) {\r\n      var paddingX = 'paddingX' in d ? d.paddingX : 3;\r\n      var paddingY = 'paddingY' in d ? d.paddingY : 3;\r\n      return 'vertical' in d && d.vertical\r\n          ? this.regionY(d) + paddingY\r\n          : this.regionX(d) + paddingX;\r\n  };\r\n  ChartInternal.prototype.labelOffsetY = function (d) {\r\n      var paddingX = 'paddingX' in d ? d.paddingX : 3;\r\n      var paddingY = 'paddingY' in d ? d.paddingY : 3;\r\n      return 'vertical' in d && d.vertical\r\n          ? -(this.regionX(d) + paddingX)\r\n          : this.regionY(d) + 10 + paddingY;\r\n  };\n\n  function c3LogScale(d3, linearScale, logScale) {\r\n      var PROJECTION = [0.01, 10];\r\n      if (!linearScale) {\r\n          linearScale = d3.scaleLinear();\r\n          linearScale.range(PROJECTION);\r\n      }\r\n      if (!logScale) {\r\n          logScale = d3.scaleLog();\r\n          logScale.domain(PROJECTION);\r\n          logScale.nice();\r\n      }\r\n      // copied from https://github.com/compute-io/logspace\r\n      function logspace(a, b, len) {\r\n          var arr, end, tmp, d;\r\n          if (arguments.length < 3) {\r\n              len = 10;\r\n          }\r\n          else {\r\n              if (len === 0) {\r\n                  return [];\r\n              }\r\n          }\r\n          // Calculate the increment:\r\n          end = len - 1;\r\n          d = (b - a) / end;\r\n          // Build the output array...\r\n          arr = new Array(len);\r\n          tmp = a;\r\n          arr[0] = Math.pow(10, tmp);\r\n          for (var i = 1; i < end; i++) {\r\n              tmp += d;\r\n              arr[i] = Math.pow(10, tmp);\r\n          }\r\n          arr[end] = Math.pow(10, b);\r\n          return arr;\r\n      }\r\n      function scale(x) {\r\n          return logScale(linearScale(x));\r\n      }\r\n      scale.domain = function (x) {\r\n          if (!arguments.length) {\r\n              return linearScale.domain();\r\n          }\r\n          linearScale.domain(x);\r\n          return scale;\r\n      };\r\n      scale.range = function (x) {\r\n          if (!arguments.length) {\r\n              return logScale.range();\r\n          }\r\n          logScale.range(x);\r\n          return scale;\r\n      };\r\n      scale.ticks = function (m) {\r\n          return logspace(-2, 1, m || 10).map(function (v) {\r\n              return linearScale.invert(v);\r\n          });\r\n      };\r\n      scale.copy = function () {\r\n          return c3LogScale(d3, linearScale.copy(), logScale.copy());\r\n      };\r\n      return scale;\r\n  }\r\n  ChartInternal.prototype.getScale = function (min, max, forTimeseries) {\r\n      return (forTimeseries ? this.d3.scaleTime() : this.d3.scaleLinear()).range([\r\n          min,\r\n          max\r\n      ]);\r\n  };\r\n  ChartInternal.prototype.getX = function (min, max, domain, offset) {\r\n      var $$ = this, scale = $$.getScale(min, max, $$.isTimeSeries()), _scale = domain ? scale.domain(domain) : scale, key;\r\n      // Define customized scale if categorized axis\r\n      if ($$.isCategorized()) {\r\n          offset =\r\n              offset ||\r\n                  function () {\r\n                      return 0;\r\n                  };\r\n          scale = function (d, raw) {\r\n              var v = _scale(d) + offset(d);\r\n              return raw ? v : Math.ceil(v);\r\n          };\r\n      }\r\n      else {\r\n          scale = function (d, raw) {\r\n              var v = _scale(d);\r\n              return raw ? v : Math.ceil(v);\r\n          };\r\n      }\r\n      // define functions\r\n      for (key in _scale) {\r\n          scale[key] = _scale[key];\r\n      }\r\n      scale.orgDomain = function () {\r\n          return _scale.domain();\r\n      };\r\n      // define custom domain() for categorized axis\r\n      if ($$.isCategorized()) {\r\n          scale.domain = function (domain) {\r\n              if (!arguments.length) {\r\n                  domain = this.orgDomain();\r\n                  return [domain[0], domain[1] + 1];\r\n              }\r\n              _scale.domain(domain);\r\n              return scale;\r\n          };\r\n      }\r\n      return scale;\r\n  };\r\n  /**\r\n   * Creates and configures a D3 scale instance for the given type.\r\n   *\r\n   * By defaults it returns a Linear scale.\r\n   *\r\n   * @param {String} type Type of d3-scale to create. Type can be 'linear', 'time', 'timeseries' or 'log'.\r\n   * @param {Array} domain The scale domain such as [from, to]\r\n   * @param {Array} range The scale's range such as [from, to]\r\n   *\r\n   * @return A d3-scale instance\r\n   */\r\n  ChartInternal.prototype.getY = function (type, domain, range) {\r\n      var scale;\r\n      if (type === 'timeseries' || type === 'time') {\r\n          scale = this.d3.scaleTime();\r\n      }\r\n      else if (type === 'log') {\r\n          scale = c3LogScale(this.d3);\r\n      }\r\n      else if (type === 'linear' || type === undefined) {\r\n          scale = this.d3.scaleLinear();\r\n      }\r\n      else {\r\n          throw new Error(\"Invalid Y axis type: \\\"\" + type + \"\\\"\");\r\n      }\r\n      if (domain) {\r\n          scale.domain(domain);\r\n      }\r\n      if (range) {\r\n          scale.range(range);\r\n      }\r\n      return scale;\r\n  };\r\n  ChartInternal.prototype.getYScale = function (id) {\r\n      return this.axis.getId(id) === 'y2' ? this.y2 : this.y;\r\n  };\r\n  ChartInternal.prototype.getSubYScale = function (id) {\r\n      return this.axis.getId(id) === 'y2' ? this.subY2 : this.subY;\r\n  };\r\n  ChartInternal.prototype.updateScales = function () {\r\n      var $$ = this, config = $$.config, forInit = !$$.x;\r\n      // update edges\r\n      $$.xMin = config.axis_rotated ? 1 : 0;\r\n      $$.xMax = config.axis_rotated ? $$.height : $$.width;\r\n      $$.yMin = config.axis_rotated ? 0 : $$.height;\r\n      $$.yMax = config.axis_rotated ? $$.width : 1;\r\n      $$.subXMin = $$.xMin;\r\n      $$.subXMax = $$.xMax;\r\n      $$.subYMin = config.axis_rotated ? 0 : $$.height2;\r\n      $$.subYMax = config.axis_rotated ? $$.width2 : 1;\r\n      // update scales\r\n      $$.x = $$.getX($$.xMin, $$.xMax, forInit ? undefined : $$.x.orgDomain(), function () {\r\n          return $$.xAxis.tickOffset();\r\n      });\r\n      $$.y = $$.getY(config.axis_y_type, forInit ? config.axis_y_default : $$.y.domain(), [$$.yMin, $$.yMax]);\r\n      $$.y2 = $$.getY(config.axis_y2_type, forInit ? config.axis_y2_default : $$.y2.domain(), [$$.yMin, $$.yMax]);\r\n      $$.subX = $$.getX($$.xMin, $$.xMax, $$.orgXDomain, function (d) {\r\n          return d % 1 ? 0 : $$.subXAxis.tickOffset();\r\n      });\r\n      $$.subY = $$.getY(config.axis_y_type, forInit ? config.axis_y_default : $$.subY.domain(), [$$.subYMin, $$.subYMax]);\r\n      $$.subY2 = $$.getY(config.axis_y2_type, forInit ? config.axis_y2_default : $$.subY2.domain(), [$$.subYMin, $$.subYMax]);\r\n      // update axes\r\n      $$.xAxisTickFormat = $$.axis.getXAxisTickFormat();\r\n      $$.xAxisTickValues = $$.axis.getXAxisTickValues();\r\n      $$.yAxisTickValues = $$.axis.getYAxisTickValues();\r\n      $$.y2AxisTickValues = $$.axis.getY2AxisTickValues();\r\n      $$.xAxis = $$.axis.getXAxis($$.x, $$.xOrient, $$.xAxisTickFormat, $$.xAxisTickValues, config.axis_x_tick_outer);\r\n      $$.subXAxis = $$.axis.getXAxis($$.subX, $$.subXOrient, $$.xAxisTickFormat, $$.xAxisTickValues, config.axis_x_tick_outer);\r\n      $$.yAxis = $$.axis.getYAxis('y', $$.y, $$.yOrient, $$.yAxisTickValues, config.axis_y_tick_outer);\r\n      $$.y2Axis = $$.axis.getYAxis('y2', $$.y2, $$.y2Orient, $$.y2AxisTickValues, config.axis_y2_tick_outer);\r\n      // Set initialized scales to brush and zoom\r\n      if (!forInit) {\r\n          if ($$.brush) {\r\n              $$.brush.updateScale($$.subX);\r\n          }\r\n      }\r\n      // update for arc\r\n      if ($$.updateArc) {\r\n          $$.updateArc();\r\n      }\r\n  };\n\n  ChartInternal.prototype.selectPoint = function (target, d, i) {\r\n      var $$ = this, config = $$.config, cx = (config.axis_rotated ? $$.circleY : $$.circleX).bind($$), cy = (config.axis_rotated ? $$.circleX : $$.circleY).bind($$), r = $$.pointSelectR.bind($$);\r\n      config.data_onselected.call($$.api, d, target.node());\r\n      // add selected-circle on low layer g\r\n      $$.main\r\n          .select('.' + CLASS.selectedCircles + $$.getTargetSelectorSuffix(d.id))\r\n          .selectAll('.' + CLASS.selectedCircle + '-' + i)\r\n          .data([d])\r\n          .enter()\r\n          .append('circle')\r\n          .attr('class', function () {\r\n          return $$.generateClass(CLASS.selectedCircle, i);\r\n      })\r\n          .attr('cx', cx)\r\n          .attr('cy', cy)\r\n          .attr('stroke', function () {\r\n          return $$.color(d);\r\n      })\r\n          .attr('r', function (d) {\r\n          return $$.pointSelectR(d) * 1.4;\r\n      })\r\n          .transition()\r\n          .duration(100)\r\n          .attr('r', r);\r\n  };\r\n  ChartInternal.prototype.unselectPoint = function (target, d, i) {\r\n      var $$ = this;\r\n      $$.config.data_onunselected.call($$.api, d, target.node());\r\n      // remove selected-circle from low layer g\r\n      $$.main\r\n          .select('.' + CLASS.selectedCircles + $$.getTargetSelectorSuffix(d.id))\r\n          .selectAll('.' + CLASS.selectedCircle + '-' + i)\r\n          .transition()\r\n          .duration(100)\r\n          .attr('r', 0)\r\n          .remove();\r\n  };\r\n  ChartInternal.prototype.togglePoint = function (selected, target, d, i) {\r\n      selected ? this.selectPoint(target, d, i) : this.unselectPoint(target, d, i);\r\n  };\r\n  ChartInternal.prototype.selectPath = function (target, d) {\r\n      var $$ = this;\r\n      $$.config.data_onselected.call($$, d, target.node());\r\n      if ($$.config.interaction_brighten) {\r\n          target\r\n              .transition()\r\n              .duration(100)\r\n              .style('fill', function () {\r\n              return $$.d3.rgb($$.color(d)).brighter(0.75);\r\n          });\r\n      }\r\n  };\r\n  ChartInternal.prototype.unselectPath = function (target, d) {\r\n      var $$ = this;\r\n      $$.config.data_onunselected.call($$, d, target.node());\r\n      if ($$.config.interaction_brighten) {\r\n          target\r\n              .transition()\r\n              .duration(100)\r\n              .style('fill', function () {\r\n              return $$.color(d);\r\n          });\r\n      }\r\n  };\r\n  ChartInternal.prototype.togglePath = function (selected, target, d, i) {\r\n      selected ? this.selectPath(target, d, i) : this.unselectPath(target, d, i);\r\n  };\r\n  ChartInternal.prototype.getToggle = function (that, d) {\r\n      var $$ = this, toggle;\r\n      if (that.nodeName === 'circle') {\r\n          if ($$.isStepType(d)) {\r\n              // circle is hidden in step chart, so treat as within the click area\r\n              toggle = function () { }; // TODO: how to select step chart?\r\n          }\r\n          else {\r\n              toggle = $$.togglePoint;\r\n          }\r\n      }\r\n      else if (that.nodeName === 'path') {\r\n          toggle = $$.togglePath;\r\n      }\r\n      return toggle;\r\n  };\r\n  ChartInternal.prototype.toggleShape = function (that, d, i) {\r\n      var $$ = this, d3 = $$.d3, config = $$.config, shape = d3.select(that), isSelected = shape.classed(CLASS.SELECTED), toggle = $$.getToggle(that, d).bind($$);\r\n      if (config.data_selection_enabled && config.data_selection_isselectable(d)) {\r\n          if (!config.data_selection_multiple) {\r\n              $$.main\r\n                  .selectAll('.' +\r\n                  CLASS.shapes +\r\n                  (config.data_selection_grouped\r\n                      ? $$.getTargetSelectorSuffix(d.id)\r\n                      : ''))\r\n                  .selectAll('.' + CLASS.shape)\r\n                  .each(function (d, i) {\r\n                  var shape = d3.select(this);\r\n                  if (shape.classed(CLASS.SELECTED)) {\r\n                      toggle(false, shape.classed(CLASS.SELECTED, false), d, i);\r\n                  }\r\n              });\r\n          }\r\n          shape.classed(CLASS.SELECTED, !isSelected);\r\n          toggle(!isSelected, shape, d, i);\r\n      }\r\n  };\n\n  ChartInternal.prototype.initBar = function () {\r\n      var $$ = this;\r\n      $$.main\r\n          .select('.' + CLASS.chart)\r\n          .append('g')\r\n          .attr('class', CLASS.chartBars);\r\n  };\r\n  ChartInternal.prototype.updateTargetsForBar = function (targets) {\r\n      var $$ = this, config = $$.config, mainBars, mainBarEnter, classChartBar = $$.classChartBar.bind($$), classBars = $$.classBars.bind($$), classFocus = $$.classFocus.bind($$);\r\n      mainBars = $$.main\r\n          .select('.' + CLASS.chartBars)\r\n          .selectAll('.' + CLASS.chartBar)\r\n          .data(targets)\r\n          .attr('class', function (d) {\r\n          return classChartBar(d) + classFocus(d);\r\n      });\r\n      mainBarEnter = mainBars\r\n          .enter()\r\n          .append('g')\r\n          .attr('class', classChartBar)\r\n          .style('pointer-events', 'none');\r\n      // Bars for each data\r\n      mainBarEnter\r\n          .append('g')\r\n          .attr('class', classBars)\r\n          .style('cursor', function (d) {\r\n          return config.data_selection_isselectable(d) ? 'pointer' : null;\r\n      });\r\n  };\r\n  ChartInternal.prototype.updateBar = function (durationForExit) {\r\n      var $$ = this, barData = $$.barData.bind($$), classBar = $$.classBar.bind($$), initialOpacity = $$.initialOpacity.bind($$), color = function (d) {\r\n          return $$.color(d.id);\r\n      };\r\n      var mainBar = $$.main\r\n          .selectAll('.' + CLASS.bars)\r\n          .selectAll('.' + CLASS.bar)\r\n          .data(barData);\r\n      var mainBarEnter = mainBar\r\n          .enter()\r\n          .append('path')\r\n          .attr('class', classBar)\r\n          .style('stroke', color)\r\n          .style('fill', color);\r\n      $$.mainBar = mainBarEnter.merge(mainBar).style('opacity', initialOpacity);\r\n      mainBar\r\n          .exit()\r\n          .transition()\r\n          .duration(durationForExit)\r\n          .style('opacity', 0);\r\n  };\r\n  ChartInternal.prototype.redrawBar = function (drawBar, withTransition, transition) {\r\n      var $$ = this;\r\n      return [\r\n          (withTransition ? this.mainBar.transition(transition) : this.mainBar)\r\n              .attr('d', drawBar)\r\n              .style('stroke', this.color)\r\n              .style('fill', this.color)\r\n              .style('opacity', function (d) { return ($$.isTargetToShow(d.id) ? 1 : 0); })\r\n      ];\r\n  };\r\n  ChartInternal.prototype.getBarW = function (axis, barTargetsNum) {\r\n      var $$ = this, config = $$.config, w = typeof config.bar_width === 'number'\r\n          ? config.bar_width\r\n          : barTargetsNum\r\n              ? (axis.tickInterval() * config.bar_width_ratio) / barTargetsNum\r\n              : 0;\r\n      return config.bar_width_max && w > config.bar_width_max\r\n          ? config.bar_width_max\r\n          : w;\r\n  };\r\n  ChartInternal.prototype.getBars = function (i, id) {\r\n      var $$ = this;\r\n      return (id\r\n          ? $$.main.selectAll('.' + CLASS.bars + $$.getTargetSelectorSuffix(id))\r\n          : $$.main).selectAll('.' + CLASS.bar + (isValue(i) ? '-' + i : ''));\r\n  };\r\n  ChartInternal.prototype.expandBars = function (i, id, reset) {\r\n      var $$ = this;\r\n      if (reset) {\r\n          $$.unexpandBars();\r\n      }\r\n      $$.getBars(i, id).classed(CLASS.EXPANDED, true);\r\n  };\r\n  ChartInternal.prototype.unexpandBars = function (i) {\r\n      var $$ = this;\r\n      $$.getBars(i).classed(CLASS.EXPANDED, false);\r\n  };\r\n  ChartInternal.prototype.generateDrawBar = function (barIndices, isSub) {\r\n      var $$ = this, config = $$.config, getPoints = $$.generateGetBarPoints(barIndices, isSub);\r\n      return function (d, i) {\r\n          // 4 points that make a bar\r\n          var points = getPoints(d, i);\r\n          // switch points if axis is rotated, not applicable for sub chart\r\n          var indexX = config.axis_rotated ? 1 : 0;\r\n          var indexY = config.axis_rotated ? 0 : 1;\r\n          var path = 'M ' +\r\n              points[0][indexX] +\r\n              ',' +\r\n              points[0][indexY] +\r\n              ' ' +\r\n              'L' +\r\n              points[1][indexX] +\r\n              ',' +\r\n              points[1][indexY] +\r\n              ' ' +\r\n              'L' +\r\n              points[2][indexX] +\r\n              ',' +\r\n              points[2][indexY] +\r\n              ' ' +\r\n              'L' +\r\n              points[3][indexX] +\r\n              ',' +\r\n              points[3][indexY] +\r\n              ' ' +\r\n              'z';\r\n          return path;\r\n      };\r\n  };\r\n  ChartInternal.prototype.generateGetBarPoints = function (barIndices, isSub) {\r\n      var $$ = this, axis = isSub ? $$.subXAxis : $$.xAxis, barTargetsNum = barIndices.__max__ + 1, barW = $$.getBarW(axis, barTargetsNum), barX = $$.getShapeX(barW, barTargetsNum, barIndices, !!isSub), barY = $$.getShapeY(!!isSub), barOffset = $$.getShapeOffset($$.isBarType, barIndices, !!isSub), barSpaceOffset = barW * ($$.config.bar_space / 2), yScale = isSub ? $$.getSubYScale : $$.getYScale;\r\n      return function (d, i) {\r\n          var y0 = yScale.call($$, d.id)(0), offset = barOffset(d, i) || y0, // offset is for stacked bar chart\r\n          posX = barX(d), posY = barY(d);\r\n          // fix posY not to overflow opposite quadrant\r\n          if ($$.config.axis_rotated) {\r\n              if ((0 < d.value && posY < y0) || (d.value < 0 && y0 < posY)) {\r\n                  posY = y0;\r\n              }\r\n          }\r\n          posY -= y0 - offset;\r\n          // 4 points that make a bar\r\n          return [\r\n              [posX + barSpaceOffset, offset],\r\n              [posX + barSpaceOffset, posY],\r\n              [posX + barW - barSpaceOffset, posY],\r\n              [posX + barW - barSpaceOffset, offset]\r\n          ];\r\n      };\r\n  };\r\n  /**\r\n   * Returns whether the data point is within the given bar shape.\r\n   *\r\n   * @param mouse\r\n   * @param barShape\r\n   * @return {boolean}\r\n   */\r\n  ChartInternal.prototype.isWithinBar = function (mouse, barShape) {\r\n      return isWithinBox(mouse, getBBox(barShape), 2);\r\n  };\n\n  ChartInternal.prototype.getShapeIndices = function (typeFilter) {\r\n      var $$ = this, config = $$.config, indices = {}, i = 0, j, k;\r\n      $$.filterTargetsToShow($$.data.targets.filter(typeFilter, $$)).forEach(function (d) {\r\n          for (j = 0; j < config.data_groups.length; j++) {\r\n              if (config.data_groups[j].indexOf(d.id) < 0) {\r\n                  continue;\r\n              }\r\n              for (k = 0; k < config.data_groups[j].length; k++) {\r\n                  if (config.data_groups[j][k] in indices) {\r\n                      indices[d.id] = indices[config.data_groups[j][k]];\r\n                      break;\r\n                  }\r\n              }\r\n          }\r\n          if (isUndefined(indices[d.id])) {\r\n              indices[d.id] = i++;\r\n          }\r\n      });\r\n      indices.__max__ = i - 1;\r\n      return indices;\r\n  };\r\n  ChartInternal.prototype.getShapeX = function (offset, targetsNum, indices, isSub) {\r\n      var $$ = this, scale = isSub ? $$.subX : $$.x;\r\n      return function (d) {\r\n          var index = d.id in indices ? indices[d.id] : 0;\r\n          return d.x || d.x === 0 ? scale(d.x) - offset * (targetsNum / 2 - index) : 0;\r\n      };\r\n  };\r\n  ChartInternal.prototype.getShapeY = function (isSub) {\r\n      var $$ = this;\r\n      return function (d) {\r\n          var scale = isSub ? $$.getSubYScale(d.id) : $$.getYScale(d.id);\r\n          return scale($$.isTargetNormalized(d.id) ? $$.getRatio('index', d, true) : d.value);\r\n      };\r\n  };\r\n  ChartInternal.prototype.getShapeOffset = function (typeFilter, indices, isSub) {\r\n      var $$ = this, targets = $$.orderTargets($$.filterTargetsToShow($$.data.targets.filter(typeFilter, $$))), targetIds = targets.map(function (t) {\r\n          return t.id;\r\n      });\r\n      return function (d, i) {\r\n          var scale = isSub ? $$.getSubYScale(d.id) : $$.getYScale(d.id), y0 = scale(0), offset = y0;\r\n          targets.forEach(function (t) {\r\n              var rowValues = $$.isStepType(d)\r\n                  ? $$.convertValuesToStep(t.values)\r\n                  : t.values;\r\n              var isTargetNormalized = $$.isTargetNormalized(d.id);\r\n              var values = rowValues.map(function (v) {\r\n                  return isTargetNormalized ? $$.getRatio('index', v, true) : v.value;\r\n              });\r\n              if (t.id === d.id || indices[t.id] !== indices[d.id]) {\r\n                  return;\r\n              }\r\n              if (targetIds.indexOf(t.id) < targetIds.indexOf(d.id)) {\r\n                  // check if the x values line up\r\n                  if (isUndefined(rowValues[i]) || +rowValues[i].x !== +d.x) {\r\n                      // \"+\" for timeseries\r\n                      // if not, try to find the value that does line up\r\n                      i = -1;\r\n                      rowValues.forEach(function (v, j) {\r\n                          var x1 = v.x.constructor === Date ? +v.x : v.x;\r\n                          var x2 = d.x.constructor === Date ? +d.x : d.x;\r\n                          if (x1 === x2) {\r\n                              i = j;\r\n                          }\r\n                      });\r\n                  }\r\n                  if (i in rowValues && rowValues[i].value * d.value >= 0) {\r\n                      offset += scale(values[i]) - y0;\r\n                  }\r\n              }\r\n          });\r\n          return offset;\r\n      };\r\n  };\r\n  ChartInternal.prototype.isWithinShape = function (that, d) {\r\n      var $$ = this, shape = $$.d3.select(that), isWithin;\r\n      if (!$$.isTargetToShow(d.id)) {\r\n          isWithin = false;\r\n      }\r\n      else if (that.nodeName === 'circle') {\r\n          isWithin = $$.isStepType(d)\r\n              ? $$.isWithinStep(that, $$.getYScale(d.id)(d.value))\r\n              : $$.isWithinCircle(that, $$.pointSelectR(d) * 1.5);\r\n      }\r\n      else if (that.nodeName === 'path') {\r\n          isWithin = shape.classed(CLASS.bar)\r\n              ? $$.isWithinBar($$.d3.mouse(that), that)\r\n              : true;\r\n      }\r\n      return isWithin;\r\n  };\r\n  ChartInternal.prototype.getInterpolate = function (d) {\r\n      var $$ = this, d3 = $$.d3, types = {\r\n          linear: d3.curveLinear,\r\n          'linear-closed': d3.curveLinearClosed,\r\n          basis: d3.curveBasis,\r\n          'basis-open': d3.curveBasisOpen,\r\n          'basis-closed': d3.curveBasisClosed,\r\n          bundle: d3.curveBundle,\r\n          cardinal: d3.curveCardinal,\r\n          'cardinal-open': d3.curveCardinalOpen,\r\n          'cardinal-closed': d3.curveCardinalClosed,\r\n          monotone: d3.curveMonotoneX,\r\n          step: d3.curveStep,\r\n          'step-before': d3.curveStepBefore,\r\n          'step-after': d3.curveStepAfter\r\n      }, type;\r\n      if ($$.isSplineType(d)) {\r\n          type = types[$$.config.spline_interpolation_type] || types.cardinal;\r\n      }\r\n      else if ($$.isStepType(d)) {\r\n          type = types[$$.config.line_step_type];\r\n      }\r\n      else {\r\n          type = types.linear;\r\n      }\r\n      return type;\r\n  };\n\n  ChartInternal.prototype.initLine = function () {\r\n      var $$ = this;\r\n      $$.main\r\n          .select('.' + CLASS.chart)\r\n          .append('g')\r\n          .attr('class', CLASS.chartLines);\r\n  };\r\n  ChartInternal.prototype.updateTargetsForLine = function (targets) {\r\n      var $$ = this, config = $$.config, mainLines, mainLineEnter, classChartLine = $$.classChartLine.bind($$), classLines = $$.classLines.bind($$), classAreas = $$.classAreas.bind($$), classCircles = $$.classCircles.bind($$), classFocus = $$.classFocus.bind($$);\r\n      mainLines = $$.main\r\n          .select('.' + CLASS.chartLines)\r\n          .selectAll('.' + CLASS.chartLine)\r\n          .data(targets)\r\n          .attr('class', function (d) {\r\n          return classChartLine(d) + classFocus(d);\r\n      });\r\n      mainLineEnter = mainLines\r\n          .enter()\r\n          .append('g')\r\n          .attr('class', classChartLine)\r\n          .style('opacity', 0)\r\n          .style('pointer-events', 'none');\r\n      // Lines for each data\r\n      mainLineEnter.append('g').attr('class', classLines);\r\n      // Areas\r\n      mainLineEnter.append('g').attr('class', classAreas);\r\n      // Circles for each data point on lines\r\n      mainLineEnter.append('g').attr('class', function (d) {\r\n          return $$.generateClass(CLASS.selectedCircles, d.id);\r\n      });\r\n      mainLineEnter\r\n          .append('g')\r\n          .attr('class', classCircles)\r\n          .style('cursor', function (d) {\r\n          return config.data_selection_isselectable(d) ? 'pointer' : null;\r\n      });\r\n      // Update date for selected circles\r\n      targets.forEach(function (t) {\r\n          $$.main\r\n              .selectAll('.' + CLASS.selectedCircles + $$.getTargetSelectorSuffix(t.id))\r\n              .selectAll('.' + CLASS.selectedCircle)\r\n              .each(function (d) {\r\n              d.value = t.values[d.index].value;\r\n          });\r\n      });\r\n      // MEMO: can not keep same color...\r\n      //mainLineUpdate.exit().remove();\r\n  };\r\n  ChartInternal.prototype.updateLine = function (durationForExit) {\r\n      var $$ = this;\r\n      var mainLine = $$.main\r\n          .selectAll('.' + CLASS.lines)\r\n          .selectAll('.' + CLASS.line)\r\n          .data($$.lineData.bind($$));\r\n      var mainLineEnter = mainLine\r\n          .enter()\r\n          .append('path')\r\n          .attr('class', $$.classLine.bind($$))\r\n          .style('stroke', $$.color);\r\n      $$.mainLine = mainLineEnter\r\n          .merge(mainLine)\r\n          .style('opacity', $$.initialOpacity.bind($$))\r\n          .style('shape-rendering', function (d) {\r\n          return $$.isStepType(d) ? 'crispEdges' : '';\r\n      })\r\n          .attr('transform', null);\r\n      mainLine\r\n          .exit()\r\n          .transition()\r\n          .duration(durationForExit)\r\n          .style('opacity', 0);\r\n  };\r\n  ChartInternal.prototype.redrawLine = function (drawLine, withTransition, transition) {\r\n      return [\r\n          (withTransition ? this.mainLine.transition(transition) : this.mainLine)\r\n              .attr('d', drawLine)\r\n              .style('stroke', this.color)\r\n              .style('opacity', 1)\r\n      ];\r\n  };\r\n  ChartInternal.prototype.generateDrawLine = function (lineIndices, isSub) {\r\n      var $$ = this, config = $$.config, line = $$.d3.line(), getPoints = $$.generateGetLinePoints(lineIndices, isSub), yScaleGetter = isSub ? $$.getSubYScale : $$.getYScale, xValue = function (d) {\r\n          return (isSub ? $$.subxx : $$.xx).call($$, d);\r\n      }, yValue = function (d, i) {\r\n          return config.data_groups.length > 0\r\n              ? getPoints(d, i)[0][1]\r\n              : yScaleGetter.call($$, d.id)(d.value);\r\n      };\r\n      line = config.axis_rotated\r\n          ? line.x(yValue).y(xValue)\r\n          : line.x(xValue).y(yValue);\r\n      if (!config.line_connectNull) {\r\n          line = line.defined(function (d) {\r\n              return d.value != null;\r\n          });\r\n      }\r\n      return function (d) {\r\n          var values = config.line_connectNull\r\n              ? $$.filterRemoveNull(d.values)\r\n              : d.values, x = isSub ? $$.subX : $$.x, y = yScaleGetter.call($$, d.id), x0 = 0, y0 = 0, path;\r\n          if ($$.isLineType(d)) {\r\n              if (config.data_regions[d.id]) {\r\n                  path = $$.lineWithRegions(values, x, y, config.data_regions[d.id]);\r\n              }\r\n              else {\r\n                  if ($$.isStepType(d)) {\r\n                      values = $$.convertValuesToStep(values);\r\n                  }\r\n                  path = line.curve($$.getInterpolate(d))(values);\r\n              }\r\n          }\r\n          else {\r\n              if (values[0]) {\r\n                  x0 = x(values[0].x);\r\n                  y0 = y(values[0].value);\r\n              }\r\n              path = config.axis_rotated ? 'M ' + y0 + ' ' + x0 : 'M ' + x0 + ' ' + y0;\r\n          }\r\n          return path ? path : 'M 0 0';\r\n      };\r\n  };\r\n  ChartInternal.prototype.generateGetLinePoints = function (lineIndices, isSub) {\r\n      // partial duplication of generateGetBarPoints\r\n      var $$ = this, config = $$.config, lineTargetsNum = lineIndices.__max__ + 1, x = $$.getShapeX(0, lineTargetsNum, lineIndices, !!isSub), y = $$.getShapeY(!!isSub), lineOffset = $$.getShapeOffset($$.isLineType, lineIndices, !!isSub), yScale = isSub ? $$.getSubYScale : $$.getYScale;\r\n      return function (d, i) {\r\n          var y0 = yScale.call($$, d.id)(0), offset = lineOffset(d, i) || y0, // offset is for stacked area chart\r\n          posX = x(d), posY = y(d);\r\n          // fix posY not to overflow opposite quadrant\r\n          if (config.axis_rotated) {\r\n              if ((0 < d.value && posY < y0) || (d.value < 0 && y0 < posY)) {\r\n                  posY = y0;\r\n              }\r\n          }\r\n          // 1 point that marks the line position\r\n          return [\r\n              [posX, posY - (y0 - offset)],\r\n              [posX, posY - (y0 - offset)],\r\n              [posX, posY - (y0 - offset)],\r\n              [posX, posY - (y0 - offset)] // needed for compatibility\r\n          ];\r\n      };\r\n  };\r\n  ChartInternal.prototype.lineWithRegions = function (d, x, y, _regions) {\r\n      var $$ = this, config = $$.config, prev = -1, i, j, s = 'M', sWithRegion, xp, yp, dx, dy, dd, diff, diffx2, xOffset = $$.isCategorized() ? 0.5 : 0, xValue, yValue, regions = [];\r\n      function isWithinRegions(x, regions) {\r\n          var i;\r\n          for (i = 0; i < regions.length; i++) {\r\n              if (regions[i].start < x && x <= regions[i].end) {\r\n                  return true;\r\n              }\r\n          }\r\n          return false;\r\n      }\r\n      // Check start/end of regions\r\n      if (isDefined(_regions)) {\r\n          for (i = 0; i < _regions.length; i++) {\r\n              regions[i] = {};\r\n              if (isUndefined(_regions[i].start)) {\r\n                  regions[i].start = d[0].x;\r\n              }\r\n              else {\r\n                  regions[i].start = $$.isTimeSeries()\r\n                      ? $$.parseDate(_regions[i].start)\r\n                      : _regions[i].start;\r\n              }\r\n              if (isUndefined(_regions[i].end)) {\r\n                  regions[i].end = d[d.length - 1].x;\r\n              }\r\n              else {\r\n                  regions[i].end = $$.isTimeSeries()\r\n                      ? $$.parseDate(_regions[i].end)\r\n                      : _regions[i].end;\r\n              }\r\n          }\r\n      }\r\n      // Set scales\r\n      xValue = config.axis_rotated\r\n          ? function (d) {\r\n              return y(d.value);\r\n          }\r\n          : function (d) {\r\n              return x(d.x);\r\n          };\r\n      yValue = config.axis_rotated\r\n          ? function (d) {\r\n              return x(d.x);\r\n          }\r\n          : function (d) {\r\n              return y(d.value);\r\n          };\r\n      // Define svg generator function for region\r\n      function generateM(points) {\r\n          return ('M' +\r\n              points[0][0] +\r\n              ' ' +\r\n              points[0][1] +\r\n              ' ' +\r\n              points[1][0] +\r\n              ' ' +\r\n              points[1][1]);\r\n      }\r\n      if ($$.isTimeSeries()) {\r\n          sWithRegion = function (d0, d1, j, diff) {\r\n              var x0 = d0.x.getTime(), x_diff = d1.x - d0.x, xv0 = new Date(x0 + x_diff * j), xv1 = new Date(x0 + x_diff * (j + diff)), points;\r\n              if (config.axis_rotated) {\r\n                  points = [\r\n                      [y(yp(j)), x(xv0)],\r\n                      [y(yp(j + diff)), x(xv1)]\r\n                  ];\r\n              }\r\n              else {\r\n                  points = [\r\n                      [x(xv0), y(yp(j))],\r\n                      [x(xv1), y(yp(j + diff))]\r\n                  ];\r\n              }\r\n              return generateM(points);\r\n          };\r\n      }\r\n      else {\r\n          sWithRegion = function (d0, d1, j, diff) {\r\n              var points;\r\n              if (config.axis_rotated) {\r\n                  points = [\r\n                      [y(yp(j), true), x(xp(j))],\r\n                      [y(yp(j + diff), true), x(xp(j + diff))]\r\n                  ];\r\n              }\r\n              else {\r\n                  points = [\r\n                      [x(xp(j), true), y(yp(j))],\r\n                      [x(xp(j + diff), true), y(yp(j + diff))]\r\n                  ];\r\n              }\r\n              return generateM(points);\r\n          };\r\n      }\r\n      // Generate\r\n      for (i = 0; i < d.length; i++) {\r\n          // Draw as normal\r\n          if (isUndefined(regions) || !isWithinRegions(d[i].x, regions)) {\r\n              s += ' ' + xValue(d[i]) + ' ' + yValue(d[i]);\r\n          }\r\n          // Draw with region // TODO: Fix for horizotal charts\r\n          else {\r\n              xp = $$.getScale(d[i - 1].x + xOffset, d[i].x + xOffset, $$.isTimeSeries());\r\n              yp = $$.getScale(d[i - 1].value, d[i].value);\r\n              dx = x(d[i].x) - x(d[i - 1].x);\r\n              dy = y(d[i].value) - y(d[i - 1].value);\r\n              dd = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2));\r\n              diff = 2 / dd;\r\n              diffx2 = diff * 2;\r\n              for (j = diff; j <= 1; j += diffx2) {\r\n                  s += sWithRegion(d[i - 1], d[i], j, diff);\r\n              }\r\n          }\r\n          prev = d[i].x;\r\n      }\r\n      return s;\r\n  };\r\n  ChartInternal.prototype.updateArea = function (durationForExit) {\r\n      var $$ = this, d3 = $$.d3;\r\n      var mainArea = $$.main\r\n          .selectAll('.' + CLASS.areas)\r\n          .selectAll('.' + CLASS.area)\r\n          .data($$.lineData.bind($$));\r\n      var mainAreaEnter = mainArea\r\n          .enter()\r\n          .append('path')\r\n          .attr('class', $$.classArea.bind($$))\r\n          .style('fill', $$.color)\r\n          .style('opacity', function () {\r\n          $$.orgAreaOpacity = +d3.select(this).style('opacity');\r\n          return 0;\r\n      });\r\n      $$.mainArea = mainAreaEnter\r\n          .merge(mainArea)\r\n          .style('opacity', $$.orgAreaOpacity);\r\n      mainArea\r\n          .exit()\r\n          .transition()\r\n          .duration(durationForExit)\r\n          .style('opacity', 0);\r\n  };\r\n  ChartInternal.prototype.redrawArea = function (drawArea, withTransition, transition) {\r\n      return [\r\n          (withTransition ? this.mainArea.transition(transition) : this.mainArea)\r\n              .attr('d', drawArea)\r\n              .style('fill', this.color)\r\n              .style('opacity', this.orgAreaOpacity)\r\n      ];\r\n  };\r\n  ChartInternal.prototype.generateDrawArea = function (areaIndices, isSub) {\r\n      var $$ = this, config = $$.config, area = $$.d3.area(), getPoints = $$.generateGetAreaPoints(areaIndices, isSub), yScaleGetter = isSub ? $$.getSubYScale : $$.getYScale, xValue = function (d) {\r\n          return (isSub ? $$.subxx : $$.xx).call($$, d);\r\n      }, value0 = function (d, i) {\r\n          return config.data_groups.length > 0\r\n              ? getPoints(d, i)[0][1]\r\n              : yScaleGetter.call($$, d.id)($$.getAreaBaseValue(d.id));\r\n      }, value1 = function (d, i) {\r\n          return config.data_groups.length > 0\r\n              ? getPoints(d, i)[1][1]\r\n              : yScaleGetter.call($$, d.id)(d.value);\r\n      };\r\n      area = config.axis_rotated\r\n          ? area\r\n              .x0(value0)\r\n              .x1(value1)\r\n              .y(xValue)\r\n          : area\r\n              .x(xValue)\r\n              .y0(config.area_above ? 0 : value0)\r\n              .y1(value1);\r\n      if (!config.line_connectNull) {\r\n          area = area.defined(function (d) {\r\n              return d.value !== null;\r\n          });\r\n      }\r\n      return function (d) {\r\n          var values = config.line_connectNull\r\n              ? $$.filterRemoveNull(d.values)\r\n              : d.values, x0 = 0, y0 = 0, path;\r\n          if ($$.isAreaType(d)) {\r\n              if ($$.isStepType(d)) {\r\n                  values = $$.convertValuesToStep(values);\r\n              }\r\n              path = area.curve($$.getInterpolate(d))(values);\r\n          }\r\n          else {\r\n              if (values[0]) {\r\n                  x0 = $$.x(values[0].x);\r\n                  y0 = $$.getYScale(d.id)(values[0].value);\r\n              }\r\n              path = config.axis_rotated ? 'M ' + y0 + ' ' + x0 : 'M ' + x0 + ' ' + y0;\r\n          }\r\n          return path ? path : 'M 0 0';\r\n      };\r\n  };\r\n  ChartInternal.prototype.getAreaBaseValue = function () {\r\n      return 0;\r\n  };\r\n  ChartInternal.prototype.generateGetAreaPoints = function (areaIndices, isSub) {\r\n      // partial duplication of generateGetBarPoints\r\n      var $$ = this, config = $$.config, areaTargetsNum = areaIndices.__max__ + 1, x = $$.getShapeX(0, areaTargetsNum, areaIndices, !!isSub), y = $$.getShapeY(!!isSub), areaOffset = $$.getShapeOffset($$.isAreaType, areaIndices, !!isSub), yScale = isSub ? $$.getSubYScale : $$.getYScale;\r\n      return function (d, i) {\r\n          var y0 = yScale.call($$, d.id)(0), offset = areaOffset(d, i) || y0, // offset is for stacked area chart\r\n          posX = x(d), posY = y(d);\r\n          // fix posY not to overflow opposite quadrant\r\n          if (config.axis_rotated) {\r\n              if ((0 < d.value && posY < y0) || (d.value < 0 && y0 < posY)) {\r\n                  posY = y0;\r\n              }\r\n          }\r\n          // 1 point that marks the area position\r\n          return [\r\n              [posX, offset],\r\n              [posX, posY - (y0 - offset)],\r\n              [posX, posY - (y0 - offset)],\r\n              [posX, offset] // needed for compatibility\r\n          ];\r\n      };\r\n  };\r\n  ChartInternal.prototype.updateCircle = function (cx, cy) {\r\n      var $$ = this;\r\n      var mainCircle = $$.main\r\n          .selectAll('.' + CLASS.circles)\r\n          .selectAll('.' + CLASS.circle)\r\n          .data($$.lineOrScatterOrStanfordData.bind($$));\r\n      var mainCircleEnter = mainCircle\r\n          .enter()\r\n          .append('circle')\r\n          .attr('shape-rendering', $$.isStanfordGraphType() ? 'crispEdges' : '')\r\n          .attr('class', $$.classCircle.bind($$))\r\n          .attr('cx', cx)\r\n          .attr('cy', cy)\r\n          .attr('r', $$.pointR.bind($$))\r\n          .style('color', $$.isStanfordGraphType() ? $$.getStanfordPointColor.bind($$) : $$.color);\r\n      $$.mainCircle = mainCircleEnter\r\n          .merge(mainCircle)\r\n          .style('opacity', $$.isStanfordGraphType() ? 1 : $$.initialOpacityForCircle.bind($$));\r\n      mainCircle.exit().style('opacity', 0);\r\n  };\r\n  ChartInternal.prototype.redrawCircle = function (cx, cy, withTransition, transition) {\r\n      var $$ = this, selectedCircles = $$.main.selectAll('.' + CLASS.selectedCircle);\r\n      return [\r\n          (withTransition ? $$.mainCircle.transition(transition) : $$.mainCircle)\r\n              .style('opacity', this.opacityForCircle.bind($$))\r\n              .style('color', $$.isStanfordGraphType() ? $$.getStanfordPointColor.bind($$) : $$.color)\r\n              .attr('cx', cx)\r\n              .attr('cy', cy),\r\n          (withTransition ? selectedCircles.transition(transition) : selectedCircles)\r\n              .attr('cx', cx)\r\n              .attr('cy', cy)\r\n      ];\r\n  };\r\n  ChartInternal.prototype.circleX = function (d) {\r\n      return d.x || d.x === 0 ? this.x(d.x) : null;\r\n  };\r\n  ChartInternal.prototype.updateCircleY = function () {\r\n      var $$ = this, lineIndices, getPoints;\r\n      if ($$.config.data_groups.length > 0) {\r\n          (lineIndices = $$.getShapeIndices($$.isLineType)),\r\n              (getPoints = $$.generateGetLinePoints(lineIndices));\r\n          $$.circleY = function (d, i) {\r\n              return getPoints(d, i)[0][1];\r\n          };\r\n      }\r\n      else {\r\n          $$.circleY = function (d) {\r\n              return $$.getYScale(d.id)(d.value);\r\n          };\r\n      }\r\n  };\r\n  ChartInternal.prototype.getCircles = function (i, id) {\r\n      var $$ = this;\r\n      return (id\r\n          ? $$.main.selectAll('.' + CLASS.circles + $$.getTargetSelectorSuffix(id))\r\n          : $$.main).selectAll('.' + CLASS.circle + (isValue(i) ? '-' + i : ''));\r\n  };\r\n  ChartInternal.prototype.expandCircles = function (i, id, reset) {\r\n      var $$ = this, r = $$.pointExpandedR.bind($$);\r\n      if (reset) {\r\n          $$.unexpandCircles();\r\n      }\r\n      $$.getCircles(i, id)\r\n          .classed(CLASS.EXPANDED, true)\r\n          .attr('r', r);\r\n  };\r\n  ChartInternal.prototype.unexpandCircles = function (i) {\r\n      var $$ = this, r = $$.pointR.bind($$);\r\n      $$.getCircles(i)\r\n          .filter(function () {\r\n          return $$.d3.select(this).classed(CLASS.EXPANDED);\r\n      })\r\n          .classed(CLASS.EXPANDED, false)\r\n          .attr('r', r);\r\n  };\r\n  ChartInternal.prototype.pointR = function (d) {\r\n      var $$ = this, config = $$.config;\r\n      return $$.isStepType(d)\r\n          ? 0\r\n          : isFunction(config.point_r)\r\n              ? config.point_r(d)\r\n              : config.point_r;\r\n  };\r\n  ChartInternal.prototype.pointExpandedR = function (d) {\r\n      var $$ = this, config = $$.config;\r\n      if (config.point_focus_expand_enabled) {\r\n          return isFunction(config.point_focus_expand_r)\r\n              ? config.point_focus_expand_r(d)\r\n              : config.point_focus_expand_r\r\n                  ? config.point_focus_expand_r\r\n                  : $$.pointR(d) * 1.75;\r\n      }\r\n      else {\r\n          return $$.pointR(d);\r\n      }\r\n  };\r\n  ChartInternal.prototype.pointSelectR = function (d) {\r\n      var $$ = this, config = $$.config;\r\n      return isFunction(config.point_select_r)\r\n          ? config.point_select_r(d)\r\n          : config.point_select_r\r\n              ? config.point_select_r\r\n              : $$.pointR(d) * 4;\r\n  };\r\n  ChartInternal.prototype.isWithinCircle = function (that, r) {\r\n      var d3 = this.d3, mouse = d3.mouse(that), d3_this = d3.select(that), cx = +d3_this.attr('cx'), cy = +d3_this.attr('cy');\r\n      return Math.sqrt(Math.pow(cx - mouse[0], 2) + Math.pow(cy - mouse[1], 2)) < r;\r\n  };\r\n  ChartInternal.prototype.isWithinStep = function (that, y) {\r\n      return Math.abs(y - this.d3.mouse(that)[1]) < 30;\r\n  };\n\n  ChartInternal.prototype.getCurrentWidth = function () {\r\n      var $$ = this, config = $$.config;\r\n      return config.size_width ? config.size_width : $$.getParentWidth();\r\n  };\r\n  ChartInternal.prototype.getCurrentHeight = function () {\r\n      var $$ = this, config = $$.config, h = config.size_height ? config.size_height : $$.getParentHeight();\r\n      return h > 0\r\n          ? h\r\n          : 320 / ($$.hasType('gauge') && !config.gauge_fullCircle ? 2 : 1);\r\n  };\r\n  ChartInternal.prototype.getCurrentPaddingTop = function () {\r\n      var $$ = this, config = $$.config, padding = isValue(config.padding_top) ? config.padding_top : 0;\r\n      if ($$.title && $$.title.node()) {\r\n          padding += $$.getTitlePadding();\r\n      }\r\n      return padding;\r\n  };\r\n  ChartInternal.prototype.getCurrentPaddingBottom = function () {\r\n      var config = this.config;\r\n      return isValue(config.padding_bottom) ? config.padding_bottom : 0;\r\n  };\r\n  ChartInternal.prototype.getCurrentPaddingLeft = function (withoutRecompute) {\r\n      var $$ = this, config = $$.config;\r\n      if (isValue(config.padding_left)) {\r\n          return config.padding_left;\r\n      }\r\n      else if (config.axis_rotated) {\r\n          return !config.axis_x_show || config.axis_x_inner\r\n              ? 1\r\n              : Math.max(ceil10($$.getAxisWidthByAxisId('x', withoutRecompute)), 40);\r\n      }\r\n      else if (!config.axis_y_show || config.axis_y_inner) {\r\n          // && !config.axis_rotated\r\n          return $$.axis.getYAxisLabelPosition().isOuter ? 30 : 1;\r\n      }\r\n      else {\r\n          return ceil10($$.getAxisWidthByAxisId('y', withoutRecompute));\r\n      }\r\n  };\r\n  ChartInternal.prototype.getCurrentPaddingRight = function () {\r\n      var $$ = this, config = $$.config, padding = 0, defaultPadding = 10, legendWidthOnRight = $$.isLegendRight ? $$.getLegendWidth() + 20 : 0;\r\n      if (isValue(config.padding_right)) {\r\n          padding = config.padding_right + 1; // 1 is needed not to hide tick line\r\n      }\r\n      else if (config.axis_rotated) {\r\n          padding = defaultPadding + legendWidthOnRight;\r\n      }\r\n      else if (!config.axis_y2_show || config.axis_y2_inner) {\r\n          // && !config.axis_rotated\r\n          padding =\r\n              2 +\r\n                  legendWidthOnRight +\r\n                  ($$.axis.getY2AxisLabelPosition().isOuter ? 20 : 0);\r\n      }\r\n      else {\r\n          padding = ceil10($$.getAxisWidthByAxisId('y2')) + legendWidthOnRight;\r\n      }\r\n      if ($$.colorScale && $$.colorScale.node()) {\r\n          padding += $$.getColorScalePadding();\r\n      }\r\n      return padding;\r\n  };\r\n  ChartInternal.prototype.getParentRectValue = function (key) {\r\n      var parent = this.selectChart.node(), v;\r\n      while (parent && parent.tagName !== 'BODY') {\r\n          try {\r\n              v = parent.getBoundingClientRect()[key];\r\n          }\r\n          catch (e) {\r\n              if (key === 'width') {\r\n                  // In IE in certain cases getBoundingClientRect\r\n                  // will cause an \"unspecified error\"\r\n                  v = parent.offsetWidth;\r\n              }\r\n          }\r\n          if (v) {\r\n              break;\r\n          }\r\n          parent = parent.parentNode;\r\n      }\r\n      return v;\r\n  };\r\n  ChartInternal.prototype.getParentWidth = function () {\r\n      return this.getParentRectValue('width');\r\n  };\r\n  ChartInternal.prototype.getParentHeight = function () {\r\n      var h = this.selectChart.style('height');\r\n      return h.indexOf('px') > 0 ? +h.replace('px', '') : 0;\r\n  };\r\n  ChartInternal.prototype.getSvgLeft = function (withoutRecompute) {\r\n      var $$ = this, config = $$.config, hasLeftAxisRect = config.axis_rotated || (!config.axis_rotated && !config.axis_y_inner), leftAxisClass = config.axis_rotated ? CLASS.axisX : CLASS.axisY, leftAxis = $$.main.select('.' + leftAxisClass).node(), svgRect = leftAxis && hasLeftAxisRect\r\n          ? leftAxis.getBoundingClientRect()\r\n          : { right: 0 }, chartRect = $$.selectChart.node().getBoundingClientRect(), hasArc = $$.hasArcType(), svgLeft = svgRect.right -\r\n          chartRect.left -\r\n          (hasArc ? 0 : $$.getCurrentPaddingLeft(withoutRecompute));\r\n      return svgLeft > 0 ? svgLeft : 0;\r\n  };\r\n  ChartInternal.prototype.getAxisWidthByAxisId = function (id, withoutRecompute) {\r\n      var $$ = this, position = $$.axis.getLabelPositionById(id);\r\n      return ($$.axis.getMaxTickWidth(id, withoutRecompute) + (position.isInner ? 20 : 40));\r\n  };\r\n  ChartInternal.prototype.getHorizontalAxisHeight = function (axisId, isSubchart) {\r\n      var $$ = this, config = $$.config, h = 30;\r\n      if (axisId === 'x' && !(isDefined(isSubchart) && isSubchart ? config.subchart_axis_x_show : config.axis_x_show)) {\r\n          return 8;\r\n      }\r\n      if (axisId === 'x' && config.axis_x_height) {\r\n          return config.axis_x_height;\r\n      }\r\n      if (axisId === 'y' && !config.axis_y_show) {\r\n          return config.legend_show && !$$.isLegendRight && !$$.isLegendInset ? 10 : 1;\r\n      }\r\n      if (axisId === 'y2' && !config.axis_y2_show) {\r\n          return $$.rotated_padding_top;\r\n      }\r\n      // Calculate x axis height when tick rotated\r\n      if (axisId === 'x' && !config.axis_rotated && config.axis_x_tick_rotate) {\r\n          h =\r\n              30 +\r\n                  $$.axis.getMaxTickWidth(axisId) *\r\n                      Math.cos((Math.PI * (90 - Math.abs(config.axis_x_tick_rotate))) / 180);\r\n      }\r\n      // Calculate y axis height when tick rotated\r\n      if (axisId === 'y' && config.axis_rotated && config.axis_y_tick_rotate) {\r\n          h =\r\n              30 +\r\n                  $$.axis.getMaxTickWidth(axisId) *\r\n                      Math.cos((Math.PI * (90 - Math.abs(config.axis_y_tick_rotate))) / 180);\r\n      }\r\n      return (h +\r\n          ($$.axis.getLabelPositionById(axisId).isInner ? 0 : 10) +\r\n          (axisId === 'y2' ? -10 : 0));\r\n  };\n\n  ChartInternal.prototype.initBrush = function (scale) {\r\n      var $$ = this, d3 = $$.d3;\r\n      // TODO: dynamically change brushY/brushX according to axis_rotated.\r\n      $$.brush = ($$.config.axis_rotated ? d3.brushY() : d3.brushX())\r\n          .on('brush', function () {\r\n          var event = d3.event.sourceEvent;\r\n          if (event && event.type === 'zoom') {\r\n              return;\r\n          }\r\n          $$.redrawForBrush();\r\n      })\r\n          .on('end', function () {\r\n          var event = d3.event.sourceEvent;\r\n          if (event && event.type === 'zoom') {\r\n              return;\r\n          }\r\n          if ($$.brush.empty() && event && event.type !== 'end') {\r\n              $$.brush.clear();\r\n          }\r\n      });\r\n      $$.brush.updateExtent = function () {\r\n          var range = this.scale.range(), extent;\r\n          if ($$.config.axis_rotated) {\r\n              extent = [\r\n                  [0, range[0]],\r\n                  [$$.width2, range[1]]\r\n              ];\r\n          }\r\n          else {\r\n              extent = [\r\n                  [range[0], 0],\r\n                  [range[1], $$.height2]\r\n              ];\r\n          }\r\n          this.extent(extent);\r\n          return this;\r\n      };\r\n      $$.brush.updateScale = function (scale) {\r\n          this.scale = scale;\r\n          return this;\r\n      };\r\n      $$.brush.update = function (scale) {\r\n          this.updateScale(scale || $$.subX).updateExtent();\r\n          $$.context.select('.' + CLASS.brush).call(this);\r\n      };\r\n      $$.brush.clear = function () {\r\n          $$.context.select('.' + CLASS.brush).call($$.brush.move, null);\r\n      };\r\n      $$.brush.selection = function () {\r\n          return d3.brushSelection($$.context.select('.' + CLASS.brush).node());\r\n      };\r\n      $$.brush.selectionAsValue = function (selectionAsValue, withTransition) {\r\n          var selection, brush;\r\n          if (selectionAsValue) {\r\n              if ($$.context) {\r\n                  selection = [\r\n                      this.scale(selectionAsValue[0]),\r\n                      this.scale(selectionAsValue[1])\r\n                  ];\r\n                  brush = $$.context.select('.' + CLASS.brush);\r\n                  if (withTransition) {\r\n                      brush = brush.transition();\r\n                  }\r\n                  $$.brush.move(brush, selection);\r\n              }\r\n              return [];\r\n          }\r\n          selection = $$.brush.selection() || [0, 0];\r\n          return [this.scale.invert(selection[0]), this.scale.invert(selection[1])];\r\n      };\r\n      $$.brush.empty = function () {\r\n          var selection = $$.brush.selection();\r\n          return !selection || selection[0] === selection[1];\r\n      };\r\n      return $$.brush.updateScale(scale);\r\n  };\r\n  ChartInternal.prototype.initSubchart = function () {\r\n      var $$ = this, config = $$.config, context = ($$.context = $$.svg\r\n          .append('g')\r\n          .attr('transform', $$.getTranslate('context')));\r\n      // set style\r\n      context.style('visibility', 'visible');\r\n      // Define g for chart area\r\n      context\r\n          .append('g')\r\n          .attr('clip-path', $$.clipPathForSubchart)\r\n          .attr('class', CLASS.chart);\r\n      // Define g for bar chart area\r\n      context\r\n          .select('.' + CLASS.chart)\r\n          .append('g')\r\n          .attr('class', CLASS.chartBars);\r\n      // Define g for line chart area\r\n      context\r\n          .select('.' + CLASS.chart)\r\n          .append('g')\r\n          .attr('class', CLASS.chartLines);\r\n      // Add extent rect for Brush\r\n      context\r\n          .append('g')\r\n          .attr('clip-path', $$.clipPath)\r\n          .attr('class', CLASS.brush);\r\n      // ATTENTION: This must be called AFTER chart added\r\n      // Add Axis\r\n      $$.axes.subx = context\r\n          .append('g')\r\n          .attr('class', CLASS.axisX)\r\n          .attr('transform', $$.getTranslate('subx'))\r\n          .attr('clip-path', config.axis_rotated ? '' : $$.clipPathForXAxis)\r\n          .style('visibility', config.subchart_axis_x_show ? 'visible' : 'hidden');\r\n  };\r\n  ChartInternal.prototype.initSubchartBrush = function () {\r\n      var $$ = this;\r\n      // Add extent rect for Brush\r\n      $$.initBrush($$.subX).updateExtent();\r\n      $$.context.select('.' + CLASS.brush).call($$.brush);\r\n  };\r\n  ChartInternal.prototype.updateTargetsForSubchart = function (targets) {\r\n      var $$ = this, context = $$.context, config = $$.config, contextLineEnter, contextLine, contextBarEnter, contextBar, classChartBar = $$.classChartBar.bind($$), classBars = $$.classBars.bind($$), classChartLine = $$.classChartLine.bind($$), classLines = $$.classLines.bind($$), classAreas = $$.classAreas.bind($$);\r\n      //-- Bar --//\r\n      contextBar = context\r\n          .select('.' + CLASS.chartBars)\r\n          .selectAll('.' + CLASS.chartBar)\r\n          .data(targets);\r\n      contextBarEnter = contextBar\r\n          .enter()\r\n          .append('g')\r\n          .style('opacity', 0);\r\n      contextBarEnter.merge(contextBar).attr('class', classChartBar);\r\n      // Bars for each data\r\n      contextBarEnter.append('g').attr('class', classBars);\r\n      //-- Line --//\r\n      contextLine = context\r\n          .select('.' + CLASS.chartLines)\r\n          .selectAll('.' + CLASS.chartLine)\r\n          .data(targets);\r\n      contextLineEnter = contextLine\r\n          .enter()\r\n          .append('g')\r\n          .style('opacity', 0);\r\n      contextLineEnter.merge(contextLine).attr('class', classChartLine);\r\n      // Lines for each data\r\n      contextLineEnter.append('g').attr('class', classLines);\r\n      // Area\r\n      contextLineEnter.append('g').attr('class', classAreas);\r\n      //-- Brush --//\r\n      context\r\n          .selectAll('.' + CLASS.brush + ' rect')\r\n          .attr(config.axis_rotated ? 'width' : 'height', config.axis_rotated ? $$.width2 : $$.height2);\r\n  };\r\n  ChartInternal.prototype.updateBarForSubchart = function (durationForExit) {\r\n      var $$ = this;\r\n      var contextBar = $$.context\r\n          .selectAll('.' + CLASS.bars)\r\n          .selectAll('.' + CLASS.bar)\r\n          .data($$.barData.bind($$));\r\n      var contextBarEnter = contextBar\r\n          .enter()\r\n          .append('path')\r\n          .attr('class', $$.classBar.bind($$))\r\n          .style('stroke', 'none')\r\n          .style('fill', $$.color);\r\n      contextBar\r\n          .exit()\r\n          .transition()\r\n          .duration(durationForExit)\r\n          .style('opacity', 0)\r\n          .remove();\r\n      $$.contextBar = contextBarEnter\r\n          .merge(contextBar)\r\n          .style('opacity', $$.initialOpacity.bind($$));\r\n  };\r\n  ChartInternal.prototype.redrawBarForSubchart = function (drawBarOnSub, withTransition, duration) {\r\n      (withTransition\r\n          ? this.contextBar.transition(Math.random().toString()).duration(duration)\r\n          : this.contextBar)\r\n          .attr('d', drawBarOnSub)\r\n          .style('opacity', 1);\r\n  };\r\n  ChartInternal.prototype.updateLineForSubchart = function (durationForExit) {\r\n      var $$ = this;\r\n      var contextLine = $$.context\r\n          .selectAll('.' + CLASS.lines)\r\n          .selectAll('.' + CLASS.line)\r\n          .data($$.lineData.bind($$));\r\n      var contextLineEnter = contextLine\r\n          .enter()\r\n          .append('path')\r\n          .attr('class', $$.classLine.bind($$))\r\n          .style('stroke', $$.color);\r\n      contextLine\r\n          .exit()\r\n          .transition()\r\n          .duration(durationForExit)\r\n          .style('opacity', 0)\r\n          .remove();\r\n      $$.contextLine = contextLineEnter\r\n          .merge(contextLine)\r\n          .style('opacity', $$.initialOpacity.bind($$));\r\n  };\r\n  ChartInternal.prototype.redrawLineForSubchart = function (drawLineOnSub, withTransition, duration) {\r\n      (withTransition\r\n          ? this.contextLine.transition(Math.random().toString()).duration(duration)\r\n          : this.contextLine)\r\n          .attr('d', drawLineOnSub)\r\n          .style('opacity', 1);\r\n  };\r\n  ChartInternal.prototype.updateAreaForSubchart = function (durationForExit) {\r\n      var $$ = this, d3 = $$.d3;\r\n      var contextArea = $$.context\r\n          .selectAll('.' + CLASS.areas)\r\n          .selectAll('.' + CLASS.area)\r\n          .data($$.lineData.bind($$));\r\n      var contextAreaEnter = contextArea\r\n          .enter()\r\n          .append('path')\r\n          .attr('class', $$.classArea.bind($$))\r\n          .style('fill', $$.color)\r\n          .style('opacity', function () {\r\n          $$.orgAreaOpacity = +d3.select(this).style('opacity');\r\n          return 0;\r\n      });\r\n      contextArea\r\n          .exit()\r\n          .transition()\r\n          .duration(durationForExit)\r\n          .style('opacity', 0)\r\n          .remove();\r\n      $$.contextArea = contextAreaEnter.merge(contextArea).style('opacity', 0);\r\n  };\r\n  ChartInternal.prototype.redrawAreaForSubchart = function (drawAreaOnSub, withTransition, duration) {\r\n      (withTransition\r\n          ? this.contextArea.transition(Math.random().toString()).duration(duration)\r\n          : this.contextArea)\r\n          .attr('d', drawAreaOnSub)\r\n          .style('fill', this.color)\r\n          .style('opacity', this.orgAreaOpacity);\r\n  };\r\n  ChartInternal.prototype.redrawSubchart = function (withSubchart, transitions, duration, durationForExit, areaIndices, barIndices, lineIndices) {\r\n      var $$ = this, d3 = $$.d3, drawAreaOnSub, drawBarOnSub, drawLineOnSub;\r\n      // reflect main chart to extent on subchart if zoomed\r\n      if (d3.event && d3.event.type === 'zoom') {\r\n          $$.brush.selectionAsValue($$.x.orgDomain());\r\n      }\r\n      // update subchart elements if needed\r\n      if (withSubchart) {\r\n          // extent rect\r\n          if (!$$.brush.empty()) {\r\n              $$.brush.selectionAsValue($$.x.orgDomain());\r\n          }\r\n          // setup drawer - MEMO: this must be called after axis updated\r\n          drawAreaOnSub = $$.generateDrawArea(areaIndices, true);\r\n          drawBarOnSub = $$.generateDrawBar(barIndices, true);\r\n          drawLineOnSub = $$.generateDrawLine(lineIndices, true);\r\n          $$.updateBarForSubchart(duration);\r\n          $$.updateLineForSubchart(duration);\r\n          $$.updateAreaForSubchart(duration);\r\n          $$.redrawBarForSubchart(drawBarOnSub, duration, duration);\r\n          $$.redrawLineForSubchart(drawLineOnSub, duration, duration);\r\n          $$.redrawAreaForSubchart(drawAreaOnSub, duration, duration);\r\n      }\r\n  };\r\n  ChartInternal.prototype.redrawForBrush = function () {\r\n      var $$ = this, x = $$.x, d3 = $$.d3, s;\r\n      $$.redraw({\r\n          withTransition: false,\r\n          withY: $$.config.zoom_rescale,\r\n          withSubchart: false,\r\n          withUpdateXDomain: true,\r\n          withEventRect: false,\r\n          withDimension: false\r\n      });\r\n      // update zoom transation binded to event rect\r\n      s = d3.event.selection || $$.brush.scale.range();\r\n      $$.main\r\n          .select('.' + CLASS.eventRect)\r\n          .call($$.zoom.transform, d3.zoomIdentity.scale($$.width / (s[1] - s[0])).translate(-s[0], 0));\r\n      $$.config.subchart_onbrush.call($$.api, x.orgDomain());\r\n  };\r\n  ChartInternal.prototype.transformContext = function (withTransition, transitions) {\r\n      var $$ = this, subXAxis;\r\n      if (transitions && transitions.axisSubX) {\r\n          subXAxis = transitions.axisSubX;\r\n      }\r\n      else {\r\n          subXAxis = $$.context.select('.' + CLASS.axisX);\r\n          if (withTransition) {\r\n              subXAxis = subXAxis.transition();\r\n          }\r\n      }\r\n      $$.context.attr('transform', $$.getTranslate('context'));\r\n      subXAxis.attr('transform', $$.getTranslate('subx'));\r\n  };\r\n  ChartInternal.prototype.getDefaultSelection = function () {\r\n      var $$ = this, config = $$.config, selection = isFunction(config.axis_x_selection)\r\n          ? config.axis_x_selection($$.getXDomain($$.data.targets))\r\n          : config.axis_x_selection;\r\n      if ($$.isTimeSeries()) {\r\n          selection = [$$.parseDate(selection[0]), $$.parseDate(selection[1])];\r\n      }\r\n      return selection;\r\n  };\r\n  ChartInternal.prototype.removeSubchart = function () {\r\n      var $$ = this;\r\n      $$.brush = null;\r\n      $$.context.remove();\r\n      $$.context = null;\r\n  };\n\n  ChartInternal.prototype.initText = function () {\r\n      var $$ = this;\r\n      $$.main\r\n          .select('.' + CLASS.chart)\r\n          .append('g')\r\n          .attr('class', CLASS.chartTexts);\r\n      $$.mainText = $$.d3.selectAll([]);\r\n  };\r\n  ChartInternal.prototype.updateTargetsForText = function (targets) {\r\n      var $$ = this, classChartText = $$.classChartText.bind($$), classTexts = $$.classTexts.bind($$), classFocus = $$.classFocus.bind($$);\r\n      var mainText = $$.main\r\n          .select('.' + CLASS.chartTexts)\r\n          .selectAll('.' + CLASS.chartText)\r\n          .data(targets);\r\n      var mainTextEnter = mainText\r\n          .enter()\r\n          .append('g')\r\n          .attr('class', classChartText)\r\n          .style('opacity', 0)\r\n          .style('pointer-events', 'none');\r\n      mainTextEnter.append('g').attr('class', classTexts);\r\n      mainTextEnter.merge(mainText).attr('class', function (d) {\r\n          return classChartText(d) + classFocus(d);\r\n      });\r\n  };\r\n  ChartInternal.prototype.updateText = function (xForText, yForText, durationForExit) {\r\n      var $$ = this, config = $$.config, barOrLineData = $$.barOrLineData.bind($$), classText = $$.classText.bind($$);\r\n      var mainText = $$.main\r\n          .selectAll('.' + CLASS.texts)\r\n          .selectAll('.' + CLASS.text)\r\n          .data(barOrLineData);\r\n      var mainTextEnter = mainText\r\n          .enter()\r\n          .append('text')\r\n          .attr('class', classText)\r\n          .attr('text-anchor', function (d) {\r\n          return config.axis_rotated ? (d.value < 0 ? 'end' : 'start') : 'middle';\r\n      })\r\n          .style('stroke', 'none')\r\n          .attr('x', xForText)\r\n          .attr('y', yForText)\r\n          .style('fill', function (d) {\r\n          return $$.color(d);\r\n      })\r\n          .style('fill-opacity', 0);\r\n      $$.mainText = mainTextEnter.merge(mainText).text(function (d, i, j) {\r\n          return $$.dataLabelFormat(d.id)(d.value, d.id, i, j);\r\n      });\r\n      mainText\r\n          .exit()\r\n          .transition()\r\n          .duration(durationForExit)\r\n          .style('fill-opacity', 0)\r\n          .remove();\r\n  };\r\n  ChartInternal.prototype.redrawText = function (xForText, yForText, forFlow, withTransition, transition) {\r\n      return [\r\n          (withTransition ? this.mainText.transition(transition) : this.mainText)\r\n              .attr('x', xForText)\r\n              .attr('y', yForText)\r\n              .style('fill', this.color)\r\n              .style('fill-opacity', forFlow ? 0 : this.opacityForText.bind(this))\r\n      ];\r\n  };\r\n  ChartInternal.prototype.getTextRect = function (text, cls, element) {\r\n      var dummy = this.d3\r\n          .select('body')\r\n          .append('div')\r\n          .classed('c3', true), svg = dummy\r\n          .append('svg')\r\n          .style('visibility', 'hidden')\r\n          .style('position', 'fixed')\r\n          .style('top', 0)\r\n          .style('left', 0), font = this.d3.select(element).style('font'), rect;\r\n      svg\r\n          .selectAll('.dummy')\r\n          .data([text])\r\n          .enter()\r\n          .append('text')\r\n          .classed(cls ? cls : '', true)\r\n          .style('font', font)\r\n          .text(text)\r\n          .each(function () {\r\n          rect = getBBox(this);\r\n      });\r\n      dummy.remove();\r\n      return rect;\r\n  };\r\n  ChartInternal.prototype.generateXYForText = function (areaIndices, barIndices, lineIndices, forX) {\r\n      var $$ = this, getAreaPoints = $$.generateGetAreaPoints(areaIndices, false), getBarPoints = $$.generateGetBarPoints(barIndices, false), getLinePoints = $$.generateGetLinePoints(lineIndices, false), getter = forX ? $$.getXForText : $$.getYForText;\r\n      return function (d, i) {\r\n          var getPoints = $$.isAreaType(d)\r\n              ? getAreaPoints\r\n              : $$.isBarType(d)\r\n                  ? getBarPoints\r\n                  : getLinePoints;\r\n          return getter.call($$, getPoints(d, i), d, this);\r\n      };\r\n  };\r\n  ChartInternal.prototype.getXForText = function (points, d, textElement) {\r\n      var $$ = this, box = getBBox(textElement), xPos, padding;\r\n      if ($$.config.axis_rotated) {\r\n          padding = $$.isBarType(d) ? 4 : 6;\r\n          xPos = points[2][1] + padding * (d.value < 0 ? -1 : 1);\r\n      }\r\n      else {\r\n          xPos = $$.hasType('bar') ? (points[2][0] + points[0][0]) / 2 : points[0][0];\r\n      }\r\n      // show labels regardless of the domain if value is null\r\n      if (d.value === null) {\r\n          if (xPos > $$.width) {\r\n              xPos = $$.width - box.width;\r\n          }\r\n          else if (xPos < 0) {\r\n              xPos = 4;\r\n          }\r\n      }\r\n      return xPos;\r\n  };\r\n  ChartInternal.prototype.getYForText = function (points, d, textElement) {\r\n      var $$ = this, box = getBBox(textElement), yPos;\r\n      if ($$.config.axis_rotated) {\r\n          yPos = (points[0][0] + points[2][0] + box.height * 0.6) / 2;\r\n      }\r\n      else {\r\n          yPos = points[2][1];\r\n          if (d.value < 0 || (d.value === 0 && !$$.hasPositiveValue)) {\r\n              yPos += box.height;\r\n              if ($$.isBarType(d) && $$.isSafari()) {\r\n                  yPos -= 3;\r\n              }\r\n              else if (!$$.isBarType(d) && $$.isChrome()) {\r\n                  yPos += 3;\r\n              }\r\n          }\r\n          else {\r\n              yPos += $$.isBarType(d) ? -3 : -6;\r\n          }\r\n      }\r\n      // show labels regardless of the domain if value is null\r\n      if (d.value === null && !$$.config.axis_rotated) {\r\n          if (yPos < box.height) {\r\n              yPos = box.height;\r\n          }\r\n          else if (yPos > this.height) {\r\n              yPos = this.height - 4;\r\n          }\r\n      }\r\n      return yPos;\r\n  };\n\n  ChartInternal.prototype.initTitle = function () {\r\n      var $$ = this;\r\n      $$.title = $$.svg\r\n          .append('text')\r\n          .text($$.config.title_text)\r\n          .attr('class', $$.CLASS.title);\r\n  };\r\n  ChartInternal.prototype.redrawTitle = function () {\r\n      var $$ = this;\r\n      $$.title.attr('x', $$.xForTitle.bind($$)).attr('y', $$.yForTitle.bind($$));\r\n  };\r\n  ChartInternal.prototype.xForTitle = function () {\r\n      var $$ = this, config = $$.config, position = config.title_position || 'left', x;\r\n      if (position.indexOf('right') >= 0) {\r\n          x =\r\n              $$.currentWidth -\r\n                  $$.getTextRect($$.title.node().textContent, $$.CLASS.title, $$.title.node()).width -\r\n                  config.title_padding.right;\r\n      }\r\n      else if (position.indexOf('center') >= 0) {\r\n          x = Math.max(($$.currentWidth -\r\n              $$.getTextRect($$.title.node().textContent, $$.CLASS.title, $$.title.node()).width) /\r\n              2, 0);\r\n      }\r\n      else {\r\n          // left\r\n          x = config.title_padding.left;\r\n      }\r\n      return x;\r\n  };\r\n  ChartInternal.prototype.yForTitle = function () {\r\n      var $$ = this;\r\n      return ($$.config.title_padding.top +\r\n          $$.getTextRect($$.title.node().textContent, $$.CLASS.title, $$.title.node())\r\n              .height);\r\n  };\r\n  ChartInternal.prototype.getTitlePadding = function () {\r\n      var $$ = this;\r\n      return $$.yForTitle() + $$.config.title_padding.bottom;\r\n  };\n\n  function powerOfTen(d) {\r\n      return d / Math.pow(10, Math.ceil(Math.log(d) / Math.LN10 - 1e-12)) === 1;\r\n  }\r\n  ChartInternal.prototype.drawColorScale = function () {\r\n      var $$ = this, d3 = $$.d3, config = $$.config, target = $$.data.targets[0], barWidth, barHeight, axis, points, legendAxis, axisScale, inverseScale, height;\r\n      barWidth = !isNaN(config.stanford_scaleWidth)\r\n          ? config.stanford_scaleWidth\r\n          : 20;\r\n      barHeight = 5;\r\n      if (barHeight < 0 || barWidth < 0) {\r\n          throw Error(\"Colorscale's barheight and barwidth must be greater than 0.\");\r\n      }\r\n      height =\r\n          $$.height - config.stanford_padding.bottom - config.stanford_padding.top;\r\n      points = d3.range(config.stanford_padding.bottom, height, barHeight);\r\n      inverseScale = d3\r\n          .scaleSequential(target.colors)\r\n          .domain([points[points.length - 1], points[0]]);\r\n      if ($$.colorScale) {\r\n          $$.colorScale.remove();\r\n      }\r\n      $$.colorScale = $$.svg\r\n          .append('g')\r\n          .attr('width', 50)\r\n          .attr('height', height)\r\n          .attr('class', CLASS.colorScale);\r\n      $$.colorScale\r\n          .append('g')\r\n          .attr('transform', \"translate(0, \" + config.stanford_padding.top + \")\")\r\n          .selectAll('bars')\r\n          .data(points)\r\n          .enter()\r\n          .append('rect')\r\n          .attr('y', function (d, i) { return i * barHeight; })\r\n          .attr('x', 0)\r\n          .attr('width', barWidth)\r\n          .attr('height', barHeight)\r\n          .attr('fill', function (d) {\r\n          return inverseScale(d);\r\n      });\r\n      // Legend Axis\r\n      axisScale = d3\r\n          .scaleLog()\r\n          .domain([target.minEpochs, target.maxEpochs])\r\n          .range([\r\n          points[0] +\r\n              config.stanford_padding.top +\r\n              points[points.length - 1] +\r\n              barHeight -\r\n              1,\r\n          points[0] + config.stanford_padding.top\r\n      ]);\r\n      legendAxis = d3.axisRight(axisScale);\r\n      if (config.stanford_scaleFormat === 'pow10') {\r\n          legendAxis.tickValues([1, 10, 100, 1000, 10000, 100000, 1000000, 10000000]);\r\n      }\r\n      else if (isFunction(config.stanford_scaleFormat)) {\r\n          legendAxis.tickFormat(config.stanford_scaleFormat);\r\n      }\r\n      else {\r\n          legendAxis.tickFormat(d3.format('d'));\r\n      }\r\n      if (isFunction(config.stanford_scaleValues)) {\r\n          legendAxis.tickValues(config.stanford_scaleValues(target.minEpochs, target.maxEpochs));\r\n      }\r\n      // Draw Axis\r\n      axis = $$.colorScale\r\n          .append('g')\r\n          .attr('class', 'legend axis')\r\n          .attr('transform', \"translate(\" + barWidth + \",0)\")\r\n          .call(legendAxis);\r\n      if (config.stanford_scaleFormat === 'pow10') {\r\n          axis\r\n              .selectAll('.tick text')\r\n              .text(null)\r\n              .filter(powerOfTen)\r\n              .text(10)\r\n              .append('tspan')\r\n              .attr('dy', '-.7em') // https://bl.ocks.org/mbostock/6738229\r\n              .text(function (d) {\r\n              return Math.round(Math.log(d) / Math.LN10);\r\n          });\r\n      }\r\n      $$.colorScale.attr('transform', \"translate(\" + ($$.currentWidth - $$.xForColorScale()) + \", 0)\");\r\n  };\r\n  ChartInternal.prototype.xForColorScale = function () {\r\n      var $$ = this;\r\n      return $$.config.stanford_padding.right + getBBox($$.colorScale.node()).width;\r\n  };\r\n  ChartInternal.prototype.getColorScalePadding = function () {\r\n      var $$ = this;\r\n      return $$.xForColorScale() + $$.config.stanford_padding.left + 20;\r\n  };\n\n  ChartInternal.prototype.isStanfordGraphType = function () {\r\n      var $$ = this;\r\n      return $$.config.data_type === 'stanford';\r\n  };\r\n  ChartInternal.prototype.initStanfordData = function () {\r\n      var $$ = this, d3 = $$.d3, config = $$.config, target = $$.data.targets[0], epochs, maxEpochs, minEpochs;\r\n      // Make larger values appear on top\r\n      target.values.sort(compareEpochs);\r\n      // Get array of epochs\r\n      epochs = target.values.map(function (a) { return a.epochs; });\r\n      minEpochs = !isNaN(config.stanford_scaleMin)\r\n          ? config.stanford_scaleMin\r\n          : d3.min(epochs);\r\n      maxEpochs = !isNaN(config.stanford_scaleMax)\r\n          ? config.stanford_scaleMax\r\n          : d3.max(epochs);\r\n      if (minEpochs > maxEpochs) {\r\n          throw Error('Number of minEpochs has to be smaller than maxEpochs');\r\n      }\r\n      target.colors = isFunction(config.stanford_colors)\r\n          ? config.stanford_colors\r\n          : d3.interpolateHslLong(d3.hsl(250, 1, 0.5), d3.hsl(0, 1, 0.5));\r\n      target.colorscale = d3\r\n          .scaleSequentialLog(target.colors)\r\n          .domain([minEpochs, maxEpochs]);\r\n      target.minEpochs = minEpochs;\r\n      target.maxEpochs = maxEpochs;\r\n  };\r\n  ChartInternal.prototype.getStanfordPointColor = function (d) {\r\n      var $$ = this, target = $$.data.targets[0];\r\n      return target.colorscale(d.epochs);\r\n  };\r\n  // http://jsfiddle.net/Xotic750/KtzLq/\r\n  ChartInternal.prototype.getCentroid = function (points) {\r\n      var area = getRegionArea(points);\r\n      var x = 0, y = 0, i, j, f, point1, point2;\r\n      for (i = 0, j = points.length - 1; i < points.length; j = i, i += 1) {\r\n          point1 = points[i];\r\n          point2 = points[j];\r\n          f = point1.x * point2.y - point2.x * point1.y;\r\n          x += (point1.x + point2.x) * f;\r\n          y += (point1.y + point2.y) * f;\r\n      }\r\n      f = area * 6;\r\n      return {\r\n          x: x / f,\r\n          y: y / f\r\n      };\r\n  };\r\n  ChartInternal.prototype.getStanfordTooltipTitle = function (d) {\r\n      var $$ = this, labelX = $$.axis.getLabelText('x'), labelY = $$.axis.getLabelText('y');\r\n      return \"\\n      <tr><th>\" + (labelX ? sanitise(labelX) : 'x') + \"</th><th class='value'>\" + d.x + \"</th></tr>\\n      <tr><th>\" + (labelY ? sanitise(labelY) : 'y') + \"</th><th class='value'>\" + d.value + \"</th></tr>\\n    \";\r\n  };\r\n  ChartInternal.prototype.countEpochsInRegion = function (region) {\r\n      var $$ = this, target = $$.data.targets[0], total, count;\r\n      total = target.values.reduce(function (accumulator, currentValue) { return accumulator + Number(currentValue.epochs); }, 0);\r\n      count = target.values.reduce(function (accumulator, currentValue) {\r\n          if (pointInRegion(currentValue, region)) {\r\n              return accumulator + Number(currentValue.epochs);\r\n          }\r\n          return accumulator;\r\n      }, 0);\r\n      return {\r\n          value: count,\r\n          percentage: count !== 0 ? ((count / total) * 100).toFixed(1) : 0\r\n      };\r\n  };\r\n  var getRegionArea = function (points) {\r\n      // thanks to: https://stackoverflow.com/questions/16282330/find-centerpoint-of-polygon-in-javascript\r\n      var area = 0, i, j, point1, point2;\r\n      for (i = 0, j = points.length - 1; i < points.length; j = i, i += 1) {\r\n          point1 = points[i];\r\n          point2 = points[j];\r\n          area += point1.x * point2.y;\r\n          area -= point1.y * point2.x;\r\n      }\r\n      area /= 2;\r\n      return area;\r\n  };\r\n  var pointInRegion = function (point, region) {\r\n      // thanks to: http://bl.ocks.org/bycoffe/5575904\r\n      // ray-casting algorithm based on\r\n      // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html\r\n      var xi, yi, yj, xj, intersect, x = point.x, y = point.value, inside = false;\r\n      for (var i = 0, j = region.length - 1; i < region.length; j = i++) {\r\n          xi = region[i].x;\r\n          yi = region[i].y;\r\n          xj = region[j].x;\r\n          yj = region[j].y;\r\n          intersect = yi > y !== yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi;\r\n          if (intersect) {\r\n              inside = !inside;\r\n          }\r\n      }\r\n      return inside;\r\n  };\r\n  var compareEpochs = function (a, b) {\r\n      if (a.epochs < b.epochs) {\r\n          return -1;\r\n      }\r\n      if (a.epochs > b.epochs) {\r\n          return 1;\r\n      }\r\n      return 0;\r\n  };\n\n  ChartInternal.prototype.initStanfordElements = function () {\r\n      var $$ = this;\r\n      // Avoid blocking eventRect\r\n      $$.stanfordElements = $$.main\r\n          .select('.' + CLASS.chart)\r\n          .append('g')\r\n          .attr('class', CLASS.stanfordElements);\r\n      $$.stanfordElements.append('g').attr('class', CLASS.stanfordLines);\r\n      $$.stanfordElements.append('g').attr('class', CLASS.stanfordTexts);\r\n      $$.stanfordElements.append('g').attr('class', CLASS.stanfordRegions);\r\n  };\r\n  ChartInternal.prototype.updateStanfordElements = function (duration) {\r\n      var $$ = this, main = $$.main, config = $$.config, stanfordLine, stanfordLineEnter, stanfordRegion, stanfordRegionEnter, stanfordText, stanfordTextEnter, xvCustom = $$.xvCustom.bind($$), yvCustom = $$.yvCustom.bind($$), countPointsInRegion = $$.countEpochsInRegion.bind($$);\r\n      // Stanford-Lines\r\n      stanfordLine = main\r\n          .select('.' + CLASS.stanfordLines)\r\n          .style('shape-rendering', 'geometricprecision')\r\n          .selectAll('.' + CLASS.stanfordLine)\r\n          .data(config.stanford_lines);\r\n      // enter\r\n      stanfordLineEnter = stanfordLine\r\n          .enter()\r\n          .append('g')\r\n          .attr('class', function (d) {\r\n          return CLASS.stanfordLine + (d['class'] ? ' ' + d['class'] : '');\r\n      });\r\n      stanfordLineEnter\r\n          .append('line')\r\n          .attr('x1', function (d) {\r\n          return config.axis_rotated ? yvCustom(d, 'value_y1') : xvCustom(d, 'value_x1');\r\n      })\r\n          .attr('x2', function (d) {\r\n          return config.axis_rotated ? yvCustom(d, 'value_y2') : xvCustom(d, 'value_x2');\r\n      })\r\n          .attr('y1', function (d) {\r\n          return config.axis_rotated ? xvCustom(d, 'value_x1') : yvCustom(d, 'value_y1');\r\n      })\r\n          .attr('y2', function (d) {\r\n          return config.axis_rotated ? xvCustom(d, 'value_x2') : yvCustom(d, 'value_y2');\r\n      })\r\n          .style('opacity', 0);\r\n      // update\r\n      $$.stanfordLines = stanfordLineEnter.merge(stanfordLine);\r\n      $$.stanfordLines\r\n          .select('line')\r\n          .transition()\r\n          .duration(duration)\r\n          .attr('x1', function (d) {\r\n          return config.axis_rotated ? yvCustom(d, 'value_y1') : xvCustom(d, 'value_x1');\r\n      })\r\n          .attr('x2', function (d) {\r\n          return config.axis_rotated ? yvCustom(d, 'value_y2') : xvCustom(d, 'value_x2');\r\n      })\r\n          .attr('y1', function (d) {\r\n          return config.axis_rotated ? xvCustom(d, 'value_x1') : yvCustom(d, 'value_y1');\r\n      })\r\n          .attr('y2', function (d) {\r\n          return config.axis_rotated ? xvCustom(d, 'value_x2') : yvCustom(d, 'value_y2');\r\n      })\r\n          .style('opacity', 1);\r\n      // exit\r\n      stanfordLine\r\n          .exit()\r\n          .transition()\r\n          .duration(duration)\r\n          .style('opacity', 0)\r\n          .remove();\r\n      // Stanford-Text\r\n      stanfordText = main\r\n          .select('.' + CLASS.stanfordTexts)\r\n          .selectAll('.' + CLASS.stanfordText)\r\n          .data(config.stanford_texts);\r\n      // enter\r\n      stanfordTextEnter = stanfordText\r\n          .enter()\r\n          .append('g')\r\n          .attr('class', function (d) {\r\n          return CLASS.stanfordText + (d['class'] ? ' ' + d['class'] : '');\r\n      });\r\n      stanfordTextEnter\r\n          .append('text')\r\n          .attr('x', function (d) { return (config.axis_rotated ? yvCustom(d, 'y') : xvCustom(d, 'x')); })\r\n          .attr('y', function (d) { return (config.axis_rotated ? xvCustom(d, 'x') : yvCustom(d, 'y')); })\r\n          .style('opacity', 0);\r\n      // update\r\n      $$.stanfordTexts = stanfordTextEnter.merge(stanfordText);\r\n      $$.stanfordTexts\r\n          .select('text')\r\n          .transition()\r\n          .duration(duration)\r\n          .attr('x', function (d) { return (config.axis_rotated ? yvCustom(d, 'y') : xvCustom(d, 'x')); })\r\n          .attr('y', function (d) { return (config.axis_rotated ? xvCustom(d, 'x') : yvCustom(d, 'y')); })\r\n          .text(function (d) {\r\n          return d.content;\r\n      })\r\n          .style('opacity', 1);\r\n      // exit\r\n      stanfordText\r\n          .exit()\r\n          .transition()\r\n          .duration(duration)\r\n          .style('opacity', 0)\r\n          .remove();\r\n      // Stanford-Regions\r\n      stanfordRegion = main\r\n          .select('.' + CLASS.stanfordRegions)\r\n          .selectAll('.' + CLASS.stanfordRegion)\r\n          .data(config.stanford_regions);\r\n      // enter\r\n      stanfordRegionEnter = stanfordRegion\r\n          .enter()\r\n          .append('g')\r\n          .attr('class', function (d) {\r\n          return CLASS.stanfordRegion + (d['class'] ? ' ' + d['class'] : '');\r\n      });\r\n      stanfordRegionEnter\r\n          .append('polygon')\r\n          .attr('points', function (d) {\r\n          return d.points\r\n              .map(function (value) {\r\n              return [\r\n                  config.axis_rotated ? yvCustom(value, 'y') : xvCustom(value, 'x'),\r\n                  config.axis_rotated ? xvCustom(value, 'x') : yvCustom(value, 'y')\r\n              ].join(',');\r\n          })\r\n              .join(' ');\r\n      })\r\n          .style('opacity', 0);\r\n      stanfordRegionEnter\r\n          .append('text')\r\n          .attr('x', function (d) { return $$.getCentroid(d.points).x; })\r\n          .attr('y', function (d) { return $$.getCentroid(d.points).y; })\r\n          .style('opacity', 0);\r\n      // update\r\n      $$.stanfordRegions = stanfordRegionEnter.merge(stanfordRegion);\r\n      $$.stanfordRegions\r\n          .select('polygon')\r\n          .transition()\r\n          .duration(duration)\r\n          .attr('points', function (d) {\r\n          return d.points\r\n              .map(function (value) {\r\n              return [\r\n                  config.axis_rotated ? yvCustom(value, 'y') : xvCustom(value, 'x'),\r\n                  config.axis_rotated ? xvCustom(value, 'x') : yvCustom(value, 'y')\r\n              ].join(',');\r\n          })\r\n              .join(' ');\r\n      })\r\n          .style('opacity', function (d) {\r\n          return d.opacity ? d.opacity : 0.2;\r\n      });\r\n      $$.stanfordRegions\r\n          .select('text')\r\n          .transition()\r\n          .duration(duration)\r\n          .attr('x', function (d) {\r\n          return config.axis_rotated\r\n              ? yvCustom($$.getCentroid(d.points), 'y')\r\n              : xvCustom($$.getCentroid(d.points), 'x');\r\n      })\r\n          .attr('y', function (d) {\r\n          return config.axis_rotated\r\n              ? xvCustom($$.getCentroid(d.points), 'x')\r\n              : yvCustom($$.getCentroid(d.points), 'y');\r\n      })\r\n          .text(function (d) {\r\n          if (d.text) {\r\n              var value, percentage, temp;\r\n              if ($$.isStanfordGraphType()) {\r\n                  temp = countPointsInRegion(d.points);\r\n                  value = temp.value;\r\n                  percentage = temp.percentage;\r\n              }\r\n              return d.text(value, percentage);\r\n          }\r\n          return '';\r\n      })\r\n          .attr('text-anchor', 'middle')\r\n          .attr('dominant-baseline', 'middle')\r\n          .style('opacity', 1);\r\n      // exit\r\n      stanfordRegion\r\n          .exit()\r\n          .transition()\r\n          .duration(duration)\r\n          .style('opacity', 0)\r\n          .remove();\r\n  };\n\n  ChartInternal.prototype.initTooltip = function () {\r\n      var $$ = this, config = $$.config, i;\r\n      $$.tooltip = $$.selectChart\r\n          .style('position', 'relative')\r\n          .append('div')\r\n          .attr('class', CLASS.tooltipContainer)\r\n          .style('position', 'absolute')\r\n          .style('pointer-events', 'none')\r\n          .style('display', 'none');\r\n      // Show tooltip if needed\r\n      if (config.tooltip_init_show) {\r\n          if ($$.isTimeSeries() && isString(config.tooltip_init_x)) {\r\n              config.tooltip_init_x = $$.parseDate(config.tooltip_init_x);\r\n              for (i = 0; i < $$.data.targets[0].values.length; i++) {\r\n                  if ($$.data.targets[0].values[i].x - config.tooltip_init_x === 0) {\r\n                      break;\r\n                  }\r\n              }\r\n              config.tooltip_init_x = i;\r\n          }\r\n          $$.tooltip.html(config.tooltip_contents.call($$, $$.data.targets.map(function (d) {\r\n              return $$.addName(d.values[config.tooltip_init_x]);\r\n          }), $$.axis.getXAxisTickFormat(), $$.getYFormat($$.hasArcType()), $$.color));\r\n          $$.tooltip\r\n              .style('top', config.tooltip_init_position.top)\r\n              .style('left', config.tooltip_init_position.left)\r\n              .style('display', 'block');\r\n      }\r\n  };\r\n  ChartInternal.prototype.getTooltipSortFunction = function () {\r\n      var $$ = this, config = $$.config;\r\n      if (config.data_groups.length === 0 || config.tooltip_order !== undefined) {\r\n          // if data are not grouped or if an order is specified\r\n          // for the tooltip values we sort them by their values\r\n          var order = config.tooltip_order;\r\n          if (order === undefined) {\r\n              order = config.data_order;\r\n          }\r\n          var valueOf = function (obj) {\r\n              return obj ? obj.value : null;\r\n          };\r\n          // if data are not grouped, we sort them by their value\r\n          if (isString(order) && order.toLowerCase() === 'asc') {\r\n              return function (a, b) {\r\n                  return valueOf(a) - valueOf(b);\r\n              };\r\n          }\r\n          else if (isString(order) && order.toLowerCase() === 'desc') {\r\n              return function (a, b) {\r\n                  return valueOf(b) - valueOf(a);\r\n              };\r\n          }\r\n          else if (isFunction(order)) {\r\n              // if the function is from data_order we need\r\n              // to wrap the returned function in order to format\r\n              // the sorted value to the expected format\r\n              var sortFunction = order;\r\n              if (config.tooltip_order === undefined) {\r\n                  sortFunction = function (a, b) {\r\n                      return order(a\r\n                          ? {\r\n                              id: a.id,\r\n                              values: [a]\r\n                          }\r\n                          : null, b\r\n                          ? {\r\n                              id: b.id,\r\n                              values: [b]\r\n                          }\r\n                          : null);\r\n                  };\r\n              }\r\n              return sortFunction;\r\n          }\r\n          else if (isArray(order)) {\r\n              return function (a, b) {\r\n                  return order.indexOf(a.id) - order.indexOf(b.id);\r\n              };\r\n          }\r\n      }\r\n      else {\r\n          // if data are grouped, we follow the order of grouped targets\r\n          var ids = $$.orderTargets($$.data.targets).map(function (i) {\r\n              return i.id;\r\n          });\r\n          // if it was either asc or desc we need to invert the order\r\n          // returned by orderTargets\r\n          if ($$.isOrderAsc() || $$.isOrderDesc()) {\r\n              ids = ids.reverse();\r\n          }\r\n          return function (a, b) {\r\n              return ids.indexOf(a.id) - ids.indexOf(b.id);\r\n          };\r\n      }\r\n  };\r\n  ChartInternal.prototype.getTooltipContent = function (d, defaultTitleFormat, defaultValueFormat, color) {\r\n      var $$ = this, config = $$.config, titleFormat = config.tooltip_format_title || defaultTitleFormat, nameFormat = config.tooltip_format_name ||\r\n          function (name) {\r\n              return name;\r\n          }, text, i, title, value, name, bgcolor;\r\n      var valueFormat = config.tooltip_format_value;\r\n      if (!valueFormat) {\r\n          valueFormat = $$.isTargetNormalized(d.id)\r\n              ? function (v, ratio) { return (ratio * 100).toFixed(2) + \"%\"; }\r\n              : defaultValueFormat;\r\n      }\r\n      var tooltipSortFunction = this.getTooltipSortFunction();\r\n      if (tooltipSortFunction) {\r\n          d.sort(tooltipSortFunction);\r\n      }\r\n      for (i = 0; i < d.length; i++) {\r\n          if (!(d[i] && (d[i].value || d[i].value === 0))) {\r\n              continue;\r\n          }\r\n          if ($$.isStanfordGraphType()) {\r\n              // Custom tooltip for stanford plots\r\n              if (!text) {\r\n                  title = $$.getStanfordTooltipTitle(d[i]);\r\n                  text = \"<table class='\" + $$.CLASS.tooltip + \"'>\" + title;\r\n              }\r\n              bgcolor = $$.getStanfordPointColor(d[i]);\r\n              name = sanitise(config.data_epochs); // Epochs key name\r\n              value = d[i].epochs;\r\n          }\r\n          else {\r\n              // Regular tooltip\r\n              if (!text) {\r\n                  title = sanitise(titleFormat ? titleFormat(d[i].x, d[i].index) : d[i].x);\r\n                  text =\r\n                      \"<table class='\" +\r\n                          $$.CLASS.tooltip +\r\n                          \"'>\" +\r\n                          (title || title === 0\r\n                              ? \"<tr><th colspan='2'>\" + title + '</th></tr>'\r\n                              : '');\r\n              }\r\n              value = sanitise(valueFormat(d[i].value, d[i].ratio, d[i].id, d[i].index, d));\r\n              if (value !== undefined) {\r\n                  // Skip elements when their name is set to null\r\n                  if (d[i].name === null) {\r\n                      continue;\r\n                  }\r\n                  name = sanitise(nameFormat(d[i].name, d[i].ratio, d[i].id, d[i].index));\r\n                  bgcolor = $$.levelColor ? $$.levelColor(d[i].value) : color(d[i].id);\r\n              }\r\n          }\r\n          if (value !== undefined) {\r\n              text +=\r\n                  \"<tr class='\" +\r\n                      $$.CLASS.tooltipName +\r\n                      '-' +\r\n                      $$.getTargetSelectorSuffix(d[i].id) +\r\n                      \"'>\";\r\n              text +=\r\n                  \"<td class='name'><span style='background-color:\" +\r\n                      bgcolor +\r\n                      \"'></span>\" +\r\n                      name +\r\n                      '</td>';\r\n              text += \"<td class='value'>\" + value + '</td>';\r\n              text += '</tr>';\r\n          }\r\n      }\r\n      return text + '</table>';\r\n  };\r\n  ChartInternal.prototype.tooltipPosition = function (dataToShow, tWidth, tHeight, element) {\r\n      var $$ = this, config = $$.config, d3 = $$.d3;\r\n      var svgLeft, tooltipLeft, tooltipRight, tooltipTop, chartRight;\r\n      var forArc = $$.hasArcType(), mouse = d3.mouse(element);\r\n      // Determin tooltip position\r\n      if (forArc) {\r\n          tooltipLeft =\r\n              ($$.width - ($$.isLegendRight ? $$.getLegendWidth() : 0)) / 2 + mouse[0];\r\n          tooltipTop =\r\n              ($$.hasType('gauge') ? $$.height : $$.height / 2) + mouse[1] + 20;\r\n      }\r\n      else {\r\n          svgLeft = $$.getSvgLeft(true);\r\n          if (config.axis_rotated) {\r\n              tooltipLeft = svgLeft + mouse[0] + 100;\r\n              tooltipRight = tooltipLeft + tWidth;\r\n              chartRight = $$.currentWidth - $$.getCurrentPaddingRight();\r\n              tooltipTop = $$.x(dataToShow[0].x) + 20;\r\n          }\r\n          else {\r\n              tooltipLeft =\r\n                  svgLeft + $$.getCurrentPaddingLeft(true) + $$.x(dataToShow[0].x) + 20;\r\n              tooltipRight = tooltipLeft + tWidth;\r\n              chartRight = svgLeft + $$.currentWidth - $$.getCurrentPaddingRight();\r\n              tooltipTop = mouse[1] + 15;\r\n          }\r\n          if (tooltipRight > chartRight) {\r\n              // 20 is needed for Firefox to keep tooltip width\r\n              tooltipLeft -= tooltipRight - chartRight + 20;\r\n          }\r\n          if (tooltipTop + tHeight > $$.currentHeight) {\r\n              tooltipTop -= tHeight + 30;\r\n          }\r\n      }\r\n      if (tooltipTop < 0) {\r\n          tooltipTop = 0;\r\n      }\r\n      return {\r\n          top: tooltipTop,\r\n          left: tooltipLeft\r\n      };\r\n  };\r\n  ChartInternal.prototype.showTooltip = function (selectedData, element) {\r\n      var $$ = this, config = $$.config;\r\n      var tWidth, tHeight, position;\r\n      var forArc = $$.hasArcType(), dataToShow = selectedData.filter(function (d) {\r\n          return d && isValue(d.value);\r\n      }), positionFunction = config.tooltip_position || ChartInternal.prototype.tooltipPosition;\r\n      if (dataToShow.length === 0 || !config.tooltip_show) {\r\n          $$.hideTooltip();\r\n          return;\r\n      }\r\n      $$.tooltip\r\n          .html(config.tooltip_contents.call($$, selectedData, $$.axis.getXAxisTickFormat(), $$.getYFormat(forArc), $$.color))\r\n          .style('display', 'block');\r\n      // Get tooltip dimensions\r\n      tWidth = $$.tooltip.property('offsetWidth');\r\n      tHeight = $$.tooltip.property('offsetHeight');\r\n      position = positionFunction.call(this, dataToShow, tWidth, tHeight, element);\r\n      // Set tooltip\r\n      $$.tooltip\r\n          .style('top', position.top + 'px')\r\n          .style('left', position.left + 'px');\r\n  };\r\n  ChartInternal.prototype.hideTooltip = function () {\r\n      this.tooltip.style('display', 'none');\r\n  };\n\n  ChartInternal.prototype.setTargetType = function (targetIds, type) {\r\n      var $$ = this, config = $$.config;\r\n      $$.mapToTargetIds(targetIds).forEach(function (id) {\r\n          $$.withoutFadeIn[id] = type === config.data_types[id];\r\n          config.data_types[id] = type;\r\n      });\r\n      if (!targetIds) {\r\n          config.data_type = type;\r\n      }\r\n  };\r\n  ChartInternal.prototype.hasType = function (type, targets) {\r\n      var $$ = this, types = $$.config.data_types, has = false;\r\n      targets = targets || $$.data.targets;\r\n      if (targets && targets.length) {\r\n          targets.forEach(function (target) {\r\n              var t = types[target.id];\r\n              if ((t && t.indexOf(type) >= 0) || (!t && type === 'line')) {\r\n                  has = true;\r\n              }\r\n          });\r\n      }\r\n      else if (Object.keys(types).length) {\r\n          Object.keys(types).forEach(function (id) {\r\n              if (types[id] === type) {\r\n                  has = true;\r\n              }\r\n          });\r\n      }\r\n      else {\r\n          has = $$.config.data_type === type;\r\n      }\r\n      return has;\r\n  };\r\n  ChartInternal.prototype.hasArcType = function (targets) {\r\n      return (this.hasType('pie', targets) ||\r\n          this.hasType('donut', targets) ||\r\n          this.hasType('gauge', targets));\r\n  };\r\n  ChartInternal.prototype.isLineType = function (d) {\r\n      var config = this.config, id = isString(d) ? d : d.id;\r\n      return (!config.data_types[id] ||\r\n          ['line', 'spline', 'area', 'area-spline', 'step', 'area-step'].indexOf(config.data_types[id]) >= 0);\r\n  };\r\n  ChartInternal.prototype.isStepType = function (d) {\r\n      var id = isString(d) ? d : d.id;\r\n      return ['step', 'area-step'].indexOf(this.config.data_types[id]) >= 0;\r\n  };\r\n  ChartInternal.prototype.isSplineType = function (d) {\r\n      var id = isString(d) ? d : d.id;\r\n      return ['spline', 'area-spline'].indexOf(this.config.data_types[id]) >= 0;\r\n  };\r\n  ChartInternal.prototype.isAreaType = function (d) {\r\n      var id = isString(d) ? d : d.id;\r\n      return (['area', 'area-spline', 'area-step'].indexOf(this.config.data_types[id]) >=\r\n          0);\r\n  };\r\n  ChartInternal.prototype.isBarType = function (d) {\r\n      var id = isString(d) ? d : d.id;\r\n      return this.config.data_types[id] === 'bar';\r\n  };\r\n  ChartInternal.prototype.isScatterType = function (d) {\r\n      var id = isString(d) ? d : d.id;\r\n      return this.config.data_types[id] === 'scatter';\r\n  };\r\n  ChartInternal.prototype.isStanfordType = function (d) {\r\n      var id = isString(d) ? d : d.id;\r\n      return this.config.data_types[id] === 'stanford';\r\n  };\r\n  ChartInternal.prototype.isPieType = function (d) {\r\n      var id = isString(d) ? d : d.id;\r\n      return this.config.data_types[id] === 'pie';\r\n  };\r\n  ChartInternal.prototype.isGaugeType = function (d) {\r\n      var id = isString(d) ? d : d.id;\r\n      return this.config.data_types[id] === 'gauge';\r\n  };\r\n  ChartInternal.prototype.isDonutType = function (d) {\r\n      var id = isString(d) ? d : d.id;\r\n      return this.config.data_types[id] === 'donut';\r\n  };\r\n  ChartInternal.prototype.isArcType = function (d) {\r\n      return this.isPieType(d) || this.isDonutType(d) || this.isGaugeType(d);\r\n  };\r\n  ChartInternal.prototype.lineData = function (d) {\r\n      return this.isLineType(d) ? [d] : [];\r\n  };\r\n  ChartInternal.prototype.arcData = function (d) {\r\n      return this.isArcType(d.data) ? [d] : [];\r\n  };\r\n  /* not used\r\n   function scatterData(d) {\r\n   return isScatterType(d) ? d.values : [];\r\n   }\r\n   */\r\n  ChartInternal.prototype.barData = function (d) {\r\n      return this.isBarType(d) ? d.values : [];\r\n  };\r\n  ChartInternal.prototype.lineOrScatterOrStanfordData = function (d) {\r\n      return this.isLineType(d) || this.isScatterType(d) || this.isStanfordType(d)\r\n          ? d.values\r\n          : [];\r\n  };\r\n  ChartInternal.prototype.barOrLineData = function (d) {\r\n      return this.isBarType(d) || this.isLineType(d) ? d.values : [];\r\n  };\n\n  ChartInternal.prototype.isSafari = function () {\r\n      var ua = window.navigator.userAgent;\r\n      return ua.indexOf('Safari') >= 0 && ua.indexOf('Chrome') < 0;\r\n  };\r\n  ChartInternal.prototype.isChrome = function () {\r\n      var ua = window.navigator.userAgent;\r\n      return ua.indexOf('Chrome') >= 0;\r\n  };\n\n  ChartInternal.prototype.initZoom = function () {\r\n      var $$ = this, d3 = $$.d3, config = $$.config, startEvent;\r\n      $$.zoom = d3\r\n          .zoom()\r\n          .on('start', function () {\r\n          if (config.zoom_type !== 'scroll') {\r\n              return;\r\n          }\r\n          var e = d3.event.sourceEvent;\r\n          if (e && e.type === 'brush') {\r\n              return;\r\n          }\r\n          startEvent = e;\r\n          config.zoom_onzoomstart.call($$.api, e);\r\n      })\r\n          .on('zoom', function () {\r\n          if (config.zoom_type !== 'scroll') {\r\n              return;\r\n          }\r\n          var e = d3.event.sourceEvent;\r\n          if (e && e.type === 'brush') {\r\n              return;\r\n          }\r\n          $$.redrawForZoom();\r\n          config.zoom_onzoom.call($$.api, $$.x.orgDomain());\r\n      })\r\n          .on('end', function () {\r\n          if (config.zoom_type !== 'scroll') {\r\n              return;\r\n          }\r\n          var e = d3.event.sourceEvent;\r\n          if (e && e.type === 'brush') {\r\n              return;\r\n          }\r\n          // if click, do nothing. otherwise, click interaction will be canceled.\r\n          if (e &&\r\n              startEvent.clientX === e.clientX &&\r\n              startEvent.clientY === e.clientY) {\r\n              return;\r\n          }\r\n          config.zoom_onzoomend.call($$.api, $$.x.orgDomain());\r\n      });\r\n      $$.zoom.updateDomain = function () {\r\n          if (d3.event && d3.event.transform) {\r\n              if (config.axis_rotated && config.zoom_type === 'scroll' && d3.event.sourceEvent.type === 'mousemove') {\r\n                  // we're moving the mouse in a rotated chart with zoom = \"scroll\", so we need rescaleY (i.e. vertical)\r\n                  $$.x.domain(d3.event.transform.rescaleY($$.subX).domain());\r\n              }\r\n              else {\r\n                  $$.x.domain(d3.event.transform.rescaleX($$.subX).domain());\r\n              }\r\n          }\r\n          return this;\r\n      };\r\n      $$.zoom.updateExtent = function () {\r\n          this.scaleExtent([1, Infinity])\r\n              .translateExtent([\r\n              [0, 0],\r\n              [$$.width, $$.height]\r\n          ])\r\n              .extent([\r\n              [0, 0],\r\n              [$$.width, $$.height]\r\n          ]);\r\n          return this;\r\n      };\r\n      $$.zoom.update = function () {\r\n          return this.updateExtent().updateDomain();\r\n      };\r\n      return $$.zoom.updateExtent();\r\n  };\r\n  ChartInternal.prototype.zoomTransform = function (range) {\r\n      var $$ = this, s = [$$.x(range[0]), $$.x(range[1])];\r\n      return $$.d3.zoomIdentity.scale($$.width / (s[1] - s[0])).translate(-s[0], 0);\r\n  };\r\n  ChartInternal.prototype.initDragZoom = function () {\r\n      var $$ = this;\r\n      var d3 = $$.d3;\r\n      var config = $$.config;\r\n      var context = ($$.context = $$.svg);\r\n      var brushXPos = $$.margin.left + 20.5;\r\n      var brushYPos = $$.margin.top + 0.5;\r\n      if (!(config.zoom_type === 'drag' && config.zoom_enabled)) {\r\n          return;\r\n      }\r\n      var getZoomedDomain = function (selection) {\r\n          return selection && selection.map(function (x) { return $$.x.invert(x); });\r\n      };\r\n      var brush = ($$.dragZoomBrush = d3\r\n          .brushX()\r\n          .on('start', function () {\r\n          $$.api.unzoom();\r\n          $$.svg.select('.' + CLASS.dragZoom).classed('disabled', false);\r\n          config.zoom_onzoomstart.call($$.api, d3.event.sourceEvent);\r\n      })\r\n          .on('brush', function () {\r\n          config.zoom_onzoom.call($$.api, getZoomedDomain(d3.event.selection));\r\n      })\r\n          .on('end', function () {\r\n          if (d3.event.selection == null) {\r\n              return;\r\n          }\r\n          var zoomedDomain = getZoomedDomain(d3.event.selection);\r\n          if (!config.zoom_disableDefaultBehavior) {\r\n              $$.api.zoom(zoomedDomain);\r\n          }\r\n          $$.svg.select('.' + CLASS.dragZoom).classed('disabled', true);\r\n          config.zoom_onzoomend.call($$.api, zoomedDomain);\r\n      }));\r\n      context\r\n          .append('g')\r\n          .classed(CLASS.dragZoom, true)\r\n          .attr('clip-path', $$.clipPath)\r\n          .attr('transform', 'translate(' + brushXPos + ',' + brushYPos + ')')\r\n          .call(brush);\r\n  };\r\n  ChartInternal.prototype.getZoomDomain = function () {\r\n      var $$ = this, config = $$.config, d3 = $$.d3, min = d3.min([$$.orgXDomain[0], config.zoom_x_min]), max = d3.max([$$.orgXDomain[1], config.zoom_x_max]);\r\n      return [min, max];\r\n  };\r\n  ChartInternal.prototype.redrawForZoom = function () {\r\n      var $$ = this, d3 = $$.d3, config = $$.config, zoom = $$.zoom, x = $$.x;\r\n      if (!config.zoom_enabled) {\r\n          return;\r\n      }\r\n      if ($$.filterTargetsToShow($$.data.targets).length === 0) {\r\n          return;\r\n      }\r\n      zoom.update();\r\n      if (config.zoom_disableDefaultBehavior) {\r\n          return;\r\n      }\r\n      if ($$.isCategorized() && x.orgDomain()[0] === $$.orgXDomain[0]) {\r\n          x.domain([$$.orgXDomain[0] - 1e-10, x.orgDomain()[1]]);\r\n      }\r\n      $$.redraw({\r\n          withTransition: false,\r\n          withY: config.zoom_rescale,\r\n          withSubchart: false,\r\n          withEventRect: false,\r\n          withDimension: false\r\n      });\r\n      if (d3.event.sourceEvent && d3.event.sourceEvent.type === 'mousemove') {\r\n          $$.cancelClick = true;\r\n      }\r\n  };\n\n  return c3;\n\n})));\n","import * as React from 'react';\nimport createSvgIcon from '../../utils/createSvgIcon';\n/**\n * @ignore - internal component.\n */\n\nexport default createSvgIcon( /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M7 10l5 5 5-5z\"\n}), 'ArrowDropDown');","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@material-ui/utils';\nimport capitalize from '../utils/capitalize';\n/**\n * @ignore - internal component.\n */\n\nvar NativeSelectInput = /*#__PURE__*/React.forwardRef(function NativeSelectInput(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      disabled = props.disabled,\n      IconComponent = props.IconComponent,\n      inputRef = props.inputRef,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'standard' : _props$variant,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"disabled\", \"IconComponent\", \"inputRef\", \"variant\"]);\n\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"select\", _extends({\n    className: clsx(classes.root, // TODO v5: merge root and select\n    classes.select, classes[variant], className, disabled && classes.disabled),\n    disabled: disabled,\n    ref: inputRef || ref\n  }, other)), props.multiple ? null : /*#__PURE__*/React.createElement(IconComponent, {\n    className: clsx(classes.icon, classes[\"icon\".concat(capitalize(variant))], disabled && classes.disabled)\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? NativeSelectInput.propTypes = {\n  /**\n   * The option elements to populate the select with.\n   * Can be some `<option>` elements.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * The CSS class name of the select element.\n   */\n  className: PropTypes.string,\n\n  /**\n   * If `true`, the select will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * The icon that displays the arrow.\n   */\n  IconComponent: PropTypes.elementType.isRequired,\n\n  /**\n   * Use that prop to pass a ref to the native select element.\n   * @deprecated\n   */\n  inputRef: refType,\n\n  /**\n   * @ignore\n   */\n  multiple: PropTypes.bool,\n\n  /**\n   * Name attribute of the `select` or hidden `input` element.\n   */\n  name: PropTypes.string,\n\n  /**\n   * Callback function fired when a menu item is selected.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * The input value.\n   */\n  value: PropTypes.any,\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['standard', 'outlined', 'filled'])\n} : void 0;\nexport default NativeSelectInput;","import * as React from 'react';\n/**\n * @ignore - internal component.\n */\n\nvar ListContext = React.createContext({});\n\nif (process.env.NODE_ENV !== 'production') {\n  ListContext.displayName = 'ListContext';\n}\n\nexport default ListContext;","import defineProperty from \"./defineProperty\";\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nexport default function _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport { alpha } from '../styles/colorManipulator';\nimport ButtonBase from '../ButtonBase';\nimport capitalize from '../utils/capitalize';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: _extends({}, theme.typography.button, {\n      boxSizing: 'border-box',\n      minWidth: 64,\n      padding: '6px 16px',\n      borderRadius: theme.shape.borderRadius,\n      color: theme.palette.text.primary,\n      transition: theme.transitions.create(['background-color', 'box-shadow', 'border'], {\n        duration: theme.transitions.duration.short\n      }),\n      '&:hover': {\n        textDecoration: 'none',\n        backgroundColor: alpha(theme.palette.text.primary, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        },\n        '&$disabled': {\n          backgroundColor: 'transparent'\n        }\n      },\n      '&$disabled': {\n        color: theme.palette.action.disabled\n      }\n    }),\n\n    /* Styles applied to the span element that wraps the children. */\n    label: {\n      width: '100%',\n      // Ensure the correct width for iOS Safari\n      display: 'inherit',\n      alignItems: 'inherit',\n      justifyContent: 'inherit'\n    },\n\n    /* Styles applied to the root element if `variant=\"text\"`. */\n    text: {\n      padding: '6px 8px'\n    },\n\n    /* Styles applied to the root element if `variant=\"text\"` and `color=\"primary\"`. */\n    textPrimary: {\n      color: theme.palette.primary.main,\n      '&:hover': {\n        backgroundColor: alpha(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"text\"` and `color=\"secondary\"`. */\n    textSecondary: {\n      color: theme.palette.secondary.main,\n      '&:hover': {\n        backgroundColor: alpha(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"`. */\n    outlined: {\n      padding: '5px 15px',\n      border: \"1px solid \".concat(theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)'),\n      '&$disabled': {\n        border: \"1px solid \".concat(theme.palette.action.disabledBackground)\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"primary\"`. */\n    outlinedPrimary: {\n      color: theme.palette.primary.main,\n      border: \"1px solid \".concat(alpha(theme.palette.primary.main, 0.5)),\n      '&:hover': {\n        border: \"1px solid \".concat(theme.palette.primary.main),\n        backgroundColor: alpha(theme.palette.primary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"outlined\"` and `color=\"secondary\"`. */\n    outlinedSecondary: {\n      color: theme.palette.secondary.main,\n      border: \"1px solid \".concat(alpha(theme.palette.secondary.main, 0.5)),\n      '&:hover': {\n        border: \"1px solid \".concat(theme.palette.secondary.main),\n        backgroundColor: alpha(theme.palette.secondary.main, theme.palette.action.hoverOpacity),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      },\n      '&$disabled': {\n        border: \"1px solid \".concat(theme.palette.action.disabled)\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"contained\"`. */\n    contained: {\n      color: theme.palette.getContrastText(theme.palette.grey[300]),\n      backgroundColor: theme.palette.grey[300],\n      boxShadow: theme.shadows[2],\n      '&:hover': {\n        backgroundColor: theme.palette.grey.A100,\n        boxShadow: theme.shadows[4],\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          boxShadow: theme.shadows[2],\n          backgroundColor: theme.palette.grey[300]\n        },\n        '&$disabled': {\n          backgroundColor: theme.palette.action.disabledBackground\n        }\n      },\n      '&$focusVisible': {\n        boxShadow: theme.shadows[6]\n      },\n      '&:active': {\n        boxShadow: theme.shadows[8]\n      },\n      '&$disabled': {\n        color: theme.palette.action.disabled,\n        boxShadow: theme.shadows[0],\n        backgroundColor: theme.palette.action.disabledBackground\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"contained\"` and `color=\"primary\"`. */\n    containedPrimary: {\n      color: theme.palette.primary.contrastText,\n      backgroundColor: theme.palette.primary.main,\n      '&:hover': {\n        backgroundColor: theme.palette.primary.dark,\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: theme.palette.primary.main\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `variant=\"contained\"` and `color=\"secondary\"`. */\n    containedSecondary: {\n      color: theme.palette.secondary.contrastText,\n      backgroundColor: theme.palette.secondary.main,\n      '&:hover': {\n        backgroundColor: theme.palette.secondary.dark,\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: theme.palette.secondary.main\n        }\n      }\n    },\n\n    /* Styles applied to the root element if `disableElevation={true}`. */\n    disableElevation: {\n      boxShadow: 'none',\n      '&:hover': {\n        boxShadow: 'none'\n      },\n      '&$focusVisible': {\n        boxShadow: 'none'\n      },\n      '&:active': {\n        boxShadow: 'none'\n      },\n      '&$disabled': {\n        boxShadow: 'none'\n      }\n    },\n\n    /* Pseudo-class applied to the ButtonBase root element if the button is keyboard focused. */\n    focusVisible: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `color=\"inherit\"`. */\n    colorInherit: {\n      color: 'inherit',\n      borderColor: 'currentColor'\n    },\n\n    /* Styles applied to the root element if `size=\"small\"` and `variant=\"text\"`. */\n    textSizeSmall: {\n      padding: '4px 5px',\n      fontSize: theme.typography.pxToRem(13)\n    },\n\n    /* Styles applied to the root element if `size=\"large\"` and `variant=\"text\"`. */\n    textSizeLarge: {\n      padding: '8px 11px',\n      fontSize: theme.typography.pxToRem(15)\n    },\n\n    /* Styles applied to the root element if `size=\"small\"` and `variant=\"outlined\"`. */\n    outlinedSizeSmall: {\n      padding: '3px 9px',\n      fontSize: theme.typography.pxToRem(13)\n    },\n\n    /* Styles applied to the root element if `size=\"large\"` and `variant=\"outlined\"`. */\n    outlinedSizeLarge: {\n      padding: '7px 21px',\n      fontSize: theme.typography.pxToRem(15)\n    },\n\n    /* Styles applied to the root element if `size=\"small\"` and `variant=\"contained\"`. */\n    containedSizeSmall: {\n      padding: '4px 10px',\n      fontSize: theme.typography.pxToRem(13)\n    },\n\n    /* Styles applied to the root element if `size=\"large\"` and `variant=\"contained\"`. */\n    containedSizeLarge: {\n      padding: '8px 22px',\n      fontSize: theme.typography.pxToRem(15)\n    },\n\n    /* Styles applied to the root element if `size=\"small\"`. */\n    sizeSmall: {},\n\n    /* Styles applied to the root element if `size=\"large\"`. */\n    sizeLarge: {},\n\n    /* Styles applied to the root element if `fullWidth={true}`. */\n    fullWidth: {\n      width: '100%'\n    },\n\n    /* Styles applied to the startIcon element if supplied. */\n    startIcon: {\n      display: 'inherit',\n      marginRight: 8,\n      marginLeft: -4,\n      '&$iconSizeSmall': {\n        marginLeft: -2\n      }\n    },\n\n    /* Styles applied to the endIcon element if supplied. */\n    endIcon: {\n      display: 'inherit',\n      marginRight: -4,\n      marginLeft: 8,\n      '&$iconSizeSmall': {\n        marginRight: -2\n      }\n    },\n\n    /* Styles applied to the icon element if supplied and `size=\"small\"`. */\n    iconSizeSmall: {\n      '& > *:first-child': {\n        fontSize: 18\n      }\n    },\n\n    /* Styles applied to the icon element if supplied and `size=\"medium\"`. */\n    iconSizeMedium: {\n      '& > *:first-child': {\n        fontSize: 20\n      }\n    },\n\n    /* Styles applied to the icon element if supplied and `size=\"large\"`. */\n    iconSizeLarge: {\n      '& > *:first-child': {\n        fontSize: 22\n      }\n    }\n  };\n};\nvar Button = /*#__PURE__*/React.forwardRef(function Button(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$color = props.color,\n      color = _props$color === void 0 ? 'default' : _props$color,\n      _props$component = props.component,\n      component = _props$component === void 0 ? 'button' : _props$component,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$disableElevati = props.disableElevation,\n      disableElevation = _props$disableElevati === void 0 ? false : _props$disableElevati,\n      _props$disableFocusRi = props.disableFocusRipple,\n      disableFocusRipple = _props$disableFocusRi === void 0 ? false : _props$disableFocusRi,\n      endIconProp = props.endIcon,\n      focusVisibleClassName = props.focusVisibleClassName,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'medium' : _props$size,\n      startIconProp = props.startIcon,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'button' : _props$type,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'text' : _props$variant,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"color\", \"component\", \"disabled\", \"disableElevation\", \"disableFocusRipple\", \"endIcon\", \"focusVisibleClassName\", \"fullWidth\", \"size\", \"startIcon\", \"type\", \"variant\"]);\n\n  var startIcon = startIconProp && /*#__PURE__*/React.createElement(\"span\", {\n    className: clsx(classes.startIcon, classes[\"iconSize\".concat(capitalize(size))])\n  }, startIconProp);\n  var endIcon = endIconProp && /*#__PURE__*/React.createElement(\"span\", {\n    className: clsx(classes.endIcon, classes[\"iconSize\".concat(capitalize(size))])\n  }, endIconProp);\n  return /*#__PURE__*/React.createElement(ButtonBase, _extends({\n    className: clsx(classes.root, classes[variant], className, color === 'inherit' ? classes.colorInherit : color !== 'default' && classes[\"\".concat(variant).concat(capitalize(color))], size !== 'medium' && [classes[\"\".concat(variant, \"Size\").concat(capitalize(size))], classes[\"size\".concat(capitalize(size))]], disableElevation && classes.disableElevation, disabled && classes.disabled, fullWidth && classes.fullWidth),\n    component: component,\n    disabled: disabled,\n    focusRipple: !disableFocusRipple,\n    focusVisibleClassName: clsx(classes.focusVisible, focusVisibleClassName),\n    ref: ref,\n    type: type\n  }, other), /*#__PURE__*/React.createElement(\"span\", {\n    className: classes.label\n  }, startIcon, children, endIcon));\n});\nprocess.env.NODE_ENV !== \"production\" ? Button.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The content of the button.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['default', 'inherit', 'primary', 'secondary']),\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * If `true`, the button will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, no elevation is used.\n   */\n  disableElevation: PropTypes.bool,\n\n  /**\n   * If `true`, the  keyboard focus ripple will be disabled.\n   */\n  disableFocusRipple: PropTypes.bool,\n\n  /**\n   * If `true`, the ripple effect will be disabled.\n   *\n   * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure\n   * to highlight the element by applying separate styles with the `focusVisibleClassName`.\n   */\n  disableRipple: PropTypes.bool,\n\n  /**\n   * Element placed after the children.\n   */\n  endIcon: PropTypes.node,\n\n  /**\n   * @ignore\n   */\n  focusVisibleClassName: PropTypes.string,\n\n  /**\n   * If `true`, the button will take up the full width of its container.\n   */\n  fullWidth: PropTypes.bool,\n\n  /**\n   * The URL to link to when the button is clicked.\n   * If defined, an `a` element will be used as the root node.\n   */\n  href: PropTypes.string,\n\n  /**\n   * The size of the button.\n   * `small` is equivalent to the dense button styling.\n   */\n  size: PropTypes.oneOf(['large', 'medium', 'small']),\n\n  /**\n   * Element placed before the children.\n   */\n  startIcon: PropTypes.node,\n\n  /**\n   * @ignore\n   */\n  type: PropTypes.oneOfType([PropTypes.oneOf(['button', 'reset', 'submit']), PropTypes.string]),\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['contained', 'outlined', 'text'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiButton'\n})(Button);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport NativeSelectInput from './NativeSelectInput';\nimport withStyles from '../styles/withStyles';\nimport formControlState from '../FormControl/formControlState';\nimport useFormControl from '../FormControl/useFormControl';\nimport ArrowDropDownIcon from '../internal/svg-icons/ArrowDropDown';\nimport Input from '../Input';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the select component `root` class. */\n    root: {},\n\n    /* Styles applied to the select component `select` class. */\n    select: {\n      '-moz-appearance': 'none',\n      // Reset\n      '-webkit-appearance': 'none',\n      // Reset\n      // When interacting quickly, the text can end up selected.\n      // Native select can't be selected either.\n      userSelect: 'none',\n      borderRadius: 0,\n      // Reset\n      minWidth: 16,\n      // So it doesn't collapse.\n      cursor: 'pointer',\n      '&:focus': {\n        // Show that it's not an text input\n        backgroundColor: theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.05)' : 'rgba(255, 255, 255, 0.05)',\n        borderRadius: 0 // Reset Chrome style\n\n      },\n      // Remove IE 11 arrow\n      '&::-ms-expand': {\n        display: 'none'\n      },\n      '&$disabled': {\n        cursor: 'default'\n      },\n      '&[multiple]': {\n        height: 'auto'\n      },\n      '&:not([multiple]) option, &:not([multiple]) optgroup': {\n        backgroundColor: theme.palette.background.paper\n      },\n      '&&': {\n        paddingRight: 24\n      }\n    },\n\n    /* Styles applied to the select component if `variant=\"filled\"`. */\n    filled: {\n      '&&': {\n        paddingRight: 32\n      }\n    },\n\n    /* Styles applied to the select component if `variant=\"outlined\"`. */\n    outlined: {\n      borderRadius: theme.shape.borderRadius,\n      '&&': {\n        paddingRight: 32\n      }\n    },\n\n    /* Styles applied to the select component `selectMenu` class. */\n    selectMenu: {\n      height: 'auto',\n      // Resets for multpile select with chips\n      minHeight: '1.1876em',\n      // Required for select\\text-field height consistency\n      textOverflow: 'ellipsis',\n      whiteSpace: 'nowrap',\n      overflow: 'hidden'\n    },\n\n    /* Pseudo-class applied to the select component `disabled` class. */\n    disabled: {},\n\n    /* Styles applied to the icon component. */\n    icon: {\n      // We use a position absolute over a flexbox in order to forward the pointer events\n      // to the input and to support wrapping tags..\n      position: 'absolute',\n      right: 0,\n      top: 'calc(50% - 12px)',\n      // Center vertically\n      pointerEvents: 'none',\n      // Don't block pointer events on the select under the icon.\n      color: theme.palette.action.active,\n      '&$disabled': {\n        color: theme.palette.action.disabled\n      }\n    },\n\n    /* Styles applied to the icon component if the popup is open. */\n    iconOpen: {\n      transform: 'rotate(180deg)'\n    },\n\n    /* Styles applied to the icon component if `variant=\"filled\"`. */\n    iconFilled: {\n      right: 7\n    },\n\n    /* Styles applied to the icon component if `variant=\"outlined\"`. */\n    iconOutlined: {\n      right: 7\n    },\n\n    /* Styles applied to the underlying native input component. */\n    nativeInput: {\n      bottom: 0,\n      left: 0,\n      position: 'absolute',\n      opacity: 0,\n      pointerEvents: 'none',\n      width: '100%'\n    }\n  };\n};\nvar defaultInput = /*#__PURE__*/React.createElement(Input, null);\n/**\n * An alternative to `<Select native />` with a much smaller bundle size footprint.\n */\n\nvar NativeSelect = /*#__PURE__*/React.forwardRef(function NativeSelect(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      _props$IconComponent = props.IconComponent,\n      IconComponent = _props$IconComponent === void 0 ? ArrowDropDownIcon : _props$IconComponent,\n      _props$input = props.input,\n      input = _props$input === void 0 ? defaultInput : _props$input,\n      inputProps = props.inputProps,\n      variant = props.variant,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"IconComponent\", \"input\", \"inputProps\", \"variant\"]);\n\n  var muiFormControl = useFormControl();\n  var fcs = formControlState({\n    props: props,\n    muiFormControl: muiFormControl,\n    states: ['variant']\n  });\n  return /*#__PURE__*/React.cloneElement(input, _extends({\n    // Most of the logic is implemented in `NativeSelectInput`.\n    // The `Select` component is a simple API wrapper to expose something better to play with.\n    inputComponent: NativeSelectInput,\n    inputProps: _extends({\n      children: children,\n      classes: classes,\n      IconComponent: IconComponent,\n      variant: fcs.variant,\n      type: undefined\n    }, inputProps, input ? input.props.inputProps : {}),\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? NativeSelect.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * The option elements to populate the select with.\n   * Can be some `<option>` elements.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * The icon that displays the arrow.\n   */\n  IconComponent: PropTypes.elementType,\n\n  /**\n   * An `Input` element; does not have to be a material-ui specific `Input`.\n   */\n  input: PropTypes.element,\n\n  /**\n   * Attributes applied to the `select` element.\n   */\n  inputProps: PropTypes.object,\n\n  /**\n   * Callback function fired when a menu item is selected.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * The input value. The DOM API casts this to a string.\n   */\n  value: PropTypes.any,\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])\n} : void 0;\nNativeSelect.muiName = 'Select';\nexport default withStyles(styles, {\n  name: 'MuiNativeSelect'\n})(NativeSelect);","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\n// @inheritedComponent ButtonBase\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { alpha, withStyles } from '@material-ui/core/styles';\nimport ButtonBase from '@material-ui/core/ButtonBase';\nimport { capitalize } from '@material-ui/core/utils';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: _extends({}, theme.typography.button, {\n      boxSizing: 'border-box',\n      borderRadius: theme.shape.borderRadius,\n      padding: 11,\n      border: \"1px solid \".concat(alpha(theme.palette.action.active, 0.12)),\n      color: alpha(theme.palette.action.active, 0.38),\n      '&$selected': {\n        color: theme.palette.action.active,\n        backgroundColor: alpha(theme.palette.action.active, 0.12),\n        '&:hover': {\n          backgroundColor: alpha(theme.palette.action.active, 0.15)\n        },\n        '& + &': {\n          borderLeft: 0,\n          marginLeft: 0\n        }\n      },\n      '&$disabled': {\n        color: alpha(theme.palette.action.disabled, 0.12)\n      },\n      '&:hover': {\n        textDecoration: 'none',\n        // Reset on mouse devices\n        backgroundColor: alpha(theme.palette.text.primary, 0.05),\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        },\n        '&$disabled': {\n          backgroundColor: 'transparent'\n        }\n      }\n    }),\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Pseudo-class applied to the root element if `selected={true}`. */\n    selected: {},\n\n    /* Styles applied to the `label` wrapper element. */\n    label: {\n      width: '100%',\n      // Ensure the correct width for iOS Safari\n      display: 'inherit',\n      alignItems: 'inherit',\n      justifyContent: 'inherit'\n    },\n\n    /* Styles applied to the root element if `size=\"small\"`. */\n    sizeSmall: {\n      padding: 7,\n      fontSize: theme.typography.pxToRem(13)\n    },\n\n    /* Styles applied to the root element if `size=\"large\"`. */\n    sizeLarge: {\n      padding: 15,\n      fontSize: theme.typography.pxToRem(15)\n    }\n  };\n};\nvar ToggleButton = /*#__PURE__*/React.forwardRef(function ToggleButton(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$disableFocusRi = props.disableFocusRipple,\n      disableFocusRipple = _props$disableFocusRi === void 0 ? false : _props$disableFocusRi,\n      onChange = props.onChange,\n      onClick = props.onClick,\n      selected = props.selected,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'medium' : _props$size,\n      value = props.value,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"disabled\", \"disableFocusRipple\", \"onChange\", \"onClick\", \"selected\", \"size\", \"value\"]);\n\n  var handleChange = function handleChange(event) {\n    if (onClick) {\n      onClick(event, value);\n\n      if (event.isDefaultPrevented()) {\n        return;\n      }\n    }\n\n    if (onChange) {\n      onChange(event, value);\n    }\n  };\n\n  return /*#__PURE__*/React.createElement(ButtonBase, _extends({\n    className: clsx(classes.root, className, disabled && classes.disabled, selected && classes.selected, size !== 'medium' && classes[\"size\".concat(capitalize(size))]),\n    disabled: disabled,\n    focusRipple: !disableFocusRipple,\n    ref: ref,\n    onClick: handleChange,\n    onChange: onChange,\n    value: value,\n    \"aria-pressed\": selected\n  }, other), /*#__PURE__*/React.createElement(\"span\", {\n    className: classes.label\n  }, children));\n});\nprocess.env.NODE_ENV !== \"production\" ? ToggleButton.propTypes = {\n  /**\r\n   * The content of the button.\r\n   */\n  children: PropTypes.node.isRequired,\n\n  /**\r\n   * Override or extend the styles applied to the component.\r\n   * See [CSS API](#css) below for more details.\r\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\r\n   * @ignore\r\n   */\n  className: PropTypes.string,\n\n  /**\r\n   * If `true`, the button will be disabled.\r\n   */\n  disabled: PropTypes.bool,\n\n  /**\r\n   * If `true`, the  keyboard focus ripple will be disabled.\r\n   */\n  disableFocusRipple: PropTypes.bool,\n\n  /**\r\n   * If `true`, the ripple effect will be disabled.\r\n   */\n  disableRipple: PropTypes.bool,\n\n  /**\r\n   * @ignore\r\n   */\n  onChange: PropTypes.func,\n\n  /**\r\n   * @ignore\r\n   */\n  onClick: PropTypes.func,\n\n  /**\r\n   * If `true`, the button will be rendered in an active state.\r\n   */\n  selected: PropTypes.bool,\n\n  /**\r\n   * @ignore\r\n   */\n  size: PropTypes.oneOf(['small', 'medium', 'large']),\n\n  /**\r\n   * The value to associate with the button when selected in a\r\n   * ToggleButtonGroup.\r\n   */\n  value: PropTypes.any.isRequired\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiToggleButton'\n})(ToggleButton);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@material-ui/utils';\nimport InputBase from '../InputBase';\nimport withStyles from '../styles/withStyles';\nexport var styles = function styles(theme) {\n  var light = theme.palette.type === 'light';\n  var bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'relative'\n    },\n\n    /* Styles applied to the root element if the component is a descendant of `FormControl`. */\n    formControl: {\n      'label + &': {\n        marginTop: 16\n      }\n    },\n\n    /* Styles applied to the root element if the component is focused. */\n    focused: {},\n\n    /* Styles applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if color secondary. */\n    colorSecondary: {\n      '&$underline:after': {\n        borderBottomColor: theme.palette.secondary.main\n      }\n    },\n\n    /* Styles applied to the root element if `disableUnderline={false}`. */\n    underline: {\n      '&:after': {\n        borderBottom: \"2px solid \".concat(theme.palette.primary.main),\n        left: 0,\n        bottom: 0,\n        // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n        content: '\"\"',\n        position: 'absolute',\n        right: 0,\n        transform: 'scaleX(0)',\n        transition: theme.transitions.create('transform', {\n          duration: theme.transitions.duration.shorter,\n          easing: theme.transitions.easing.easeOut\n        }),\n        pointerEvents: 'none' // Transparent to the hover style.\n\n      },\n      '&$focused:after': {\n        transform: 'scaleX(1)'\n      },\n      '&$error:after': {\n        borderBottomColor: theme.palette.error.main,\n        transform: 'scaleX(1)' // error is always underlined in red\n\n      },\n      '&:before': {\n        borderBottom: \"1px solid \".concat(bottomLineColor),\n        left: 0,\n        bottom: 0,\n        // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n        content: '\"\\\\00a0\"',\n        position: 'absolute',\n        right: 0,\n        transition: theme.transitions.create('border-bottom-color', {\n          duration: theme.transitions.duration.shorter\n        }),\n        pointerEvents: 'none' // Transparent to the hover style.\n\n      },\n      '&:hover:not($disabled):before': {\n        borderBottom: \"2px solid \".concat(theme.palette.text.primary),\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          borderBottom: \"1px solid \".concat(bottomLineColor)\n        }\n      },\n      '&$disabled:before': {\n        borderBottomStyle: 'dotted'\n      }\n    },\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    marginDense: {},\n\n    /* Styles applied to the root element if `multiline={true}`. */\n    multiline: {},\n\n    /* Styles applied to the root element if `fullWidth={true}`. */\n    fullWidth: {},\n\n    /* Styles applied to the `input` element. */\n    input: {},\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    inputMarginDense: {},\n\n    /* Styles applied to the `input` element if `multiline={true}`. */\n    inputMultiline: {},\n\n    /* Styles applied to the `input` element if `type=\"search\"`. */\n    inputTypeSearch: {}\n  };\n};\nvar Input = /*#__PURE__*/React.forwardRef(function Input(props, ref) {\n  var disableUnderline = props.disableUnderline,\n      classes = props.classes,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      _props$inputComponent = props.inputComponent,\n      inputComponent = _props$inputComponent === void 0 ? 'input' : _props$inputComponent,\n      _props$multiline = props.multiline,\n      multiline = _props$multiline === void 0 ? false : _props$multiline,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'text' : _props$type,\n      other = _objectWithoutProperties(props, [\"disableUnderline\", \"classes\", \"fullWidth\", \"inputComponent\", \"multiline\", \"type\"]);\n\n  return /*#__PURE__*/React.createElement(InputBase, _extends({\n    classes: _extends({}, classes, {\n      root: clsx(classes.root, !disableUnderline && classes.underline),\n      underline: null\n    }),\n    fullWidth: fullWidth,\n    inputComponent: inputComponent,\n    multiline: multiline,\n    ref: ref,\n    type: type\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Input.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: PropTypes.string,\n\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: PropTypes.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['primary', 'secondary']),\n\n  /**\n   * The default `input` element value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n\n  /**\n   * If `true`, the `input` element will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the input will not have an underline.\n   */\n  disableUnderline: PropTypes.bool,\n\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: PropTypes.node,\n\n  /**\n   * If `true`, the input will indicate an error. This is normally obtained via context from\n   * FormControl.\n   */\n  error: PropTypes.bool,\n\n  /**\n   * If `true`, the input will take up the full width of its container.\n   */\n  fullWidth: PropTypes.bool,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n\n  /**\n   * The component used for the `input` element.\n   * Either a string to use a HTML element or a component.\n   */\n  inputComponent: PropTypes.elementType,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: PropTypes.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: PropTypes.oneOf(['dense', 'none']),\n\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n  /**\n   * If `true`, a textarea element will be rendered.\n   */\n  multiline: PropTypes.bool,\n\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: PropTypes.string,\n\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * The short hint displayed in the input before the user enters a value.\n   */\n  placeholder: PropTypes.string,\n\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: PropTypes.bool,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: PropTypes.bool,\n\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: PropTypes.node,\n\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).\n   */\n  type: PropTypes.string,\n\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: PropTypes.any\n} : void 0;\nInput.muiName = 'Input';\nexport default withStyles(styles, {\n  name: 'MuiInput'\n})(Input);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@material-ui/utils';\nimport InputBase from '../InputBase';\nimport withStyles from '../styles/withStyles';\nexport var styles = function styles(theme) {\n  var light = theme.palette.type === 'light';\n  var bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n  var backgroundColor = light ? 'rgba(0, 0, 0, 0.09)' : 'rgba(255, 255, 255, 0.09)';\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'relative',\n      backgroundColor: backgroundColor,\n      borderTopLeftRadius: theme.shape.borderRadius,\n      borderTopRightRadius: theme.shape.borderRadius,\n      transition: theme.transitions.create('background-color', {\n        duration: theme.transitions.duration.shorter,\n        easing: theme.transitions.easing.easeOut\n      }),\n      '&:hover': {\n        backgroundColor: light ? 'rgba(0, 0, 0, 0.13)' : 'rgba(255, 255, 255, 0.13)',\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: backgroundColor\n        }\n      },\n      '&$focused': {\n        backgroundColor: light ? 'rgba(0, 0, 0, 0.09)' : 'rgba(255, 255, 255, 0.09)'\n      },\n      '&$disabled': {\n        backgroundColor: light ? 'rgba(0, 0, 0, 0.12)' : 'rgba(255, 255, 255, 0.12)'\n      }\n    },\n\n    /* Styles applied to the root element if color secondary. */\n    colorSecondary: {\n      '&$underline:after': {\n        borderBottomColor: theme.palette.secondary.main\n      }\n    },\n\n    /* Styles applied to the root element if `disableUnderline={false}`. */\n    underline: {\n      '&:after': {\n        borderBottom: \"2px solid \".concat(theme.palette.primary.main),\n        left: 0,\n        bottom: 0,\n        // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n        content: '\"\"',\n        position: 'absolute',\n        right: 0,\n        transform: 'scaleX(0)',\n        transition: theme.transitions.create('transform', {\n          duration: theme.transitions.duration.shorter,\n          easing: theme.transitions.easing.easeOut\n        }),\n        pointerEvents: 'none' // Transparent to the hover style.\n\n      },\n      '&$focused:after': {\n        transform: 'scaleX(1)'\n      },\n      '&$error:after': {\n        borderBottomColor: theme.palette.error.main,\n        transform: 'scaleX(1)' // error is always underlined in red\n\n      },\n      '&:before': {\n        borderBottom: \"1px solid \".concat(bottomLineColor),\n        left: 0,\n        bottom: 0,\n        // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n        content: '\"\\\\00a0\"',\n        position: 'absolute',\n        right: 0,\n        transition: theme.transitions.create('border-bottom-color', {\n          duration: theme.transitions.duration.shorter\n        }),\n        pointerEvents: 'none' // Transparent to the hover style.\n\n      },\n      '&:hover:before': {\n        borderBottom: \"1px solid \".concat(theme.palette.text.primary)\n      },\n      '&$disabled:before': {\n        borderBottomStyle: 'dotted'\n      }\n    },\n\n    /* Pseudo-class applied to the root element if the component is focused. */\n    focused: {},\n\n    /* Pseudo-class applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `startAdornment` is provided. */\n    adornedStart: {\n      paddingLeft: 12\n    },\n\n    /* Styles applied to the root element if `endAdornment` is provided. */\n    adornedEnd: {\n      paddingRight: 12\n    },\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    marginDense: {},\n\n    /* Styles applied to the root element if `multiline={true}`. */\n    multiline: {\n      padding: '27px 12px 10px',\n      '&$marginDense': {\n        paddingTop: 23,\n        paddingBottom: 6\n      }\n    },\n\n    /* Styles applied to the `input` element. */\n    input: {\n      padding: '27px 12px 10px',\n      '&:-webkit-autofill': {\n        WebkitBoxShadow: theme.palette.type === 'light' ? null : '0 0 0 100px #266798 inset',\n        WebkitTextFillColor: theme.palette.type === 'light' ? null : '#fff',\n        caretColor: theme.palette.type === 'light' ? null : '#fff',\n        borderTopLeftRadius: 'inherit',\n        borderTopRightRadius: 'inherit'\n      }\n    },\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    inputMarginDense: {\n      paddingTop: 23,\n      paddingBottom: 6\n    },\n\n    /* Styles applied to the `input` if in `<FormControl hiddenLabel />`. */\n    inputHiddenLabel: {\n      paddingTop: 18,\n      paddingBottom: 19,\n      '&$inputMarginDense': {\n        paddingTop: 10,\n        paddingBottom: 11\n      }\n    },\n\n    /* Styles applied to the `input` element if `multiline={true}`. */\n    inputMultiline: {\n      padding: 0\n    },\n\n    /* Styles applied to the `input` element if `startAdornment` is provided. */\n    inputAdornedStart: {\n      paddingLeft: 0\n    },\n\n    /* Styles applied to the `input` element if `endAdornment` is provided. */\n    inputAdornedEnd: {\n      paddingRight: 0\n    }\n  };\n};\nvar FilledInput = /*#__PURE__*/React.forwardRef(function FilledInput(props, ref) {\n  var disableUnderline = props.disableUnderline,\n      classes = props.classes,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      _props$inputComponent = props.inputComponent,\n      inputComponent = _props$inputComponent === void 0 ? 'input' : _props$inputComponent,\n      _props$multiline = props.multiline,\n      multiline = _props$multiline === void 0 ? false : _props$multiline,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'text' : _props$type,\n      other = _objectWithoutProperties(props, [\"disableUnderline\", \"classes\", \"fullWidth\", \"inputComponent\", \"multiline\", \"type\"]);\n\n  return /*#__PURE__*/React.createElement(InputBase, _extends({\n    classes: _extends({}, classes, {\n      root: clsx(classes.root, !disableUnderline && classes.underline),\n      underline: null\n    }),\n    fullWidth: fullWidth,\n    inputComponent: inputComponent,\n    multiline: multiline,\n    ref: ref,\n    type: type\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? FilledInput.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: PropTypes.string,\n\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: PropTypes.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['primary', 'secondary']),\n\n  /**\n   * The default `input` element value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n\n  /**\n   * If `true`, the `input` element will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the input will not have an underline.\n   */\n  disableUnderline: PropTypes.bool,\n\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: PropTypes.node,\n\n  /**\n   * If `true`, the input will indicate an error. This is normally obtained via context from\n   * FormControl.\n   */\n  error: PropTypes.bool,\n\n  /**\n   * If `true`, the input will take up the full width of its container.\n   */\n  fullWidth: PropTypes.bool,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n\n  /**\n   * The component used for the `input` element.\n   * Either a string to use a HTML element or a component.\n   */\n  inputComponent: PropTypes.elementType,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: PropTypes.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: PropTypes.oneOf(['dense', 'none']),\n\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n  /**\n   * If `true`, a textarea element will be rendered.\n   */\n  multiline: PropTypes.bool,\n\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: PropTypes.string,\n\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * The short hint displayed in the input before the user enters a value.\n   */\n  placeholder: PropTypes.string,\n\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: PropTypes.bool,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: PropTypes.bool,\n\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: PropTypes.node,\n\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).\n   */\n  type: PropTypes.string,\n\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: PropTypes.any\n} : void 0;\nFilledInput.muiName = 'Input';\nexport default withStyles(styles, {\n  name: 'MuiFilledInput'\n})(FilledInput);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport ListContext from './ListContext';\nexport var styles = {\n  /* Styles applied to the root element. */\n  root: {\n    listStyle: 'none',\n    margin: 0,\n    padding: 0,\n    position: 'relative'\n  },\n\n  /* Styles applied to the root element if `disablePadding={false}`. */\n  padding: {\n    paddingTop: 8,\n    paddingBottom: 8\n  },\n\n  /* Styles applied to the root element if dense. */\n  dense: {},\n\n  /* Styles applied to the root element if a `subheader` is provided. */\n  subheader: {\n    paddingTop: 0\n  }\n};\nvar List = /*#__PURE__*/React.forwardRef(function List(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      Component = _props$component === void 0 ? 'ul' : _props$component,\n      _props$dense = props.dense,\n      dense = _props$dense === void 0 ? false : _props$dense,\n      _props$disablePadding = props.disablePadding,\n      disablePadding = _props$disablePadding === void 0 ? false : _props$disablePadding,\n      subheader = props.subheader,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"component\", \"dense\", \"disablePadding\", \"subheader\"]);\n\n  var context = React.useMemo(function () {\n    return {\n      dense: dense\n    };\n  }, [dense]);\n  return /*#__PURE__*/React.createElement(ListContext.Provider, {\n    value: context\n  }, /*#__PURE__*/React.createElement(Component, _extends({\n    className: clsx(classes.root, className, dense && classes.dense, !disablePadding && classes.padding, subheader && classes.subheader),\n    ref: ref\n  }, other), subheader, children));\n});\nprocess.env.NODE_ENV !== \"production\" ? List.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * If `true`, compact vertical padding designed for keyboard and mouse input will be used for\n   * the list and list items.\n   * The prop is available to descendant components as the `dense` context.\n   */\n  dense: PropTypes.bool,\n\n  /**\n   * If `true`, vertical padding will be removed from the list.\n   */\n  disablePadding: PropTypes.bool,\n\n  /**\n   * The content of the subheader, normally `ListSubheader`.\n   */\n  subheader: PropTypes.node\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiList'\n})(List);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport * as ReactDOM from 'react-dom';\nimport ownerDocument from '../utils/ownerDocument';\nimport List from '../List';\nimport getScrollbarSize from '../utils/getScrollbarSize';\nimport useForkRef from '../utils/useForkRef';\n\nfunction nextItem(list, item, disableListWrap) {\n  if (list === item) {\n    return list.firstChild;\n  }\n\n  if (item && item.nextElementSibling) {\n    return item.nextElementSibling;\n  }\n\n  return disableListWrap ? null : list.firstChild;\n}\n\nfunction previousItem(list, item, disableListWrap) {\n  if (list === item) {\n    return disableListWrap ? list.firstChild : list.lastChild;\n  }\n\n  if (item && item.previousElementSibling) {\n    return item.previousElementSibling;\n  }\n\n  return disableListWrap ? null : list.lastChild;\n}\n\nfunction textCriteriaMatches(nextFocus, textCriteria) {\n  if (textCriteria === undefined) {\n    return true;\n  }\n\n  var text = nextFocus.innerText;\n\n  if (text === undefined) {\n    // jsdom doesn't support innerText\n    text = nextFocus.textContent;\n  }\n\n  text = text.trim().toLowerCase();\n\n  if (text.length === 0) {\n    return false;\n  }\n\n  if (textCriteria.repeating) {\n    return text[0] === textCriteria.keys[0];\n  }\n\n  return text.indexOf(textCriteria.keys.join('')) === 0;\n}\n\nfunction moveFocus(list, currentFocus, disableListWrap, disabledItemsFocusable, traversalFunction, textCriteria) {\n  var wrappedOnce = false;\n  var nextFocus = traversalFunction(list, currentFocus, currentFocus ? disableListWrap : false);\n\n  while (nextFocus) {\n    // Prevent infinite loop.\n    if (nextFocus === list.firstChild) {\n      if (wrappedOnce) {\n        return;\n      }\n\n      wrappedOnce = true;\n    } // Same logic as useAutocomplete.js\n\n\n    var nextFocusDisabled = disabledItemsFocusable ? false : nextFocus.disabled || nextFocus.getAttribute('aria-disabled') === 'true';\n\n    if (!nextFocus.hasAttribute('tabindex') || !textCriteriaMatches(nextFocus, textCriteria) || nextFocusDisabled) {\n      // Move to the next element.\n      nextFocus = traversalFunction(list, nextFocus, disableListWrap);\n    } else {\n      nextFocus.focus();\n      return;\n    }\n  }\n}\n\nvar useEnhancedEffect = typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect;\n/**\n * A permanently displayed menu following https://www.w3.org/TR/wai-aria-practices/#menubutton.\n * It's exposed to help customization of the [`Menu`](/api/menu/) component. If you\n * use it separately you need to move focus into the component manually. Once\n * the focus is placed inside the component it is fully keyboard accessible.\n */\n\nvar MenuList = /*#__PURE__*/React.forwardRef(function MenuList(props, ref) {\n  var actions = props.actions,\n      _props$autoFocus = props.autoFocus,\n      autoFocus = _props$autoFocus === void 0 ? false : _props$autoFocus,\n      _props$autoFocusItem = props.autoFocusItem,\n      autoFocusItem = _props$autoFocusItem === void 0 ? false : _props$autoFocusItem,\n      children = props.children,\n      className = props.className,\n      _props$disabledItemsF = props.disabledItemsFocusable,\n      disabledItemsFocusable = _props$disabledItemsF === void 0 ? false : _props$disabledItemsF,\n      _props$disableListWra = props.disableListWrap,\n      disableListWrap = _props$disableListWra === void 0 ? false : _props$disableListWra,\n      onKeyDown = props.onKeyDown,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'selectedMenu' : _props$variant,\n      other = _objectWithoutProperties(props, [\"actions\", \"autoFocus\", \"autoFocusItem\", \"children\", \"className\", \"disabledItemsFocusable\", \"disableListWrap\", \"onKeyDown\", \"variant\"]);\n\n  var listRef = React.useRef(null);\n  var textCriteriaRef = React.useRef({\n    keys: [],\n    repeating: true,\n    previousKeyMatched: true,\n    lastTime: null\n  });\n  useEnhancedEffect(function () {\n    if (autoFocus) {\n      listRef.current.focus();\n    }\n  }, [autoFocus]);\n  React.useImperativeHandle(actions, function () {\n    return {\n      adjustStyleForScrollbar: function adjustStyleForScrollbar(containerElement, theme) {\n        // Let's ignore that piece of logic if users are already overriding the width\n        // of the menu.\n        var noExplicitWidth = !listRef.current.style.width;\n\n        if (containerElement.clientHeight < listRef.current.clientHeight && noExplicitWidth) {\n          var scrollbarSize = \"\".concat(getScrollbarSize(true), \"px\");\n          listRef.current.style[theme.direction === 'rtl' ? 'paddingLeft' : 'paddingRight'] = scrollbarSize;\n          listRef.current.style.width = \"calc(100% + \".concat(scrollbarSize, \")\");\n        }\n\n        return listRef.current;\n      }\n    };\n  }, []);\n\n  var handleKeyDown = function handleKeyDown(event) {\n    var list = listRef.current;\n    var key = event.key;\n    /**\n     * @type {Element} - will always be defined since we are in a keydown handler\n     * attached to an element. A keydown event is either dispatched to the activeElement\n     * or document.body or document.documentElement. Only the first case will\n     * trigger this specific handler.\n     */\n\n    var currentFocus = ownerDocument(list).activeElement;\n\n    if (key === 'ArrowDown') {\n      // Prevent scroll of the page\n      event.preventDefault();\n      moveFocus(list, currentFocus, disableListWrap, disabledItemsFocusable, nextItem);\n    } else if (key === 'ArrowUp') {\n      event.preventDefault();\n      moveFocus(list, currentFocus, disableListWrap, disabledItemsFocusable, previousItem);\n    } else if (key === 'Home') {\n      event.preventDefault();\n      moveFocus(list, null, disableListWrap, disabledItemsFocusable, nextItem);\n    } else if (key === 'End') {\n      event.preventDefault();\n      moveFocus(list, null, disableListWrap, disabledItemsFocusable, previousItem);\n    } else if (key.length === 1) {\n      var criteria = textCriteriaRef.current;\n      var lowerKey = key.toLowerCase();\n      var currTime = performance.now();\n\n      if (criteria.keys.length > 0) {\n        // Reset\n        if (currTime - criteria.lastTime > 500) {\n          criteria.keys = [];\n          criteria.repeating = true;\n          criteria.previousKeyMatched = true;\n        } else if (criteria.repeating && lowerKey !== criteria.keys[0]) {\n          criteria.repeating = false;\n        }\n      }\n\n      criteria.lastTime = currTime;\n      criteria.keys.push(lowerKey);\n      var keepFocusOnCurrent = currentFocus && !criteria.repeating && textCriteriaMatches(currentFocus, criteria);\n\n      if (criteria.previousKeyMatched && (keepFocusOnCurrent || moveFocus(list, currentFocus, false, disabledItemsFocusable, nextItem, criteria))) {\n        event.preventDefault();\n      } else {\n        criteria.previousKeyMatched = false;\n      }\n    }\n\n    if (onKeyDown) {\n      onKeyDown(event);\n    }\n  };\n\n  var handleOwnRef = React.useCallback(function (instance) {\n    // #StrictMode ready\n    listRef.current = ReactDOM.findDOMNode(instance);\n  }, []);\n  var handleRef = useForkRef(handleOwnRef, ref);\n  /**\n   * the index of the item should receive focus\n   * in a `variant=\"selectedMenu\"` it's the first `selected` item\n   * otherwise it's the very first item.\n   */\n\n  var activeItemIndex = -1; // since we inject focus related props into children we have to do a lookahead\n  // to check if there is a `selected` item. We're looking for the last `selected`\n  // item and use the first valid item as a fallback\n\n  React.Children.forEach(children, function (child, index) {\n    if (! /*#__PURE__*/React.isValidElement(child)) {\n      return;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (isFragment(child)) {\n        console.error([\"Material-UI: The Menu component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n\n    if (!child.props.disabled) {\n      if (variant === 'selectedMenu' && child.props.selected) {\n        activeItemIndex = index;\n      } else if (activeItemIndex === -1) {\n        activeItemIndex = index;\n      }\n    }\n  });\n  var items = React.Children.map(children, function (child, index) {\n    if (index === activeItemIndex) {\n      var newChildProps = {};\n\n      if (autoFocusItem) {\n        newChildProps.autoFocus = true;\n      }\n\n      if (child.props.tabIndex === undefined && variant === 'selectedMenu') {\n        newChildProps.tabIndex = 0;\n      }\n\n      return /*#__PURE__*/React.cloneElement(child, newChildProps);\n    }\n\n    return child;\n  });\n  return /*#__PURE__*/React.createElement(List, _extends({\n    role: \"menu\",\n    ref: handleRef,\n    className: className,\n    onKeyDown: handleKeyDown,\n    tabIndex: autoFocus ? 0 : -1\n  }, other), items);\n});\nprocess.env.NODE_ENV !== \"production\" ? MenuList.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * If `true`, will focus the `[role=\"menu\"]` container and move into tab order.\n   */\n  autoFocus: PropTypes.bool,\n\n  /**\n   * If `true`, will focus the first menuitem if `variant=\"menu\"` or selected item\n   * if `variant=\"selectedMenu\"`.\n   */\n  autoFocusItem: PropTypes.bool,\n\n  /**\n   * MenuList contents, normally `MenuItem`s.\n   */\n  children: PropTypes.node,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * If `true`, will allow focus on disabled items.\n   */\n  disabledItemsFocusable: PropTypes.bool,\n\n  /**\n   * If `true`, the menu items will not wrap focus.\n   */\n  disableListWrap: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  onKeyDown: PropTypes.func,\n\n  /**\n   * The variant to use. Use `menu` to prevent selected items from impacting the initial focus\n   * and the vertical alignment relative to the anchor element.\n   */\n  variant: PropTypes.oneOf(['menu', 'selectedMenu'])\n} : void 0;\nexport default MenuList;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { HTMLElementType } from '@material-ui/utils';\nimport withStyles from '../styles/withStyles';\nimport Popover from '../Popover';\nimport MenuList from '../MenuList';\nimport * as ReactDOM from 'react-dom';\nimport setRef from '../utils/setRef';\nimport useTheme from '../styles/useTheme';\nimport deprecatedPropType from '../utils/deprecatedPropType';\nvar RTL_ORIGIN = {\n  vertical: 'top',\n  horizontal: 'right'\n};\nvar LTR_ORIGIN = {\n  vertical: 'top',\n  horizontal: 'left'\n};\nexport var styles = {\n  /* Styles applied to the `Paper` component. */\n  paper: {\n    // specZ: The maximum height of a simple menu should be one or more rows less than the view\n    // height. This ensures a tapable area outside of the simple menu with which to dismiss\n    // the menu.\n    maxHeight: 'calc(100% - 96px)',\n    // Add iOS momentum scrolling.\n    WebkitOverflowScrolling: 'touch'\n  },\n\n  /* Styles applied to the `List` component via `MenuList`. */\n  list: {\n    // We disable the focus ring for mouse, touch and keyboard users.\n    outline: 0\n  }\n};\nvar Menu = /*#__PURE__*/React.forwardRef(function Menu(props, ref) {\n  var _props$autoFocus = props.autoFocus,\n      autoFocus = _props$autoFocus === void 0 ? true : _props$autoFocus,\n      children = props.children,\n      classes = props.classes,\n      _props$disableAutoFoc = props.disableAutoFocusItem,\n      disableAutoFocusItem = _props$disableAutoFoc === void 0 ? false : _props$disableAutoFoc,\n      _props$MenuListProps = props.MenuListProps,\n      MenuListProps = _props$MenuListProps === void 0 ? {} : _props$MenuListProps,\n      onClose = props.onClose,\n      onEnteringProp = props.onEntering,\n      open = props.open,\n      _props$PaperProps = props.PaperProps,\n      PaperProps = _props$PaperProps === void 0 ? {} : _props$PaperProps,\n      PopoverClasses = props.PopoverClasses,\n      _props$transitionDura = props.transitionDuration,\n      transitionDuration = _props$transitionDura === void 0 ? 'auto' : _props$transitionDura,\n      _props$TransitionProp = props.TransitionProps;\n  _props$TransitionProp = _props$TransitionProp === void 0 ? {} : _props$TransitionProp;\n\n  var onEntering = _props$TransitionProp.onEntering,\n      TransitionProps = _objectWithoutProperties(_props$TransitionProp, [\"onEntering\"]),\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'selectedMenu' : _props$variant,\n      other = _objectWithoutProperties(props, [\"autoFocus\", \"children\", \"classes\", \"disableAutoFocusItem\", \"MenuListProps\", \"onClose\", \"onEntering\", \"open\", \"PaperProps\", \"PopoverClasses\", \"transitionDuration\", \"TransitionProps\", \"variant\"]);\n\n  var theme = useTheme();\n  var autoFocusItem = autoFocus && !disableAutoFocusItem && open;\n  var menuListActionsRef = React.useRef(null);\n  var contentAnchorRef = React.useRef(null);\n\n  var getContentAnchorEl = function getContentAnchorEl() {\n    return contentAnchorRef.current;\n  };\n\n  var handleEntering = function handleEntering(element, isAppearing) {\n    if (menuListActionsRef.current) {\n      menuListActionsRef.current.adjustStyleForScrollbar(element, theme);\n    }\n\n    if (onEnteringProp) {\n      onEnteringProp(element, isAppearing);\n    }\n\n    if (onEntering) {\n      onEntering(element, isAppearing);\n    }\n  };\n\n  var handleListKeyDown = function handleListKeyDown(event) {\n    if (event.key === 'Tab') {\n      event.preventDefault();\n\n      if (onClose) {\n        onClose(event, 'tabKeyDown');\n      }\n    }\n  };\n  /**\n   * the index of the item should receive focus\n   * in a `variant=\"selectedMenu\"` it's the first `selected` item\n   * otherwise it's the very first item.\n   */\n\n\n  var activeItemIndex = -1; // since we inject focus related props into children we have to do a lookahead\n  // to check if there is a `selected` item. We're looking for the last `selected`\n  // item and use the first valid item as a fallback\n\n  React.Children.map(children, function (child, index) {\n    if (! /*#__PURE__*/React.isValidElement(child)) {\n      return;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (isFragment(child)) {\n        console.error([\"Material-UI: The Menu component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n\n    if (!child.props.disabled) {\n      if (variant !== \"menu\" && child.props.selected) {\n        activeItemIndex = index;\n      } else if (activeItemIndex === -1) {\n        activeItemIndex = index;\n      }\n    }\n  });\n  var items = React.Children.map(children, function (child, index) {\n    if (index === activeItemIndex) {\n      return /*#__PURE__*/React.cloneElement(child, {\n        ref: function ref(instance) {\n          // #StrictMode ready\n          contentAnchorRef.current = ReactDOM.findDOMNode(instance);\n          setRef(child.ref, instance);\n        }\n      });\n    }\n\n    return child;\n  });\n  return /*#__PURE__*/React.createElement(Popover, _extends({\n    getContentAnchorEl: getContentAnchorEl,\n    classes: PopoverClasses,\n    onClose: onClose,\n    TransitionProps: _extends({\n      onEntering: handleEntering\n    }, TransitionProps),\n    anchorOrigin: theme.direction === 'rtl' ? RTL_ORIGIN : LTR_ORIGIN,\n    transformOrigin: theme.direction === 'rtl' ? RTL_ORIGIN : LTR_ORIGIN,\n    PaperProps: _extends({}, PaperProps, {\n      classes: _extends({}, PaperProps.classes, {\n        root: classes.paper\n      })\n    }),\n    open: open,\n    ref: ref,\n    transitionDuration: transitionDuration\n  }, other), /*#__PURE__*/React.createElement(MenuList, _extends({\n    onKeyDown: handleListKeyDown,\n    actions: menuListActionsRef,\n    autoFocus: autoFocus && (activeItemIndex === -1 || disableAutoFocusItem),\n    autoFocusItem: autoFocusItem,\n    variant: variant\n  }, MenuListProps, {\n    className: clsx(classes.list, MenuListProps.className)\n  }), items));\n});\nprocess.env.NODE_ENV !== \"production\" ? Menu.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * A HTML element, or a function that returns it.\n   * It's used to set the position of the menu.\n   */\n  anchorEl: PropTypes\n  /* @typescript-to-proptypes-ignore */\n  .oneOfType([HTMLElementType, PropTypes.func]),\n\n  /**\n   * If `true` (Default) will focus the `[role=\"menu\"]` if no focusable child is found. Disabled\n   * children are not focusable. If you set this prop to `false` focus will be placed\n   * on the parent modal container. This has severe accessibility implications\n   * and should only be considered if you manage focus otherwise.\n   */\n  autoFocus: PropTypes.bool,\n\n  /**\n   * Menu contents, normally `MenuItem`s.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * When opening the menu will not focus the active item but the `[role=\"menu\"]`\n   * unless `autoFocus` is also set to `false`. Not using the default means not\n   * following WAI-ARIA authoring practices. Please be considerate about possible\n   * accessibility implications.\n   */\n  disableAutoFocusItem: PropTypes.bool,\n\n  /**\n   * Props applied to the [`MenuList`](/api/menu-list/) element.\n   */\n  MenuListProps: PropTypes.object,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`, `\"tabKeyDown\"`.\n   */\n  onClose: PropTypes.func,\n\n  /**\n   * Callback fired before the Menu enters.\n   * @deprecated Use the `TransitionProps` prop instead.\n   */\n  onEnter: deprecatedPropType(PropTypes.func, 'Use the `TransitionProps` prop instead.'),\n\n  /**\n   * Callback fired when the Menu has entered.\n   * @deprecated Use the `TransitionProps` prop instead.\n   */\n  onEntered: deprecatedPropType(PropTypes.func, 'Use the `TransitionProps` prop instead.'),\n\n  /**\n   * Callback fired when the Menu is entering.\n   * @deprecated Use the `TransitionProps` prop instead.\n   */\n  onEntering: deprecatedPropType(PropTypes.func, 'Use the `TransitionProps` prop instead.'),\n\n  /**\n   * Callback fired before the Menu exits.\n   * @deprecated Use the `TransitionProps` prop instead.\n   */\n  onExit: deprecatedPropType(PropTypes.func, 'Use the `TransitionProps` prop instead.'),\n\n  /**\n   * Callback fired when the Menu has exited.\n   * @deprecated Use the `TransitionProps` prop instead.\n   */\n  onExited: deprecatedPropType(PropTypes.func, 'Use the `TransitionProps` prop instead.'),\n\n  /**\n   * Callback fired when the Menu is exiting.\n   * @deprecated Use the `TransitionProps` prop instead.\n   */\n  onExiting: deprecatedPropType(PropTypes.func, 'Use the `TransitionProps` prop instead.'),\n\n  /**\n   * If `true`, the menu is visible.\n   */\n  open: PropTypes.bool.isRequired,\n\n  /**\n   * @ignore\n   */\n  PaperProps: PropTypes.object,\n\n  /**\n   * `classes` prop applied to the [`Popover`](/api/popover/) element.\n   */\n  PopoverClasses: PropTypes.object,\n\n  /**\n   * The length of the transition in `ms`, or 'auto'\n   */\n  transitionDuration: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.shape({\n    appear: PropTypes.number,\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })]),\n\n  /**\n   * Props applied to the transition element.\n   * By default, the element is based on this [`Transition`](http://reactcommunity.org/react-transition-group/transition) component.\n   */\n  TransitionProps: PropTypes.object,\n\n  /**\n   * The variant to use. Use `menu` to prevent selected items from impacting the initial focus\n   * and the vertical alignment relative to the anchor element.\n   */\n  variant: PropTypes.oneOf(['menu', 'selectedMenu'])\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiMenu'\n})(Menu);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _slicedToArray from \"@babel/runtime/helpers/esm/slicedToArray\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _typeof from \"@babel/runtime/helpers/esm/typeof\";\nimport { formatMuiErrorMessage as _formatMuiErrorMessage } from \"@material-ui/utils\";\nimport * as React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport ownerDocument from '../utils/ownerDocument';\nimport capitalize from '../utils/capitalize';\nimport { refType } from '@material-ui/utils';\nimport Menu from '../Menu/Menu';\nimport { isFilled } from '../InputBase/utils';\nimport useForkRef from '../utils/useForkRef';\nimport useControlled from '../utils/useControlled';\n\nfunction areEqualValues(a, b) {\n  if (_typeof(b) === 'object' && b !== null) {\n    return a === b;\n  }\n\n  return String(a) === String(b);\n}\n\nfunction isEmpty(display) {\n  return display == null || typeof display === 'string' && !display.trim();\n}\n/**\n * @ignore - internal component.\n */\n\n\nvar SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, ref) {\n  var ariaLabel = props['aria-label'],\n      autoFocus = props.autoFocus,\n      autoWidth = props.autoWidth,\n      children = props.children,\n      classes = props.classes,\n      className = props.className,\n      defaultValue = props.defaultValue,\n      disabled = props.disabled,\n      displayEmpty = props.displayEmpty,\n      IconComponent = props.IconComponent,\n      inputRefProp = props.inputRef,\n      labelId = props.labelId,\n      _props$MenuProps = props.MenuProps,\n      MenuProps = _props$MenuProps === void 0 ? {} : _props$MenuProps,\n      multiple = props.multiple,\n      name = props.name,\n      onBlur = props.onBlur,\n      onChange = props.onChange,\n      onClose = props.onClose,\n      onFocus = props.onFocus,\n      onOpen = props.onOpen,\n      openProp = props.open,\n      readOnly = props.readOnly,\n      renderValue = props.renderValue,\n      _props$SelectDisplayP = props.SelectDisplayProps,\n      SelectDisplayProps = _props$SelectDisplayP === void 0 ? {} : _props$SelectDisplayP,\n      tabIndexProp = props.tabIndex,\n      type = props.type,\n      valueProp = props.value,\n      _props$variant = props.variant,\n      variant = _props$variant === void 0 ? 'standard' : _props$variant,\n      other = _objectWithoutProperties(props, [\"aria-label\", \"autoFocus\", \"autoWidth\", \"children\", \"classes\", \"className\", \"defaultValue\", \"disabled\", \"displayEmpty\", \"IconComponent\", \"inputRef\", \"labelId\", \"MenuProps\", \"multiple\", \"name\", \"onBlur\", \"onChange\", \"onClose\", \"onFocus\", \"onOpen\", \"open\", \"readOnly\", \"renderValue\", \"SelectDisplayProps\", \"tabIndex\", \"type\", \"value\", \"variant\"]);\n\n  var _useControlled = useControlled({\n    controlled: valueProp,\n    default: defaultValue,\n    name: 'Select'\n  }),\n      _useControlled2 = _slicedToArray(_useControlled, 2),\n      value = _useControlled2[0],\n      setValue = _useControlled2[1];\n\n  var inputRef = React.useRef(null);\n\n  var _React$useState = React.useState(null),\n      displayNode = _React$useState[0],\n      setDisplayNode = _React$useState[1];\n\n  var _React$useRef = React.useRef(openProp != null),\n      isOpenControlled = _React$useRef.current;\n\n  var _React$useState2 = React.useState(),\n      menuMinWidthState = _React$useState2[0],\n      setMenuMinWidthState = _React$useState2[1];\n\n  var _React$useState3 = React.useState(false),\n      openState = _React$useState3[0],\n      setOpenState = _React$useState3[1];\n\n  var handleRef = useForkRef(ref, inputRefProp);\n  React.useImperativeHandle(handleRef, function () {\n    return {\n      focus: function focus() {\n        displayNode.focus();\n      },\n      node: inputRef.current,\n      value: value\n    };\n  }, [displayNode, value]);\n  React.useEffect(function () {\n    if (autoFocus && displayNode) {\n      displayNode.focus();\n    }\n  }, [autoFocus, displayNode]);\n  React.useEffect(function () {\n    if (displayNode) {\n      var label = ownerDocument(displayNode).getElementById(labelId);\n\n      if (label) {\n        var handler = function handler() {\n          if (getSelection().isCollapsed) {\n            displayNode.focus();\n          }\n        };\n\n        label.addEventListener('click', handler);\n        return function () {\n          label.removeEventListener('click', handler);\n        };\n      }\n    }\n\n    return undefined;\n  }, [labelId, displayNode]);\n\n  var update = function update(open, event) {\n    if (open) {\n      if (onOpen) {\n        onOpen(event);\n      }\n    } else if (onClose) {\n      onClose(event);\n    }\n\n    if (!isOpenControlled) {\n      setMenuMinWidthState(autoWidth ? null : displayNode.clientWidth);\n      setOpenState(open);\n    }\n  };\n\n  var handleMouseDown = function handleMouseDown(event) {\n    // Ignore everything but left-click\n    if (event.button !== 0) {\n      return;\n    } // Hijack the default focus behavior.\n\n\n    event.preventDefault();\n    displayNode.focus();\n    update(true, event);\n  };\n\n  var handleClose = function handleClose(event) {\n    update(false, event);\n  };\n\n  var childrenArray = React.Children.toArray(children); // Support autofill.\n\n  var handleChange = function handleChange(event) {\n    var index = childrenArray.map(function (child) {\n      return child.props.value;\n    }).indexOf(event.target.value);\n\n    if (index === -1) {\n      return;\n    }\n\n    var child = childrenArray[index];\n    setValue(child.props.value);\n\n    if (onChange) {\n      onChange(event, child);\n    }\n  };\n\n  var handleItemClick = function handleItemClick(child) {\n    return function (event) {\n      if (!multiple) {\n        update(false, event);\n      }\n\n      var newValue;\n\n      if (multiple) {\n        newValue = Array.isArray(value) ? value.slice() : [];\n        var itemIndex = value.indexOf(child.props.value);\n\n        if (itemIndex === -1) {\n          newValue.push(child.props.value);\n        } else {\n          newValue.splice(itemIndex, 1);\n        }\n      } else {\n        newValue = child.props.value;\n      }\n\n      if (child.props.onClick) {\n        child.props.onClick(event);\n      }\n\n      if (value === newValue) {\n        return;\n      }\n\n      setValue(newValue);\n\n      if (onChange) {\n        event.persist(); // Preact support, target is read only property on a native event.\n\n        Object.defineProperty(event, 'target', {\n          writable: true,\n          value: {\n            value: newValue,\n            name: name\n          }\n        });\n        onChange(event, child);\n      }\n    };\n  };\n\n  var handleKeyDown = function handleKeyDown(event) {\n    if (!readOnly) {\n      var validKeys = [' ', 'ArrowUp', 'ArrowDown', // The native select doesn't respond to enter on MacOS, but it's recommended by\n      // https://www.w3.org/TR/wai-aria-practices/examples/listbox/listbox-collapsible.html\n      'Enter'];\n\n      if (validKeys.indexOf(event.key) !== -1) {\n        event.preventDefault();\n        update(true, event);\n      }\n    }\n  };\n\n  var open = displayNode !== null && (isOpenControlled ? openProp : openState);\n\n  var handleBlur = function handleBlur(event) {\n    // if open event.stopImmediatePropagation\n    if (!open && onBlur) {\n      event.persist(); // Preact support, target is read only property on a native event.\n\n      Object.defineProperty(event, 'target', {\n        writable: true,\n        value: {\n          value: value,\n          name: name\n        }\n      });\n      onBlur(event);\n    }\n  };\n\n  delete other['aria-invalid'];\n  var display;\n  var displaySingle;\n  var displayMultiple = [];\n  var computeDisplay = false;\n  var foundMatch = false; // No need to display any value if the field is empty.\n\n  if (isFilled({\n    value: value\n  }) || displayEmpty) {\n    if (renderValue) {\n      display = renderValue(value);\n    } else {\n      computeDisplay = true;\n    }\n  }\n\n  var items = childrenArray.map(function (child) {\n    if (! /*#__PURE__*/React.isValidElement(child)) {\n      return null;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (isFragment(child)) {\n        console.error([\"Material-UI: The Select component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n\n    var selected;\n\n    if (multiple) {\n      if (!Array.isArray(value)) {\n        throw new Error(process.env.NODE_ENV !== \"production\" ? \"Material-UI: The `value` prop must be an array when using the `Select` component with `multiple`.\" : _formatMuiErrorMessage(2));\n      }\n\n      selected = value.some(function (v) {\n        return areEqualValues(v, child.props.value);\n      });\n\n      if (selected && computeDisplay) {\n        displayMultiple.push(child.props.children);\n      }\n    } else {\n      selected = areEqualValues(value, child.props.value);\n\n      if (selected && computeDisplay) {\n        displaySingle = child.props.children;\n      }\n    }\n\n    if (selected) {\n      foundMatch = true;\n    }\n\n    return /*#__PURE__*/React.cloneElement(child, {\n      'aria-selected': selected ? 'true' : undefined,\n      onClick: handleItemClick(child),\n      onKeyUp: function onKeyUp(event) {\n        if (event.key === ' ') {\n          // otherwise our MenuItems dispatches a click event\n          // it's not behavior of the native <option> and causes\n          // the select to close immediately since we open on space keydown\n          event.preventDefault();\n        }\n\n        if (child.props.onKeyUp) {\n          child.props.onKeyUp(event);\n        }\n      },\n      role: 'option',\n      selected: selected,\n      value: undefined,\n      // The value is most likely not a valid HTML attribute.\n      'data-value': child.props.value // Instead, we provide it as a data attribute.\n\n    });\n  });\n\n  if (process.env.NODE_ENV !== 'production') {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useEffect(function () {\n      if (!foundMatch && !multiple && value !== '') {\n        var values = childrenArray.map(function (child) {\n          return child.props.value;\n        });\n        console.warn([\"Material-UI: You have provided an out-of-range value `\".concat(value, \"` for the select \").concat(name ? \"(name=\\\"\".concat(name, \"\\\") \") : '', \"component.\"), \"Consider providing a value that matches one of the available options or ''.\", \"The available values are \".concat(values.filter(function (x) {\n          return x != null;\n        }).map(function (x) {\n          return \"`\".concat(x, \"`\");\n        }).join(', ') || '\"\"', \".\")].join('\\n'));\n      }\n    }, [foundMatch, childrenArray, multiple, name, value]);\n  }\n\n  if (computeDisplay) {\n    display = multiple ? displayMultiple.join(', ') : displaySingle;\n  } // Avoid performing a layout computation in the render method.\n\n\n  var menuMinWidth = menuMinWidthState;\n\n  if (!autoWidth && isOpenControlled && displayNode) {\n    menuMinWidth = displayNode.clientWidth;\n  }\n\n  var tabIndex;\n\n  if (typeof tabIndexProp !== 'undefined') {\n    tabIndex = tabIndexProp;\n  } else {\n    tabIndex = disabled ? null : 0;\n  }\n\n  var buttonId = SelectDisplayProps.id || (name ? \"mui-component-select-\".concat(name) : undefined);\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"div\", _extends({\n    className: clsx(classes.root, // TODO v5: merge root and select\n    classes.select, classes.selectMenu, classes[variant], className, disabled && classes.disabled),\n    ref: setDisplayNode,\n    tabIndex: tabIndex,\n    role: \"button\",\n    \"aria-disabled\": disabled ? 'true' : undefined,\n    \"aria-expanded\": open ? 'true' : undefined,\n    \"aria-haspopup\": \"listbox\",\n    \"aria-label\": ariaLabel,\n    \"aria-labelledby\": [labelId, buttonId].filter(Boolean).join(' ') || undefined,\n    onKeyDown: handleKeyDown,\n    onMouseDown: disabled || readOnly ? null : handleMouseDown,\n    onBlur: handleBlur,\n    onFocus: onFocus\n  }, SelectDisplayProps, {\n    // The id is required for proper a11y\n    id: buttonId\n  }), isEmpty(display) ?\n  /*#__PURE__*/\n  // eslint-disable-next-line react/no-danger\n  React.createElement(\"span\", {\n    dangerouslySetInnerHTML: {\n      __html: '&#8203;'\n    }\n  }) : display), /*#__PURE__*/React.createElement(\"input\", _extends({\n    value: Array.isArray(value) ? value.join(',') : value,\n    name: name,\n    ref: inputRef,\n    \"aria-hidden\": true,\n    onChange: handleChange,\n    tabIndex: -1,\n    className: classes.nativeInput,\n    autoFocus: autoFocus\n  }, other)), /*#__PURE__*/React.createElement(IconComponent, {\n    className: clsx(classes.icon, classes[\"icon\".concat(capitalize(variant))], open && classes.iconOpen, disabled && classes.disabled)\n  }), /*#__PURE__*/React.createElement(Menu, _extends({\n    id: \"menu-\".concat(name || ''),\n    anchorEl: displayNode,\n    open: open,\n    onClose: handleClose\n  }, MenuProps, {\n    MenuListProps: _extends({\n      'aria-labelledby': labelId,\n      role: 'listbox',\n      disableListWrap: true\n    }, MenuProps.MenuListProps),\n    PaperProps: _extends({}, MenuProps.PaperProps, {\n      style: _extends({\n        minWidth: menuMinWidth\n      }, MenuProps.PaperProps != null ? MenuProps.PaperProps.style : null)\n    })\n  }), items));\n});\nprocess.env.NODE_ENV !== \"production\" ? SelectInput.propTypes = {\n  /**\n   * @ignore\n   */\n  'aria-label': PropTypes.string,\n\n  /**\n   * @ignore\n   */\n  autoFocus: PropTypes.bool,\n\n  /**\n   * If `true`, the width of the popover will automatically be set according to the items inside the\n   * menu, otherwise it will be at least the width of the select input.\n   */\n  autoWidth: PropTypes.bool,\n\n  /**\n   * The option elements to populate the select with.\n   * Can be some `<MenuItem>` elements.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * The CSS class name of the select element.\n   */\n  className: PropTypes.string,\n\n  /**\n   * The default element value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n\n  /**\n   * If `true`, the select will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the selected item is displayed even if its value is empty.\n   */\n  displayEmpty: PropTypes.bool,\n\n  /**\n   * The icon that displays the arrow.\n   */\n  IconComponent: PropTypes.elementType.isRequired,\n\n  /**\n   * Imperative handle implementing `{ value: T, node: HTMLElement, focus(): void }`\n   * Equivalent to `ref`\n   */\n  inputRef: refType,\n\n  /**\n   * The ID of an element that acts as an additional label. The Select will\n   * be labelled by the additional label and the selected value.\n   */\n  labelId: PropTypes.string,\n\n  /**\n   * Props applied to the [`Menu`](/api/menu/) element.\n   */\n  MenuProps: PropTypes.object,\n\n  /**\n   * If `true`, `value` must be an array and the menu will support multiple selections.\n   */\n  multiple: PropTypes.bool,\n\n  /**\n   * Name attribute of the `select` or hidden `input` element.\n   */\n  name: PropTypes.string,\n\n  /**\n   * @ignore\n   */\n  onBlur: PropTypes.func,\n\n  /**\n   * Callback function fired when a menu item is selected.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (any).\n   * @param {object} [child] The react element that was selected.\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onClose: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onFocus: PropTypes.func,\n\n  /**\n   * Callback fired when the component requests to be opened.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onOpen: PropTypes.func,\n\n  /**\n   * Control `select` open state.\n   */\n  open: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  readOnly: PropTypes.bool,\n\n  /**\n   * Render the selected value.\n   *\n   * @param {any} value The `value` provided to the component.\n   * @returns {ReactNode}\n   */\n  renderValue: PropTypes.func,\n\n  /**\n   * Props applied to the clickable div element.\n   */\n  SelectDisplayProps: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  tabIndex: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n  /**\n   * @ignore\n   */\n  type: PropTypes.any,\n\n  /**\n   * The input value.\n   */\n  value: PropTypes.any,\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['standard', 'outlined', 'filled'])\n} : void 0;\nexport default SelectInput;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { mergeClasses } from '@material-ui/styles';\nimport SelectInput from './SelectInput';\nimport formControlState from '../FormControl/formControlState';\nimport useFormControl from '../FormControl/useFormControl';\nimport withStyles from '../styles/withStyles';\nimport ArrowDropDownIcon from '../internal/svg-icons/ArrowDropDown';\nimport Input from '../Input';\nimport { styles as nativeSelectStyles } from '../NativeSelect/NativeSelect';\nimport NativeSelectInput from '../NativeSelect/NativeSelectInput';\nimport FilledInput from '../FilledInput';\nimport OutlinedInput from '../OutlinedInput';\nexport var styles = nativeSelectStyles;\n\nvar _ref = /*#__PURE__*/React.createElement(Input, null);\n\nvar _ref2 = /*#__PURE__*/React.createElement(FilledInput, null);\n\nvar Select = /*#__PURE__*/React.forwardRef(function Select(props, ref) {\n  var _props$autoWidth = props.autoWidth,\n      autoWidth = _props$autoWidth === void 0 ? false : _props$autoWidth,\n      children = props.children,\n      classes = props.classes,\n      _props$displayEmpty = props.displayEmpty,\n      displayEmpty = _props$displayEmpty === void 0 ? false : _props$displayEmpty,\n      _props$IconComponent = props.IconComponent,\n      IconComponent = _props$IconComponent === void 0 ? ArrowDropDownIcon : _props$IconComponent,\n      id = props.id,\n      input = props.input,\n      inputProps = props.inputProps,\n      label = props.label,\n      labelId = props.labelId,\n      _props$labelWidth = props.labelWidth,\n      labelWidth = _props$labelWidth === void 0 ? 0 : _props$labelWidth,\n      MenuProps = props.MenuProps,\n      _props$multiple = props.multiple,\n      multiple = _props$multiple === void 0 ? false : _props$multiple,\n      _props$native = props.native,\n      native = _props$native === void 0 ? false : _props$native,\n      onClose = props.onClose,\n      onOpen = props.onOpen,\n      open = props.open,\n      renderValue = props.renderValue,\n      SelectDisplayProps = props.SelectDisplayProps,\n      _props$variant = props.variant,\n      variantProps = _props$variant === void 0 ? 'standard' : _props$variant,\n      other = _objectWithoutProperties(props, [\"autoWidth\", \"children\", \"classes\", \"displayEmpty\", \"IconComponent\", \"id\", \"input\", \"inputProps\", \"label\", \"labelId\", \"labelWidth\", \"MenuProps\", \"multiple\", \"native\", \"onClose\", \"onOpen\", \"open\", \"renderValue\", \"SelectDisplayProps\", \"variant\"]);\n\n  var inputComponent = native ? NativeSelectInput : SelectInput;\n  var muiFormControl = useFormControl();\n  var fcs = formControlState({\n    props: props,\n    muiFormControl: muiFormControl,\n    states: ['variant']\n  });\n  var variant = fcs.variant || variantProps;\n  var InputComponent = input || {\n    standard: _ref,\n    outlined: /*#__PURE__*/React.createElement(OutlinedInput, {\n      label: label,\n      labelWidth: labelWidth\n    }),\n    filled: _ref2\n  }[variant];\n  return /*#__PURE__*/React.cloneElement(InputComponent, _extends({\n    // Most of the logic is implemented in `SelectInput`.\n    // The `Select` component is a simple API wrapper to expose something better to play with.\n    inputComponent: inputComponent,\n    inputProps: _extends({\n      children: children,\n      IconComponent: IconComponent,\n      variant: variant,\n      type: undefined,\n      // We render a select. We can ignore the type provided by the `Input`.\n      multiple: multiple\n    }, native ? {\n      id: id\n    } : {\n      autoWidth: autoWidth,\n      displayEmpty: displayEmpty,\n      labelId: labelId,\n      MenuProps: MenuProps,\n      onClose: onClose,\n      onOpen: onOpen,\n      open: open,\n      renderValue: renderValue,\n      SelectDisplayProps: _extends({\n        id: id\n      }, SelectDisplayProps)\n    }, inputProps, {\n      classes: inputProps ? mergeClasses({\n        baseClasses: classes,\n        newClasses: inputProps.classes,\n        Component: Select\n      }) : classes\n    }, input ? input.props.inputProps : {}),\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? Select.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * If `true`, the width of the popover will automatically be set according to the items inside the\n   * menu, otherwise it will be at least the width of the select input.\n   */\n  autoWidth: PropTypes.bool,\n\n  /**\n   * The option elements to populate the select with.\n   * Can be some `MenuItem` when `native` is false and `option` when `native` is true.\n   *\n   * ⚠️The `MenuItem` elements **must** be direct descendants when `native` is false.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * The default element value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n\n  /**\n   * If `true`, a value is displayed even if no items are selected.\n   *\n   * In order to display a meaningful value, a function should be passed to the `renderValue` prop which returns the value to be displayed when no items are selected.\n   * You can only use it when the `native` prop is `false` (default).\n   */\n  displayEmpty: PropTypes.bool,\n\n  /**\n   * The icon that displays the arrow.\n   */\n  IconComponent: PropTypes.elementType,\n\n  /**\n   * The `id` of the wrapper element or the `select` element when `native`.\n   */\n  id: PropTypes.string,\n\n  /**\n   * An `Input` element; does not have to be a material-ui specific `Input`.\n   */\n  input: PropTypes.element,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   * When `native` is `true`, the attributes are applied on the `select` element.\n   */\n  inputProps: PropTypes.object,\n\n  /**\n   * See [OutlinedInput#label](/api/outlined-input/#props)\n   */\n  label: PropTypes.node,\n\n  /**\n   * The ID of an element that acts as an additional label. The Select will\n   * be labelled by the additional label and the selected value.\n   */\n  labelId: PropTypes.string,\n\n  /**\n   * See [OutlinedInput#label](/api/outlined-input/#props)\n   */\n  labelWidth: PropTypes.number,\n\n  /**\n   * Props applied to the [`Menu`](/api/menu/) element.\n   */\n  MenuProps: PropTypes.object,\n\n  /**\n   * If `true`, `value` must be an array and the menu will support multiple selections.\n   */\n  multiple: PropTypes.bool,\n\n  /**\n   * If `true`, the component will be using a native `select` element.\n   */\n  native: PropTypes.bool,\n\n  /**\n   * Callback function fired when a menu item is selected.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (any).\n   * @param {object} [child] The react element that was selected when `native` is `false` (default).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * Callback fired when the component requests to be closed.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onClose: PropTypes.func,\n\n  /**\n   * Callback fired when the component requests to be opened.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onOpen: PropTypes.func,\n\n  /**\n   * Control `select` open state.\n   * You can only use it when the `native` prop is `false` (default).\n   */\n  open: PropTypes.bool,\n\n  /**\n   * Render the selected value.\n   * You can only use it when the `native` prop is `false` (default).\n   *\n   * @param {any} value The `value` provided to the component.\n   * @returns {ReactNode}\n   */\n  renderValue: PropTypes.func,\n\n  /**\n   * Props applied to the clickable div element.\n   */\n  SelectDisplayProps: PropTypes.object,\n\n  /**\n   * The input value. Providing an empty string will select no options.\n   * This prop is required when the `native` prop is `false` (default).\n   * Set to an empty string `''` if you don't want any of the available options to be selected.\n   *\n   * If the value is an object it must have reference equality with the option in order to be selected.\n   * If the value is not an object, the string representation must match with the string representation of the option in order to be selected.\n   */\n  value: PropTypes.any,\n\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])\n} : void 0;\nSelect.muiName = 'Select';\nexport default withStyles(styles, {\n  name: 'MuiSelect'\n})(Select);","// Determine if the toggle button value matches, or is contained in, the\n// candidate group value.\nexport default function isValueSelected(value, candidate) {\n  if (candidate === undefined || value === undefined) {\n    return false;\n  }\n\n  if (Array.isArray(candidate)) {\n    return candidate.indexOf(value) >= 0;\n  }\n\n  return value === candidate;\n}","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport isValueSelected from './isValueSelected';\nimport { withStyles } from '@material-ui/core/styles';\nimport { capitalize } from '@material-ui/core/utils';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      display: 'inline-flex',\n      borderRadius: theme.shape.borderRadius\n    },\n\n    /* Styles applied to the root element if `orientation=\"vertical\"`. */\n    vertical: {\n      flexDirection: 'column'\n    },\n\n    /* Styles applied to the children. */\n    grouped: {},\n\n    /* Styles applied to the children if `orientation=\"horizontal\"`. */\n    groupedHorizontal: {\n      '&:not(:first-child)': {\n        marginLeft: -1,\n        borderLeft: '1px solid transparent',\n        borderTopLeftRadius: 0,\n        borderBottomLeftRadius: 0\n      },\n      '&:not(:last-child)': {\n        borderTopRightRadius: 0,\n        borderBottomRightRadius: 0\n      }\n    },\n\n    /* Styles applied to the children if `orientation=\"vertical\"`. */\n    groupedVertical: {\n      '&:not(:first-child)': {\n        marginTop: -1,\n        borderTop: '1px solid transparent',\n        borderTopLeftRadius: 0,\n        borderTopRightRadius: 0\n      },\n      '&:not(:last-child)': {\n        borderBottomLeftRadius: 0,\n        borderBottomRightRadius: 0\n      }\n    }\n  };\n};\nvar ToggleButtonGroup = /*#__PURE__*/React.forwardRef(function ToggleButton(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      _props$exclusive = props.exclusive,\n      exclusive = _props$exclusive === void 0 ? false : _props$exclusive,\n      onChange = props.onChange,\n      _props$orientation = props.orientation,\n      orientation = _props$orientation === void 0 ? 'horizontal' : _props$orientation,\n      _props$size = props.size,\n      size = _props$size === void 0 ? 'medium' : _props$size,\n      value = props.value,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"exclusive\", \"onChange\", \"orientation\", \"size\", \"value\"]);\n\n  var handleChange = function handleChange(event, buttonValue) {\n    if (!onChange) {\n      return;\n    }\n\n    var index = value && value.indexOf(buttonValue);\n    var newValue;\n\n    if (value && index >= 0) {\n      newValue = value.slice();\n      newValue.splice(index, 1);\n    } else {\n      newValue = value ? value.concat(buttonValue) : [buttonValue];\n    }\n\n    onChange(event, newValue);\n  };\n\n  var handleExclusiveChange = function handleExclusiveChange(event, buttonValue) {\n    if (!onChange) {\n      return;\n    }\n\n    onChange(event, value === buttonValue ? null : buttonValue);\n  };\n\n  return /*#__PURE__*/React.createElement(\"div\", _extends({\n    role: \"group\",\n    className: clsx(classes.root, className, orientation === 'vertical' && classes.vertical),\n    ref: ref\n  }, other), React.Children.map(children, function (child) {\n    if (! /*#__PURE__*/React.isValidElement(child)) {\n      return null;\n    }\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (isFragment(child)) {\n        console.error([\"Material-UI: The ToggleButtonGroup component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n\n    return /*#__PURE__*/React.cloneElement(child, {\n      className: clsx(classes.grouped, classes[\"grouped\".concat(capitalize(orientation))], child.props.className),\n      onChange: exclusive ? handleExclusiveChange : handleChange,\n      selected: child.props.selected === undefined ? isValueSelected(child.props.value, value) : child.props.selected,\n      size: child.props.size || size\n    });\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? ToggleButtonGroup.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\r\n   * The content of the button.\r\n   */\n  children: PropTypes.node,\n\n  /**\r\n   * Override or extend the styles applied to the component.\r\n   * See [CSS API](#css) below for more details.\r\n   */\n  classes: PropTypes.object,\n\n  /**\r\n   * @ignore\r\n   */\n  className: PropTypes.string,\n\n  /**\r\n   * If `true`, only allow one of the child ToggleButton values to be selected.\r\n   */\n  exclusive: PropTypes.bool,\n\n  /**\r\n   * Callback fired when the value changes.\r\n   *\r\n   * @param {object} event The event source of the callback.\r\n   * @param {any} value of the selected buttons. When `exclusive` is true\r\n   * this is a single value; when false an array of selected values. If no value\r\n   * is selected and `exclusive` is true the value is null; when false an empty array.\r\n   */\n  onChange: PropTypes.func,\n\n  /**\r\n   * The group orientation (layout flow direction).\r\n   */\n  orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n\n  /**\r\n   * The size of the buttons.\r\n   */\n  size: PropTypes.oneOf(['large', 'medium', 'small']),\n\n  /**\r\n   * The currently selected value within the group or an array of selected\r\n   * values when `exclusive` is false.\r\n   *\r\n   * The value must have reference equality with the option in order to be selected.\r\n   */\n  value: PropTypes.any\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiToggleButtonGroup'\n})(ToggleButtonGroup);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from '../utils/debounce';\nimport useForkRef from '../utils/useForkRef';\nimport deprecatedPropType from '../utils/deprecatedPropType';\n\nfunction getStyleValue(computedStyle, property) {\n  return parseInt(computedStyle[property], 10) || 0;\n}\n\nvar useEnhancedEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar styles = {\n  /* Styles applied to the shadow textarea element. */\n  shadow: {\n    // Visibility needed to hide the extra text area on iPads\n    visibility: 'hidden',\n    // Remove from the content flow\n    position: 'absolute',\n    // Ignore the scrollbar width\n    overflow: 'hidden',\n    height: 0,\n    top: 0,\n    left: 0,\n    // Create a new layer, increase the isolation of the computed values\n    transform: 'translateZ(0)'\n  }\n};\nvar TextareaAutosize = /*#__PURE__*/React.forwardRef(function TextareaAutosize(props, ref) {\n  var onChange = props.onChange,\n      rows = props.rows,\n      rowsMax = props.rowsMax,\n      rowsMinProp = props.rowsMin,\n      maxRowsProp = props.maxRows,\n      _props$minRows = props.minRows,\n      minRowsProp = _props$minRows === void 0 ? 1 : _props$minRows,\n      style = props.style,\n      value = props.value,\n      other = _objectWithoutProperties(props, [\"onChange\", \"rows\", \"rowsMax\", \"rowsMin\", \"maxRows\", \"minRows\", \"style\", \"value\"]);\n\n  var maxRows = maxRowsProp || rowsMax;\n  var minRows = rows || rowsMinProp || minRowsProp;\n\n  var _React$useRef = React.useRef(value != null),\n      isControlled = _React$useRef.current;\n\n  var inputRef = React.useRef(null);\n  var handleRef = useForkRef(ref, inputRef);\n  var shadowRef = React.useRef(null);\n  var renders = React.useRef(0);\n\n  var _React$useState = React.useState({}),\n      state = _React$useState[0],\n      setState = _React$useState[1];\n\n  var syncHeight = React.useCallback(function () {\n    var input = inputRef.current;\n    var computedStyle = window.getComputedStyle(input);\n    var inputShallow = shadowRef.current;\n    inputShallow.style.width = computedStyle.width;\n    inputShallow.value = input.value || props.placeholder || 'x';\n\n    if (inputShallow.value.slice(-1) === '\\n') {\n      // Certain fonts which overflow the line height will cause the textarea\n      // to report a different scrollHeight depending on whether the last line\n      // is empty. Make it non-empty to avoid this issue.\n      inputShallow.value += ' ';\n    }\n\n    var boxSizing = computedStyle['box-sizing'];\n    var padding = getStyleValue(computedStyle, 'padding-bottom') + getStyleValue(computedStyle, 'padding-top');\n    var border = getStyleValue(computedStyle, 'border-bottom-width') + getStyleValue(computedStyle, 'border-top-width'); // The height of the inner content\n\n    var innerHeight = inputShallow.scrollHeight - padding; // Measure height of a textarea with a single row\n\n    inputShallow.value = 'x';\n    var singleRowHeight = inputShallow.scrollHeight - padding; // The height of the outer content\n\n    var outerHeight = innerHeight;\n\n    if (minRows) {\n      outerHeight = Math.max(Number(minRows) * singleRowHeight, outerHeight);\n    }\n\n    if (maxRows) {\n      outerHeight = Math.min(Number(maxRows) * singleRowHeight, outerHeight);\n    }\n\n    outerHeight = Math.max(outerHeight, singleRowHeight); // Take the box sizing into account for applying this value as a style.\n\n    var outerHeightStyle = outerHeight + (boxSizing === 'border-box' ? padding + border : 0);\n    var overflow = Math.abs(outerHeight - innerHeight) <= 1;\n    setState(function (prevState) {\n      // Need a large enough difference to update the height.\n      // This prevents infinite rendering loop.\n      if (renders.current < 20 && (outerHeightStyle > 0 && Math.abs((prevState.outerHeightStyle || 0) - outerHeightStyle) > 1 || prevState.overflow !== overflow)) {\n        renders.current += 1;\n        return {\n          overflow: overflow,\n          outerHeightStyle: outerHeightStyle\n        };\n      }\n\n      if (process.env.NODE_ENV !== 'production') {\n        if (renders.current === 20) {\n          console.error(['Material-UI: Too many re-renders. The layout is unstable.', 'TextareaAutosize limits the number of renders to prevent an infinite loop.'].join('\\n'));\n        }\n      }\n\n      return prevState;\n    });\n  }, [maxRows, minRows, props.placeholder]);\n  React.useEffect(function () {\n    var handleResize = debounce(function () {\n      renders.current = 0;\n      syncHeight();\n    });\n    window.addEventListener('resize', handleResize);\n    return function () {\n      handleResize.clear();\n      window.removeEventListener('resize', handleResize);\n    };\n  }, [syncHeight]);\n  useEnhancedEffect(function () {\n    syncHeight();\n  });\n  React.useEffect(function () {\n    renders.current = 0;\n  }, [value]);\n\n  var handleChange = function handleChange(event) {\n    renders.current = 0;\n\n    if (!isControlled) {\n      syncHeight();\n    }\n\n    if (onChange) {\n      onChange(event);\n    }\n  };\n\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"textarea\", _extends({\n    value: value,\n    onChange: handleChange,\n    ref: handleRef // Apply the rows prop to get a \"correct\" first SSR paint\n    ,\n    rows: minRows,\n    style: _extends({\n      height: state.outerHeightStyle,\n      // Need a large enough difference to allow scrolling.\n      // This prevents infinite rendering loop.\n      overflow: state.overflow ? 'hidden' : null\n    }, style)\n  }, other)), /*#__PURE__*/React.createElement(\"textarea\", {\n    \"aria-hidden\": true,\n    className: props.className,\n    readOnly: true,\n    ref: shadowRef,\n    tabIndex: -1,\n    style: _extends({}, styles.shadow, style)\n  }));\n});\nprocess.env.NODE_ENV !== \"production\" ? TextareaAutosize.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * Maximum number of rows to display.\n   */\n  maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n  /**\n   * Minimum number of rows to display.\n   */\n  minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n  /**\n   * @ignore\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  placeholder: PropTypes.string,\n\n  /**\n   * Minimum number of rows to display.\n   * @deprecated Use `minRows` instead.\n   */\n  rows: deprecatedPropType(PropTypes.oneOfType([PropTypes.number, PropTypes.string]), 'Use `minRows` instead.'),\n\n  /**\n   * Maximum number of rows to display.\n   * @deprecated Use `maxRows` instead.\n   */\n  rowsMax: deprecatedPropType(PropTypes.oneOfType([PropTypes.number, PropTypes.string]), 'Use `maxRows` instead.'),\n\n  /**\n   * Minimum number of rows to display.\n   * @deprecated Use `minRows` instead.\n   */\n  rowsMin: deprecatedPropType(PropTypes.oneOfType([PropTypes.number, PropTypes.string]), 'Use `minRows` instead.'),\n\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  value: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.number, PropTypes.string])\n} : void 0;\nexport default TextareaAutosize;","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport { formatMuiErrorMessage as _formatMuiErrorMessage } from \"@material-ui/utils\";\n\n/* eslint-disable jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@material-ui/utils';\nimport formControlState from '../FormControl/formControlState';\nimport FormControlContext, { useFormControl } from '../FormControl/FormControlContext';\nimport withStyles from '../styles/withStyles';\nimport capitalize from '../utils/capitalize';\nimport useForkRef from '../utils/useForkRef';\nimport TextareaAutosize from '../TextareaAutosize';\nimport { isFilled } from './utils';\nexport var styles = function styles(theme) {\n  var light = theme.palette.type === 'light';\n  var placeholder = {\n    color: 'currentColor',\n    opacity: light ? 0.42 : 0.5,\n    transition: theme.transitions.create('opacity', {\n      duration: theme.transitions.duration.shorter\n    })\n  };\n  var placeholderHidden = {\n    opacity: '0 !important'\n  };\n  var placeholderVisible = {\n    opacity: light ? 0.42 : 0.5\n  };\n  return {\n    '@global': {\n      '@keyframes mui-auto-fill': {},\n      '@keyframes mui-auto-fill-cancel': {}\n    },\n\n    /* Styles applied to the root element. */\n    root: _extends({}, theme.typography.body1, {\n      color: theme.palette.text.primary,\n      lineHeight: '1.1876em',\n      // Reset (19px), match the native input line-height\n      boxSizing: 'border-box',\n      // Prevent padding issue with fullWidth.\n      position: 'relative',\n      cursor: 'text',\n      display: 'inline-flex',\n      alignItems: 'center',\n      '&$disabled': {\n        color: theme.palette.text.disabled,\n        cursor: 'default'\n      }\n    }),\n\n    /* Styles applied to the root element if the component is a descendant of `FormControl`. */\n    formControl: {},\n\n    /* Styles applied to the root element if the component is focused. */\n    focused: {},\n\n    /* Styles applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `startAdornment` is provided. */\n    adornedStart: {},\n\n    /* Styles applied to the root element if `endAdornment` is provided. */\n    adornedEnd: {},\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    marginDense: {},\n\n    /* Styles applied to the root element if `multiline={true}`. */\n    multiline: {\n      padding: \"\".concat(8 - 2, \"px 0 \").concat(8 - 1, \"px\"),\n      '&$marginDense': {\n        paddingTop: 4 - 1\n      }\n    },\n\n    /* Styles applied to the root element if the color is secondary. */\n    colorSecondary: {},\n\n    /* Styles applied to the root element if `fullWidth={true}`. */\n    fullWidth: {\n      width: '100%'\n    },\n\n    /* Styles applied to the `input` element. */\n    input: {\n      font: 'inherit',\n      letterSpacing: 'inherit',\n      color: 'currentColor',\n      padding: \"\".concat(8 - 2, \"px 0 \").concat(8 - 1, \"px\"),\n      border: 0,\n      boxSizing: 'content-box',\n      background: 'none',\n      height: '1.1876em',\n      // Reset (19px), match the native input line-height\n      margin: 0,\n      // Reset for Safari\n      WebkitTapHighlightColor: 'transparent',\n      display: 'block',\n      // Make the flex item shrink with Firefox\n      minWidth: 0,\n      width: '100%',\n      // Fix IE 11 width issue\n      animationName: 'mui-auto-fill-cancel',\n      animationDuration: '10ms',\n      '&::-webkit-input-placeholder': placeholder,\n      '&::-moz-placeholder': placeholder,\n      // Firefox 19+\n      '&:-ms-input-placeholder': placeholder,\n      // IE 11\n      '&::-ms-input-placeholder': placeholder,\n      // Edge\n      '&:focus': {\n        outline: 0\n      },\n      // Reset Firefox invalid required input style\n      '&:invalid': {\n        boxShadow: 'none'\n      },\n      '&::-webkit-search-decoration': {\n        // Remove the padding when type=search.\n        '-webkit-appearance': 'none'\n      },\n      // Show and hide the placeholder logic\n      'label[data-shrink=false] + $formControl &': {\n        '&::-webkit-input-placeholder': placeholderHidden,\n        '&::-moz-placeholder': placeholderHidden,\n        // Firefox 19+\n        '&:-ms-input-placeholder': placeholderHidden,\n        // IE 11\n        '&::-ms-input-placeholder': placeholderHidden,\n        // Edge\n        '&:focus::-webkit-input-placeholder': placeholderVisible,\n        '&:focus::-moz-placeholder': placeholderVisible,\n        // Firefox 19+\n        '&:focus:-ms-input-placeholder': placeholderVisible,\n        // IE 11\n        '&:focus::-ms-input-placeholder': placeholderVisible // Edge\n\n      },\n      '&$disabled': {\n        opacity: 1 // Reset iOS opacity\n\n      },\n      '&:-webkit-autofill': {\n        animationDuration: '5000s',\n        animationName: 'mui-auto-fill'\n      }\n    },\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    inputMarginDense: {\n      paddingTop: 4 - 1\n    },\n\n    /* Styles applied to the `input` element if `multiline={true}`. */\n    inputMultiline: {\n      height: 'auto',\n      resize: 'none',\n      padding: 0\n    },\n\n    /* Styles applied to the `input` element if `type=\"search\"`. */\n    inputTypeSearch: {\n      // Improve type search style.\n      '-moz-appearance': 'textfield',\n      '-webkit-appearance': 'textfield'\n    },\n\n    /* Styles applied to the `input` element if `startAdornment` is provided. */\n    inputAdornedStart: {},\n\n    /* Styles applied to the `input` element if `endAdornment` is provided. */\n    inputAdornedEnd: {},\n\n    /* Styles applied to the `input` element if `hiddenLabel={true}`. */\n    inputHiddenLabel: {}\n  };\n};\nvar useEnhancedEffect = typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect;\n/**\n * `InputBase` contains as few styles as possible.\n * It aims to be a simple building block for creating an input.\n * It contains a load of style reset and some state logic.\n */\n\nvar InputBase = /*#__PURE__*/React.forwardRef(function InputBase(props, ref) {\n  var ariaDescribedby = props['aria-describedby'],\n      autoComplete = props.autoComplete,\n      autoFocus = props.autoFocus,\n      classes = props.classes,\n      className = props.className,\n      color = props.color,\n      defaultValue = props.defaultValue,\n      disabled = props.disabled,\n      endAdornment = props.endAdornment,\n      error = props.error,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      id = props.id,\n      _props$inputComponent = props.inputComponent,\n      inputComponent = _props$inputComponent === void 0 ? 'input' : _props$inputComponent,\n      _props$inputProps = props.inputProps,\n      inputPropsProp = _props$inputProps === void 0 ? {} : _props$inputProps,\n      inputRefProp = props.inputRef,\n      margin = props.margin,\n      _props$multiline = props.multiline,\n      multiline = _props$multiline === void 0 ? false : _props$multiline,\n      name = props.name,\n      onBlur = props.onBlur,\n      onChange = props.onChange,\n      onClick = props.onClick,\n      onFocus = props.onFocus,\n      onKeyDown = props.onKeyDown,\n      onKeyUp = props.onKeyUp,\n      placeholder = props.placeholder,\n      readOnly = props.readOnly,\n      renderSuffix = props.renderSuffix,\n      rows = props.rows,\n      rowsMax = props.rowsMax,\n      rowsMin = props.rowsMin,\n      maxRows = props.maxRows,\n      minRows = props.minRows,\n      startAdornment = props.startAdornment,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'text' : _props$type,\n      valueProp = props.value,\n      other = _objectWithoutProperties(props, [\"aria-describedby\", \"autoComplete\", \"autoFocus\", \"classes\", \"className\", \"color\", \"defaultValue\", \"disabled\", \"endAdornment\", \"error\", \"fullWidth\", \"id\", \"inputComponent\", \"inputProps\", \"inputRef\", \"margin\", \"multiline\", \"name\", \"onBlur\", \"onChange\", \"onClick\", \"onFocus\", \"onKeyDown\", \"onKeyUp\", \"placeholder\", \"readOnly\", \"renderSuffix\", \"rows\", \"rowsMax\", \"rowsMin\", \"maxRows\", \"minRows\", \"startAdornment\", \"type\", \"value\"]);\n\n  var value = inputPropsProp.value != null ? inputPropsProp.value : valueProp;\n\n  var _React$useRef = React.useRef(value != null),\n      isControlled = _React$useRef.current;\n\n  var inputRef = React.useRef();\n  var handleInputRefWarning = React.useCallback(function (instance) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (instance && instance.nodeName !== 'INPUT' && !instance.focus) {\n        console.error(['Material-UI: You have provided a `inputComponent` to the input component', 'that does not correctly handle the `inputRef` prop.', 'Make sure the `inputRef` prop is called with a HTMLInputElement.'].join('\\n'));\n      }\n    }\n  }, []);\n  var handleInputPropsRefProp = useForkRef(inputPropsProp.ref, handleInputRefWarning);\n  var handleInputRefProp = useForkRef(inputRefProp, handleInputPropsRefProp);\n  var handleInputRef = useForkRef(inputRef, handleInputRefProp);\n\n  var _React$useState = React.useState(false),\n      focused = _React$useState[0],\n      setFocused = _React$useState[1];\n\n  var muiFormControl = useFormControl();\n\n  if (process.env.NODE_ENV !== 'production') {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useEffect(function () {\n      if (muiFormControl) {\n        return muiFormControl.registerEffect();\n      }\n\n      return undefined;\n    }, [muiFormControl]);\n  }\n\n  var fcs = formControlState({\n    props: props,\n    muiFormControl: muiFormControl,\n    states: ['color', 'disabled', 'error', 'hiddenLabel', 'margin', 'required', 'filled']\n  });\n  fcs.focused = muiFormControl ? muiFormControl.focused : focused; // The blur won't fire when the disabled state is set on a focused input.\n  // We need to book keep the focused state manually.\n\n  React.useEffect(function () {\n    if (!muiFormControl && disabled && focused) {\n      setFocused(false);\n\n      if (onBlur) {\n        onBlur();\n      }\n    }\n  }, [muiFormControl, disabled, focused, onBlur]);\n  var onFilled = muiFormControl && muiFormControl.onFilled;\n  var onEmpty = muiFormControl && muiFormControl.onEmpty;\n  var checkDirty = React.useCallback(function (obj) {\n    if (isFilled(obj)) {\n      if (onFilled) {\n        onFilled();\n      }\n    } else if (onEmpty) {\n      onEmpty();\n    }\n  }, [onFilled, onEmpty]);\n  useEnhancedEffect(function () {\n    if (isControlled) {\n      checkDirty({\n        value: value\n      });\n    }\n  }, [value, checkDirty, isControlled]);\n\n  var handleFocus = function handleFocus(event) {\n    // Fix a bug with IE 11 where the focus/blur events are triggered\n    // while the input is disabled.\n    if (fcs.disabled) {\n      event.stopPropagation();\n      return;\n    }\n\n    if (onFocus) {\n      onFocus(event);\n    }\n\n    if (inputPropsProp.onFocus) {\n      inputPropsProp.onFocus(event);\n    }\n\n    if (muiFormControl && muiFormControl.onFocus) {\n      muiFormControl.onFocus(event);\n    } else {\n      setFocused(true);\n    }\n  };\n\n  var handleBlur = function handleBlur(event) {\n    if (onBlur) {\n      onBlur(event);\n    }\n\n    if (inputPropsProp.onBlur) {\n      inputPropsProp.onBlur(event);\n    }\n\n    if (muiFormControl && muiFormControl.onBlur) {\n      muiFormControl.onBlur(event);\n    } else {\n      setFocused(false);\n    }\n  };\n\n  var handleChange = function handleChange(event) {\n    if (!isControlled) {\n      var element = event.target || inputRef.current;\n\n      if (element == null) {\n        throw new Error(process.env.NODE_ENV !== \"production\" ? \"Material-UI: Expected valid input target. Did you use a custom `inputComponent` and forget to forward refs? See https://material-ui.com/r/input-component-ref-interface for more info.\" : _formatMuiErrorMessage(1));\n      }\n\n      checkDirty({\n        value: element.value\n      });\n    }\n\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    if (inputPropsProp.onChange) {\n      inputPropsProp.onChange.apply(inputPropsProp, [event].concat(args));\n    } // Perform in the willUpdate\n\n\n    if (onChange) {\n      onChange.apply(void 0, [event].concat(args));\n    }\n  }; // Check the input state on mount, in case it was filled by the user\n  // or auto filled by the browser before the hydration (for SSR).\n\n\n  React.useEffect(function () {\n    checkDirty(inputRef.current);\n  }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n  var handleClick = function handleClick(event) {\n    if (inputRef.current && event.currentTarget === event.target) {\n      inputRef.current.focus();\n    }\n\n    if (onClick) {\n      onClick(event);\n    }\n  };\n\n  var InputComponent = inputComponent;\n\n  var inputProps = _extends({}, inputPropsProp, {\n    ref: handleInputRef\n  });\n\n  if (typeof InputComponent !== 'string') {\n    inputProps = _extends({\n      // Rename ref to inputRef as we don't know the\n      // provided `inputComponent` structure.\n      inputRef: handleInputRef,\n      type: type\n    }, inputProps, {\n      ref: null\n    });\n  } else if (multiline) {\n    if (rows && !maxRows && !minRows && !rowsMax && !rowsMin) {\n      InputComponent = 'textarea';\n    } else {\n      inputProps = _extends({\n        minRows: rows || minRows,\n        rowsMax: rowsMax,\n        maxRows: maxRows\n      }, inputProps);\n      InputComponent = TextareaAutosize;\n    }\n  } else {\n    inputProps = _extends({\n      type: type\n    }, inputProps);\n  }\n\n  var handleAutoFill = function handleAutoFill(event) {\n    // Provide a fake value as Chrome might not let you access it for security reasons.\n    checkDirty(event.animationName === 'mui-auto-fill-cancel' ? inputRef.current : {\n      value: 'x'\n    });\n  };\n\n  React.useEffect(function () {\n    if (muiFormControl) {\n      muiFormControl.setAdornedStart(Boolean(startAdornment));\n    }\n  }, [muiFormControl, startAdornment]);\n  return /*#__PURE__*/React.createElement(\"div\", _extends({\n    className: clsx(classes.root, classes[\"color\".concat(capitalize(fcs.color || 'primary'))], className, fcs.disabled && classes.disabled, fcs.error && classes.error, fullWidth && classes.fullWidth, fcs.focused && classes.focused, muiFormControl && classes.formControl, multiline && classes.multiline, startAdornment && classes.adornedStart, endAdornment && classes.adornedEnd, fcs.margin === 'dense' && classes.marginDense),\n    onClick: handleClick,\n    ref: ref\n  }, other), startAdornment, /*#__PURE__*/React.createElement(FormControlContext.Provider, {\n    value: null\n  }, /*#__PURE__*/React.createElement(InputComponent, _extends({\n    \"aria-invalid\": fcs.error,\n    \"aria-describedby\": ariaDescribedby,\n    autoComplete: autoComplete,\n    autoFocus: autoFocus,\n    defaultValue: defaultValue,\n    disabled: fcs.disabled,\n    id: id,\n    onAnimationStart: handleAutoFill,\n    name: name,\n    placeholder: placeholder,\n    readOnly: readOnly,\n    required: fcs.required,\n    rows: rows,\n    value: value,\n    onKeyDown: onKeyDown,\n    onKeyUp: onKeyUp\n  }, inputProps, {\n    className: clsx(classes.input, inputPropsProp.className, fcs.disabled && classes.disabled, multiline && classes.inputMultiline, fcs.hiddenLabel && classes.inputHiddenLabel, startAdornment && classes.inputAdornedStart, endAdornment && classes.inputAdornedEnd, type === 'search' && classes.inputTypeSearch, fcs.margin === 'dense' && classes.inputMarginDense),\n    onBlur: handleBlur,\n    onChange: handleChange,\n    onFocus: handleFocus\n  }))), endAdornment, renderSuffix ? renderSuffix(_extends({}, fcs, {\n    startAdornment: startAdornment\n  })) : null);\n});\nprocess.env.NODE_ENV !== \"production\" ? InputBase.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * @ignore\n   */\n  'aria-describedby': PropTypes.string,\n\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: PropTypes.string,\n\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: PropTypes.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['primary', 'secondary']),\n\n  /**\n   * The default `input` element value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n\n  /**\n   * If `true`, the `input` element will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: PropTypes.node,\n\n  /**\n   * If `true`, the input will indicate an error. This is normally obtained via context from\n   * FormControl.\n   */\n  error: PropTypes.bool,\n\n  /**\n   * If `true`, the input will take up the full width of its container.\n   */\n  fullWidth: PropTypes.bool,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n\n  /**\n   * The component used for the `input` element.\n   * Either a string to use a HTML element or a component.\n   */\n  inputComponent: PropTypes.elementType,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: PropTypes.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: PropTypes.oneOf(['dense', 'none']),\n\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n  /**\n   * Minimum number of rows to display when multiline option is set to true.\n   */\n  minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n  /**\n   * If `true`, a textarea element will be rendered.\n   */\n  multiline: PropTypes.bool,\n\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: PropTypes.string,\n\n  /**\n   * Callback fired when the input is blurred.\n   *\n   * Notice that the first argument (event) might be undefined.\n   */\n  onBlur: PropTypes.func,\n\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onClick: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onFocus: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onKeyDown: PropTypes.func,\n\n  /**\n   * @ignore\n   */\n  onKeyUp: PropTypes.func,\n\n  /**\n   * The short hint displayed in the input before the user enters a value.\n   */\n  placeholder: PropTypes.string,\n\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  renderSuffix: PropTypes.func,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: PropTypes.bool,\n\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n  /**\n   * Maximum number of rows to display.\n   * @deprecated Use `maxRows` instead.\n   */\n  rowsMax: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n  /**\n   * Minimum number of rows to display.\n   * @deprecated Use `minRows` instead.\n   */\n  rowsMin: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: PropTypes.node,\n\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).\n   */\n  type: PropTypes.string,\n\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: PropTypes.any\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiInputBase'\n})(InputBase);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport useTheme from '../styles/useTheme';\nimport capitalize from '../utils/capitalize';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'absolute',\n      bottom: 0,\n      right: 0,\n      top: -5,\n      left: 0,\n      margin: 0,\n      padding: '0 8px',\n      pointerEvents: 'none',\n      borderRadius: 'inherit',\n      borderStyle: 'solid',\n      borderWidth: 1,\n      overflow: 'hidden'\n    },\n\n    /* Styles applied to the legend element when `labelWidth` is provided. */\n    legend: {\n      textAlign: 'left',\n      padding: 0,\n      lineHeight: '11px',\n      // sync with `height` in `legend` styles\n      transition: theme.transitions.create('width', {\n        duration: 150,\n        easing: theme.transitions.easing.easeOut\n      })\n    },\n\n    /* Styles applied to the legend element. */\n    legendLabelled: {\n      display: 'block',\n      width: 'auto',\n      textAlign: 'left',\n      padding: 0,\n      height: 11,\n      // sync with `lineHeight` in `legend` styles\n      fontSize: '0.75em',\n      visibility: 'hidden',\n      maxWidth: 0.01,\n      transition: theme.transitions.create('max-width', {\n        duration: 50,\n        easing: theme.transitions.easing.easeOut\n      }),\n      '& > span': {\n        paddingLeft: 5,\n        paddingRight: 5,\n        display: 'inline-block'\n      }\n    },\n\n    /* Styles applied to the legend element is notched. */\n    legendNotched: {\n      maxWidth: 1000,\n      transition: theme.transitions.create('max-width', {\n        duration: 100,\n        easing: theme.transitions.easing.easeOut,\n        delay: 50\n      })\n    }\n  };\n};\n/**\n * @ignore - internal component.\n */\n\nvar NotchedOutline = /*#__PURE__*/React.forwardRef(function NotchedOutline(props, ref) {\n  var children = props.children,\n      classes = props.classes,\n      className = props.className,\n      label = props.label,\n      labelWidthProp = props.labelWidth,\n      notched = props.notched,\n      style = props.style,\n      other = _objectWithoutProperties(props, [\"children\", \"classes\", \"className\", \"label\", \"labelWidth\", \"notched\", \"style\"]);\n\n  var theme = useTheme();\n  var align = theme.direction === 'rtl' ? 'right' : 'left';\n\n  if (label !== undefined) {\n    return /*#__PURE__*/React.createElement(\"fieldset\", _extends({\n      \"aria-hidden\": true,\n      className: clsx(classes.root, className),\n      ref: ref,\n      style: style\n    }, other), /*#__PURE__*/React.createElement(\"legend\", {\n      className: clsx(classes.legendLabelled, notched && classes.legendNotched)\n    }, label ? /*#__PURE__*/React.createElement(\"span\", null, label) : /*#__PURE__*/React.createElement(\"span\", {\n      dangerouslySetInnerHTML: {\n        __html: '&#8203;'\n      }\n    })));\n  }\n\n  var labelWidth = labelWidthProp > 0 ? labelWidthProp * 0.75 + 8 : 0.01;\n  return /*#__PURE__*/React.createElement(\"fieldset\", _extends({\n    \"aria-hidden\": true,\n    style: _extends(_defineProperty({}, \"padding\".concat(capitalize(align)), 8), style),\n    className: clsx(classes.root, className),\n    ref: ref\n  }, other), /*#__PURE__*/React.createElement(\"legend\", {\n    className: classes.legend,\n    style: {\n      // IE 11: fieldset with legend does not render\n      // a border radius. This maintains consistency\n      // by always having a legend rendered\n      width: notched ? labelWidth : 0.01\n    }\n  }, /*#__PURE__*/React.createElement(\"span\", {\n    dangerouslySetInnerHTML: {\n      __html: '&#8203;'\n    }\n  })));\n});\nprocess.env.NODE_ENV !== \"production\" ? NotchedOutline.propTypes = {\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The label.\n   */\n  label: PropTypes.node,\n\n  /**\n   * The width of the label.\n   */\n  labelWidth: PropTypes.number.isRequired,\n\n  /**\n   * If `true`, the outline is notched to accommodate the label.\n   */\n  notched: PropTypes.bool.isRequired,\n\n  /**\n   * @ignore\n   */\n  style: PropTypes.object\n} : void 0;\nexport default withStyles(styles, {\n  name: 'PrivateNotchedOutline'\n})(NotchedOutline);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { refType } from '@material-ui/utils';\nimport InputBase from '../InputBase';\nimport NotchedOutline from './NotchedOutline';\nimport withStyles from '../styles/withStyles';\nexport var styles = function styles(theme) {\n  var borderColor = theme.palette.type === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)';\n  return {\n    /* Styles applied to the root element. */\n    root: {\n      position: 'relative',\n      borderRadius: theme.shape.borderRadius,\n      '&:hover $notchedOutline': {\n        borderColor: theme.palette.text.primary\n      },\n      // Reset on touch devices, it doesn't add specificity\n      '@media (hover: none)': {\n        '&:hover $notchedOutline': {\n          borderColor: borderColor\n        }\n      },\n      '&$focused $notchedOutline': {\n        borderColor: theme.palette.primary.main,\n        borderWidth: 2\n      },\n      '&$error $notchedOutline': {\n        borderColor: theme.palette.error.main\n      },\n      '&$disabled $notchedOutline': {\n        borderColor: theme.palette.action.disabled\n      }\n    },\n\n    /* Styles applied to the root element if the color is secondary. */\n    colorSecondary: {\n      '&$focused $notchedOutline': {\n        borderColor: theme.palette.secondary.main\n      }\n    },\n\n    /* Styles applied to the root element if the component is focused. */\n    focused: {},\n\n    /* Styles applied to the root element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the root element if `startAdornment` is provided. */\n    adornedStart: {\n      paddingLeft: 14\n    },\n\n    /* Styles applied to the root element if `endAdornment` is provided. */\n    adornedEnd: {\n      paddingRight: 14\n    },\n\n    /* Pseudo-class applied to the root element if `error={true}`. */\n    error: {},\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    marginDense: {},\n\n    /* Styles applied to the root element if `multiline={true}`. */\n    multiline: {\n      padding: '18.5px 14px',\n      '&$marginDense': {\n        paddingTop: 10.5,\n        paddingBottom: 10.5\n      }\n    },\n\n    /* Styles applied to the `NotchedOutline` element. */\n    notchedOutline: {\n      borderColor: borderColor\n    },\n\n    /* Styles applied to the `input` element. */\n    input: {\n      padding: '18.5px 14px',\n      '&:-webkit-autofill': {\n        WebkitBoxShadow: theme.palette.type === 'light' ? null : '0 0 0 100px #266798 inset',\n        WebkitTextFillColor: theme.palette.type === 'light' ? null : '#fff',\n        caretColor: theme.palette.type === 'light' ? null : '#fff',\n        borderRadius: 'inherit'\n      }\n    },\n\n    /* Styles applied to the `input` element if `margin=\"dense\"`. */\n    inputMarginDense: {\n      paddingTop: 10.5,\n      paddingBottom: 10.5\n    },\n\n    /* Styles applied to the `input` element if `multiline={true}`. */\n    inputMultiline: {\n      padding: 0\n    },\n\n    /* Styles applied to the `input` element if `startAdornment` is provided. */\n    inputAdornedStart: {\n      paddingLeft: 0\n    },\n\n    /* Styles applied to the `input` element if `endAdornment` is provided. */\n    inputAdornedEnd: {\n      paddingRight: 0\n    }\n  };\n};\nvar OutlinedInput = /*#__PURE__*/React.forwardRef(function OutlinedInput(props, ref) {\n  var classes = props.classes,\n      _props$fullWidth = props.fullWidth,\n      fullWidth = _props$fullWidth === void 0 ? false : _props$fullWidth,\n      _props$inputComponent = props.inputComponent,\n      inputComponent = _props$inputComponent === void 0 ? 'input' : _props$inputComponent,\n      label = props.label,\n      _props$labelWidth = props.labelWidth,\n      labelWidth = _props$labelWidth === void 0 ? 0 : _props$labelWidth,\n      _props$multiline = props.multiline,\n      multiline = _props$multiline === void 0 ? false : _props$multiline,\n      notched = props.notched,\n      _props$type = props.type,\n      type = _props$type === void 0 ? 'text' : _props$type,\n      other = _objectWithoutProperties(props, [\"classes\", \"fullWidth\", \"inputComponent\", \"label\", \"labelWidth\", \"multiline\", \"notched\", \"type\"]);\n\n  return /*#__PURE__*/React.createElement(InputBase, _extends({\n    renderSuffix: function renderSuffix(state) {\n      return /*#__PURE__*/React.createElement(NotchedOutline, {\n        className: classes.notchedOutline,\n        label: label,\n        labelWidth: labelWidth,\n        notched: typeof notched !== 'undefined' ? notched : Boolean(state.startAdornment || state.filled || state.focused)\n      });\n    },\n    classes: _extends({}, classes, {\n      root: clsx(classes.root, classes.underline),\n      notchedOutline: null\n    }),\n    fullWidth: fullWidth,\n    inputComponent: inputComponent,\n    multiline: multiline,\n    ref: ref,\n    type: type\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? OutlinedInput.propTypes = {\n  // ----------------------------- Warning --------------------------------\n  // | These PropTypes are generated from the TypeScript type definitions |\n  // |     To update them edit the d.ts file and run \"yarn proptypes\"     |\n  // ----------------------------------------------------------------------\n\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: PropTypes.string,\n\n  /**\n   * If `true`, the `input` element will be focused during the first mount.\n   */\n  autoFocus: PropTypes.bool,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object,\n\n  /**\n   * The color of the component. It supports those theme colors that make sense for this component.\n   */\n  color: PropTypes.oneOf(['primary', 'secondary']),\n\n  /**\n   * The default `input` element value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n\n  /**\n   * If `true`, the `input` element will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: PropTypes.node,\n\n  /**\n   * If `true`, the input will indicate an error. This is normally obtained via context from\n   * FormControl.\n   */\n  error: PropTypes.bool,\n\n  /**\n   * If `true`, the input will take up the full width of its container.\n   */\n  fullWidth: PropTypes.bool,\n\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n\n  /**\n   * The component used for the `input` element.\n   * Either a string to use a HTML element or a component.\n   */\n  inputComponent: PropTypes.elementType,\n\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Attributes) applied to the `input` element.\n   */\n  inputProps: PropTypes.object,\n\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n\n  /**\n   * The label of the input. It is only used for layout. The actual labelling\n   * is handled by `InputLabel`. If specified `labelWidth` is ignored.\n   */\n  label: PropTypes.node,\n\n  /**\n   * The width of the label. Is ignored if `label` is provided. Prefer `label`\n   * if the input label appears with a strike through.\n   */\n  labelWidth: PropTypes.number,\n\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: PropTypes.oneOf(['dense', 'none']),\n\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n  /**\n   * If `true`, a textarea element will be rendered.\n   */\n  multiline: PropTypes.bool,\n\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: PropTypes.string,\n\n  /**\n   * If `true`, the outline is notched to accommodate the label.\n   */\n  notched: PropTypes.bool,\n\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n\n  /**\n   * The short hint displayed in the input before the user enters a value.\n   */\n  placeholder: PropTypes.string,\n\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: PropTypes.bool,\n\n  /**\n   * If `true`, the `input` element will be required.\n   */\n  required: PropTypes.bool,\n\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: PropTypes.node,\n\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#Form_%3Cinput%3E_types).\n   */\n  type: PropTypes.string,\n\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: PropTypes.any\n} : void 0;\nOutlinedInput.muiName = 'Input';\nexport default withStyles(styles, {\n  name: 'MuiOutlinedInput'\n})(OutlinedInput);","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { chainPropTypes } from '@material-ui/utils';\nimport withStyles from '../styles/withStyles';\nimport ButtonBase from '../ButtonBase';\nimport isMuiElement from '../utils/isMuiElement';\nimport useForkRef from '../utils/useForkRef';\nimport ListContext from '../List/ListContext';\nimport * as ReactDOM from 'react-dom';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the (normally root) `component` element. May be wrapped by a `container`. */\n    root: {\n      display: 'flex',\n      justifyContent: 'flex-start',\n      alignItems: 'center',\n      position: 'relative',\n      textDecoration: 'none',\n      width: '100%',\n      boxSizing: 'border-box',\n      textAlign: 'left',\n      paddingTop: 8,\n      paddingBottom: 8,\n      '&$focusVisible': {\n        backgroundColor: theme.palette.action.selected\n      },\n      '&$selected, &$selected:hover': {\n        backgroundColor: theme.palette.action.selected\n      },\n      '&$disabled': {\n        opacity: 0.5\n      }\n    },\n\n    /* Styles applied to the `container` element if `children` includes `ListItemSecondaryAction`. */\n    container: {\n      position: 'relative'\n    },\n\n    /* Pseudo-class applied to the `component`'s `focusVisibleClassName` prop if `button={true}`. */\n    focusVisible: {},\n\n    /* Styles applied to the `component` element if dense. */\n    dense: {\n      paddingTop: 4,\n      paddingBottom: 4\n    },\n\n    /* Styles applied to the `component` element if `alignItems=\"flex-start\"`. */\n    alignItemsFlexStart: {\n      alignItems: 'flex-start'\n    },\n\n    /* Pseudo-class applied to the inner `component` element if `disabled={true}`. */\n    disabled: {},\n\n    /* Styles applied to the inner `component` element if `divider={true}`. */\n    divider: {\n      borderBottom: \"1px solid \".concat(theme.palette.divider),\n      backgroundClip: 'padding-box'\n    },\n\n    /* Styles applied to the inner `component` element if `disableGutters={false}`. */\n    gutters: {\n      paddingLeft: 16,\n      paddingRight: 16\n    },\n\n    /* Styles applied to the inner `component` element if `button={true}`. */\n    button: {\n      transition: theme.transitions.create('background-color', {\n        duration: theme.transitions.duration.shortest\n      }),\n      '&:hover': {\n        textDecoration: 'none',\n        backgroundColor: theme.palette.action.hover,\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    },\n\n    /* Styles applied to the `component` element if `children` includes `ListItemSecondaryAction`. */\n    secondaryAction: {\n      // Add some space to avoid collision as `ListItemSecondaryAction`\n      // is absolutely positioned.\n      paddingRight: 48\n    },\n\n    /* Pseudo-class applied to the root element if `selected={true}`. */\n    selected: {}\n  };\n};\nvar useEnhancedEffect = typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect;\n/**\n * Uses an additional container component if `ListItemSecondaryAction` is the last child.\n */\n\nvar ListItem = /*#__PURE__*/React.forwardRef(function ListItem(props, ref) {\n  var _props$alignItems = props.alignItems,\n      alignItems = _props$alignItems === void 0 ? 'center' : _props$alignItems,\n      _props$autoFocus = props.autoFocus,\n      autoFocus = _props$autoFocus === void 0 ? false : _props$autoFocus,\n      _props$button = props.button,\n      button = _props$button === void 0 ? false : _props$button,\n      childrenProp = props.children,\n      classes = props.classes,\n      className = props.className,\n      componentProp = props.component,\n      _props$ContainerCompo = props.ContainerComponent,\n      ContainerComponent = _props$ContainerCompo === void 0 ? 'li' : _props$ContainerCompo,\n      _props$ContainerProps = props.ContainerProps;\n  _props$ContainerProps = _props$ContainerProps === void 0 ? {} : _props$ContainerProps;\n\n  var ContainerClassName = _props$ContainerProps.className,\n      ContainerProps = _objectWithoutProperties(_props$ContainerProps, [\"className\"]),\n      _props$dense = props.dense,\n      dense = _props$dense === void 0 ? false : _props$dense,\n      _props$disabled = props.disabled,\n      disabled = _props$disabled === void 0 ? false : _props$disabled,\n      _props$disableGutters = props.disableGutters,\n      disableGutters = _props$disableGutters === void 0 ? false : _props$disableGutters,\n      _props$divider = props.divider,\n      divider = _props$divider === void 0 ? false : _props$divider,\n      focusVisibleClassName = props.focusVisibleClassName,\n      _props$selected = props.selected,\n      selected = _props$selected === void 0 ? false : _props$selected,\n      other = _objectWithoutProperties(props, [\"alignItems\", \"autoFocus\", \"button\", \"children\", \"classes\", \"className\", \"component\", \"ContainerComponent\", \"ContainerProps\", \"dense\", \"disabled\", \"disableGutters\", \"divider\", \"focusVisibleClassName\", \"selected\"]);\n\n  var context = React.useContext(ListContext);\n  var childContext = {\n    dense: dense || context.dense || false,\n    alignItems: alignItems\n  };\n  var listItemRef = React.useRef(null);\n  useEnhancedEffect(function () {\n    if (autoFocus) {\n      if (listItemRef.current) {\n        listItemRef.current.focus();\n      } else if (process.env.NODE_ENV !== 'production') {\n        console.error('Material-UI: Unable to set focus to a ListItem whose component has not been rendered.');\n      }\n    }\n  }, [autoFocus]);\n  var children = React.Children.toArray(childrenProp);\n  var hasSecondaryAction = children.length && isMuiElement(children[children.length - 1], ['ListItemSecondaryAction']);\n  var handleOwnRef = React.useCallback(function (instance) {\n    // #StrictMode ready\n    listItemRef.current = ReactDOM.findDOMNode(instance);\n  }, []);\n  var handleRef = useForkRef(handleOwnRef, ref);\n\n  var componentProps = _extends({\n    className: clsx(classes.root, className, childContext.dense && classes.dense, !disableGutters && classes.gutters, divider && classes.divider, disabled && classes.disabled, button && classes.button, alignItems !== \"center\" && classes.alignItemsFlexStart, hasSecondaryAction && classes.secondaryAction, selected && classes.selected),\n    disabled: disabled\n  }, other);\n\n  var Component = componentProp || 'li';\n\n  if (button) {\n    componentProps.component = componentProp || 'div';\n    componentProps.focusVisibleClassName = clsx(classes.focusVisible, focusVisibleClassName);\n    Component = ButtonBase;\n  }\n\n  if (hasSecondaryAction) {\n    // Use div by default.\n    Component = !componentProps.component && !componentProp ? 'div' : Component; // Avoid nesting of li > li.\n\n    if (ContainerComponent === 'li') {\n      if (Component === 'li') {\n        Component = 'div';\n      } else if (componentProps.component === 'li') {\n        componentProps.component = 'div';\n      }\n    }\n\n    return /*#__PURE__*/React.createElement(ListContext.Provider, {\n      value: childContext\n    }, /*#__PURE__*/React.createElement(ContainerComponent, _extends({\n      className: clsx(classes.container, ContainerClassName),\n      ref: handleRef\n    }, ContainerProps), /*#__PURE__*/React.createElement(Component, componentProps, children), children.pop()));\n  }\n\n  return /*#__PURE__*/React.createElement(ListContext.Provider, {\n    value: childContext\n  }, /*#__PURE__*/React.createElement(Component, _extends({\n    ref: handleRef\n  }, componentProps), children));\n});\nprocess.env.NODE_ENV !== \"production\" ? ListItem.propTypes = {\n  /**\n   * Defines the `align-items` style property.\n   */\n  alignItems: PropTypes.oneOf(['flex-start', 'center']),\n\n  /**\n   * If `true`, the list item will be focused during the first mount.\n   * Focus will also be triggered if the value changes from false to true.\n   */\n  autoFocus: PropTypes.bool,\n\n  /**\n   * If `true`, the list item will be a button (using `ButtonBase`). Props intended\n   * for `ButtonBase` can then be applied to `ListItem`.\n   */\n  button: PropTypes.bool,\n\n  /**\n   * The content of the component. If a `ListItemSecondaryAction` is used it must\n   * be the last child.\n   */\n  children: chainPropTypes(PropTypes.node, function (props) {\n    var children = React.Children.toArray(props.children); // React.Children.toArray(props.children).findLastIndex(isListItemSecondaryAction)\n\n    var secondaryActionIndex = -1;\n\n    for (var i = children.length - 1; i >= 0; i -= 1) {\n      var child = children[i];\n\n      if (isMuiElement(child, ['ListItemSecondaryAction'])) {\n        secondaryActionIndex = i;\n        break;\n      }\n    } //  is ListItemSecondaryAction the last child of ListItem\n\n\n    if (secondaryActionIndex !== -1 && secondaryActionIndex !== children.length - 1) {\n      return new Error('Material-UI: You used an element after ListItemSecondaryAction. ' + 'For ListItem to detect that it has a secondary action ' + 'you must pass it as the last child to ListItem.');\n    }\n\n    return null;\n  }),\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   * By default, it's a `li` when `button` is `false` and a `div` when `button` is `true`.\n   */\n  component: PropTypes\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * The container component used when a `ListItemSecondaryAction` is the last child.\n   */\n  ContainerComponent: PropTypes.elementType,\n\n  /**\n   * Props applied to the container component if used.\n   */\n  ContainerProps: PropTypes.object,\n\n  /**\n   * If `true`, compact vertical padding designed for keyboard and mouse input will be used.\n   */\n  dense: PropTypes.bool,\n\n  /**\n   * If `true`, the list item will be disabled.\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the left and right padding is removed.\n   */\n  disableGutters: PropTypes.bool,\n\n  /**\n   * If `true`, a 1px light border is added to the bottom of the list item.\n   */\n  divider: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  focusVisibleClassName: PropTypes.string,\n\n  /**\n   * Use to apply selected styling.\n   */\n  selected: PropTypes.bool\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiListItem'\n})(ListItem);","import _objectWithoutProperties from \"@babel/runtime/helpers/esm/objectWithoutProperties\";\nimport _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport withStyles from '../styles/withStyles';\nimport ListItem from '../ListItem';\nexport var styles = function styles(theme) {\n  return {\n    /* Styles applied to the root element. */\n    root: _extends({}, theme.typography.body1, _defineProperty({\n      minHeight: 48,\n      paddingTop: 6,\n      paddingBottom: 6,\n      boxSizing: 'border-box',\n      width: 'auto',\n      overflow: 'hidden',\n      whiteSpace: 'nowrap'\n    }, theme.breakpoints.up('sm'), {\n      minHeight: 'auto'\n    })),\n    // TODO v5: remove\n\n    /* Styles applied to the root element if `disableGutters={false}`. */\n    gutters: {},\n\n    /* Styles applied to the root element if `selected={true}`. */\n    selected: {},\n\n    /* Styles applied to the root element if dense. */\n    dense: _extends({}, theme.typography.body2, {\n      minHeight: 'auto'\n    })\n  };\n};\nvar MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem(props, ref) {\n  var classes = props.classes,\n      className = props.className,\n      _props$component = props.component,\n      component = _props$component === void 0 ? 'li' : _props$component,\n      _props$disableGutters = props.disableGutters,\n      disableGutters = _props$disableGutters === void 0 ? false : _props$disableGutters,\n      ListItemClasses = props.ListItemClasses,\n      _props$role = props.role,\n      role = _props$role === void 0 ? 'menuitem' : _props$role,\n      selected = props.selected,\n      tabIndexProp = props.tabIndex,\n      other = _objectWithoutProperties(props, [\"classes\", \"className\", \"component\", \"disableGutters\", \"ListItemClasses\", \"role\", \"selected\", \"tabIndex\"]);\n\n  var tabIndex;\n\n  if (!props.disabled) {\n    tabIndex = tabIndexProp !== undefined ? tabIndexProp : -1;\n  }\n\n  return /*#__PURE__*/React.createElement(ListItem, _extends({\n    button: true,\n    role: role,\n    tabIndex: tabIndex,\n    component: component,\n    selected: selected,\n    disableGutters: disableGutters,\n    classes: _extends({\n      dense: classes.dense\n    }, ListItemClasses),\n    className: clsx(classes.root, className, selected && classes.selected, !disableGutters && classes.gutters),\n    ref: ref\n  }, other));\n});\nprocess.env.NODE_ENV !== \"production\" ? MenuItem.propTypes = {\n  /**\n   * Menu item contents.\n   */\n  children: PropTypes.node,\n\n  /**\n   * Override or extend the styles applied to the component.\n   * See [CSS API](#css) below for more details.\n   */\n  classes: PropTypes.object.isRequired,\n\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes\n  /* @typescript-to-proptypes-ignore */\n  .elementType,\n\n  /**\n   * If `true`, compact vertical padding designed for keyboard and mouse input will be used.\n   */\n  dense: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  disabled: PropTypes.bool,\n\n  /**\n   * If `true`, the left and right padding is removed.\n   */\n  disableGutters: PropTypes.bool,\n\n  /**\n   * `classes` prop applied to the [`ListItem`](/api/list-item/) element.\n   */\n  ListItemClasses: PropTypes.object,\n\n  /**\n   * @ignore\n   */\n  role: PropTypes.string,\n\n  /**\n   * @ignore\n   */\n  selected: PropTypes.bool,\n\n  /**\n   * @ignore\n   */\n  tabIndex: PropTypes.number\n} : void 0;\nexport default withStyles(styles, {\n  name: 'MuiMenuItem'\n})(MenuItem);"],"sourceRoot":""}