UNPKG

react-charts

Version:

Charts for React

1,892 lines (1,586 loc) 244 kB
(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,