From f2619b492e8793897c0c8e30e0ea6b16d1be1078 Mon Sep 17 00:00:00 2001 From: Spikatrix <12792882+Spikatrix@users.noreply.github.com> Date: Thu, 19 Oct 2023 12:01:11 +0000 Subject: [PATCH 1/2] Adhoc filter style fix --- packages/grafana-ui/src/themes/mixins.ts | 6 +++--- .../app/features/variables/pickers/PickerRenderer.tsx | 10 +++++++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/grafana-ui/src/themes/mixins.ts b/packages/grafana-ui/src/themes/mixins.ts index 7c798aa3bdea1..e633ae2a98320 100644 --- a/packages/grafana-ui/src/themes/mixins.ts +++ b/packages/grafana-ui/src/themes/mixins.ts @@ -40,16 +40,16 @@ export function mediaUp(breakpoint: string) { return `only screen and (min-width: ${breakpoint})`; } -// const isGrafanaTheme2 = (theme: GrafanaTheme | GrafanaTheme2): theme is GrafanaTheme2 => theme.hasOwnProperty('v1'); +const isGrafanaTheme2 = (theme: GrafanaTheme | GrafanaTheme2): theme is GrafanaTheme2 => theme.hasOwnProperty('v1'); export const focusCss = (theme: GrafanaTheme | GrafanaTheme2) => { - /* const isTheme2 = isGrafanaTheme2(theme); + const isTheme2 = isGrafanaTheme2(theme); const firstColor = isTheme2 ? theme.colors.background.canvas : theme.colors.bodyBg; const secondColor = isTheme2 ? theme.colors.primary.main : theme.colors.formFocusOutline; - box-shadow: 0 0 0 2px ${firstColor}, 0 0 0px 4px ${secondColor}; */ return ` outline: 2px dotted transparent; outline-offset: 2px; + box-shadow: 0 0 0 2px ${firstColor}, 0 0 0px 4px ${secondColor}; transition-property: outline, outline-offset, box-shadow; transition-duration: 0.2s; transition-timing-function: cubic-bezier(0.19, 1, 0.22, 1);`; diff --git a/public/app/features/variables/pickers/PickerRenderer.tsx b/public/app/features/variables/pickers/PickerRenderer.tsx index 597eacb21d4da..bf66fb93a78fe 100644 --- a/public/app/features/variables/pickers/PickerRenderer.tsx +++ b/public/app/features/variables/pickers/PickerRenderer.tsx @@ -25,9 +25,17 @@ const renderWrapperStyle = css` font-size: 12px; line-height: 24px; } - & span { + + /* Center align filter picker buttons */ + & button { margin-top: 2px; } + + /* Adhoc filter: Disable green border and make input height similar to others */ + & div[class*='input-wrapper'] { + min-height: 0 !important; + box-shadow: none !important; + } `; export const PickerRenderer: FunctionComponent = (props) => { From 240315d0e371370cdc4cb052b70e5c7a1c157a01 Mon Sep 17 00:00:00 2001 From: Spikatrix <12792882+Spikatrix@users.noreply.github.com> Date: Thu, 19 Oct 2023 12:03:31 +0000 Subject: [PATCH 2/2] Update sankey plugin --- .../plugins/panel/sankey-panel-0.5.0/logo.svg | 20 - .../panel/sankey-panel-0.5.0/module.js | 341 ++++++------------ .../panel/sankey-panel-0.5.0/module.js.map | 2 +- .../panel/sankey-panel-0.5.0/plugin.json | 2 +- public/microfrontends/fn_dashboard/index.html | 4 +- 5 files changed, 124 insertions(+), 245 deletions(-) delete mode 100644 public/app/plugins/panel/sankey-panel-0.5.0/logo.svg diff --git a/public/app/plugins/panel/sankey-panel-0.5.0/logo.svg b/public/app/plugins/panel/sankey-panel-0.5.0/logo.svg deleted file mode 100644 index 2d41fa5441e64..0000000000000 --- a/public/app/plugins/panel/sankey-panel-0.5.0/logo.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ 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 index e2023a5d47491..ac5c5013f822e 100644 --- a/public/app/plugins/panel/sankey-panel-0.5.0/module.js +++ b/public/app/plugins/panel/sankey-panel-0.5.0/module.js @@ -1,12 +1,10 @@ /*! For license information please see module.js.LICENSE.txt */ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { return (function (t) { - let e = {}; + var e = {}; function n(r) { - if (e[r]) { - return e[r].exports; - } - let o = (e[r] = { i: r, l: !1, exports: {} }); + 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 ( @@ -16,23 +14,17 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { n.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: r }); }), (n.r = function (t) { - 'undefined' !== typeof Symbol && + '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; - } - let r = Object.create(null); - if ( - (n.r(r), Object.defineProperty(r, 'default', { enumerable: !0, value: t }), 2 & e && 'string' !== typeof t) - ) { - for (let o in t) { + 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, @@ -40,12 +32,10 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { return t[e]; }.bind(null, o) ); - } - } return r; }), (n.n = function (t) { - let e = + var e = t && t.__esModule ? function () { return t.default; @@ -78,7 +68,7 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { function (t, e, n) { 'use strict'; n.r(e); - let r = {}; + var r = {}; n.r(r), n.d(r, 'sankey', function () { return M; @@ -98,100 +88,73 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { n.d(r, 'sankeyLinkHorizontal', function () { return q; }); - let o = n(2); - let i = function () { + var o = n(2); + var i = function () { return (i = Object.assign || function (t) { - for (var e, n = 1, r = arguments.length; n < r; n++) { - for (let o in (e = arguments[n])) { - Object.prototype.hasOwnProperty.call(e, o) && (t[o] = e[o]); - } - } + for (var e, n = 1, r = arguments.length; n < r; n++) + for (var o in (e = arguments[n])) Object.prototype.hasOwnProperty.call(e, o) && (t[o] = e[o]); return t; }).apply(this, arguments); }; function a(t, e) { - let n = {}; - for (var r in t) { - Object.prototype.hasOwnProperty.call(t, r) && e.indexOf(r) < 0 && (n[r] = t[r]); - } - if (null != t && 'function' === typeof Object.getOwnPropertySymbols) { - let o = 0; - for (r = Object.getOwnPropertySymbols(t); o < r.length; o++) { + var n = {}; + for (var r in t) Object.prototype.hasOwnProperty.call(t, r) && e.indexOf(r) < 0 && (n[r] = t[r]); + if (null != t && 'function' == typeof Object.getOwnPropertySymbols) { + var o = 0; + for (r = Object.getOwnPropertySymbols(t); o < r.length; o++) e.indexOf(r[o]) < 0 && Object.prototype.propertyIsEnumerable.call(t, r[o]) && (n[r[o]] = t[r[o]]); - } } return n; } function s(t, e) { - let n = 'function' === typeof Symbol && t[Symbol.iterator]; - if (!n) { - return t; - } - let r, + 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); - } + 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; - } + if (o) throw o.error; } } return a; } - let u = n(0), + var u = n(0), l = n.n(u), c = n(1); function f(t, e) { let n = 0; - if (void 0 === e) { - for (let e of t) { - (e = +e) && (n += e); - } - } else { + 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); - } + for (let o of t) (o = +e(o, ++r, t)) && (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 { + 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); - } + for (let o of t) null != (o = e(o, ++r, t)) && (n < o || (void 0 === n && o >= o)) && (n = o); } return n; } function d(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 { + 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); - } + for (let o of t) null != (o = e(o, ++r, t)) && (n > o || (void 0 === n && o >= o)) && (n = o); } return n; } @@ -238,21 +201,15 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { } function O(t, e) { const n = t.get(e); - if (!n) { - throw new Error('missing: ' + e); - } + if (!n) throw new Error('missing: ' + e); return n; } function j({ 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); - } + 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() { @@ -275,28 +232,21 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { return M(t), T(t), V(t), P(t), E(t), j(t), t; } function M({ nodes: t, links: e }) { - for (const [e, n] of t.entries()) { - (n.index = e), (n.sourceLinks = []), (n.targetLinks = []); - } + for (const [e, n] of t.entries()) (n.index = e), (n.sourceLinks = []), (n.targetLinks = []); const r = new Map(t.map((e, n) => [l(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 = O(r, e)), - 'object' !== typeof o && (o = n.target = O(r, o)), + 'object' != typeof e && (e = n.source = O(r, e)), + 'object' != typeof o && (o = n.target = O(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); - } - } + if (null != n) for (const { sourceLinks: e, targetLinks: r } of t) e.sort(n), r.sort(n); } function T({ nodes: t }) { - for (const e of t) { + for (const e of t) e.value = void 0 === e.fixedValue ? Math.max(f(e.sourceLinks, w), f(e.targetLinks, w)) : e.fixedValue; - } } function V({ nodes: t }) { const e = t.length; @@ -306,13 +256,9 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { 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'); + for (const { target: e } of t.sourceLinks) r.add(e); } + if (++o > e) throw new Error('circular link'); (n = r), (r = new Set()); } } @@ -324,13 +270,9 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { 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'); + for (const { source: e } of t.targetLinks) r.add(e); } + if (++o > e) throw new Error('circular link'); (n = r), (r = new Set()); } } @@ -343,11 +285,7 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { const t = Math.max(0, Math.min(n - 1, Math.floor(c.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); - } - } + if (e) for (const t of a) t.sort(e); return a; })(n); (t = Math.min(u, (a - o) / (h(l, (t) => t.length) - 1))), @@ -357,9 +295,7 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { 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; - } + 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) { @@ -385,9 +321,7 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { let i = o * (t.layer - n.layer); (e += G(n, t) * i), (r += i); } - if (!(r > 0)) { - continue; - } + if (!(r > 0)) continue; let o = (e / r - t.y0) * n; (t.y0 += o), (t.y1 += o), F(t); } @@ -404,9 +338,7 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { let i = o * (n.layer - t.layer); (e += I(t, n) * i), (r += i); } - if (!(r > 0)) { - continue; - } + if (!(r > 0)) continue; let o = (e / r - t.y0) * n; (t.y0 += o), (t.y1 += o), F(t); } @@ -436,35 +368,25 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { if (void 0 === n) { for (const { source: { sourceLinks: t }, - } of e) { + } of e) t.sort(b); - } for (const { target: { targetLinks: e }, - } of t) { + } of t) e.sort(m); - } } } function J(t) { - if (void 0 === n) { - for (const { sourceLinks: e, targetLinks: n } of t) { - e.sort(b), n.sort(m); - } - } + if (void 0 === n) for (const { sourceLinks: e, targetLinks: n } of t) e.sort(b), n.sort(m); } function G(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; - } + if (o === n) break; r += i + t; } for (const { source: t, width: o } of n.targetLinks) { - if (t === e) { - break; - } + if (t === e) break; r -= o; } return r; @@ -472,15 +394,11 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { function I(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; - } + if (o === e) break; r += i + t; } for (const { target: t, width: o } of e.sourceLinks) { - if (t === n) { - break; - } + if (t === n) break; r -= o; } return r; @@ -490,10 +408,10 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { return j(t), t; }), (v.nodeId = function (t) { - return arguments.length ? ((l = 'function' === typeof t ? t : k(t)), v) : l; + return arguments.length ? ((l = 'function' == typeof t ? t : k(t)), v) : l; }), (v.nodeAlign = function (t) { - return arguments.length ? ((c = 'function' === typeof t ? t : k(t)), v) : c; + return arguments.length ? ((c = 'function' == typeof t ? t : k(t)), v) : c; }), (v.nodeSort = function (t) { return arguments.length ? ((e = t), v) : e; @@ -505,10 +423,10 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { return arguments.length ? ((u = t = +e), v) : u; }), (v.nodes = function (t) { - return arguments.length ? ((y = 'function' === typeof t ? t : k(t)), v) : y; + return arguments.length ? ((y = 'function' == typeof t ? t : k(t)), v) : y; }), (v.links = function (t) { - return arguments.length ? ((g = 'function' === typeof t ? t : k(t)), v) : g; + return arguments.length ? ((g = 'function' == typeof t ? t : k(t)), v) : g; }), (v.linkSort = function (t) { return arguments.length ? ((n = t), v) : n; @@ -530,7 +448,7 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { v ); } - let T = Math.PI, + var T = Math.PI, V = 2 * T, P = V - 1e-6; function E() { @@ -558,21 +476,18 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { }, arcTo: function (t, e, n, r, o) { (t = +t), (e = +e), (n = +n), (r = +r), (o = +o); - let i = this._x1, + var i = this._x1, a = this._y1, s = n - t, u = r - e, l = i - t, c = a - e, f = 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 (f > 1e-6) { + if (o < 0) throw new Error('negative radius: ' + o); + if (null === this._x1) this._ += 'M' + (this._x1 = t) + ',' + (this._y1 = e); + else if (f > 1e-6) if (Math.abs(c * s - u * l) > 1e-6 && o) { - let h = n - i, + var h = n - i, d = r - a, y = s * s + u * u, g = h * h + d * d, @@ -593,23 +508,18 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { (this._x1 = t + m * s) + ',' + (this._y1 = e + m * u)); - } else { - this._ += 'L' + (this._x1 = t) + ',' + (this._y1 = e); - } - } else { - } + } else this._ += 'L' + (this._x1 = t) + ',' + (this._y1 = e); + else; }, arc: function (t, e, n, r, o, i) { (t = +t), (e = +e), (i = !!i); - let a = (n = +n) * Math.cos(r), + var a = (n = +n) * Math.cos(r), s = n * Math.sin(r), u = t + a, l = e + s, c = 1 ^ i, f = i ? r - o : o - r; - if (n < 0) { - throw new Error('negative radius: ' + n); - } + 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), @@ -660,7 +570,7 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { return this._; }, }; - let N = C, + var N = C, B = Array.prototype.slice, H = function (t) { return function () { @@ -680,13 +590,13 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { return t.target; } function I(t) { - let e = J, + var e = J, n = G, r = z, o = F, i = null; function a() { - let a, + var a, s = B.call(arguments), u = e.apply(this, s), l = n.apply(this, s); @@ -700,9 +610,8 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { +o.apply(this, s) ), a) - ) { + ) return (i = null), a + '' || null; - } } return ( (a.source = function (t) { @@ -712,10 +621,10 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { return arguments.length ? ((n = t), a) : n; }), (a.x = function (t) { - return arguments.length ? ((r = 'function' === typeof t ? t : H(+t)), a) : r; + return arguments.length ? ((r = 'function' == typeof t ? t : H(+t)), a) : r; }), (a.y = function (t) { - return arguments.length ? ((o = 'function' === typeof t ? t : H(+t)), a) : o; + return arguments.length ? ((o = 'function' == typeof t ? t : H(+t)), a) : o; }), (a.context = function (t) { return arguments.length ? ((i = null == t ? null : t), a) : i; @@ -736,8 +645,8 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { return I(D).source(R).target(W); }; function U(t, e) { - for (let n = 0; n < e.length; n++) { - let r = e[n]; + 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), @@ -754,9 +663,7 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { et = (function () { function t(e, n) { !(function (t, e) { - if (!(t instanceof e)) { - throw new TypeError('Cannot call a class as a function'); - } + if (!(t instanceof e)) throw new TypeError('Cannot call a class as a function'); })(this, t), (this._svg = e), (this._container = n || e), @@ -787,7 +694,7 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { (this._displayValues = 'none'), (this._highlightOnHover = !1); } - let e, n, o; + var e, n, o; return ( (e = t), (n = [ @@ -836,7 +743,7 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { { key: '_calculateSankey', value: function () { - let t = this._sankeyGenerator({ + var t = this._sankeyGenerator({ nodes: this._data.nodes.map(function (t) { return Object.assign({}, t); }), @@ -867,7 +774,7 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { { key: '_setLinkGradient', value: function () { - let t = this, + var t = this, e = this._svgLink .append('linearGradient') .attr('id', function (t) { @@ -914,7 +821,7 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { { key: '_showLinks', value: function (t) { - let e = []; + var e = []; [ { linkType: 'sourceLinks', nodeType: 'target' }, { linkType: 'targetLinks', nodeType: 'source' }, @@ -964,7 +871,7 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { { key: '_labelNodeValue', value: function (t) { - let e = this._nodes.filter(function (e) { + var e = this._nodes.filter(function (e) { return e.depth === t.depth; }), n = c.sum(e, function (t) { @@ -989,7 +896,7 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { { key: '_renderSVG', value: function () { - let t = this; + var t = this; this._container.style('background-color', this._background), (this._gBound = this._container .append('g') @@ -1021,15 +928,19 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { return t.x1 - t.x0; }) .attr('stroke', function (e) { - let n = JSON.parse(t._colorArray); + 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) { - let n = JSON.parse(t._colorArray); + 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); + var n; + return ( + t._highlightOnHover && + t._showLinks(null === (n = e.target) || void 0 === n ? void 0 : n.__data__) + ); }) .on('mouseout', function (e) { return t._highlightOnHover && t._showAll(); @@ -1167,7 +1078,7 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { })(), nt = n(3), rt = function (t) { - let e = t.message; + var e = t.message; return l.a.createElement( 'p', { style: ot }, @@ -1195,29 +1106,22 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { at = { marginLeft: 10 }, st = (function (t) { void 0 === t && (t = !0); - if (!t) { + if (!t) return { warn: function () { - for (let t = [], e = 0; e < arguments.length; e++) { - t[e] = arguments[e]; - } + for (var t = [], e = 0; e < arguments.length; e++) t[e] = arguments[e]; }, error: function () { - for (let t = [], e = 0; e < arguments.length; e++) { - t[e] = arguments[e]; - } + for (var t = [], e = 0; e < arguments.length; e++) t[e] = arguments[e]; }, log: function () { - for (let t = [], e = 0; e < arguments.length; e++) { - t[e] = arguments[e]; - } + for (var t = [], e = 0; e < arguments.length; e++) t[e] = arguments[e]; }, }; - } return { warn: console.warn, error: console.error, log: console.log }; })(); - let ut = function (t) { - let e = t.options, + var ut = function (t) { + var e = t.options, n = t.data, r = t.width, o = t.height, @@ -1237,7 +1141,7 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { [n] ); var _ = function () { - let t = n.series[0], + var t = n.series[0], e = t.fields.find(function (t) { return t.name === i.source; }), @@ -1252,18 +1156,16 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { l = null == o ? void 0 : o.values.toArray(); if ( (function (t, e, n) { - let r = !0; - if (!(t && e && n)) { - return d({ isError: !0, message: a }), !1; - } - let o = t.every(function (t) { - return 'string' === typeof t; + var r = !0; + if (!(t && e && n)) return d({ isError: !0, message: a }), !1; + var o = t.every(function (t) { + return 'string' == typeof t; }), i = e.every(function (t) { - return 'string' === typeof t; + return 'string' == typeof t; }), s = n.every(function (t) { - return 'number' === typeof t; + return 'number' == typeof t; }); return o && i && s ? (d({}), r) @@ -1275,7 +1177,7 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { !1); })(s, u, l) ) { - let f = c.zip(s, u, l); + var f = c.zip(s, u, l); return { nodes: Array.from(new Set(s.concat(u))).map(function (t) { return { name: t }; @@ -1287,7 +1189,7 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { } }, v = function (t) { - let n = new et(t) + var n = new et(t) .width(r) .height(o) .align(e.align) @@ -1315,32 +1217,29 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { }; function lt() { return function (t) { - let e = t.series, + var e = t.series, n = a(t, ['series']), r = e.map(function (t) { return Object(o.toDataFrame)( i(i({}, t), { fields: t.fields.map(function (t, e, n) { - let r, + var r, a = ct.includes(t.name), s = t.values instanceof o.ArrayVector || - 'function' === typeof (null === (r = t.values) || void 0 === r ? void 0 : r.toArray), + 'function' == typeof (null === (r = t.values) || void 0 === r ? void 0 : r.toArray), u = Array.isArray(t.values); - if (!a || !t.values || (!u && !s)) { - return t; - } - let l = s ? t.values.toArray() : u ? t.values : null; - if (null === l) { + if (!a || !t.values || (!u && !s)) return t; + var l = s ? t.values.toArray() : u ? t.values : null; + if (null === l) return ( st.warn('[FN] Failed to transform sankey data.', 'Values are not an array.'), i(i({}, t), { values: new o.ArrayVector([]) }) ); - } - let c = a + var c = a ? l .map(function (t) { - return 'string' === typeof t ? t.split('|') : t; + return 'string' == typeof t ? t.split('|') : t; })[0] .map(function (t, e, n) { return Number.isNaN(Number(t)) ? t : Number(t); @@ -1352,7 +1251,7 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { null == c ? void 0 : c.every(function (t) { - return 'number' === typeof t; + return 'number' == typeof t; }) ) ? o.FieldType.number @@ -1377,7 +1276,7 @@ define(['react', 'd3', '@grafana/data', '@grafana/ui'], function (t, e, n, r) { return ft; }); var ft = new o.PanelPlugin(function (t) { - let e = t.data, + var e = t.data, n = a(t, ['data']), r = Object(u.useMemo)(lt, []), o = Object(u.useMemo)( 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 index 4339f9498f75a..8e5cb8a5eab5a 100644 --- 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 @@ -1 +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:///./fn-logger.ts","webpack:///./SankeyPanel.tsx","webpack:///./transform-fn-data.ts","webpack:///./module.ts","webpack:///./SankeyPanelFn.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__","__assign","assign","arguments","length","apply","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__read","iterator","ar","next","done","push","error","sum","values","valueof","undefined","index","max","min","targetDepth","target","depth","left","node","right","height","justify","sourceLinks","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","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","_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","filter","gradient","append","attr","uid","random","_color","currentNode","linkedNodes","linkType","nodeType","forEach","step","selectAll","style","linkedNode","percent","nodesAtDepth","totalAtDepth","nodeValue","_formatThousand","nodePercent","_formatPercent","label","data","join","colorArray","JSON","parse","keys","includes","on","_showLinks","_showAll","_setLinkGradient","text","_labelNodeValue","_formatValue","_validate","_init","_renderSVG","message","panelStyles","containerStyles","messageStyles","display","justifyContent","alignItems","padding","marginBottom","position","color","textShadow","borderRadius","flexDirection","background","marginLeft","logger","shouldLog","warn","log","console","fnLogger","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","transformFnData","other","transformedSeries","__","isSankeyField","SANKEY_FIELD_NAMES","isArrayVector","isArray","parsedValues","split","Number","isNaN","type","number","stringify","err","String","props","transformFn","transformedData","setPanelOptions","builder","addSelect","defaultValue","settings","addTextInput","addBooleanSwitch"],"mappings":"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MAAO,SACP+P,MAAO,UAET,CACE/P,MAAO,QACP+P,MAAO,SAET,CACE/P,MAAO,SACP+P,MAAO,UAET,CACE/P,MAAO,UACP+P,MAAO,WAET,CACE/P,MAAO,UACP+P,MAAO,WAET,CACE/P,MAAO,OACP+P,MAAO,QAET,CACE/P,MAAO,OACP+P,MAAO,QAET,CACE/P,MAAO,OACP+P,MAAO,YAKdmG,UAAU,CACTlN,KAAM,YACN1J,KAAM,aACN6W,aAAc,OACdC,SAAU,CACR7D,QAAS,CACP,CACEvS,MAAO,OACP+P,MAAO,gBAET,CACE/P,MAAO,QACP+P,MAAO,SAET,CACE/P,MAAO,SACP+P,MAAO,UAET,CACE/P,MAAO,OACP+P,MAAO,YAKdmG,UAAU,CACTlN,KAAM,gBACN1J,KAAM,iBACN6W,aAAc,OACdC,SAAU,CACR7D,QAAS,CACP,CACEvS,MAAO,QACP+P,MAAO,UAET,CACE/P,MAAO,aACP+P,MAAO,eAET,CACE/P,MAAO,OACP+P,MAAO,QAET,CACE/P,MAAO,OACP+P,MAAO,YAKduG,iBAAiB,CAChBtN,KAAM,mBACN1J,KAAM,sCACN6W,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 = 110;\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.filter(d => d.value !== 0);\n this._links = sankeyData.links.filter(d => d.value !== 0);\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 _labelNodeValue(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 = '';\n switch (this._displayValues) {\n case DISPLAY_VALUES.total:\n label = `${nodeValue}`;\n break;\n case DISPLAY_VALUES.percentage:\n label = `${nodePercent}`;\n break;\n case DISPLAY_VALUES.both:\n label = `${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 .text(d => d.name);\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 .text(d => this._labelNodeValue(d));\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
{message}
\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","const SHOULD_LOG = true;\n\nexport const logger = fnLogger();\n\nfunction fnLogger(shouldLog = SHOULD_LOG) {\n if (!shouldLog) {\n return {\n warn: (..._: any[]) => undefined,\n error: (..._: any[]) => undefined,\n log: (..._: any[]) => undefined,\n };\n }\n\n return {\n warn: console.warn,\n error: console.error,\n log: console.log,\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'\nimport { logger } from 'fn-logger';\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 if (data.error) {\n logger.warn('[FN] Sankey data error.',{data, error: data.error})\n }\n\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 logger.warn('[FN] Sankey render error.',{renderError, graph})\n\n setError({isError: true, message: renderError.message})\n }\n };\n\n return (error.isError ?\n \n :\n {\n d3.select(node)\n .selectAll('*')\n .remove();\n d3.select(node).call(chart);\n }}\n />\n );\n};\n","// NOTE: implementation of toDataFrame: https://github.com/grafana/grafana/blob/main/packages/grafana-data/src/dataframe/processDataFrame.ts\nimport { toDataFrame, FieldType, ArrayVector, Field } from '@grafana/data';\nimport { logger } from 'fn-logger';\n\nimport { SankeyOptionsFn } from 'types-fn';\n\nexport function transformFnData(): Required['transformFn'] {\n return ({ series, ...other }) => {\n const transformedSeries = series.map((data) => {\n return toDataFrame({ ...data, fields: data.fields.map(mapField()) });\n });\n\n return {\n series: transformedSeries,\n ...other,\n };\n };\n}\n\nconst SANKEY_FIELD_NAMES = ['source', 'target', 'value'];\n\n// @ts-ignore\nfunction mapField

() {\n return (field: Field

, _: number, __: Array>) => {\n const isSankeyField = SANKEY_FIELD_NAMES.includes(field.name);\n\n const isArrayVector = field.values instanceof ArrayVector || typeof field.values?.toArray === 'function';\n const isArray = Array.isArray(field.values);\n\n if (!isSankeyField || !field.values || (!isArray && !isArrayVector)) {\n return field;\n }\n\n const values = isArrayVector ? field.values.toArray() : isArray ? field.values : null;\n\n if (values === null) {\n logger.warn('[FN] Failed to transform sankey data.', 'Values are not an array.');\n\n return {\n ...field,\n values: new ArrayVector([]),\n };\n }\n\n const parsedValues = isSankeyField ? ((values as P[]).map(splitValue())[0] as unknown[]).map(mapToNumber()) : null;\n\n try {\n return {\n ...field,\n type: parsedValues?.every(isNumber()) ? FieldType.number : field.type,\n values: parsedValues ? new ArrayVector(JSON.parse(JSON.stringify(parsedValues))) : values,\n };\n } catch (err) {\n logger.warn('[FN] Failed to transform sankey data.', err instanceof Error ? err.message : String(err));\n\n return {\n ...field,\n type: field.type,\n values: new ArrayVector([]),\n };\n }\n };\n}\n\n// @ts-ignore\nfunction mapToNumber() {\n return (value: V, _: number, __: V[]) => (Number.isNaN(Number(value)) ? value : Number(value));\n}\n\n// @ts-ignore\nfunction splitValue() {\n return (value: V) => (typeof value === 'string' ? value.split('|') : value);\n}\n\n// @ts-ignore\nfunction isNumber() {\n return (value: V) => typeof value === 'number';\n}\n","import { PanelPlugin } from '@grafana/data';\nimport { SankeyOptionsFn } from 'types-fn';\nimport { SankeyPanelFn as SankeyPanel } from './SankeyPanelFn';\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","import React, { useMemo, FC } from 'react';\nimport { PanelProps } from '@grafana/data';\nimport { SankeyPanel } from 'SankeyPanel';\nimport { SankeyOptionsFn } from 'types-fn';\nimport { transformFnData } from 'transform-fn-data';\n\nexport interface SankeyPanelFnProps extends PanelProps {}\n\nexport const SankeyPanelFn: FC = ({ data, ...props }) => {\n const transformFn = useMemo(transformFnData, []);\n\n const transformedData = useMemo(() => transformFn(data), [transformFn, data]);\n\n return ;\n};\n"],"sourceRoot":""} \ No newline at end of file +{"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:///./fn-logger.ts","webpack:///./SankeyPanel.tsx","webpack:///./transform-fn-data.ts","webpack:///./module.ts","webpack:///./SankeyPanelFn.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__","__assign","assign","arguments","length","apply","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__read","iterator","ar","next","done","push","error","sum","values","valueof","undefined","index","max","min","targetDepth","target","depth","left","node","right","height","justify","sourceLinks","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","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","_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","filter","gradient","append","attr","uid","random","_color","currentNode","linkedNodes","linkType","nodeType","forEach","step","selectAll","style","linkedNode","percent","nodesAtDepth","totalAtDepth","nodeValue","_formatThousand","nodePercent","_formatPercent","label","data","join","colorArray","JSON","parse","keys","includes","on","_showLinks","__data__","_showAll","_setLinkGradient","text","_labelNodeValue","_formatValue","_validate","_init","_renderSVG","message","panelStyles","containerStyles","messageStyles","display","justifyContent","alignItems","padding","marginBottom","position","color","textShadow","borderRadius","flexDirection","background","marginLeft","logger","shouldLog","warn","log","console","fnLogger","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","transformFnData","other","transformedSeries","__","isSankeyField","SANKEY_FIELD_NAMES","isArrayVector","isArray","parsedValues","split","Number","isNaN","type","number","stringify","err","String","props","transformFn","transformedData","setPanelOptions","builder","addSelect","defaultValue","settings","addTextInput","addBooleanSwitch"],"mappings":"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P,MAAO,aACP+P,MAAO,cAET,CACE/P,MAAO,SACP+P,MAAO,UAET,CACE/P,MAAO,QACP+P,MAAO,SAET,CACE/P,MAAO,SACP+P,MAAO,UAET,CACE/P,MAAO,UACP+P,MAAO,WAET,CACE/P,MAAO,UACP+P,MAAO,WAET,CACE/P,MAAO,OACP+P,MAAO,QAET,CACE/P,MAAO,OACP+P,MAAO,QAET,CACE/P,MAAO,OACP+P,MAAO,YAKdoG,UAAU,CACTnN,KAAM,YACN1J,KAAM,aACN8W,aAAc,OACdC,SAAU,CACR7D,QAAS,CACP,CACExS,MAAO,OACP+P,MAAO,gBAET,CACE/P,MAAO,QACP+P,MAAO,SAET,CACE/P,MAAO,SACP+P,MAAO,UAET,CACE/P,MAAO,OACP+P,MAAO,YAKdoG,UAAU,CACTnN,KAAM,gBACN1J,KAAM,iBACN8W,aAAc,OACdC,SAAU,CACR7D,QAAS,CACP,CACExS,MAAO,QACP+P,MAAO,UAET,CACE/P,MAAO,aACP+P,MAAO,eAET,CACE/P,MAAO,OACP+P,MAAO,QAET,CACE/P,MAAO,OACP+P,MAAO,YAKdwG,iBAAiB,CAChBvN,KAAM,mBACN1J,KAAM,sCACN8W,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 = 110;\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.filter(d => d.value !== 0);\n this._links = sankeyData.links.filter(d => d.value !== 0);\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 _labelNodeValue(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 = '';\n switch (this._displayValues) {\n case DISPLAY_VALUES.total:\n label = `${nodeValue}`;\n break;\n case DISPLAY_VALUES.percentage:\n label = `${nodePercent}`;\n break;\n case DISPLAY_VALUES.both:\n label = `${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.target?.__data__))\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 .text(d => d.name);\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 .text(d => this._labelNodeValue(d));\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
{message}
\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","const SHOULD_LOG = true;\n\nexport const logger = fnLogger();\n\nfunction fnLogger(shouldLog = SHOULD_LOG) {\n if (!shouldLog) {\n return {\n warn: (..._: any[]) => undefined,\n error: (..._: any[]) => undefined,\n log: (..._: any[]) => undefined,\n };\n }\n\n return {\n warn: console.warn,\n error: console.error,\n log: console.log,\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'\nimport { logger } from 'fn-logger';\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 if (data.error) {\n logger.warn('[FN] Sankey data error.',{data, error: data.error})\n }\n\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 logger.warn('[FN] Sankey render error.',{renderError, graph})\n\n setError({isError: true, message: renderError.message})\n }\n };\n\n return (error.isError ?\n \n :\n {\n d3.select(node)\n .selectAll('*')\n .remove();\n d3.select(node).call(chart);\n }}\n />\n );\n};\n","// NOTE: implementation of toDataFrame: https://github.com/grafana/grafana/blob/main/packages/grafana-data/src/dataframe/processDataFrame.ts\nimport { toDataFrame, FieldType, ArrayVector, Field } from '@grafana/data';\nimport { logger } from 'fn-logger';\n\nimport { SankeyOptionsFn } from 'types-fn';\n\nexport function transformFnData(): Required['transformFn'] {\n return ({ series, ...other }) => {\n const transformedSeries = series.map((data) => {\n return toDataFrame({ ...data, fields: data.fields.map(mapField()) });\n });\n\n return {\n series: transformedSeries,\n ...other,\n };\n };\n}\n\nconst SANKEY_FIELD_NAMES = ['source', 'target', 'value'];\n\n// @ts-ignore\nfunction mapField

() {\n return (field: Field

, _: number, __: Array>) => {\n const isSankeyField = SANKEY_FIELD_NAMES.includes(field.name);\n\n const isArrayVector = field.values instanceof ArrayVector || typeof field.values?.toArray === 'function';\n const isArray = Array.isArray(field.values);\n\n if (!isSankeyField || !field.values || (!isArray && !isArrayVector)) {\n return field;\n }\n\n const values = isArrayVector ? field.values.toArray() : isArray ? field.values : null;\n\n if (values === null) {\n logger.warn('[FN] Failed to transform sankey data.', 'Values are not an array.');\n\n return {\n ...field,\n values: new ArrayVector([]),\n };\n }\n\n const parsedValues = isSankeyField ? ((values as P[]).map(splitValue())[0] as unknown[]).map(mapToNumber()) : null;\n\n try {\n return {\n ...field,\n type: parsedValues?.every(isNumber()) ? FieldType.number : field.type,\n values: parsedValues ? new ArrayVector(JSON.parse(JSON.stringify(parsedValues))) : values,\n };\n } catch (err) {\n logger.warn('[FN] Failed to transform sankey data.', err instanceof Error ? err.message : String(err));\n\n return {\n ...field,\n type: field.type,\n values: new ArrayVector([]),\n };\n }\n };\n}\n\n// @ts-ignore\nfunction mapToNumber() {\n return (value: V, _: number, __: V[]) => (Number.isNaN(Number(value)) ? value : Number(value));\n}\n\n// @ts-ignore\nfunction splitValue() {\n return (value: V) => (typeof value === 'string' ? value.split('|') : value);\n}\n\n// @ts-ignore\nfunction isNumber() {\n return (value: V) => typeof value === 'number';\n}\n","import { PanelPlugin } from '@grafana/data';\nimport { SankeyOptionsFn } from 'types-fn';\nimport { SankeyPanelFn as SankeyPanel } from './SankeyPanelFn';\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","import React, { useMemo, FC } from 'react';\nimport { PanelProps } from '@grafana/data';\nimport { SankeyPanel } from 'SankeyPanel';\nimport { SankeyOptionsFn } from 'types-fn';\nimport { transformFnData } from 'transform-fn-data';\n\nexport interface SankeyPanelFnProps extends PanelProps {}\n\nexport const SankeyPanelFn: FC = ({ data, ...props }) => {\n const transformFn = useMemo(transformFnData, []);\n\n const transformedData = useMemo(() => transformFn(data), [transformFn, data]);\n\n return ;\n};\n"],"sourceRoot":""} \ No newline at end of file diff --git a/public/app/plugins/panel/sankey-panel-0.5.0/plugin.json b/public/app/plugins/panel/sankey-panel-0.5.0/plugin.json index 621bba580d282..1636445682417 100644 --- a/public/app/plugins/panel/sankey-panel-0.5.0/plugin.json +++ b/public/app/plugins/panel/sankey-panel-0.5.0/plugin.json @@ -25,7 +25,7 @@ ], "screenshots": [], "version": "1.0.0", - "updated": "2023-01-05" + "updated": "2023-10-19" }, "dependencies": { "grafanaVersion": "7.0.x", diff --git a/public/microfrontends/fn_dashboard/index.html b/public/microfrontends/fn_dashboard/index.html index ef29e97a6157b..5399547433ddd 100644 --- a/public/microfrontends/fn_dashboard/index.html +++ b/public/microfrontends/fn_dashboard/index.html @@ -21,13 +21,13 @@