+ >
);
};
From 2a73dea54d877298d22d206b8f7e030b3e8ed6dc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Justin=20L=C3=A9ger?=
Date: Mon, 11 Jul 2022 19:08:43 -0400
Subject: [PATCH 004/277] Update confirmation screen styling (#15136)
* Added 8px of margin to the top of the network display as it was touching the edge of the view
* Removed the SiteIcon component and passed the icon url to the SiteOrigin to display the icon next to the origin.
Co-authored-by: David Walsh
---
ui/pages/confirmation/confirmation.js | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/ui/pages/confirmation/confirmation.js b/ui/pages/confirmation/confirmation.js
index 9ccbda847..9f769282c 100644
--- a/ui/pages/confirmation/confirmation.js
+++ b/ui/pages/confirmation/confirmation.js
@@ -11,7 +11,6 @@ import { isEqual } from 'lodash';
import { produce } from 'immer';
import Box from '../../components/ui/box';
import MetaMaskTemplateRenderer from '../../components/app/metamask-template-renderer';
-import SiteIcon from '../../components/ui/site-icon';
import { DEFAULT_ROUTE } from '../../helpers/constants/routes';
import {
COLORS,
@@ -192,7 +191,7 @@ export default function ConfirmationPage() {
)}
{templatedValues.networkDisplay ? (
-
+
-
)}
From 4f0115fcdc0f32921e07ec0a095e95972fe9814d Mon Sep 17 00:00:00 2001
From: Alex Donesky
Date: Mon, 11 Jul 2022 18:32:55 -0500
Subject: [PATCH 005/277] Add setApprovalForAll confirmation view (#15010)
* enhance setApprovalForAll confirmation flow
* cleanup
* address feedback
---
app/_locales/en/messages.json | 26 ++++++++
shared/constants/transaction.js | 3 +
shared/modules/transaction.utils.js | 5 +-
...onfirm-page-container-summary.component.js | 3 +-
...transaction-list-item-details.component.js | 5 +-
ui/helpers/constants/routes.js | 3 +
ui/helpers/constants/transactions.js | 1 +
ui/helpers/utils/token-util.js | 4 ++
ui/helpers/utils/transactions.util.js | 4 ++
ui/hooks/useTransactionDisplayData.js | 6 ++
.../confirm-approve-content.component.js | 64 +++++++++++++++----
ui/pages/confirm-approve/confirm-approve.js | 15 ++++-
.../confirm-transaction-base.component.js | 1 +
.../confirm-transaction-switch.component.js | 5 ++
.../confirm-token-transaction-switch.js | 25 ++++++++
15 files changed, 154 insertions(+), 16 deletions(-)
diff --git a/app/_locales/en/messages.json b/app/_locales/en/messages.json
index e7fe44c60..78bb505b8 100644
--- a/app/_locales/en/messages.json
+++ b/app/_locales/en/messages.json
@@ -230,6 +230,10 @@
"alerts": {
"message": "Alerts"
},
+ "allOfYour": {
+ "message": "All of your $1",
+ "description": "$1 is the symbol or name of the token that the user is approving spending"
+ },
"allowExternalExtensionTo": {
"message": "Allow this external extension to:"
},
@@ -266,6 +270,10 @@
"approve": {
"message": "Approve spend limit"
},
+ "approveAllTokensTitle": {
+ "message": "Give permission to access all of your $1?",
+ "description": "$1 is the symbol of the token for which the user is granting approval"
+ },
"approveAndInstall": {
"message": "Approve & Install"
},
@@ -1287,6 +1295,9 @@
"functionApprove": {
"message": "Function: Approve"
},
+ "functionSetApprovalForAll": {
+ "message": "Function: SetApprovalForAll"
+ },
"functionType": {
"message": "Function Type"
},
@@ -2696,6 +2707,14 @@
"revealTheSeedPhrase": {
"message": "Reveal seed phrase"
},
+ "revokeAllTokensTitle": {
+ "message": "Revoke permission to access all of your $1?",
+ "description": "$1 is the symbol of the token for which the user is revoking approval"
+ },
+ "revokeApproveForAllDescription": {
+ "message": "By revoking permission, the following $1 will no longer be able to access your $2",
+ "description": "$1 is either key 'account' or 'contract', and $2 is either a string or link of a given token symbol or name"
+ },
"rinkeby": {
"message": "Rinkeby Test Network"
},
@@ -2878,6 +2897,13 @@
"setAdvancedPrivacySettingsDetails": {
"message": "MetaMask uses these trusted third-party services to enhance product usability and safety."
},
+ "setApprovalForAll": {
+ "message": "Set Approval for All"
+ },
+ "setApprovalForAllTitle": {
+ "message": "Approve $1 with no spend limit",
+ "description": "The token symbol that is being approved"
+ },
"settings": {
"message": "Settings"
},
diff --git a/shared/constants/transaction.js b/shared/constants/transaction.js
index 8cb365f79..d2a54ae35 100644
--- a/shared/constants/transaction.js
+++ b/shared/constants/transaction.js
@@ -15,6 +15,8 @@ import { MESSAGE_TYPE } from './app';
* to ensure that the receiver is an address capable of handling with the token being sent.
* @property {'approve'} TOKEN_METHOD_APPROVE - A token transaction requesting an
* allowance of the token to spend on behalf of the user
+ * @property {'setapprovalforall'} TOKEN_METHOD_SET_APPROVAL_FOR_ALL - A token transaction requesting an
+ * allowance of all of a user's token to spend on behalf of the user
* @property {'incoming'} INCOMING - An incoming (deposit) transaction
* @property {'simpleSend'} SIMPLE_SEND - A transaction sending a network's native asset to a recipient
* @property {'contractInteraction'} CONTRACT_INTERACTION - A transaction that is
@@ -66,6 +68,7 @@ export const TRANSACTION_TYPES = {
TOKEN_METHOD_SAFE_TRANSFER_FROM: 'safetransferfrom',
TOKEN_METHOD_TRANSFER: 'transfer',
TOKEN_METHOD_TRANSFER_FROM: 'transferfrom',
+ TOKEN_METHOD_SET_APPROVAL_FOR_ALL: 'setapprovalforall',
};
/**
diff --git a/shared/modules/transaction.utils.js b/shared/modules/transaction.utils.js
index 08adb46e3..1910ef2f3 100644
--- a/shared/modules/transaction.utils.js
+++ b/shared/modules/transaction.utils.js
@@ -8,7 +8,7 @@ import { readAddressAsContract } from './contract-utils';
import { isEqualCaseInsensitive } from './string-utils';
/**
- * @typedef { 'transfer' | 'approve' | 'transferfrom' | 'contractInteraction'| 'simpleSend' } InferrableTransactionTypes
+ * @typedef { 'transfer' | 'approve' | 'setapprovalforall' | 'transferfrom' | 'contractInteraction'| 'simpleSend' } InferrableTransactionTypes
*/
/**
@@ -150,6 +150,7 @@ export async function determineTransactionType(txParams, query) {
const tokenMethodName = [
TRANSACTION_TYPES.TOKEN_METHOD_APPROVE,
+ TRANSACTION_TYPES.TOKEN_METHOD_SET_APPROVAL_FOR_ALL,
TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER,
TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER_FROM,
TRANSACTION_TYPES.TOKEN_METHOD_SAFE_TRANSFER_FROM,
@@ -181,6 +182,7 @@ export async function determineTransactionType(txParams, query) {
const INFERRABLE_TRANSACTION_TYPES = [
TRANSACTION_TYPES.TOKEN_METHOD_APPROVE,
+ TRANSACTION_TYPES.TOKEN_METHOD_SET_APPROVAL_FOR_ALL,
TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER,
TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER_FROM,
TRANSACTION_TYPES.CONTRACT_INTERACTION,
@@ -220,6 +222,7 @@ export async function determineTransactionAssetType(
// method to get the asset type.
const isTokenMethod = [
TRANSACTION_TYPES.TOKEN_METHOD_APPROVE,
+ TRANSACTION_TYPES.TOKEN_METHOD_SET_APPROVAL_FOR_ALL,
TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER,
TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER_FROM,
].find((methodName) => methodName === inferrableType);
diff --git a/ui/components/app/confirm-page-container/confirm-page-container-content/confirm-page-container-summary/confirm-page-container-summary.component.js b/ui/components/app/confirm-page-container/confirm-page-container-content/confirm-page-container-summary/confirm-page-container-summary.component.js
index 2d5fb8193..e31e81bce 100644
--- a/ui/components/app/confirm-page-container/confirm-page-container-content/confirm-page-container-summary/confirm-page-container-summary.component.js
+++ b/ui/components/app/confirm-page-container/confirm-page-container-content/confirm-page-container-summary/confirm-page-container-summary.component.js
@@ -53,7 +53,8 @@ const ConfirmPageContainerSummary = (props) => {
contractAddress =
transactionType === TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER ||
transactionType === TRANSACTION_TYPES.TOKEN_METHOD_TRANSFER_FROM ||
- transactionType === TRANSACTION_TYPES.TOKEN_METHOD_SAFE_TRANSFER_FROM
+ transactionType === TRANSACTION_TYPES.TOKEN_METHOD_SAFE_TRANSFER_FROM ||
+ transactionType === TRANSACTION_TYPES.TOKEN_METHOD_SET_APPROVAL_FOR_ALL
? tokenAddress
: toAddress;
}
diff --git a/ui/components/app/transaction-list-item-details/transaction-list-item-details.component.js b/ui/components/app/transaction-list-item-details/transaction-list-item-details.component.js
index 331885364..f65c82f63 100644
--- a/ui/components/app/transaction-list-item-details/transaction-list-item-details.component.js
+++ b/ui/components/app/transaction-list-item-details/transaction-list-item-details.component.js
@@ -251,7 +251,10 @@ export default class TransactionListItemDetails extends PureComponent {
)
}
diff --git a/ui/pages/swaps/searchable-item-list/item-list/item-list.component.js b/ui/pages/swaps/searchable-item-list/item-list/item-list.component.js
index 01ab42c03..34d2ed87f 100644
--- a/ui/pages/swaps/searchable-item-list/item-list/item-list.component.js
+++ b/ui/pages/swaps/searchable-item-list/item-list/item-list.component.js
@@ -37,9 +37,7 @@ export default function ItemList({
SWAPS_CHAINID_DEFAULT_BLOCK_EXPLORER_URL_MAP[chainId] ??
null;
- const blockExplorerLabel = rpcPrefs.blockExplorerUrl
- ? getURLHostName(blockExplorerLink)
- : t('etherscan');
+ const blockExplorerHostName = getURLHostName(blockExplorerLink);
const trackEvent = useContext(MetaMetricsContext);
// If there is a token for import based on a contract address, it's the only one in the list.
@@ -141,41 +139,36 @@ export default function ItemList({
+
+
+
+
+
+
+
+
+
+
+
diff --git a/development/charts/flamegraph/lib/d3-flamegraph-tooltip.js b/development/charts/flamegraph/lib/d3-flamegraph-tooltip.js
new file mode 100644
index 000000000..cc042a0f2
--- /dev/null
+++ b/development/charts/flamegraph/lib/d3-flamegraph-tooltip.js
@@ -0,0 +1,3117 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(typeof exports === 'object' && typeof module === 'object')
+ module.exports = factory();
+ else if(typeof define === 'function' && define.amd)
+ define([], factory);
+ else if(typeof exports === 'object')
+ exports["flamegraph"] = factory();
+ else
+ root["flamegraph"] = root["flamegraph"] || {}, root["flamegraph"]["tooltip"] = factory();
+})(self, function() {
+return /******/ (() => { // webpackBootstrap
+/******/ "use strict";
+/******/ // The require scope
+/******/ var __webpack_require__ = {};
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/define property getters */
+/******/ (() => {
+/******/ // define getter functions for harmony exports
+/******/ __webpack_require__.d = (exports, definition) => {
+/******/ for(var key in definition) {
+/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
+/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
+/******/ }
+/******/ }
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/hasOwnProperty shorthand */
+/******/ (() => {
+/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ })();
+/******/
+/******/ /* webpack/runtime/make namespace object */
+/******/ (() => {
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = (exports) => {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/ })();
+/******/
+/************************************************************************/
+var __webpack_exports__ = {};
+// ESM COMPAT FLAG
+__webpack_require__.r(__webpack_exports__);
+
+// EXPORTS
+__webpack_require__.d(__webpack_exports__, {
+ "defaultFlamegraphTooltip": () => (/* binding */ defaultFlamegraphTooltip)
+});
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selector.js
+function none() {}
+
+/* harmony default export */ function selector(selector) {
+ return selector == null ? none : function() {
+ return this.querySelector(selector);
+ };
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/select.js
+
+
+
+/* harmony default export */ function selection_select(select) {
+ if (typeof select !== "function") select = selector(select);
+
+ for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
+ for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
+ if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
+ if ("__data__" in node) subnode.__data__ = node.__data__;
+ subgroup[i] = subnode;
+ }
+ }
+ }
+
+ return new Selection(subgroups, this._parents);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/array.js
+// Given something array like (or null), returns something that is strictly an
+// array. This is used to ensure that array-like objects passed to d3.selectAll
+// or selection.selectAll are converted into proper arrays when creating a
+// selection; we don’t ever want to create a selection backed by a live
+// HTMLCollection or NodeList. However, note that selection.selectAll will use a
+// static NodeList as a group, since it safely derived from querySelectorAll.
+function array(x) {
+ return x == null ? [] : Array.isArray(x) ? x : Array.from(x);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selectorAll.js
+function empty() {
+ return [];
+}
+
+/* harmony default export */ function selectorAll(selector) {
+ return selector == null ? empty : function() {
+ return this.querySelectorAll(selector);
+ };
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/selectAll.js
+
+
+
+
+function arrayAll(select) {
+ return function() {
+ return array(select.apply(this, arguments));
+ };
+}
+
+/* harmony default export */ function selectAll(select) {
+ if (typeof select === "function") select = arrayAll(select);
+ else select = selectorAll(select);
+
+ for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
+ for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
+ if (node = group[i]) {
+ subgroups.push(select.call(node, node.__data__, i, group));
+ parents.push(node);
+ }
+ }
+ }
+
+ return new Selection(subgroups, parents);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/matcher.js
+/* harmony default export */ function matcher(selector) {
+ return function() {
+ return this.matches(selector);
+ };
+}
+
+function childMatcher(selector) {
+ return function(node) {
+ return node.matches(selector);
+ };
+}
+
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/selectChild.js
+
+
+var find = Array.prototype.find;
+
+function childFind(match) {
+ return function() {
+ return find.call(this.children, match);
+ };
+}
+
+function childFirst() {
+ return this.firstElementChild;
+}
+
+/* harmony default export */ function selectChild(match) {
+ return this.select(match == null ? childFirst
+ : childFind(typeof match === "function" ? match : childMatcher(match)));
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/selectChildren.js
+
+
+var filter = Array.prototype.filter;
+
+function children() {
+ return Array.from(this.children);
+}
+
+function childrenFilter(match) {
+ return function() {
+ return filter.call(this.children, match);
+ };
+}
+
+/* harmony default export */ function selectChildren(match) {
+ return this.selectAll(match == null ? children
+ : childrenFilter(typeof match === "function" ? match : childMatcher(match)));
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/filter.js
+
+
+
+/* harmony default export */ function selection_filter(match) {
+ if (typeof match !== "function") match = matcher(match);
+
+ for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
+ for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
+ if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
+ subgroup.push(node);
+ }
+ }
+ }
+
+ return new Selection(subgroups, this._parents);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/sparse.js
+/* harmony default export */ function sparse(update) {
+ return new Array(update.length);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/enter.js
+
+
+
+/* harmony default export */ function enter() {
+ return new Selection(this._enter || this._groups.map(sparse), this._parents);
+}
+
+function EnterNode(parent, datum) {
+ this.ownerDocument = parent.ownerDocument;
+ this.namespaceURI = parent.namespaceURI;
+ this._next = null;
+ this._parent = parent;
+ this.__data__ = datum;
+}
+
+EnterNode.prototype = {
+ constructor: EnterNode,
+ appendChild: function(child) { return this._parent.insertBefore(child, this._next); },
+ insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },
+ querySelector: function(selector) { return this._parent.querySelector(selector); },
+ querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }
+};
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/constant.js
+/* harmony default export */ function src_constant(x) {
+ return function() {
+ return x;
+ };
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/data.js
+
+
+
+
+function bindIndex(parent, group, enter, update, exit, data) {
+ var i = 0,
+ node,
+ groupLength = group.length,
+ dataLength = data.length;
+
+ // Put any non-null nodes that fit into update.
+ // Put any null nodes into enter.
+ // Put any remaining data into enter.
+ for (; i < dataLength; ++i) {
+ if (node = group[i]) {
+ node.__data__ = data[i];
+ update[i] = node;
+ } else {
+ enter[i] = new EnterNode(parent, data[i]);
+ }
+ }
+
+ // Put any non-null nodes that don’t fit into exit.
+ for (; i < groupLength; ++i) {
+ if (node = group[i]) {
+ exit[i] = node;
+ }
+ }
+}
+
+function bindKey(parent, group, enter, update, exit, data, key) {
+ var i,
+ node,
+ nodeByKeyValue = new Map,
+ groupLength = group.length,
+ dataLength = data.length,
+ keyValues = new Array(groupLength),
+ keyValue;
+
+ // Compute the key for each node.
+ // If multiple nodes have the same key, the duplicates are added to exit.
+ for (i = 0; i < groupLength; ++i) {
+ if (node = group[i]) {
+ keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + "";
+ if (nodeByKeyValue.has(keyValue)) {
+ exit[i] = node;
+ } else {
+ nodeByKeyValue.set(keyValue, node);
+ }
+ }
+ }
+
+ // Compute the key for each datum.
+ // If there a node associated with this key, join and add it to update.
+ // If there is not (or the key is a duplicate), add it to enter.
+ for (i = 0; i < dataLength; ++i) {
+ keyValue = key.call(parent, data[i], i, data) + "";
+ if (node = nodeByKeyValue.get(keyValue)) {
+ update[i] = node;
+ node.__data__ = data[i];
+ nodeByKeyValue.delete(keyValue);
+ } else {
+ enter[i] = new EnterNode(parent, data[i]);
+ }
+ }
+
+ // Add any remaining nodes that were not bound to data to exit.
+ for (i = 0; i < groupLength; ++i) {
+ if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {
+ exit[i] = node;
+ }
+ }
+}
+
+function datum(node) {
+ return node.__data__;
+}
+
+/* harmony default export */ function data(value, key) {
+ if (!arguments.length) return Array.from(this, datum);
+
+ var bind = key ? bindKey : bindIndex,
+ parents = this._parents,
+ groups = this._groups;
+
+ if (typeof value !== "function") value = src_constant(value);
+
+ for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {
+ var parent = parents[j],
+ group = groups[j],
+ groupLength = group.length,
+ data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),
+ dataLength = data.length,
+ enterGroup = enter[j] = new Array(dataLength),
+ updateGroup = update[j] = new Array(dataLength),
+ exitGroup = exit[j] = new Array(groupLength);
+
+ bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);
+
+ // Now connect the enter nodes to their following update node, such that
+ // appendChild can insert the materialized enter node before this node,
+ // rather than at the end of the parent node.
+ for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {
+ if (previous = enterGroup[i0]) {
+ if (i0 >= i1) i1 = i0 + 1;
+ while (!(next = updateGroup[i1]) && ++i1 < dataLength);
+ previous._next = next || null;
+ }
+ }
+ }
+
+ update = new Selection(update, parents);
+ update._enter = enter;
+ update._exit = exit;
+ return update;
+}
+
+// Given some data, this returns an array-like view of it: an object that
+// exposes a length property and allows numeric indexing. Note that unlike
+// selectAll, this isn’t worried about “live” collections because the resulting
+// array will only be used briefly while data is being bound. (It is possible to
+// cause the data to change while iterating by using a key function, but please
+// don’t; we’d rather avoid a gratuitous copy.)
+function arraylike(data) {
+ return typeof data === "object" && "length" in data
+ ? data // Array, TypedArray, NodeList, array-like
+ : Array.from(data); // Map, Set, iterable, string, or anything else
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/exit.js
+
+
+
+/* harmony default export */ function exit() {
+ return new Selection(this._exit || this._groups.map(sparse), this._parents);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/join.js
+/* harmony default export */ function join(onenter, onupdate, onexit) {
+ var enter = this.enter(), update = this, exit = this.exit();
+ if (typeof onenter === "function") {
+ enter = onenter(enter);
+ if (enter) enter = enter.selection();
+ } else {
+ enter = enter.append(onenter + "");
+ }
+ if (onupdate != null) {
+ update = onupdate(update);
+ if (update) update = update.selection();
+ }
+ if (onexit == null) exit.remove(); else onexit(exit);
+ return enter && update ? enter.merge(update).order() : update;
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/merge.js
+
+
+/* harmony default export */ function merge(context) {
+ var selection = context.selection ? context.selection() : context;
+
+ 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) {
+ for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
+ if (node = group0[i] || group1[i]) {
+ merge[i] = node;
+ }
+ }
+ }
+
+ for (; j < m0; ++j) {
+ merges[j] = groups0[j];
+ }
+
+ return new Selection(merges, this._parents);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/order.js
+/* harmony default export */ function order() {
+
+ for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {
+ for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {
+ if (node = group[i]) {
+ if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);
+ next = node;
+ }
+ }
+ }
+
+ return this;
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/sort.js
+
+
+/* harmony default export */ function sort(compare) {
+ if (!compare) compare = ascending;
+
+ function compareNode(a, b) {
+ return a && b ? compare(a.__data__, b.__data__) : !a - !b;
+ }
+
+ for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {
+ for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {
+ if (node = group[i]) {
+ sortgroup[i] = node;
+ }
+ }
+ sortgroup.sort(compareNode);
+ }
+
+ return new Selection(sortgroups, this._parents).order();
+}
+
+function ascending(a, b) {
+ return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/call.js
+/* harmony default export */ function call() {
+ var callback = arguments[0];
+ arguments[0] = this;
+ callback.apply(null, arguments);
+ return this;
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/nodes.js
+/* harmony default export */ function nodes() {
+ return Array.from(this);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/node.js
+/* harmony default export */ function node() {
+
+ for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
+ for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {
+ var node = group[i];
+ if (node) return node;
+ }
+ }
+
+ return null;
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/size.js
+/* harmony default export */ function size() {
+ let size = 0;
+ for (const node of this) ++size; // eslint-disable-line no-unused-vars
+ return size;
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/empty.js
+/* harmony default export */ function selection_empty() {
+ return !this.node();
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/each.js
+/* harmony default export */ function each(callback) {
+
+ for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
+ for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {
+ if (node = group[i]) callback.call(node, node.__data__, i, group);
+ }
+ }
+
+ return this;
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/namespaces.js
+var xhtml = "http://www.w3.org/1999/xhtml";
+
+/* harmony default export */ const namespaces = ({
+ svg: "http://www.w3.org/2000/svg",
+ xhtml: xhtml,
+ xlink: "http://www.w3.org/1999/xlink",
+ xml: "http://www.w3.org/XML/1998/namespace",
+ xmlns: "http://www.w3.org/2000/xmlns/"
+});
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/namespace.js
+
+
+/* harmony default export */ function namespace(name) {
+ var prefix = name += "", i = prefix.indexOf(":");
+ if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);
+ return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/attr.js
+
+
+function attrRemove(name) {
+ return function() {
+ this.removeAttribute(name);
+ };
+}
+
+function attrRemoveNS(fullname) {
+ return function() {
+ this.removeAttributeNS(fullname.space, fullname.local);
+ };
+}
+
+function attrConstant(name, value) {
+ return function() {
+ this.setAttribute(name, value);
+ };
+}
+
+function attrConstantNS(fullname, value) {
+ return function() {
+ this.setAttributeNS(fullname.space, fullname.local, value);
+ };
+}
+
+function attrFunction(name, value) {
+ return function() {
+ var v = value.apply(this, arguments);
+ if (v == null) this.removeAttribute(name);
+ else this.setAttribute(name, v);
+ };
+}
+
+function attrFunctionNS(fullname, value) {
+ return function() {
+ var v = value.apply(this, arguments);
+ if (v == null) this.removeAttributeNS(fullname.space, fullname.local);
+ else this.setAttributeNS(fullname.space, fullname.local, v);
+ };
+}
+
+/* harmony default export */ function attr(name, value) {
+ var fullname = namespace(name);
+
+ if (arguments.length < 2) {
+ var node = this.node();
+ return fullname.local
+ ? node.getAttributeNS(fullname.space, fullname.local)
+ : node.getAttribute(fullname);
+ }
+
+ return this.each((value == null
+ ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function"
+ ? (fullname.local ? attrFunctionNS : attrFunction)
+ : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/window.js
+/* harmony default export */ function src_window(node) {
+ return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node
+ || (node.document && node) // node is a Window
+ || node.defaultView; // node is a Document
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/style.js
+
+
+function styleRemove(name) {
+ return function() {
+ this.style.removeProperty(name);
+ };
+}
+
+function styleConstant(name, value, priority) {
+ return function() {
+ this.style.setProperty(name, value, priority);
+ };
+}
+
+function styleFunction(name, value, priority) {
+ return function() {
+ var v = value.apply(this, arguments);
+ if (v == null) this.style.removeProperty(name);
+ else this.style.setProperty(name, v, priority);
+ };
+}
+
+/* harmony default export */ function style(name, value, priority) {
+ return arguments.length > 1
+ ? this.each((value == null
+ ? styleRemove : typeof value === "function"
+ ? styleFunction
+ : styleConstant)(name, value, priority == null ? "" : priority))
+ : styleValue(this.node(), name);
+}
+
+function styleValue(node, name) {
+ return node.style.getPropertyValue(name)
+ || src_window(node).getComputedStyle(node, null).getPropertyValue(name);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/property.js
+function propertyRemove(name) {
+ return function() {
+ delete this[name];
+ };
+}
+
+function propertyConstant(name, value) {
+ return function() {
+ this[name] = value;
+ };
+}
+
+function propertyFunction(name, value) {
+ return function() {
+ var v = value.apply(this, arguments);
+ if (v == null) delete this[name];
+ else this[name] = v;
+ };
+}
+
+/* harmony default export */ function property(name, value) {
+ return arguments.length > 1
+ ? this.each((value == null
+ ? propertyRemove : typeof value === "function"
+ ? propertyFunction
+ : propertyConstant)(name, value))
+ : this.node()[name];
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/classed.js
+function classArray(string) {
+ return string.trim().split(/^|\s+/);
+}
+
+function classList(node) {
+ return node.classList || new ClassList(node);
+}
+
+function ClassList(node) {
+ this._node = node;
+ this._names = classArray(node.getAttribute("class") || "");
+}
+
+ClassList.prototype = {
+ add: function(name) {
+ var i = this._names.indexOf(name);
+ if (i < 0) {
+ this._names.push(name);
+ this._node.setAttribute("class", this._names.join(" "));
+ }
+ },
+ remove: function(name) {
+ var i = this._names.indexOf(name);
+ if (i >= 0) {
+ this._names.splice(i, 1);
+ this._node.setAttribute("class", this._names.join(" "));
+ }
+ },
+ contains: function(name) {
+ return this._names.indexOf(name) >= 0;
+ }
+};
+
+function classedAdd(node, names) {
+ var list = classList(node), i = -1, n = names.length;
+ while (++i < n) list.add(names[i]);
+}
+
+function classedRemove(node, names) {
+ var list = classList(node), i = -1, n = names.length;
+ while (++i < n) list.remove(names[i]);
+}
+
+function classedTrue(names) {
+ return function() {
+ classedAdd(this, names);
+ };
+}
+
+function classedFalse(names) {
+ return function() {
+ classedRemove(this, names);
+ };
+}
+
+function classedFunction(names, value) {
+ return function() {
+ (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);
+ };
+}
+
+/* harmony default export */ function classed(name, value) {
+ var names = classArray(name + "");
+
+ if (arguments.length < 2) {
+ var list = classList(this.node()), i = -1, n = names.length;
+ while (++i < n) if (!list.contains(names[i])) return false;
+ return true;
+ }
+
+ return this.each((typeof value === "function"
+ ? classedFunction : value
+ ? classedTrue
+ : classedFalse)(names, value));
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/text.js
+function textRemove() {
+ this.textContent = "";
+}
+
+function textConstant(value) {
+ return function() {
+ this.textContent = value;
+ };
+}
+
+function textFunction(value) {
+ return function() {
+ var v = value.apply(this, arguments);
+ this.textContent = v == null ? "" : v;
+ };
+}
+
+/* harmony default export */ function selection_text(value) {
+ return arguments.length
+ ? this.each(value == null
+ ? textRemove : (typeof value === "function"
+ ? textFunction
+ : textConstant)(value))
+ : this.node().textContent;
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/html.js
+function htmlRemove() {
+ this.innerHTML = "";
+}
+
+function htmlConstant(value) {
+ return function() {
+ this.innerHTML = value;
+ };
+}
+
+function htmlFunction(value) {
+ return function() {
+ var v = value.apply(this, arguments);
+ this.innerHTML = v == null ? "" : v;
+ };
+}
+
+/* harmony default export */ function html(value) {
+ return arguments.length
+ ? this.each(value == null
+ ? htmlRemove : (typeof value === "function"
+ ? htmlFunction
+ : htmlConstant)(value))
+ : this.node().innerHTML;
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/raise.js
+function raise() {
+ if (this.nextSibling) this.parentNode.appendChild(this);
+}
+
+/* harmony default export */ function selection_raise() {
+ return this.each(raise);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/lower.js
+function lower() {
+ if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);
+}
+
+/* harmony default export */ function selection_lower() {
+ return this.each(lower);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/creator.js
+
+
+
+function creatorInherit(name) {
+ return function() {
+ var document = this.ownerDocument,
+ uri = this.namespaceURI;
+ return uri === xhtml && document.documentElement.namespaceURI === xhtml
+ ? document.createElement(name)
+ : document.createElementNS(uri, name);
+ };
+}
+
+function creatorFixed(fullname) {
+ return function() {
+ return this.ownerDocument.createElementNS(fullname.space, fullname.local);
+ };
+}
+
+/* harmony default export */ function creator(name) {
+ var fullname = namespace(name);
+ return (fullname.local
+ ? creatorFixed
+ : creatorInherit)(fullname);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/append.js
+
+
+/* harmony default export */ function append(name) {
+ var create = typeof name === "function" ? name : creator(name);
+ return this.select(function() {
+ return this.appendChild(create.apply(this, arguments));
+ });
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/insert.js
+
+
+
+function constantNull() {
+ return null;
+}
+
+/* harmony default export */ function insert(name, before) {
+ var create = typeof name === "function" ? name : creator(name),
+ select = before == null ? constantNull : typeof before === "function" ? before : selector(before);
+ return this.select(function() {
+ return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);
+ });
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/remove.js
+function remove() {
+ var parent = this.parentNode;
+ if (parent) parent.removeChild(this);
+}
+
+/* harmony default export */ function selection_remove() {
+ return this.each(remove);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/clone.js
+function selection_cloneShallow() {
+ var clone = this.cloneNode(false), parent = this.parentNode;
+ return parent ? parent.insertBefore(clone, this.nextSibling) : clone;
+}
+
+function selection_cloneDeep() {
+ var clone = this.cloneNode(true), parent = this.parentNode;
+ return parent ? parent.insertBefore(clone, this.nextSibling) : clone;
+}
+
+/* harmony default export */ function clone(deep) {
+ return this.select(deep ? selection_cloneDeep : selection_cloneShallow);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/datum.js
+/* harmony default export */ function selection_datum(value) {
+ return arguments.length
+ ? this.property("__data__", value)
+ : this.node().__data__;
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/on.js
+function contextListener(listener) {
+ return function(event) {
+ listener.call(this, event, this.__data__);
+ };
+}
+
+function parseTypenames(typenames) {
+ return typenames.trim().split(/^|\s+/).map(function(t) {
+ var name = "", i = t.indexOf(".");
+ if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
+ return {type: t, name: name};
+ });
+}
+
+function onRemove(typename) {
+ return function() {
+ var on = this.__on;
+ if (!on) return;
+ for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {
+ if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {
+ this.removeEventListener(o.type, o.listener, o.options);
+ } else {
+ on[++i] = o;
+ }
+ }
+ if (++i) on.length = i;
+ else delete this.__on;
+ };
+}
+
+function onAdd(typename, value, options) {
+ return function() {
+ var on = this.__on, o, listener = contextListener(value);
+ if (on) for (var j = 0, m = on.length; j < m; ++j) {
+ if ((o = on[j]).type === typename.type && o.name === typename.name) {
+ this.removeEventListener(o.type, o.listener, o.options);
+ this.addEventListener(o.type, o.listener = listener, o.options = options);
+ o.value = value;
+ return;
+ }
+ }
+ this.addEventListener(typename.type, listener, options);
+ o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};
+ if (!on) this.__on = [o];
+ else on.push(o);
+ };
+}
+
+/* harmony default export */ function on(typename, value, options) {
+ var typenames = parseTypenames(typename + ""), i, n = typenames.length, t;
+
+ if (arguments.length < 2) {
+ var on = this.node().__on;
+ if (on) for (var j = 0, m = on.length, o; j < m; ++j) {
+ for (i = 0, o = on[j]; i < n; ++i) {
+ if ((t = typenames[i]).type === o.type && t.name === o.name) {
+ return o.value;
+ }
+ }
+ }
+ return;
+ }
+
+ on = value ? onAdd : onRemove;
+ for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));
+ return this;
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/dispatch.js
+
+
+function dispatchEvent(node, type, params) {
+ var window = src_window(node),
+ event = window.CustomEvent;
+
+ if (typeof event === "function") {
+ event = new event(type, params);
+ } else {
+ event = window.document.createEvent("Event");
+ if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;
+ else event.initEvent(type, false, false);
+ }
+
+ node.dispatchEvent(event);
+}
+
+function dispatchConstant(type, params) {
+ return function() {
+ return dispatchEvent(this, type, params);
+ };
+}
+
+function dispatchFunction(type, params) {
+ return function() {
+ return dispatchEvent(this, type, params.apply(this, arguments));
+ };
+}
+
+/* harmony default export */ function dispatch(type, params) {
+ return this.each((typeof params === "function"
+ ? dispatchFunction
+ : dispatchConstant)(type, params));
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/iterator.js
+/* harmony default export */ function* iterator() {
+ for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
+ for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {
+ if (node = group[i]) yield node;
+ }
+ }
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/index.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+var root = [null];
+
+function Selection(groups, parents) {
+ this._groups = groups;
+ this._parents = parents;
+}
+
+function selection() {
+ return new Selection([[document.documentElement]], root);
+}
+
+function selection_selection() {
+ return this;
+}
+
+Selection.prototype = selection.prototype = {
+ constructor: Selection,
+ select: selection_select,
+ selectAll: selectAll,
+ selectChild: selectChild,
+ selectChildren: selectChildren,
+ filter: selection_filter,
+ data: data,
+ enter: enter,
+ exit: exit,
+ join: join,
+ merge: merge,
+ selection: selection_selection,
+ order: order,
+ sort: sort,
+ call: call,
+ nodes: nodes,
+ node: node,
+ size: size,
+ empty: selection_empty,
+ each: each,
+ attr: attr,
+ style: style,
+ property: property,
+ classed: classed,
+ text: selection_text,
+ html: html,
+ raise: selection_raise,
+ lower: selection_lower,
+ append: append,
+ insert: insert,
+ remove: selection_remove,
+ clone: clone,
+ datum: selection_datum,
+ on: on,
+ dispatch: dispatch,
+ [Symbol.iterator]: iterator
+};
+
+/* harmony default export */ const src_selection = (selection);
+
+;// CONCATENATED MODULE: ../node_modules/d3-selection/src/select.js
+
+
+/* harmony default export */ function src_select(selector) {
+ return typeof selector === "string"
+ ? new Selection([[document.querySelector(selector)]], [document.documentElement])
+ : new Selection([[selector]], root);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-dispatch/src/dispatch.js
+var noop = {value: () => {}};
+
+function dispatch_dispatch() {
+ for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
+ if (!(t = arguments[i] + "") || (t in _) || /[\s.]/.test(t)) throw new Error("illegal type: " + t);
+ _[t] = [];
+ }
+ return new Dispatch(_);
+}
+
+function Dispatch(_) {
+ this._ = _;
+}
+
+function dispatch_parseTypenames(typenames, types) {
+ return typenames.trim().split(/^|\s+/).map(function(t) {
+ var name = "", i = t.indexOf(".");
+ if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
+ if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);
+ return {type: t, name: name};
+ });
+}
+
+Dispatch.prototype = dispatch_dispatch.prototype = {
+ constructor: Dispatch,
+ on: function(typename, callback) {
+ var _ = this._,
+ T = dispatch_parseTypenames(typename + "", _),
+ t,
+ i = -1,
+ n = T.length;
+
+ // If no callback was specified, return the callback of the given type and name.
+ if (arguments.length < 2) {
+ while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;
+ return;
+ }
+
+ // If a type was specified, set the callback for the given type and name.
+ // Otherwise, if a null callback was specified, remove callbacks of the given name.
+ if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
+ while (++i < n) {
+ if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);
+ else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);
+ }
+
+ return this;
+ },
+ copy: function() {
+ var copy = {}, _ = this._;
+ for (var t in _) copy[t] = _[t].slice();
+ return new Dispatch(copy);
+ },
+ call: function(type, that) {
+ if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];
+ if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
+ for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
+ },
+ apply: function(type, that, args) {
+ if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
+ for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
+ }
+};
+
+function get(type, name) {
+ for (var i = 0, n = type.length, c; i < n; ++i) {
+ if ((c = type[i]).name === name) {
+ return c.value;
+ }
+ }
+}
+
+function set(type, name, callback) {
+ for (var i = 0, n = type.length; i < n; ++i) {
+ if (type[i].name === name) {
+ type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));
+ break;
+ }
+ }
+ if (callback != null) type.push({name: name, value: callback});
+ return type;
+}
+
+/* harmony default export */ const src_dispatch = (dispatch_dispatch);
+
+;// CONCATENATED MODULE: ../node_modules/d3-timer/src/timer.js
+var timer_frame = 0, // is an animation frame pending?
+ timeout = 0, // is a timeout pending?
+ interval = 0, // are any timers active?
+ pokeDelay = 1000, // how frequently we check for clock skew
+ taskHead,
+ taskTail,
+ clockLast = 0,
+ clockNow = 0,
+ clockSkew = 0,
+ clock = typeof performance === "object" && performance.now ? performance : Date,
+ setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };
+
+function now() {
+ return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
+}
+
+function clearNow() {
+ clockNow = 0;
+}
+
+function Timer() {
+ this._call =
+ this._time =
+ this._next = null;
+}
+
+Timer.prototype = timer.prototype = {
+ constructor: Timer,
+ restart: function(callback, delay, time) {
+ if (typeof callback !== "function") throw new TypeError("callback is not a function");
+ time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
+ if (!this._next && taskTail !== this) {
+ if (taskTail) taskTail._next = this;
+ else taskHead = this;
+ taskTail = this;
+ }
+ this._call = callback;
+ this._time = time;
+ sleep();
+ },
+ stop: function() {
+ if (this._call) {
+ this._call = null;
+ this._time = Infinity;
+ sleep();
+ }
+ }
+};
+
+function timer(callback, delay, time) {
+ var t = new Timer;
+ t.restart(callback, delay, time);
+ return t;
+}
+
+function timerFlush() {
+ now(); // Get the current time, if not already set.
+ ++timer_frame; // Pretend we’ve set an alarm, if we haven’t already.
+ var t = taskHead, e;
+ while (t) {
+ if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);
+ t = t._next;
+ }
+ --timer_frame;
+}
+
+function wake() {
+ clockNow = (clockLast = clock.now()) + clockSkew;
+ timer_frame = timeout = 0;
+ try {
+ timerFlush();
+ } finally {
+ timer_frame = 0;
+ nap();
+ clockNow = 0;
+ }
+}
+
+function poke() {
+ var now = clock.now(), delay = now - clockLast;
+ if (delay > pokeDelay) clockSkew -= delay, clockLast = now;
+}
+
+function nap() {
+ var t0, t1 = taskHead, t2, time = Infinity;
+ while (t1) {
+ if (t1._call) {
+ if (time > t1._time) time = t1._time;
+ t0 = t1, t1 = t1._next;
+ } else {
+ t2 = t1._next, t1._next = null;
+ t1 = t0 ? t0._next = t2 : taskHead = t2;
+ }
+ }
+ taskTail = t0;
+ sleep(time);
+}
+
+function sleep(time) {
+ if (timer_frame) return; // Soonest alarm already set, or will be.
+ if (timeout) timeout = clearTimeout(timeout);
+ var delay = time - clockNow; // Strictly less than if we recomputed clockNow.
+ if (delay > 24) {
+ if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);
+ if (interval) interval = clearInterval(interval);
+ } else {
+ if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);
+ timer_frame = 1, setFrame(wake);
+ }
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-timer/src/timeout.js
+
+
+/* harmony default export */ function src_timeout(callback, delay, time) {
+ var t = new Timer;
+ delay = delay == null ? 0 : +delay;
+ t.restart(elapsed => {
+ t.stop();
+ callback(elapsed + delay);
+ }, delay, time);
+ return t;
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/schedule.js
+
+
+
+var emptyOn = src_dispatch("start", "end", "cancel", "interrupt");
+var emptyTween = [];
+
+var CREATED = 0;
+var SCHEDULED = 1;
+var STARTING = 2;
+var STARTED = 3;
+var RUNNING = 4;
+var ENDING = 5;
+var ENDED = 6;
+
+/* harmony default export */ function schedule(node, name, id, index, group, timing) {
+ var schedules = node.__transition;
+ if (!schedules) node.__transition = {};
+ else if (id in schedules) return;
+ create(node, id, {
+ name: name,
+ index: index, // For context during callback.
+ group: group, // For context during callback.
+ on: emptyOn,
+ tween: emptyTween,
+ time: timing.time,
+ delay: timing.delay,
+ duration: timing.duration,
+ ease: timing.ease,
+ timer: null,
+ state: CREATED
+ });
+}
+
+function init(node, id) {
+ var schedule = schedule_get(node, id);
+ if (schedule.state > CREATED) throw new Error("too late; already scheduled");
+ return schedule;
+}
+
+function schedule_set(node, id) {
+ var schedule = schedule_get(node, id);
+ if (schedule.state > STARTED) throw new Error("too late; already running");
+ return schedule;
+}
+
+function schedule_get(node, id) {
+ var schedule = node.__transition;
+ if (!schedule || !(schedule = schedule[id])) throw new Error("transition not found");
+ return schedule;
+}
+
+function create(node, id, self) {
+ var schedules = node.__transition,
+ tween;
+
+ // Initialize the self timer when the transition is created.
+ // Note the actual delay is not known until the first callback!
+ schedules[id] = self;
+ self.timer = timer(schedule, 0, self.time);
+
+ function schedule(elapsed) {
+ self.state = SCHEDULED;
+ self.timer.restart(start, self.delay, self.time);
+
+ // If the elapsed delay is less than our first sleep, start immediately.
+ if (self.delay <= elapsed) start(elapsed - self.delay);
+ }
+
+ function start(elapsed) {
+ var i, j, n, o;
+
+ // If the state is not SCHEDULED, then we previously errored on start.
+ if (self.state !== SCHEDULED) return stop();
+
+ for (i in schedules) {
+ o = schedules[i];
+ if (o.name !== self.name) continue;
+
+ // While this element already has a starting transition during this frame,
+ // defer starting an interrupting transition until that transition has a
+ // chance to tick (and possibly end); see d3/d3-transition#54!
+ if (o.state === STARTED) return src_timeout(start);
+
+ // Interrupt the active transition, if any.
+ if (o.state === RUNNING) {
+ o.state = ENDED;
+ o.timer.stop();
+ o.on.call("interrupt", node, node.__data__, o.index, o.group);
+ delete schedules[i];
+ }
+
+ // Cancel any pre-empted transitions.
+ else if (+i < id) {
+ o.state = ENDED;
+ o.timer.stop();
+ o.on.call("cancel", node, node.__data__, o.index, o.group);
+ delete schedules[i];
+ }
+ }
+
+ // Defer the first tick to end of the current frame; see d3/d3#1576.
+ // Note the transition may be canceled after start and before the first tick!
+ // Note this must be scheduled before the start event; see d3/d3-transition#16!
+ // Assuming this is successful, subsequent callbacks go straight to tick.
+ src_timeout(function() {
+ if (self.state === STARTED) {
+ self.state = RUNNING;
+ self.timer.restart(tick, self.delay, self.time);
+ tick(elapsed);
+ }
+ });
+
+ // Dispatch the start event.
+ // Note this must be done before the tween are initialized.
+ self.state = STARTING;
+ self.on.call("start", node, node.__data__, self.index, self.group);
+ if (self.state !== STARTING) return; // interrupted
+ self.state = STARTED;
+
+ // Initialize the tween, deleting null tween.
+ tween = new Array(n = self.tween.length);
+ for (i = 0, j = -1; i < n; ++i) {
+ if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {
+ tween[++j] = o;
+ }
+ }
+ tween.length = j + 1;
+ }
+
+ function tick(elapsed) {
+ var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),
+ i = -1,
+ n = tween.length;
+
+ while (++i < n) {
+ tween[i].call(node, t);
+ }
+
+ // Dispatch the end event.
+ if (self.state === ENDING) {
+ self.on.call("end", node, node.__data__, self.index, self.group);
+ stop();
+ }
+ }
+
+ function stop() {
+ self.state = ENDED;
+ self.timer.stop();
+ delete schedules[id];
+ for (var i in schedules) return; // eslint-disable-line no-unused-vars
+ delete node.__transition;
+ }
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/interrupt.js
+
+
+/* harmony default export */ function interrupt(node, name) {
+ var schedules = node.__transition,
+ schedule,
+ active,
+ empty = true,
+ i;
+
+ if (!schedules) return;
+
+ name = name == null ? null : name + "";
+
+ for (i in schedules) {
+ if ((schedule = schedules[i]).name !== name) { empty = false; continue; }
+ active = schedule.state > STARTING && schedule.state < ENDING;
+ schedule.state = ENDED;
+ schedule.timer.stop();
+ schedule.on.call(active ? "interrupt" : "cancel", node, node.__data__, schedule.index, schedule.group);
+ delete schedules[i];
+ }
+
+ if (empty) delete node.__transition;
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/selection/interrupt.js
+
+
+/* harmony default export */ function selection_interrupt(name) {
+ return this.each(function() {
+ interrupt(this, name);
+ });
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-interpolate/src/number.js
+/* harmony default export */ function number(a, b) {
+ return a = +a, b = +b, function(t) {
+ return a * (1 - t) + b * t;
+ };
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-interpolate/src/transform/decompose.js
+var degrees = 180 / Math.PI;
+
+var identity = {
+ translateX: 0,
+ translateY: 0,
+ rotate: 0,
+ skewX: 0,
+ scaleX: 1,
+ scaleY: 1
+};
+
+/* harmony default export */ function decompose(a, b, c, d, e, f) {
+ var scaleX, scaleY, skewX;
+ if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;
+ if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;
+ if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;
+ if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;
+ return {
+ translateX: e,
+ translateY: f,
+ rotate: Math.atan2(b, a) * degrees,
+ skewX: Math.atan(skewX) * degrees,
+ scaleX: scaleX,
+ scaleY: scaleY
+ };
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-interpolate/src/transform/parse.js
+
+
+var svgNode;
+
+/* eslint-disable no-undef */
+function parseCss(value) {
+ const m = new (typeof DOMMatrix === "function" ? DOMMatrix : WebKitCSSMatrix)(value + "");
+ return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);
+}
+
+function parseSvg(value) {
+ if (value == null) return identity;
+ if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");
+ svgNode.setAttribute("transform", value);
+ if (!(value = svgNode.transform.baseVal.consolidate())) return identity;
+ value = value.matrix;
+ return decompose(value.a, value.b, value.c, value.d, value.e, value.f);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-interpolate/src/transform/index.js
+
+
+
+function interpolateTransform(parse, pxComma, pxParen, degParen) {
+
+ function pop(s) {
+ return s.length ? s.pop() + " " : "";
+ }
+
+ function translate(xa, ya, xb, yb, s, q) {
+ if (xa !== xb || ya !== yb) {
+ var i = s.push("translate(", null, pxComma, null, pxParen);
+ q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});
+ } else if (xb || yb) {
+ s.push("translate(" + xb + pxComma + yb + pxParen);
+ }
+ }
+
+ function rotate(a, b, s, q) {
+ if (a !== b) {
+ if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path
+ q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: number(a, b)});
+ } else if (b) {
+ s.push(pop(s) + "rotate(" + b + degParen);
+ }
+ }
+
+ function skewX(a, b, s, q) {
+ if (a !== b) {
+ q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: number(a, b)});
+ } else if (b) {
+ s.push(pop(s) + "skewX(" + b + degParen);
+ }
+ }
+
+ function scale(xa, ya, xb, yb, s, q) {
+ if (xa !== xb || ya !== yb) {
+ var i = s.push(pop(s) + "scale(", null, ",", null, ")");
+ q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});
+ } else if (xb !== 1 || yb !== 1) {
+ s.push(pop(s) + "scale(" + xb + "," + yb + ")");
+ }
+ }
+
+ return function(a, b) {
+ var s = [], // string constants and placeholders
+ q = []; // number interpolators
+ a = parse(a), b = parse(b);
+ translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);
+ rotate(a.rotate, b.rotate, s, q);
+ skewX(a.skewX, b.skewX, s, q);
+ scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);
+ a = b = null; // gc
+ return function(t) {
+ var i = -1, n = q.length, o;
+ while (++i < n) s[(o = q[i]).i] = o.x(t);
+ return s.join("");
+ };
+ };
+}
+
+var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");
+var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/tween.js
+
+
+function tweenRemove(id, name) {
+ var tween0, tween1;
+ return function() {
+ var schedule = schedule_set(this, id),
+ tween = schedule.tween;
+
+ // If this node shared tween with the previous node,
+ // just assign the updated shared tween and we’re done!
+ // Otherwise, copy-on-write.
+ if (tween !== tween0) {
+ tween1 = tween0 = tween;
+ for (var i = 0, n = tween1.length; i < n; ++i) {
+ if (tween1[i].name === name) {
+ tween1 = tween1.slice();
+ tween1.splice(i, 1);
+ break;
+ }
+ }
+ }
+
+ schedule.tween = tween1;
+ };
+}
+
+function tweenFunction(id, name, value) {
+ var tween0, tween1;
+ if (typeof value !== "function") throw new Error;
+ return function() {
+ var schedule = schedule_set(this, id),
+ tween = schedule.tween;
+
+ // If this node shared tween with the previous node,
+ // just assign the updated shared tween and we’re done!
+ // Otherwise, copy-on-write.
+ if (tween !== tween0) {
+ tween1 = (tween0 = tween).slice();
+ for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {
+ if (tween1[i].name === name) {
+ tween1[i] = t;
+ break;
+ }
+ }
+ if (i === n) tween1.push(t);
+ }
+
+ schedule.tween = tween1;
+ };
+}
+
+/* harmony default export */ function tween(name, value) {
+ var id = this._id;
+
+ name += "";
+
+ if (arguments.length < 2) {
+ var tween = schedule_get(this.node(), id).tween;
+ for (var i = 0, n = tween.length, t; i < n; ++i) {
+ if ((t = tween[i]).name === name) {
+ return t.value;
+ }
+ }
+ return null;
+ }
+
+ return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));
+}
+
+function tweenValue(transition, name, value) {
+ var id = transition._id;
+
+ transition.each(function() {
+ var schedule = schedule_set(this, id);
+ (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);
+ });
+
+ return function(node) {
+ return schedule_get(node, id).value[name];
+ };
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-color/src/define.js
+/* harmony default export */ function src_define(constructor, factory, prototype) {
+ constructor.prototype = factory.prototype = prototype;
+ prototype.constructor = constructor;
+}
+
+function extend(parent, definition) {
+ var prototype = Object.create(parent.prototype);
+ for (var key in definition) prototype[key] = definition[key];
+ return prototype;
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-color/src/color.js
+
+
+function Color() {}
+
+var darker = 0.7;
+var brighter = 1 / darker;
+
+var reI = "\\s*([+-]?\\d+)\\s*",
+ reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",
+ reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",
+ reHex = /^#([0-9a-f]{3,8})$/,
+ reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"),
+ reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"),
+ reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"),
+ reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$"),
+ reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$"),
+ reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$");
+
+var named = {
+ aliceblue: 0xf0f8ff,
+ antiquewhite: 0xfaebd7,
+ aqua: 0x00ffff,
+ aquamarine: 0x7fffd4,
+ azure: 0xf0ffff,
+ beige: 0xf5f5dc,
+ bisque: 0xffe4c4,
+ black: 0x000000,
+ blanchedalmond: 0xffebcd,
+ blue: 0x0000ff,
+ blueviolet: 0x8a2be2,
+ brown: 0xa52a2a,
+ burlywood: 0xdeb887,
+ cadetblue: 0x5f9ea0,
+ chartreuse: 0x7fff00,
+ chocolate: 0xd2691e,
+ coral: 0xff7f50,
+ cornflowerblue: 0x6495ed,
+ cornsilk: 0xfff8dc,
+ crimson: 0xdc143c,
+ cyan: 0x00ffff,
+ darkblue: 0x00008b,
+ darkcyan: 0x008b8b,
+ darkgoldenrod: 0xb8860b,
+ darkgray: 0xa9a9a9,
+ darkgreen: 0x006400,
+ darkgrey: 0xa9a9a9,
+ darkkhaki: 0xbdb76b,
+ darkmagenta: 0x8b008b,
+ darkolivegreen: 0x556b2f,
+ darkorange: 0xff8c00,
+ darkorchid: 0x9932cc,
+ darkred: 0x8b0000,
+ darksalmon: 0xe9967a,
+ darkseagreen: 0x8fbc8f,
+ darkslateblue: 0x483d8b,
+ darkslategray: 0x2f4f4f,
+ darkslategrey: 0x2f4f4f,
+ darkturquoise: 0x00ced1,
+ darkviolet: 0x9400d3,
+ deeppink: 0xff1493,
+ deepskyblue: 0x00bfff,
+ dimgray: 0x696969,
+ dimgrey: 0x696969,
+ dodgerblue: 0x1e90ff,
+ firebrick: 0xb22222,
+ floralwhite: 0xfffaf0,
+ forestgreen: 0x228b22,
+ fuchsia: 0xff00ff,
+ gainsboro: 0xdcdcdc,
+ ghostwhite: 0xf8f8ff,
+ gold: 0xffd700,
+ goldenrod: 0xdaa520,
+ gray: 0x808080,
+ green: 0x008000,
+ greenyellow: 0xadff2f,
+ grey: 0x808080,
+ honeydew: 0xf0fff0,
+ hotpink: 0xff69b4,
+ indianred: 0xcd5c5c,
+ indigo: 0x4b0082,
+ ivory: 0xfffff0,
+ khaki: 0xf0e68c,
+ lavender: 0xe6e6fa,
+ lavenderblush: 0xfff0f5,
+ lawngreen: 0x7cfc00,
+ lemonchiffon: 0xfffacd,
+ lightblue: 0xadd8e6,
+ lightcoral: 0xf08080,
+ lightcyan: 0xe0ffff,
+ lightgoldenrodyellow: 0xfafad2,
+ lightgray: 0xd3d3d3,
+ lightgreen: 0x90ee90,
+ lightgrey: 0xd3d3d3,
+ lightpink: 0xffb6c1,
+ lightsalmon: 0xffa07a,
+ lightseagreen: 0x20b2aa,
+ lightskyblue: 0x87cefa,
+ lightslategray: 0x778899,
+ lightslategrey: 0x778899,
+ lightsteelblue: 0xb0c4de,
+ lightyellow: 0xffffe0,
+ lime: 0x00ff00,
+ limegreen: 0x32cd32,
+ linen: 0xfaf0e6,
+ magenta: 0xff00ff,
+ maroon: 0x800000,
+ mediumaquamarine: 0x66cdaa,
+ mediumblue: 0x0000cd,
+ mediumorchid: 0xba55d3,
+ mediumpurple: 0x9370db,
+ mediumseagreen: 0x3cb371,
+ mediumslateblue: 0x7b68ee,
+ mediumspringgreen: 0x00fa9a,
+ mediumturquoise: 0x48d1cc,
+ mediumvioletred: 0xc71585,
+ midnightblue: 0x191970,
+ mintcream: 0xf5fffa,
+ mistyrose: 0xffe4e1,
+ moccasin: 0xffe4b5,
+ navajowhite: 0xffdead,
+ navy: 0x000080,
+ oldlace: 0xfdf5e6,
+ olive: 0x808000,
+ olivedrab: 0x6b8e23,
+ orange: 0xffa500,
+ orangered: 0xff4500,
+ orchid: 0xda70d6,
+ palegoldenrod: 0xeee8aa,
+ palegreen: 0x98fb98,
+ paleturquoise: 0xafeeee,
+ palevioletred: 0xdb7093,
+ papayawhip: 0xffefd5,
+ peachpuff: 0xffdab9,
+ peru: 0xcd853f,
+ pink: 0xffc0cb,
+ plum: 0xdda0dd,
+ powderblue: 0xb0e0e6,
+ purple: 0x800080,
+ rebeccapurple: 0x663399,
+ red: 0xff0000,
+ rosybrown: 0xbc8f8f,
+ royalblue: 0x4169e1,
+ saddlebrown: 0x8b4513,
+ salmon: 0xfa8072,
+ sandybrown: 0xf4a460,
+ seagreen: 0x2e8b57,
+ seashell: 0xfff5ee,
+ sienna: 0xa0522d,
+ silver: 0xc0c0c0,
+ skyblue: 0x87ceeb,
+ slateblue: 0x6a5acd,
+ slategray: 0x708090,
+ slategrey: 0x708090,
+ snow: 0xfffafa,
+ springgreen: 0x00ff7f,
+ steelblue: 0x4682b4,
+ tan: 0xd2b48c,
+ teal: 0x008080,
+ thistle: 0xd8bfd8,
+ tomato: 0xff6347,
+ turquoise: 0x40e0d0,
+ violet: 0xee82ee,
+ wheat: 0xf5deb3,
+ white: 0xffffff,
+ whitesmoke: 0xf5f5f5,
+ yellow: 0xffff00,
+ yellowgreen: 0x9acd32
+};
+
+src_define(Color, color, {
+ copy: function(channels) {
+ return Object.assign(new this.constructor, this, channels);
+ },
+ displayable: function() {
+ return this.rgb().displayable();
+ },
+ hex: color_formatHex, // Deprecated! Use color.formatHex.
+ formatHex: color_formatHex,
+ formatHsl: color_formatHsl,
+ formatRgb: color_formatRgb,
+ toString: color_formatRgb
+});
+
+function color_formatHex() {
+ return this.rgb().formatHex();
+}
+
+function color_formatHsl() {
+ return hslConvert(this).formatHsl();
+}
+
+function color_formatRgb() {
+ return this.rgb().formatRgb();
+}
+
+function color(format) {
+ var m, l;
+ format = (format + "").trim().toLowerCase();
+ return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000
+ : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00
+ : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000
+ : 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
+ : null) // invalid hex
+ : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
+ : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)
+ : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
+ : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)
+ : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
+ : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
+ : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins
+ : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0)
+ : null;
+}
+
+function rgbn(n) {
+ return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);
+}
+
+function rgba(r, g, b, a) {
+ if (a <= 0) r = g = b = NaN;
+ return new Rgb(r, g, b, a);
+}
+
+function rgbConvert(o) {
+ if (!(o instanceof Color)) o = color(o);
+ if (!o) return new Rgb;
+ o = o.rgb();
+ return new Rgb(o.r, o.g, o.b, o.opacity);
+}
+
+function color_rgb(r, g, b, opacity) {
+ return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
+}
+
+function Rgb(r, g, b, opacity) {
+ this.r = +r;
+ this.g = +g;
+ this.b = +b;
+ this.opacity = +opacity;
+}
+
+src_define(Rgb, color_rgb, extend(Color, {
+ brighter: function(k) {
+ k = k == null ? brighter : Math.pow(brighter, k);
+ return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
+ },
+ darker: function(k) {
+ k = k == null ? darker : Math.pow(darker, k);
+ return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
+ },
+ rgb: function() {
+ return this;
+ },
+ displayable: function() {
+ return (-0.5 <= this.r && this.r < 255.5)
+ && (-0.5 <= this.g && this.g < 255.5)
+ && (-0.5 <= this.b && this.b < 255.5)
+ && (0 <= this.opacity && this.opacity <= 1);
+ },
+ hex: rgb_formatHex, // Deprecated! Use color.formatHex.
+ formatHex: rgb_formatHex,
+ formatRgb: rgb_formatRgb,
+ toString: rgb_formatRgb
+}));
+
+function rgb_formatHex() {
+ return "#" + hex(this.r) + hex(this.g) + hex(this.b);
+}
+
+function rgb_formatRgb() {
+ var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
+ return (a === 1 ? "rgb(" : "rgba(")
+ + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", "
+ + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", "
+ + Math.max(0, Math.min(255, Math.round(this.b) || 0))
+ + (a === 1 ? ")" : ", " + a + ")");
+}
+
+function hex(value) {
+ value = Math.max(0, Math.min(255, Math.round(value) || 0));
+ return (value < 16 ? "0" : "") + value.toString(16);
+}
+
+function hsla(h, s, l, a) {
+ if (a <= 0) h = s = l = NaN;
+ else if (l <= 0 || l >= 1) h = s = NaN;
+ else if (s <= 0) h = NaN;
+ return new Hsl(h, s, l, a);
+}
+
+function hslConvert(o) {
+ if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);
+ if (!(o instanceof Color)) o = color(o);
+ if (!o) return new Hsl;
+ if (o instanceof Hsl) return o;
+ o = o.rgb();
+ var r = o.r / 255,
+ g = o.g / 255,
+ b = o.b / 255,
+ min = Math.min(r, g, b),
+ max = Math.max(r, g, b),
+ h = NaN,
+ s = max - min,
+ l = (max + min) / 2;
+ if (s) {
+ if (r === max) h = (g - b) / s + (g < b) * 6;
+ else if (g === max) h = (b - r) / s + 2;
+ else h = (r - g) / s + 4;
+ s /= l < 0.5 ? max + min : 2 - max - min;
+ h *= 60;
+ } else {
+ s = l > 0 && l < 1 ? 0 : h;
+ }
+ return new Hsl(h, s, l, o.opacity);
+}
+
+function hsl(h, s, l, opacity) {
+ return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);
+}
+
+function Hsl(h, s, l, opacity) {
+ this.h = +h;
+ this.s = +s;
+ this.l = +l;
+ this.opacity = +opacity;
+}
+
+src_define(Hsl, hsl, extend(Color, {
+ brighter: function(k) {
+ k = k == null ? brighter : Math.pow(brighter, k);
+ return new Hsl(this.h, this.s, this.l * k, this.opacity);
+ },
+ darker: function(k) {
+ k = k == null ? darker : Math.pow(darker, k);
+ return new Hsl(this.h, this.s, this.l * k, this.opacity);
+ },
+ rgb: function() {
+ var h = this.h % 360 + (this.h < 0) * 360,
+ s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
+ l = this.l,
+ m2 = l + (l < 0.5 ? l : 1 - l) * s,
+ m1 = 2 * l - m2;
+ return new Rgb(
+ hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),
+ hsl2rgb(h, m1, m2),
+ hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),
+ this.opacity
+ );
+ },
+ displayable: function() {
+ return (0 <= this.s && this.s <= 1 || isNaN(this.s))
+ && (0 <= this.l && this.l <= 1)
+ && (0 <= this.opacity && this.opacity <= 1);
+ },
+ formatHsl: function() {
+ var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
+ return (a === 1 ? "hsl(" : "hsla(")
+ + (this.h || 0) + ", "
+ + (this.s || 0) * 100 + "%, "
+ + (this.l || 0) * 100 + "%"
+ + (a === 1 ? ")" : ", " + a + ")");
+ }
+}));
+
+/* From FvD 13.37, CSS Color Module Level 3 */
+function hsl2rgb(h, m1, m2) {
+ return (h < 60 ? m1 + (m2 - m1) * h / 60
+ : h < 180 ? m2
+ : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60
+ : m1) * 255;
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-interpolate/src/basis.js
+function basis(t1, v0, v1, v2, v3) {
+ var t2 = t1 * t1, t3 = t2 * t1;
+ return ((1 - 3 * t1 + 3 * t2 - t3) * v0
+ + (4 - 6 * t2 + 3 * t3) * v1
+ + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2
+ + t3 * v3) / 6;
+}
+
+/* harmony default export */ function src_basis(values) {
+ var n = values.length - 1;
+ return function(t) {
+ var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),
+ v1 = values[i],
+ v2 = values[i + 1],
+ v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,
+ v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;
+ return basis((t - i / n) * n, v0, v1, v2, v3);
+ };
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-interpolate/src/basisClosed.js
+
+
+/* harmony default export */ function basisClosed(values) {
+ var n = values.length;
+ return function(t) {
+ var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),
+ v0 = values[(i + n - 1) % n],
+ v1 = values[i % n],
+ v2 = values[(i + 1) % n],
+ v3 = values[(i + 2) % n];
+ return basis((t - i / n) * n, v0, v1, v2, v3);
+ };
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-interpolate/src/constant.js
+/* harmony default export */ const d3_interpolate_src_constant = (x => () => x);
+
+;// CONCATENATED MODULE: ../node_modules/d3-interpolate/src/color.js
+
+
+function linear(a, d) {
+ return function(t) {
+ return a + t * d;
+ };
+}
+
+function exponential(a, b, y) {
+ return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {
+ return Math.pow(a + t * b, y);
+ };
+}
+
+function hue(a, b) {
+ var d = b - a;
+ return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);
+}
+
+function gamma(y) {
+ return (y = +y) === 1 ? nogamma : function(a, b) {
+ return b - a ? exponential(a, b, y) : d3_interpolate_src_constant(isNaN(a) ? b : a);
+ };
+}
+
+function nogamma(a, b) {
+ var d = b - a;
+ return d ? linear(a, d) : d3_interpolate_src_constant(isNaN(a) ? b : a);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-interpolate/src/rgb.js
+
+
+
+
+
+/* harmony default export */ const rgb = ((function rgbGamma(y) {
+ var color = gamma(y);
+
+ function rgb(start, end) {
+ var r = color((start = color_rgb(start)).r, (end = color_rgb(end)).r),
+ g = color(start.g, end.g),
+ b = color(start.b, end.b),
+ opacity = nogamma(start.opacity, end.opacity);
+ return function(t) {
+ start.r = r(t);
+ start.g = g(t);
+ start.b = b(t);
+ start.opacity = opacity(t);
+ return start + "";
+ };
+ }
+
+ rgb.gamma = rgbGamma;
+
+ return rgb;
+})(1));
+
+function rgbSpline(spline) {
+ return function(colors) {
+ var n = colors.length,
+ r = new Array(n),
+ g = new Array(n),
+ b = new Array(n),
+ i, color;
+ for (i = 0; i < n; ++i) {
+ color = color_rgb(colors[i]);
+ r[i] = color.r || 0;
+ g[i] = color.g || 0;
+ b[i] = color.b || 0;
+ }
+ r = spline(r);
+ g = spline(g);
+ b = spline(b);
+ color.opacity = 1;
+ return function(t) {
+ color.r = r(t);
+ color.g = g(t);
+ color.b = b(t);
+ return color + "";
+ };
+ };
+}
+
+var rgbBasis = rgbSpline(src_basis);
+var rgbBasisClosed = rgbSpline(basisClosed);
+
+;// CONCATENATED MODULE: ../node_modules/d3-interpolate/src/string.js
+
+
+var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,
+ reB = new RegExp(reA.source, "g");
+
+function zero(b) {
+ return function() {
+ return b;
+ };
+}
+
+function one(b) {
+ return function(t) {
+ return b(t) + "";
+ };
+}
+
+/* harmony default export */ function string(a, b) {
+ var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b
+ am, // current match in a
+ bm, // current match in b
+ bs, // string preceding current number in b, if any
+ i = -1, // index in s
+ s = [], // string constants and placeholders
+ q = []; // number interpolators
+
+ // Coerce inputs to strings.
+ a = a + "", b = b + "";
+
+ // Interpolate pairs of numbers in a & b.
+ while ((am = reA.exec(a))
+ && (bm = reB.exec(b))) {
+ if ((bs = bm.index) > bi) { // a string precedes the next number in b
+ bs = b.slice(bi, bs);
+ if (s[i]) s[i] += bs; // coalesce with previous string
+ else s[++i] = bs;
+ }
+ if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match
+ if (s[i]) s[i] += bm; // coalesce with previous string
+ else s[++i] = bm;
+ } else { // interpolate non-matching numbers
+ s[++i] = null;
+ q.push({i: i, x: number(am, bm)});
+ }
+ bi = reB.lastIndex;
+ }
+
+ // Add remains of b.
+ if (bi < b.length) {
+ bs = b.slice(bi);
+ if (s[i]) s[i] += bs; // coalesce with previous string
+ else s[++i] = bs;
+ }
+
+ // Special optimization for only a single match.
+ // Otherwise, interpolate each of the numbers and rejoin the string.
+ return s.length < 2 ? (q[0]
+ ? one(q[0].x)
+ : zero(b))
+ : (b = q.length, function(t) {
+ for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
+ return s.join("");
+ });
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/interpolate.js
+
+
+
+/* harmony default export */ function interpolate(a, b) {
+ var c;
+ return (typeof b === "number" ? number
+ : b instanceof color ? rgb
+ : (c = color(b)) ? (b = c, rgb)
+ : string)(a, b);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/attr.js
+
+
+
+
+
+function attr_attrRemove(name) {
+ return function() {
+ this.removeAttribute(name);
+ };
+}
+
+function attr_attrRemoveNS(fullname) {
+ return function() {
+ this.removeAttributeNS(fullname.space, fullname.local);
+ };
+}
+
+function attr_attrConstant(name, interpolate, value1) {
+ var string00,
+ string1 = value1 + "",
+ interpolate0;
+ return function() {
+ var string0 = this.getAttribute(name);
+ return string0 === string1 ? null
+ : string0 === string00 ? interpolate0
+ : interpolate0 = interpolate(string00 = string0, value1);
+ };
+}
+
+function attr_attrConstantNS(fullname, interpolate, value1) {
+ var string00,
+ string1 = value1 + "",
+ interpolate0;
+ return function() {
+ var string0 = this.getAttributeNS(fullname.space, fullname.local);
+ return string0 === string1 ? null
+ : string0 === string00 ? interpolate0
+ : interpolate0 = interpolate(string00 = string0, value1);
+ };
+}
+
+function attr_attrFunction(name, interpolate, value) {
+ var string00,
+ string10,
+ interpolate0;
+ return function() {
+ var string0, value1 = value(this), string1;
+ if (value1 == null) return void this.removeAttribute(name);
+ string0 = this.getAttribute(name);
+ string1 = value1 + "";
+ return string0 === string1 ? null
+ : string0 === string00 && string1 === string10 ? interpolate0
+ : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
+ };
+}
+
+function attr_attrFunctionNS(fullname, interpolate, value) {
+ var string00,
+ string10,
+ interpolate0;
+ return function() {
+ var string0, value1 = value(this), string1;
+ if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);
+ string0 = this.getAttributeNS(fullname.space, fullname.local);
+ string1 = value1 + "";
+ return string0 === string1 ? null
+ : string0 === string00 && string1 === string10 ? interpolate0
+ : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
+ };
+}
+
+/* harmony default export */ function transition_attr(name, value) {
+ var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate;
+ return this.attrTween(name, typeof value === "function"
+ ? (fullname.local ? attr_attrFunctionNS : attr_attrFunction)(fullname, i, tweenValue(this, "attr." + name, value))
+ : value == null ? (fullname.local ? attr_attrRemoveNS : attr_attrRemove)(fullname)
+ : (fullname.local ? attr_attrConstantNS : attr_attrConstant)(fullname, i, value));
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/attrTween.js
+
+
+function attrInterpolate(name, i) {
+ return function(t) {
+ this.setAttribute(name, i.call(this, t));
+ };
+}
+
+function attrInterpolateNS(fullname, i) {
+ return function(t) {
+ this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));
+ };
+}
+
+function attrTweenNS(fullname, value) {
+ var t0, i0;
+ function tween() {
+ var i = value.apply(this, arguments);
+ if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);
+ return t0;
+ }
+ tween._value = value;
+ return tween;
+}
+
+function attrTween(name, value) {
+ var t0, i0;
+ function tween() {
+ var i = value.apply(this, arguments);
+ if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);
+ return t0;
+ }
+ tween._value = value;
+ return tween;
+}
+
+/* harmony default export */ function transition_attrTween(name, value) {
+ var key = "attr." + name;
+ if (arguments.length < 2) return (key = this.tween(key)) && key._value;
+ if (value == null) return this.tween(key, null);
+ if (typeof value !== "function") throw new Error;
+ var fullname = namespace(name);
+ return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/delay.js
+
+
+function delayFunction(id, value) {
+ return function() {
+ init(this, id).delay = +value.apply(this, arguments);
+ };
+}
+
+function delayConstant(id, value) {
+ return value = +value, function() {
+ init(this, id).delay = value;
+ };
+}
+
+/* harmony default export */ function delay(value) {
+ var id = this._id;
+
+ return arguments.length
+ ? this.each((typeof value === "function"
+ ? delayFunction
+ : delayConstant)(id, value))
+ : schedule_get(this.node(), id).delay;
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/duration.js
+
+
+function durationFunction(id, value) {
+ return function() {
+ schedule_set(this, id).duration = +value.apply(this, arguments);
+ };
+}
+
+function durationConstant(id, value) {
+ return value = +value, function() {
+ schedule_set(this, id).duration = value;
+ };
+}
+
+/* harmony default export */ function duration(value) {
+ var id = this._id;
+
+ return arguments.length
+ ? this.each((typeof value === "function"
+ ? durationFunction
+ : durationConstant)(id, value))
+ : schedule_get(this.node(), id).duration;
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/ease.js
+
+
+function easeConstant(id, value) {
+ if (typeof value !== "function") throw new Error;
+ return function() {
+ schedule_set(this, id).ease = value;
+ };
+}
+
+/* harmony default export */ function ease(value) {
+ var id = this._id;
+
+ return arguments.length
+ ? this.each(easeConstant(id, value))
+ : schedule_get(this.node(), id).ease;
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/easeVarying.js
+
+
+function easeVarying(id, value) {
+ return function() {
+ var v = value.apply(this, arguments);
+ if (typeof v !== "function") throw new Error;
+ schedule_set(this, id).ease = v;
+ };
+}
+
+/* harmony default export */ function transition_easeVarying(value) {
+ if (typeof value !== "function") throw new Error;
+ return this.each(easeVarying(this._id, value));
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/filter.js
+
+
+
+/* harmony default export */ function transition_filter(match) {
+ if (typeof match !== "function") match = matcher(match);
+
+ for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
+ for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
+ if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
+ subgroup.push(node);
+ }
+ }
+ }
+
+ return new Transition(subgroups, this._parents, this._name, this._id);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/merge.js
+
+
+/* harmony default export */ function transition_merge(transition) {
+ if (transition._id !== this._id) throw new Error;
+
+ 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) {
+ for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
+ if (node = group0[i] || group1[i]) {
+ merge[i] = node;
+ }
+ }
+ }
+
+ for (; j < m0; ++j) {
+ merges[j] = groups0[j];
+ }
+
+ return new Transition(merges, this._parents, this._name, this._id);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/on.js
+
+
+function start(name) {
+ return (name + "").trim().split(/^|\s+/).every(function(t) {
+ var i = t.indexOf(".");
+ if (i >= 0) t = t.slice(0, i);
+ return !t || t === "start";
+ });
+}
+
+function onFunction(id, name, listener) {
+ var on0, on1, sit = start(name) ? init : schedule_set;
+ return function() {
+ var schedule = sit(this, id),
+ on = schedule.on;
+
+ // If this node shared a dispatch with the previous node,
+ // just assign the updated shared dispatch and we’re done!
+ // Otherwise, copy-on-write.
+ if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);
+
+ schedule.on = on1;
+ };
+}
+
+/* harmony default export */ function transition_on(name, listener) {
+ var id = this._id;
+
+ return arguments.length < 2
+ ? schedule_get(this.node(), id).on.on(name)
+ : this.each(onFunction(id, name, listener));
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/remove.js
+function removeFunction(id) {
+ return function() {
+ var parent = this.parentNode;
+ for (var i in this.__transition) if (+i !== id) return;
+ if (parent) parent.removeChild(this);
+ };
+}
+
+/* harmony default export */ function transition_remove() {
+ return this.on("end.remove", removeFunction(this._id));
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/select.js
+
+
+
+
+/* harmony default export */ function transition_select(select) {
+ var name = this._name,
+ id = this._id;
+
+ if (typeof select !== "function") select = selector(select);
+
+ for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
+ for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
+ if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
+ if ("__data__" in node) subnode.__data__ = node.__data__;
+ subgroup[i] = subnode;
+ schedule(subgroup[i], name, id, i, subgroup, schedule_get(node, id));
+ }
+ }
+ }
+
+ return new Transition(subgroups, this._parents, name, id);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/selectAll.js
+
+
+
+
+/* harmony default export */ function transition_selectAll(select) {
+ var name = this._name,
+ id = this._id;
+
+ if (typeof select !== "function") select = selectorAll(select);
+
+ for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
+ for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
+ if (node = group[i]) {
+ for (var children = select.call(node, node.__data__, i, group), child, inherit = schedule_get(node, id), k = 0, l = children.length; k < l; ++k) {
+ if (child = children[k]) {
+ schedule(child, name, id, k, children, inherit);
+ }
+ }
+ subgroups.push(children);
+ parents.push(node);
+ }
+ }
+ }
+
+ return new Transition(subgroups, parents, name, id);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/selection.js
+
+
+var selection_Selection = src_selection.prototype.constructor;
+
+/* harmony default export */ function transition_selection() {
+ return new selection_Selection(this._groups, this._parents);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/style.js
+
+
+
+
+
+
+function styleNull(name, interpolate) {
+ var string00,
+ string10,
+ interpolate0;
+ return function() {
+ var string0 = styleValue(this, name),
+ string1 = (this.style.removeProperty(name), styleValue(this, name));
+ return string0 === string1 ? null
+ : string0 === string00 && string1 === string10 ? interpolate0
+ : interpolate0 = interpolate(string00 = string0, string10 = string1);
+ };
+}
+
+function style_styleRemove(name) {
+ return function() {
+ this.style.removeProperty(name);
+ };
+}
+
+function style_styleConstant(name, interpolate, value1) {
+ var string00,
+ string1 = value1 + "",
+ interpolate0;
+ return function() {
+ var string0 = styleValue(this, name);
+ return string0 === string1 ? null
+ : string0 === string00 ? interpolate0
+ : interpolate0 = interpolate(string00 = string0, value1);
+ };
+}
+
+function style_styleFunction(name, interpolate, value) {
+ var string00,
+ string10,
+ interpolate0;
+ return function() {
+ var string0 = styleValue(this, name),
+ value1 = value(this),
+ string1 = value1 + "";
+ if (value1 == null) string1 = value1 = (this.style.removeProperty(name), styleValue(this, name));
+ return string0 === string1 ? null
+ : string0 === string00 && string1 === string10 ? interpolate0
+ : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
+ };
+}
+
+function styleMaybeRemove(id, name) {
+ var on0, on1, listener0, key = "style." + name, event = "end." + key, remove;
+ return function() {
+ var schedule = schedule_set(this, id),
+ on = schedule.on,
+ listener = schedule.value[key] == null ? remove || (remove = style_styleRemove(name)) : undefined;
+
+ // If this node shared a dispatch with the previous node,
+ // just assign the updated shared dispatch and we’re done!
+ // Otherwise, copy-on-write.
+ if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);
+
+ schedule.on = on1;
+ };
+}
+
+/* harmony default export */ function transition_style(name, value, priority) {
+ var i = (name += "") === "transform" ? interpolateTransformCss : interpolate;
+ return value == null ? this
+ .styleTween(name, styleNull(name, i))
+ .on("end.style." + name, style_styleRemove(name))
+ : typeof value === "function" ? this
+ .styleTween(name, style_styleFunction(name, i, tweenValue(this, "style." + name, value)))
+ .each(styleMaybeRemove(this._id, name))
+ : this
+ .styleTween(name, style_styleConstant(name, i, value), priority)
+ .on("end.style." + name, null);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/styleTween.js
+function styleInterpolate(name, i, priority) {
+ return function(t) {
+ this.style.setProperty(name, i.call(this, t), priority);
+ };
+}
+
+function styleTween(name, value, priority) {
+ var t, i0;
+ function tween() {
+ var i = value.apply(this, arguments);
+ if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);
+ return t;
+ }
+ tween._value = value;
+ return tween;
+}
+
+/* harmony default export */ function transition_styleTween(name, value, priority) {
+ var key = "style." + (name += "");
+ if (arguments.length < 2) return (key = this.tween(key)) && key._value;
+ if (value == null) return this.tween(key, null);
+ if (typeof value !== "function") throw new Error;
+ return this.tween(key, styleTween(name, value, priority == null ? "" : priority));
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/text.js
+
+
+function text_textConstant(value) {
+ return function() {
+ this.textContent = value;
+ };
+}
+
+function text_textFunction(value) {
+ return function() {
+ var value1 = value(this);
+ this.textContent = value1 == null ? "" : value1;
+ };
+}
+
+/* harmony default export */ function transition_text(value) {
+ return this.tween("text", typeof value === "function"
+ ? text_textFunction(tweenValue(this, "text", value))
+ : text_textConstant(value == null ? "" : value + ""));
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/textTween.js
+function textInterpolate(i) {
+ return function(t) {
+ this.textContent = i.call(this, t);
+ };
+}
+
+function textTween(value) {
+ var t0, i0;
+ function tween() {
+ var i = value.apply(this, arguments);
+ if (i !== i0) t0 = (i0 = i) && textInterpolate(i);
+ return t0;
+ }
+ tween._value = value;
+ return tween;
+}
+
+/* harmony default export */ function transition_textTween(value) {
+ var key = "text";
+ if (arguments.length < 1) return (key = this.tween(key)) && key._value;
+ if (value == null) return this.tween(key, null);
+ if (typeof value !== "function") throw new Error;
+ return this.tween(key, textTween(value));
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/transition.js
+
+
+
+/* harmony default export */ function transition() {
+ var name = this._name,
+ id0 = this._id,
+ id1 = newId();
+
+ for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
+ for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
+ if (node = group[i]) {
+ var inherit = schedule_get(node, id0);
+ schedule(node, name, id1, i, group, {
+ time: inherit.time + inherit.delay + inherit.duration,
+ delay: 0,
+ duration: inherit.duration,
+ ease: inherit.ease
+ });
+ }
+ }
+ }
+
+ return new Transition(groups, this._parents, name, id1);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/end.js
+
+
+/* harmony default export */ function end() {
+ var on0, on1, that = this, id = that._id, size = that.size();
+ return new Promise(function(resolve, reject) {
+ var cancel = {value: reject},
+ end = {value: function() { if (--size === 0) resolve(); }};
+
+ that.each(function() {
+ var schedule = schedule_set(this, id),
+ on = schedule.on;
+
+ // If this node shared a dispatch with the previous node,
+ // just assign the updated shared dispatch and we’re done!
+ // Otherwise, copy-on-write.
+ if (on !== on0) {
+ on1 = (on0 = on).copy();
+ on1._.cancel.push(cancel);
+ on1._.interrupt.push(cancel);
+ on1._.end.push(end);
+ }
+
+ schedule.on = on1;
+ });
+
+ // The selection was empty, resolve end immediately
+ if (size === 0) resolve();
+ });
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/index.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+var id = 0;
+
+function Transition(groups, parents, name, id) {
+ this._groups = groups;
+ this._parents = parents;
+ this._name = name;
+ this._id = id;
+}
+
+function transition_transition(name) {
+ return src_selection().transition(name);
+}
+
+function newId() {
+ return ++id;
+}
+
+var selection_prototype = src_selection.prototype;
+
+Transition.prototype = transition_transition.prototype = {
+ constructor: Transition,
+ select: transition_select,
+ selectAll: transition_selectAll,
+ selectChild: selection_prototype.selectChild,
+ selectChildren: selection_prototype.selectChildren,
+ filter: transition_filter,
+ merge: transition_merge,
+ selection: transition_selection,
+ transition: transition,
+ call: selection_prototype.call,
+ nodes: selection_prototype.nodes,
+ node: selection_prototype.node,
+ size: selection_prototype.size,
+ empty: selection_prototype.empty,
+ each: selection_prototype.each,
+ on: transition_on,
+ attr: transition_attr,
+ attrTween: transition_attrTween,
+ style: transition_style,
+ styleTween: transition_styleTween,
+ text: transition_text,
+ textTween: transition_textTween,
+ remove: transition_remove,
+ tween: tween,
+ delay: delay,
+ duration: duration,
+ ease: ease,
+ easeVarying: transition_easeVarying,
+ end: end,
+ [Symbol.iterator]: selection_prototype[Symbol.iterator]
+};
+
+;// CONCATENATED MODULE: ../node_modules/d3-ease/src/cubic.js
+function cubicIn(t) {
+ return t * t * t;
+}
+
+function cubicOut(t) {
+ return --t * t * t + 1;
+}
+
+function cubicInOut(t) {
+ return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/selection/transition.js
+
+
+
+
+
+var defaultTiming = {
+ time: null, // Set on use.
+ delay: 0,
+ duration: 250,
+ ease: cubicInOut
+};
+
+function inherit(node, id) {
+ var timing;
+ while (!(timing = node.__transition) || !(timing = timing[id])) {
+ if (!(node = node.parentNode)) {
+ throw new Error(`transition ${id} not found`);
+ }
+ }
+ return timing;
+}
+
+/* harmony default export */ function selection_transition(name) {
+ var id,
+ timing;
+
+ if (name instanceof Transition) {
+ id = name._id, name = name._name;
+ } else {
+ id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + "";
+ }
+
+ for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
+ for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
+ if (node = group[i]) {
+ schedule(node, name, id, i, group, timing || inherit(node, id));
+ }
+ }
+ }
+
+ return new Transition(groups, this._parents, name, id);
+}
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/selection/index.js
+
+
+
+
+src_selection.prototype.interrupt = selection_interrupt;
+src_selection.prototype.transition = selection_transition;
+
+;// CONCATENATED MODULE: ../node_modules/d3-transition/src/index.js
+
+
+
+
+
+;// CONCATENATED MODULE: ./tooltip.js
+/* global event */
+
+
+
+
+
+
+function defaultLabel (d) {
+ return d.data.name
+}
+
+function defaultFlamegraphTooltip () {
+ var rootElement = src_select('body')
+ var tooltip = null
+ // Function to get HTML content from data.
+ var html = defaultLabel
+ // Function to get text content from data.
+ var text = defaultLabel
+ // Whether to use d3's .html() to set content, otherwise use .text().
+ var contentIsHTML = false
+
+ function tip () {
+ tooltip = rootElement
+ .append('div')
+ .style('display', 'none')
+ .style('position', 'absolute')
+ .style('opacity', 0)
+ .style('pointer-events', 'none')
+ .attr('class', 'd3-flame-graph-tip')
+ }
+
+ tip.show = function (d) {
+ tooltip
+ .style('display', 'block')
+ .style('left', event.pageX + 5 + 'px')
+ .style('top', event.pageY + 5 + 'px')
+ .transition()
+ .duration(200)
+ .style('opacity', 1)
+ .style('pointer-events', 'all')
+
+ if (contentIsHTML) {
+ tooltip.html(html(d))
+ } else {
+ tooltip.text(text(d))
+ }
+
+ return tip
+ }
+
+ tip.hide = function () {
+ tooltip
+ .style('display', 'none')
+ .transition()
+ .duration(200)
+ .style('opacity', 0)
+ .style('pointer-events', 'none')
+
+ return tip
+ }
+
+ /**
+ * Gets/sets a function converting the d3 data into the tooltip's textContent.
+ *
+ * Cannot be combined with tip.html().
+ */
+ tip.text = function (_) {
+ if (!arguments.length) return text
+ text = _
+ contentIsHTML = false
+ return tip
+ }
+
+ /**
+ * Gets/sets a function converting the d3 data into the tooltip's innerHTML.
+ *
+ * Cannot be combined with tip.text().
+ *
+ * @deprecated prefer tip.text().
+ */
+ tip.html = function (_) {
+ if (!arguments.length) return html
+ html = _
+ contentIsHTML = true
+ return tip
+ }
+
+ tip.destroy = function () {
+ tooltip.remove()
+ }
+
+ return tip
+}
+
+/******/ return __webpack_exports__;
+/******/ })()
+;
+});
\ No newline at end of file
diff --git a/development/charts/flamegraph/lib/d3-flamegraph.css b/development/charts/flamegraph/lib/d3-flamegraph.css
new file mode 100644
index 000000000..fa6f345ff
--- /dev/null
+++ b/development/charts/flamegraph/lib/d3-flamegraph.css
@@ -0,0 +1,46 @@
+.d3-flame-graph rect {
+ stroke: #EEEEEE;
+ fill-opacity: .8;
+}
+
+.d3-flame-graph rect:hover {
+ stroke: #474747;
+ stroke-width: 0.5;
+ cursor: pointer;
+}
+
+.d3-flame-graph-label {
+ pointer-events: none;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ font-size: 12px;
+ font-family: Verdana;
+ margin-left: 4px;
+ margin-right: 4px;
+ line-height: 1.5;
+ padding: 0 0 0;
+ font-weight: 400;
+ color: black;
+ text-align: left;
+}
+
+.d3-flame-graph .fade {
+ opacity: 0.6 !important;
+}
+
+.d3-flame-graph .title {
+ font-size: 20px;
+ font-family: Verdana;
+}
+
+.d3-flame-graph-tip {
+ background-color: black;
+ border: none;
+ border-radius: 3px;
+ padding: 5px 10px 5px 10px;
+ min-width: 250px;
+ text-align: left;
+ color: white;
+ z-index: 10;
+}
\ No newline at end of file
diff --git a/development/charts/flamegraph/lib/d3-flamegraph.js b/development/charts/flamegraph/lib/d3-flamegraph.js
new file mode 100644
index 000000000..eabb2c449
--- /dev/null
+++ b/development/charts/flamegraph/lib/d3-flamegraph.js
@@ -0,0 +1,5719 @@
+(function webpackUniversalModuleDefinition(root, factory) {
+ if (typeof exports === 'object' && typeof module === 'object')
+ module.exports = factory();
+ else if (typeof define === 'function' && define.amd) define([], factory);
+ else if (typeof exports === 'object') exports['flamegraph'] = factory();
+ else root['flamegraph'] = factory();
+})(self, function () {
+ return /******/ (() => {
+ // webpackBootstrap
+ /******/ 'use strict'; // The require scope
+ /******/ /******/ var __webpack_require__ = {}; /* webpack/runtime/define property getters */
+ /******/
+ /************************************************************************/
+ /******/ /******/ (() => {
+ /******/ // define getter functions for harmony exports
+ /******/ __webpack_require__.d = (exports, definition) => {
+ /******/ for (var key in definition) {
+ /******/ if (
+ __webpack_require__.o(definition, key) &&
+ !__webpack_require__.o(exports, key)
+ ) {
+ /******/ Object.defineProperty(exports, key, {
+ enumerable: true,
+ get: definition[key],
+ });
+ /******/
+ }
+ /******/
+ }
+ /******/
+ };
+ /******/
+ })(); /* webpack/runtime/hasOwnProperty shorthand */
+ /******/
+ /******/ /******/ (() => {
+ /******/ __webpack_require__.o = (obj, prop) =>
+ Object.prototype.hasOwnProperty.call(obj, prop);
+ /******/
+ })();
+ /******/
+ /************************************************************************/
+ var __webpack_exports__ = {};
+
+ // EXPORTS
+ __webpack_require__.d(__webpack_exports__, {
+ default: () => /* binding */ flamegraph,
+ }); // CONCATENATED MODULE: ../node_modules/d3-selection/src/selector.js
+
+ function none() {}
+
+ /* harmony default export */ function selector(selector) {
+ return selector == null
+ ? none
+ : function () {
+ return this.querySelector(selector);
+ };
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/select.js
+
+ /* harmony default export */ function selection_select(select) {
+ if (typeof select !== 'function') select = selector(select);
+
+ for (
+ var groups = this._groups,
+ m = groups.length,
+ subgroups = new Array(m),
+ j = 0;
+ j < m;
+ ++j
+ ) {
+ for (
+ var group = groups[j],
+ n = group.length,
+ subgroup = (subgroups[j] = new Array(n)),
+ node,
+ subnode,
+ i = 0;
+ i < n;
+ ++i
+ ) {
+ if (
+ (node = group[i]) &&
+ (subnode = select.call(node, node.__data__, i, group))
+ ) {
+ if ('__data__' in node) subnode.__data__ = node.__data__;
+ subgroup[i] = subnode;
+ }
+ }
+ }
+
+ return new Selection(subgroups, this._parents);
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/array.js
+
+ // Given something array like (or null), returns something that is strictly an
+ // array. This is used to ensure that array-like objects passed to d3.selectAll
+ // or selection.selectAll are converted into proper arrays when creating a
+ // selection; we don’t ever want to create a selection backed by a live
+ // HTMLCollection or NodeList. However, note that selection.selectAll will use a
+ // static NodeList as a group, since it safely derived from querySelectorAll.
+ function array(x) {
+ return x == null ? [] : Array.isArray(x) ? x : Array.from(x);
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selectorAll.js
+
+ function empty() {
+ return [];
+ }
+
+ /* harmony default export */ function selectorAll(selector) {
+ return selector == null
+ ? empty
+ : function () {
+ return this.querySelectorAll(selector);
+ };
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/selectAll.js
+
+ function arrayAll(select) {
+ return function () {
+ return array(select.apply(this, arguments));
+ };
+ }
+
+ /* harmony default export */ function selectAll(select) {
+ if (typeof select === 'function') select = arrayAll(select);
+ else select = selectorAll(select);
+
+ for (
+ var groups = this._groups,
+ m = groups.length,
+ subgroups = [],
+ parents = [],
+ j = 0;
+ j < m;
+ ++j
+ ) {
+ for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
+ if ((node = group[i])) {
+ subgroups.push(select.call(node, node.__data__, i, group));
+ parents.push(node);
+ }
+ }
+ }
+
+ return new Selection(subgroups, parents);
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/matcher.js
+
+ /* harmony default export */ function matcher(selector) {
+ return function () {
+ return this.matches(selector);
+ };
+ }
+
+ function childMatcher(selector) {
+ return function (node) {
+ return node.matches(selector);
+ };
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/selectChild.js
+
+ var find = Array.prototype.find;
+
+ function childFind(match) {
+ return function () {
+ return find.call(this.children, match);
+ };
+ }
+
+ function childFirst() {
+ return this.firstElementChild;
+ }
+
+ /* harmony default export */ function selectChild(match) {
+ return this.select(
+ match == null
+ ? childFirst
+ : childFind(
+ typeof match === 'function' ? match : childMatcher(match),
+ ),
+ );
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/selectChildren.js
+
+ var filter = Array.prototype.filter;
+
+ function children() {
+ return Array.from(this.children);
+ }
+
+ function childrenFilter(match) {
+ return function () {
+ return filter.call(this.children, match);
+ };
+ }
+
+ /* harmony default export */ function selectChildren(match) {
+ return this.selectAll(
+ match == null
+ ? children
+ : childrenFilter(
+ typeof match === 'function' ? match : childMatcher(match),
+ ),
+ );
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/filter.js
+
+ /* harmony default export */ function selection_filter(match) {
+ if (typeof match !== 'function') match = matcher(match);
+
+ for (
+ var groups = this._groups,
+ m = groups.length,
+ subgroups = new Array(m),
+ j = 0;
+ j < m;
+ ++j
+ ) {
+ for (
+ var group = groups[j],
+ n = group.length,
+ subgroup = (subgroups[j] = []),
+ node,
+ i = 0;
+ i < n;
+ ++i
+ ) {
+ if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
+ subgroup.push(node);
+ }
+ }
+ }
+
+ return new Selection(subgroups, this._parents);
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/sparse.js
+
+ /* harmony default export */ function sparse(update) {
+ return new Array(update.length);
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/enter.js
+
+ /* harmony default export */ function enter() {
+ return new Selection(
+ this._enter || this._groups.map(sparse),
+ this._parents,
+ );
+ }
+
+ function EnterNode(parent, datum) {
+ this.ownerDocument = parent.ownerDocument;
+ this.namespaceURI = parent.namespaceURI;
+ this._next = null;
+ this._parent = parent;
+ this.__data__ = datum;
+ }
+
+ EnterNode.prototype = {
+ constructor: EnterNode,
+ appendChild: function (child) {
+ return this._parent.insertBefore(child, this._next);
+ },
+ insertBefore: function (child, next) {
+ return this._parent.insertBefore(child, next);
+ },
+ querySelector: function (selector) {
+ return this._parent.querySelector(selector);
+ },
+ querySelectorAll: function (selector) {
+ return this._parent.querySelectorAll(selector);
+ },
+ }; // CONCATENATED MODULE: ../node_modules/d3-selection/src/constant.js
+
+ /* harmony default export */ function src_constant(x) {
+ return function () {
+ return x;
+ };
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/data.js
+
+ function bindIndex(parent, group, enter, update, exit, data) {
+ var i = 0,
+ node,
+ groupLength = group.length,
+ dataLength = data.length;
+
+ // Put any non-null nodes that fit into update.
+ // Put any null nodes into enter.
+ // Put any remaining data into enter.
+ for (; i < dataLength; ++i) {
+ if ((node = group[i])) {
+ node.__data__ = data[i];
+ update[i] = node;
+ } else {
+ enter[i] = new EnterNode(parent, data[i]);
+ }
+ }
+
+ // Put any non-null nodes that don’t fit into exit.
+ for (; i < groupLength; ++i) {
+ if ((node = group[i])) {
+ exit[i] = node;
+ }
+ }
+ }
+
+ function bindKey(parent, group, enter, update, exit, data, key) {
+ var i,
+ node,
+ nodeByKeyValue = new Map(),
+ groupLength = group.length,
+ dataLength = data.length,
+ keyValues = new Array(groupLength),
+ keyValue;
+
+ // Compute the key for each node.
+ // If multiple nodes have the same key, the duplicates are added to exit.
+ for (i = 0; i < groupLength; ++i) {
+ if ((node = group[i])) {
+ keyValues[i] = keyValue =
+ key.call(node, node.__data__, i, group) + '';
+ if (nodeByKeyValue.has(keyValue)) {
+ exit[i] = node;
+ } else {
+ nodeByKeyValue.set(keyValue, node);
+ }
+ }
+ }
+
+ // Compute the key for each datum.
+ // If there a node associated with this key, join and add it to update.
+ // If there is not (or the key is a duplicate), add it to enter.
+ for (i = 0; i < dataLength; ++i) {
+ keyValue = key.call(parent, data[i], i, data) + '';
+ if ((node = nodeByKeyValue.get(keyValue))) {
+ update[i] = node;
+ node.__data__ = data[i];
+ nodeByKeyValue.delete(keyValue);
+ } else {
+ enter[i] = new EnterNode(parent, data[i]);
+ }
+ }
+
+ // Add any remaining nodes that were not bound to data to exit.
+ for (i = 0; i < groupLength; ++i) {
+ if ((node = group[i]) && nodeByKeyValue.get(keyValues[i]) === node) {
+ exit[i] = node;
+ }
+ }
+ }
+
+ function datum(node) {
+ return node.__data__;
+ }
+
+ /* harmony default export */ function data(value, key) {
+ if (!arguments.length) return Array.from(this, datum);
+
+ var bind = key ? bindKey : bindIndex,
+ parents = this._parents,
+ groups = this._groups;
+
+ if (typeof value !== 'function') value = src_constant(value);
+
+ for (
+ var m = groups.length,
+ update = new Array(m),
+ enter = new Array(m),
+ exit = new Array(m),
+ j = 0;
+ j < m;
+ ++j
+ ) {
+ var parent = parents[j],
+ group = groups[j],
+ groupLength = group.length,
+ data = arraylike(
+ value.call(parent, parent && parent.__data__, j, parents),
+ ),
+ dataLength = data.length,
+ enterGroup = (enter[j] = new Array(dataLength)),
+ updateGroup = (update[j] = new Array(dataLength)),
+ exitGroup = (exit[j] = new Array(groupLength));
+
+ bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);
+
+ // Now connect the enter nodes to their following update node, such that
+ // appendChild can insert the materialized enter node before this node,
+ // rather than at the end of the parent node.
+ for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {
+ if ((previous = enterGroup[i0])) {
+ if (i0 >= i1) i1 = i0 + 1;
+ while (!(next = updateGroup[i1]) && ++i1 < dataLength);
+ previous._next = next || null;
+ }
+ }
+ }
+
+ update = new Selection(update, parents);
+ update._enter = enter;
+ update._exit = exit;
+ return update;
+ }
+
+ // Given some data, this returns an array-like view of it: an object that
+ // exposes a length property and allows numeric indexing. Note that unlike
+ // selectAll, this isn’t worried about “live” collections because the resulting
+ // array will only be used briefly while data is being bound. (It is possible to
+ // cause the data to change while iterating by using a key function, but please
+ // don’t; we’d rather avoid a gratuitous copy.)
+ function arraylike(data) {
+ return typeof data === 'object' && 'length' in data
+ ? data // Array, TypedArray, NodeList, array-like
+ : Array.from(data); // Map, Set, iterable, string, or anything else
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/exit.js
+
+ /* harmony default export */ function exit() {
+ return new Selection(
+ this._exit || this._groups.map(sparse),
+ this._parents,
+ );
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/join.js
+
+ /* harmony default export */ function join(onenter, onupdate, onexit) {
+ var enter = this.enter(),
+ update = this,
+ exit = this.exit();
+ if (typeof onenter === 'function') {
+ enter = onenter(enter);
+ if (enter) enter = enter.selection();
+ } else {
+ enter = enter.append(onenter + '');
+ }
+ if (onupdate != null) {
+ update = onupdate(update);
+ if (update) update = update.selection();
+ }
+ if (onexit == null) exit.remove();
+ else onexit(exit);
+ return enter && update ? enter.merge(update).order() : update;
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/merge.js
+
+ /* harmony default export */ function merge(context) {
+ var selection = context.selection ? context.selection() : context;
+
+ 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
+ ) {
+ for (
+ var group0 = groups0[j],
+ group1 = groups1[j],
+ n = group0.length,
+ merge = (merges[j] = new Array(n)),
+ node,
+ i = 0;
+ i < n;
+ ++i
+ ) {
+ if ((node = group0[i] || group1[i])) {
+ merge[i] = node;
+ }
+ }
+ }
+
+ for (; j < m0; ++j) {
+ merges[j] = groups0[j];
+ }
+
+ return new Selection(merges, this._parents);
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/order.js
+
+ /* harmony default export */ function order() {
+ for (var groups = this._groups, j = -1, m = groups.length; ++j < m; ) {
+ for (
+ var group = groups[j], i = group.length - 1, next = group[i], node;
+ --i >= 0;
+
+ ) {
+ if ((node = group[i])) {
+ if (next && node.compareDocumentPosition(next) ^ 4)
+ next.parentNode.insertBefore(node, next);
+ next = node;
+ }
+ }
+ }
+
+ return this;
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/sort.js
+
+ /* harmony default export */ function sort(compare) {
+ if (!compare) compare = ascending;
+
+ function compareNode(a, b) {
+ return a && b ? compare(a.__data__, b.__data__) : !a - !b;
+ }
+
+ for (
+ var groups = this._groups,
+ m = groups.length,
+ sortgroups = new Array(m),
+ j = 0;
+ j < m;
+ ++j
+ ) {
+ for (
+ var group = groups[j],
+ n = group.length,
+ sortgroup = (sortgroups[j] = new Array(n)),
+ node,
+ i = 0;
+ i < n;
+ ++i
+ ) {
+ if ((node = group[i])) {
+ sortgroup[i] = node;
+ }
+ }
+ sortgroup.sort(compareNode);
+ }
+
+ return new Selection(sortgroups, this._parents).order();
+ }
+
+ function ascending(a, b) {
+ return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/call.js
+
+ /* harmony default export */ function call() {
+ var callback = arguments[0];
+ arguments[0] = this;
+ callback.apply(null, arguments);
+ return this;
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/nodes.js
+
+ /* harmony default export */ function nodes() {
+ return Array.from(this);
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/node.js
+
+ /* harmony default export */ function node() {
+ for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
+ for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {
+ var node = group[i];
+ if (node) return node;
+ }
+ }
+
+ return null;
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/size.js
+
+ /* harmony default export */ function size() {
+ let size = 0;
+ for (const node of this) ++size; // eslint-disable-line no-unused-vars
+ return size;
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/empty.js
+
+ /* harmony default export */ function selection_empty() {
+ return !this.node();
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/each.js
+
+ /* harmony default export */ function each(callback) {
+ for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
+ for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {
+ if ((node = group[i])) callback.call(node, node.__data__, i, group);
+ }
+ }
+
+ return this;
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/namespaces.js
+
+ var xhtml = 'http://www.w3.org/1999/xhtml';
+
+ /* harmony default export */ const namespaces = {
+ svg: 'http://www.w3.org/2000/svg',
+ xhtml: xhtml,
+ xlink: 'http://www.w3.org/1999/xlink',
+ xml: 'http://www.w3.org/XML/1998/namespace',
+ xmlns: 'http://www.w3.org/2000/xmlns/',
+ }; // CONCATENATED MODULE: ../node_modules/d3-selection/src/namespace.js
+
+ /* harmony default export */ function namespace(name) {
+ var prefix = (name += ''),
+ i = prefix.indexOf(':');
+ if (i >= 0 && (prefix = name.slice(0, i)) !== 'xmlns')
+ name = name.slice(i + 1);
+ return namespaces.hasOwnProperty(prefix)
+ ? { space: namespaces[prefix], local: name }
+ : name; // eslint-disable-line no-prototype-builtins
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/attr.js
+
+ function attrRemove(name) {
+ return function () {
+ this.removeAttribute(name);
+ };
+ }
+
+ function attrRemoveNS(fullname) {
+ return function () {
+ this.removeAttributeNS(fullname.space, fullname.local);
+ };
+ }
+
+ function attrConstant(name, value) {
+ return function () {
+ this.setAttribute(name, value);
+ };
+ }
+
+ function attrConstantNS(fullname, value) {
+ return function () {
+ this.setAttributeNS(fullname.space, fullname.local, value);
+ };
+ }
+
+ function attrFunction(name, value) {
+ return function () {
+ var v = value.apply(this, arguments);
+ if (v == null) this.removeAttribute(name);
+ else this.setAttribute(name, v);
+ };
+ }
+
+ function attrFunctionNS(fullname, value) {
+ return function () {
+ var v = value.apply(this, arguments);
+ if (v == null) this.removeAttributeNS(fullname.space, fullname.local);
+ else this.setAttributeNS(fullname.space, fullname.local, v);
+ };
+ }
+
+ /* harmony default export */ function attr(name, value) {
+ var fullname = namespace(name);
+
+ if (arguments.length < 2) {
+ var node = this.node();
+ return fullname.local
+ ? node.getAttributeNS(fullname.space, fullname.local)
+ : node.getAttribute(fullname);
+ }
+
+ return this.each(
+ (value == null
+ ? fullname.local
+ ? attrRemoveNS
+ : attrRemove
+ : typeof value === 'function'
+ ? fullname.local
+ ? attrFunctionNS
+ : attrFunction
+ : fullname.local
+ ? attrConstantNS
+ : attrConstant)(fullname, value),
+ );
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/window.js
+
+ /* harmony default export */ function src_window(node) {
+ return (
+ (node.ownerDocument && node.ownerDocument.defaultView) || // node is a Node
+ (node.document && node) || // node is a Window
+ node.defaultView
+ ); // node is a Document
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/style.js
+
+ function styleRemove(name) {
+ return function () {
+ this.style.removeProperty(name);
+ };
+ }
+
+ function styleConstant(name, value, priority) {
+ return function () {
+ this.style.setProperty(name, value, priority);
+ };
+ }
+
+ function styleFunction(name, value, priority) {
+ return function () {
+ var v = value.apply(this, arguments);
+ if (v == null) this.style.removeProperty(name);
+ else this.style.setProperty(name, v, priority);
+ };
+ }
+
+ /* harmony default export */ function style(name, value, priority) {
+ return arguments.length > 1
+ ? this.each(
+ (value == null
+ ? styleRemove
+ : typeof value === 'function'
+ ? styleFunction
+ : styleConstant)(name, value, priority == null ? '' : priority),
+ )
+ : styleValue(this.node(), name);
+ }
+
+ function styleValue(node, name) {
+ return (
+ node.style.getPropertyValue(name) ||
+ src_window(node).getComputedStyle(node, null).getPropertyValue(name)
+ );
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/property.js
+
+ function propertyRemove(name) {
+ return function () {
+ delete this[name];
+ };
+ }
+
+ function propertyConstant(name, value) {
+ return function () {
+ this[name] = value;
+ };
+ }
+
+ function propertyFunction(name, value) {
+ return function () {
+ var v = value.apply(this, arguments);
+ if (v == null) delete this[name];
+ else this[name] = v;
+ };
+ }
+
+ /* harmony default export */ function property(name, value) {
+ return arguments.length > 1
+ ? this.each(
+ (value == null
+ ? propertyRemove
+ : typeof value === 'function'
+ ? propertyFunction
+ : propertyConstant)(name, value),
+ )
+ : this.node()[name];
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/classed.js
+
+ function classArray(string) {
+ return string.trim().split(/^|\s+/);
+ }
+
+ function classList(node) {
+ return node.classList || new ClassList(node);
+ }
+
+ function ClassList(node) {
+ this._node = node;
+ this._names = classArray(node.getAttribute('class') || '');
+ }
+
+ ClassList.prototype = {
+ add: function (name) {
+ var i = this._names.indexOf(name);
+ if (i < 0) {
+ this._names.push(name);
+ this._node.setAttribute('class', this._names.join(' '));
+ }
+ },
+ remove: function (name) {
+ var i = this._names.indexOf(name);
+ if (i >= 0) {
+ this._names.splice(i, 1);
+ this._node.setAttribute('class', this._names.join(' '));
+ }
+ },
+ contains: function (name) {
+ return this._names.indexOf(name) >= 0;
+ },
+ };
+
+ function classedAdd(node, names) {
+ var list = classList(node),
+ i = -1,
+ n = names.length;
+ while (++i < n) list.add(names[i]);
+ }
+
+ function classedRemove(node, names) {
+ var list = classList(node),
+ i = -1,
+ n = names.length;
+ while (++i < n) list.remove(names[i]);
+ }
+
+ function classedTrue(names) {
+ return function () {
+ classedAdd(this, names);
+ };
+ }
+
+ function classedFalse(names) {
+ return function () {
+ classedRemove(this, names);
+ };
+ }
+
+ function classedFunction(names, value) {
+ return function () {
+ (value.apply(this, arguments) ? classedAdd : classedRemove)(
+ this,
+ names,
+ );
+ };
+ }
+
+ /* harmony default export */ function classed(name, value) {
+ var names = classArray(name + '');
+
+ if (arguments.length < 2) {
+ var list = classList(this.node()),
+ i = -1,
+ n = names.length;
+ while (++i < n) if (!list.contains(names[i])) return false;
+ return true;
+ }
+
+ return this.each(
+ (typeof value === 'function'
+ ? classedFunction
+ : value
+ ? classedTrue
+ : classedFalse)(names, value),
+ );
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/text.js
+
+ function textRemove() {
+ this.textContent = '';
+ }
+
+ function textConstant(value) {
+ return function () {
+ this.textContent = value;
+ };
+ }
+
+ function textFunction(value) {
+ return function () {
+ var v = value.apply(this, arguments);
+ this.textContent = v == null ? '' : v;
+ };
+ }
+
+ /* harmony default export */ function selection_text(value) {
+ return arguments.length
+ ? this.each(
+ value == null
+ ? textRemove
+ : (typeof value === 'function' ? textFunction : textConstant)(
+ value,
+ ),
+ )
+ : this.node().textContent;
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/html.js
+
+ function htmlRemove() {
+ this.innerHTML = '';
+ }
+
+ function htmlConstant(value) {
+ return function () {
+ this.innerHTML = value;
+ };
+ }
+
+ function htmlFunction(value) {
+ return function () {
+ var v = value.apply(this, arguments);
+ this.innerHTML = v == null ? '' : v;
+ };
+ }
+
+ /* harmony default export */ function html(value) {
+ return arguments.length
+ ? this.each(
+ value == null
+ ? htmlRemove
+ : (typeof value === 'function' ? htmlFunction : htmlConstant)(
+ value,
+ ),
+ )
+ : this.node().innerHTML;
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/raise.js
+
+ function raise() {
+ if (this.nextSibling) this.parentNode.appendChild(this);
+ }
+
+ /* harmony default export */ function selection_raise() {
+ return this.each(raise);
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/lower.js
+
+ function lower() {
+ if (this.previousSibling)
+ this.parentNode.insertBefore(this, this.parentNode.firstChild);
+ }
+
+ /* harmony default export */ function selection_lower() {
+ return this.each(lower);
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/creator.js
+
+ function creatorInherit(name) {
+ return function () {
+ var document = this.ownerDocument,
+ uri = this.namespaceURI;
+ return uri === xhtml && document.documentElement.namespaceURI === xhtml
+ ? document.createElement(name)
+ : document.createElementNS(uri, name);
+ };
+ }
+
+ function creatorFixed(fullname) {
+ return function () {
+ return this.ownerDocument.createElementNS(
+ fullname.space,
+ fullname.local,
+ );
+ };
+ }
+
+ /* harmony default export */ function creator(name) {
+ var fullname = namespace(name);
+ return (fullname.local ? creatorFixed : creatorInherit)(fullname);
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/append.js
+
+ /* harmony default export */ function append(name) {
+ var create = typeof name === 'function' ? name : creator(name);
+ return this.select(function () {
+ return this.appendChild(create.apply(this, arguments));
+ });
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/insert.js
+
+ function constantNull() {
+ return null;
+ }
+
+ /* harmony default export */ function insert(name, before) {
+ var create = typeof name === 'function' ? name : creator(name),
+ select =
+ before == null
+ ? constantNull
+ : typeof before === 'function'
+ ? before
+ : selector(before);
+ return this.select(function () {
+ return this.insertBefore(
+ create.apply(this, arguments),
+ select.apply(this, arguments) || null,
+ );
+ });
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/remove.js
+
+ function remove() {
+ var parent = this.parentNode;
+ if (parent) parent.removeChild(this);
+ }
+
+ /* harmony default export */ function selection_remove() {
+ return this.each(remove);
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/clone.js
+
+ function selection_cloneShallow() {
+ var clone = this.cloneNode(false),
+ parent = this.parentNode;
+ return parent ? parent.insertBefore(clone, this.nextSibling) : clone;
+ }
+
+ function selection_cloneDeep() {
+ var clone = this.cloneNode(true),
+ parent = this.parentNode;
+ return parent ? parent.insertBefore(clone, this.nextSibling) : clone;
+ }
+
+ /* harmony default export */ function clone(deep) {
+ return this.select(deep ? selection_cloneDeep : selection_cloneShallow);
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/datum.js
+
+ /* harmony default export */ function selection_datum(value) {
+ return arguments.length
+ ? this.property('__data__', value)
+ : this.node().__data__;
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/on.js
+
+ function contextListener(listener) {
+ return function (event) {
+ listener.call(this, event, this.__data__);
+ };
+ }
+
+ function parseTypenames(typenames) {
+ return typenames
+ .trim()
+ .split(/^|\s+/)
+ .map(function (t) {
+ var name = '',
+ i = t.indexOf('.');
+ if (i >= 0) (name = t.slice(i + 1)), (t = t.slice(0, i));
+ return { type: t, name: name };
+ });
+ }
+
+ function onRemove(typename) {
+ return function () {
+ var on = this.__on;
+ if (!on) return;
+ for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {
+ if (
+ ((o = on[j]),
+ (!typename.type || o.type === typename.type) &&
+ o.name === typename.name)
+ ) {
+ this.removeEventListener(o.type, o.listener, o.options);
+ } else {
+ on[++i] = o;
+ }
+ }
+ if (++i) on.length = i;
+ else delete this.__on;
+ };
+ }
+
+ function onAdd(typename, value, options) {
+ return function () {
+ var on = this.__on,
+ o,
+ listener = contextListener(value);
+ if (on)
+ for (var j = 0, m = on.length; j < m; ++j) {
+ if (
+ (o = on[j]).type === typename.type &&
+ o.name === typename.name
+ ) {
+ this.removeEventListener(o.type, o.listener, o.options);
+ this.addEventListener(
+ o.type,
+ (o.listener = listener),
+ (o.options = options),
+ );
+ o.value = value;
+ return;
+ }
+ }
+ this.addEventListener(typename.type, listener, options);
+ o = {
+ type: typename.type,
+ name: typename.name,
+ value: value,
+ listener: listener,
+ options: options,
+ };
+ if (!on) this.__on = [o];
+ else on.push(o);
+ };
+ }
+
+ /* harmony default export */ function on(typename, value, options) {
+ var typenames = parseTypenames(typename + ''),
+ i,
+ n = typenames.length,
+ t;
+
+ if (arguments.length < 2) {
+ var on = this.node().__on;
+ if (on)
+ for (var j = 0, m = on.length, o; j < m; ++j) {
+ for (i = 0, o = on[j]; i < n; ++i) {
+ if ((t = typenames[i]).type === o.type && t.name === o.name) {
+ return o.value;
+ }
+ }
+ }
+ return;
+ }
+
+ on = value ? onAdd : onRemove;
+ for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));
+ return this;
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/dispatch.js
+
+ function dispatchEvent(node, type, params) {
+ var window = src_window(node),
+ event = window.CustomEvent;
+
+ if (typeof event === 'function') {
+ event = new event(type, params);
+ } else {
+ event = window.document.createEvent('Event');
+ if (params)
+ event.initEvent(type, params.bubbles, params.cancelable),
+ (event.detail = params.detail);
+ else event.initEvent(type, false, false);
+ }
+
+ node.dispatchEvent(event);
+ }
+
+ function dispatchConstant(type, params) {
+ return function () {
+ return dispatchEvent(this, type, params);
+ };
+ }
+
+ function dispatchFunction(type, params) {
+ return function () {
+ return dispatchEvent(this, type, params.apply(this, arguments));
+ };
+ }
+
+ /* harmony default export */ function dispatch(type, params) {
+ return this.each(
+ (typeof params === 'function' ? dispatchFunction : dispatchConstant)(
+ type,
+ params,
+ ),
+ );
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/iterator.js
+
+ /* harmony default export */ function* iterator() {
+ for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
+ for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {
+ if ((node = group[i])) yield node;
+ }
+ }
+ } // CONCATENATED MODULE: ../node_modules/d3-selection/src/selection/index.js
+
+ var root = [null];
+
+ function Selection(groups, parents) {
+ this._groups = groups;
+ this._parents = parents;
+ }
+
+ function selection() {
+ return new Selection([[document.documentElement]], root);
+ }
+
+ function selection_selection() {
+ return this;
+ }
+
+ Selection.prototype = selection.prototype = {
+ constructor: Selection,
+ select: selection_select,
+ selectAll: selectAll,
+ selectChild: selectChild,
+ selectChildren: selectChildren,
+ filter: selection_filter,
+ data: data,
+ enter: enter,
+ exit: exit,
+ join: join,
+ merge: merge,
+ selection: selection_selection,
+ order: order,
+ sort: sort,
+ call: call,
+ nodes: nodes,
+ node: node,
+ size: size,
+ empty: selection_empty,
+ each: each,
+ attr: attr,
+ style: style,
+ property: property,
+ classed: classed,
+ text: selection_text,
+ html: html,
+ raise: selection_raise,
+ lower: selection_lower,
+ append: append,
+ insert: insert,
+ remove: selection_remove,
+ clone: clone,
+ datum: selection_datum,
+ on: on,
+ dispatch: dispatch,
+ [Symbol.iterator]: iterator,
+ };
+
+ /* harmony default export */ const src_selection = selection; // CONCATENATED MODULE: ../node_modules/d3-selection/src/select.js
+
+ /* harmony default export */ function src_select(selector) {
+ return typeof selector === 'string'
+ ? new Selection(
+ [[document.querySelector(selector)]],
+ [document.documentElement],
+ )
+ : new Selection([[selector]], root);
+ } // CONCATENATED MODULE: ../node_modules/d3-format/src/formatDecimal.js
+
+ /* harmony default export */ function formatDecimal(x) {
+ return Math.abs((x = Math.round(x))) >= 1e21
+ ? x.toLocaleString('en').replace(/,/g, '')
+ : x.toString(10);
+ }
+
+ // Computes the decimal coefficient and exponent of the specified number x with
+ // significant digits p, where x is positive and p is in [1, 21] or undefined.
+ // For example, formatDecimalParts(1.23) returns ["123", 0].
+ function formatDecimalParts(x, p) {
+ if (
+ (i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(
+ 'e',
+ )) < 0
+ )
+ return null; // NaN, ±Infinity
+ var i,
+ coefficient = x.slice(0, i);
+
+ // The string returned by toExponential either has the form \d\.\d+e[-+]\d+
+ // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
+ return [
+ coefficient.length > 1
+ ? coefficient[0] + coefficient.slice(2)
+ : coefficient,
+ +x.slice(i + 1),
+ ];
+ } // CONCATENATED MODULE: ../node_modules/d3-format/src/exponent.js
+
+ /* harmony default export */ function exponent(x) {
+ return (x = formatDecimalParts(Math.abs(x))), x ? x[1] : NaN;
+ } // CONCATENATED MODULE: ../node_modules/d3-format/src/formatGroup.js
+
+ /* harmony default export */ function formatGroup(grouping, thousands) {
+ return function (value, width) {
+ var i = value.length,
+ t = [],
+ j = 0,
+ g = grouping[0],
+ length = 0;
+
+ while (i > 0 && g > 0) {
+ if (length + g + 1 > width) g = Math.max(1, width - length);
+ t.push(value.substring((i -= g), i + g));
+ if ((length += g + 1) > width) break;
+ g = grouping[(j = (j + 1) % grouping.length)];
+ }
+
+ return t.reverse().join(thousands);
+ };
+ } // CONCATENATED MODULE: ../node_modules/d3-format/src/formatNumerals.js
+
+ /* harmony default export */ function formatNumerals(numerals) {
+ return function (value) {
+ return value.replace(/[0-9]/g, function (i) {
+ return numerals[+i];
+ });
+ };
+ } // CONCATENATED MODULE: ../node_modules/d3-format/src/formatSpecifier.js
+
+ // [[fill]align][sign][symbol][0][width][,][.precision][~][type]
+ var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;
+
+ function formatSpecifier(specifier) {
+ if (!(match = re.exec(specifier)))
+ throw new Error('invalid format: ' + specifier);
+ var match;
+ return new FormatSpecifier({
+ fill: match[1],
+ align: match[2],
+ sign: match[3],
+ symbol: match[4],
+ zero: match[5],
+ width: match[6],
+ comma: match[7],
+ precision: match[8] && match[8].slice(1),
+ trim: match[9],
+ type: match[10],
+ });
+ }
+
+ formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof
+
+ function FormatSpecifier(specifier) {
+ this.fill = specifier.fill === undefined ? ' ' : specifier.fill + '';
+ this.align = specifier.align === undefined ? '>' : specifier.align + '';
+ this.sign = specifier.sign === undefined ? '-' : specifier.sign + '';
+ this.symbol = specifier.symbol === undefined ? '' : specifier.symbol + '';
+ this.zero = !!specifier.zero;
+ this.width = specifier.width === undefined ? undefined : +specifier.width;
+ this.comma = !!specifier.comma;
+ this.precision =
+ specifier.precision === undefined ? undefined : +specifier.precision;
+ this.trim = !!specifier.trim;
+ this.type = specifier.type === undefined ? '' : specifier.type + '';
+ }
+
+ FormatSpecifier.prototype.toString = function () {
+ return (
+ this.fill +
+ this.align +
+ this.sign +
+ this.symbol +
+ (this.zero ? '0' : '') +
+ (this.width === undefined ? '' : Math.max(1, this.width | 0)) +
+ (this.comma ? ',' : '') +
+ (this.precision === undefined
+ ? ''
+ : '.' + Math.max(0, this.precision | 0)) +
+ (this.trim ? '~' : '') +
+ this.type
+ );
+ }; // CONCATENATED MODULE: ../node_modules/d3-format/src/formatTrim.js
+
+ // Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.
+ /* harmony default export */ function formatTrim(s) {
+ out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {
+ switch (s[i]) {
+ case '.':
+ i0 = i1 = i;
+ break;
+ case '0':
+ if (i0 === 0) i0 = i;
+ i1 = i;
+ break;
+ default:
+ if (!+s[i]) break out;
+ if (i0 > 0) i0 = 0;
+ break;
+ }
+ }
+ return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;
+ } // CONCATENATED MODULE: ../node_modules/d3-format/src/formatPrefixAuto.js
+
+ var prefixExponent;
+
+ /* harmony default export */ function formatPrefixAuto(x, p) {
+ var d = formatDecimalParts(x, p);
+ if (!d) return x + '';
+ var coefficient = d[0],
+ exponent = d[1],
+ i =
+ exponent -
+ (prefixExponent =
+ Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) +
+ 1,
+ n = coefficient.length;
+ return i === n
+ ? coefficient
+ : i > n
+ ? coefficient + new Array(i - n + 1).join('0')
+ : i > 0
+ ? coefficient.slice(0, i) + '.' + coefficient.slice(i)
+ : '0.' +
+ new Array(1 - i).join('0') +
+ formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!
+ } // CONCATENATED MODULE: ../node_modules/d3-format/src/formatRounded.js
+
+ /* harmony default export */ function formatRounded(x, p) {
+ var d = formatDecimalParts(x, p);
+ if (!d) return x + '';
+ var coefficient = d[0],
+ exponent = d[1];
+ return exponent < 0
+ ? '0.' + new Array(-exponent).join('0') + coefficient
+ : coefficient.length > exponent + 1
+ ? coefficient.slice(0, exponent + 1) +
+ '.' +
+ coefficient.slice(exponent + 1)
+ : coefficient + new Array(exponent - coefficient.length + 2).join('0');
+ } // CONCATENATED MODULE: ../node_modules/d3-format/src/formatTypes.js
+
+ /* harmony default export */ const formatTypes = {
+ '%': (x, p) => (x * 100).toFixed(p),
+ b: (x) => Math.round(x).toString(2),
+ c: (x) => x + '',
+ d: formatDecimal,
+ e: (x, p) => x.toExponential(p),
+ f: (x, p) => x.toFixed(p),
+ g: (x, p) => x.toPrecision(p),
+ o: (x) => Math.round(x).toString(8),
+ p: (x, p) => formatRounded(x * 100, p),
+ r: formatRounded,
+ s: formatPrefixAuto,
+ X: (x) => Math.round(x).toString(16).toUpperCase(),
+ x: (x) => Math.round(x).toString(16),
+ }; // CONCATENATED MODULE: ../node_modules/d3-format/src/identity.js
+
+ /* harmony default export */ function identity(x) {
+ return x;
+ } // CONCATENATED MODULE: ../node_modules/d3-format/src/locale.js
+
+ var map = Array.prototype.map,
+ prefixes = [
+ 'y',
+ 'z',
+ 'a',
+ 'f',
+ 'p',
+ 'n',
+ 'µ',
+ 'm',
+ '',
+ 'k',
+ 'M',
+ 'G',
+ 'T',
+ 'P',
+ 'E',
+ 'Z',
+ 'Y',
+ ];
+
+ /* harmony default export */ function locale(locale) {
+ var group =
+ locale.grouping === undefined || locale.thousands === undefined
+ ? identity
+ : formatGroup(
+ map.call(locale.grouping, Number),
+ locale.thousands + '',
+ ),
+ currencyPrefix =
+ locale.currency === undefined ? '' : locale.currency[0] + '',
+ currencySuffix =
+ locale.currency === undefined ? '' : locale.currency[1] + '',
+ decimal = locale.decimal === undefined ? '.' : locale.decimal + '',
+ numerals =
+ locale.numerals === undefined
+ ? identity
+ : formatNumerals(map.call(locale.numerals, String)),
+ percent = locale.percent === undefined ? '%' : locale.percent + '',
+ minus = locale.minus === undefined ? '−' : locale.minus + '',
+ nan = locale.nan === undefined ? 'NaN' : locale.nan + '';
+
+ function newFormat(specifier) {
+ specifier = formatSpecifier(specifier);
+
+ var fill = specifier.fill,
+ align = specifier.align,
+ sign = specifier.sign,
+ symbol = specifier.symbol,
+ zero = specifier.zero,
+ width = specifier.width,
+ comma = specifier.comma,
+ precision = specifier.precision,
+ trim = specifier.trim,
+ type = specifier.type;
+
+ // The "n" type is an alias for ",g".
+ if (type === 'n') (comma = true), (type = 'g');
+ // The "" type, and any invalid type, is an alias for ".12~g".
+ else if (!formatTypes[type])
+ precision === undefined && (precision = 12),
+ (trim = true),
+ (type = 'g');
+
+ // If zero fill is specified, padding goes after sign and before digits.
+ if (zero || (fill === '0' && align === '='))
+ (zero = true), (fill = '0'), (align = '=');
+
+ // Compute the prefix and suffix.
+ // For SI-prefix, the suffix is lazily computed.
+ var prefix =
+ symbol === '$'
+ ? currencyPrefix
+ : symbol === '#' && /[boxX]/.test(type)
+ ? '0' + type.toLowerCase()
+ : '',
+ suffix =
+ symbol === '$' ? currencySuffix : /[%p]/.test(type) ? percent : '';
+
+ // What format function should we use?
+ // Is this an integer type?
+ // Can this type generate exponential notation?
+ var formatType = formatTypes[type],
+ maybeSuffix = /[defgprs%]/.test(type);
+
+ // Set the default precision if not specified,
+ // or clamp the specified precision to the supported range.
+ // For significant precision, it must be in [1, 21].
+ // For fixed precision, it must be in [0, 20].
+ precision =
+ precision === undefined
+ ? 6
+ : /[gprs]/.test(type)
+ ? Math.max(1, Math.min(21, precision))
+ : Math.max(0, Math.min(20, precision));
+
+ function format(value) {
+ var valuePrefix = prefix,
+ valueSuffix = suffix,
+ i,
+ n,
+ c;
+
+ if (type === 'c') {
+ valueSuffix = formatType(value) + valueSuffix;
+ value = '';
+ } else {
+ value = +value;
+
+ // Determine the sign. -0 is not less than 0, but 1 / -0 is!
+ var valueNegative = value < 0 || 1 / value < 0;
+
+ // Perform the initial formatting.
+ value = isNaN(value) ? nan : formatType(Math.abs(value), precision);
+
+ // Trim insignificant zeros.
+ if (trim) value = formatTrim(value);
+
+ // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.
+ if (valueNegative && +value === 0 && sign !== '+')
+ valueNegative = false;
+
+ // Compute the prefix and suffix.
+ valuePrefix =
+ (valueNegative
+ ? sign === '('
+ ? sign
+ : minus
+ : sign === '-' || sign === '('
+ ? ''
+ : sign) + valuePrefix;
+ valueSuffix =
+ (type === 's' ? prefixes[8 + prefixExponent / 3] : '') +
+ valueSuffix +
+ (valueNegative && sign === '(' ? ')' : '');
+
+ // Break the formatted value into the integer “value” part that can be
+ // grouped, and fractional or exponential “suffix” part that is not.
+ if (maybeSuffix) {
+ (i = -1), (n = value.length);
+ while (++i < n) {
+ if (((c = value.charCodeAt(i)), 48 > c || c > 57)) {
+ valueSuffix =
+ (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) +
+ valueSuffix;
+ value = value.slice(0, i);
+ break;
+ }
+ }
+ }
+ }
+
+ // If the fill character is not "0", grouping is applied before padding.
+ if (comma && !zero) value = group(value, Infinity);
+
+ // Compute the padding.
+ var length = valuePrefix.length + value.length + valueSuffix.length,
+ padding =
+ length < width ? new Array(width - length + 1).join(fill) : '';
+
+ // If the fill character is "0", grouping is applied after padding.
+ if (comma && zero)
+ (value = group(
+ padding + value,
+ padding.length ? width - valueSuffix.length : Infinity,
+ )),
+ (padding = '');
+
+ // Reconstruct the final output based on the desired alignment.
+ switch (align) {
+ case '<':
+ value = valuePrefix + value + valueSuffix + padding;
+ break;
+ case '=':
+ value = valuePrefix + padding + value + valueSuffix;
+ break;
+ case '^':
+ value =
+ padding.slice(0, (length = padding.length >> 1)) +
+ valuePrefix +
+ value +
+ valueSuffix +
+ padding.slice(length);
+ break;
+ default:
+ value = padding + valuePrefix + value + valueSuffix;
+ break;
+ }
+
+ return numerals(value);
+ }
+
+ format.toString = function () {
+ return specifier + '';
+ };
+
+ return format;
+ }
+
+ function formatPrefix(specifier, value) {
+ var f = newFormat(
+ ((specifier = formatSpecifier(specifier)),
+ (specifier.type = 'f'),
+ specifier),
+ ),
+ e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,
+ k = Math.pow(10, -e),
+ prefix = prefixes[8 + e / 3];
+ return function (value) {
+ return f(k * value) + prefix;
+ };
+ }
+
+ return {
+ format: newFormat,
+ formatPrefix: formatPrefix,
+ };
+ } // CONCATENATED MODULE: ../node_modules/d3-format/src/defaultLocale.js
+
+ var defaultLocale_locale;
+ var format;
+ var formatPrefix;
+
+ defaultLocale({
+ thousands: ',',
+ grouping: [3],
+ currency: ['$', ''],
+ });
+
+ function defaultLocale(definition) {
+ defaultLocale_locale = locale(definition);
+ format = defaultLocale_locale.format;
+ formatPrefix = defaultLocale_locale.formatPrefix;
+ return defaultLocale_locale;
+ } // CONCATENATED MODULE: ../node_modules/d3-array/src/ascending.js
+
+ function ascending_ascending(a, b) {
+ return a == null || b == null
+ ? NaN
+ : a < b
+ ? -1
+ : a > b
+ ? 1
+ : a >= b
+ ? 0
+ : NaN;
+ } // CONCATENATED MODULE: ../node_modules/d3-hierarchy/src/treemap/round.js
+
+ /* harmony default export */ function treemap_round(node) {
+ node.x0 = Math.round(node.x0);
+ node.y0 = Math.round(node.y0);
+ node.x1 = Math.round(node.x1);
+ node.y1 = Math.round(node.y1);
+ } // CONCATENATED MODULE: ../node_modules/d3-hierarchy/src/treemap/dice.js
+
+ /* harmony default export */ function dice(parent, x0, y0, x1, y1) {
+ var nodes = parent.children,
+ node,
+ i = -1,
+ n = nodes.length,
+ k = parent.value && (x1 - x0) / parent.value;
+
+ while (++i < n) {
+ (node = nodes[i]), (node.y0 = y0), (node.y1 = y1);
+ (node.x0 = x0), (node.x1 = x0 += node.value * k);
+ }
+ } // CONCATENATED MODULE: ../node_modules/d3-hierarchy/src/partition.js
+
+ /* harmony default export */ function partition() {
+ var dx = 1,
+ dy = 1,
+ padding = 0,
+ round = false;
+
+ function partition(root) {
+ var n = root.height + 1;
+ root.x0 = root.y0 = padding;
+ root.x1 = dx;
+ root.y1 = dy / n;
+ root.eachBefore(positionNode(dy, n));
+ if (round) root.eachBefore(treemap_round);
+ return root;
+ }
+
+ function positionNode(dy, n) {
+ return function (node) {
+ if (node.children) {
+ dice(
+ node,
+ node.x0,
+ (dy * (node.depth + 1)) / n,
+ node.x1,
+ (dy * (node.depth + 2)) / n,
+ );
+ }
+ var x0 = node.x0,
+ y0 = node.y0,
+ x1 = node.x1 - padding,
+ y1 = node.y1 - padding;
+ if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
+ if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
+ node.x0 = x0;
+ node.y0 = y0;
+ node.x1 = x1;
+ node.y1 = y1;
+ };
+ }
+
+ partition.round = function (x) {
+ return arguments.length ? ((round = !!x), partition) : round;
+ };
+
+ partition.size = function (x) {
+ return arguments.length
+ ? ((dx = +x[0]), (dy = +x[1]), partition)
+ : [dx, dy];
+ };
+
+ partition.padding = function (x) {
+ return arguments.length ? ((padding = +x), partition) : padding;
+ };
+
+ return partition;
+ } // CONCATENATED MODULE: ../node_modules/d3-hierarchy/src/hierarchy/count.js
+
+ function count(node) {
+ var sum = 0,
+ children = node.children,
+ i = children && children.length;
+ if (!i) sum = 1;
+ else while (--i >= 0) sum += children[i].value;
+ node.value = sum;
+ }
+
+ /* harmony default export */ function hierarchy_count() {
+ return this.eachAfter(count);
+ } // CONCATENATED MODULE: ../node_modules/d3-hierarchy/src/hierarchy/each.js
+
+ /* harmony default export */ function hierarchy_each(callback, that) {
+ let index = -1;
+ for (const node of this) {
+ callback.call(that, node, ++index, this);
+ }
+ return this;
+ } // CONCATENATED MODULE: ../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js
+
+ /* harmony default export */ function eachBefore(callback, that) {
+ var node = this,
+ nodes = [node],
+ children,
+ i,
+ index = -1;
+ while ((node = nodes.pop())) {
+ callback.call(that, node, ++index, this);
+ if ((children = node.children)) {
+ for (i = children.length - 1; i >= 0; --i) {
+ nodes.push(children[i]);
+ }
+ }
+ }
+ return this;
+ } // CONCATENATED MODULE: ../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js
+
+ /* harmony default export */ function eachAfter(callback, that) {
+ var node = this,
+ nodes = [node],
+ next = [],
+ children,
+ i,
+ n,
+ index = -1;
+ while ((node = nodes.pop())) {
+ next.push(node);
+ if ((children = node.children)) {
+ for (i = 0, n = children.length; i < n; ++i) {
+ nodes.push(children[i]);
+ }
+ }
+ }
+ while ((node = next.pop())) {
+ callback.call(that, node, ++index, this);
+ }
+ return this;
+ } // CONCATENATED MODULE: ../node_modules/d3-hierarchy/src/hierarchy/find.js
+
+ /* harmony default export */ function hierarchy_find(callback, that) {
+ let index = -1;
+ for (const node of this) {
+ if (callback.call(that, node, ++index, this)) {
+ return node;
+ }
+ }
+ } // CONCATENATED MODULE: ../node_modules/d3-hierarchy/src/hierarchy/sum.js
+
+ /* harmony default export */ function sum(value) {
+ return this.eachAfter(function (node) {
+ var sum = +value(node.data) || 0,
+ children = node.children,
+ i = children && children.length;
+ while (--i >= 0) sum += children[i].value;
+ node.value = sum;
+ });
+ } // CONCATENATED MODULE: ../node_modules/d3-hierarchy/src/hierarchy/sort.js
+
+ /* harmony default export */ function hierarchy_sort(compare) {
+ return this.eachBefore(function (node) {
+ if (node.children) {
+ node.children.sort(compare);
+ }
+ });
+ } // CONCATENATED MODULE: ../node_modules/d3-hierarchy/src/hierarchy/path.js
+
+ /* harmony default export */ function path(end) {
+ var start = this,
+ ancestor = leastCommonAncestor(start, end),
+ nodes = [start];
+ while (start !== ancestor) {
+ start = start.parent;
+ nodes.push(start);
+ }
+ var k = nodes.length;
+ while (end !== ancestor) {
+ nodes.splice(k, 0, end);
+ end = end.parent;
+ }
+ return nodes;
+ }
+
+ function leastCommonAncestor(a, b) {
+ if (a === b) return a;
+ var aNodes = a.ancestors(),
+ bNodes = b.ancestors(),
+ c = null;
+ a = aNodes.pop();
+ b = bNodes.pop();
+ while (a === b) {
+ c = a;
+ a = aNodes.pop();
+ b = bNodes.pop();
+ }
+ return c;
+ } // CONCATENATED MODULE: ../node_modules/d3-hierarchy/src/hierarchy/ancestors.js
+
+ /* harmony default export */ function ancestors() {
+ var node = this,
+ nodes = [node];
+ while ((node = node.parent)) {
+ nodes.push(node);
+ }
+ return nodes;
+ } // CONCATENATED MODULE: ../node_modules/d3-hierarchy/src/hierarchy/descendants.js
+
+ /* harmony default export */ function descendants() {
+ return Array.from(this);
+ } // CONCATENATED MODULE: ../node_modules/d3-hierarchy/src/hierarchy/leaves.js
+
+ /* harmony default export */ function leaves() {
+ var leaves = [];
+ this.eachBefore(function (node) {
+ if (!node.children) {
+ leaves.push(node);
+ }
+ });
+ return leaves;
+ } // CONCATENATED MODULE: ../node_modules/d3-hierarchy/src/hierarchy/links.js
+
+ /* harmony default export */ function links() {
+ var root = this,
+ links = [];
+ root.each(function (node) {
+ if (node !== root) {
+ // Don’t include the root’s parent, if any.
+ links.push({ source: node.parent, target: node });
+ }
+ });
+ return links;
+ } // CONCATENATED MODULE: ../node_modules/d3-hierarchy/src/hierarchy/iterator.js
+
+ /* harmony default export */ function* hierarchy_iterator() {
+ var node = this,
+ current,
+ next = [node],
+ children,
+ i,
+ n;
+ do {
+ (current = next.reverse()), (next = []);
+ while ((node = current.pop())) {
+ yield node;
+ if ((children = node.children)) {
+ for (i = 0, n = children.length; i < n; ++i) {
+ next.push(children[i]);
+ }
+ }
+ }
+ } while (next.length);
+ } // CONCATENATED MODULE: ../node_modules/d3-hierarchy/src/hierarchy/index.js
+
+ function hierarchy(data, children) {
+ if (data instanceof Map) {
+ data = [undefined, data];
+ if (children === undefined) children = mapChildren;
+ } else if (children === undefined) {
+ children = objectChildren;
+ }
+
+ var root = new Node(data),
+ node,
+ nodes = [root],
+ child,
+ childs,
+ i,
+ n;
+
+ while ((node = nodes.pop())) {
+ if (
+ (childs = children(node.data)) &&
+ (n = (childs = Array.from(childs)).length)
+ ) {
+ node.children = childs;
+ for (i = n - 1; i >= 0; --i) {
+ nodes.push((child = childs[i] = new Node(childs[i])));
+ child.parent = node;
+ child.depth = node.depth + 1;
+ }
+ }
+ }
+
+ return root.eachBefore(computeHeight);
+ }
+
+ function node_copy() {
+ return hierarchy(this).eachBefore(copyData);
+ }
+
+ function objectChildren(d) {
+ return d.children;
+ }
+
+ function mapChildren(d) {
+ return Array.isArray(d) ? d[1] : null;
+ }
+
+ function copyData(node) {
+ if (node.data.value !== undefined) node.value = node.data.value;
+ node.data = node.data.data;
+ }
+
+ function computeHeight(node) {
+ var height = 0;
+ do node.height = height;
+ while ((node = node.parent) && node.height < ++height);
+ }
+
+ function Node(data) {
+ this.data = data;
+ this.depth = this.height = 0;
+ this.parent = null;
+ }
+
+ Node.prototype = hierarchy.prototype = {
+ constructor: Node,
+ count: hierarchy_count,
+ each: hierarchy_each,
+ eachAfter: eachAfter,
+ eachBefore: eachBefore,
+ find: hierarchy_find,
+ sum: sum,
+ sort: hierarchy_sort,
+ path: path,
+ ancestors: ancestors,
+ descendants: descendants,
+ leaves: leaves,
+ links: links,
+ copy: node_copy,
+ [Symbol.iterator]: hierarchy_iterator,
+ }; // CONCATENATED MODULE: ../node_modules/d3-array/src/ticks.js
+
+ var e10 = Math.sqrt(50),
+ e5 = Math.sqrt(10),
+ e2 = Math.sqrt(2);
+
+ function ticks(start, stop, count) {
+ var reverse,
+ i = -1,
+ n,
+ ticks,
+ step;
+
+ (stop = +stop), (start = +start), (count = +count);
+ if (start === stop && count > 0) return [start];
+ if ((reverse = stop < start)) (n = start), (start = stop), (stop = n);
+ if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step))
+ return [];
+
+ if (step > 0) {
+ let r0 = Math.round(start / step),
+ r1 = Math.round(stop / step);
+ if (r0 * step < start) ++r0;
+ if (r1 * step > stop) --r1;
+ ticks = new Array((n = r1 - r0 + 1));
+ while (++i < n) ticks[i] = (r0 + i) * step;
+ } else {
+ step = -step;
+ let r0 = Math.round(start * step),
+ r1 = Math.round(stop * step);
+ if (r0 / step < start) ++r0;
+ if (r1 / step > stop) --r1;
+ ticks = new Array((n = r1 - r0 + 1));
+ while (++i < n) ticks[i] = (r0 + i) / step;
+ }
+
+ if (reverse) ticks.reverse();
+
+ return ticks;
+ }
+
+ function tickIncrement(start, stop, count) {
+ var step = (stop - start) / Math.max(0, count),
+ power = Math.floor(Math.log(step) / Math.LN10),
+ error = step / Math.pow(10, power);
+ return power >= 0
+ ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) *
+ Math.pow(10, power)
+ : -Math.pow(10, -power) /
+ (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);
+ }
+
+ function tickStep(start, stop, count) {
+ var step0 = Math.abs(stop - start) / Math.max(0, count),
+ step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
+ error = step0 / step1;
+ if (error >= e10) step1 *= 10;
+ else if (error >= e5) step1 *= 5;
+ else if (error >= e2) step1 *= 2;
+ return stop < start ? -step1 : step1;
+ } // CONCATENATED MODULE: ../node_modules/d3-array/src/bisector.js
+
+ function bisector(f) {
+ let delta = f;
+ let compare1 = f;
+ let compare2 = f;
+
+ if (f.length !== 2) {
+ delta = (d, x) => f(d) - x;
+ compare1 = ascending_ascending;
+ compare2 = (d, x) => ascending_ascending(f(d), x);
+ }
+
+ function left(a, x, lo = 0, hi = a.length) {
+ if (lo < hi) {
+ if (compare1(x, x) !== 0) return hi;
+ do {
+ const mid = (lo + hi) >>> 1;
+ if (compare2(a[mid], x) < 0) lo = mid + 1;
+ else hi = mid;
+ } while (lo < hi);
+ }
+ return lo;
+ }
+
+ function right(a, x, lo = 0, hi = a.length) {
+ if (lo < hi) {
+ if (compare1(x, x) !== 0) return hi;
+ do {
+ const mid = (lo + hi) >>> 1;
+ if (compare2(a[mid], x) <= 0) lo = mid + 1;
+ else hi = mid;
+ } while (lo < hi);
+ }
+ return lo;
+ }
+
+ function center(a, x, lo = 0, hi = a.length) {
+ const i = left(a, x, lo, hi - 1);
+ return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;
+ }
+
+ return { left, center, right };
+ } // CONCATENATED MODULE: ../node_modules/d3-array/src/number.js
+
+ function number(x) {
+ return x === null ? NaN : +x;
+ }
+
+ function* numbers(values, valueof) {
+ if (valueof === undefined) {
+ for (let value of values) {
+ if (value != null && (value = +value) >= value) {
+ yield value;
+ }
+ }
+ } else {
+ let index = -1;
+ for (let value of values) {
+ if (
+ (value = valueof(value, ++index, values)) != null &&
+ (value = +value) >= value
+ ) {
+ yield value;
+ }
+ }
+ }
+ } // CONCATENATED MODULE: ../node_modules/d3-array/src/bisect.js
+
+ const ascendingBisect = bisector(ascending_ascending);
+ const bisectRight = ascendingBisect.right;
+ const bisectLeft = ascendingBisect.left;
+ const bisectCenter = bisector(number).center;
+ /* harmony default export */ const bisect = bisectRight; // CONCATENATED MODULE: ../node_modules/d3-color/src/define.js
+
+ /* harmony default export */ function src_define(
+ constructor,
+ factory,
+ prototype,
+ ) {
+ constructor.prototype = factory.prototype = prototype;
+ prototype.constructor = constructor;
+ }
+
+ function extend(parent, definition) {
+ var prototype = Object.create(parent.prototype);
+ for (var key in definition) prototype[key] = definition[key];
+ return prototype;
+ } // CONCATENATED MODULE: ../node_modules/d3-color/src/color.js
+
+ function Color() {}
+
+ var darker = 0.7;
+ var brighter = 1 / darker;
+
+ var reI = '\\s*([+-]?\\d+)\\s*',
+ reN = '\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*',
+ reP = '\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*',
+ reHex = /^#([0-9a-f]{3,8})$/,
+ reRgbInteger = new RegExp('^rgb\\(' + [reI, reI, reI] + '\\)$'),
+ reRgbPercent = new RegExp('^rgb\\(' + [reP, reP, reP] + '\\)$'),
+ reRgbaInteger = new RegExp('^rgba\\(' + [reI, reI, reI, reN] + '\\)$'),
+ reRgbaPercent = new RegExp('^rgba\\(' + [reP, reP, reP, reN] + '\\)$'),
+ reHslPercent = new RegExp('^hsl\\(' + [reN, reP, reP] + '\\)$'),
+ reHslaPercent = new RegExp('^hsla\\(' + [reN, reP, reP, reN] + '\\)$');
+
+ var named = {
+ aliceblue: 0xf0f8ff,
+ antiquewhite: 0xfaebd7,
+ aqua: 0x00ffff,
+ aquamarine: 0x7fffd4,
+ azure: 0xf0ffff,
+ beige: 0xf5f5dc,
+ bisque: 0xffe4c4,
+ black: 0x000000,
+ blanchedalmond: 0xffebcd,
+ blue: 0x0000ff,
+ blueviolet: 0x8a2be2,
+ brown: 0xa52a2a,
+ burlywood: 0xdeb887,
+ cadetblue: 0x5f9ea0,
+ chartreuse: 0x7fff00,
+ chocolate: 0xd2691e,
+ coral: 0xff7f50,
+ cornflowerblue: 0x6495ed,
+ cornsilk: 0xfff8dc,
+ crimson: 0xdc143c,
+ cyan: 0x00ffff,
+ darkblue: 0x00008b,
+ darkcyan: 0x008b8b,
+ darkgoldenrod: 0xb8860b,
+ darkgray: 0xa9a9a9,
+ darkgreen: 0x006400,
+ darkgrey: 0xa9a9a9,
+ darkkhaki: 0xbdb76b,
+ darkmagenta: 0x8b008b,
+ darkolivegreen: 0x556b2f,
+ darkorange: 0xff8c00,
+ darkorchid: 0x9932cc,
+ darkred: 0x8b0000,
+ darksalmon: 0xe9967a,
+ darkseagreen: 0x8fbc8f,
+ darkslateblue: 0x483d8b,
+ darkslategray: 0x2f4f4f,
+ darkslategrey: 0x2f4f4f,
+ darkturquoise: 0x00ced1,
+ darkviolet: 0x9400d3,
+ deeppink: 0xff1493,
+ deepskyblue: 0x00bfff,
+ dimgray: 0x696969,
+ dimgrey: 0x696969,
+ dodgerblue: 0x1e90ff,
+ firebrick: 0xb22222,
+ floralwhite: 0xfffaf0,
+ forestgreen: 0x228b22,
+ fuchsia: 0xff00ff,
+ gainsboro: 0xdcdcdc,
+ ghostwhite: 0xf8f8ff,
+ gold: 0xffd700,
+ goldenrod: 0xdaa520,
+ gray: 0x808080,
+ green: 0x008000,
+ greenyellow: 0xadff2f,
+ grey: 0x808080,
+ honeydew: 0xf0fff0,
+ hotpink: 0xff69b4,
+ indianred: 0xcd5c5c,
+ indigo: 0x4b0082,
+ ivory: 0xfffff0,
+ khaki: 0xf0e68c,
+ lavender: 0xe6e6fa,
+ lavenderblush: 0xfff0f5,
+ lawngreen: 0x7cfc00,
+ lemonchiffon: 0xfffacd,
+ lightblue: 0xadd8e6,
+ lightcoral: 0xf08080,
+ lightcyan: 0xe0ffff,
+ lightgoldenrodyellow: 0xfafad2,
+ lightgray: 0xd3d3d3,
+ lightgreen: 0x90ee90,
+ lightgrey: 0xd3d3d3,
+ lightpink: 0xffb6c1,
+ lightsalmon: 0xffa07a,
+ lightseagreen: 0x20b2aa,
+ lightskyblue: 0x87cefa,
+ lightslategray: 0x778899,
+ lightslategrey: 0x778899,
+ lightsteelblue: 0xb0c4de,
+ lightyellow: 0xffffe0,
+ lime: 0x00ff00,
+ limegreen: 0x32cd32,
+ linen: 0xfaf0e6,
+ magenta: 0xff00ff,
+ maroon: 0x800000,
+ mediumaquamarine: 0x66cdaa,
+ mediumblue: 0x0000cd,
+ mediumorchid: 0xba55d3,
+ mediumpurple: 0x9370db,
+ mediumseagreen: 0x3cb371,
+ mediumslateblue: 0x7b68ee,
+ mediumspringgreen: 0x00fa9a,
+ mediumturquoise: 0x48d1cc,
+ mediumvioletred: 0xc71585,
+ midnightblue: 0x191970,
+ mintcream: 0xf5fffa,
+ mistyrose: 0xffe4e1,
+ moccasin: 0xffe4b5,
+ navajowhite: 0xffdead,
+ navy: 0x000080,
+ oldlace: 0xfdf5e6,
+ olive: 0x808000,
+ olivedrab: 0x6b8e23,
+ orange: 0xffa500,
+ orangered: 0xff4500,
+ orchid: 0xda70d6,
+ palegoldenrod: 0xeee8aa,
+ palegreen: 0x98fb98,
+ paleturquoise: 0xafeeee,
+ palevioletred: 0xdb7093,
+ papayawhip: 0xffefd5,
+ peachpuff: 0xffdab9,
+ peru: 0xcd853f,
+ pink: 0xffc0cb,
+ plum: 0xdda0dd,
+ powderblue: 0xb0e0e6,
+ purple: 0x800080,
+ rebeccapurple: 0x663399,
+ red: 0xff0000,
+ rosybrown: 0xbc8f8f,
+ royalblue: 0x4169e1,
+ saddlebrown: 0x8b4513,
+ salmon: 0xfa8072,
+ sandybrown: 0xf4a460,
+ seagreen: 0x2e8b57,
+ seashell: 0xfff5ee,
+ sienna: 0xa0522d,
+ silver: 0xc0c0c0,
+ skyblue: 0x87ceeb,
+ slateblue: 0x6a5acd,
+ slategray: 0x708090,
+ slategrey: 0x708090,
+ snow: 0xfffafa,
+ springgreen: 0x00ff7f,
+ steelblue: 0x4682b4,
+ tan: 0xd2b48c,
+ teal: 0x008080,
+ thistle: 0xd8bfd8,
+ tomato: 0xff6347,
+ turquoise: 0x40e0d0,
+ violet: 0xee82ee,
+ wheat: 0xf5deb3,
+ white: 0xffffff,
+ whitesmoke: 0xf5f5f5,
+ yellow: 0xffff00,
+ yellowgreen: 0x9acd32,
+ };
+
+ src_define(Color, color, {
+ copy: function (channels) {
+ return Object.assign(new this.constructor(), this, channels);
+ },
+ displayable: function () {
+ return this.rgb().displayable();
+ },
+ hex: color_formatHex, // Deprecated! Use color.formatHex.
+ formatHex: color_formatHex,
+ formatHsl: color_formatHsl,
+ formatRgb: color_formatRgb,
+ toString: color_formatRgb,
+ });
+
+ function color_formatHex() {
+ return this.rgb().formatHex();
+ }
+
+ function color_formatHsl() {
+ return hslConvert(this).formatHsl();
+ }
+
+ function color_formatRgb() {
+ return this.rgb().formatRgb();
+ }
+
+ function color(format) {
+ var m, l;
+ format = (format + '').trim().toLowerCase();
+ return (m = reHex.exec(format))
+ ? ((l = m[1].length),
+ (m = parseInt(m[1], 16)),
+ l === 6
+ ? rgbn(m) // #ff0000
+ : l === 3
+ ? new Rgb(
+ ((m >> 8) & 0xf) | ((m >> 4) & 0xf0),
+ ((m >> 4) & 0xf) | (m & 0xf0),
+ ((m & 0xf) << 4) | (m & 0xf),
+ 1,
+ ) // #f00
+ : l === 8
+ ? rgba(
+ (m >> 24) & 0xff,
+ (m >> 16) & 0xff,
+ (m >> 8) & 0xff,
+ (m & 0xff) / 0xff,
+ ) // #ff000000
+ : 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
+ : null) // invalid hex
+ : (m = reRgbInteger.exec(format))
+ ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
+ : (m = reRgbPercent.exec(format))
+ ? new Rgb((m[1] * 255) / 100, (m[2] * 255) / 100, (m[3] * 255) / 100, 1) // rgb(100%, 0%, 0%)
+ : (m = reRgbaInteger.exec(format))
+ ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
+ : (m = reRgbaPercent.exec(format))
+ ? rgba((m[1] * 255) / 100, (m[2] * 255) / 100, (m[3] * 255) / 100, m[4]) // rgb(100%, 0%, 0%, 1)
+ : (m = reHslPercent.exec(format))
+ ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
+ : (m = reHslaPercent.exec(format))
+ ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
+ : named.hasOwnProperty(format)
+ ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins
+ : format === 'transparent'
+ ? new Rgb(NaN, NaN, NaN, 0)
+ : null;
+ }
+
+ function rgbn(n) {
+ return new Rgb((n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff, 1);
+ }
+
+ function rgba(r, g, b, a) {
+ if (a <= 0) r = g = b = NaN;
+ return new Rgb(r, g, b, a);
+ }
+
+ function rgbConvert(o) {
+ if (!(o instanceof Color)) o = color(o);
+ if (!o) return new Rgb();
+ o = o.rgb();
+ return new Rgb(o.r, o.g, o.b, o.opacity);
+ }
+
+ function color_rgb(r, g, b, opacity) {
+ return arguments.length === 1
+ ? rgbConvert(r)
+ : new Rgb(r, g, b, opacity == null ? 1 : opacity);
+ }
+
+ function Rgb(r, g, b, opacity) {
+ this.r = +r;
+ this.g = +g;
+ this.b = +b;
+ this.opacity = +opacity;
+ }
+
+ src_define(
+ Rgb,
+ color_rgb,
+ extend(Color, {
+ brighter: function (k) {
+ k = k == null ? brighter : Math.pow(brighter, k);
+ return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
+ },
+ darker: function (k) {
+ k = k == null ? darker : Math.pow(darker, k);
+ return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
+ },
+ rgb: function () {
+ return this;
+ },
+ displayable: function () {
+ return (
+ -0.5 <= this.r &&
+ this.r < 255.5 &&
+ -0.5 <= this.g &&
+ this.g < 255.5 &&
+ -0.5 <= this.b &&
+ this.b < 255.5 &&
+ 0 <= this.opacity &&
+ this.opacity <= 1
+ );
+ },
+ hex: rgb_formatHex, // Deprecated! Use color.formatHex.
+ formatHex: rgb_formatHex,
+ formatRgb: rgb_formatRgb,
+ toString: rgb_formatRgb,
+ }),
+ );
+
+ function rgb_formatHex() {
+ return '#' + hex(this.r) + hex(this.g) + hex(this.b);
+ }
+
+ function rgb_formatRgb() {
+ var a = this.opacity;
+ a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
+ return (
+ (a === 1 ? 'rgb(' : 'rgba(') +
+ Math.max(0, Math.min(255, Math.round(this.r) || 0)) +
+ ', ' +
+ Math.max(0, Math.min(255, Math.round(this.g) || 0)) +
+ ', ' +
+ Math.max(0, Math.min(255, Math.round(this.b) || 0)) +
+ (a === 1 ? ')' : ', ' + a + ')')
+ );
+ }
+
+ function hex(value) {
+ value = Math.max(0, Math.min(255, Math.round(value) || 0));
+ return (value < 16 ? '0' : '') + value.toString(16);
+ }
+
+ function hsla(h, s, l, a) {
+ if (a <= 0) h = s = l = NaN;
+ else if (l <= 0 || l >= 1) h = s = NaN;
+ else if (s <= 0) h = NaN;
+ return new Hsl(h, s, l, a);
+ }
+
+ function hslConvert(o) {
+ if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);
+ if (!(o instanceof Color)) o = color(o);
+ if (!o) return new Hsl();
+ if (o instanceof Hsl) return o;
+ o = o.rgb();
+ var r = o.r / 255,
+ g = o.g / 255,
+ b = o.b / 255,
+ min = Math.min(r, g, b),
+ max = Math.max(r, g, b),
+ h = NaN,
+ s = max - min,
+ l = (max + min) / 2;
+ if (s) {
+ if (r === max) h = (g - b) / s + (g < b) * 6;
+ else if (g === max) h = (b - r) / s + 2;
+ else h = (r - g) / s + 4;
+ s /= l < 0.5 ? max + min : 2 - max - min;
+ h *= 60;
+ } else {
+ s = l > 0 && l < 1 ? 0 : h;
+ }
+ return new Hsl(h, s, l, o.opacity);
+ }
+
+ function hsl(h, s, l, opacity) {
+ return arguments.length === 1
+ ? hslConvert(h)
+ : new Hsl(h, s, l, opacity == null ? 1 : opacity);
+ }
+
+ function Hsl(h, s, l, opacity) {
+ this.h = +h;
+ this.s = +s;
+ this.l = +l;
+ this.opacity = +opacity;
+ }
+
+ src_define(
+ Hsl,
+ hsl,
+ extend(Color, {
+ brighter: function (k) {
+ k = k == null ? brighter : Math.pow(brighter, k);
+ return new Hsl(this.h, this.s, this.l * k, this.opacity);
+ },
+ darker: function (k) {
+ k = k == null ? darker : Math.pow(darker, k);
+ return new Hsl(this.h, this.s, this.l * k, this.opacity);
+ },
+ rgb: function () {
+ var h = (this.h % 360) + (this.h < 0) * 360,
+ s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
+ l = this.l,
+ m2 = l + (l < 0.5 ? l : 1 - l) * s,
+ m1 = 2 * l - m2;
+ return new Rgb(
+ hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),
+ hsl2rgb(h, m1, m2),
+ hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),
+ this.opacity,
+ );
+ },
+ displayable: function () {
+ return (
+ ((0 <= this.s && this.s <= 1) || isNaN(this.s)) &&
+ 0 <= this.l &&
+ this.l <= 1 &&
+ 0 <= this.opacity &&
+ this.opacity <= 1
+ );
+ },
+ formatHsl: function () {
+ var a = this.opacity;
+ a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
+ return (
+ (a === 1 ? 'hsl(' : 'hsla(') +
+ (this.h || 0) +
+ ', ' +
+ (this.s || 0) * 100 +
+ '%, ' +
+ (this.l || 0) * 100 +
+ '%' +
+ (a === 1 ? ')' : ', ' + a + ')')
+ );
+ },
+ }),
+ );
+
+ /* From FvD 13.37, CSS Color Module Level 3 */
+ function hsl2rgb(h, m1, m2) {
+ return (
+ (h < 60
+ ? m1 + ((m2 - m1) * h) / 60
+ : h < 180
+ ? m2
+ : h < 240
+ ? m1 + ((m2 - m1) * (240 - h)) / 60
+ : m1) * 255
+ );
+ } // CONCATENATED MODULE: ../node_modules/d3-interpolate/src/basis.js
+
+ function basis(t1, v0, v1, v2, v3) {
+ var t2 = t1 * t1,
+ t3 = t2 * t1;
+ return (
+ ((1 - 3 * t1 + 3 * t2 - t3) * v0 +
+ (4 - 6 * t2 + 3 * t3) * v1 +
+ (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 +
+ t3 * v3) /
+ 6
+ );
+ }
+
+ /* harmony default export */ function src_basis(values) {
+ var n = values.length - 1;
+ return function (t) {
+ var i =
+ t <= 0 ? (t = 0) : t >= 1 ? ((t = 1), n - 1) : Math.floor(t * n),
+ v1 = values[i],
+ v2 = values[i + 1],
+ v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,
+ v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;
+ return basis((t - i / n) * n, v0, v1, v2, v3);
+ };
+ } // CONCATENATED MODULE: ../node_modules/d3-interpolate/src/basisClosed.js
+
+ /* harmony default export */ function basisClosed(values) {
+ var n = values.length;
+ return function (t) {
+ var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),
+ v0 = values[(i + n - 1) % n],
+ v1 = values[i % n],
+ v2 = values[(i + 1) % n],
+ v3 = values[(i + 2) % n];
+ return basis((t - i / n) * n, v0, v1, v2, v3);
+ };
+ } // CONCATENATED MODULE: ../node_modules/d3-interpolate/src/constant.js
+
+ /* harmony default export */ const d3_interpolate_src_constant = (
+ x,
+ ) => () => x; // CONCATENATED MODULE: ../node_modules/d3-interpolate/src/color.js
+
+ function linear(a, d) {
+ return function (t) {
+ return a + t * d;
+ };
+ }
+
+ function exponential(a, b, y) {
+ return (
+ (a = Math.pow(a, y)),
+ (b = Math.pow(b, y) - a),
+ (y = 1 / y),
+ function (t) {
+ return Math.pow(a + t * b, y);
+ }
+ );
+ }
+
+ function hue(a, b) {
+ var d = b - a;
+ return d
+ ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d)
+ : constant(isNaN(a) ? b : a);
+ }
+
+ function gamma(y) {
+ return (y = +y) === 1
+ ? nogamma
+ : function (a, b) {
+ return b - a
+ ? exponential(a, b, y)
+ : d3_interpolate_src_constant(isNaN(a) ? b : a);
+ };
+ }
+
+ function nogamma(a, b) {
+ var d = b - a;
+ return d ? linear(a, d) : d3_interpolate_src_constant(isNaN(a) ? b : a);
+ } // CONCATENATED MODULE: ../node_modules/d3-interpolate/src/rgb.js
+
+ /* harmony default export */ const rgb = (function rgbGamma(y) {
+ var color = gamma(y);
+
+ function rgb(start, end) {
+ var r = color((start = color_rgb(start)).r, (end = color_rgb(end)).r),
+ g = color(start.g, end.g),
+ b = color(start.b, end.b),
+ opacity = nogamma(start.opacity, end.opacity);
+ return function (t) {
+ start.r = r(t);
+ start.g = g(t);
+ start.b = b(t);
+ start.opacity = opacity(t);
+ return start + '';
+ };
+ }
+
+ rgb.gamma = rgbGamma;
+
+ return rgb;
+ })(1);
+
+ function rgbSpline(spline) {
+ return function (colors) {
+ var n = colors.length,
+ r = new Array(n),
+ g = new Array(n),
+ b = new Array(n),
+ i,
+ color;
+ for (i = 0; i < n; ++i) {
+ color = color_rgb(colors[i]);
+ r[i] = color.r || 0;
+ g[i] = color.g || 0;
+ b[i] = color.b || 0;
+ }
+ r = spline(r);
+ g = spline(g);
+ b = spline(b);
+ color.opacity = 1;
+ return function (t) {
+ color.r = r(t);
+ color.g = g(t);
+ color.b = b(t);
+ return color + '';
+ };
+ };
+ }
+
+ var rgbBasis = rgbSpline(src_basis);
+ var rgbBasisClosed = rgbSpline(basisClosed); // CONCATENATED MODULE: ../node_modules/d3-interpolate/src/array.js
+
+ /* harmony default export */ function src_array(a, b) {
+ return (isNumberArray(b) ? numberArray : genericArray)(a, b);
+ }
+
+ function genericArray(a, b) {
+ var nb = b ? b.length : 0,
+ na = a ? Math.min(nb, a.length) : 0,
+ x = new Array(na),
+ c = new Array(nb),
+ i;
+
+ for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);
+ for (; i < nb; ++i) c[i] = b[i];
+
+ return function (t) {
+ for (i = 0; i < na; ++i) c[i] = x[i](t);
+ return c;
+ };
+ } // CONCATENATED MODULE: ../node_modules/d3-interpolate/src/date.js
+
+ /* harmony default export */ function date(a, b) {
+ var d = new Date();
+ return (
+ (a = +a),
+ (b = +b),
+ function (t) {
+ return d.setTime(a * (1 - t) + b * t), d;
+ }
+ );
+ } // CONCATENATED MODULE: ../node_modules/d3-interpolate/src/number.js
+
+ /* harmony default export */ function src_number(a, b) {
+ return (
+ (a = +a),
+ (b = +b),
+ function (t) {
+ return a * (1 - t) + b * t;
+ }
+ );
+ } // CONCATENATED MODULE: ../node_modules/d3-interpolate/src/object.js
+
+ /* harmony default export */ function object(a, b) {
+ var i = {},
+ c = {},
+ k;
+
+ if (a === null || typeof a !== 'object') a = {};
+ if (b === null || typeof b !== 'object') b = {};
+
+ for (k in b) {
+ if (k in a) {
+ i[k] = value(a[k], b[k]);
+ } else {
+ c[k] = b[k];
+ }
+ }
+
+ return function (t) {
+ for (k in i) c[k] = i[k](t);
+ return c;
+ };
+ } // CONCATENATED MODULE: ../node_modules/d3-interpolate/src/string.js
+
+ var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,
+ reB = new RegExp(reA.source, 'g');
+
+ function zero(b) {
+ return function () {
+ return b;
+ };
+ }
+
+ function one(b) {
+ return function (t) {
+ return b(t) + '';
+ };
+ }
+
+ /* harmony default export */ function string(a, b) {
+ var bi = (reA.lastIndex = reB.lastIndex = 0), // scan index for next number in b
+ am, // current match in a
+ bm, // current match in b
+ bs, // string preceding current number in b, if any
+ i = -1, // index in s
+ s = [], // string constants and placeholders
+ q = []; // number interpolators
+
+ // Coerce inputs to strings.
+ (a = a + ''), (b = b + '');
+
+ // Interpolate pairs of numbers in a & b.
+ while ((am = reA.exec(a)) && (bm = reB.exec(b))) {
+ if ((bs = bm.index) > bi) {
+ // a string precedes the next number in b
+ bs = b.slice(bi, bs);
+ if (s[i]) s[i] += bs;
+ // coalesce with previous string
+ else s[++i] = bs;
+ }
+ if ((am = am[0]) === (bm = bm[0])) {
+ // numbers in a & b match
+ if (s[i]) s[i] += bm;
+ // coalesce with previous string
+ else s[++i] = bm;
+ } else {
+ // interpolate non-matching numbers
+ s[++i] = null;
+ q.push({ i: i, x: src_number(am, bm) });
+ }
+ bi = reB.lastIndex;
+ }
+
+ // Add remains of b.
+ if (bi < b.length) {
+ bs = b.slice(bi);
+ if (s[i]) s[i] += bs;
+ // coalesce with previous string
+ else s[++i] = bs;
+ }
+
+ // Special optimization for only a single match.
+ // Otherwise, interpolate each of the numbers and rejoin the string.
+ return s.length < 2
+ ? q[0]
+ ? one(q[0].x)
+ : zero(b)
+ : ((b = q.length),
+ function (t) {
+ for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
+ return s.join('');
+ });
+ } // CONCATENATED MODULE: ../node_modules/d3-interpolate/src/numberArray.js
+
+ /* harmony default export */ function src_numberArray(a, b) {
+ if (!b) b = [];
+ var n = a ? Math.min(b.length, a.length) : 0,
+ c = b.slice(),
+ i;
+ return function (t) {
+ for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;
+ return c;
+ };
+ }
+
+ function numberArray_isNumberArray(x) {
+ return ArrayBuffer.isView(x) && !(x instanceof DataView);
+ } // CONCATENATED MODULE: ../node_modules/d3-interpolate/src/value.js
+
+ /* harmony default export */ function value(a, b) {
+ var t = typeof b,
+ c;
+ return b == null || t === 'boolean'
+ ? d3_interpolate_src_constant(b)
+ : (t === 'number'
+ ? src_number
+ : t === 'string'
+ ? (c = color(b))
+ ? ((b = c), rgb)
+ : string
+ : b instanceof color
+ ? rgb
+ : b instanceof Date
+ ? date
+ : numberArray_isNumberArray(b)
+ ? src_numberArray
+ : Array.isArray(b)
+ ? genericArray
+ : (typeof b.valueOf !== 'function' &&
+ typeof b.toString !== 'function') ||
+ isNaN(b)
+ ? object
+ : src_number)(a, b);
+ } // CONCATENATED MODULE: ../node_modules/d3-interpolate/src/round.js
+
+ /* harmony default export */ function round(a, b) {
+ return (
+ (a = +a),
+ (b = +b),
+ function (t) {
+ return Math.round(a * (1 - t) + b * t);
+ }
+ );
+ } // CONCATENATED MODULE: ../node_modules/d3-scale/src/constant.js
+
+ function constants(x) {
+ return function () {
+ return x;
+ };
+ } // CONCATENATED MODULE: ../node_modules/d3-scale/src/number.js
+
+ function number_number(x) {
+ return +x;
+ } // CONCATENATED MODULE: ../node_modules/d3-scale/src/continuous.js
+
+ var unit = [0, 1];
+
+ function continuous_identity(x) {
+ return x;
+ }
+
+ function normalize(a, b) {
+ return (b -= a = +a)
+ ? function (x) {
+ return (x - a) / b;
+ }
+ : constants(isNaN(b) ? NaN : 0.5);
+ }
+
+ function clamper(a, b) {
+ var t;
+ if (a > b) (t = a), (a = b), (b = t);
+ return function (x) {
+ return Math.max(a, Math.min(b, x));
+ };
+ }
+
+ // normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
+ // interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].
+ function bimap(domain, range, interpolate) {
+ var d0 = domain[0],
+ d1 = domain[1],
+ r0 = range[0],
+ r1 = range[1];
+ if (d1 < d0) (d0 = normalize(d1, d0)), (r0 = interpolate(r1, r0));
+ else (d0 = normalize(d0, d1)), (r0 = interpolate(r0, r1));
+ return function (x) {
+ return r0(d0(x));
+ };
+ }
+
+ function polymap(domain, range, interpolate) {
+ var j = Math.min(domain.length, range.length) - 1,
+ d = new Array(j),
+ r = new Array(j),
+ i = -1;
+
+ // Reverse descending domains.
+ if (domain[j] < domain[0]) {
+ domain = domain.slice().reverse();
+ range = range.slice().reverse();
+ }
+
+ while (++i < j) {
+ d[i] = normalize(domain[i], domain[i + 1]);
+ r[i] = interpolate(range[i], range[i + 1]);
+ }
+
+ return function (x) {
+ var i = bisect(domain, x, 1, j) - 1;
+ return r[i](d[i](x));
+ };
+ }
+
+ function copy(source, target) {
+ return target
+ .domain(source.domain())
+ .range(source.range())
+ .interpolate(source.interpolate())
+ .clamp(source.clamp())
+ .unknown(source.unknown());
+ }
+
+ function transformer() {
+ var domain = unit,
+ range = unit,
+ interpolate = value,
+ transform,
+ untransform,
+ unknown,
+ clamp = continuous_identity,
+ piecewise,
+ output,
+ input;
+
+ function rescale() {
+ var n = Math.min(domain.length, range.length);
+ if (clamp !== continuous_identity)
+ clamp = clamper(domain[0], domain[n - 1]);
+ piecewise = n > 2 ? polymap : bimap;
+ output = input = null;
+ return scale;
+ }
+
+ function scale(x) {
+ return x == null || isNaN((x = +x))
+ ? unknown
+ : (
+ output ||
+ (output = piecewise(domain.map(transform), range, interpolate))
+ )(transform(clamp(x)));
+ }
+
+ scale.invert = function (y) {
+ return clamp(
+ untransform(
+ (
+ input ||
+ (input = piecewise(range, domain.map(transform), src_number))
+ )(y),
+ ),
+ );
+ };
+
+ scale.domain = function (_) {
+ return arguments.length
+ ? ((domain = Array.from(_, number_number)), rescale())
+ : domain.slice();
+ };
+
+ scale.range = function (_) {
+ return arguments.length
+ ? ((range = Array.from(_)), rescale())
+ : range.slice();
+ };
+
+ scale.rangeRound = function (_) {
+ return (range = Array.from(_)), (interpolate = round), rescale();
+ };
+
+ scale.clamp = function (_) {
+ return arguments.length
+ ? ((clamp = _ ? true : continuous_identity), rescale())
+ : clamp !== continuous_identity;
+ };
+
+ scale.interpolate = function (_) {
+ return arguments.length ? ((interpolate = _), rescale()) : interpolate;
+ };
+
+ scale.unknown = function (_) {
+ return arguments.length ? ((unknown = _), scale) : unknown;
+ };
+
+ return function (t, u) {
+ (transform = t), (untransform = u);
+ return rescale();
+ };
+ }
+
+ function continuous() {
+ return transformer()(continuous_identity, continuous_identity);
+ } // CONCATENATED MODULE: ../node_modules/d3-scale/src/init.js
+
+ function initRange(domain, range) {
+ switch (arguments.length) {
+ case 0:
+ break;
+ case 1:
+ this.range(domain);
+ break;
+ default:
+ this.range(range).domain(domain);
+ break;
+ }
+ return this;
+ }
+
+ function initInterpolator(domain, interpolator) {
+ switch (arguments.length) {
+ case 0:
+ break;
+ case 1: {
+ if (typeof domain === 'function') this.interpolator(domain);
+ else this.range(domain);
+ break;
+ }
+ default: {
+ this.domain(domain);
+ if (typeof interpolator === 'function')
+ this.interpolator(interpolator);
+ else this.range(interpolator);
+ break;
+ }
+ }
+ return this;
+ } // CONCATENATED MODULE: ../node_modules/d3-format/src/precisionPrefix.js
+
+ /* harmony default export */ function precisionPrefix(step, value) {
+ return Math.max(
+ 0,
+ Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 -
+ exponent(Math.abs(step)),
+ );
+ } // CONCATENATED MODULE: ../node_modules/d3-format/src/precisionRound.js
+
+ /* harmony default export */ function precisionRound(step, max) {
+ (step = Math.abs(step)), (max = Math.abs(max) - step);
+ return Math.max(0, exponent(max) - exponent(step)) + 1;
+ } // CONCATENATED MODULE: ../node_modules/d3-format/src/precisionFixed.js
+
+ /* harmony default export */ function precisionFixed(step) {
+ return Math.max(0, -exponent(Math.abs(step)));
+ } // CONCATENATED MODULE: ../node_modules/d3-scale/src/tickFormat.js
+
+ function tickFormat(start, stop, count, specifier) {
+ var step = tickStep(start, stop, count),
+ precision;
+ specifier = formatSpecifier(specifier == null ? ',f' : specifier);
+ switch (specifier.type) {
+ case 's': {
+ var value = Math.max(Math.abs(start), Math.abs(stop));
+ if (
+ specifier.precision == null &&
+ !isNaN((precision = precisionPrefix(step, value)))
+ )
+ specifier.precision = precision;
+ return formatPrefix(specifier, value);
+ }
+ case '':
+ case 'e':
+ case 'g':
+ case 'p':
+ case 'r': {
+ if (
+ specifier.precision == null &&
+ !isNaN(
+ (precision = precisionRound(
+ step,
+ Math.max(Math.abs(start), Math.abs(stop)),
+ )),
+ )
+ )
+ specifier.precision = precision - (specifier.type === 'e');
+ break;
+ }
+ case 'f':
+ case '%': {
+ if (
+ specifier.precision == null &&
+ !isNaN((precision = precisionFixed(step)))
+ )
+ specifier.precision = precision - (specifier.type === '%') * 2;
+ break;
+ }
+ }
+ return format(specifier);
+ } // CONCATENATED MODULE: ../node_modules/d3-scale/src/linear.js
+
+ function linearish(scale) {
+ var domain = scale.domain;
+
+ scale.ticks = function (count) {
+ var d = domain();
+ return ticks(d[0], d[d.length - 1], count == null ? 10 : count);
+ };
+
+ scale.tickFormat = function (count, specifier) {
+ var d = domain();
+ return tickFormat(
+ d[0],
+ d[d.length - 1],
+ count == null ? 10 : count,
+ specifier,
+ );
+ };
+
+ scale.nice = function (count) {
+ if (count == null) count = 10;
+
+ var d = domain();
+ var i0 = 0;
+ var i1 = d.length - 1;
+ var start = d[i0];
+ var stop = d[i1];
+ var prestep;
+ var step;
+ var maxIter = 10;
+
+ if (stop < start) {
+ (step = start), (start = stop), (stop = step);
+ (step = i0), (i0 = i1), (i1 = step);
+ }
+
+ while (maxIter-- > 0) {
+ step = tickIncrement(start, stop, count);
+ if (step === prestep) {
+ d[i0] = start;
+ d[i1] = stop;
+ return domain(d);
+ } else if (step > 0) {
+ start = Math.floor(start / step) * step;
+ stop = Math.ceil(stop / step) * step;
+ } else if (step < 0) {
+ start = Math.ceil(start * step) / step;
+ stop = Math.floor(stop * step) / step;
+ } else {
+ break;
+ }
+ prestep = step;
+ }
+
+ return scale;
+ };
+
+ return scale;
+ }
+
+ function linear_linear() {
+ var scale = continuous();
+
+ scale.copy = function () {
+ return copy(scale, linear_linear());
+ };
+
+ initRange.apply(scale, arguments);
+
+ return linearish(scale);
+ } // CONCATENATED MODULE: ../node_modules/d3-ease/src/cubic.js
+
+ function cubicIn(t) {
+ return t * t * t;
+ }
+
+ function cubicOut(t) {
+ return --t * t * t + 1;
+ }
+
+ function cubicInOut(t) {
+ return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;
+ } // CONCATENATED MODULE: ../node_modules/d3-dispatch/src/dispatch.js
+
+ var noop = { value: () => {} };
+
+ function dispatch_dispatch() {
+ for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
+ if (!(t = arguments[i] + '') || t in _ || /[\s.]/.test(t))
+ throw new Error('illegal type: ' + t);
+ _[t] = [];
+ }
+ return new Dispatch(_);
+ }
+
+ function Dispatch(_) {
+ this._ = _;
+ }
+
+ function dispatch_parseTypenames(typenames, types) {
+ return typenames
+ .trim()
+ .split(/^|\s+/)
+ .map(function (t) {
+ var name = '',
+ i = t.indexOf('.');
+ if (i >= 0) (name = t.slice(i + 1)), (t = t.slice(0, i));
+ if (t && !types.hasOwnProperty(t))
+ throw new Error('unknown type: ' + t);
+ return { type: t, name: name };
+ });
+ }
+
+ Dispatch.prototype = dispatch_dispatch.prototype = {
+ constructor: Dispatch,
+ on: function (typename, callback) {
+ var _ = this._,
+ T = dispatch_parseTypenames(typename + '', _),
+ t,
+ i = -1,
+ n = T.length;
+
+ // If no callback was specified, return the callback of the given type and name.
+ if (arguments.length < 2) {
+ while (++i < n)
+ if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name)))
+ return t;
+ return;
+ }
+
+ // If a type was specified, set the callback for the given type and name.
+ // Otherwise, if a null callback was specified, remove callbacks of the given name.
+ if (callback != null && typeof callback !== 'function')
+ throw new Error('invalid callback: ' + callback);
+ while (++i < n) {
+ if ((t = (typename = T[i]).type))
+ _[t] = set(_[t], typename.name, callback);
+ else if (callback == null)
+ for (t in _) _[t] = set(_[t], typename.name, null);
+ }
+
+ return this;
+ },
+ copy: function () {
+ var copy = {},
+ _ = this._;
+ for (var t in _) copy[t] = _[t].slice();
+ return new Dispatch(copy);
+ },
+ call: function (type, that) {
+ if ((n = arguments.length - 2) > 0)
+ for (var args = new Array(n), i = 0, n, t; i < n; ++i)
+ args[i] = arguments[i + 2];
+ if (!this._.hasOwnProperty(type))
+ throw new Error('unknown type: ' + type);
+ for (t = this._[type], i = 0, n = t.length; i < n; ++i)
+ t[i].value.apply(that, args);
+ },
+ apply: function (type, that, args) {
+ if (!this._.hasOwnProperty(type))
+ throw new Error('unknown type: ' + type);
+ for (var t = this._[type], i = 0, n = t.length; i < n; ++i)
+ t[i].value.apply(that, args);
+ },
+ };
+
+ function get(type, name) {
+ for (var i = 0, n = type.length, c; i < n; ++i) {
+ if ((c = type[i]).name === name) {
+ return c.value;
+ }
+ }
+ }
+
+ function set(type, name, callback) {
+ for (var i = 0, n = type.length; i < n; ++i) {
+ if (type[i].name === name) {
+ (type[i] = noop), (type = type.slice(0, i).concat(type.slice(i + 1)));
+ break;
+ }
+ }
+ if (callback != null) type.push({ name: name, value: callback });
+ return type;
+ }
+
+ /* harmony default export */ const src_dispatch = dispatch_dispatch; // CONCATENATED MODULE: ../node_modules/d3-timer/src/timer.js
+
+ var timer_frame = 0, // is an animation frame pending?
+ timeout = 0, // is a timeout pending?
+ interval = 0, // are any timers active?
+ pokeDelay = 1000, // how frequently we check for clock skew
+ taskHead,
+ taskTail,
+ clockLast = 0,
+ clockNow = 0,
+ clockSkew = 0,
+ clock =
+ typeof performance === 'object' && performance.now ? performance : Date,
+ setFrame =
+ typeof window === 'object' && window.requestAnimationFrame
+ ? window.requestAnimationFrame.bind(window)
+ : function (f) {
+ setTimeout(f, 17);
+ };
+
+ function now() {
+ return (
+ clockNow || (setFrame(clearNow), (clockNow = clock.now() + clockSkew))
+ );
+ }
+
+ function clearNow() {
+ clockNow = 0;
+ }
+
+ function Timer() {
+ this._call = this._time = this._next = null;
+ }
+
+ Timer.prototype = timer.prototype = {
+ constructor: Timer,
+ restart: function (callback, delay, time) {
+ if (typeof callback !== 'function')
+ throw new TypeError('callback is not a function');
+ time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
+ if (!this._next && taskTail !== this) {
+ if (taskTail) taskTail._next = this;
+ else taskHead = this;
+ taskTail = this;
+ }
+ this._call = callback;
+ this._time = time;
+ sleep();
+ },
+ stop: function () {
+ if (this._call) {
+ this._call = null;
+ this._time = Infinity;
+ sleep();
+ }
+ },
+ };
+
+ function timer(callback, delay, time) {
+ var t = new Timer();
+ t.restart(callback, delay, time);
+ return t;
+ }
+
+ function timerFlush() {
+ now(); // Get the current time, if not already set.
+ ++timer_frame; // Pretend we’ve set an alarm, if we haven’t already.
+ var t = taskHead,
+ e;
+ while (t) {
+ if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);
+ t = t._next;
+ }
+ --timer_frame;
+ }
+
+ function wake() {
+ clockNow = (clockLast = clock.now()) + clockSkew;
+ timer_frame = timeout = 0;
+ try {
+ timerFlush();
+ } finally {
+ timer_frame = 0;
+ nap();
+ clockNow = 0;
+ }
+ }
+
+ function poke() {
+ var now = clock.now(),
+ delay = now - clockLast;
+ if (delay > pokeDelay) (clockSkew -= delay), (clockLast = now);
+ }
+
+ function nap() {
+ var t0,
+ t1 = taskHead,
+ t2,
+ time = Infinity;
+ while (t1) {
+ if (t1._call) {
+ if (time > t1._time) time = t1._time;
+ (t0 = t1), (t1 = t1._next);
+ } else {
+ (t2 = t1._next), (t1._next = null);
+ t1 = t0 ? (t0._next = t2) : (taskHead = t2);
+ }
+ }
+ taskTail = t0;
+ sleep(time);
+ }
+
+ function sleep(time) {
+ if (timer_frame) return; // Soonest alarm already set, or will be.
+ if (timeout) timeout = clearTimeout(timeout);
+ var delay = time - clockNow; // Strictly less than if we recomputed clockNow.
+ if (delay > 24) {
+ if (time < Infinity)
+ timeout = setTimeout(wake, time - clock.now() - clockSkew);
+ if (interval) interval = clearInterval(interval);
+ } else {
+ if (!interval)
+ (clockLast = clock.now()), (interval = setInterval(poke, pokeDelay));
+ (timer_frame = 1), setFrame(wake);
+ }
+ } // CONCATENATED MODULE: ../node_modules/d3-timer/src/timeout.js
+
+ /* harmony default export */ function src_timeout(callback, delay, time) {
+ var t = new Timer();
+ delay = delay == null ? 0 : +delay;
+ t.restart(
+ (elapsed) => {
+ t.stop();
+ callback(elapsed + delay);
+ },
+ delay,
+ time,
+ );
+ return t;
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/schedule.js
+
+ var emptyOn = src_dispatch('start', 'end', 'cancel', 'interrupt');
+ var emptyTween = [];
+
+ var CREATED = 0;
+ var SCHEDULED = 1;
+ var STARTING = 2;
+ var STARTED = 3;
+ var RUNNING = 4;
+ var ENDING = 5;
+ var ENDED = 6;
+
+ /* harmony default export */ function schedule(
+ node,
+ name,
+ id,
+ index,
+ group,
+ timing,
+ ) {
+ var schedules = node.__transition;
+ if (!schedules) node.__transition = {};
+ else if (id in schedules) return;
+ create(node, id, {
+ name: name,
+ index: index, // For context during callback.
+ group: group, // For context during callback.
+ on: emptyOn,
+ tween: emptyTween,
+ time: timing.time,
+ delay: timing.delay,
+ duration: timing.duration,
+ ease: timing.ease,
+ timer: null,
+ state: CREATED,
+ });
+ }
+
+ function init(node, id) {
+ var schedule = schedule_get(node, id);
+ if (schedule.state > CREATED)
+ throw new Error('too late; already scheduled');
+ return schedule;
+ }
+
+ function schedule_set(node, id) {
+ var schedule = schedule_get(node, id);
+ if (schedule.state > STARTED)
+ throw new Error('too late; already running');
+ return schedule;
+ }
+
+ function schedule_get(node, id) {
+ var schedule = node.__transition;
+ if (!schedule || !(schedule = schedule[id]))
+ throw new Error('transition not found');
+ return schedule;
+ }
+
+ function create(node, id, self) {
+ var schedules = node.__transition,
+ tween;
+
+ // Initialize the self timer when the transition is created.
+ // Note the actual delay is not known until the first callback!
+ schedules[id] = self;
+ self.timer = timer(schedule, 0, self.time);
+
+ function schedule(elapsed) {
+ self.state = SCHEDULED;
+ self.timer.restart(start, self.delay, self.time);
+
+ // If the elapsed delay is less than our first sleep, start immediately.
+ if (self.delay <= elapsed) start(elapsed - self.delay);
+ }
+
+ function start(elapsed) {
+ var i, j, n, o;
+
+ // If the state is not SCHEDULED, then we previously errored on start.
+ if (self.state !== SCHEDULED) return stop();
+
+ for (i in schedules) {
+ o = schedules[i];
+ if (o.name !== self.name) continue;
+
+ // While this element already has a starting transition during this frame,
+ // defer starting an interrupting transition until that transition has a
+ // chance to tick (and possibly end); see d3/d3-transition#54!
+ if (o.state === STARTED) return src_timeout(start);
+
+ // Interrupt the active transition, if any.
+ if (o.state === RUNNING) {
+ o.state = ENDED;
+ o.timer.stop();
+ o.on.call('interrupt', node, node.__data__, o.index, o.group);
+ delete schedules[i];
+ }
+
+ // Cancel any pre-empted transitions.
+ else if (+i < id) {
+ o.state = ENDED;
+ o.timer.stop();
+ o.on.call('cancel', node, node.__data__, o.index, o.group);
+ delete schedules[i];
+ }
+ }
+
+ // Defer the first tick to end of the current frame; see d3/d3#1576.
+ // Note the transition may be canceled after start and before the first tick!
+ // Note this must be scheduled before the start event; see d3/d3-transition#16!
+ // Assuming this is successful, subsequent callbacks go straight to tick.
+ src_timeout(function () {
+ if (self.state === STARTED) {
+ self.state = RUNNING;
+ self.timer.restart(tick, self.delay, self.time);
+ tick(elapsed);
+ }
+ });
+
+ // Dispatch the start event.
+ // Note this must be done before the tween are initialized.
+ self.state = STARTING;
+ self.on.call('start', node, node.__data__, self.index, self.group);
+ if (self.state !== STARTING) return; // interrupted
+ self.state = STARTED;
+
+ // Initialize the tween, deleting null tween.
+ tween = new Array((n = self.tween.length));
+ for (i = 0, j = -1; i < n; ++i) {
+ if (
+ (o = self.tween[i].value.call(
+ node,
+ node.__data__,
+ self.index,
+ self.group,
+ ))
+ ) {
+ tween[++j] = o;
+ }
+ }
+ tween.length = j + 1;
+ }
+
+ function tick(elapsed) {
+ var t =
+ elapsed < self.duration
+ ? self.ease.call(null, elapsed / self.duration)
+ : (self.timer.restart(stop), (self.state = ENDING), 1),
+ i = -1,
+ n = tween.length;
+
+ while (++i < n) {
+ tween[i].call(node, t);
+ }
+
+ // Dispatch the end event.
+ if (self.state === ENDING) {
+ self.on.call('end', node, node.__data__, self.index, self.group);
+ stop();
+ }
+ }
+
+ function stop() {
+ self.state = ENDED;
+ self.timer.stop();
+ delete schedules[id];
+ for (var i in schedules) return; // eslint-disable-line no-unused-vars
+ delete node.__transition;
+ }
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/interrupt.js
+
+ /* harmony default export */ function interrupt(node, name) {
+ var schedules = node.__transition,
+ schedule,
+ active,
+ empty = true,
+ i;
+
+ if (!schedules) return;
+
+ name = name == null ? null : name + '';
+
+ for (i in schedules) {
+ if ((schedule = schedules[i]).name !== name) {
+ empty = false;
+ continue;
+ }
+ active = schedule.state > STARTING && schedule.state < ENDING;
+ schedule.state = ENDED;
+ schedule.timer.stop();
+ schedule.on.call(
+ active ? 'interrupt' : 'cancel',
+ node,
+ node.__data__,
+ schedule.index,
+ schedule.group,
+ );
+ delete schedules[i];
+ }
+
+ if (empty) delete node.__transition;
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/selection/interrupt.js
+
+ /* harmony default export */ function selection_interrupt(name) {
+ return this.each(function () {
+ interrupt(this, name);
+ });
+ } // CONCATENATED MODULE: ../node_modules/d3-interpolate/src/transform/decompose.js
+
+ var degrees = 180 / Math.PI;
+
+ var decompose_identity = {
+ translateX: 0,
+ translateY: 0,
+ rotate: 0,
+ skewX: 0,
+ scaleX: 1,
+ scaleY: 1,
+ };
+
+ /* harmony default export */ function decompose(a, b, c, d, e, f) {
+ var scaleX, scaleY, skewX;
+ if ((scaleX = Math.sqrt(a * a + b * b))) (a /= scaleX), (b /= scaleX);
+ if ((skewX = a * c + b * d)) (c -= a * skewX), (d -= b * skewX);
+ if ((scaleY = Math.sqrt(c * c + d * d)))
+ (c /= scaleY), (d /= scaleY), (skewX /= scaleY);
+ if (a * d < b * c)
+ (a = -a), (b = -b), (skewX = -skewX), (scaleX = -scaleX);
+ return {
+ translateX: e,
+ translateY: f,
+ rotate: Math.atan2(b, a) * degrees,
+ skewX: Math.atan(skewX) * degrees,
+ scaleX: scaleX,
+ scaleY: scaleY,
+ };
+ } // CONCATENATED MODULE: ../node_modules/d3-interpolate/src/transform/parse.js
+
+ var svgNode;
+
+ /* eslint-disable no-undef */
+ function parseCss(value) {
+ const m = new (typeof DOMMatrix === 'function'
+ ? DOMMatrix
+ : WebKitCSSMatrix)(value + '');
+ return m.isIdentity
+ ? decompose_identity
+ : decompose(m.a, m.b, m.c, m.d, m.e, m.f);
+ }
+
+ function parseSvg(value) {
+ if (value == null) return decompose_identity;
+ if (!svgNode)
+ svgNode = document.createElementNS('http://www.w3.org/2000/svg', 'g');
+ svgNode.setAttribute('transform', value);
+ if (!(value = svgNode.transform.baseVal.consolidate()))
+ return decompose_identity;
+ value = value.matrix;
+ return decompose(value.a, value.b, value.c, value.d, value.e, value.f);
+ } // CONCATENATED MODULE: ../node_modules/d3-interpolate/src/transform/index.js
+
+ function interpolateTransform(parse, pxComma, pxParen, degParen) {
+ function pop(s) {
+ return s.length ? s.pop() + ' ' : '';
+ }
+
+ function translate(xa, ya, xb, yb, s, q) {
+ if (xa !== xb || ya !== yb) {
+ var i = s.push('translate(', null, pxComma, null, pxParen);
+ q.push(
+ { i: i - 4, x: src_number(xa, xb) },
+ { i: i - 2, x: src_number(ya, yb) },
+ );
+ } else if (xb || yb) {
+ s.push('translate(' + xb + pxComma + yb + pxParen);
+ }
+ }
+
+ function rotate(a, b, s, q) {
+ if (a !== b) {
+ if (a - b > 180) b += 360;
+ else if (b - a > 180) a += 360; // shortest path
+ q.push({
+ i: s.push(pop(s) + 'rotate(', null, degParen) - 2,
+ x: src_number(a, b),
+ });
+ } else if (b) {
+ s.push(pop(s) + 'rotate(' + b + degParen);
+ }
+ }
+
+ function skewX(a, b, s, q) {
+ if (a !== b) {
+ q.push({
+ i: s.push(pop(s) + 'skewX(', null, degParen) - 2,
+ x: src_number(a, b),
+ });
+ } else if (b) {
+ s.push(pop(s) + 'skewX(' + b + degParen);
+ }
+ }
+
+ function scale(xa, ya, xb, yb, s, q) {
+ if (xa !== xb || ya !== yb) {
+ var i = s.push(pop(s) + 'scale(', null, ',', null, ')');
+ q.push(
+ { i: i - 4, x: src_number(xa, xb) },
+ { i: i - 2, x: src_number(ya, yb) },
+ );
+ } else if (xb !== 1 || yb !== 1) {
+ s.push(pop(s) + 'scale(' + xb + ',' + yb + ')');
+ }
+ }
+
+ return function (a, b) {
+ var s = [], // string constants and placeholders
+ q = []; // number interpolators
+ (a = parse(a)), (b = parse(b));
+ translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);
+ rotate(a.rotate, b.rotate, s, q);
+ skewX(a.skewX, b.skewX, s, q);
+ scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);
+ a = b = null; // gc
+ return function (t) {
+ var i = -1,
+ n = q.length,
+ o;
+ while (++i < n) s[(o = q[i]).i] = o.x(t);
+ return s.join('');
+ };
+ };
+ }
+
+ var interpolateTransformCss = interpolateTransform(
+ parseCss,
+ 'px, ',
+ 'px)',
+ 'deg)',
+ );
+ var interpolateTransformSvg = interpolateTransform(
+ parseSvg,
+ ', ',
+ ')',
+ ')',
+ ); // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/tween.js
+
+ function tweenRemove(id, name) {
+ var tween0, tween1;
+ return function () {
+ var schedule = schedule_set(this, id),
+ tween = schedule.tween;
+
+ // If this node shared tween with the previous node,
+ // just assign the updated shared tween and we’re done!
+ // Otherwise, copy-on-write.
+ if (tween !== tween0) {
+ tween1 = tween0 = tween;
+ for (var i = 0, n = tween1.length; i < n; ++i) {
+ if (tween1[i].name === name) {
+ tween1 = tween1.slice();
+ tween1.splice(i, 1);
+ break;
+ }
+ }
+ }
+
+ schedule.tween = tween1;
+ };
+ }
+
+ function tweenFunction(id, name, value) {
+ var tween0, tween1;
+ if (typeof value !== 'function') throw new Error();
+ return function () {
+ var schedule = schedule_set(this, id),
+ tween = schedule.tween;
+
+ // If this node shared tween with the previous node,
+ // just assign the updated shared tween and we’re done!
+ // Otherwise, copy-on-write.
+ if (tween !== tween0) {
+ tween1 = (tween0 = tween).slice();
+ for (
+ var t = { name: name, value: value }, i = 0, n = tween1.length;
+ i < n;
+ ++i
+ ) {
+ if (tween1[i].name === name) {
+ tween1[i] = t;
+ break;
+ }
+ }
+ if (i === n) tween1.push(t);
+ }
+
+ schedule.tween = tween1;
+ };
+ }
+
+ /* harmony default export */ function tween(name, value) {
+ var id = this._id;
+
+ name += '';
+
+ if (arguments.length < 2) {
+ var tween = schedule_get(this.node(), id).tween;
+ for (var i = 0, n = tween.length, t; i < n; ++i) {
+ if ((t = tween[i]).name === name) {
+ return t.value;
+ }
+ }
+ return null;
+ }
+
+ return this.each(
+ (value == null ? tweenRemove : tweenFunction)(id, name, value),
+ );
+ }
+
+ function tweenValue(transition, name, value) {
+ var id = transition._id;
+
+ transition.each(function () {
+ var schedule = schedule_set(this, id);
+ (schedule.value || (schedule.value = {}))[name] = value.apply(
+ this,
+ arguments,
+ );
+ });
+
+ return function (node) {
+ return schedule_get(node, id).value[name];
+ };
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/interpolate.js
+
+ /* harmony default export */ function interpolate(a, b) {
+ var c;
+ return (typeof b === 'number'
+ ? src_number
+ : b instanceof color
+ ? rgb
+ : (c = color(b))
+ ? ((b = c), rgb)
+ : string)(a, b);
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/attr.js
+
+ function attr_attrRemove(name) {
+ return function () {
+ this.removeAttribute(name);
+ };
+ }
+
+ function attr_attrRemoveNS(fullname) {
+ return function () {
+ this.removeAttributeNS(fullname.space, fullname.local);
+ };
+ }
+
+ function attr_attrConstant(name, interpolate, value1) {
+ var string00,
+ string1 = value1 + '',
+ interpolate0;
+ return function () {
+ var string0 = this.getAttribute(name);
+ return string0 === string1
+ ? null
+ : string0 === string00
+ ? interpolate0
+ : (interpolate0 = interpolate((string00 = string0), value1));
+ };
+ }
+
+ function attr_attrConstantNS(fullname, interpolate, value1) {
+ var string00,
+ string1 = value1 + '',
+ interpolate0;
+ return function () {
+ var string0 = this.getAttributeNS(fullname.space, fullname.local);
+ return string0 === string1
+ ? null
+ : string0 === string00
+ ? interpolate0
+ : (interpolate0 = interpolate((string00 = string0), value1));
+ };
+ }
+
+ function attr_attrFunction(name, interpolate, value) {
+ var string00, string10, interpolate0;
+ return function () {
+ var string0,
+ value1 = value(this),
+ string1;
+ if (value1 == null) return void this.removeAttribute(name);
+ string0 = this.getAttribute(name);
+ string1 = value1 + '';
+ return string0 === string1
+ ? null
+ : string0 === string00 && string1 === string10
+ ? interpolate0
+ : ((string10 = string1),
+ (interpolate0 = interpolate((string00 = string0), value1)));
+ };
+ }
+
+ function attr_attrFunctionNS(fullname, interpolate, value) {
+ var string00, string10, interpolate0;
+ return function () {
+ var string0,
+ value1 = value(this),
+ string1;
+ if (value1 == null)
+ return void this.removeAttributeNS(fullname.space, fullname.local);
+ string0 = this.getAttributeNS(fullname.space, fullname.local);
+ string1 = value1 + '';
+ return string0 === string1
+ ? null
+ : string0 === string00 && string1 === string10
+ ? interpolate0
+ : ((string10 = string1),
+ (interpolate0 = interpolate((string00 = string0), value1)));
+ };
+ }
+
+ /* harmony default export */ function transition_attr(name, value) {
+ var fullname = namespace(name),
+ i = fullname === 'transform' ? interpolateTransformSvg : interpolate;
+ return this.attrTween(
+ name,
+ typeof value === 'function'
+ ? (fullname.local ? attr_attrFunctionNS : attr_attrFunction)(
+ fullname,
+ i,
+ tweenValue(this, 'attr.' + name, value),
+ )
+ : value == null
+ ? (fullname.local ? attr_attrRemoveNS : attr_attrRemove)(fullname)
+ : (fullname.local ? attr_attrConstantNS : attr_attrConstant)(
+ fullname,
+ i,
+ value,
+ ),
+ );
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/attrTween.js
+
+ function attrInterpolate(name, i) {
+ return function (t) {
+ this.setAttribute(name, i.call(this, t));
+ };
+ }
+
+ function attrInterpolateNS(fullname, i) {
+ return function (t) {
+ this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));
+ };
+ }
+
+ function attrTweenNS(fullname, value) {
+ var t0, i0;
+ function tween() {
+ var i = value.apply(this, arguments);
+ if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);
+ return t0;
+ }
+ tween._value = value;
+ return tween;
+ }
+
+ function attrTween(name, value) {
+ var t0, i0;
+ function tween() {
+ var i = value.apply(this, arguments);
+ if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);
+ return t0;
+ }
+ tween._value = value;
+ return tween;
+ }
+
+ /* harmony default export */ function transition_attrTween(name, value) {
+ var key = 'attr.' + name;
+ if (arguments.length < 2) return (key = this.tween(key)) && key._value;
+ if (value == null) return this.tween(key, null);
+ if (typeof value !== 'function') throw new Error();
+ var fullname = namespace(name);
+ return this.tween(
+ key,
+ (fullname.local ? attrTweenNS : attrTween)(fullname, value),
+ );
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/delay.js
+
+ function delayFunction(id, value) {
+ return function () {
+ init(this, id).delay = +value.apply(this, arguments);
+ };
+ }
+
+ function delayConstant(id, value) {
+ return (
+ (value = +value),
+ function () {
+ init(this, id).delay = value;
+ }
+ );
+ }
+
+ /* harmony default export */ function delay(value) {
+ var id = this._id;
+
+ return arguments.length
+ ? this.each(
+ (typeof value === 'function' ? delayFunction : delayConstant)(
+ id,
+ value,
+ ),
+ )
+ : schedule_get(this.node(), id).delay;
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/duration.js
+
+ function durationFunction(id, value) {
+ return function () {
+ schedule_set(this, id).duration = +value.apply(this, arguments);
+ };
+ }
+
+ function durationConstant(id, value) {
+ return (
+ (value = +value),
+ function () {
+ schedule_set(this, id).duration = value;
+ }
+ );
+ }
+
+ /* harmony default export */ function duration(value) {
+ var id = this._id;
+
+ return arguments.length
+ ? this.each(
+ (typeof value === 'function' ? durationFunction : durationConstant)(
+ id,
+ value,
+ ),
+ )
+ : schedule_get(this.node(), id).duration;
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/ease.js
+
+ function easeConstant(id, value) {
+ if (typeof value !== 'function') throw new Error();
+ return function () {
+ schedule_set(this, id).ease = value;
+ };
+ }
+
+ /* harmony default export */ function ease(value) {
+ var id = this._id;
+
+ return arguments.length
+ ? this.each(easeConstant(id, value))
+ : schedule_get(this.node(), id).ease;
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/easeVarying.js
+
+ function easeVarying(id, value) {
+ return function () {
+ var v = value.apply(this, arguments);
+ if (typeof v !== 'function') throw new Error();
+ schedule_set(this, id).ease = v;
+ };
+ }
+
+ /* harmony default export */ function transition_easeVarying(value) {
+ if (typeof value !== 'function') throw new Error();
+ return this.each(easeVarying(this._id, value));
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/filter.js
+
+ /* harmony default export */ function transition_filter(match) {
+ if (typeof match !== 'function') match = matcher(match);
+
+ for (
+ var groups = this._groups,
+ m = groups.length,
+ subgroups = new Array(m),
+ j = 0;
+ j < m;
+ ++j
+ ) {
+ for (
+ var group = groups[j],
+ n = group.length,
+ subgroup = (subgroups[j] = []),
+ node,
+ i = 0;
+ i < n;
+ ++i
+ ) {
+ if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
+ subgroup.push(node);
+ }
+ }
+ }
+
+ return new Transition(subgroups, this._parents, this._name, this._id);
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/merge.js
+
+ /* harmony default export */ function transition_merge(transition) {
+ if (transition._id !== this._id) throw new Error();
+
+ 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
+ ) {
+ for (
+ var group0 = groups0[j],
+ group1 = groups1[j],
+ n = group0.length,
+ merge = (merges[j] = new Array(n)),
+ node,
+ i = 0;
+ i < n;
+ ++i
+ ) {
+ if ((node = group0[i] || group1[i])) {
+ merge[i] = node;
+ }
+ }
+ }
+
+ for (; j < m0; ++j) {
+ merges[j] = groups0[j];
+ }
+
+ return new Transition(merges, this._parents, this._name, this._id);
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/on.js
+
+ function start(name) {
+ return (name + '')
+ .trim()
+ .split(/^|\s+/)
+ .every(function (t) {
+ var i = t.indexOf('.');
+ if (i >= 0) t = t.slice(0, i);
+ return !t || t === 'start';
+ });
+ }
+
+ function onFunction(id, name, listener) {
+ var on0,
+ on1,
+ sit = start(name) ? init : schedule_set;
+ return function () {
+ var schedule = sit(this, id),
+ on = schedule.on;
+
+ // If this node shared a dispatch with the previous node,
+ // just assign the updated shared dispatch and we’re done!
+ // Otherwise, copy-on-write.
+ if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);
+
+ schedule.on = on1;
+ };
+ }
+
+ /* harmony default export */ function transition_on(name, listener) {
+ var id = this._id;
+
+ return arguments.length < 2
+ ? schedule_get(this.node(), id).on.on(name)
+ : this.each(onFunction(id, name, listener));
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/remove.js
+
+ function removeFunction(id) {
+ return function () {
+ var parent = this.parentNode;
+ for (var i in this.__transition) if (+i !== id) return;
+ if (parent) parent.removeChild(this);
+ };
+ }
+
+ /* harmony default export */ function transition_remove() {
+ return this.on('end.remove', removeFunction(this._id));
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/select.js
+
+ /* harmony default export */ function transition_select(select) {
+ var name = this._name,
+ id = this._id;
+
+ if (typeof select !== 'function') select = selector(select);
+
+ for (
+ var groups = this._groups,
+ m = groups.length,
+ subgroups = new Array(m),
+ j = 0;
+ j < m;
+ ++j
+ ) {
+ for (
+ var group = groups[j],
+ n = group.length,
+ subgroup = (subgroups[j] = new Array(n)),
+ node,
+ subnode,
+ i = 0;
+ i < n;
+ ++i
+ ) {
+ if (
+ (node = group[i]) &&
+ (subnode = select.call(node, node.__data__, i, group))
+ ) {
+ if ('__data__' in node) subnode.__data__ = node.__data__;
+ subgroup[i] = subnode;
+ schedule(
+ subgroup[i],
+ name,
+ id,
+ i,
+ subgroup,
+ schedule_get(node, id),
+ );
+ }
+ }
+ }
+
+ return new Transition(subgroups, this._parents, name, id);
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/selectAll.js
+
+ /* harmony default export */ function transition_selectAll(select) {
+ var name = this._name,
+ id = this._id;
+
+ if (typeof select !== 'function') select = selectorAll(select);
+
+ for (
+ var groups = this._groups,
+ m = groups.length,
+ subgroups = [],
+ parents = [],
+ j = 0;
+ j < m;
+ ++j
+ ) {
+ for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
+ if ((node = group[i])) {
+ for (
+ var children = select.call(node, node.__data__, i, group),
+ child,
+ inherit = schedule_get(node, id),
+ k = 0,
+ l = children.length;
+ k < l;
+ ++k
+ ) {
+ if ((child = children[k])) {
+ schedule(child, name, id, k, children, inherit);
+ }
+ }
+ subgroups.push(children);
+ parents.push(node);
+ }
+ }
+ }
+
+ return new Transition(subgroups, parents, name, id);
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/selection.js
+
+ var selection_Selection = src_selection.prototype.constructor;
+
+ /* harmony default export */ function transition_selection() {
+ return new selection_Selection(this._groups, this._parents);
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/style.js
+
+ function styleNull(name, interpolate) {
+ var string00, string10, interpolate0;
+ return function () {
+ var string0 = styleValue(this, name),
+ string1 = (this.style.removeProperty(name), styleValue(this, name));
+ return string0 === string1
+ ? null
+ : string0 === string00 && string1 === string10
+ ? interpolate0
+ : (interpolate0 = interpolate(
+ (string00 = string0),
+ (string10 = string1),
+ ));
+ };
+ }
+
+ function style_styleRemove(name) {
+ return function () {
+ this.style.removeProperty(name);
+ };
+ }
+
+ function style_styleConstant(name, interpolate, value1) {
+ var string00,
+ string1 = value1 + '',
+ interpolate0;
+ return function () {
+ var string0 = styleValue(this, name);
+ return string0 === string1
+ ? null
+ : string0 === string00
+ ? interpolate0
+ : (interpolate0 = interpolate((string00 = string0), value1));
+ };
+ }
+
+ function style_styleFunction(name, interpolate, value) {
+ var string00, string10, interpolate0;
+ return function () {
+ var string0 = styleValue(this, name),
+ value1 = value(this),
+ string1 = value1 + '';
+ if (value1 == null)
+ string1 = value1 =
+ (this.style.removeProperty(name), styleValue(this, name));
+ return string0 === string1
+ ? null
+ : string0 === string00 && string1 === string10
+ ? interpolate0
+ : ((string10 = string1),
+ (interpolate0 = interpolate((string00 = string0), value1)));
+ };
+ }
+
+ function styleMaybeRemove(id, name) {
+ var on0,
+ on1,
+ listener0,
+ key = 'style.' + name,
+ event = 'end.' + key,
+ remove;
+ return function () {
+ var schedule = schedule_set(this, id),
+ on = schedule.on,
+ listener =
+ schedule.value[key] == null
+ ? remove || (remove = style_styleRemove(name))
+ : undefined;
+
+ // If this node shared a dispatch with the previous node,
+ // just assign the updated shared dispatch and we’re done!
+ // Otherwise, copy-on-write.
+ if (on !== on0 || listener0 !== listener)
+ (on1 = (on0 = on).copy()).on(event, (listener0 = listener));
+
+ schedule.on = on1;
+ };
+ }
+
+ /* harmony default export */ function transition_style(
+ name,
+ value,
+ priority,
+ ) {
+ var i =
+ (name += '') === 'transform' ? interpolateTransformCss : interpolate;
+ return value == null
+ ? this.styleTween(name, styleNull(name, i)).on(
+ 'end.style.' + name,
+ style_styleRemove(name),
+ )
+ : typeof value === 'function'
+ ? this.styleTween(
+ name,
+ style_styleFunction(
+ name,
+ i,
+ tweenValue(this, 'style.' + name, value),
+ ),
+ ).each(styleMaybeRemove(this._id, name))
+ : this.styleTween(
+ name,
+ style_styleConstant(name, i, value),
+ priority,
+ ).on('end.style.' + name, null);
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/styleTween.js
+
+ function styleInterpolate(name, i, priority) {
+ return function (t) {
+ this.style.setProperty(name, i.call(this, t), priority);
+ };
+ }
+
+ function styleTween(name, value, priority) {
+ var t, i0;
+ function tween() {
+ var i = value.apply(this, arguments);
+ if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);
+ return t;
+ }
+ tween._value = value;
+ return tween;
+ }
+
+ /* harmony default export */ function transition_styleTween(
+ name,
+ value,
+ priority,
+ ) {
+ var key = 'style.' + (name += '');
+ if (arguments.length < 2) return (key = this.tween(key)) && key._value;
+ if (value == null) return this.tween(key, null);
+ if (typeof value !== 'function') throw new Error();
+ return this.tween(
+ key,
+ styleTween(name, value, priority == null ? '' : priority),
+ );
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/text.js
+
+ function text_textConstant(value) {
+ return function () {
+ this.textContent = value;
+ };
+ }
+
+ function text_textFunction(value) {
+ return function () {
+ var value1 = value(this);
+ this.textContent = value1 == null ? '' : value1;
+ };
+ }
+
+ /* harmony default export */ function transition_text(value) {
+ return this.tween(
+ 'text',
+ typeof value === 'function'
+ ? text_textFunction(tweenValue(this, 'text', value))
+ : text_textConstant(value == null ? '' : value + ''),
+ );
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/textTween.js
+
+ function textInterpolate(i) {
+ return function (t) {
+ this.textContent = i.call(this, t);
+ };
+ }
+
+ function textTween(value) {
+ var t0, i0;
+ function tween() {
+ var i = value.apply(this, arguments);
+ if (i !== i0) t0 = (i0 = i) && textInterpolate(i);
+ return t0;
+ }
+ tween._value = value;
+ return tween;
+ }
+
+ /* harmony default export */ function transition_textTween(value) {
+ var key = 'text';
+ if (arguments.length < 1) return (key = this.tween(key)) && key._value;
+ if (value == null) return this.tween(key, null);
+ if (typeof value !== 'function') throw new Error();
+ return this.tween(key, textTween(value));
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/transition.js
+
+ /* harmony default export */ function transition() {
+ var name = this._name,
+ id0 = this._id,
+ id1 = newId();
+
+ for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
+ for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
+ if ((node = group[i])) {
+ var inherit = schedule_get(node, id0);
+ schedule(node, name, id1, i, group, {
+ time: inherit.time + inherit.delay + inherit.duration,
+ delay: 0,
+ duration: inherit.duration,
+ ease: inherit.ease,
+ });
+ }
+ }
+ }
+
+ return new Transition(groups, this._parents, name, id1);
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/end.js
+
+ /* harmony default export */ function end() {
+ var on0,
+ on1,
+ that = this,
+ id = that._id,
+ size = that.size();
+ return new Promise(function (resolve, reject) {
+ var cancel = { value: reject },
+ end = {
+ value: function () {
+ if (--size === 0) resolve();
+ },
+ };
+
+ that.each(function () {
+ var schedule = schedule_set(this, id),
+ on = schedule.on;
+
+ // If this node shared a dispatch with the previous node,
+ // just assign the updated shared dispatch and we’re done!
+ // Otherwise, copy-on-write.
+ if (on !== on0) {
+ on1 = (on0 = on).copy();
+ on1._.cancel.push(cancel);
+ on1._.interrupt.push(cancel);
+ on1._.end.push(end);
+ }
+
+ schedule.on = on1;
+ });
+
+ // The selection was empty, resolve end immediately
+ if (size === 0) resolve();
+ });
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/transition/index.js
+
+ var id = 0;
+
+ function Transition(groups, parents, name, id) {
+ this._groups = groups;
+ this._parents = parents;
+ this._name = name;
+ this._id = id;
+ }
+
+ function transition_transition(name) {
+ return src_selection().transition(name);
+ }
+
+ function newId() {
+ return ++id;
+ }
+
+ var selection_prototype = src_selection.prototype;
+
+ Transition.prototype = transition_transition.prototype = {
+ constructor: Transition,
+ select: transition_select,
+ selectAll: transition_selectAll,
+ selectChild: selection_prototype.selectChild,
+ selectChildren: selection_prototype.selectChildren,
+ filter: transition_filter,
+ merge: transition_merge,
+ selection: transition_selection,
+ transition: transition,
+ call: selection_prototype.call,
+ nodes: selection_prototype.nodes,
+ node: selection_prototype.node,
+ size: selection_prototype.size,
+ empty: selection_prototype.empty,
+ each: selection_prototype.each,
+ on: transition_on,
+ attr: transition_attr,
+ attrTween: transition_attrTween,
+ style: transition_style,
+ styleTween: transition_styleTween,
+ text: transition_text,
+ textTween: transition_textTween,
+ remove: transition_remove,
+ tween: tween,
+ delay: delay,
+ duration: duration,
+ ease: ease,
+ easeVarying: transition_easeVarying,
+ end: end,
+ [Symbol.iterator]: selection_prototype[Symbol.iterator],
+ }; // CONCATENATED MODULE: ../node_modules/d3-transition/src/selection/transition.js
+
+ var defaultTiming = {
+ time: null, // Set on use.
+ delay: 0,
+ duration: 250,
+ ease: cubicInOut,
+ };
+
+ function inherit(node, id) {
+ var timing;
+ while (!(timing = node.__transition) || !(timing = timing[id])) {
+ if (!(node = node.parentNode)) {
+ throw new Error(`transition ${id} not found`);
+ }
+ }
+ return timing;
+ }
+
+ /* harmony default export */ function selection_transition(name) {
+ var id, timing;
+
+ if (name instanceof Transition) {
+ (id = name._id), (name = name._name);
+ } else {
+ (id = newId()),
+ ((timing = defaultTiming).time = now()),
+ (name = name == null ? null : name + '');
+ }
+
+ for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
+ for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
+ if ((node = group[i])) {
+ schedule(node, name, id, i, group, timing || inherit(node, id));
+ }
+ }
+ }
+
+ return new Transition(groups, this._parents, name, id);
+ } // CONCATENATED MODULE: ../node_modules/d3-transition/src/selection/index.js
+
+ src_selection.prototype.interrupt = selection_interrupt;
+ src_selection.prototype.transition = selection_transition; // CONCATENATED MODULE: ../node_modules/d3-transition/src/index.js // CONCATENATED MODULE: ./colorUtils.js
+
+ function generateHash(name) {
+ // Return a vector (0.0->1.0) that is a hash of the input string.
+ // The hash is computed to favor early characters over later ones, so
+ // that strings with similar starts have similar vectors. Only the first
+ // 6 characters are considered.
+ const MAX_CHAR = 6;
+
+ let hash = 0;
+ let maxHash = 0;
+ let weight = 1;
+ const mod = 10;
+
+ if (name) {
+ for (let i = 0; i < name.length; i++) {
+ if (i > MAX_CHAR) {
+ break;
+ }
+ hash += weight * (name.charCodeAt(i) % mod);
+ maxHash += weight * (mod - 1);
+ weight *= 0.7;
+ }
+ if (maxHash > 0) {
+ hash = hash / maxHash;
+ }
+ }
+ return hash;
+ }
+
+ function generateColorVector(name) {
+ let vector = 0;
+ if (name) {
+ const nameArr = name.split('`');
+ if (nameArr.length > 1) {
+ name = nameArr[nameArr.length - 1]; // drop module name if present
+ }
+ name = name.split('(')[0]; // drop extra info
+ vector = generateHash(name);
+ }
+ return vector;
+ } // CONCATENATED MODULE: ./colorScheme.js
+
+ function calculateColor(hue, vector) {
+ let r;
+ let g;
+ let b;
+
+ if (hue === 'red') {
+ r = 200 + Math.round(55 * vector);
+ g = 50 + Math.round(80 * vector);
+ b = g;
+ } else if (hue === 'orange') {
+ r = 190 + Math.round(65 * vector);
+ g = 90 + Math.round(65 * vector);
+ b = 0;
+ } else if (hue === 'yellow') {
+ r = 175 + Math.round(55 * vector);
+ g = r;
+ b = 50 + Math.round(20 * vector);
+ } else if (hue === 'green') {
+ r = 50 + Math.round(60 * vector);
+ g = 200 + Math.round(55 * vector);
+ b = r;
+ } else if (hue === 'pastelgreen') {
+ // rgb(163,195,72) - rgb(238,244,221)
+ r = 163 + Math.round(75 * vector);
+ g = 195 + Math.round(49 * vector);
+ b = 72 + Math.round(149 * vector);
+ } else if (hue === 'blue') {
+ // rgb(91,156,221) - rgb(217,232,247)
+ r = 91 + Math.round(126 * vector);
+ g = 156 + Math.round(76 * vector);
+ b = 221 + Math.round(26 * vector);
+ } else if (hue === 'aqua') {
+ r = 50 + Math.round(60 * vector);
+ g = 165 + Math.round(55 * vector);
+ b = g;
+ } else if (hue === 'cold') {
+ r = 0 + Math.round(55 * (1 - vector));
+ g = 0 + Math.round(230 * (1 - vector));
+ b = 200 + Math.round(55 * vector);
+ } else {
+ // original warm palette
+ r = 200 + Math.round(55 * vector);
+ g = 0 + Math.round(230 * (1 - vector));
+ b = 0 + Math.round(55 * (1 - vector));
+ }
+
+ return 'rgb(' + r + ',' + g + ',' + b + ')';
+ } // CONCATENATED MODULE: ./flamegraph.js
+
+ /* harmony default export */ function flamegraph() {
+ let w = 960; // graph width
+ let h = null; // graph height
+ let c = 18; // cell height
+ let selection = null; // selection
+ let tooltip = null; // tooltip
+ let title = ''; // graph title
+ let transitionDuration = 750;
+ let transitionEase = cubicInOut; // tooltip offset
+ let sort = false;
+ let inverted = false; // invert the graph direction
+ let clickHandler = null;
+ let hoverHandler = null;
+ let minFrameSize = 0;
+ let detailsElement = null;
+ let searchDetails = null;
+ let selfValue = false;
+ let resetHeightOnZoom = false;
+ let scrollOnZoom = false;
+ let minHeight = null;
+ let computeDelta = false;
+ let colorHue = null;
+
+ let getName = function (d) {
+ return d.data.n || d.data.name;
+ };
+
+ let getValue = function (d) {
+ if ('v' in d) {
+ return d.v;
+ } else {
+ return d.value;
+ }
+ };
+
+ let getChildren = function (d) {
+ return d.c || d.children;
+ };
+
+ let getLibtype = function (d) {
+ return d.data.l || d.data.libtype;
+ };
+
+ let getDelta = function (d) {
+ if ('d' in d.data) {
+ return d.data.d;
+ } else {
+ return d.data.delta;
+ }
+ };
+
+ let searchHandler = function (searchResults, searchSum, totalValue) {
+ searchDetails = () => {
+ if (detailsElement) {
+ detailsElement.textContent =
+ 'search: ' +
+ searchSum +
+ ' of ' +
+ totalValue +
+ ' total time ( ' +
+ format('.3f')(100 * (searchSum / totalValue), 3) +
+ '%)';
+ }
+ };
+ searchDetails();
+ };
+ const originalSearchHandler = searchHandler;
+
+ let searchMatch = (d, term, ignoreCase = false) => {
+ if (!term) {
+ return false;
+ }
+ let label = getName(d);
+ if (ignoreCase) {
+ term = term.toLowerCase();
+ label = label.toLowerCase();
+ }
+ const re = new RegExp(term);
+ return typeof label !== 'undefined' && label && label.match(re);
+ };
+ const originalSearchMatch = searchMatch;
+
+ let detailsHandler = function (d) {
+ if (detailsElement) {
+ if (d) {
+ detailsElement.textContent = d;
+ } else {
+ if (typeof searchDetails === 'function') {
+ searchDetails();
+ } else {
+ detailsElement.textContent = '';
+ }
+ }
+ }
+ };
+ const originalDetailsHandler = detailsHandler;
+
+ let labelHandler = function (d) {
+ return (
+ getName(d) +
+ ' (' +
+ format('.3f')(100 * (d.x1 - d.x0), 3) +
+ '%, ' +
+ getValue(d) +
+ ' ms)'
+ );
+ };
+
+ let colorMapper = function (d) {
+ return d.highlight ? '#E600E6' : colorHash(getName(d), getLibtype(d));
+ };
+ const originalColorMapper = colorMapper;
+
+ function colorHash(name, libtype) {
+ // Return a color for the given name and library type. The library type
+ // selects the hue, and the name is hashed to a color in that hue.
+
+ // default when libtype is not in use
+ let hue = colorHue || 'warm';
+
+ if (!colorHue && !(typeof libtype === 'undefined' || libtype === '')) {
+ // Select hue. Order is important.
+ hue = 'red';
+ if (typeof name !== 'undefined' && name && name.match(/::/)) {
+ hue = 'yellow';
+ }
+ if (libtype === 'kernel') {
+ hue = 'orange';
+ } else if (libtype === 'jit') {
+ hue = 'green';
+ } else if (libtype === 'inlined') {
+ hue = 'aqua';
+ }
+ }
+
+ const vector = generateColorVector(name);
+ return calculateColor(hue, vector);
+ }
+
+ function show(d) {
+ d.data.fade = false;
+ d.data.hide = false;
+ if (d.children) {
+ d.children.forEach(show);
+ }
+ }
+
+ function hideSiblings(node) {
+ let child = node;
+ let parent = child.parent;
+ let children, i, sibling;
+ while (parent) {
+ children = parent.children;
+ i = children.length;
+ while (i--) {
+ sibling = children[i];
+ if (sibling !== child) {
+ sibling.data.hide = true;
+ }
+ }
+ child = parent;
+ parent = child.parent;
+ }
+ }
+
+ function fadeAncestors(d) {
+ if (d.parent) {
+ d.parent.data.fade = true;
+ fadeAncestors(d.parent);
+ }
+ }
+
+ function zoom(d) {
+ if (tooltip) tooltip.hide();
+ hideSiblings(d);
+ show(d);
+ fadeAncestors(d);
+ update();
+ if (scrollOnZoom) {
+ const chartOffset = src_select(this).select('svg')._groups[0][0]
+ .parentNode.offsetTop;
+ const maxFrames = (window.innerHeight - chartOffset) / c;
+ const frameOffset = (d.height - maxFrames + 10) * c;
+ window.scrollTo({
+ top: chartOffset + frameOffset,
+ left: 0,
+ behavior: 'smooth',
+ });
+ }
+ if (typeof clickHandler === 'function') {
+ clickHandler(d);
+ }
+ }
+
+ function searchTree(d, term) {
+ const results = [];
+ let sum = 0;
+
+ function searchInner(d, foundParent) {
+ let found = false;
+
+ if (searchMatch(d, term)) {
+ d.highlight = true;
+ found = true;
+ if (!foundParent) {
+ sum += getValue(d);
+ }
+ results.push(d);
+ } else {
+ d.highlight = false;
+ }
+
+ if (getChildren(d)) {
+ getChildren(d).forEach(function (child) {
+ searchInner(child, foundParent || found);
+ });
+ }
+ }
+ searchInner(d, false);
+
+ return [results, sum];
+ }
+
+ function findTree(d, id) {
+ if (d.id === id) {
+ return d;
+ } else {
+ const children = getChildren(d);
+ if (children) {
+ for (let i = 0; i < children.length; i++) {
+ const found = findTree(children[i], id);
+ if (found) {
+ return found;
+ }
+ }
+ }
+ }
+ }
+
+ function clear(d) {
+ d.highlight = false;
+ if (getChildren(d)) {
+ getChildren(d).forEach(function (child) {
+ clear(child);
+ });
+ }
+ }
+
+ function doSort(a, b) {
+ if (typeof sort === 'function') {
+ return sort(a, b);
+ } else if (sort) {
+ return ascending_ascending(getName(a), getName(b));
+ }
+ }
+
+ const p = partition();
+
+ function filterNodes(root) {
+ let nodeList = root.descendants();
+ if (minFrameSize > 0) {
+ const kx = w / (root.x1 - root.x0);
+ nodeList = nodeList.filter(function (el) {
+ return (el.x1 - el.x0) * kx > minFrameSize;
+ });
+ }
+ return nodeList;
+ }
+
+ function update() {
+ selection.each(function (root) {
+ const x = linear_linear().range([0, w]);
+ const y = linear_linear().range([0, c]);
+
+ reappraiseNode(root);
+
+ if (sort) root.sort(doSort);
+
+ p(root);
+
+ const kx = w / (root.x1 - root.x0);
+ function width(d) {
+ return (d.x1 - d.x0) * kx;
+ }
+
+ const descendants = filterNodes(root);
+ const svg = src_select(this).select('svg');
+ svg.attr('width', w);
+
+ let g = svg.selectAll('g').data(descendants, function (d) {
+ return d.id;
+ });
+
+ // if height is not set: set height on first update, after nodes were filtered by minFrameSize
+ if (!h || resetHeightOnZoom) {
+ const maxDepth = Math.max.apply(
+ null,
+ descendants.map(function (n) {
+ return n.depth;
+ }),
+ );
+
+ h = (maxDepth + 3) * c;
+ if (h < minHeight) h = minHeight;
+
+ svg.attr('height', h);
+ }
+
+ g.transition()
+ .duration(transitionDuration)
+ .ease(transitionEase)
+ .attr('transform', function (d) {
+ return (
+ 'translate(' +
+ x(d.x0) +
+ ',' +
+ (inverted ? y(d.depth) : h - y(d.depth) - c) +
+ ')'
+ );
+ });
+
+ g.select('rect')
+ .transition()
+ .duration(transitionDuration)
+ .ease(transitionEase)
+ .attr('width', width);
+
+ const node = g
+ .enter()
+ .append('svg:g')
+ .attr('transform', function (d) {
+ return (
+ 'translate(' +
+ x(d.x0) +
+ ',' +
+ (inverted ? y(d.depth) : h - y(d.depth) - c) +
+ ')'
+ );
+ });
+
+ node
+ .append('svg:rect')
+ .transition()
+ .delay(transitionDuration / 2)
+ .attr('width', width);
+
+ if (!tooltip) {
+ node.append('svg:title');
+ }
+
+ node.append('foreignObject').append('xhtml:div');
+
+ // Now we have to re-select to see the new elements (why?).
+ g = svg.selectAll('g').data(descendants, function (d) {
+ return d.id;
+ });
+
+ g.attr('width', width)
+ .attr('height', function (d) {
+ return c;
+ })
+ .attr('name', function (d) {
+ return getName(d);
+ })
+ .attr('class', function (d) {
+ return d.data.fade ? 'frame fade' : 'frame';
+ });
+
+ g.select('rect')
+ .attr('height', function (d) {
+ return c;
+ })
+ .attr('fill', function (d) {
+ return colorMapper(d);
+ });
+
+ if (!tooltip) {
+ g.select('title').text(labelHandler);
+ }
+
+ g.select('foreignObject')
+ .attr('width', width)
+ .attr('height', function (d) {
+ return c;
+ })
+ .select('div')
+ .attr('class', 'd3-flame-graph-label')
+ .style('display', function (d) {
+ return width(d) < 35 ? 'none' : 'block';
+ })
+ .transition()
+ .delay(transitionDuration)
+ .text(getName);
+
+ g.on('click', (_, d) => {
+ zoom(d);
+ });
+
+ g.exit().remove();
+
+ g.on('mouseover', function (_, d) {
+ if (tooltip) tooltip.show(d, this);
+ detailsHandler(labelHandler(d));
+ if (typeof hoverHandler === 'function') {
+ hoverHandler(d);
+ }
+ }).on('mouseout', function () {
+ if (tooltip) tooltip.hide();
+ detailsHandler(null);
+ });
+ });
+ }
+
+ function merge(data, samples) {
+ samples.forEach(function (sample) {
+ const node = data.find(function (element) {
+ return element.name === sample.name;
+ });
+
+ if (node) {
+ node.value += sample.value;
+ if (sample.children) {
+ if (!node.children) {
+ node.children = [];
+ }
+ merge(node.children, sample.children);
+ }
+ } else {
+ data.push(sample);
+ }
+ });
+ }
+
+ function forEachNode(node, f) {
+ f(node);
+ let children = node.children;
+ if (children) {
+ const stack = [children];
+ let count, child, grandChildren;
+ while (stack.length) {
+ children = stack.pop();
+ count = children.length;
+ while (count--) {
+ child = children[count];
+ f(child);
+ grandChildren = child.children;
+ if (grandChildren) {
+ stack.push(grandChildren);
+ }
+ }
+ }
+ }
+ }
+
+ function adoptNode(node) {
+ let id = 0;
+ forEachNode(node, function (n) {
+ n.id = id++;
+ });
+ }
+
+ function reappraiseNode(root) {
+ let node,
+ children,
+ grandChildren,
+ childrenValue,
+ i,
+ j,
+ child,
+ childValue;
+ const stack = [];
+ const included = [];
+ const excluded = [];
+ const compoundValue = !selfValue;
+ let item = root.data;
+ if (item.hide) {
+ root.value = 0;
+ children = root.children;
+ if (children) {
+ excluded.push(children);
+ }
+ } else {
+ root.value = item.fade ? 0 : getValue(item);
+ stack.push(root);
+ }
+ // First DFS pass:
+ // 1. Update node.value with node's self value
+ // 2. Populate excluded list with children under hidden nodes
+ // 3. Populate included list with children under visible nodes
+ while ((node = stack.pop())) {
+ children = node.children;
+ if (children && (i = children.length)) {
+ childrenValue = 0;
+ while (i--) {
+ child = children[i];
+ item = child.data;
+ if (item.hide) {
+ child.value = 0;
+ grandChildren = child.children;
+ if (grandChildren) {
+ excluded.push(grandChildren);
+ }
+ continue;
+ }
+ if (item.fade) {
+ child.value = 0;
+ } else {
+ childValue = getValue(item);
+ child.value = childValue;
+ childrenValue += childValue;
+ }
+ stack.push(child);
+ }
+ // Here second part of `&&` is actually checking for `node.data.fade`. However,
+ // checking for node.value is faster and presents more oportunities for JS optimizer.
+ if (compoundValue && node.value) {
+ node.value -= childrenValue;
+ }
+ included.push(children);
+ }
+ }
+ // Postorder traversal to compute compound value of each visible node.
+ i = included.length;
+ while (i--) {
+ children = included[i];
+ childrenValue = 0;
+ j = children.length;
+ while (j--) {
+ childrenValue += children[j].value;
+ }
+ children[0].parent.value += childrenValue;
+ }
+ // Continue DFS to set value of all hidden nodes to 0.
+ while (excluded.length) {
+ children = excluded.pop();
+ j = children.length;
+ while (j--) {
+ child = children[j];
+ child.value = 0;
+ grandChildren = child.children;
+ if (grandChildren) {
+ excluded.push(grandChildren);
+ }
+ }
+ }
+ }
+
+ function processData() {
+ selection.datum((data) => {
+ if (data.constructor.name !== 'Node') {
+ // creating a root hierarchical structure
+ const root = hierarchy(data, getChildren);
+
+ // augumenting nodes with ids
+ adoptNode(root);
+
+ // calculate actual value
+ reappraiseNode(root);
+
+ // store value for later use
+ root.originalValue = root.value;
+
+ // computing deltas for differentials
+ if (computeDelta) {
+ root.eachAfter((node) => {
+ let sum = getDelta(node);
+ const children = node.children;
+ let i = children && children.length;
+ while (--i >= 0) sum += children[i].delta;
+ node.delta = sum;
+ });
+ }
+
+ // setting the bound data for the selection
+ return root;
+ }
+ });
+ }
+
+ function chart(s) {
+ if (!arguments.length) {
+ return chart;
+ }
+
+ // saving the selection on `.call`
+ selection = s;
+
+ // processing raw data to be used in the chart
+ processData();
+
+ // create chart svg
+ selection.each(function (data) {
+ if (src_select(this).select('svg').size() === 0) {
+ const svg = src_select(this)
+ .append('svg:svg')
+ .attr('width', w)
+ .attr('class', 'partition d3-flame-graph');
+
+ if (h) {
+ if (h < minHeight) h = minHeight;
+ svg.attr('height', h);
+ }
+
+ svg
+ .append('svg:text')
+ .attr('class', 'title')
+ .attr('text-anchor', 'middle')
+ .attr('y', '25')
+ .attr('x', w / 2)
+ .attr('fill', '#808080')
+ .text(title);
+
+ if (tooltip) svg.call(tooltip);
+ }
+ });
+
+ // first draw
+ update();
+ }
+
+ chart.height = function (_) {
+ if (!arguments.length) {
+ return h;
+ }
+ h = _;
+ return chart;
+ };
+
+ chart.minHeight = function (_) {
+ if (!arguments.length) {
+ return minHeight;
+ }
+ minHeight = _;
+ return chart;
+ };
+
+ chart.width = function (_) {
+ if (!arguments.length) {
+ return w;
+ }
+ w = _;
+ return chart;
+ };
+
+ chart.cellHeight = function (_) {
+ if (!arguments.length) {
+ return c;
+ }
+ c = _;
+ return chart;
+ };
+
+ chart.tooltip = function (_) {
+ if (!arguments.length) {
+ return tooltip;
+ }
+ if (typeof _ === 'function') {
+ tooltip = _;
+ }
+ return chart;
+ };
+
+ chart.title = function (_) {
+ if (!arguments.length) {
+ return title;
+ }
+ title = _;
+ return chart;
+ };
+
+ chart.transitionDuration = function (_) {
+ if (!arguments.length) {
+ return transitionDuration;
+ }
+ transitionDuration = _;
+ return chart;
+ };
+
+ chart.transitionEase = function (_) {
+ if (!arguments.length) {
+ return transitionEase;
+ }
+ transitionEase = _;
+ return chart;
+ };
+
+ chart.sort = function (_) {
+ if (!arguments.length) {
+ return sort;
+ }
+ sort = _;
+ return chart;
+ };
+
+ chart.inverted = function (_) {
+ if (!arguments.length) {
+ return inverted;
+ }
+ inverted = _;
+ return chart;
+ };
+
+ chart.computeDelta = function (_) {
+ if (!arguments.length) {
+ return computeDelta;
+ }
+ computeDelta = _;
+ return chart;
+ };
+
+ chart.setLabelHandler = function (_) {
+ if (!arguments.length) {
+ return labelHandler;
+ }
+ labelHandler = _;
+ return chart;
+ };
+ // Kept for backwards compatibility.
+ chart.label = chart.setLabelHandler;
+
+ chart.search = function (term) {
+ const searchResults = [];
+ let searchSum = 0;
+ let totalValue = 0;
+ selection.each(function (data) {
+ const res = searchTree(data, term);
+ searchResults.push(...res[0]);
+ searchSum += res[1];
+ totalValue += data.originalValue;
+ });
+ searchHandler(searchResults, searchSum, totalValue);
+ update();
+ };
+
+ chart.findById = function (id) {
+ if (typeof id === 'undefined' || id === null) {
+ return null;
+ }
+ let found = null;
+ selection.each(function (data) {
+ if (found === null) {
+ found = findTree(data, id);
+ }
+ });
+ return found;
+ };
+
+ chart.clear = function () {
+ detailsHandler(null);
+ selection.each(function (root) {
+ clear(root);
+ update();
+ });
+ };
+
+ chart.zoomTo = function (d) {
+ zoom(d);
+ };
+
+ chart.resetZoom = function () {
+ selection.each(function (root) {
+ zoom(root); // zoom to root
+ });
+ };
+
+ chart.onClick = function (_) {
+ if (!arguments.length) {
+ return clickHandler;
+ }
+ clickHandler = _;
+ return chart;
+ };
+
+ chart.onHover = function (_) {
+ if (!arguments.length) {
+ return hoverHandler;
+ }
+ hoverHandler = _;
+ return chart;
+ };
+
+ chart.merge = function (data) {
+ if (!selection) {
+ return chart;
+ }
+
+ // TODO: Fix merge with zoom
+ // Merging a zoomed chart doesn't work properly, so
+ // clearing zoom before merge.
+ // To apply zoom on merge, we would need to set hide
+ // and fade on new data according to current data.
+ // New ids are generated for the whole data structure,
+ // so previous ids might not be the same. For merge to
+ // work with zoom, previous ids should be maintained.
+ this.resetZoom();
+
+ // Clear search details
+ // Merge requires a new search, updating data and
+ // the details handler with search results.
+ // Since we don't store the search term, can't
+ // perform search again.
+ searchDetails = null;
+ detailsHandler(null);
+
+ selection.datum((root) => {
+ merge([root.data], [data]);
+ return root.data;
+ });
+ processData();
+ update();
+ return chart;
+ };
+
+ chart.update = function (data) {
+ if (!selection) {
+ return chart;
+ }
+ if (data) {
+ selection.datum(data);
+ processData();
+ }
+ update();
+ return chart;
+ };
+
+ chart.destroy = function () {
+ if (!selection) {
+ return chart;
+ }
+ if (tooltip) {
+ tooltip.hide();
+ if (typeof tooltip.destroy === 'function') {
+ tooltip.destroy();
+ }
+ }
+ selection.selectAll('svg').remove();
+ return chart;
+ };
+
+ chart.setColorMapper = function (_) {
+ if (!arguments.length) {
+ colorMapper = originalColorMapper;
+ return chart;
+ }
+ colorMapper = (d) => {
+ const originalColor = originalColorMapper(d);
+ return _(d, originalColor);
+ };
+ return chart;
+ };
+ // Kept for backwards compatibility.
+ chart.color = chart.setColorMapper;
+
+ chart.setColorHue = function (_) {
+ if (!arguments.length) {
+ colorHue = null;
+ return chart;
+ }
+ colorHue = _;
+ return chart;
+ };
+
+ chart.minFrameSize = function (_) {
+ if (!arguments.length) {
+ return minFrameSize;
+ }
+ minFrameSize = _;
+ return chart;
+ };
+
+ chart.setDetailsElement = function (_) {
+ if (!arguments.length) {
+ return detailsElement;
+ }
+ detailsElement = _;
+ return chart;
+ };
+ // Kept for backwards compatibility.
+ chart.details = chart.setDetailsElement;
+
+ chart.selfValue = function (_) {
+ if (!arguments.length) {
+ return selfValue;
+ }
+ selfValue = _;
+ return chart;
+ };
+
+ chart.resetHeightOnZoom = function (_) {
+ if (!arguments.length) {
+ return resetHeightOnZoom;
+ }
+ resetHeightOnZoom = _;
+ return chart;
+ };
+
+ chart.scrollOnZoom = function (_) {
+ if (!arguments.length) {
+ return scrollOnZoom;
+ }
+ scrollOnZoom = _;
+ return chart;
+ };
+
+ chart.getName = function (_) {
+ if (!arguments.length) {
+ return getName;
+ }
+ getName = _;
+ return chart;
+ };
+
+ chart.getValue = function (_) {
+ if (!arguments.length) {
+ return getValue;
+ }
+ getValue = _;
+ return chart;
+ };
+
+ chart.getChildren = function (_) {
+ if (!arguments.length) {
+ return getChildren;
+ }
+ getChildren = _;
+ return chart;
+ };
+
+ chart.getLibtype = function (_) {
+ if (!arguments.length) {
+ return getLibtype;
+ }
+ getLibtype = _;
+ return chart;
+ };
+
+ chart.getDelta = function (_) {
+ if (!arguments.length) {
+ return getDelta;
+ }
+ getDelta = _;
+ return chart;
+ };
+
+ chart.setSearchHandler = function (_) {
+ if (!arguments.length) {
+ searchHandler = originalSearchHandler;
+ return chart;
+ }
+ searchHandler = _;
+ return chart;
+ };
+
+ chart.setDetailsHandler = function (_) {
+ if (!arguments.length) {
+ detailsHandler = originalDetailsHandler;
+ return chart;
+ }
+ detailsHandler = _;
+ return chart;
+ };
+
+ chart.setSearchMatch = function (_) {
+ if (!arguments.length) {
+ searchMatch = originalSearchMatch;
+ return chart;
+ }
+ searchMatch = _;
+ return chart;
+ };
+
+ return chart;
+ }
+
+ __webpack_exports__ = __webpack_exports__['default'];
+ /******/ return __webpack_exports__;
+ /******/
+ })();
+});
diff --git a/development/charts/table/index.html b/development/charts/table/index.html
new file mode 100644
index 000000000..ec11ecfde
--- /dev/null
+++ b/development/charts/table/index.html
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
S.No
+
Name
+
TotalTime
+
+
+
+
+
+
+
diff --git a/development/charts/table/jquery.min.js b/development/charts/table/jquery.min.js
new file mode 100644
index 000000000..8cdc80eb8
--- /dev/null
+++ b/development/charts/table/jquery.min.js
@@ -0,0 +1,18 @@
+/*!
+ * jQuery JavaScript Library v1.6.2
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu Jun 30 14:16:56 2011 -0400
+ */
+(function(a,b){function cv(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cs(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"":"")+""),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,x=function(a,b){return b.toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="