react-charts
Version:
Charts for React
1,892 lines (1,586 loc) • 244 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) :
typeof define === 'function' && define.amd ? define(['exports', 'react'], factory) :
(global = global || self, factory(global.ReactCharts = {}, global.React));
}(this, (function (exports, React) { 'use strict';
React = React && Object.prototype.hasOwnProperty.call(React, 'default') ? React['default'] : React;
function _typeof(obj) {
"@babel/helpers - typeof";
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
_typeof = function (obj) {
return typeof obj;
};
} else {
_typeof = function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
}
return _typeof(obj);
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
return Constructor;
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly) symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread2(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
if (i % 2) {
ownKeys(Object(source), true).forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} else if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
} else {
ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
}
return target;
}
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function");
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
writable: true,
configurable: true
}
});
if (superClass) _setPrototypeOf(subClass, superClass);
}
function _getPrototypeOf(o) {
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
return o.__proto__ || Object.getPrototypeOf(o);
};
return _getPrototypeOf(o);
}
function _setPrototypeOf(o, p) {
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf(o, p);
}
function _isNativeReflectConstruct() {
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
if (Reflect.construct.sham) return false;
if (typeof Proxy === "function") return true;
try {
Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));
return true;
} catch (e) {
return false;
}
}
function _objectWithoutPropertiesLoose(source, excluded) {
if (source == null) return {};
var target = {};
var sourceKeys = Object.keys(source);
var key, i;
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0) continue;
target[key] = source[key];
}
return target;
}
function _objectWithoutProperties(source, excluded) {
if (source == null) return {};
var target = _objectWithoutPropertiesLoose(source, excluded);
var key, i;
if (Object.getOwnPropertySymbols) {
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
for (i = 0; i < sourceSymbolKeys.length; i++) {
key = sourceSymbolKeys[i];
if (excluded.indexOf(key) >= 0) continue;
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
target[key] = source[key];
}
}
return target;
}
function _assertThisInitialized(self) {
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self;
}
function _possibleConstructorReturn(self, call) {
if (call && (typeof call === "object" || typeof call === "function")) {
return call;
}
return _assertThisInitialized(self);
}
function _createSuper(Derived) {
var hasNativeReflectConstruct = _isNativeReflectConstruct();
return function _createSuperInternal() {
var Super = _getPrototypeOf(Derived),
result;
if (hasNativeReflectConstruct) {
var NewTarget = _getPrototypeOf(this).constructor;
result = Reflect.construct(Super, arguments, NewTarget);
} else {
result = Super.apply(this, arguments);
}
return _possibleConstructorReturn(this, result);
};
}
function _slicedToArray(arr, i) {
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
}
function _toConsumableArray(arr) {
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
}
function _arrayWithoutHoles(arr) {
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
}
function _arrayWithHoles(arr) {
if (Array.isArray(arr)) return arr;
}
function _iterableToArray(iter) {
if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
}
function _iterableToArrayLimit(arr, i) {
if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;
var _arr = [];
var _n = true;
var _d = false;
var _e = undefined;
try {
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
_arr.push(_s.value);
if (i && _arr.length === i) break;
}
} catch (err) {
_d = true;
_e = err;
} finally {
try {
if (!_n && _i["return"] != null) _i["return"]();
} finally {
if (_d) throw _e;
}
}
return _arr;
}
function _unsupportedIterableToArray(o, minLen) {
if (!o) return;
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(o);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
}
function _arrayLikeToArray(arr, len) {
if (len == null || len > arr.length) len = arr.length;
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
return arr2;
}
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _nonIterableRest() {
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _createForOfIteratorHelper(o, allowArrayLike) {
var it;
if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {
if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
if (it) o = it;
var i = 0;
var F = function () {};
return {
s: F,
n: function () {
if (i >= o.length) return {
done: true
};
return {
done: false,
value: o[i++]
};
},
e: function (e) {
throw e;
},
f: F
};
}
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
var normalCompletion = true,
didErr = false,
err;
return {
s: function () {
it = o[Symbol.iterator]();
},
n: function () {
var step = it.next();
normalCompletion = step.done;
return step;
},
e: function (e) {
didErr = true;
err = e;
},
f: function () {
try {
if (!normalCompletion && it.return != null) it.return();
} finally {
if (didErr) throw err;
}
}
};
}
var ChartContext = React.createContext();
var Utils = {
getStatus: getStatus,
getStatusStyle: getStatusStyle,
buildStyleGetters: buildStyleGetters,
getMultiAnchor: getMultiAnchor,
getClosestPoint: getClosestPoint,
normalizeGetter: normalizeGetter,
isValidPoint: isValidPoint,
getAxisByAxisID: getAxisByAxisID,
getAxisIndexByAxisID: getAxisIndexByAxisID,
sumObjBy: sumObjBy,
translateX: translateX,
translateY: translateY,
translate: translate,
identity: identity,
shallowDiff: shallowDiff
};
function getStatus(item, focused) {
var status = {
focused: false,
otherFocused: false
};
if (!focused) {
return status;
} // If the item is a datum
if (typeof item.primary !== "undefined") {
var length = focused.group.length;
for (var i = 0; i < length; i++) {
if (focused.group[i].seriesID === item.series.id && focused.group[i].index === item.index) {
status.focused = true;
break;
}
}
status.otherFocused = !status.focused; // For series
} else if (focused.series) {
status.focused = focused.series.id === item.id;
status.otherFocused = !status.focused;
}
return status;
}
function getStatusStyle(item, status, decorator, defaults) {
if (item.series) {
defaults = _objectSpread2({}, defaults, {}, item.series.style);
}
return materializeStyles(decorator(_objectSpread2({}, item, {}, status)), defaults);
}
function buildStyleGetters(series, defaults) {
series.getStatusStyle = function (focused, decorator) {
var status = getStatus(series, focused);
series.style = getStatusStyle(series, status, decorator, defaults);
return series.style;
}; // We also need to decorate each datum in the same fashion
series.datums.forEach(function (datum) {
datum.getStatusStyle = function (focused, decorator) {
var status = getStatus(datum, focused);
datum.style = getStatusStyle(datum, status, decorator, defaults);
return datum.style;
};
});
}
function getMultiAnchor(_ref) {
var anchor = _ref.anchor,
points = _ref.points,
gridWidth = _ref.gridWidth,
gridHeight = _ref.gridHeight;
var invalid = function invalid() {
throw new Error("".concat(JSON.stringify(anchor), " is not a valid tooltip anchor option. You should use a single anchor option or 2 non-conflicting anchor options."));
};
var x;
var y;
var xMin = points[0].anchor.x;
var xMax = points[0].anchor.x;
var yMin = points[0].anchor.y;
var yMax = points[0].anchor.y;
points.forEach(function (point) {
xMin = Math.min(point.anchor.x, xMin);
xMax = Math.max(point.anchor.x, xMax);
yMin = Math.min(point.anchor.y, yMin);
yMax = Math.max(point.anchor.y, yMax);
});
if (anchor.length > 2) {
return invalid();
}
anchor = anchor.sort(function (a) {
return a.includes("center") || a.includes("Center") ? 1 : -1;
});
for (var i = 0; i < anchor.length; i++) {
var anchorPart = anchor[i]; // Horizontal Positioning
if (["left", "right", "gridLeft", "gridRight"].includes(anchorPart)) {
if (typeof x !== "undefined") {
invalid();
}
if (anchorPart === "left") {
x = xMin;
} else if (anchorPart === "right") {
x = xMax;
} else if (anchorPart === "gridLeft") {
x = 0;
} else if (anchorPart === "gridRight") {
x = gridWidth;
} else {
invalid();
}
} // Vertical Positioning
if (["top", "bottom", "gridTop", "gridBottom"].includes(anchorPart)) {
if (typeof y !== "undefined") {
invalid();
}
if (anchorPart === "top") {
y = yMin;
} else if (anchorPart === "bottom") {
y = yMax;
} else if (anchorPart === "gridTop") {
y = 0;
} else if (anchorPart === "gridBottom") {
y = gridHeight;
} else {
invalid();
}
} // Center Positioning
if (["center", "gridCenter"].includes(anchorPart)) {
if (anchorPart === "center") {
if (typeof y === "undefined") {
y = (yMin + yMax) / 2;
}
if (typeof x === "undefined") {
x = (xMin + xMax) / 2;
}
} else if (anchorPart === "gridCenter") {
if (typeof y === "undefined") {
y = gridHeight / 2;
}
if (typeof x === "undefined") {
x = gridWidth / 2;
}
} else {
invalid();
}
} // Auto center the remainder if there is only one anchorPart listed
if (anchor.length === 1) {
if (anchor[0].includes("grid")) {
anchor.push("gridCenter");
} else {
anchor.push("center");
}
}
}
return {
x: x,
y: y
};
}
function getClosestPoint(position, datums) {
if (!datums || !position || !datums.length) {
return;
}
var closestDistance = Infinity;
var closestDatum = datums[0];
datums.forEach(function (datum) {
datum.boundingPoints.forEach(function (pointerPoint) {
var distance = Math.sqrt(Math.pow(pointerPoint.x - position.x, 2) + Math.pow(pointerPoint.y - position.y, 2));
if (distance < closestDistance) {
closestDistance = distance;
closestDatum = datum;
}
});
});
return closestDatum;
}
function normalizeColor(style, defaults) {
return _objectSpread2({}, style, {
stroke: style.stroke || style.color || defaults.stroke || defaults.color,
fill: style.fill || style.color || defaults.fill || defaults.color
});
}
var elementTypes = ["area", "line", "rectangle", "circle"];
function materializeStyles() {
var style = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var defaults = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
style = normalizeColor(style, defaults);
for (var i = 0; i < elementTypes.length; i++) {
var type = elementTypes[i];
style[type] = style[type] ? materializeStyles(style[type], defaults) : {};
}
return style;
}
function normalizeGetter(getter) {
if (typeof getter === "function") {
return getter;
}
return function (d) {
return get(d, getter);
};
}
function get(obj, path, def) {
if (typeof obj === "function") {
try {
return obj();
} catch (e) {
return path;
}
}
if (!path) {
return obj;
}
var pathObj = makePathArray(path);
var val;
try {
val = pathObj.reduce(function (current, pathPart) {
return current[pathPart];
}, obj);
} catch (e) {// do nothing
}
return typeof val !== "undefined" ? val : def;
}
function makePathArray(obj) {
return flattenDeep(obj).join(".").replace("[", ".").replace("]", "").split(".");
}
function flattenDeep(arr) {
var newArr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
if (!Array.isArray(arr)) {
newArr.push(arr);
} else {
for (var i = 0; i < arr.length; i++) {
flattenDeep(arr[i], newArr);
}
}
return newArr;
}
function isValidPoint(d) {
if (d === null) {
return false;
}
if (typeof d === "undefined") {
return false;
}
if (typeof d === "string" && d === "null") {
return false;
}
return true;
}
function getAxisByAxisID(axes, AxisID) {
return axes.find(function (d) {
return d.id === AxisID;
}) || axes[0];
}
function getAxisIndexByAxisID(axes, AxisID) {
var index = axes.findIndex(function (d) {
return d.id === AxisID;
});
return index > -1 ? index : 0;
}
function sumObjBy(obj, str) {
return Object.keys(obj).map(function (key) {
return obj[key];
}).reduce(function (prev, curr) {
return prev + curr[str] || 0;
}, 0);
}
function translateX(x) {
return "translate3d(".concat(Math.round(x), "px, 0, 0)");
}
function translateY(y) {
return "translate3d(0, ".concat(Math.round(y), "px, 0)");
}
function translate(x, y) {
return "translate3d(".concat(Math.round(x), "px, ").concat(Math.round(y), "px, 0)");
}
function identity(d) {
return d;
}
function shallowDiff(a, b) {
var aKeys = Object.keys(a);
var bKeys = Object.keys(b);
if (aKeys.length !== bKeys.length) {
return true;
}
return Object.keys(a).some(function (key) {
if (a[key] !== b[key]) {
return true;
}
});
}
var props = ['bottom', 'height', 'left', 'right', 'top', 'width'];
var rectChanged = function rectChanged(a, b) {
if (a === void 0) {
a = {};
}
if (b === void 0) {
b = {};
}
return props.some(function (prop) {
return a[prop] !== b[prop];
});
};
var observedNodes = /*#__PURE__*/new Map();
var rafId;
var run = function run() {
var changedStates = [];
observedNodes.forEach(function (state, node) {
var newRect = node.getBoundingClientRect();
if (rectChanged(newRect, state.rect)) {
state.rect = newRect;
changedStates.push(state);
}
});
changedStates.forEach(function (state) {
state.callbacks.forEach(function (cb) {
return cb(state.rect);
});
});
rafId = window.requestAnimationFrame(run);
};
function observeRect(node, cb) {
return {
observe: function observe() {
var wasEmpty = observedNodes.size === 0;
if (observedNodes.has(node)) {
observedNodes.get(node).callbacks.push(cb);
} else {
observedNodes.set(node, {
rect: undefined,
hasRectChanged: false,
callbacks: [cb]
});
}
if (wasEmpty) run();
},
unobserve: function unobserve() {
var state = observedNodes.get(node);
if (state) {
// Remove the callback
var index = state.callbacks.indexOf(cb);
if (index >= 0) state.callbacks.splice(index, 1); // Remove the node reference
if (!state.callbacks.length) observedNodes["delete"](node); // Stop the loop
if (!observedNodes.size) cancelAnimationFrame(rafId);
}
}
};
}
var useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;
function useRect(nodeRef) {
var _nodeRef$current;
var _React$useState = React.useState((_nodeRef$current = nodeRef.current) === null || _nodeRef$current === void 0 ? void 0 : _nodeRef$current.parentElement),
_React$useState2 = _slicedToArray(_React$useState, 2),
element = _React$useState2[0],
setElement = _React$useState2[1];
var _React$useState3 = React.useState({
width: 0,
height: 0
}),
_React$useState4 = _slicedToArray(_React$useState3, 2),
rect = _React$useState4[0],
setRect = _React$useState4[1];
var initialRectSet = React.useRef(false);
useIsomorphicLayoutEffect(function () {
var _nodeRef$current2;
if (((_nodeRef$current2 = nodeRef.current) === null || _nodeRef$current2 === void 0 ? void 0 : _nodeRef$current2.parentElement) !== element) {
var _nodeRef$current3;
setElement((_nodeRef$current3 = nodeRef.current) === null || _nodeRef$current3 === void 0 ? void 0 : _nodeRef$current3.parentElement);
}
});
useIsomorphicLayoutEffect(function () {
if (element && !initialRectSet.current) {
initialRectSet.current = true;
setRect(element.getBoundingClientRect());
}
}, [element]);
React.useEffect(function () {
if (!element) {
return;
}
var observer = observeRect(element, setRect);
observer.observe();
return function () {
observer.unobserve();
};
}, [element]);
return {
width: rect.width,
height: rect.height
};
}
function useLatestRef(latest) {
var ref = React.useRef();
ref.current = latest;
return ref;
}
function useLatest(obj) {
var when = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
var ref = React.useRef();
if (when) {
ref.current = obj;
}
return ref.current;
}
function usePrevious(val) {
var ref = React.useRef();
React.useEffect(function () {
ref.current = val;
}, [val]);
return ref.current;
}
var now = require('performance-now'),
root = typeof window === 'undefined' ? global : window,
vendors = ['moz', 'webkit'],
suffix = 'AnimationFrame',
raf = root['request' + suffix],
caf = root['cancel' + suffix] || root['cancelRequest' + suffix];
for (var i = 0; !raf && i < vendors.length; i++) {
raf = root[vendors[i] + 'Request' + suffix];
caf = root[vendors[i] + 'Cancel' + suffix] || root[vendors[i] + 'CancelRequest' + suffix];
} // Some versions of FF have rAF but not cAF
if (!raf || !caf) {
var last = 0,
id = 0,
queue = [],
frameDuration = 1000 / 60;
raf = function raf(callback) {
if (queue.length === 0) {
var _now = now(),
next = Math.max(0, frameDuration - (_now - last));
last = next + _now;
setTimeout(function () {
var cp = queue.slice(0); // Clear queue here to prevent
// callbacks from appending listeners
// to the current frame's queue
queue.length = 0;
for (var i = 0; i < cp.length; i++) {
if (!cp[i].cancelled) {
try {
cp[i].callback(last);
} catch (e) {
setTimeout(function () {
throw e;
}, 0);
}
}
}
}, Math.round(next));
}
queue.push({
handle: ++id,
callback: callback,
cancelled: false
});
return id;
};
caf = function caf(handle) {
for (var i = 0; i < queue.length; i++) {
if (queue[i].handle === handle) {
queue[i].cancelled = true;
}
}
};
}
function Raf(fn) {
// Wrap in a new function to prevent
// `cancel` potentially being assigned
// to the native rAF function
return raf.call(root, fn);
}
Raf.cancel = function () {
caf.apply(root, arguments);
};
Raf.polyfill = function (object) {
if (!object) {
object = root;
}
object.requestAnimationFrame = raf;
object.cancelAnimationFrame = caf;
};
var defaultStyle = {
strokeWidth: 0,
fill: "#333",
opacity: 1,
rx: 0,
ry: 0
};
function Rectangle(_ref) {
var style = _ref.style,
_ref$opacity = _ref.opacity,
x1 = _ref.x1,
y1 = _ref.y1,
x2 = _ref.x2,
y2 = _ref.y2,
rest = _objectWithoutProperties(_ref, ["style", "opacity", "x1", "y1", "x2", "y2"]);
var resolvedStyle = _objectSpread2({}, defaultStyle, {}, style);
var xStart = Math.min(x1, x2);
var yStart = Math.min(y1, y2);
var xEnd = Math.max(x1, x2);
var yEnd = Math.max(y1, y2);
var height = Math.max(yEnd - yStart, 0);
var width = Math.max(xEnd - xStart, 0);
return /*#__PURE__*/React.createElement("rect", _extends({}, rest, {
x: xStart,
y: yStart,
width: width,
height: height,
style: resolvedStyle
}));
}
function t(t) {
return function () {
return t;
};
}
function n(t) {
return t[0];
}
function e(t) {
return t[1];
}
function i$1() {
this._ = null;
}
function r(t) {
t.U = t.C = t.L = t.R = t.P = t.N = null;
}
function o(t, n) {
var e = n,
i = n.R,
r = e.U;
r ? r.L === e ? r.L = i : r.R = i : t._ = i, i.U = r, e.U = i, e.R = i.L, e.R && (e.R.U = e), i.L = e;
}
function s(t, n) {
var e = n,
i = n.L,
r = e.U;
r ? r.L === e ? r.L = i : r.R = i : t._ = i, i.U = r, e.U = i, e.L = i.R, e.L && (e.L.U = e), i.R = e;
}
function u(t) {
for (; t.L;) {
t = t.L;
}
return t;
}
function a(t, n, e, i) {
var r = [null, null],
o = A.push(r) - 1;
return r.left = t, r.right = n, e && c(r, t, n, e), i && c(r, n, t, i), D[t.index].halfedges.push(o), D[n.index].halfedges.push(o), r;
}
function h(t, n, e) {
var i = [n, e];
return i.left = t, i;
}
function c(t, n, e, i) {
t[0] || t[1] ? t.left === e ? t[1] = i : t[0] = i : (t[0] = i, t.left = n, t.right = e);
}
function l(t, n, e, i, r) {
var o,
s = t[0],
u = t[1],
a = s[0],
h = s[1],
c = 0,
l = 1,
f = u[0] - a,
_ = u[1] - h;
if (o = n - a, f || !(o > 0)) {
if (o /= f, f < 0) {
if (o < c) return;
o < l && (l = o);
} else if (f > 0) {
if (o > l) return;
o > c && (c = o);
}
if (o = i - a, f || !(o < 0)) {
if (o /= f, f < 0) {
if (o > l) return;
o > c && (c = o);
} else if (f > 0) {
if (o < c) return;
o < l && (l = o);
}
if (o = e - h, _ || !(o > 0)) {
if (o /= _, _ < 0) {
if (o < c) return;
o < l && (l = o);
} else if (_ > 0) {
if (o > l) return;
o > c && (c = o);
}
if (o = r - h, _ || !(o < 0)) {
if (o /= _, _ < 0) {
if (o > l) return;
o > c && (c = o);
} else if (_ > 0) {
if (o < c) return;
o < l && (l = o);
}
return !(c > 0 || l < 1) || (c > 0 && (t[0] = [a + c * f, h + c * _]), l < 1 && (t[1] = [a + l * f, h + l * _]), !0);
}
}
}
}
}
function f(t, n, e, i, r) {
var o = t[1];
if (o) return !0;
var s,
u,
a = t[0],
h = t.left,
c = t.right,
l = h[0],
f = h[1],
_ = c[0],
y = c[1],
g = (l + _) / 2,
p = (f + y) / 2;
if (y === f) {
if (g < n || g >= i) return;
if (l > _) {
if (a) {
if (a[1] >= r) return;
} else a = [g, e];
o = [g, r];
} else {
if (a) {
if (a[1] < e) return;
} else a = [g, r];
o = [g, e];
}
} else if (u = p - (s = (l - _) / (y - f)) * g, s < -1 || s > 1) {
if (l > _) {
if (a) {
if (a[1] >= r) return;
} else a = [(e - u) / s, e];
o = [(r - u) / s, r];
} else {
if (a) {
if (a[1] < e) return;
} else a = [(r - u) / s, r];
o = [(e - u) / s, e];
}
} else if (f < y) {
if (a) {
if (a[0] >= i) return;
} else a = [n, s * n + u];
o = [i, s * i + u];
} else {
if (a) {
if (a[0] < n) return;
} else a = [i, s * i + u];
o = [n, s * n + u];
}
return t[0] = a, t[1] = o, !0;
}
function _(t, n) {
var e = t.site,
i = n.left,
r = n.right;
return e === r && (r = i, i = e), r ? Math.atan2(r[1] - i[1], r[0] - i[0]) : (e === i ? (i = n[1], r = n[0]) : (i = n[0], r = n[1]), Math.atan2(i[0] - r[0], r[1] - i[1]));
}
function y(t, n) {
return n[+(n.left !== t.site)];
}
function g(t, n) {
return n[+(n.left === t.site)];
}
i$1.prototype = {
constructor: i$1,
insert: function insert(t, n) {
var e, i, r;
if (t) {
if (n.P = t, n.N = t.N, t.N && (t.N.P = n), t.N = n, t.R) {
for (t = t.R; t.L;) {
t = t.L;
}
t.L = n;
} else t.R = n;
e = t;
} else this._ ? (t = u(this._), n.P = null, n.N = t, t.P = t.L = n, e = t) : (n.P = n.N = null, this._ = n, e = null);
for (n.L = n.R = null, n.U = e, n.C = !0, t = n; e && e.C;) {
e === (i = e.U).L ? (r = i.R) && r.C ? (e.C = r.C = !1, i.C = !0, t = i) : (t === e.R && (o(this, e), e = (t = e).U), e.C = !1, i.C = !0, s(this, i)) : (r = i.L) && r.C ? (e.C = r.C = !1, i.C = !0, t = i) : (t === e.L && (s(this, e), e = (t = e).U), e.C = !1, i.C = !0, o(this, i)), e = t.U;
}
this._.C = !1;
},
remove: function remove(t) {
t.N && (t.N.P = t.P), t.P && (t.P.N = t.N), t.N = t.P = null;
var n,
e,
i,
r = t.U,
a = t.L,
h = t.R;
if (e = a ? h ? u(h) : a : h, r ? r.L === t ? r.L = e : r.R = e : this._ = e, a && h ? (i = e.C, e.C = t.C, e.L = a, a.U = e, e !== h ? (r = e.U, e.U = t.U, t = e.R, r.L = t, e.R = h, h.U = e) : (e.U = r, r = e, t = e.R)) : (i = t.C, t = e), t && (t.U = r), !i) if (t && t.C) t.C = !1;else {
do {
if (t === this._) break;
if (t === r.L) {
if ((n = r.R).C && (n.C = !1, r.C = !0, o(this, r), n = r.R), n.L && n.L.C || n.R && n.R.C) {
n.R && n.R.C || (n.L.C = !1, n.C = !0, s(this, n), n = r.R), n.C = r.C, r.C = n.R.C = !1, o(this, r), t = this._;
break;
}
} else if ((n = r.L).C && (n.C = !1, r.C = !0, s(this, r), n = r.L), n.L && n.L.C || n.R && n.R.C) {
n.L && n.L.C || (n.R.C = !1, n.C = !0, o(this, n), n = r.L), n.C = r.C, r.C = n.L.C = !1, s(this, r), t = this._;
break;
}
n.C = !0, t = r, r = r.U;
} while (!t.C);
t && (t.C = !1);
}
}
};
var p,
x = [];
function d() {
r(this), this.x = this.y = this.arc = this.site = this.cy = null;
}
function v(t) {
var n = t.P,
e = t.N;
if (n && e) {
var i = n.site,
r = t.site,
o = e.site;
if (i !== o) {
var s = r[0],
u = r[1],
a = i[0] - s,
h = i[1] - u,
c = o[0] - s,
l = o[1] - u,
f = 2 * (a * l - h * c);
if (!(f >= -E)) {
var _ = a * a + h * h,
y = c * c + l * l,
g = (l * _ - h * y) / f,
v = (a * y - c * _) / f,
m = x.pop() || new d();
m.arc = t, m.site = r, m.x = g + s, m.y = (m.cy = v + u) + Math.sqrt(g * g + v * v), t.circle = m;
for (var M = null, w = L._; w;) {
if (m.y < w.y || m.y === w.y && m.x <= w.x) {
if (!w.L) {
M = w.P;
break;
}
w = w.L;
} else {
if (!w.R) {
M = w;
break;
}
w = w.R;
}
}
L.insert(M, m), M || (p = m);
}
}
}
}
function m(t) {
var n = t.circle;
n && (n.P || (p = n.N), L.remove(n), x.push(n), r(n), t.circle = null);
}
var M = [];
function w() {
r(this), this.edge = this.site = this.circle = null;
}
function b(t) {
var n = M.pop() || new w();
return n.site = t, n;
}
function T(t) {
m(t), S.remove(t), M.push(t), r(t);
}
function C(t) {
var n = t.circle,
e = n.x,
i = n.cy,
r = [e, i],
o = t.P,
s = t.N,
u = [t];
T(t);
for (var h = o; h.circle && Math.abs(e - h.circle.x) < R && Math.abs(i - h.circle.cy) < R;) {
o = h.P, u.unshift(h), T(h), h = o;
}
u.unshift(h), m(h);
for (var l = s; l.circle && Math.abs(e - l.circle.x) < R && Math.abs(i - l.circle.cy) < R;) {
s = l.N, u.push(l), T(l), l = s;
}
u.push(l), m(l);
var f,
_ = u.length;
for (f = 1; f < _; ++f) {
l = u[f], h = u[f - 1], c(l.edge, h.site, l.site, r);
}
h = u[0], (l = u[_ - 1]).edge = a(h.site, l.site, null, r), v(h), v(l);
}
function N(t) {
for (var n, e, i, r, o = t[0], s = t[1], u = S._; u;) {
if ((i = k(u, s) - o) > R) u = u.L;else {
if (!((r = o - U(u, s)) > R)) {
i > -R ? (n = u.P, e = u) : r > -R ? (n = u, e = u.N) : n = e = u;
break;
}
if (!u.R) {
n = u;
break;
}
u = u.R;
}
}
!function (t) {
D[t.index] = {
site: t,
halfedges: []
};
}(t);
var h = b(t);
if (S.insert(n, h), n || e) {
if (n === e) return m(n), e = b(n.site), S.insert(h, e), h.edge = e.edge = a(n.site, h.site), v(n), void v(e);
if (e) {
m(n), m(e);
var l = n.site,
f = l[0],
_ = l[1],
y = t[0] - f,
g = t[1] - _,
p = e.site,
x = p[0] - f,
d = p[1] - _,
M = 2 * (y * d - g * x),
w = y * y + g * g,
T = x * x + d * d,
C = [(d * w - g * T) / M + f, (y * T - x * w) / M + _];
c(e.edge, l, p, C), h.edge = a(l, t, null, C), e.edge = a(t, p, null, C), v(n), v(e);
} else h.edge = a(n.site, h.site);
}
}
function k(t, n) {
var e = t.site,
i = e[0],
r = e[1],
o = r - n;
if (!o) return i;
var s = t.P;
if (!s) return -1 / 0;
var u = (e = s.site)[0],
a = e[1],
h = a - n;
if (!h) return u;
var c = u - i,
l = 1 / o - 1 / h,
f = c / h;
return l ? (-f + Math.sqrt(f * f - 2 * l * (c * c / (-2 * h) - a + h / 2 + r - o / 2))) / l + i : (i + u) / 2;
}
function U(t, n) {
var e = t.N;
if (e) return k(e, n);
var i = t.site;
return i[1] === n ? i[0] : 1 / 0;
}
var S,
D,
L,
A,
R = 1e-6,
E = 1e-12;
function P(t, n) {
return n[1] - t[1] || n[0] - t[0];
}
function F(t, n) {
var e,
r,
o,
s = t.sort(P).pop();
for (A = [], D = new Array(t.length), S = new i$1(), L = new i$1();;) {
if (o = p, s && (!o || s[1] < o.y || s[1] === o.y && s[0] < o.x)) s[0] === e && s[1] === r || (N(s), e = s[0], r = s[1]), s = t.pop();else {
if (!o) break;
C(o.arc);
}
}
if (function () {
for (var t, n, e, i, r = 0, o = D.length; r < o; ++r) {
if ((t = D[r]) && (i = (n = t.halfedges).length)) {
var s = new Array(i),
u = new Array(i);
for (e = 0; e < i; ++e) {
s[e] = e, u[e] = _(t, A[n[e]]);
}
for (s.sort(function (t, n) {
return u[n] - u[t];
}), e = 0; e < i; ++e) {
u[e] = n[s[e]];
}
for (e = 0; e < i; ++e) {
n[e] = u[e];
}
}
}
}(), n) {
var u = +n[0][0],
a = +n[0][1],
c = +n[1][0],
x = +n[1][1];
!function (t, n, e, i) {
for (var r, o = A.length; o--;) {
f(r = A[o], t, n, e, i) && l(r, t, n, e, i) && (Math.abs(r[0][0] - r[1][0]) > R || Math.abs(r[0][1] - r[1][1]) > R) || delete A[o];
}
}(u, a, c, x), function (t, n, e, i) {
var r,
o,
s,
u,
a,
c,
l,
f,
_,
p,
x,
d,
v = D.length,
m = !0;
for (r = 0; r < v; ++r) {
if (o = D[r]) {
for (s = o.site, u = (a = o.halfedges).length; u--;) {
A[a[u]] || a.splice(u, 1);
}
for (u = 0, c = a.length; u < c;) {
x = (p = g(o, A[a[u]]))[0], d = p[1], f = (l = y(o, A[a[++u % c]]))[0], _ = l[1], (Math.abs(x - f) > R || Math.abs(d - _) > R) && (a.splice(u, 0, A.push(h(s, p, Math.abs(x - t) < R && i - d > R ? [t, Math.abs(f - t) < R ? _ : i] : Math.abs(d - i) < R && e - x > R ? [Math.abs(_ - i) < R ? f : e, i] : Math.abs(x - e) < R && d - n > R ? [e, Math.abs(f - e) < R ? _ : n] : Math.abs(d - n) < R && x - t > R ? [Math.abs(_ - n) < R ? f : t, n] : null)) - 1), ++c);
}
c && (m = !1);
}
}
if (m) {
var M,
w,
b,
T = 1 / 0;
for (r = 0, m = null; r < v; ++r) {
(o = D[r]) && (b = (M = (s = o.site)[0] - t) * M + (w = s[1] - n) * w) < T && (T = b, m = o);
}
if (m) {
var C = [t, n],
N = [t, i],
k = [e, i],
U = [e, n];
m.halfedges.push(A.push(h(s = m.site, C, N)) - 1, A.push(h(s, N, k)) - 1, A.push(h(s, k, U)) - 1, A.push(h(s, U, C)) - 1);
}
}
for (r = 0; r < v; ++r) {
(o = D[r]) && (o.halfedges.length || delete D[r]);
}
}(u, a, c, x);
}
this.edges = A, this.cells = D, S = L = A = D = null;
}
function Y() {
var i = n,
r = e,
o = null;
function s(t) {
return new F(t.map(function (n, e) {
var o = [Math.round(i(n, e, t) / R) * R, Math.round(r(n, e, t) / R) * R];
return o.index = e, o.data = n, o;
}), o);
}
return s.polygons = function (t) {
return s(t).polygons();
}, s.links = function (t) {
return s(t).links();
}, s.triangles = function (t) {
return s(t).triangles();
}, s.x = function (n) {
return arguments.length ? (i = "function" == typeof n ? n : t(+n), s) : i;
}, s.y = function (n) {
return arguments.length ? (r = "function" == typeof n ? n : t(+n), s) : r;
}, s.extent = function (t) {
return arguments.length ? (o = null == t ? null : [[+t[0][0], +t[0][1]], [+t[1][0], +t[1][1]]], s) : o && [[o[0][0], o[0][1]], [o[1][0], o[1][1]]];
}, s.size = function (t) {
return arguments.length ? (o = null == t ? null : [[0, 0], [+t[0], +t[1]]], s) : o && [o[1][0] - o[0][0], o[1][1] - o[0][1]];
}, s;
}
function H(t, n) {
return t < n ? -1 : t > n ? 1 : t >= n ? 0 : NaN;
}
function q(t) {
var n;
return 1 === t.length && (n = t, t = function t(_t2, e) {
return H(n(_t2), e);
}), {
left: function left(n, e, i, r) {
for (null == i && (i = 0), null == r && (r = n.length); i < r;) {
var o = i + r >>> 1;
t(n[o], e) < 0 ? i = o + 1 : r = o;
}
return i;
},
right: function right(n, e, i, r) {
for (null == i && (i = 0), null == r && (r = n.length); i < r;) {
var o = i + r >>> 1;
t(n[o], e) > 0 ? r = o : i = o + 1;
}
return i;
}
};
}
F.prototype = {
constructor: F,
polygons: function polygons() {
var t = this.edges;
return this.cells.map(function (n) {
var e = n.halfedges.map(function (e) {
return y(n, t[e]);
});
return e.data = n.site.data, e;
});
},
triangles: function triangles() {
var t = [],
n = this.edges;
return this.cells.forEach(function (e, i) {
if (o = (r = e.halfedges).length) for (var r, o, s, u, a, h, c = e.site, l = -1, f = n[r[o - 1]], _ = f.left === c ? f.right : f.left; ++l < o;) {
s = _, _ = (f = n[r[l]]).left === c ? f.right : f.left, s && _ && i < s.index && i < _.index && (a = s, h = _, ((u = c)[0] - h[0]) * (a[1] - u[1]) - (u[0] - a[0]) * (h[1] - u[1]) < 0) && t.push([c.data, s.data, _.data]);
}
}), t;
},
links: function links() {
return this.edges.filter(function (t) {
return t.right;
}).map(function (t) {
return {
source: t.left.data,
target: t.right.data
};
});
},
find: function find(t, n, e) {
for (var i, r, o = this, s = o._found || 0, u = o.cells.length; !(r = o.cells[s]);) {
if (++s >= u) return null;
}
var a = t - r.site[0],
h = n - r.site[1],
c = a * a + h * h;
do {
r = o.cells[i = s], s = null, r.halfedges.forEach(function (e) {
var i = o.edges[e],
u = i.left;
if (u !== r.site && u || (u = i.right)) {
var a = t - u[0],
h = n - u[1],
l = a * a + h * h;
l < c && (c = l, s = u.index);
}
});
} while (null !== s);
return o._found = i, null == e || c <= e * e ? r.site : null;
}
};
var z = q(H).right;
function j(t, n, e) {
t = +t, n = +n, e = (r = arguments.length) < 2 ? (n = t, t = 0, 1) : r < 3 ? 1 : +e;
for (var i = -1, r = 0 | Math.max(0, Math.ceil((n - t) / e)), o = new Array(r); ++i < r;) {
o[i] = t + i * e;
}
return o;
}
var O = Math.sqrt(50),
Z = Math.sqrt(10),
I = Math.sqrt(2);
function $(t, n, e) {
var i,
r,
o,
s,
u = -1;
if (e = +e, (t = +t) === (n = +n) && e > 0) return [t];
if ((i = n < t) && (r = t, t = n, n = r), 0 === (s = V(t, n, e)) || !isFinite(s)) return [];
if (s > 0) for (t = Math.ceil(t / s), n = Math.floor(n / s), o = new Array(r = Math.ceil(n - t + 1)); ++u < r;) {
o[u] = (t + u) * s;
} else for (t = Math.floor(t * s), n = Math.ceil(n * s), o = new Array(r = Math.ceil(t - n + 1)); ++u < r;) {
o[u] = (t - u) / s;
}
return i && o.reverse(), o;
}
function V(t, n, e) {
var i = (n - t) / Math.max(0, e),
r = Math.floor(Math.log(i) / Math.LN10),
o = i / Math.pow(10, r);
return r >= 0 ? (o >= O ? 10 : o >= Z ? 5 : o >= I ? 2 : 1) * Math.pow(10, r) : -Math.pow(10, -r) / (o >= O ? 10 : o >= Z ? 5 : o >= I ? 2 : 1);
}
function B(t, n, e) {
var i = Math.abs(n - t) / Math.max(0, e),
r = Math.pow(10, Math.floor(Math.log(i) / Math.LN10)),
o = i / r;
return o >= O ? r *= 10 : o >= Z ? r *= 5 : o >= I && (r *= 2), n < t ? -r : r;
}
function X(t, n) {
switch (arguments.length) {
case 0:
break;
case 1:
this.range(t);
break;
default:
this.range(n).domain(t);
}
return this;
}
var W = Symbol("implicit");
function Q() {
var t = new Map(),
n = [],
e = [],
i = W;
function r(r) {
var o = r + "",
s = t.get(o);
if (!s) {
if (i !== W) return i;
t.set(o, s = n.push(r));
}
return e[(s - 1) % e.length];
}
return r.domain = function (e) {
if (!arguments.length) return n.slice();
n = [], t = new Map();
var _iterator = _createForOfIteratorHelper(e),
_step;
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var _i2 = _step.value;
var _e2 = _i2 + "";
t.has(_e2) || t.set(_e2, n.push(_i2));
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
return r;
}, r.range = function (t) {
return arguments.length ? (e = Array.from(t), r) : e.slice();
}, r.unknown = function (t) {
return arguments.length ? (i = t, r) : i;
}, r.copy = function () {
return Q(n, e).unknown(i);
}, X.apply(r, arguments), r;
}
function J() {
var t,
n,
e = Q().unknown(void 0),
i = e.domain,
r = e.range,
o = 0,
s = 1,
u = !1,
a = 0,
h = 0,
c = .5;
function l() {
var e = i().length,
l = s < o,
f = l ? s : o,
_ = l ? o : s;
t = (_ - f) / Math.max(1, e - a + 2 * h), u && (t = Math.floor(t)), f += (_ - f - t * (e - a)) * c, n = t * (1 - a), u && (f = Math.round(f), n = Math.round(n));
var y = j(e).map(function (n) {
return f + t * n;
});
return r(l ? y.reverse() : y);
}
return delete e.unknown, e.domain = function (t) {
return arguments.length ? (i(t), l()) : i();
}, e.range = function (t) {
var _t3, _t4;
return arguments.length ? ((_t3 = t, _t4 = _slicedToArray(_t3, 2), o = _t4[0], s = _t4[1], _t3), o = +o, s = +s, l()) : [o, s];
}, e.rangeRound = function (t) {
var _t5, _t6;
return (_t5 = t, _t6 = _slicedToArray(_t5, 2), o = _t6[0], s = _t6[1], _t5), o = +o, s = +s, u = !0, l();
}, e.bandwidth = function () {
return n;
}, e.step = function () {
return t;
}, e.round = function (t) {
return arguments.length ? (u = !!t, l()) : u;
}, e.padding = function (t) {
return arguments.length ? (a = Math.min(1, h = +t), l()) : a;
}, e.paddingInner = function (t) {
return arguments.length ? (a = Math.min(1, t), l()) : a;
}, e.paddingOuter = function (t) {
return arguments.length ? (h = +t, l()) : h;
}, e.align = function (t) {
return arguments.length ? (c = Math.max(0, Math.min(1, t)), l()) : c;
}, e.copy = function () {
return J(i(), [o, s]).round(u).paddingInner(a).paddingOuter(h).align(c);
}, X.apply(l(), arguments);
}
function G(t, n, e) {
t.prototype = n.prototype = e, e.constructor = t;
}
function K(t, n) {
var e = Object.create(t.prototype);
for (var i in n) {
e[i] = n[i];
}
return e;
}
function tt() {}
var nt = "\\s*([+-]?\\d+)\\s*",
et = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",
it = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",
rt = /^#([0-9a-f]{3,8})$/,
ot = new RegExp("^rgb\\(" + [nt, nt, nt] + "\\)$"),
st = new RegExp("^rgb\\(" + [it, it, it] + "\\)$"),
ut = new RegExp("^rgba\\(" + [nt, nt, nt, et] + "\\)$"),
at = new RegExp("^rgba\\(" + [it, it, it, et] + "\\)$"),
ht = new RegExp("^hsl\\(" + [et, it, it] + "\\)$"),
ct = new RegExp("^hsla\\(" + [et, it, it, et] + "\\)$"),
lt = {
aliceblue: 15792383,
antiquewhite: 16444375,
aqua: 65535,
aquamarine: 8388564,
azure: 15794175,
beige: 16119260,
bisque: 16770244,
black: 0,
blanchedalmond: 16772045,
blue: 255,
blueviolet: 9055202,
brown: 10824234,
burlywood: 14596231,
cadetblue: 6266528,
chartreuse: 8388352,
chocolate: 13789470,
coral: 16744272,
cornflowerblue: 6591981,
cornsilk: 16775388,
crimson: 14423100,
cyan: 65535,
darkblue: 139,
darkcyan: 35723,
darkgoldenrod: 12092939,
darkgray: 11119017,
darkgreen: 25600,
darkgrey: 11119017,
darkkhaki: 12433259,
darkmagenta: 9109643,
darkolivegreen: 5597999,
darkorange: 16747520,
darkorchid: 10040012,
darkred: 9109504,
darksalmon: 15308410,
darkseagreen: 9419919,
darkslateblue: 4734347,
darkslategray: 3100495,
darkslategrey: 3100495,
darkturquoise: 52945,
darkviolet: 9699539,
deeppink: 16716947,
deepskyblue: 49151,
dimgray: 6908265,
dimgrey: 6908265,
dodgerblue: 2003199,
firebrick: 11674146,
floralwhite: 16775920,
forestgreen: 2263842,
fuchsia: 16711935,
gainsboro: 14474460,
ghostwhite: 16316671,
gold: 16766720,
goldenrod: 14329120,
gray: 8421504,
green: 32768,
greenyellow: 11403055,
grey: 8421504,
honeydew: 15794160,
hotpink: 16738740,
indianred: 13458524,
indigo: 4915330,
ivory: 16777200,
khaki: 15787660,
lavender: 15132410,
lavenderblush: 16773365,
lawngreen: 8190976,
lemonchiffon: 16775885,
lightblue: 11393254,
lightcoral: 15761536,
lightcyan: 14745599,
lightgoldenrodyellow: 16448210,
lightgray: 13882323,
lightgreen: 9498256,
lightgrey: 13882323,
lightpink: 16758465,
lightsalmon: 16752762,
lightseagreen: 2142890,
lightskyblue: 8900346,
lightslategray: 7833753,
lightslategrey: 7833753,