From faec12746008c20332b2efa3a560f37259df10ec Mon Sep 17 00:00:00 2001
From: yohadams
Date: Fri, 16 Dec 2022 13:45:18 +0100
Subject: [PATCH 1/3] New sankey chart, styled from designs
---
.eslintignore | 3 +
.../app/features/plugins/built_in_plugins.ts | 3 +
public/app/plugins/panel/img/logo.svg | 20 +
.../panel/sankey-panel-0.5.0/.gitignore | 31 +
.../panel/sankey-panel-0.5.0/.prettierignore | 3 +
.../plugins/panel/sankey-panel-0.5.0/LICENSE | 21 +
.../panel/sankey-panel-0.5.0/README.md | 82 ++
.../panel/sankey-panel-0.5.0/img/logo.svg | 20 +
.../panel/sankey-panel-0.5.0/module.js | 1244 +++++++++++++++++
.../sankey-panel-0.5.0/module.js.LICENSE.txt | 14 +
.../panel/sankey-panel-0.5.0/module.js.map | 1 +
.../panel/sankey-panel-0.5.0/plugin.json | 34 +
12 files changed, 1476 insertions(+)
create mode 100644 public/app/plugins/panel/img/logo.svg
create mode 100644 public/app/plugins/panel/sankey-panel-0.5.0/.gitignore
create mode 100644 public/app/plugins/panel/sankey-panel-0.5.0/.prettierignore
create mode 100644 public/app/plugins/panel/sankey-panel-0.5.0/LICENSE
create mode 100644 public/app/plugins/panel/sankey-panel-0.5.0/README.md
create mode 100644 public/app/plugins/panel/sankey-panel-0.5.0/img/logo.svg
create mode 100644 public/app/plugins/panel/sankey-panel-0.5.0/module.js
create mode 100644 public/app/plugins/panel/sankey-panel-0.5.0/module.js.LICENSE.txt
create mode 100644 public/app/plugins/panel/sankey-panel-0.5.0/module.js.map
create mode 100644 public/app/plugins/panel/sankey-panel-0.5.0/plugin.json
diff --git a/.eslintignore b/.eslintignore
index 012f471e24af..d68a243969c0 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -23,3 +23,6 @@ public/locales/**/*.js
# Auto-generated icon file
packages/grafana-ui/src/components/Icon/iconBundle.ts
+
+# Sankey chart module.js
+public/app/plugins/panel/sankey-panel-0.5.0/module.js
diff --git a/public/app/features/plugins/built_in_plugins.ts b/public/app/features/plugins/built_in_plugins.ts
index 4c28f0d7551c..e1f5c2a5ccc8 100644
--- a/public/app/features/plugins/built_in_plugins.ts
+++ b/public/app/features/plugins/built_in_plugins.ts
@@ -61,6 +61,8 @@ import * as sankeyPanel from 'app/plugins/panel/netsage-sankey-panel/module';
import * as newsPanel from 'app/plugins/panel/news/module';
import * as nodeGraph from 'app/plugins/panel/nodeGraph/module';
import * as pieChartPanel from 'app/plugins/panel/piechart/module';
+//@ts-ignore
+import * as sankey2Panel from 'app/plugins/panel/sankey-panel-0.5.0/module';
import * as statPanel from 'app/plugins/panel/stat/module';
import * as stateTimelinePanel from 'app/plugins/panel/state-timeline/module';
import * as statusHistoryPanel from 'app/plugins/panel/status-history/module';
@@ -150,6 +152,7 @@ const builtInPlugins: any = {
'app/plugins/panel/histogram/module': histogramPanel,
'app/plugins/panel/alertGroups/module': alertGroupsPanel,
'app/plugins/panel/netsage-sankey-panel/module': sankeyPanel,
+ 'app/plugins/panel/sankey-panel-0.5.0/module': sankey2Panel,
};
export default builtInPlugins;
diff --git a/public/app/plugins/panel/img/logo.svg b/public/app/plugins/panel/img/logo.svg
new file mode 100644
index 000000000000..2d41fa5441e6
--- /dev/null
+++ b/public/app/plugins/panel/img/logo.svg
@@ -0,0 +1,20 @@
+
+
\ No newline at end of file
diff --git a/public/app/plugins/panel/sankey-panel-0.5.0/.gitignore b/public/app/plugins/panel/sankey-panel-0.5.0/.gitignore
new file mode 100644
index 000000000000..521bf24711e6
--- /dev/null
+++ b/public/app/plugins/panel/sankey-panel-0.5.0/.gitignore
@@ -0,0 +1,31 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+node_modules/
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+dist/
+artifacts/
+work/
+ci/
+e2e-results/
+
+# Editors
+.idea
+
diff --git a/public/app/plugins/panel/sankey-panel-0.5.0/.prettierignore b/public/app/plugins/panel/sankey-panel-0.5.0/.prettierignore
new file mode 100644
index 000000000000..16c7d95a61e3
--- /dev/null
+++ b/public/app/plugins/panel/sankey-panel-0.5.0/.prettierignore
@@ -0,0 +1,3 @@
+src/Error.tsx
+src/Sankey.js
+src/SankeyPanel.tsx
\ No newline at end of file
diff --git a/public/app/plugins/panel/sankey-panel-0.5.0/LICENSE b/public/app/plugins/panel/sankey-panel-0.5.0/LICENSE
new file mode 100644
index 000000000000..f882365155a8
--- /dev/null
+++ b/public/app/plugins/panel/sankey-panel-0.5.0/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 Ismael
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/public/app/plugins/panel/sankey-panel-0.5.0/README.md b/public/app/plugins/panel/sankey-panel-0.5.0/README.md
new file mode 100644
index 000000000000..746ca624e314
--- /dev/null
+++ b/public/app/plugins/panel/sankey-panel-0.5.0/README.md
@@ -0,0 +1,82 @@
+# Grafana Sankey Panel
+
+Sankey diagram implementation for directed flow visualization between nodes in an acyclic network.
+
+
+
+## Installing
+
+Using the grafana-cli:
+
+```bash
+grafana-cli --pluginUrl https://github.com/IsmaelMasharo/sankey-panel/raw/master/sankey-panel.zip plugins install sankey-panel
+```
+
+## Grafana Version
+
+Tested on Grafana 7.3.1
+
+## Required Fields
+
+The diagram gets constructed from a data source **formatted as table** with 3 mandatory fields: **source** (text), **target** (text), **value** (numeric, no nulls). The diagram at the beginning was created with the following table format:
+
+| source | target | value |
+| ------ | ------ | ----- |
+| A | D | 2 |
+| B | D | 2 |
+| B | E | 2 |
+| A | F | 2 |
+| D | E | 2 |
+| D | F | 3 |
+| E | F | 4 |
+| C | D | 1 |
+| C | E | 1 |
+| E | G | 1 |
+
+Being an acyclic implementation of the Sankey diagram **loops are not allowed**:
+
+| source | target | value |
+| ------ | ------- | ----- |
+| A | B | 2 |
+| B | A (_x_) | 2 |
+
+To avoid _circular link error_ [a masked prefix](https://github.com/IsmaelMasharo/sankey-panel/issues/1#issuecomment-757972917) could be set on the target values:
+
+| source | target | value |
+| ------ | ------ | ----- |
+| A | B | 2 |
+| B | P-A | 2 |
+
+## Display Options
+
+There are 5 options for displaying the diagram: _Alignment_, _Color_, _Edge Color_, _Display Values_, _Highlight Connections_
+
+### Alignment
+
+Arranges the nodes to one of the following sides: Left, Right, Center, Justify. See d3 [sankey nodeAlign](https://github.com/d3/d3-sankey#alignments) for image reference.
+
+### Color
+
+Nodes and links color. Based on d3 [categorical schemes](https://github.com/d3/d3-scale-chromatic#categorical).
+
+### Edge Color
+
+Represents the link's color transition from source to the target node.
+
+- Input: Link takes the color of the source node.
+- Output: Link takes the color of the target node.
+- Input-Output: The link will be colored as a gradient from source to target node colors.
+- None: Gray links.
+
+### Display Values
+
+Values are shown next to the node name.
+
+- Total: Display link weight value.
+- Percentage: Display link weight percentage value relative to the source.
+- Both: Display both total and percentage.
+- None: No values displayed (except for node name).
+
+### Highlight Connections
+
+Boolean. Highlights links and nodes with a direct connection to the hovered node.
diff --git a/public/app/plugins/panel/sankey-panel-0.5.0/img/logo.svg b/public/app/plugins/panel/sankey-panel-0.5.0/img/logo.svg
new file mode 100644
index 000000000000..2d41fa5441e6
--- /dev/null
+++ b/public/app/plugins/panel/sankey-panel-0.5.0/img/logo.svg
@@ -0,0 +1,20 @@
+
+
\ No newline at end of file
diff --git a/public/app/plugins/panel/sankey-panel-0.5.0/module.js b/public/app/plugins/panel/sankey-panel-0.5.0/module.js
new file mode 100644
index 000000000000..582e66794f89
--- /dev/null
+++ b/public/app/plugins/panel/sankey-panel-0.5.0/module.js
@@ -0,0 +1,1244 @@
+/*! For license information please see module.js.LICENSE.txt */
+define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) {
+ return (function (t) {
+ var e = {};
+ function n(r) {
+ if (e[r]) return e[r].exports;
+ var o = (e[r] = { i: r, l: !1, exports: {} });
+ return t[r].call(o.exports, o, o.exports, n), (o.l = !0), o.exports;
+ }
+ return (
+ (n.m = t),
+ (n.c = e),
+ (n.d = function (t, e, r) {
+ n.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: r });
+ }),
+ (n.r = function (t) {
+ 'undefined' != typeof Symbol &&
+ Symbol.toStringTag &&
+ Object.defineProperty(t, Symbol.toStringTag, { value: 'Module' }),
+ Object.defineProperty(t, '__esModule', { value: !0 });
+ }),
+ (n.t = function (t, e) {
+ if ((1 & e && (t = n(t)), 8 & e)) return t;
+ if (4 & e && 'object' == typeof t && t && t.__esModule) return t;
+ var r = Object.create(null);
+ if ((n.r(r), Object.defineProperty(r, 'default', { enumerable: !0, value: t }), 2 & e && 'string' != typeof t))
+ for (var o in t)
+ n.d(
+ r,
+ o,
+ function (e) {
+ return t[e];
+ }.bind(null, o)
+ );
+ return r;
+ }),
+ (n.n = function (t) {
+ var e =
+ t && t.__esModule
+ ? function () {
+ return t.default;
+ }
+ : function () {
+ return t;
+ };
+ return n.d(e, 'a', e), e;
+ }),
+ (n.o = function (t, e) {
+ return Object.prototype.hasOwnProperty.call(t, e);
+ }),
+ (n.p = '/'),
+ n((n.s = 5))
+ );
+ })([
+ function (e, n) {
+ e.exports = t;
+ },
+ function (t, n) {
+ t.exports = e;
+ },
+ function (t, e) {
+ t.exports = n;
+ },
+ function (t, e) {
+ t.exports = r;
+ },
+ ,
+ function (t, e, n) {
+ 'use strict';
+ n.r(e);
+ var r = {};
+ n.r(r),
+ n.d(r, 'sankey', function () {
+ return M;
+ }),
+ n.d(r, 'sankeyCenter', function () {
+ return _;
+ }),
+ n.d(r, 'sankeyLeft', function () {
+ return d;
+ }),
+ n.d(r, 'sankeyRight', function () {
+ return g;
+ }),
+ n.d(r, 'sankeyJustify', function () {
+ return y;
+ }),
+ n.d(r, 'sankeyLinkHorizontal', function () {
+ return D;
+ });
+ var o = n(2);
+ function i(t, e) {
+ var n = 'function' == typeof Symbol && t[Symbol.iterator];
+ if (!n) return t;
+ var r,
+ o,
+ i = n.call(t),
+ a = [];
+ try {
+ for (; (void 0 === e || e-- > 0) && !(r = i.next()).done; ) a.push(r.value);
+ } catch (t) {
+ o = { error: t };
+ } finally {
+ try {
+ r && !r.done && (n = i.return) && n.call(i);
+ } finally {
+ if (o) throw o.error;
+ }
+ }
+ return a;
+ }
+ var a = n(0),
+ s = n.n(a),
+ u = n(1);
+ function l(t, e) {
+ let n = 0;
+ if (void 0 === e) for (let e of t) (e = +e) && (n += e);
+ else {
+ let r = -1;
+ for (let o of t) (o = +e(o, ++r, t)) && (n += o);
+ }
+ return n;
+ }
+ function c(t, e) {
+ let n;
+ if (void 0 === e) for (const e of t) null != e && (n < e || (void 0 === n && e >= e)) && (n = e);
+ else {
+ let r = -1;
+ for (let o of t) null != (o = e(o, ++r, t)) && (n < o || (void 0 === n && o >= o)) && (n = o);
+ }
+ return n;
+ }
+ function h(t, e) {
+ let n;
+ if (void 0 === e) for (const e of t) null != e && (n > e || (void 0 === n && e >= e)) && (n = e);
+ else {
+ let r = -1;
+ for (let o of t) null != (o = e(o, ++r, t)) && (n > o || (void 0 === n && o >= o)) && (n = o);
+ }
+ return n;
+ }
+ function f(t) {
+ return t.target.depth;
+ }
+ function d(t) {
+ return t.depth;
+ }
+ function g(t, e) {
+ return e - 1 - t.height;
+ }
+ function y(t, e) {
+ return t.sourceLinks.length ? t.depth : e - 1;
+ }
+ function _(t) {
+ return t.targetLinks.length ? t.depth : t.sourceLinks.length ? h(t.sourceLinks, f) - 1 : 0;
+ }
+ function p(t) {
+ return function () {
+ return t;
+ };
+ }
+ function v(t, e) {
+ return m(t.source, e.source) || t.index - e.index;
+ }
+ function k(t, e) {
+ return m(t.target, e.target) || t.index - e.index;
+ }
+ function m(t, e) {
+ return t.y0 - e.y0;
+ }
+ function b(t) {
+ return t.value;
+ }
+ function x(t) {
+ return t.index;
+ }
+ function w(t) {
+ return t.nodes;
+ }
+ function L(t) {
+ return t.links;
+ }
+ function S(t, e) {
+ const n = t.get(e);
+ if (!n) throw new Error('missing: ' + e);
+ return n;
+ }
+ function A({ nodes: t }) {
+ for (const e of t) {
+ let t = e.y0,
+ n = t;
+ for (const n of e.sourceLinks) (n.y0 = t + n.width / 2), (t += n.width);
+ for (const t of e.targetLinks) (t.y1 = n + t.width / 2), (n += t.width);
+ }
+ }
+ function M() {
+ let t,
+ e,
+ n,
+ r = 0,
+ o = 0,
+ i = 1,
+ a = 1,
+ s = 24,
+ u = 8,
+ f = x,
+ d = y,
+ g = w,
+ _ = L,
+ M = 6;
+ function O() {
+ const t = { nodes: g.apply(null, arguments), links: _.apply(null, arguments) };
+ return T(t), j(t), C(t), P(t), V(t), A(t), t;
+ }
+ function T({ nodes: t, links: e }) {
+ for (const [e, n] of t.entries()) (n.index = e), (n.sourceLinks = []), (n.targetLinks = []);
+ const r = new Map(t.map((e, n) => [f(e, n, t), e]));
+ for (const [t, n] of e.entries()) {
+ n.index = t;
+ let { source: e, target: o } = n;
+ 'object' != typeof e && (e = n.source = S(r, e)),
+ 'object' != typeof o && (o = n.target = S(r, o)),
+ e.sourceLinks.push(n),
+ o.targetLinks.push(n);
+ }
+ if (null != n) for (const { sourceLinks: e, targetLinks: r } of t) e.sort(n), r.sort(n);
+ }
+ function j({ nodes: t }) {
+ for (const e of t)
+ e.value = void 0 === e.fixedValue ? Math.max(l(e.sourceLinks, b), l(e.targetLinks, b)) : e.fixedValue;
+ }
+ function C({ nodes: t }) {
+ const e = t.length;
+ let n = new Set(t),
+ r = new Set(),
+ o = 0;
+ for (; n.size; ) {
+ for (const t of n) {
+ t.depth = o;
+ for (const { target: e } of t.sourceLinks) r.add(e);
+ }
+ if (++o > e) throw new Error('circular link');
+ (n = r), (r = new Set());
+ }
+ }
+ function P({ nodes: t }) {
+ const e = t.length;
+ let n = new Set(t),
+ r = new Set(),
+ o = 0;
+ for (; n.size; ) {
+ for (const t of n) {
+ t.height = o;
+ for (const { source: e } of t.targetLinks) r.add(e);
+ }
+ if (++o > e) throw new Error('circular link');
+ (n = r), (r = new Set());
+ }
+ }
+ function V(n) {
+ const f = (function ({ nodes: t }) {
+ const n = c(t, (t) => t.depth) + 1,
+ o = (i - r - s) / (n - 1),
+ a = new Array(n);
+ for (const e of t) {
+ const t = Math.max(0, Math.min(n - 1, Math.floor(d.call(null, e, n))));
+ (e.layer = t), (e.x0 = r + t * o), (e.x1 = e.x0 + s), a[t] ? a[t].push(e) : (a[t] = [e]);
+ }
+ if (e) for (const t of a) t.sort(e);
+ return a;
+ })(n);
+ (t = Math.min(u, (a - o) / (c(f, (t) => t.length) - 1))),
+ (function (e) {
+ const n = h(e, (e) => (a - o - (e.length - 1) * t) / l(e, b));
+ for (const r of e) {
+ let e = o;
+ for (const o of r) {
+ (o.y0 = e), (o.y1 = e + o.value * n), (e = o.y1 + t);
+ for (const t of o.sourceLinks) t.width = t.value * n;
+ }
+ e = (a - e + t) / (r.length + 1);
+ for (let t = 0; t < r.length; ++t) {
+ const n = r[t];
+ (n.y0 += e * (t + 1)), (n.y1 += e * (t + 1));
+ }
+ I(r);
+ }
+ })(f);
+ for (let t = 0; t < M; ++t) {
+ const e = Math.pow(0.99, t),
+ n = Math.max(1 - e, (t + 1) / M);
+ B(f, e, n), E(f, e, n);
+ }
+ }
+ function E(t, n, r) {
+ for (let o = 1, i = t.length; o < i; ++o) {
+ const i = t[o];
+ for (const t of i) {
+ let e = 0,
+ r = 0;
+ for (const { source: n, value: o } of t.targetLinks) {
+ let i = o * (t.layer - n.layer);
+ (e += J(n, t) * i), (r += i);
+ }
+ if (!(r > 0)) continue;
+ let o = (e / r - t.y0) * n;
+ (t.y0 += o), (t.y1 += o), G(t);
+ }
+ void 0 === e && i.sort(m), H(i, r);
+ }
+ }
+ function B(t, n, r) {
+ for (let o = t.length - 2; o >= 0; --o) {
+ const i = t[o];
+ for (const t of i) {
+ let e = 0,
+ r = 0;
+ for (const { target: n, value: o } of t.sourceLinks) {
+ let i = o * (n.layer - t.layer);
+ (e += R(t, n) * i), (r += i);
+ }
+ if (!(r > 0)) continue;
+ let o = (e / r - t.y0) * n;
+ (t.y0 += o), (t.y1 += o), G(t);
+ }
+ void 0 === e && i.sort(m), H(i, r);
+ }
+ }
+ function H(e, n) {
+ const r = e.length >> 1,
+ i = e[r];
+ z(e, i.y0 - t, r - 1, n), N(e, i.y1 + t, r + 1, n), z(e, a, e.length - 1, n), N(e, o, 0, n);
+ }
+ function N(e, n, r, o) {
+ for (; r < e.length; ++r) {
+ const i = e[r],
+ a = (n - i.y0) * o;
+ a > 1e-6 && ((i.y0 += a), (i.y1 += a)), (n = i.y1 + t);
+ }
+ }
+ function z(e, n, r, o) {
+ for (; r >= 0; --r) {
+ const i = e[r],
+ a = (i.y1 - n) * o;
+ a > 1e-6 && ((i.y0 -= a), (i.y1 -= a)), (n = i.y0 - t);
+ }
+ }
+ function G({ sourceLinks: t, targetLinks: e }) {
+ if (void 0 === n) {
+ for (const {
+ source: { sourceLinks: t },
+ } of e)
+ t.sort(k);
+ for (const {
+ target: { targetLinks: e },
+ } of t)
+ e.sort(v);
+ }
+ }
+ function I(t) {
+ if (void 0 === n) for (const { sourceLinks: e, targetLinks: n } of t) e.sort(k), n.sort(v);
+ }
+ function J(e, n) {
+ let r = e.y0 - ((e.sourceLinks.length - 1) * t) / 2;
+ for (const { target: o, width: i } of e.sourceLinks) {
+ if (o === n) break;
+ r += i + t;
+ }
+ for (const { source: t, width: o } of n.targetLinks) {
+ if (t === e) break;
+ r -= o;
+ }
+ return r;
+ }
+ function R(e, n) {
+ let r = n.y0 - ((n.targetLinks.length - 1) * t) / 2;
+ for (const { source: o, width: i } of n.targetLinks) {
+ if (o === e) break;
+ r += i + t;
+ }
+ for (const { target: t, width: o } of e.sourceLinks) {
+ if (t === n) break;
+ r -= o;
+ }
+ return r;
+ }
+ return (
+ (O.update = function (t) {
+ return A(t), t;
+ }),
+ (O.nodeId = function (t) {
+ return arguments.length ? ((f = 'function' == typeof t ? t : p(t)), O) : f;
+ }),
+ (O.nodeAlign = function (t) {
+ return arguments.length ? ((d = 'function' == typeof t ? t : p(t)), O) : d;
+ }),
+ (O.nodeSort = function (t) {
+ return arguments.length ? ((e = t), O) : e;
+ }),
+ (O.nodeWidth = function (t) {
+ return arguments.length ? ((s = +t), O) : s;
+ }),
+ (O.nodePadding = function (e) {
+ return arguments.length ? ((u = t = +e), O) : u;
+ }),
+ (O.nodes = function (t) {
+ return arguments.length ? ((g = 'function' == typeof t ? t : p(t)), O) : g;
+ }),
+ (O.links = function (t) {
+ return arguments.length ? ((_ = 'function' == typeof t ? t : p(t)), O) : _;
+ }),
+ (O.linkSort = function (t) {
+ return arguments.length ? ((n = t), O) : n;
+ }),
+ (O.size = function (t) {
+ return arguments.length ? ((r = o = 0), (i = +t[0]), (a = +t[1]), O) : [i - r, a - o];
+ }),
+ (O.extent = function (t) {
+ return arguments.length
+ ? ((r = +t[0][0]), (i = +t[1][0]), (o = +t[0][1]), (a = +t[1][1]), O)
+ : [
+ [r, o],
+ [i, a],
+ ];
+ }),
+ (O.iterations = function (t) {
+ return arguments.length ? ((M = +t), O) : M;
+ }),
+ O
+ );
+ }
+ var O = Math.PI,
+ T = 2 * O,
+ j = T - 1e-6;
+ function C() {
+ (this._x0 = this._y0 = this._x1 = this._y1 = null), (this._ = '');
+ }
+ function P() {
+ return new C();
+ }
+ C.prototype = P.prototype = {
+ constructor: C,
+ moveTo: function (t, e) {
+ this._ += 'M' + (this._x0 = this._x1 = +t) + ',' + (this._y0 = this._y1 = +e);
+ },
+ closePath: function () {
+ null !== this._x1 && ((this._x1 = this._x0), (this._y1 = this._y0), (this._ += 'Z'));
+ },
+ lineTo: function (t, e) {
+ this._ += 'L' + (this._x1 = +t) + ',' + (this._y1 = +e);
+ },
+ quadraticCurveTo: function (t, e, n, r) {
+ this._ += 'Q' + +t + ',' + +e + ',' + (this._x1 = +n) + ',' + (this._y1 = +r);
+ },
+ bezierCurveTo: function (t, e, n, r, o, i) {
+ this._ += 'C' + +t + ',' + +e + ',' + +n + ',' + +r + ',' + (this._x1 = +o) + ',' + (this._y1 = +i);
+ },
+ arcTo: function (t, e, n, r, o) {
+ (t = +t), (e = +e), (n = +n), (r = +r), (o = +o);
+ var i = this._x1,
+ a = this._y1,
+ s = n - t,
+ u = r - e,
+ l = i - t,
+ c = a - e,
+ h = l * l + c * c;
+ if (o < 0) throw new Error('negative radius: ' + o);
+ if (null === this._x1) this._ += 'M' + (this._x1 = t) + ',' + (this._y1 = e);
+ else if (h > 1e-6)
+ if (Math.abs(c * s - u * l) > 1e-6 && o) {
+ var f = n - i,
+ d = r - a,
+ g = s * s + u * u,
+ y = f * f + d * d,
+ _ = Math.sqrt(g),
+ p = Math.sqrt(h),
+ v = o * Math.tan((O - Math.acos((g + h - y) / (2 * _ * p))) / 2),
+ k = v / p,
+ m = v / _;
+ Math.abs(k - 1) > 1e-6 && (this._ += 'L' + (t + k * l) + ',' + (e + k * c)),
+ (this._ +=
+ 'A' +
+ o +
+ ',' +
+ o +
+ ',0,0,' +
+ +(c * f > l * d) +
+ ',' +
+ (this._x1 = t + m * s) +
+ ',' +
+ (this._y1 = e + m * u));
+ } else this._ += 'L' + (this._x1 = t) + ',' + (this._y1 = e);
+ else;
+ },
+ arc: function (t, e, n, r, o, i) {
+ (t = +t), (e = +e), (i = !!i);
+ var a = (n = +n) * Math.cos(r),
+ s = n * Math.sin(r),
+ u = t + a,
+ l = e + s,
+ c = 1 ^ i,
+ h = i ? r - o : o - r;
+ if (n < 0) throw new Error('negative radius: ' + n);
+ null === this._x1
+ ? (this._ += 'M' + u + ',' + l)
+ : (Math.abs(this._x1 - u) > 1e-6 || Math.abs(this._y1 - l) > 1e-6) && (this._ += 'L' + u + ',' + l),
+ n &&
+ (h < 0 && (h = (h % T) + T),
+ h > j
+ ? (this._ +=
+ 'A' +
+ n +
+ ',' +
+ n +
+ ',0,1,' +
+ c +
+ ',' +
+ (t - a) +
+ ',' +
+ (e - s) +
+ 'A' +
+ n +
+ ',' +
+ n +
+ ',0,1,' +
+ c +
+ ',' +
+ (this._x1 = u) +
+ ',' +
+ (this._y1 = l))
+ : h > 1e-6 &&
+ (this._ +=
+ 'A' +
+ n +
+ ',' +
+ n +
+ ',0,' +
+ +(h >= O) +
+ ',' +
+ c +
+ ',' +
+ (this._x1 = t + n * Math.cos(o)) +
+ ',' +
+ (this._y1 = e + n * Math.sin(o))));
+ },
+ rect: function (t, e, n, r) {
+ this._ +=
+ 'M' + (this._x0 = this._x1 = +t) + ',' + (this._y0 = this._y1 = +e) + 'h' + +n + 'v' + +r + 'h' + -n + 'Z';
+ },
+ toString: function () {
+ return this._;
+ },
+ };
+ var V = P,
+ E = Array.prototype.slice,
+ B = function (t) {
+ return function () {
+ return t;
+ };
+ };
+ function H(t) {
+ return t[0];
+ }
+ function N(t) {
+ return t[1];
+ }
+ function z(t) {
+ return t.source;
+ }
+ function G(t) {
+ return t.target;
+ }
+ function I(t) {
+ var e = z,
+ n = G,
+ r = H,
+ o = N,
+ i = null;
+ function a() {
+ var a,
+ s = E.call(arguments),
+ u = e.apply(this, s),
+ l = n.apply(this, s);
+ if (
+ (i || (i = a = V()),
+ t(
+ i,
+ +r.apply(this, ((s[0] = u), s)),
+ +o.apply(this, s),
+ +r.apply(this, ((s[0] = l), s)),
+ +o.apply(this, s)
+ ),
+ a)
+ )
+ return (i = null), a + '' || null;
+ }
+ return (
+ (a.source = function (t) {
+ return arguments.length ? ((e = t), a) : e;
+ }),
+ (a.target = function (t) {
+ return arguments.length ? ((n = t), a) : n;
+ }),
+ (a.x = function (t) {
+ return arguments.length ? ((r = 'function' == typeof t ? t : B(+t)), a) : r;
+ }),
+ (a.y = function (t) {
+ return arguments.length ? ((o = 'function' == typeof t ? t : B(+t)), a) : o;
+ }),
+ (a.context = function (t) {
+ return arguments.length ? ((i = null == t ? null : t), a) : i;
+ }),
+ a
+ );
+ }
+ function J(t, e, n, r, o) {
+ t.moveTo(e, n), t.bezierCurveTo((e = (e + r) / 2), n, e, o, r, o);
+ }
+ function R(t) {
+ return [t.source.x1, t.y0];
+ }
+ function W(t) {
+ return [t.target.x0, t.y1];
+ }
+ var D = function () {
+ return I(J).source(R).target(W);
+ };
+ function q(t, e) {
+ for (var n = 0; n < e.length; n++) {
+ var r = e[n];
+ (r.enumerable = r.enumerable || !1),
+ (r.configurable = !0),
+ 'value' in r && (r.writable = !0),
+ Object.defineProperty(t, r.key, r);
+ }
+ }
+ var F = 'total',
+ U = 'percentage',
+ Z = 'both',
+ Q = 'none',
+ K = 'path',
+ X = 'input',
+ Y = 'output',
+ $ = (function () {
+ function t(e, n) {
+ !(function (t, e) {
+ if (!(t instanceof e)) throw new TypeError('Cannot call a class as a function');
+ })(this, t),
+ (this._svg = e),
+ (this._container = n || e),
+ (this._gBound = null),
+ (this._data = null),
+ (this._nodes = null),
+ (this._links = null),
+ (this._width = 0),
+ (this._height = 0),
+ (this._boundedWidth = 0),
+ (this._boundedHeight = 0),
+ (this._marginTop = 20),
+ (this._marginRight = 20),
+ (this._marginBottom = 20),
+ (this._marginLeft = 20),
+ (this._background = 'rgba(0, 0, 0, 0)'),
+ (this._edgeColor = 'path'),
+ (this._colorScheme = 'Tableau10'),
+ (this._colorScale = null),
+ (this._colorArray = ''),
+ (this._sankeyAlignType = 'Justify'),
+ (this._sankeyAlign = null),
+ (this._sankeyGenerator = null),
+ (this._sankeyNodeWith = 85),
+ (this._sankeyNodePadding = 20),
+ (this._svgNode = null),
+ (this._svgLink = null),
+ (this._displayValues = 'none'),
+ (this._highlightOnHover = !1);
+ }
+ var e, n, o;
+ return (
+ (e = t),
+ (n = [
+ {
+ key: '_init',
+ value: function () {
+ this._setBoundDimensions(), this._setColorScale(), this._configureSankey(), this._calculateSankey();
+ },
+ },
+ {
+ key: '_setBoundDimensions',
+ value: function () {
+ (this._boundedWidth = this._width - this._marginLeft - this._marginRight),
+ (this._boundedHeight = this._height - this._marginTop - this._marginBottom);
+ },
+ },
+ {
+ key: '_setColorScale',
+ value: function () {
+ this._colorScale = u.scaleOrdinal(u['scheme'.concat(this._colorScheme)]);
+ },
+ },
+ {
+ key: '_color',
+ value: function (t) {
+ return this._colorScale(t.name);
+ },
+ },
+ {
+ key: '_configureSankey',
+ value: function () {
+ (this._sankeyAlign = r['sankey'.concat(this._sankeyAlignType)]),
+ (this._sankeyGenerator = M()
+ .nodeId(function (t) {
+ return t.name;
+ })
+ .nodeAlign(this._sankeyAlign)
+ .nodeWidth(this._sankeyNodeWith)
+ .nodePadding(this._sankeyNodePadding)
+ .extent([
+ [0, 0],
+ [this._boundedWidth, this._boundedHeight],
+ ]));
+ },
+ },
+ {
+ key: '_calculateSankey',
+ value: function () {
+ var t = this._sankeyGenerator({
+ nodes: this._data.nodes.map(function (t) {
+ return Object.assign({}, t);
+ }),
+ links: this._data.links.map(function (t) {
+ return Object.assign({}, t);
+ }),
+ });
+ (this._nodes = t.nodes), (this._links = t.links);
+ },
+ },
+ {
+ key: '_validate',
+ value: function () {
+ return (
+ this._data &&
+ this._data.nodes &&
+ this._data.links &&
+ this._data.nodes.length > 0 &&
+ this._data.links.length > 0
+ );
+ },
+ },
+ {
+ key: '_setLinkGradient',
+ value: function () {
+ var t = this,
+ e = this._svgLink
+ .append('linearGradient')
+ .attr('id', function (t) {
+ return (t.uid = 'link-'.concat(t.index, '-').concat(Math.random()));
+ })
+ .attr('gradientUnits', 'userSpaceOnUse')
+ .attr('x1', function (t) {
+ return t.source.x1;
+ })
+ .attr('x2', function (t) {
+ return t.target.x0;
+ });
+ e
+ .append('stop')
+ .attr('offset', '0%')
+ .attr('stop-color', function (e) {
+ return t._color(e.source);
+ }),
+ e
+ .append('stop')
+ .attr('offset', '100%')
+ .attr('stop-color', function (e) {
+ return t._color(e.target);
+ });
+ },
+ },
+ {
+ key: '_setLinkStroke',
+ value: function (t) {
+ switch (this._edgeColor) {
+ case Q:
+ return '#aaa';
+ case K:
+ return 'url(#'.concat(t.uid, ')');
+ case X:
+ return this._color(t.source);
+ case Y:
+ return this._color(t.target);
+ default:
+ return;
+ }
+ },
+ },
+ {
+ key: '_showLinks',
+ value: function (t) {
+ var e = [];
+ [
+ { linkType: 'sourceLinks', nodeType: 'target' },
+ { linkType: 'targetLinks', nodeType: 'source' },
+ ].forEach(function (n) {
+ t[n.linkType].forEach(function (t) {
+ e.push(t[n.nodeType]);
+ });
+ }),
+ this._gBound.selectAll('.sankey-node').style('opacity', function (n) {
+ return t.name === n.name ||
+ e.find(function (t) {
+ return t.name === n.name;
+ })
+ ? '1'
+ : '0.2';
+ }),
+ this._gBound.selectAll('.sankey-link').style('opacity', function (e) {
+ return !e || (e.source.name !== t.name && e.target.name !== t.name) ? '0.2' : '1';
+ });
+ },
+ },
+ {
+ key: '_showAll',
+ value: function () {
+ this._gBound.selectAll('.sankey-node').style('opacity', '1'),
+ this._gBound.selectAll('.sankey-link').style('opacity', '1');
+ },
+ },
+ {
+ key: '_formatValue',
+ value: function (t) {
+ return u.format('.2~f')(t);
+ },
+ },
+ {
+ key: '_formatPercent',
+ value: function (t) {
+ return u.format('.2~%')(t);
+ },
+ },
+ {
+ key: '_formatThousand',
+ value: function (t) {
+ return u.format('.3~s')(t);
+ },
+ },
+ {
+ key: '_labelNode',
+ value: function (t) {
+ var e = this._nodes.filter(function (e) {
+ return e.depth === t.depth;
+ }),
+ n = u.sum(e, function (t) {
+ return t.value;
+ }),
+ r = this._formatThousand(t.value),
+ o = this._formatPercent(t.value / n),
+ i = t.name;
+ switch (this._displayValues) {
+ case F:
+ i = ''.concat(i, '\n ').concat(r);
+ break;
+ case U:
+ i = ''.concat(i, '\n ').concat(o);
+ break;
+ case Z:
+ i = ''.concat(i, '\n ').concat(o, ' - ').concat(r);
+ }
+ return i;
+ },
+ },
+ {
+ key: '_renderSVG',
+ value: function () {
+ var t = this;
+ this._container.style('background-color', this._background),
+ (this._gBound = this._container
+ .append('g')
+ .attr('transform', 'translate('.concat(this._marginLeft, ', ').concat(this._marginTop, ')'))),
+ (this._svgNode = this._gBound
+ .append('g')
+ .attr('stroke', '#000')
+ .selectAll('.sankey-node')
+ .data(this._nodes, function (t) {
+ return t.name;
+ })
+ .join('rect')
+ .attr('class', 'sankey-node')
+ .attr('id', function (t) {
+ return t.name;
+ })
+ .attr('x', function (t) {
+ return t.x0;
+ })
+ .attr('y', function (t) {
+ return t.y0;
+ })
+ .attr('rx', 2)
+ .attr('ry', 2)
+ .attr('height', function (t) {
+ return t.y1 - t.y0;
+ })
+ .attr('width', function (t) {
+ return t.x1 - t.x0;
+ })
+ .attr('stroke', function (e) {
+ var n = JSON.parse(t._colorArray);
+ return Object.keys(n).includes(e.name) ? n[e.name] : 'rgba(148, 153, 168, 1)';
+ })
+ .attr('fill', function (e) {
+ var n = JSON.parse(t._colorArray);
+ return Object.keys(n).includes(e.name) ? n[e.name] : 'rgba(148, 153, 168, 1)';
+ })
+ .on('mouseover', function (e) {
+ return t._highlightOnHover && t._showLinks(e);
+ })
+ .on('mouseout', function (e) {
+ return t._highlightOnHover && t._showAll();
+ })),
+ (this._svgLink = this._gBound
+ .append('g')
+ .attr('fill', 'none')
+ .attr('stroke-opacity', 0.3)
+ .selectAll('g')
+ .data(this._links, function (t) {
+ return ''.concat(t.source.name, '-').concat(t.target.name);
+ })
+ .join('g')
+ .style('mix-blend-mode', 'multiply')),
+ 'path' === this._edgeColor && this._setLinkGradient(),
+ this._svgLink
+ .append('path')
+ .attr('class', 'sankey-link')
+ .attr('d', D())
+ .attr('stroke', 'rgba(182, 185, 196, 1)')
+ .attr('stroke-width', function (t) {
+ return Math.max(1, t.width);
+ }),
+ this._gBound
+ .append('g')
+ .attr('font-family', 'sans-serif')
+ .attr('font-size', 10)
+ .selectAll('text')
+ .data(this._nodes)
+ .join('text')
+ .attr('x', function (t) {
+ return t.x0 + 8;
+ })
+ .attr('y', function (t) {
+ return (t.y1 + t.y0) / 2;
+ })
+ .attr('dy', '0.35em')
+ .text(function (e) {
+ return t._labelNode(e);
+ }),
+ this._gBound
+ .append('g')
+ .attr('font-family', 'sans-serif')
+ .attr('font-size', 10)
+ .selectAll('text')
+ .data(this._nodes)
+ .join('text')
+ .attr('x', function (t) {
+ return t.x0 + 8;
+ })
+ .attr('font-size', 14)
+ .attr('font-weight', '700')
+ .attr('y', function (t) {
+ return (t.y1 + t.y0) / 2 + 16;
+ })
+ .attr('dy', '0.35em')
+ .text(function (e) {
+ return t._formatValue(e.value);
+ }),
+ this._svgNode.append('title').text(function (e) {
+ return ''.concat(e.name, '\n').concat(t._formatValue(e.value));
+ }),
+ this._svgLink.append('title').text(function (e) {
+ return ''
+ .concat(e.source.name, ' → ')
+ .concat(e.target.name, '\n')
+ .concat(t._formatValue(e.value));
+ });
+ },
+ },
+ {
+ key: 'data',
+ value: function (t) {
+ return arguments.length ? ((this._data = t), this) : this._data;
+ },
+ },
+ {
+ key: 'width',
+ value: function (t) {
+ return arguments.length ? ((this._width = +t), this) : this._width;
+ },
+ },
+ {
+ key: 'height',
+ value: function (t) {
+ return arguments.length ? ((this._height = +t), this) : this._height;
+ },
+ },
+ {
+ key: 'align',
+ value: function (t) {
+ return arguments.length ? ((this._sankeyAlignType = t), this) : this._sankeyAlignType;
+ },
+ },
+ {
+ key: 'colorScheme',
+ value: function (t) {
+ return arguments.length ? ((this._colorScheme = t), this) : this._colorScheme;
+ },
+ },
+ {
+ key: 'colorArray',
+ value: function (t) {
+ return arguments.length ? ((this._colorArray = t), this) : this._colorArray;
+ },
+ },
+ {
+ key: 'edgeColor',
+ value: function (t) {
+ return arguments.length ? ((this._edgeColor = t), this) : this._edgeColor;
+ },
+ },
+ {
+ key: 'displayValues',
+ value: function (t) {
+ return arguments.length ? ((this._displayValues = t), this) : this._displayValues;
+ },
+ },
+ {
+ key: 'highlightOnHover',
+ value: function (t) {
+ return arguments.length ? ((this._highlightOnHover = t), this) : this._highlightOnHover;
+ },
+ },
+ {
+ key: 'render',
+ value: function () {
+ return this._validate() && (this._init(), this._renderSVG()), this;
+ },
+ },
+ ]) && q(e.prototype, n),
+ o && q(e, o),
+ t
+ );
+ })(),
+ tt = n(3),
+ et = function (t) {
+ var e = t.message;
+ return s.a.createElement(
+ 'p',
+ { style: nt },
+ s.a.createElement(
+ 'div',
+ { style: rt },
+ s.a.createElement(tt.Icon, { name: 'exclamation-triangle' }),
+ s.a.createElement('div', { style: ot }, e)
+ )
+ );
+ },
+ nt = { height: '100%', display: 'flex', justifyContent: 'center', alignItems: 'center' },
+ rt = {
+ padding: '15px 20px',
+ marginBottom: '4px',
+ position: 'relative',
+ color: 'rgb(255, 255, 255)',
+ textShadow: 'rgb(0 0 0 / 20%) 0px 1px 0px',
+ borderRadius: '3px',
+ display: 'flex',
+ flexDirection: 'row',
+ alignItems: 'center',
+ background: 'linear-gradient(90deg, rgb(224, 47, 68), rgb(224, 47, 68))',
+ },
+ ot = { marginLeft: 10 };
+ n.d(e, 'plugin', function () {
+ return it;
+ });
+ var it = new o.PanelPlugin(function (t) {
+ var e = t.options,
+ n = t.data,
+ r = t.width,
+ o = t.height,
+ l = { source: 'source', target: 'target', value: 'value' },
+ c = 'Required fields not present: ' + Object.keys(l).join(', '),
+ h = i(Object(a.useState)({ isError: !1, message: '' }), 2),
+ f = h[0],
+ d = h[1],
+ g = i(Object(a.useState)({ nodes: [], links: [] }), 2),
+ y = g[0],
+ _ = g[1];
+ Object(a.useEffect)(
+ function () {
+ n.error ? d({ isError: !0, message: n.error.message }) : _(p());
+ },
+ [n]
+ );
+ var p = function () {
+ var t = n.series[0],
+ e = t.fields.find(function (t) {
+ return t.name === l.source;
+ }),
+ r = t.fields.find(function (t) {
+ return t.name === l.target;
+ }),
+ o = t.fields.find(function (t) {
+ return t.name === l.value;
+ }),
+ i = null == e ? void 0 : e.values.toArray(),
+ a = null == r ? void 0 : r.values.toArray(),
+ s = null == o ? void 0 : o.values.toArray();
+ if (
+ (function (t, e, n) {
+ var r = !0;
+ if (!(t && e && n)) return d({ isError: !0, message: c }), !1;
+ var o = t.every(function (t) {
+ return 'string' == typeof t;
+ }),
+ i = e.every(function (t) {
+ return 'string' == typeof t;
+ }),
+ a = n.every(function (t) {
+ return 'number' == typeof t;
+ });
+ return o && i && a
+ ? (d({}), r)
+ : (d({
+ isError: !0,
+ message:
+ 'Fields should have the following types: source (string), target (string), value (numeric)',
+ }),
+ !1);
+ })(i, a, s)
+ ) {
+ var h = u.zip(i, a, s);
+ return {
+ nodes: Array.from(new Set(i.concat(a))).map(function (t) {
+ return { name: t };
+ }),
+ links: h.map(function (t) {
+ return { source: t[0], target: t[1], value: +t[2].toFixed(2) };
+ }),
+ };
+ }
+ },
+ v = function (t) {
+ var n = new $(t)
+ .width(r)
+ .height(o)
+ .align(e.align)
+ .edgeColor(e.edgeColor)
+ .colorScheme(e.colorScheme)
+ .displayValues(e.displayValues)
+ .highlightOnHover(e.highlightOnHover)
+ .colorArray(e.colorArray)
+ .data(y);
+ try {
+ n.render();
+ } catch (t) {
+ d({ isError: !0, message: t.message });
+ }
+ };
+ return f.isError
+ ? s.a.createElement(et, { message: f.message })
+ : s.a.createElement('svg', {
+ viewBox: '0 0 ' + r + ' ' + o,
+ ref: function (t) {
+ u.select(t).selectAll('*').remove(), u.select(t).call(v);
+ },
+ });
+ }).setPanelOptions(function (t) {
+ return t
+ .addSelect({
+ path: 'align',
+ name: 'Align',
+ defaultValue: 'Justify',
+ settings: {
+ options: [
+ { value: 'Justify', label: 'Justify' },
+ { value: 'Left', label: 'Left' },
+ { value: 'Right', label: 'Right' },
+ { value: 'Center', label: 'Center' },
+ ],
+ },
+ })
+ .addTextInput({ path: 'colorArray', name: 'Color Object', defaultValue: '' })
+ .addSelect({
+ path: 'colorScheme',
+ name: 'Color',
+ defaultValue: 'Tableau10',
+ settings: {
+ options: [
+ { value: 'Tableau10', label: 'Tableau10' },
+ { value: 'Category10', label: 'Category10' },
+ { value: 'Accent', label: 'Accent' },
+ { value: 'Dark2', label: 'Dark2' },
+ { value: 'Paired', label: 'Paired' },
+ { value: 'Pastel1', label: 'Pastel1' },
+ { value: 'Pastel2', label: 'Pastel2' },
+ { value: 'Set1', label: 'Set1' },
+ { value: 'Set2', label: 'Set2' },
+ { value: 'Set3', label: 'Set3' },
+ ],
+ },
+ })
+ .addSelect({
+ path: 'edgeColor',
+ name: 'Edge Color',
+ defaultValue: 'path',
+ settings: {
+ options: [
+ { value: 'path', label: 'input-output' },
+ { value: 'input', label: 'input' },
+ { value: 'output', label: 'output' },
+ { value: 'none', label: 'none' },
+ ],
+ },
+ })
+ .addSelect({
+ path: 'displayValues',
+ name: 'Display Values',
+ defaultValue: 'none',
+ settings: {
+ options: [
+ { value: 'total', label: 'Totals' },
+ { value: 'percentage', label: 'Percentages' },
+ { value: 'both', label: 'Both' },
+ { value: 'none', label: 'None' },
+ ],
+ },
+ })
+ .addBooleanSwitch({
+ path: 'highlightOnHover',
+ name: 'Highlight connections on node hover',
+ defaultValue: !1,
+ });
+ });
+ },
+ ]);
+});
+//# sourceMappingURL=module.js.map
diff --git a/public/app/plugins/panel/sankey-panel-0.5.0/module.js.LICENSE.txt b/public/app/plugins/panel/sankey-panel-0.5.0/module.js.LICENSE.txt
new file mode 100644
index 000000000000..c18ab1d93b2f
--- /dev/null
+++ b/public/app/plugins/panel/sankey-panel-0.5.0/module.js.LICENSE.txt
@@ -0,0 +1,14 @@
+/*! *****************************************************************************
+Copyright (c) Microsoft Corporation.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+***************************************************************************** */
diff --git a/public/app/plugins/panel/sankey-panel-0.5.0/module.js.map b/public/app/plugins/panel/sankey-panel-0.5.0/module.js.map
new file mode 100644
index 000000000000..0c44a00ad1a5
--- /dev/null
+++ b/public/app/plugins/panel/sankey-panel-0.5.0/module.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///external \"react\"","webpack:///external \"d3\"","webpack:///external \"@grafana/data\"","webpack:///external \"@grafana/ui\"","webpack:///../node_modules/tslib/tslib.es6.js","webpack:///../node_modules/d3-sankey/node_modules/d3-array/src/sum.js","webpack:///../node_modules/d3-sankey/node_modules/d3-array/src/max.js","webpack:///../node_modules/d3-sankey/node_modules/d3-array/src/min.js","webpack:///../node_modules/d3-sankey/src/align.js","webpack:///../node_modules/d3-sankey/src/constant.js","webpack:///../node_modules/d3-sankey/src/sankey.js","webpack:///../node_modules/d3-path/src/path.js","webpack:///../node_modules/d3-shape/src/array.js","webpack:///../node_modules/d3-shape/src/constant.js","webpack:///../node_modules/d3-shape/src/point.js","webpack:///../node_modules/d3-shape/src/link/index.js","webpack:///../node_modules/d3-sankey/src/sankeyLinkHorizontal.js","webpack:///./Sankey.js","webpack:///./Error.tsx","webpack:///./module.ts","webpack:///./SankeyPanel.tsx"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","__WEBPACK_EXTERNAL_MODULE__0__","__WEBPACK_EXTERNAL_MODULE__1__","__WEBPACK_EXTERNAL_MODULE__2__","__WEBPACK_EXTERNAL_MODULE__3__","__read","iterator","e","ar","next","done","push","error","sum","values","valueof","undefined","index","max","min","targetDepth","target","depth","left","node","right","height","justify","sourceLinks","length","center","targetLinks","constant","x","ascendingSourceBreadth","a","b","ascendingBreadth","source","ascendingTargetBreadth","y0","defaultId","defaultNodes","graph","nodes","defaultLinks","links","find","nodeById","id","Error","computeLinkBreadths","y1","link","width","py","sort","linkSort","x0","x1","dx","dy","align","iterations","sankey","apply","arguments","computeNodeLinks","computeNodeValues","computeNodeDepths","computeNodeHeights","computeNodeBreadths","entries","Map","map","fixedValue","Math","current","Set","size","add","columns","kx","Array","floor","layer","column","computeNodeLayers","ky","y","reorderLinks","initializeNodeBreadths","alpha","pow","beta","relaxRightToLeft","relaxLeftToRight","w","v","targetTop","reorderNodeLinks","resolveCollisions","sourceTop","subject","resolveCollisionsBottomToTop","resolveCollisionsTopToBottom","update","nodeId","_","nodeAlign","nodeSort","nodeWidth","nodePadding","extent","pi","PI","tau","tauEpsilon","Path","this","_x0","_y0","_x1","_y1","path","constructor","moveTo","closePath","lineTo","quadraticCurveTo","bezierCurveTo","x2","y2","arcTo","x21","y21","x01","y01","l01_2","abs","x20","y20","l21_2","l20_2","l21","sqrt","l01","tan","acos","t01","t21","arc","a0","a1","ccw","cos","sin","cw","da","rect","h","toString","slice","linkSource","linkTarget","curve","context","buffer","argv","curveHorizontal","horizontalSource","horizontalTarget","DISPLAY_VALUES","EDGE_COLORS","Sankey","svg","container","_svg","_container","_gBound","_data","_nodes","_links","_width","_height","_boundedWidth","_boundedHeight","_marginTop","_marginRight","_marginBottom","_marginLeft","_background","_edgeColor","_colorScheme","_colorScale","_colorArray","_sankeyAlignType","_sankeyAlign","_sankeyGenerator","_sankeyNodeWith","_sankeyNodePadding","_svgNode","_svgLink","_displayValues","_highlightOnHover","_setBoundDimensions","_setColorScale","_configureSankey","_calculateSankey","d3","d3Sankey","sankeyData","assign","gradient","append","attr","uid","random","_color","currentNode","linkedNodes","linkType","nodeType","forEach","step","selectAll","style","linkedNode","percent","nodesAtDepth","filter","totalAtDepth","nodeValue","_formatThousand","nodePercent","_formatPercent","label","data","join","colorArray","JSON","parse","keys","includes","on","_showLinks","_showAll","_setLinkGradient","text","_labelNode","_formatValue","_validate","_init","_renderSVG","message","panelStyles","containerStyles","messageStyles","display","justifyContent","alignItems","padding","marginBottom","position","color","textShadow","borderRadius","flexDirection","background","marginLeft","options","CHART_REQUIRED_FIELDS","requiredFieldsMsg","isError","setError","setGraph","buildGraph","frame","series","sourceAccesor","fields","field","targetAccesor","valueAccesor","sources","toArray","targets","isValid","sourcesString","every","targetsString","valuesNumeric","validate","zip","from","concat","toFixed","chart","edgeColor","colorScheme","displayValues","highlightOnHover","render","renderError","viewBox","ref","remove","setPanelOptions","builder","addSelect","defaultValue","settings","addTextInput","addBooleanSwitch"],"mappings":";0FACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QA0Df,OArDAF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,IAIjBlC,EAAoBA,EAAoBmC,EAAI,G,gBClFrDhC,EAAOD,QAAUkC,G,cCAjBjC,EAAOD,QAAUmC,G,cCAjBlC,EAAOD,QAAUoC,G,cCAjBnC,EAAOD,QAAUqC,G,8UC8HV,SAASC,EAAO3B,EAAGgB,GACtB,IAAIrB,EAAsB,mBAAXW,QAAyBN,EAAEM,OAAOsB,UACjD,IAAKjC,EAAG,OAAOK,EACf,IAAmBK,EAAYwB,EAA3BtC,EAAII,EAAED,KAAKM,GAAO8B,EAAK,GAC3B,IACI,WAAc,IAANd,GAAgBA,KAAM,MAAQX,EAAId,EAAEwC,QAAQC,MAAMF,EAAGG,KAAK5B,EAAEG,OAExE,MAAO0B,GAASL,EAAI,CAAEK,MAAOA,GAC7B,QACI,IACQ7B,IAAMA,EAAE2B,OAASrC,EAAIJ,EAAU,SAAII,EAAED,KAAKH,GAElD,QAAU,GAAIsC,EAAG,MAAMA,EAAEK,OAE7B,OAAOJ,E,2BC5II,SAASK,EAAIC,EAAQC,GAClC,IAAIF,EAAM,EACV,QAAgBG,IAAZD,EACF,IAAK,IAAI7B,KAAS4B,GACZ5B,GAASA,KACX2B,GAAO3B,OAGN,CACL,IAAI+B,GAAS,EACb,IAAK,IAAI/B,KAAS4B,GACZ5B,GAAS6B,EAAQ7B,IAAS+B,EAAOH,MACnCD,GAAO3B,GAIb,OAAO2B,EChBM,SAASK,EAAIJ,EAAQC,GAClC,IAAIG,EACJ,QAAgBF,IAAZD,EACF,IAAK,MAAM7B,KAAS4B,EACL,MAAT5B,IACIgC,EAAMhC,QAAkB8B,IAARE,GAAqBhC,GAASA,KACpDgC,EAAMhC,OAGL,CACL,IAAI+B,GAAS,EACb,IAAK,IAAI/B,KAAS4B,EACiC,OAA5C5B,EAAQ6B,EAAQ7B,IAAS+B,EAAOH,MAC7BI,EAAMhC,QAAkB8B,IAARE,GAAqBhC,GAASA,KACpDgC,EAAMhC,GAIZ,OAAOgC,EClBM,SAASC,EAAIL,EAAQC,GAClC,IAAII,EACJ,QAAgBH,IAAZD,EACF,IAAK,MAAM7B,KAAS4B,EACL,MAAT5B,IACIiC,EAAMjC,QAAkB8B,IAARG,GAAqBjC,GAASA,KACpDiC,EAAMjC,OAGL,CACL,IAAI+B,GAAS,EACb,IAAK,IAAI/B,KAAS4B,EACiC,OAA5C5B,EAAQ6B,EAAQ7B,IAAS+B,EAAOH,MAC7BK,EAAMjC,QAAkB8B,IAARG,GAAqBjC,GAASA,KACpDiC,EAAMjC,GAIZ,OAAOiC,EChBT,SAASC,EAAY7C,GACnB,OAAOA,EAAE8C,OAAOC,MAGX,SAASC,EAAKC,GACnB,OAAOA,EAAKF,MAGP,SAASG,EAAMD,EAAM9B,GAC1B,OAAOA,EAAI,EAAI8B,EAAKE,OAGf,SAASC,EAAQH,EAAM9B,GAC5B,OAAO8B,EAAKI,YAAYC,OAASL,EAAKF,MAAQ5B,EAAI,EAG7C,SAASoC,EAAON,GACrB,OAAOA,EAAKO,YAAYF,OAASL,EAAKF,MAChCE,EAAKI,YAAYC,OAASV,EAAIK,EAAKI,YAAaR,GAAe,EAC/D,ECrBO,SAASY,EAASC,GAC/B,OAAO,WACL,OAAOA,GCEX,SAASC,EAAuBC,EAAGC,GACjC,OAAOC,EAAiBF,EAAEG,OAAQF,EAAEE,SAAWH,EAAElB,MAAQmB,EAAEnB,MAG7D,SAASsB,EAAuBJ,EAAGC,GACjC,OAAOC,EAAiBF,EAAEd,OAAQe,EAAEf,SAAWc,EAAElB,MAAQmB,EAAEnB,MAG7D,SAASoB,EAAiBF,EAAGC,GAC3B,OAAOD,EAAEK,GAAKJ,EAAEI,GAGlB,SAAS,EAAMjE,GACb,OAAOA,EAAEW,MAGX,SAASuD,EAAUlE,GACjB,OAAOA,EAAE0C,MAGX,SAASyB,EAAaC,GACpB,OAAOA,EAAMC,MAGf,SAASC,EAAaF,GACpB,OAAOA,EAAMG,MAGf,SAASC,EAAKC,EAAUC,GACtB,MAAMzB,EAAOwB,EAASlE,IAAImE,GAC1B,IAAKzB,EAAM,MAAM,IAAI0B,MAAM,YAAcD,GACzC,OAAOzB,EAGT,SAAS2B,GAAoB,MAACP,IAC5B,IAAK,MAAMpB,KAAQoB,EAAO,CACxB,IAAIJ,EAAKhB,EAAKgB,GACVY,EAAKZ,EACT,IAAK,MAAMa,KAAQ7B,EAAKI,YACtByB,EAAKb,GAAKA,EAAKa,EAAKC,MAAQ,EAC5Bd,GAAMa,EAAKC,MAEb,IAAK,MAAMD,KAAQ7B,EAAKO,YACtBsB,EAAKD,GAAKA,EAAKC,EAAKC,MAAQ,EAC5BF,GAAMC,EAAKC,OAKF,SAAS,IACtB,IAEYC,EAGRC,EACAC,EANAC,EAAK,EAAGlB,EAAK,EAAGmB,EAAK,EAAGP,EAAK,EAC7BQ,EAAK,GACLC,EAAK,EACLZ,EAAKR,EACLqB,EAAQnC,EAGRiB,EAAQF,EACRI,EAAQD,EACRkB,EAAa,EAEjB,SAASC,IACP,MAAMrB,EAAQ,CAACC,MAAOA,EAAMqB,MAAM,KAAMC,WAAYpB,MAAOA,EAAMmB,MAAM,KAAMC,YAO7E,OANAC,EAAiBxB,GACjByB,EAAkBzB,GAClB0B,EAAkB1B,GAClB2B,EAAmB3B,GACnB4B,EAAoB5B,GACpBQ,EAAoBR,GACbA,EAoDT,SAASwB,GAAiB,MAACvB,EAAK,MAAEE,IAChC,IAAK,MAAO7E,EAAGuD,KAASoB,EAAM4B,UAC5BhD,EAAKP,MAAQhD,EACbuD,EAAKI,YAAc,GACnBJ,EAAKO,YAAc,GAErB,MAAMiB,EAAW,IAAIyB,IAAI7B,EAAM8B,IAAI,CAACnG,EAAGN,IAAM,CAACgF,EAAG1E,EAAGN,EAAG2E,GAAQrE,KAC/D,IAAK,MAAON,EAAGoF,KAASP,EAAM0B,UAAW,CACvCnB,EAAKpC,MAAQhD,EACb,IAAI,OAACqE,EAAM,OAAEjB,GAAUgC,EACD,iBAAXf,IAAqBA,EAASe,EAAKf,OAASS,EAAKC,EAAUV,IAChD,iBAAXjB,IAAqBA,EAASgC,EAAKhC,OAAS0B,EAAKC,EAAU3B,IACtEiB,EAAOV,YAAYjB,KAAK0C,GACxBhC,EAAOU,YAAYpB,KAAK0C,GAE1B,GAAgB,MAAZI,EACF,IAAK,MAAM,YAAC7B,EAAW,YAAEG,KAAgBa,EACvChB,EAAY4B,KAAKC,GACjB1B,EAAYyB,KAAKC,GAKvB,SAASW,GAAkB,MAACxB,IAC1B,IAAK,MAAMpB,KAAQoB,EACjBpB,EAAKtC,WAA4B8B,IAApBQ,EAAKmD,WACZC,KAAK1D,IAAIL,EAAIW,EAAKI,YAAa,GAAQf,EAAIW,EAAKO,YAAa,IAC7DP,EAAKmD,WAIf,SAASN,GAAkB,MAACzB,IAC1B,MAAMlD,EAAIkD,EAAMf,OAChB,IAAIgD,EAAU,IAAIC,IAAIlC,GAClBnC,EAAO,IAAIqE,IACX7C,EAAI,EACR,KAAO4C,EAAQE,MAAM,CACnB,IAAK,MAAMvD,KAAQqD,EAAS,CAC1BrD,EAAKF,MAAQW,EACb,IAAK,MAAM,OAACZ,KAAWG,EAAKI,YAC1BnB,EAAKuE,IAAI3D,GAGb,KAAMY,EAAIvC,EAAG,MAAM,IAAIwD,MAAM,iBAC7B2B,EAAUpE,EACVA,EAAO,IAAIqE,KAIf,SAASR,GAAmB,MAAC1B,IAC3B,MAAMlD,EAAIkD,EAAMf,OAChB,IAAIgD,EAAU,IAAIC,IAAIlC,GAClBnC,EAAO,IAAIqE,IACX7C,EAAI,EACR,KAAO4C,EAAQE,MAAM,CACnB,IAAK,MAAMvD,KAAQqD,EAAS,CAC1BrD,EAAKE,OAASO,EACd,IAAK,MAAM,OAACK,KAAWd,EAAKO,YAC1BtB,EAAKuE,IAAI1C,GAGb,KAAML,EAAIvC,EAAG,MAAM,IAAIwD,MAAM,iBAC7B2B,EAAUpE,EACVA,EAAO,IAAIqE,KA4Cf,SAASP,EAAoB5B,GAC3B,MAAMsC,EAzCR,UAA2B,MAACrC,IAC1B,MAAMX,EAAIf,EAAI0B,EAAOrE,GAAKA,EAAE+C,OAAS,EAC/B4D,GAAMvB,EAAKD,EAAKE,IAAO3B,EAAI,GAC3BgD,EAAU,IAAIE,MAAMlD,GAC1B,IAAK,MAAMT,KAAQoB,EAAO,CACxB,MAAM3E,EAAI2G,KAAK1D,IAAI,EAAG0D,KAAKzD,IAAIc,EAAI,EAAG2C,KAAKQ,MAAMtB,EAAM1F,KAAK,KAAMoD,EAAMS,MACxET,EAAK6D,MAAQpH,EACbuD,EAAKkC,GAAKA,EAAKzF,EAAIiH,EACnB1D,EAAKmC,GAAKnC,EAAKkC,GAAKE,EAChBqB,EAAQhH,GAAIgH,EAAQhH,GAAG0C,KAAKa,GAC3ByD,EAAQhH,GAAK,CAACuD,GAErB,GAAIgC,EAAM,IAAK,MAAM8B,KAAUL,EAC7BK,EAAO9B,KAAKA,GAEd,OAAOyB,EA0BSM,CAAkB5C,GAClCY,EAAKqB,KAAKzD,IAAI0C,GAAKT,EAAKZ,IAAOtB,EAAI+D,EAAS3G,GAAKA,EAAEuD,QAAU,IAxB/D,SAAgCoD,GAC9B,MAAMO,EAAKrE,EAAI8D,EAAS3G,IAAM8E,EAAKZ,GAAMlE,EAAEuD,OAAS,GAAK0B,GAAM1C,EAAIvC,EAAG,IACtE,IAAK,MAAMsE,KAASqC,EAAS,CAC3B,IAAIQ,EAAIjD,EACR,IAAK,MAAMhB,KAAQoB,EAAO,CACxBpB,EAAKgB,GAAKiD,EACVjE,EAAK4B,GAAKqC,EAAIjE,EAAKtC,MAAQsG,EAC3BC,EAAIjE,EAAK4B,GAAKG,EACd,IAAK,MAAMF,KAAQ7B,EAAKI,YACtByB,EAAKC,MAAQD,EAAKnE,MAAQsG,EAG9BC,GAAKrC,EAAKqC,EAAIlC,IAAOX,EAAMf,OAAS,GACpC,IAAK,IAAI5D,EAAI,EAAGA,EAAI2E,EAAMf,SAAU5D,EAAG,CACrC,MAAMuD,EAAOoB,EAAM3E,GACnBuD,EAAKgB,IAAMiD,GAAKxH,EAAI,GACpBuD,EAAK4B,IAAMqC,GAAKxH,EAAI,GAEtByH,EAAa9C,IAOf+C,CAAuBV,GACvB,IAAK,IAAIhH,EAAI,EAAGA,EAAI8F,IAAc9F,EAAG,CACnC,MAAM2H,EAAQhB,KAAKiB,IAAI,IAAM5H,GACvB6H,EAAOlB,KAAK1D,IAAI,EAAI0E,GAAQ3H,EAAI,GAAK8F,GAC3CgC,EAAiBd,EAASW,EAAOE,GACjCE,EAAiBf,EAASW,EAAOE,IAKrC,SAASE,EAAiBf,EAASW,EAAOE,GACxC,IAAK,IAAI7H,EAAI,EAAGyB,EAAIuF,EAAQpD,OAAQ5D,EAAIyB,IAAKzB,EAAG,CAC9C,MAAMqH,EAASL,EAAQhH,GACvB,IAAK,MAAMoD,KAAUiE,EAAQ,CAC3B,IAAIG,EAAI,EACJQ,EAAI,EACR,IAAK,MAAM,OAAC3D,EAAM,MAAEpD,KAAUmC,EAAOU,YAAa,CAChD,IAAImE,EAAIhH,GAASmC,EAAOgE,MAAQ/C,EAAO+C,OACvCI,GAAKU,EAAU7D,EAAQjB,GAAU6E,EACjCD,GAAKC,EAEP,KAAMD,EAAI,GAAI,SACd,IAAIpC,GAAM4B,EAAIQ,EAAI5E,EAAOmB,IAAMoD,EAC/BvE,EAAOmB,IAAMqB,EACbxC,EAAO+B,IAAMS,EACbuC,EAAiB/E,QAENL,IAATwC,GAAoB8B,EAAO9B,KAAKnB,GACpCgE,EAAkBf,EAAQQ,IAK9B,SAASC,EAAiBd,EAASW,EAAOE,GACxC,IAAK,IAAwB7H,EAAhBgH,EAAQpD,OAAgB,EAAG5D,GAAK,IAAKA,EAAG,CACnD,MAAMqH,EAASL,EAAQhH,GACvB,IAAK,MAAMqE,KAAUgD,EAAQ,CAC3B,IAAIG,EAAI,EACJQ,EAAI,EACR,IAAK,MAAM,OAAC5E,EAAM,MAAEnC,KAAUoD,EAAOV,YAAa,CAChD,IAAIsE,EAAIhH,GAASmC,EAAOgE,MAAQ/C,EAAO+C,OACvCI,GAAKa,EAAUhE,EAAQjB,GAAU6E,EACjCD,GAAKC,EAEP,KAAMD,EAAI,GAAI,SACd,IAAIpC,GAAM4B,EAAIQ,EAAI3D,EAAOE,IAAMoD,EAC/BtD,EAAOE,IAAMqB,EACbvB,EAAOc,IAAMS,EACbuC,EAAiB9D,QAENtB,IAATwC,GAAoB8B,EAAO9B,KAAKnB,GACpCgE,EAAkBf,EAAQQ,IAI9B,SAASO,EAAkBzD,EAAOgD,GAChC,MAAM3H,EAAI2E,EAAMf,QAAU,EACpB0E,EAAU3D,EAAM3E,GACtBuI,EAA6B5D,EAAO2D,EAAQ/D,GAAKe,EAAItF,EAAI,EAAG2H,GAC5Da,EAA6B7D,EAAO2D,EAAQnD,GAAKG,EAAItF,EAAI,EAAG2H,GAC5DY,EAA6B5D,EAAOQ,EAAIR,EAAMf,OAAS,EAAG+D,GAC1Da,EAA6B7D,EAAOJ,EAAI,EAAGoD,GAI7C,SAASa,EAA6B7D,EAAO6C,EAAGxH,EAAG2H,GACjD,KAAO3H,EAAI2E,EAAMf,SAAU5D,EAAG,CAC5B,MAAMuD,EAAOoB,EAAM3E,GACb4F,GAAM4B,EAAIjE,EAAKgB,IAAMoD,EACvB/B,EAAK,OAAMrC,EAAKgB,IAAMqB,EAAIrC,EAAK4B,IAAMS,GACzC4B,EAAIjE,EAAK4B,GAAKG,GAKlB,SAASiD,EAA6B5D,EAAO6C,EAAGxH,EAAG2H,GACjD,KAAO3H,GAAK,IAAKA,EAAG,CAClB,MAAMuD,EAAOoB,EAAM3E,GACb4F,GAAMrC,EAAK4B,GAAKqC,GAAKG,EACvB/B,EAAK,OAAMrC,EAAKgB,IAAMqB,EAAIrC,EAAK4B,IAAMS,GACzC4B,EAAIjE,EAAKgB,GAAKe,GAIlB,SAAS6C,GAAiB,YAACxE,EAAW,YAAEG,IACtC,QAAiBf,IAAbyC,EAAwB,CAC1B,IAAK,MAAOnB,QAAQ,YAACV,MAAiBG,EACpCH,EAAY4B,KAAKjB,GAEnB,IAAK,MAAOlB,QAAQ,YAACU,MAAiBH,EACpCG,EAAYyB,KAAKtB,IAKvB,SAASwD,EAAa9C,GACpB,QAAiB5B,IAAbyC,EACF,IAAK,MAAM,YAAC7B,EAAW,YAAEG,KAAgBa,EACvChB,EAAY4B,KAAKjB,GACjBR,EAAYyB,KAAKtB,GAMvB,SAASiE,EAAU7D,EAAQjB,GACzB,IAAIoE,EAAInD,EAAOE,IAAMF,EAAOV,YAAYC,OAAS,GAAK0B,EAAK,EAC3D,IAAK,MAAOlC,OAAQG,EAAI,MAAE8B,KAAUhB,EAAOV,YAAa,CACtD,GAAIJ,IAASH,EAAQ,MACrBoE,GAAKnC,EAAQC,EAEf,IAAK,MAAOjB,OAAQd,EAAI,MAAE8B,KAAUjC,EAAOU,YAAa,CACtD,GAAIP,IAASc,EAAQ,MACrBmD,GAAKnC,EAEP,OAAOmC,EAIT,SAASa,EAAUhE,EAAQjB,GACzB,IAAIoE,EAAIpE,EAAOmB,IAAMnB,EAAOU,YAAYF,OAAS,GAAK0B,EAAK,EAC3D,IAAK,MAAOjB,OAAQd,EAAI,MAAE8B,KAAUjC,EAAOU,YAAa,CACtD,GAAIP,IAASc,EAAQ,MACrBmD,GAAKnC,EAAQC,EAEf,IAAK,MAAOlC,OAAQG,EAAI,MAAE8B,KAAUhB,EAAOV,YAAa,CACtD,GAAIJ,IAASH,EAAQ,MACrBoE,GAAKnC,EAEP,OAAOmC,EAGT,OAnSAzB,EAAO0C,OAAS,SAAS/D,GAEvB,OADAQ,EAAoBR,GACbA,GAGTqB,EAAO2C,OAAS,SAASC,GACvB,OAAO1C,UAAUrC,QAAUoB,EAAkB,mBAAN2D,EAAmBA,EAAI5E,EAAS4E,GAAI5C,GAAUf,GAGvFe,EAAO6C,UAAY,SAASD,GAC1B,OAAO1C,UAAUrC,QAAUiC,EAAqB,mBAAN8C,EAAmBA,EAAI5E,EAAS4E,GAAI5C,GAAUF,GAG1FE,EAAO8C,SAAW,SAASF,GACzB,OAAO1C,UAAUrC,QAAU2B,EAAOoD,EAAG5C,GAAUR,GAGjDQ,EAAO+C,UAAY,SAASH,GAC1B,OAAO1C,UAAUrC,QAAU+B,GAAMgD,EAAG5C,GAAUJ,GAGhDI,EAAOgD,YAAc,SAASJ,GAC5B,OAAO1C,UAAUrC,QAAUgC,EAAKN,GAAMqD,EAAG5C,GAAUH,GAGrDG,EAAOpB,MAAQ,SAASgE,GACtB,OAAO1C,UAAUrC,QAAUe,EAAqB,mBAANgE,EAAmBA,EAAI5E,EAAS4E,GAAI5C,GAAUpB,GAG1FoB,EAAOlB,MAAQ,SAAS8D,GACtB,OAAO1C,UAAUrC,QAAUiB,EAAqB,mBAAN8D,EAAmBA,EAAI5E,EAAS4E,GAAI5C,GAAUlB,GAG1FkB,EAAOP,SAAW,SAASmD,GACzB,OAAO1C,UAAUrC,QAAU4B,EAAWmD,EAAG5C,GAAUP,GAGrDO,EAAOe,KAAO,SAAS6B,GACrB,OAAO1C,UAAUrC,QAAU6B,EAAKlB,EAAK,EAAGmB,GAAMiD,EAAE,GAAIxD,GAAMwD,EAAE,GAAI5C,GAAU,CAACL,EAAKD,EAAIN,EAAKZ,IAG3FwB,EAAOiD,OAAS,SAASL,GACvB,OAAO1C,UAAUrC,QAAU6B,GAAMkD,EAAE,GAAG,GAAIjD,GAAMiD,EAAE,GAAG,GAAIpE,GAAMoE,EAAE,GAAG,GAAIxD,GAAMwD,EAAE,GAAG,GAAI5C,GAAU,CAAC,CAACN,EAAIlB,GAAK,CAACmB,EAAIP,KAGnHY,EAAOD,WAAa,SAAS6C,GAC3B,OAAO1C,UAAUrC,QAAUkC,GAAc6C,EAAG5C,GAAUD,GAqPjDC,EC/WT,IAAIkD,EAAKtC,KAAKuC,GACVC,EAAM,EAAIF,EAEVG,EAAaD,EADH,KAGd,SAASE,IACPC,KAAKC,IAAMD,KAAKE,IAChBF,KAAKG,IAAMH,KAAKI,IAAM,KACtBJ,KAAKX,EAAI,GAGX,SAASgB,IACP,OAAO,IAAIN,EAGbA,EAAKzH,UAAY+H,EAAK/H,UAAY,CAChCgI,YAAaP,EACbQ,OAAQ,SAAS7F,EAAGwD,GAClB8B,KAAKX,GAAK,KAAOW,KAAKC,IAAMD,KAAKG,KAAOzF,GAAK,KAAOsF,KAAKE,IAAMF,KAAKI,KAAOlC,IAE7EsC,UAAW,WACQ,OAAbR,KAAKG,MACPH,KAAKG,IAAMH,KAAKC,IAAKD,KAAKI,IAAMJ,KAAKE,IACrCF,KAAKX,GAAK,MAGdoB,OAAQ,SAAS/F,EAAGwD,GAClB8B,KAAKX,GAAK,KAAOW,KAAKG,KAAOzF,GAAK,KAAOsF,KAAKI,KAAOlC,IAEvDwC,iBAAkB,SAAStE,EAAIP,EAAInB,EAAGwD,GACpC8B,KAAKX,GAAK,MAAQjD,EAAM,MAAQP,EAAM,KAAOmE,KAAKG,KAAOzF,GAAK,KAAOsF,KAAKI,KAAOlC,IAEnFyC,cAAe,SAASvE,EAAIP,EAAI+E,EAAIC,EAAInG,EAAGwD,GACzC8B,KAAKX,GAAK,MAAQjD,EAAM,MAAQP,EAAM,MAAQ+E,EAAM,MAAQC,EAAM,KAAOb,KAAKG,KAAOzF,GAAK,KAAOsF,KAAKI,KAAOlC,IAE/G4C,MAAO,SAAS1E,EAAIP,EAAI+E,EAAIC,EAAIrJ,GAC9B4E,GAAMA,EAAIP,GAAMA,EAAI+E,GAAMA,EAAIC,GAAMA,EAAIrJ,GAAKA,EAC7C,IAAI2E,EAAK6D,KAAKG,IACVlF,EAAK+E,KAAKI,IACVW,EAAMH,EAAKxE,EACX4E,EAAMH,EAAKhF,EACXoF,EAAM9E,EAAKC,EACX8E,EAAMjG,EAAKY,EACXsF,EAAQF,EAAMA,EAAMC,EAAMA,EAG9B,GAAI1J,EAAI,EAAG,MAAM,IAAImE,MAAM,oBAAsBnE,GAGjD,GAAiB,OAAbwI,KAAKG,IACPH,KAAKX,GAAK,KAAOW,KAAKG,IAAM/D,GAAM,KAAO4D,KAAKI,IAAMvE,QAIjD,GAAMsF,EApDD,KAyDL,GAAM9D,KAAK+D,IAAIF,EAAMH,EAAMC,EAAMC,GAzD5B,MAyDgDzJ,EAKrD,CACH,IAAI6J,EAAMT,EAAKzE,EACXmF,EAAMT,EAAK5F,EACXsG,EAAQR,EAAMA,EAAMC,EAAMA,EAC1BQ,EAAQH,EAAMA,EAAMC,EAAMA,EAC1BG,EAAMpE,KAAKqE,KAAKH,GAChBI,EAAMtE,KAAKqE,KAAKP,GAChBxK,EAAIa,EAAI6F,KAAKuE,KAAKjC,EAAKtC,KAAKwE,MAAMN,EAAQJ,EAAQK,IAAU,EAAIC,EAAME,KAAS,GAC/EG,EAAMnL,EAAIgL,EACVI,EAAMpL,EAAI8K,EAGVpE,KAAK+D,IAAIU,EAAM,GA1EX,OA2EN9B,KAAKX,GAAK,KAAOjD,EAAK0F,EAAMb,GAAO,KAAOpF,EAAKiG,EAAMZ,IAGvDlB,KAAKX,GAAK,IAAM7H,EAAI,IAAMA,EAAI,WAAa0J,EAAMG,EAAMJ,EAAMK,GAAQ,KAAOtB,KAAKG,IAAM/D,EAAK2F,EAAMhB,GAAO,KAAOf,KAAKI,IAAMvE,EAAKkG,EAAMf,QApBtIhB,KAAKX,GAAK,KAAOW,KAAKG,IAAM/D,GAAM,KAAO4D,KAAKI,IAAMvE,UAuBxDmG,IAAK,SAAStH,EAAGwD,EAAG1G,EAAGyK,EAAIC,EAAIC,GAC7BzH,GAAKA,EAAGwD,GAAKA,EAAWiE,IAAQA,EAChC,IAAI9F,GADY7E,GAAKA,GACR6F,KAAK+E,IAAIH,GAClB3F,EAAK9E,EAAI6F,KAAKgF,IAAIJ,GAClB9F,EAAKzB,EAAI2B,EACTpB,EAAKiD,EAAI5B,EACTgG,EAAK,EAAIH,EACTI,EAAKJ,EAAMF,EAAKC,EAAKA,EAAKD,EAG9B,GAAIzK,EAAI,EAAG,MAAM,IAAImE,MAAM,oBAAsBnE,GAGhC,OAAbwI,KAAKG,IACPH,KAAKX,GAAK,IAAMlD,EAAK,IAAMlB,GAIpBoC,KAAK+D,IAAIpB,KAAKG,IAAMhE,GAnGnB,MAmGoCkB,KAAK+D,IAAIpB,KAAKI,IAAMnF,GAnGxD,QAoGR+E,KAAKX,GAAK,IAAMlD,EAAK,IAAMlB,GAIxBzD,IAGD+K,EAAK,IAAGA,EAAKA,EAAK1C,EAAMA,GAGxB0C,EAAKzC,EACPE,KAAKX,GAAK,IAAM7H,EAAI,IAAMA,EAAI,QAAU8K,EAAK,KAAO5H,EAAI2B,GAAM,KAAO6B,EAAI5B,GAAM,IAAM9E,EAAI,IAAMA,EAAI,QAAU8K,EAAK,KAAOtC,KAAKG,IAAMhE,GAAM,KAAO6D,KAAKI,IAAMnF,GAIrJsH,EAnHC,OAoHRvC,KAAKX,GAAK,IAAM7H,EAAI,IAAMA,EAAI,SAAW+K,GAAM5C,GAAO,IAAM2C,EAAK,KAAOtC,KAAKG,IAAMzF,EAAIlD,EAAI6F,KAAK+E,IAAIF,IAAO,KAAOlC,KAAKI,IAAMlC,EAAI1G,EAAI6F,KAAKgF,IAAIH,OAGlJM,KAAM,SAAS9H,EAAGwD,EAAGQ,EAAG+D,GACtBzC,KAAKX,GAAK,KAAOW,KAAKC,IAAMD,KAAKG,KAAOzF,GAAK,KAAOsF,KAAKE,IAAMF,KAAKI,KAAOlC,GAAK,MAAQQ,EAAK,MAAQ+D,EAAK,KAAQ/D,EAAK,KAEzHgE,SAAU,WACR,OAAO1C,KAAKX,IAID,QCjIJsD,EAAQ/E,MAAMtF,UAAUqK,MCApB,cACb,OAAO,WACL,OAAOjI,ICFJ,SAAS,EAAElC,GAChB,OAAOA,EAAE,GAGJ,SAAS,EAAEA,GAChB,OAAOA,EAAE,GCCX,SAASoK,EAAW5L,GAClB,OAAOA,EAAE+D,OAGX,SAAS8H,EAAW7L,GAClB,OAAOA,EAAE8C,OAGX,SAAS,EAAKgJ,GACZ,IAAI/H,EAAS6H,EACT9I,EAAS+I,EACTnI,EAAI,EACJwD,EAAI,EACJ6E,EAAU,KAEd,SAASjH,IACP,IAAIkH,EAAQC,EAAON,EAAM9L,KAAK8F,WAAYlE,EAAIsC,EAAO2B,MAAMsD,KAAMiD,GAAOrL,EAAIkC,EAAO4C,MAAMsD,KAAMiD,GAG/F,GAFKF,IAASA,EAAUC,EAAS,KACjCF,EAAMC,GAAUrI,EAAEgC,MAAMsD,MAAOiD,EAAK,GAAKxK,EAAGwK,KAAS/E,EAAExB,MAAMsD,KAAMiD,IAAQvI,EAAEgC,MAAMsD,MAAOiD,EAAK,GAAKrL,EAAGqL,KAAS/E,EAAExB,MAAMsD,KAAMiD,IAC1HD,EAAQ,OAAOD,EAAU,KAAMC,EAAS,IAAM,KAuBpD,OApBAlH,EAAKf,OAAS,SAASsE,GACrB,OAAO1C,UAAUrC,QAAUS,EAASsE,EAAGvD,GAAQf,GAGjDe,EAAKhC,OAAS,SAASuF,GACrB,OAAO1C,UAAUrC,QAAUR,EAASuF,EAAGvD,GAAQhC,GAGjDgC,EAAKpB,EAAI,SAAS2E,GAChB,OAAO1C,UAAUrC,QAAUI,EAAiB,mBAAN2E,EAAmBA,EAAI,GAAUA,GAAIvD,GAAQpB,GAGrFoB,EAAKoC,EAAI,SAASmB,GAChB,OAAO1C,UAAUrC,QAAU4D,EAAiB,mBAANmB,EAAmBA,EAAI,GAAUA,GAAIvD,GAAQoC,GAGrFpC,EAAKiH,QAAU,SAAS1D,GACtB,OAAO1C,UAAUrC,QAAWyI,EAAe,MAAL1D,EAAY,KAAOA,EAAIvD,GAAQiH,GAGhEjH,EAGT,SAASoH,EAAgBH,EAAS5G,EAAIlB,EAAImB,EAAIP,GAC5CkH,EAAQxC,OAAOpE,EAAIlB,GACnB8H,EAAQpC,cAAcxE,GAAMA,EAAKC,GAAM,EAAGnB,EAAIkB,EAAIN,EAAIO,EAAIP,GCnD5D,SAASsH,EAAiBnM,GACxB,MAAO,CAACA,EAAE+D,OAAOqB,GAAIpF,EAAEiE,IAGzB,SAASmI,EAAiBpM,GACxB,MAAO,CAACA,EAAE8C,OAAOqC,GAAInF,EAAE6E,IAGV,iBACb,OD4DO,EAAKqH,GC3DPnI,OAAOoI,GACPrJ,OAAOsJ,I,sKCVd,IAAMC,EAA0B,QAA1BA,EAA+C,aAA/CA,EAAmE,OACnEC,EAAsB,OAAtBA,EAAoC,OAApCA,EAAmD,QAAnDA,EAAoE,SAE7DC,EAAb,WACE,WAAYC,EAAKC,I,4FAAW,SAC1BzD,KAAK0D,KAAOF,EACZxD,KAAK2D,WAAaF,GAAaD,EAC/BxD,KAAK4D,QAAU,KAEf5D,KAAK6D,MAAQ,KACb7D,KAAK8D,OAAS,KACd9D,KAAK+D,OAAS,KAEd/D,KAAKgE,OAAS,EACdhE,KAAKiE,QAAU,EACfjE,KAAKkE,cAAgB,EACrBlE,KAAKmE,eAAiB,EAEtBnE,KAAKoE,WAAa,GAClBpE,KAAKqE,aAAe,GACpBrE,KAAKsE,cAAgB,GACrBtE,KAAKuE,YAAc,GAEnBvE,KAAKwE,YAAc,mBACnBxE,KAAKyE,WAAa,OAClBzE,KAAK0E,aAAe,YACpB1E,KAAK2E,YAAc,KACnB3E,KAAK4E,YAAc,GAEnB5E,KAAK6E,iBAAmB,UACxB7E,KAAK8E,aAAe,KACpB9E,KAAK+E,iBAAmB,KACxB/E,KAAKgF,gBAAkB,GACvBhF,KAAKiF,mBAAqB,GAE1BjF,KAAKkF,SAAW,KAChBlF,KAAKmF,SAAW,KAEhBnF,KAAKoF,eAAiB,OACtBpF,KAAKqF,mBAAoB,E,UApC7B,O,EAAA,G,EAAA,oBAwCE,WACErF,KAAKsF,sBACLtF,KAAKuF,iBACLvF,KAAKwF,mBACLxF,KAAKyF,qBA5CT,iCAiDE,WACEzF,KAAKkE,cAAgBlE,KAAKgE,OAAShE,KAAKuE,YAAcvE,KAAKqE,aAC3DrE,KAAKmE,eAAiBnE,KAAKiE,QAAUjE,KAAKoE,WAAapE,KAAKsE,gBAnDhE,4BAwDE,WACEtE,KAAK2E,YAAce,eAAgBA,EAAG,SAAD,OAAU1F,KAAK0E,kBAzDxD,oBA4DE,SAAOzK,GACL,OAAO+F,KAAK2E,YAAY1K,EAAKhD,QA7DjC,8BAkEE,WACE+I,KAAK8E,aAAea,EAAS,SAAD,OAAU3F,KAAK6E,mBAE3C7E,KAAK+E,iBAAmBY,IAErBvG,QAAO,SAAApI,GAAC,OAAIA,EAAEC,QACdqI,UAAUU,KAAK8E,cACftF,UAAUQ,KAAKgF,iBACfvF,YAAYO,KAAKiF,oBACjBvF,OAAO,CACN,CAAC,EAAG,GACJ,CAACM,KAAKkE,cAAelE,KAAKmE,oBA7ElC,8BAiFE,WACE,IAAMyB,EAAa5F,KAAK+E,iBAAiB,CACvC1J,MAAO2E,KAAK6D,MAAMxI,MAAM8B,KAAI,SAAAnG,GAAC,OAAII,OAAOyO,OAAO,GAAI7O,MACnDuE,MAAOyE,KAAK6D,MAAMtI,MAAM4B,KAAI,SAAAnG,GAAC,OAAII,OAAOyO,OAAO,GAAI7O,QAGrDgJ,KAAK8D,OAAS8B,EAAWvK,MACzB2E,KAAK+D,OAAS6B,EAAWrK,QAxF7B,uBA6FE,WACE,OAAOyE,KAAK6D,OACZ7D,KAAK6D,MAAMxI,OACX2E,KAAK6D,MAAMtI,OACXyE,KAAK6D,MAAMxI,MAAMf,OAAS,GAC1B0F,KAAK6D,MAAMtI,MAAMjB,OAAS,IAlG9B,8BAuGE,WAAmB,WACXwL,EAAW9F,KAAKmF,SACrBY,OAAO,kBACLC,KAAK,MAAM,SAAAhP,GAAC,OAAKA,EAAEiP,IAAF,eAAgBjP,EAAE0C,MAAlB,YAA2B2D,KAAK6I,aACjDF,KAAK,gBAAiB,kBACtBA,KAAK,MAAM,SAAAhP,GAAC,OAAIA,EAAE+D,OAAOqB,MACzB4J,KAAK,MAAM,SAAAhP,GAAC,OAAIA,EAAE8C,OAAOqC,MAE5B2J,EACGC,OAAO,QACPC,KAAK,SAAU,MACfA,KAAK,cAAc,SAAAhP,GAAC,OAAI,EAAKmP,OAAOnP,EAAE+D,WAEzC+K,EACGC,OAAO,QACPC,KAAK,SAAU,QACfA,KAAK,cAAc,SAAAhP,GAAC,OAAI,EAAKmP,OAAOnP,EAAE8C,aAvH7C,4BA0HE,SAAe9C,GACX,OAAQgJ,KAAKyE,YACX,KAAKnB,EACH,MAAO,OACT,KAAKA,EACH,qBAAetM,EAAEiP,IAAjB,KACF,KAAK3C,EACH,OAAOtD,KAAKmG,OAAOnP,EAAE+D,QACvB,KAAKuI,EACH,OAAOtD,KAAKmG,OAAOnP,EAAE8C,QACvB,QACE,UArIV,wBA0IE,SAAWsM,GACT,IAAMC,EAAc,GAEL,CACb,CACEC,SAAU,cACVC,SAAU,UAEZ,CACED,SAAU,cACVC,SAAU,WAILC,SAAQ,SAAAC,GACfL,EAAYK,EAAKH,UAAUE,SAAQ,SAAA7P,GACjC0P,EAAYjN,KAAKzC,EAAE8P,EAAKF,iBAK5BvG,KAAK4D,QACF8C,UAAU,gBACVC,MAAM,WAAW,SAAA1M,GAAI,OACpBmM,EAAYnP,OAASgD,EAAKhD,MAC1BoP,EAAY7K,MAAK,SAAAoL,GAAU,OAAIA,EAAW3P,OAASgD,EAAKhD,QACxD,IAAM,SAIV+I,KAAK4D,QACF8C,UAAU,gBACVC,MAAM,WAAW,SAAA7K,GAAI,OACpBA,GACEA,EAAKf,OAAO9D,OAASmP,EAAYnP,MACjC6E,EAAKhC,OAAO7C,OAASmP,EAAYnP,KAE7B,MAAN,SA/KR,sBAmLE,WACE+I,KAAK4D,QAAQ8C,UAAU,gBAAgBC,MAAM,UAAW,KACxD3G,KAAK4D,QAAQ8C,UAAU,gBAAgBC,MAAM,UAAW,OArL5D,0BAyLE,SAAahP,GAAS,OAAO+N,SAAU,OAAVA,CAAkB/N,KAzLjD,4BA0LE,SAAekP,GAAY,OAAOnB,SAAU,OAAVA,CAAkBmB,KA1LtD,6BA2LE,SAAgBlP,GAAS,OAAO+N,SAAU,OAAVA,CAAkB/N,KA3LpD,wBA6LE,SAAWyO,GACT,IAAMU,EAAe9G,KAAK8D,OAAOiD,QAAO,SAAA9M,GAAI,OAAIA,EAAKF,QAAUqM,EAAYrM,SACrEiN,EAAetB,MAAOoB,GAAc,SAAA7M,GAAI,OAAIA,EAAKtC,SACjDsP,EAAYjH,KAAKkH,gBAAgBd,EAAYzO,OAC7CwP,EAAcnH,KAAKoH,eAAehB,EAAYzO,MAAQqP,GAExDK,EAAQjB,EAAYnP,KACxB,OAAQ+I,KAAKoF,gBACX,KAAK/B,EACHgE,EAAQ,GAAH,OAAMA,EAAN,qBACHJ,GACF,MACF,KAAK5D,EACHgE,EAAQ,GAAH,OAAMA,EAAN,qBACHF,GACF,MACF,KAAK9D,EACHgE,EAAQ,GAAH,OAAMA,EAAN,qBACHF,EADG,cACcF,GAKvB,OAAOI,IApNX,wBAyNE,WAAa,WAEXrH,KAAK2D,WAAWgD,MAAM,mBAAoB3G,KAAKwE,aAG/CxE,KAAK4D,QAAU5D,KAAK2D,WAAWoC,OAAO,KACjCC,KAAK,YADK,oBACqBhG,KAAKuE,YAD1B,aAC0CvE,KAAKoE,WAD/C,MAIfpE,KAAKkF,SAAWlF,KAAK4D,QAClBmC,OAAO,KACLC,KAAK,SAAU,QACjBU,UAAU,gBACVY,KAAKtH,KAAK8D,QAAQ,SAAA7J,GAAI,OAAIA,EAAKhD,QAC/BsQ,KAAK,QACHvB,KAAK,QAAS,eACdA,KAAK,MAAM,SAAAhP,GAAC,OAAIA,EAAEC,QAClB+O,KAAK,KAAK,SAAAhP,GAAC,OAAIA,EAAEmF,MACjB6J,KAAK,KAAK,SAAAhP,GAAC,OAAIA,EAAEiE,MACjB+K,KAAK,KAAM,GACXA,KAAK,KAAM,GACXA,KAAK,UAAU,SAAAhP,GAAC,OAAIA,EAAE6E,GAAK7E,EAAEiE,MAC7B+K,KAAK,SAAS,SAAAhP,GAAC,OAAIA,EAAEoF,GAAKpF,EAAEmF,MAC5B6J,KAAK,UAAU,SAAAhP,GACd,IAAMwQ,EAAaC,KAAKC,MAAM,EAAK9C,aACnC,OAAIxN,OAAOuQ,KAAKH,GAAYI,SAAS5Q,EAAEC,MAC9BuQ,EAAWxQ,EAAEC,MAEf,4BAER+O,KAAK,QAAQ,SAAAhP,GACZ,IAAMwQ,EAAaC,KAAKC,MAAM,EAAK9C,aACnC,OAAIxN,OAAOuQ,KAAKH,GAAYI,SAAS5Q,EAAEC,MAC9BuQ,EAAWxQ,EAAEC,MAEf,4BAER4Q,GAAG,aAAa,SAAA7Q,GAAC,OAAI,EAAKqO,mBAAqB,EAAKyC,WAAW9Q,MAC/D6Q,GAAG,YAAY,SAAAxI,GAAC,OAAI,EAAKgG,mBAAqB,EAAK0C,cAGxD/H,KAAKmF,SAAWnF,KAAK4D,QAClBmC,OAAO,KACLC,KAAK,OAAQ,QACbA,KAAK,iBAAkB,IACzBU,UAAU,KACVY,KAAKtH,KAAK+D,QAAQ,SAAAjI,GAAI,gBAAOA,EAAKf,OAAO9D,KAAnB,YAA2B6E,EAAKhC,OAAO7C,SAC7DsQ,KAAK,KACHZ,MAAM,iBAAkB,YAEL,SAApB3G,KAAKyE,YAAuBzE,KAAKgI,mBAErChI,KAAKmF,SACFY,OAAO,QACLC,KAAK,QAAS,eACdA,KAAK,IAAKL,KACVK,KAAK,SAAU,0BACfA,KAAK,gBAAgB,SAAAhP,GAAC,OAAIqG,KAAK1D,IAAI,EAAG3C,EAAE+E,UAG7CiE,KAAK4D,QACFmC,OAAO,KACLC,KAAK,cAAe,cACpBA,KAAK,YAAa,IACpBU,UAAU,QACVY,KAAKtH,KAAK8D,QACVyD,KAAK,QACHvB,KAAK,KAAK,SAAAhP,GAAC,OAAIA,EAAEmF,GAAK,KACtB6J,KAAK,KAAK,SAAAhP,GAAC,OAAKA,EAAE6E,GAAK7E,EAAEiE,IAAM,KAC/B+K,KAAK,KAAM,UAEXiC,MAAK,SAAAjR,GAAC,OAAI,EAAKkR,WAAWlR,MAE7BgJ,KAAK4D,QACFmC,OAAO,KACLC,KAAK,cAAe,cACpBA,KAAK,YAAa,IACpBU,UAAU,QACVY,KAAKtH,KAAK8D,QACVyD,KAAK,QACLvB,KAAK,KAAK,SAAAhP,GAAC,OAAIA,EAAEmF,GAAK,KACpB6J,KAAK,YAAa,IAClBA,KAAK,cAAe,OACpBA,KAAK,KAAK,SAAAhP,GAAC,OAAMA,EAAE6E,GAAK7E,EAAEiE,IAAM,EAAK,MACrC+K,KAAK,KAAM,UAEXiC,MAAK,SAAAjR,GAAC,OAAI,EAAKmR,aAAanR,EAAEW,UAErCqI,KAAKkF,SACFa,OAAO,SACLkC,MAAK,SAAAjR,GAAC,gBAAOA,EAAEC,KAAT,aAAkB,EAAKkR,aAAanR,EAAEW,WAEjDqI,KAAKmF,SACFY,OAAO,SACLkC,MAAK,SAAAjR,GAAC,gBAAOA,EAAE+D,OAAO9D,KAAhB,cAA0BD,EAAE8C,OAAO7C,KAAnC,aAA4C,EAAKkR,aAAanR,EAAEW,aAvT/E,kBA+TE,SAAK0H,GACH,OAAO1C,UAAUrC,QAAU0F,KAAK6D,MAAQxE,EAAGW,MAAQA,KAAK6D,QAhU5D,mBAmUE,SAAMxE,GACJ,OAAO1C,UAAUrC,QAAU0F,KAAKgE,QAAU3E,EAAGW,MAAQA,KAAKgE,SApU9D,oBAuUE,SAAO3E,GACL,OAAO1C,UAAUrC,QAAU0F,KAAKiE,SAAW5E,EAAGW,MAAQA,KAAKiE,UAxU/D,mBA2UE,SAAM5E,GACJ,OAAO1C,UAAUrC,QAAU0F,KAAK6E,iBAAmBxF,EAAGW,MAAQA,KAAK6E,mBA5UvE,yBA+UE,SAAYxF,GACV,OAAO1C,UAAUrC,QAAU0F,KAAK0E,aAAerF,EAAGW,MAAQA,KAAK0E,eAhVnE,wBAmVE,SAAWrF,GACT,OAAO1C,UAAUrC,QAAU0F,KAAK4E,YAAcvF,EAAGW,MAAQA,KAAK4E,cApVlE,uBAuVE,SAAUvF,GACR,OAAO1C,UAAUrC,QAAU0F,KAAKyE,WAAapF,EAAGW,MAAQA,KAAKyE,aAxVjE,2BA2VE,SAAcpF,GACZ,OAAO1C,UAAUrC,QAAU0F,KAAKoF,eAAiB/F,EAAGW,MAAQA,KAAKoF,iBA5VrE,8BA+VE,SAAiB/F,GACf,OAAO1C,UAAUrC,QAAU0F,KAAKqF,kBAAoBhG,EAAGW,MAAQA,KAAKqF,oBAhWxE,oBAmWE,WAQE,OAPKrF,KAAKoI,cAIRpI,KAAKqI,QACLrI,KAAKsI,cAEAtI,U,2BA3WX,K,QCFa,GAAe,SAAC,G,IAAEuI,EAAO,UAAO,OAC3C,uBAAG5B,MAAO6B,IACR,yBAAK7B,MAAO8B,IACV,kBAAC,QAAI,CAACxR,KAAK,yBACX,yBAAK0P,MAAO+B,IAAgBH,MAK5BC,GAAc,CAClBrO,OAAQ,OACRwO,QAAS,OACTC,eAAgB,SAChBC,WAAY,UAGRJ,GAAkB,CACtBK,QAAS,YACTC,aAAc,MACdC,SAAU,WACVC,MAAO,qBACPC,WAAY,+BACZC,aAAc,MACdR,QAAS,OACTS,cAAe,MACfP,WAAY,SACZQ,WAAY,8DAGRX,GAAgB,CACpBY,WAAY,IClCd,wCAIO,IAAM,GAAS,IAAI,eCMkB,SAAC,G,IAAEC,EAAO,UAAEjC,EAAI,OAAEvL,EAAK,QAAE5B,EAAM,SAEnEqP,EAAwB,CAAEzO,OAAQ,SAAUjB,OAAQ,SAAUnC,MAAO,SAGrE8R,EAAoB,gCAAgCrS,OAAOuQ,KAAK6B,GAAuBjC,KAAK,MAI5F,IAAsB,mBAAS,CAAEmC,SAAS,EAAOnB,QAAS,KAAK,GAA7DlP,EAAK,KAAEsQ,EAAQ,KACjB,IAAsB,mBAAS,CAAEtO,MAAO,GAAIE,MAAO,KAAK,GAAtDH,EAAK,KAAEwO,EAAQ,KAEvB,qBAAU,WACRtC,EAAKjO,MAEHsQ,EAAS,CAACD,SAAS,EAAMnB,QAASjB,EAAKjO,MAAMkP,UAE7CqB,EAASC,OACV,CAACvC,IAGJ,IAwBMuC,EAAa,WACjB,IAAMC,EAAQxC,EAAKyC,OAAO,GAEpBC,EAAgBF,EAAMG,OAAOzO,MAAK,SAAA0O,GAAS,OAAAA,EAAMjT,OAASuS,EAAf,UAC3CW,EAAgBL,EAAMG,OAAOzO,MAAK,SAAA0O,GAAS,OAAAA,EAAMjT,OAASuS,EAAf,UAC3CY,EAAeN,EAAMG,OAAOzO,MAAK,SAAA0O,GAAS,OAAAA,EAAMjT,OAASuS,EAAf,SAE1Ca,EAAUL,aAAa,EAAbA,EAAezQ,OAAO+Q,UAChCC,EAAUJ,aAAa,EAAbA,EAAe5Q,OAAO+Q,UAChC/Q,EAAS6Q,aAAY,EAAZA,EAAc7Q,OAAO+Q,UAGpC,GApCe,SAACD,EAASE,EAAShR,GAClC,IAAIiR,GAAU,EAGd,KAAMH,GAAWE,GAAWhR,GAE1B,OADAoQ,EAAS,CAAED,SAAS,EAAMnB,QAASkB,KAClB,EAInB,IAAMgB,EAAgBJ,EAAQK,OAAM,SAAA1T,GAAK,uBAAOA,KAC1C2T,EAAgBJ,EAAQG,OAAM,SAAA1T,GAAK,uBAAOA,KAC1C4T,EAAgBrR,EAAOmR,OAAM,SAAA1T,GAAK,uBAAOA,KAE/C,OAAMyT,GAAiBE,GAAiBC,GAKxCjB,EAAS,IAEFa,IANLb,EAAS,CAAED,SAAS,EAAMnB,QA9BT,+FA+BA,GAmBHsC,CAASR,EAASE,EAAShR,GAC3C,CAEA,IAAMuR,EAAM,MAAOT,EAASE,EAAShR,GAMrC,MAFc,CAAE8B,MAFFuC,MAAMmN,KAAK,IAAIxN,IAAI8M,EAAQW,OAAOT,KAAWpN,KAAI,SAAAlD,GAAQ,MAAC,CAAEhD,KAAH,MAEhDsE,MADTuP,EAAI3N,KAAI,SAAAnG,GAAK,MAAC,CAAE+D,OAAQ/D,EAAE,GAAI8C,OAAQ9C,EAAE,GAAIW,OAAQX,EAAE,GAAGiU,QAA5C,UAOvBC,EAAQ,SAAA1H,GACZ,IAAM/G,EAAS,IAAI,EAAO+G,GACvBzH,MAAMA,GACN5B,OAAOA,GACPoC,MAAMgN,EAAQhN,OACd4O,UAAU5B,EAAQ4B,WAClBC,YAAY7B,EAAQ6B,aACpBC,cAAc9B,EAAQ8B,eACtBC,iBAAiB/B,EAAQ+B,kBACzB9D,WAAW+B,EAAQ/B,YACnBF,KAAKlM,GAER,IACEqB,EAAO8O,SACP,MAAOC,GACP7B,EAAS,CAACD,SAAS,EAAMnB,QAASiD,EAAYjD,YAIlD,OAAQlP,EAAMqQ,QACZ,kBAAC,GAAY,CAACnB,QAASlP,EAAMkP,UAE7B,yBACEkD,QAAS,OAAO1P,EAAK,IAAI5B,EACzBuR,IAAK,SAAAzR,GACH,SAAUA,GACPyM,UAAU,KACViF,SACH,SAAU1R,GAAMpD,KAAKqU,SDvGqCU,iBAAgB,SAACC,GACjF,OAAOA,EACJC,UAAU,CACTzL,KAAM,QACNpJ,KAAM,QACN8U,aAAc,UACdC,SAAU,CACRzC,QAAS,CACP,CACE5R,MAAO,UACP0P,MAAO,WAET,CACE1P,MAAO,OACP0P,MAAO,QAET,CACE1P,MAAO,QACP0P,MAAO,SAET,CACE1P,MAAO,SACP0P,MAAO,cAKd4E,aAAa,CACZ5L,KAAM,aACNpJ,KAAM,eACN8U,aAAc,KAEfD,UAAU,CACTzL,KAAM,cACNpJ,KAAM,QACN8U,aAAc,YACdC,SAAU,CACRzC,QAAS,CACP,CACE5R,MAAO,YACP0P,MAAO,aAET,CACE1P,MAAO,aACP0P,MAAO,cAET,CACE1P,MAAO,SACP0P,MAAO,UAET,CACE1P,MAAO,QACP0P,MAAO,SAET,CACE1P,MAAO,SACP0P,MAAO,UAET,CACE1P,MAAO,UACP0P,MAAO,WAET,CACE1P,MAAO,UACP0P,MAAO,WAET,CACE1P,MAAO,OACP0P,MAAO,QAET,CACE1P,MAAO,OACP0P,MAAO,QAET,CACE1P,MAAO,OACP0P,MAAO,YAKdyE,UAAU,CACTzL,KAAM,YACNpJ,KAAM,aACN8U,aAAc,OACdC,SAAU,CACRzC,QAAS,CACP,CACE5R,MAAO,OACP0P,MAAO,gBAET,CACE1P,MAAO,QACP0P,MAAO,SAET,CACE1P,MAAO,SACP0P,MAAO,UAET,CACE1P,MAAO,OACP0P,MAAO,YAKdyE,UAAU,CACTzL,KAAM,gBACNpJ,KAAM,iBACN8U,aAAc,OACdC,SAAU,CACRzC,QAAS,CACP,CACE5R,MAAO,QACP0P,MAAO,UAET,CACE1P,MAAO,aACP0P,MAAO,eAET,CACE1P,MAAO,OACP0P,MAAO,QAET,CACE1P,MAAO,OACP0P,MAAO,YAKd6E,iBAAiB,CAChB7L,KAAM,mBACNpJ,KAAM,sCACN8U,cAAc","file":"module.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 5);\n","module.exports = __WEBPACK_EXTERNAL_MODULE__0__;","module.exports = __WEBPACK_EXTERNAL_MODULE__1__;","module.exports = __WEBPACK_EXTERNAL_MODULE__2__;","module.exports = __WEBPACK_EXTERNAL_MODULE__3__;","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","export default function sum(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","import {min} from \"d3-array\";\n\nfunction targetDepth(d) {\n return d.target.depth;\n}\n\nexport function left(node) {\n return node.depth;\n}\n\nexport function right(node, n) {\n return n - 1 - node.height;\n}\n\nexport function justify(node, n) {\n return node.sourceLinks.length ? node.depth : n - 1;\n}\n\nexport function center(node) {\n return node.targetLinks.length ? node.depth\n : node.sourceLinks.length ? min(node.sourceLinks, targetDepth) - 1\n : 0;\n}\n","export default function constant(x) {\n return function() {\n return x;\n };\n}\n","import {max, min, sum} from \"d3-array\";\nimport {justify} from \"./align.js\";\nimport constant from \"./constant.js\";\n\nfunction ascendingSourceBreadth(a, b) {\n return ascendingBreadth(a.source, b.source) || a.index - b.index;\n}\n\nfunction ascendingTargetBreadth(a, b) {\n return ascendingBreadth(a.target, b.target) || a.index - b.index;\n}\n\nfunction ascendingBreadth(a, b) {\n return a.y0 - b.y0;\n}\n\nfunction value(d) {\n return d.value;\n}\n\nfunction defaultId(d) {\n return d.index;\n}\n\nfunction defaultNodes(graph) {\n return graph.nodes;\n}\n\nfunction defaultLinks(graph) {\n return graph.links;\n}\n\nfunction find(nodeById, id) {\n const node = nodeById.get(id);\n if (!node) throw new Error(\"missing: \" + id);\n return node;\n}\n\nfunction computeLinkBreadths({nodes}) {\n for (const node of nodes) {\n let y0 = node.y0;\n let y1 = y0;\n for (const link of node.sourceLinks) {\n link.y0 = y0 + link.width / 2;\n y0 += link.width;\n }\n for (const link of node.targetLinks) {\n link.y1 = y1 + link.width / 2;\n y1 += link.width;\n }\n }\n}\n\nexport default function Sankey() {\n let x0 = 0, y0 = 0, x1 = 1, y1 = 1; // extent\n let dx = 24; // nodeWidth\n let dy = 8, py; // nodePadding\n let id = defaultId;\n let align = justify;\n let sort;\n let linkSort;\n let nodes = defaultNodes;\n let links = defaultLinks;\n let iterations = 6;\n\n function sankey() {\n const graph = {nodes: nodes.apply(null, arguments), links: links.apply(null, arguments)};\n computeNodeLinks(graph);\n computeNodeValues(graph);\n computeNodeDepths(graph);\n computeNodeHeights(graph);\n computeNodeBreadths(graph);\n computeLinkBreadths(graph);\n return graph;\n }\n\n sankey.update = function(graph) {\n computeLinkBreadths(graph);\n return graph;\n };\n\n sankey.nodeId = function(_) {\n return arguments.length ? (id = typeof _ === \"function\" ? _ : constant(_), sankey) : id;\n };\n\n sankey.nodeAlign = function(_) {\n return arguments.length ? (align = typeof _ === \"function\" ? _ : constant(_), sankey) : align;\n };\n\n sankey.nodeSort = function(_) {\n return arguments.length ? (sort = _, sankey) : sort;\n };\n\n sankey.nodeWidth = function(_) {\n return arguments.length ? (dx = +_, sankey) : dx;\n };\n\n sankey.nodePadding = function(_) {\n return arguments.length ? (dy = py = +_, sankey) : dy;\n };\n\n sankey.nodes = function(_) {\n return arguments.length ? (nodes = typeof _ === \"function\" ? _ : constant(_), sankey) : nodes;\n };\n\n sankey.links = function(_) {\n return arguments.length ? (links = typeof _ === \"function\" ? _ : constant(_), sankey) : links;\n };\n\n sankey.linkSort = function(_) {\n return arguments.length ? (linkSort = _, sankey) : linkSort;\n };\n\n sankey.size = function(_) {\n return arguments.length ? (x0 = y0 = 0, x1 = +_[0], y1 = +_[1], sankey) : [x1 - x0, y1 - y0];\n };\n\n sankey.extent = function(_) {\n return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], sankey) : [[x0, y0], [x1, y1]];\n };\n\n sankey.iterations = function(_) {\n return arguments.length ? (iterations = +_, sankey) : iterations;\n };\n\n function computeNodeLinks({nodes, links}) {\n for (const [i, node] of nodes.entries()) {\n node.index = i;\n node.sourceLinks = [];\n node.targetLinks = [];\n }\n const nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d]));\n for (const [i, link] of links.entries()) {\n link.index = i;\n let {source, target} = link;\n if (typeof source !== \"object\") source = link.source = find(nodeById, source);\n if (typeof target !== \"object\") target = link.target = find(nodeById, target);\n source.sourceLinks.push(link);\n target.targetLinks.push(link);\n }\n if (linkSort != null) {\n for (const {sourceLinks, targetLinks} of nodes) {\n sourceLinks.sort(linkSort);\n targetLinks.sort(linkSort);\n }\n }\n }\n\n function computeNodeValues({nodes}) {\n for (const node of nodes) {\n node.value = node.fixedValue === undefined\n ? Math.max(sum(node.sourceLinks, value), sum(node.targetLinks, value))\n : node.fixedValue;\n }\n }\n\n function computeNodeDepths({nodes}) {\n const n = nodes.length;\n let current = new Set(nodes);\n let next = new Set;\n let x = 0;\n while (current.size) {\n for (const node of current) {\n node.depth = x;\n for (const {target} of node.sourceLinks) {\n next.add(target);\n }\n }\n if (++x > n) throw new Error(\"circular link\");\n current = next;\n next = new Set;\n }\n }\n\n function computeNodeHeights({nodes}) {\n const n = nodes.length;\n let current = new Set(nodes);\n let next = new Set;\n let x = 0;\n while (current.size) {\n for (const node of current) {\n node.height = x;\n for (const {source} of node.targetLinks) {\n next.add(source);\n }\n }\n if (++x > n) throw new Error(\"circular link\");\n current = next;\n next = new Set;\n }\n }\n\n function computeNodeLayers({nodes}) {\n const x = max(nodes, d => d.depth) + 1;\n const kx = (x1 - x0 - dx) / (x - 1);\n const columns = new Array(x);\n for (const node of nodes) {\n const i = Math.max(0, Math.min(x - 1, Math.floor(align.call(null, node, x))));\n node.layer = i;\n node.x0 = x0 + i * kx;\n node.x1 = node.x0 + dx;\n if (columns[i]) columns[i].push(node);\n else columns[i] = [node];\n }\n if (sort) for (const column of columns) {\n column.sort(sort);\n }\n return columns;\n }\n\n function initializeNodeBreadths(columns) {\n const ky = min(columns, c => (y1 - y0 - (c.length - 1) * py) / sum(c, value));\n for (const nodes of columns) {\n let y = y0;\n for (const node of nodes) {\n node.y0 = y;\n node.y1 = y + node.value * ky;\n y = node.y1 + py;\n for (const link of node.sourceLinks) {\n link.width = link.value * ky;\n }\n }\n y = (y1 - y + py) / (nodes.length + 1);\n for (let i = 0; i < nodes.length; ++i) {\n const node = nodes[i];\n node.y0 += y * (i + 1);\n node.y1 += y * (i + 1);\n }\n reorderLinks(nodes);\n }\n }\n\n function computeNodeBreadths(graph) {\n const columns = computeNodeLayers(graph);\n py = Math.min(dy, (y1 - y0) / (max(columns, c => c.length) - 1));\n initializeNodeBreadths(columns);\n for (let i = 0; i < iterations; ++i) {\n const alpha = Math.pow(0.99, i);\n const beta = Math.max(1 - alpha, (i + 1) / iterations);\n relaxRightToLeft(columns, alpha, beta);\n relaxLeftToRight(columns, alpha, beta);\n }\n }\n\n // Reposition each node based on its incoming (target) links.\n function relaxLeftToRight(columns, alpha, beta) {\n for (let i = 1, n = columns.length; i < n; ++i) {\n const column = columns[i];\n for (const target of column) {\n let y = 0;\n let w = 0;\n for (const {source, value} of target.targetLinks) {\n let v = value * (target.layer - source.layer);\n y += targetTop(source, target) * v;\n w += v;\n }\n if (!(w > 0)) continue;\n let dy = (y / w - target.y0) * alpha;\n target.y0 += dy;\n target.y1 += dy;\n reorderNodeLinks(target);\n }\n if (sort === undefined) column.sort(ascendingBreadth);\n resolveCollisions(column, beta);\n }\n }\n\n // Reposition each node based on its outgoing (source) links.\n function relaxRightToLeft(columns, alpha, beta) {\n for (let n = columns.length, i = n - 2; i >= 0; --i) {\n const column = columns[i];\n for (const source of column) {\n let y = 0;\n let w = 0;\n for (const {target, value} of source.sourceLinks) {\n let v = value * (target.layer - source.layer);\n y += sourceTop(source, target) * v;\n w += v;\n }\n if (!(w > 0)) continue;\n let dy = (y / w - source.y0) * alpha;\n source.y0 += dy;\n source.y1 += dy;\n reorderNodeLinks(source);\n }\n if (sort === undefined) column.sort(ascendingBreadth);\n resolveCollisions(column, beta);\n }\n }\n\n function resolveCollisions(nodes, alpha) {\n const i = nodes.length >> 1;\n const subject = nodes[i];\n resolveCollisionsBottomToTop(nodes, subject.y0 - py, i - 1, alpha);\n resolveCollisionsTopToBottom(nodes, subject.y1 + py, i + 1, alpha);\n resolveCollisionsBottomToTop(nodes, y1, nodes.length - 1, alpha);\n resolveCollisionsTopToBottom(nodes, y0, 0, alpha);\n }\n\n // Push any overlapping nodes down.\n function resolveCollisionsTopToBottom(nodes, y, i, alpha) {\n for (; i < nodes.length; ++i) {\n const node = nodes[i];\n const dy = (y - node.y0) * alpha;\n if (dy > 1e-6) node.y0 += dy, node.y1 += dy;\n y = node.y1 + py;\n }\n }\n\n // Push any overlapping nodes up.\n function resolveCollisionsBottomToTop(nodes, y, i, alpha) {\n for (; i >= 0; --i) {\n const node = nodes[i];\n const dy = (node.y1 - y) * alpha;\n if (dy > 1e-6) node.y0 -= dy, node.y1 -= dy;\n y = node.y0 - py;\n }\n }\n\n function reorderNodeLinks({sourceLinks, targetLinks}) {\n if (linkSort === undefined) {\n for (const {source: {sourceLinks}} of targetLinks) {\n sourceLinks.sort(ascendingTargetBreadth);\n }\n for (const {target: {targetLinks}} of sourceLinks) {\n targetLinks.sort(ascendingSourceBreadth);\n }\n }\n }\n\n function reorderLinks(nodes) {\n if (linkSort === undefined) {\n for (const {sourceLinks, targetLinks} of nodes) {\n sourceLinks.sort(ascendingTargetBreadth);\n targetLinks.sort(ascendingSourceBreadth);\n }\n }\n }\n\n // Returns the target.y0 that would produce an ideal link from source to target.\n function targetTop(source, target) {\n let y = source.y0 - (source.sourceLinks.length - 1) * py / 2;\n for (const {target: node, width} of source.sourceLinks) {\n if (node === target) break;\n y += width + py;\n }\n for (const {source: node, width} of target.targetLinks) {\n if (node === source) break;\n y -= width;\n }\n return y;\n }\n\n // Returns the source.y0 that would produce an ideal link from source to target.\n function sourceTop(source, target) {\n let y = target.y0 - (target.targetLinks.length - 1) * py / 2;\n for (const {source: node, width} of target.targetLinks) {\n if (node === source) break;\n y += width + py;\n }\n for (const {target: node, width} of source.sourceLinks) {\n if (node === target) break;\n y -= width;\n }\n return y;\n }\n\n return sankey;\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport {slice} from \"../array.js\";\nimport constant from \"../constant.js\";\nimport {x as pointX, y as pointY} from \"../point.js\";\nimport pointRadial from \"../pointRadial.js\";\n\nfunction linkSource(d) {\n return d.source;\n}\n\nfunction linkTarget(d) {\n return d.target;\n}\n\nfunction link(curve) {\n var source = linkSource,\n target = linkTarget,\n x = pointX,\n y = pointY,\n context = null;\n\n function link() {\n var buffer, argv = slice.call(arguments), s = source.apply(this, argv), t = target.apply(this, argv);\n if (!context) context = buffer = path();\n curve(context, +x.apply(this, (argv[0] = s, argv)), +y.apply(this, argv), +x.apply(this, (argv[0] = t, argv)), +y.apply(this, argv));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n link.source = function(_) {\n return arguments.length ? (source = _, link) : source;\n };\n\n link.target = function(_) {\n return arguments.length ? (target = _, link) : target;\n };\n\n link.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), link) : x;\n };\n\n link.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), link) : y;\n };\n\n link.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), link) : context;\n };\n\n return link;\n}\n\nfunction curveHorizontal(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0 = (x0 + x1) / 2, y0, x0, y1, x1, y1);\n}\n\nfunction curveVertical(context, x0, y0, x1, y1) {\n context.moveTo(x0, y0);\n context.bezierCurveTo(x0, y0 = (y0 + y1) / 2, x1, y0, x1, y1);\n}\n\nfunction curveRadial(context, x0, y0, x1, y1) {\n var p0 = pointRadial(x0, y0),\n p1 = pointRadial(x0, y0 = (y0 + y1) / 2),\n p2 = pointRadial(x1, y0),\n p3 = pointRadial(x1, y1);\n context.moveTo(p0[0], p0[1]);\n context.bezierCurveTo(p1[0], p1[1], p2[0], p2[1], p3[0], p3[1]);\n}\n\nexport function linkHorizontal() {\n return link(curveHorizontal);\n}\n\nexport function linkVertical() {\n return link(curveVertical);\n}\n\nexport function linkRadial() {\n var l = link(curveRadial);\n l.angle = l.x, delete l.x;\n l.radius = l.y, delete l.y;\n return l;\n}\n","import {linkHorizontal} from \"d3-shape\";\n\nfunction horizontalSource(d) {\n return [d.source.x1, d.y0];\n}\n\nfunction horizontalTarget(d) {\n return [d.target.x0, d.y1];\n}\n\nexport default function() {\n return linkHorizontal()\n .source(horizontalSource)\n .target(horizontalTarget);\n}\n","import * as d3 from 'd3';\nimport * as d3Sankey from 'd3-sankey';\n\nconst DISPLAY_VALUES = { total: 'total', percentage: 'percentage', both: 'both', none: 'none' };\nconst EDGE_COLORS = { none: 'none', path: 'path', input: 'input', output: 'output'};\n\nexport class Sankey {\n constructor(svg, container) {\n this._svg = svg;\n this._container = container || svg;\n this._gBound = null;\n\n this._data = null;\n this._nodes = null;\n this._links = null;\n\n this._width = 0;\n this._height = 0;\n this._boundedWidth = 0;\n this._boundedHeight = 0;\n\n this._marginTop = 20;\n this._marginRight = 20;\n this._marginBottom = 20;\n this._marginLeft = 20;\n\n this._background = 'rgba(0, 0, 0, 0)';\n this._edgeColor = 'path';\n this._colorScheme = 'Tableau10';\n this._colorScale = null;\n this._colorArray = '';\n\n this._sankeyAlignType = 'Justify';\n this._sankeyAlign = null;\n this._sankeyGenerator = null;\n this._sankeyNodeWith = 85;\n this._sankeyNodePadding = 20;\n\n this._svgNode = null;\n this._svgLink = null;\n\n this._displayValues = 'none';\n this._highlightOnHover = false;\n\n }\n \n _init() {\n this._setBoundDimensions();\n this._setColorScale();\n this._configureSankey();\n this._calculateSankey();\n }\n\n // ---------------------------- DIMENSIONS ----------------------------\n\n _setBoundDimensions() {\n this._boundedWidth = this._width - this._marginLeft - this._marginRight;\n this._boundedHeight = this._height - this._marginTop - this._marginBottom;\n }\n\n // ------------------------------ COLOR -------------------------------\n\n _setColorScale() {\n this._colorScale = d3.scaleOrdinal(d3[`scheme${this._colorScheme}`]);\n }\n\n _color(node) {\n return this._colorScale(node.name);\n }\n\n // ------------------------------ SANKEY -------------------------------\n\n _configureSankey() {\n this._sankeyAlign = d3Sankey[`sankey${this._sankeyAlignType}`];\n\n this._sankeyGenerator = d3Sankey\n .sankey()\n .nodeId(d => d.name)\n .nodeAlign(this._sankeyAlign)\n .nodeWidth(this._sankeyNodeWith)\n .nodePadding(this._sankeyNodePadding)\n .extent([\n [0, 0],\n [this._boundedWidth, this._boundedHeight],\n ]);\n }\n\n _calculateSankey() {\n const sankeyData = this._sankeyGenerator({\n nodes: this._data.nodes.map(d => Object.assign({}, d)),\n links: this._data.links.map(d => Object.assign({}, d))\n });\n\n this._nodes = sankeyData.nodes;\n this._links = sankeyData.links;\n }\n\n // ---------------------------- VALIDATIONS -----------------------------\n\n _validate() {\n return this._data &&\n this._data.nodes &&\n this._data.links &&\n this._data.nodes.length > 0 &&\n this._data.links.length > 0\n }\n\n // ------------------------------ HELPERS -------------------------------\n\n _setLinkGradient() {\n const gradient = this._svgLink\n .append('linearGradient')\n .attr('id', d => (d.uid = `link-${d.index}-${Math.random()}`))\n .attr('gradientUnits', 'userSpaceOnUse')\n .attr('x1', d => d.source.x1)\n .attr('x2', d => d.target.x0);\n\n gradient\n .append('stop')\n .attr('offset', '0%')\n .attr('stop-color', d => this._color(d.source));\n\n gradient\n .append('stop')\n .attr('offset', '100%')\n .attr('stop-color', d => this._color(d.target));\n }\n\n _setLinkStroke(d) {\n switch (this._edgeColor) {\n case EDGE_COLORS.none:\n return '#aaa';\n case EDGE_COLORS.path:\n return `url(#${d.uid})`;\n case EDGE_COLORS.input:\n return this._color(d.source)\n case EDGE_COLORS.output:\n return this._color(d.target)\n default:\n return\n }\n }\n\n // NODE HOVER\n _showLinks(currentNode) {\n const linkedNodes = [];\n\n let traverse = [\n {\n linkType: 'sourceLinks',\n nodeType: 'target',\n },\n {\n linkType: 'targetLinks',\n nodeType: 'source',\n },\n ];\n\n traverse.forEach(step => {\n currentNode[step.linkType].forEach(l => {\n linkedNodes.push(l[step.nodeType]);\n });\n });\n\n // highlight linked nodes\n this._gBound\n .selectAll('.sankey-node')\n .style('opacity', node =>\n currentNode.name === node.name ||\n linkedNodes.find(linkedNode => linkedNode.name === node.name) ? \n '1' : '0.2'\n );\n\n // highlight links\n this._gBound\n .selectAll('.sankey-link')\n .style('opacity', link =>\n link && (\n link.source.name === currentNode.name || \n link.target.name === currentNode.name\n ) ? \n '1' : '0.2'\n );\n };\n\n _showAll() {\n this._gBound.selectAll('.sankey-node').style('opacity', '1');\n this._gBound.selectAll('.sankey-link').style('opacity', '1');\n };\n\n // NODE LABELING\n _formatValue(value) { return d3.format('.2~f')(value); }\n _formatPercent(percent) { return d3.format('.2~%')(percent); }\n _formatThousand(value) { return d3.format('.3~s')(value); }\n\n _labelNode(currentNode) {\n const nodesAtDepth = this._nodes.filter(node => node.depth === currentNode.depth);\n const totalAtDepth = d3.sum(nodesAtDepth, node => node.value);\n const nodeValue = this._formatThousand(currentNode.value);\n const nodePercent = this._formatPercent(currentNode.value / totalAtDepth);\n\n let label = currentNode.name;\n switch (this._displayValues) {\n case DISPLAY_VALUES.total:\n label = `${label}\n ${nodeValue}`;\n break;\n case DISPLAY_VALUES.percentage:\n label = `${label}\n ${nodePercent}`;\n break;\n case DISPLAY_VALUES.both:\n label = `${label}\n ${nodePercent} - ${nodeValue}`;\n break;\n default:\n break;\n }\n return label;\n };\n\n // ------------------------------ DRAWING -------------------------------\n\n _renderSVG() {\n // BACKGROUND\n this._container.style('background-color', this._background)\n\n // BOUNDS\n this._gBound = this._container.append('g')\n .attr('transform', `translate(${this._marginLeft}, ${this._marginTop})`);\n\n // NODES\n this._svgNode = this._gBound\n .append('g')\n .attr('stroke', '#000')\n .selectAll('.sankey-node')\n .data(this._nodes, node => node.name)\n .join('rect')\n .attr('class', 'sankey-node')\n .attr('id', d => d.name)\n .attr('x', d => d.x0)\n .attr('y', d => d.y0)\n .attr('rx', 2)\n .attr('ry', 2)\n .attr('height', d => d.y1 - d.y0)\n .attr('width', d => d.x1 - d.x0)\n .attr('stroke', d => {\n const colorArray = JSON.parse(this._colorArray);\n if (Object.keys(colorArray).includes(d.name)) {\n return colorArray[d.name];\n }\n return \"rgba(148, 153, 168, 1)\";\n })\n .attr('fill', d => {\n const colorArray = JSON.parse(this._colorArray);\n if (Object.keys(colorArray).includes(d.name)) {\n return colorArray[d.name];\n }\n return \"rgba(148, 153, 168, 1)\";\n })\n .on('mouseover', d => this._highlightOnHover && this._showLinks(d))\n .on('mouseout', _ => this._highlightOnHover && this._showAll());\n\n // LINKS\n this._svgLink = this._gBound\n .append('g')\n .attr('fill', 'none')\n .attr('stroke-opacity', 0.3)\n .selectAll('g')\n .data(this._links, link => `${link.source.name}-${link.target.name}`)\n .join('g')\n .style('mix-blend-mode', 'multiply');\n\n if (this._edgeColor === 'path') this._setLinkGradient()\n\n this._svgLink\n .append('path')\n .attr('class', 'sankey-link')\n .attr('d', d3Sankey.sankeyLinkHorizontal())\n .attr('stroke', \"rgba(182, 185, 196, 1)\")\n .attr('stroke-width', d => Math.max(1, d.width)); \n\n // LABELS\n this._gBound\n .append('g')\n .attr('font-family', 'sans-serif')\n .attr('font-size', 10)\n .selectAll('text')\n .data(this._nodes)\n .join('text')\n .attr('x', d => d.x0 + 8)\n .attr('y', d => (d.y1 + d.y0) / 2)\n .attr('dy', '0.35em')\n //.attr('text-anchor', d => (d.x0 < this._width / 2 ? 'start' : 'end'))\n .text(d => this._labelNode(d));\n\n this._gBound\n .append('g')\n .attr('font-family', 'sans-serif')\n .attr('font-size', 10)\n .selectAll('text')\n .data(this._nodes)\n .join('text')\n .attr('x', d => d.x0 + 8)\n .attr('font-size', 14)\n .attr('font-weight', '700')\n .attr('y', d => ((d.y1 + d.y0) / 2) + 16)\n .attr('dy', '0.35em')\n //.attr('text-anchor', d => (d.x0 < this._width / 2 ? 'start' : 'end'))\n .text(d => this._formatValue(d.value));\n\n this._svgNode\n .append('title')\n .text(d => `${d.name}\\n${this._formatValue(d.value)}`);\n\n this._svgLink\n .append('title')\n .text(d => `${d.source.name} → ${d.target.name}\\n${this._formatValue(d.value)}`);\n }\n\n\n // ----------------------------------------------------------------------- \n // ------------------------------ API ------------------------------\n // ----------------------------------------------------------------------- \n\n data(_) {\n return arguments.length ? (this._data = _, this) : this._data;\n };\n\n width(_) {\n return arguments.length ? (this._width = +_, this) : this._width;\n };\n\n height(_) {\n return arguments.length ? (this._height = +_, this) : this._height;\n };\n\n align(_) {\n return arguments.length ? (this._sankeyAlignType = _, this) : this._sankeyAlignType;\n }\n\n colorScheme(_) {\n return arguments.length ? (this._colorScheme = _, this) : this._colorScheme;\n }\n\n colorArray(_) {\n return arguments.length ? (this._colorArray = _, this) : this._colorArray;\n }\n\n edgeColor(_) {\n return arguments.length ? (this._edgeColor = _, this) : this._edgeColor;\n }\n\n displayValues(_) {\n return arguments.length ? (this._displayValues = _, this) : this._displayValues;\n }\n\n highlightOnHover(_) {\n return arguments.length ? (this._highlightOnHover = _, this) : this._highlightOnHover;\n }\n\n render() {\n if (!this._validate()) {\n // no graph data\n }\n else {\n this._init();\n this._renderSVG()\n }\n return this;\n }\n}\n","// @ts-nocheck\nimport React from 'react';\nimport { Icon } from '@grafana/ui';\n\nexport const ErrorMessage = ({ message }) => ( \n \n
\n
\n)\n\nconst panelStyles = {\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center'\n}\n\nconst containerStyles = {\n padding: '15px 20px',\n marginBottom: '4px',\n position: 'relative',\n color: 'rgb(255, 255, 255)',\n textShadow: 'rgb(0 0 0 / 20%) 0px 1px 0px',\n borderRadius: '3px',\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n background: 'linear-gradient(90deg, rgb(224, 47, 68), rgb(224, 47, 68))'\n}\n\nconst messageStyles = {\n marginLeft: 10\n}\n","import { PanelPlugin } from '@grafana/data';\nimport { SankeyOptions } from './types';\nimport { SankeyPanel } from './SankeyPanel';\n\nexport const plugin = new PanelPlugin(SankeyPanel).setPanelOptions((builder) => {\n return builder\n .addSelect({\n path: 'align',\n name: 'Align',\n defaultValue: 'Justify',\n settings: {\n options: [\n {\n value: 'Justify',\n label: 'Justify',\n },\n {\n value: 'Left',\n label: 'Left',\n },\n {\n value: 'Right',\n label: 'Right',\n },\n {\n value: 'Center',\n label: 'Center',\n },\n ],\n },\n })\n .addTextInput({\n path: 'colorArray',\n name: 'Color Object',\n defaultValue: '',\n })\n .addSelect({\n path: 'colorScheme',\n name: 'Color',\n defaultValue: 'Tableau10',\n settings: {\n options: [\n {\n value: 'Tableau10',\n label: 'Tableau10',\n },\n {\n value: 'Category10',\n label: 'Category10',\n },\n {\n value: 'Accent',\n label: 'Accent',\n },\n {\n value: 'Dark2',\n label: 'Dark2',\n },\n {\n value: 'Paired',\n label: 'Paired',\n },\n {\n value: 'Pastel1',\n label: 'Pastel1',\n },\n {\n value: 'Pastel2',\n label: 'Pastel2',\n },\n {\n value: 'Set1',\n label: 'Set1',\n },\n {\n value: 'Set2',\n label: 'Set2',\n },\n {\n value: 'Set3',\n label: 'Set3',\n },\n ],\n },\n })\n .addSelect({\n path: 'edgeColor',\n name: 'Edge Color',\n defaultValue: 'path',\n settings: {\n options: [\n {\n value: 'path',\n label: 'input-output',\n },\n {\n value: 'input',\n label: 'input',\n },\n {\n value: 'output',\n label: 'output',\n },\n {\n value: 'none',\n label: 'none',\n },\n ],\n },\n })\n .addSelect({\n path: 'displayValues',\n name: 'Display Values',\n defaultValue: 'none',\n settings: {\n options: [\n {\n value: 'total',\n label: 'Totals',\n },\n {\n value: 'percentage',\n label: 'Percentages',\n },\n {\n value: 'both',\n label: 'Both',\n },\n {\n value: 'none',\n label: 'None',\n },\n ],\n },\n })\n .addBooleanSwitch({\n path: 'highlightOnHover',\n name: 'Highlight connections on node hover',\n defaultValue: false,\n });\n});\n","// @ts-nocheck\nimport React, { useState, useEffect } from 'react';\nimport * as d3 from 'd3';\nimport { PanelProps } from '@grafana/data';\nimport { SankeyOptions } from 'types';\nimport { Sankey } from 'Sankey'\nimport { ErrorMessage } from 'Error'\n\ninterface Props extends PanelProps {}\n\nexport const SankeyPanel: React.FC = ({ options, data, width, height }) => {\n // ------------------------ CHART CONSTANTS -----------------------\n const CHART_REQUIRED_FIELDS = { source: 'source', target: 'target', value: 'value' };\n\n // ------------------------ ERROR MESSAGES ------------------------\n const requiredFieldsMsg = `Required fields not present: ${Object.keys(CHART_REQUIRED_FIELDS).join(', ')}`;\n const fieldTypeMsg = `Fields should have the following types: source (string), target (string), value (numeric)`;\n\n // ------------------------- REACT HOOKS --------------------------\n const [ error, setError ] = useState({ isError: false, message: '' })\n const [ graph, setGraph ] = useState({ nodes: [], links: [] })\n\n useEffect(() => {\n data.error\n ?\n setError({isError: true, message: data.error.message})\n :\n setGraph(buildGraph())\n }, [data])\n\n // ------------------------- DATA ACQUISITION -------------------------\n const validate = (sources, targets, values) => {\n let isValid = true;\n\n // REQUIRED FIELDS\n if (!(sources && targets && values)) {\n setError({ isError: true, message: requiredFieldsMsg })\n return isValid = false;\n }\n\n // FIELD TYPES\n const sourcesString = sources.every(d => typeof d === 'string')\n const targetsString = targets.every(d => typeof d === 'string')\n const valuesNumeric = values.every(d => typeof d === 'number')\n\n if (!(sourcesString && targetsString && valuesNumeric)) {\n setError({ isError: true, message: fieldTypeMsg })\n return isValid = false;\n }\n\n setError({});\n\n return isValid;\n }\n\n const buildGraph = () => {\n const frame = data.series[0];\n\n const sourceAccesor = frame.fields.find(field => field.name === CHART_REQUIRED_FIELDS.source);\n const targetAccesor = frame.fields.find(field => field.name === CHART_REQUIRED_FIELDS.target);\n const valueAccesor = frame.fields.find(field => field.name === CHART_REQUIRED_FIELDS.value);\n\n const sources = sourceAccesor?.values.toArray();\n const targets = targetAccesor?.values.toArray();\n const values = valueAccesor?.values.toArray();\n\n const isValid = validate(sources, targets, values);\n if (!isValid) {return}\n \n const zip = d3.zip(sources, targets, values);\n \n const nodes = Array.from(new Set(sources.concat(targets))).map(node => ({ name: node }));\n const links = zip.map(d => ({ source: d[0], target: d[1], value: +d[2].toFixed(2) }));\n const graph = { nodes, links };\n\n return graph\n }\n\n // ------------------------------- CHART ------------------------------\n const chart = svg => {\n const sankey = new Sankey(svg)\n .width(width)\n .height(height)\n .align(options.align)\n .edgeColor(options.edgeColor)\n .colorScheme(options.colorScheme)\n .displayValues(options.displayValues)\n .highlightOnHover(options.highlightOnHover)\n .colorArray(options.colorArray)\n .data(graph)\n\n try {\n sankey.render();\n } catch (renderError) {\n setError({isError: true, message: renderError.message})\n }\n };\n\n return (error.isError ?\n \n :\n