{
"version": 3,
"sources": ["../ui/web_modules/d3-interpolate.js", "../ui/web_modules/d3-brush.js", "../ui/app/mn_admin/mn_d3_service.js", "../ui/app/mn_admin/mn_multi_chart_directive.js", "../ui/app/mn_admin/mn_statistics_chart_directive.js"],
"sourcesContent": ["import { R as Rgb, r as rgbConvert, d as define, e as extend, C as Color, h as hue$1, b as hsl$2, n as nogamma } from './common/rgb-50db7803.js';\nexport { f as interpolateBasis, g as interpolateBasisClosed, i as interpolateRgb, j as interpolateRgbBasis, k as interpolateRgbBasisClosed } from './common/rgb-50db7803.js';\nimport { r as rad2deg, d as deg2rad } from './common/cubehelix-b37f4760.js';\nexport { c as interpolateCubehelix, a as interpolateCubehelixLong } from './common/cubehelix-b37f4760.js';\nexport { i as interpolate, a as interpolateArray, d as interpolateDate, n as interpolateNumberArray, o as interpolateObject } from './common/value-2cd045dd.js';\nexport { i as interpolateNumber, a as interpolateString } from './common/string-cfd0b55d.js';\nexport { i as interpolateRound, p as piecewise } from './common/piecewise-ef887050.js';\nexport { a as interpolateTransformCss, i as interpolateTransformSvg } from './common/index-f3df269c.js';\nexport { i as interpolateZoom } from './common/zoom-74300348.js';\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nfunction lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nfunction Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nfunction hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return hcl2lab(this).rgb();\n }\n}));\n\nfunction discrete(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nfunction hue(a, b) {\n var i = hue$1(+a, +b);\n return function(t) {\n var x = i(t);\n return x - 360 * Math.floor(x / 360);\n };\n}\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = hsl$2(start)).h, (end = hsl$2(end)).h),\n s = nogamma(start.s, end.s),\n l = nogamma(start.l, end.l),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nvar hsl$1 = hsl(hue$1);\nvar hslLong = hsl(nogamma);\n\nfunction lab$1(start, end) {\n var l = nogamma((start = lab(start)).l, (end = lab(end)).l),\n a = nogamma(start.a, end.a),\n b = nogamma(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n}\n\nfunction hcl$1(hue) {\n return function(start, end) {\n var h = hue((start = hcl(start)).h, (end = hcl(end)).h),\n c = nogamma(start.c, end.c),\n l = nogamma(start.l, end.l),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nvar hcl$2 = hcl$1(hue$1);\nvar hclLong = hcl$1(nogamma);\n\nfunction quantize(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n\nexport { discrete as interpolateDiscrete, hcl$2 as interpolateHcl, hclLong as interpolateHclLong, hsl$1 as interpolateHsl, hslLong as interpolateHslLong, hue as interpolateHue, lab$1 as interpolateLab, quantize };\n", "import { d as dispatch, i as interrupt } from './common/index-35caf4f7.js';\nimport { e as event, c as customEvent } from './common/index-e88ffd88.js';\nimport { s as select, t as touch, m as mouse } from './common/touch-775b0bb4.js';\nimport { d as dragDisable, y as yesdrag } from './common/nodrag-20481c62.js';\nimport './common/rgb-50db7803.js';\nimport { i as interpolate } from './common/value-2cd045dd.js';\nimport './common/string-cfd0b55d.js';\nimport './common/index-f3df269c.js';\n\nfunction constant(x) {\n return function() {\n return x;\n };\n}\n\nfunction BrushEvent(target, type, selection) {\n this.target = target;\n this.type = type;\n this.selection = selection;\n}\n\nfunction nopropagation() {\n event.stopImmediatePropagation();\n}\n\nfunction noevent() {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n\nvar MODE_DRAG = {name: \"drag\"},\n MODE_SPACE = {name: \"space\"},\n MODE_HANDLE = {name: \"handle\"},\n MODE_CENTER = {name: \"center\"};\n\nfunction number1(e) {\n return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n return [number1(e[0]), number1(e[1])];\n}\n\nfunction toucher(identifier) {\n return function(target) {\n return touch(target, event.touches, identifier);\n };\n}\n\nvar X = {\n name: \"x\",\n handles: [\"w\", \"e\"].map(type),\n input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\n output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n name: \"y\",\n handles: [\"n\", \"s\"].map(type),\n input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\n output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n name: \"xy\",\n handles: [\"n\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\n input: function(xy) { return xy == null ? null : number2(xy); },\n output: function(xy) { return xy; }\n};\n\nvar cursors = {\n overlay: \"crosshair\",\n selection: \"move\",\n n: \"ns-resize\",\n e: \"ew-resize\",\n s: \"ns-resize\",\n w: \"ew-resize\",\n nw: \"nwse-resize\",\n ne: \"nesw-resize\",\n se: \"nwse-resize\",\n sw: \"nesw-resize\"\n};\n\nvar flipX = {\n e: \"w\",\n w: \"e\",\n nw: \"ne\",\n ne: \"nw\",\n se: \"sw\",\n sw: \"se\"\n};\n\nvar flipY = {\n n: \"s\",\n s: \"n\",\n nw: \"sw\",\n ne: \"se\",\n se: \"ne\",\n sw: \"nw\"\n};\n\nvar signsX = {\n overlay: +1,\n selection: +1,\n n: null,\n e: +1,\n s: null,\n w: -1,\n nw: -1,\n ne: +1,\n se: +1,\n sw: -1\n};\n\nvar signsY = {\n overlay: +1,\n selection: +1,\n n: -1,\n e: null,\n s: +1,\n w: null,\n nw: -1,\n ne: -1,\n se: +1,\n sw: +1\n};\n\nfunction type(t) {\n return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n var svg = this.ownerSVGElement || this;\n if (svg.hasAttribute(\"viewBox\")) {\n svg = svg.viewBox.baseVal;\n return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n }\n return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n// Like d3.local, but with the name \u201C__brush\u201D rather than auto-generated.\nfunction local(node) {\n while (!node.__brush) if (!(node = node.parentNode)) return;\n return node.__brush;\n}\n\nfunction empty(extent) {\n return extent[0][0] === extent[1][0]\n || extent[0][1] === extent[1][1];\n}\n\nfunction brushSelection(node) {\n var state = node.__brush;\n return state ? state.dim.output(state.selection) : null;\n}\n\nfunction brushX() {\n return brush$1(X);\n}\n\nfunction brushY() {\n return brush$1(Y);\n}\n\nfunction brush() {\n return brush$1(XY);\n}\n\nfunction brush$1(dim) {\n var extent = defaultExtent,\n filter = defaultFilter,\n touchable = defaultTouchable,\n keys = true,\n listeners = dispatch(\"start\", \"brush\", \"end\"),\n handleSize = 6,\n touchending;\n\n function brush(group) {\n var overlay = group\n .property(\"__brush\", initialize)\n .selectAll(\".overlay\")\n .data([type(\"overlay\")]);\n\n overlay.enter().append(\"rect\")\n .attr(\"class\", \"overlay\")\n .attr(\"pointer-events\", \"all\")\n .attr(\"cursor\", cursors.overlay)\n .merge(overlay)\n .each(function() {\n var extent = local(this).extent;\n select(this)\n .attr(\"x\", extent[0][0])\n .attr(\"y\", extent[0][1])\n .attr(\"width\", extent[1][0] - extent[0][0])\n .attr(\"height\", extent[1][1] - extent[0][1]);\n });\n\n group.selectAll(\".selection\")\n .data([type(\"selection\")])\n .enter().append(\"rect\")\n .attr(\"class\", \"selection\")\n .attr(\"cursor\", cursors.selection)\n .attr(\"fill\", \"#777\")\n .attr(\"fill-opacity\", 0.3)\n .attr(\"stroke\", \"#fff\")\n .attr(\"shape-rendering\", \"crispEdges\");\n\n var handle = group.selectAll(\".handle\")\n .data(dim.handles, function(d) { return d.type; });\n\n handle.exit().remove();\n\n handle.enter().append(\"rect\")\n .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n group\n .each(redraw)\n .attr(\"fill\", \"none\")\n .attr(\"pointer-events\", \"all\")\n .on(\"mousedown.brush\", started)\n .filter(touchable)\n .on(\"touchstart.brush\", started)\n .on(\"touchmove.brush\", touchmoved)\n .on(\"touchend.brush touchcancel.brush\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n brush.move = function(group, selection) {\n if (group.selection) {\n group\n .on(\"start.brush\", function() { emitter(this, arguments).beforestart().start(); })\n .on(\"interrupt.brush end.brush\", function() { emitter(this, arguments).end(); })\n .tween(\"brush\", function() {\n var that = this,\n state = that.__brush,\n emit = emitter(that, arguments),\n selection0 = state.selection,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n i = interpolate(selection0, selection1);\n\n function tween(t) {\n state.selection = t === 1 && selection1 === null ? null : i(t);\n redraw.call(that);\n emit.brush();\n }\n\n return selection0 !== null && selection1 !== null ? tween : tween(1);\n });\n } else {\n group\n .each(function() {\n var that = this,\n args = arguments,\n state = that.__brush,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n emit = emitter(that, args).beforestart();\n\n interrupt(that);\n state.selection = selection1 === null ? null : selection1;\n redraw.call(that);\n emit.start().brush().end();\n });\n }\n };\n\n brush.clear = function(group) {\n brush.move(group, null);\n };\n\n function redraw() {\n var group = select(this),\n selection = local(this).selection;\n\n if (selection) {\n group.selectAll(\".selection\")\n .style(\"display\", null)\n .attr(\"x\", selection[0][0])\n .attr(\"y\", selection[0][1])\n .attr(\"width\", selection[1][0] - selection[0][0])\n .attr(\"height\", selection[1][1] - selection[0][1]);\n\n group.selectAll(\".handle\")\n .style(\"display\", null)\n .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n }\n\n else {\n group.selectAll(\".selection,.handle\")\n .style(\"display\", \"none\")\n .attr(\"x\", null)\n .attr(\"y\", null)\n .attr(\"width\", null)\n .attr(\"height\", null);\n }\n }\n\n function emitter(that, args, clean) {\n return (!clean && that.__brush.emitter) || new Emitter(that, args);\n }\n\n function Emitter(that, args) {\n this.that = that;\n this.args = args;\n this.state = that.__brush;\n this.active = 0;\n }\n\n Emitter.prototype = {\n beforestart: function() {\n if (++this.active === 1) this.state.emitter = this, this.starting = true;\n return this;\n },\n start: function() {\n if (this.starting) this.starting = false, this.emit(\"start\");\n else this.emit(\"brush\");\n return this;\n },\n brush: function() {\n this.emit(\"brush\");\n return this;\n },\n end: function() {\n if (--this.active === 0) delete this.state.emitter, this.emit(\"end\");\n return this;\n },\n emit: function(type) {\n customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);\n }\n };\n\n function started() {\n if (touchending && !event.touches) return;\n if (!filter.apply(this, arguments)) return;\n\n var that = this,\n type = event.target.__data__.type,\n mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),\n signX = dim === Y ? null : signsX[type],\n signY = dim === X ? null : signsY[type],\n state = local(that),\n extent = state.extent,\n selection = state.selection,\n W = extent[0][0], w0, w1,\n N = extent[0][1], n0, n1,\n E = extent[1][0], e0, e1,\n S = extent[1][1], s0, s1,\n dx = 0,\n dy = 0,\n moving,\n shifting = signX && signY && keys && event.shiftKey,\n lockX,\n lockY,\n pointer = event.touches ? toucher(event.changedTouches[0].identifier) : mouse,\n point0 = pointer(that),\n point = point0,\n emit = emitter(that, arguments, true).beforestart();\n\n if (type === \"overlay\") {\n if (selection) moving = true;\n state.selection = selection = [\n [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],\n [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]\n ];\n } else {\n w0 = selection[0][0];\n n0 = selection[0][1];\n e0 = selection[1][0];\n s0 = selection[1][1];\n }\n\n w1 = w0;\n n1 = n0;\n e1 = e0;\n s1 = s0;\n\n var group = select(that)\n .attr(\"pointer-events\", \"none\");\n\n var overlay = group.selectAll(\".overlay\")\n .attr(\"cursor\", cursors[type]);\n\n if (event.touches) {\n emit.moved = moved;\n emit.ended = ended;\n } else {\n var view = select(event.view)\n .on(\"mousemove.brush\", moved, true)\n .on(\"mouseup.brush\", ended, true);\n if (keys) view\n .on(\"keydown.brush\", keydowned, true)\n .on(\"keyup.brush\", keyupped, true);\n\n dragDisable(event.view);\n }\n\n nopropagation();\n interrupt(that);\n redraw.call(that);\n emit.start();\n\n function moved() {\n var point1 = pointer(that);\n if (shifting && !lockX && !lockY) {\n if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;\n else lockX = true;\n }\n point = point1;\n moving = true;\n noevent();\n move();\n }\n\n function move() {\n var t;\n\n dx = point[0] - point0[0];\n dy = point[1] - point0[1];\n\n switch (mode) {\n case MODE_SPACE:\n case MODE_DRAG: {\n if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n break;\n }\n case MODE_HANDLE: {\n if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n break;\n }\n case MODE_CENTER: {\n if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));\n if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));\n break;\n }\n }\n\n if (e1 < w1) {\n signX *= -1;\n t = w0, w0 = e0, e0 = t;\n t = w1, w1 = e1, e1 = t;\n if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n }\n\n if (s1 < n1) {\n signY *= -1;\n t = n0, n0 = s0, s0 = t;\n t = n1, n1 = s1, s1 = t;\n if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n }\n\n if (state.selection) selection = state.selection; // May be set by brush.move!\n if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n if (selection[0][0] !== w1\n || selection[0][1] !== n1\n || selection[1][0] !== e1\n || selection[1][1] !== s1) {\n state.selection = [[w1, n1], [e1, s1]];\n redraw.call(that);\n emit.brush();\n }\n }\n\n function ended() {\n nopropagation();\n if (event.touches) {\n if (event.touches.length) return;\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n } else {\n yesdrag(event.view, moving);\n view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n }\n group.attr(\"pointer-events\", \"all\");\n overlay.attr(\"cursor\", cursors.overlay);\n if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n if (empty(selection)) state.selection = null, redraw.call(that);\n emit.end();\n }\n\n function keydowned() {\n switch (event.keyCode) {\n case 16: { // SHIFT\n shifting = signX && signY;\n break;\n }\n case 18: { // ALT\n if (mode === MODE_HANDLE) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n move();\n }\n break;\n }\n case 32: { // SPACE; takes priority over ALT\n if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n mode = MODE_SPACE;\n overlay.attr(\"cursor\", cursors.selection);\n move();\n }\n break;\n }\n default: return;\n }\n noevent();\n }\n\n function keyupped() {\n switch (event.keyCode) {\n case 16: { // SHIFT\n if (shifting) {\n lockX = lockY = shifting = false;\n move();\n }\n break;\n }\n case 18: { // ALT\n if (mode === MODE_CENTER) {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n move();\n }\n break;\n }\n case 32: { // SPACE\n if (mode === MODE_SPACE) {\n if (event.altKey) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n } else {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n }\n overlay.attr(\"cursor\", cursors[type]);\n move();\n }\n break;\n }\n default: return;\n }\n noevent();\n }\n }\n\n function touchmoved() {\n emitter(this, arguments).moved();\n }\n\n function touchended() {\n emitter(this, arguments).ended();\n }\n\n function initialize() {\n var state = this.__brush || {selection: null};\n state.extent = number2(extent.apply(this, arguments));\n state.dim = dim;\n return state;\n }\n\n brush.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant(number2(_)), brush) : extent;\n };\n\n brush.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n };\n\n brush.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), brush) : touchable;\n };\n\n brush.handleSize = function(_) {\n return arguments.length ? (handleSize = +_, brush) : handleSize;\n };\n\n brush.keyModifiers = function(_) {\n return arguments.length ? (keys = !!_, brush) : keys;\n };\n\n brush.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? brush : value;\n };\n\n return brush;\n}\n\nexport { brush, brushSelection, brushX, brushY };\n", "/*\nCopyright 2020-Present Couchbase, Inc.\n\nUse of this software is governed by the Business Source License included in\nthe file licenses/BSL-Couchbase.txt. As of the Change Date specified in that\nfile, in accordance with the Business Source License, use of this software will\nbe governed by the Apache License, Version 2.0, included in the file\nlicenses/APL2.txt.\n*/\n\nimport angular from \"angular\";\nimport _ from \"lodash\";\nimport {select} from \"d3-selection\";\nimport {bisector} from \"d3-array\";\nimport {schemeTableau10} from \"d3-scale-chromatic\";\nimport {scaleTime, scaleLinear} from \"d3-scale\";\nimport {axisBottom, axisLeft, axisRight} from \"d3-axis\";\nimport {line as d3Line} from \"d3-shape\";\nimport {interpolateTransformSvg} from \"d3-interpolate\";\nimport {brushX, brushSelection} from \"d3-brush\";\nimport {max as d3Max} from \"d3-array\"\n\nexport default \"mnD3Service\";\n\nangular\n .module('mnD3Service', [])\n .factory('mnD3Service', mnD3ServiceFactory);\n\nfunction mnD3ServiceFactory() {\n class mnD3 {\n constructor(options, rootElement) {\n this.opt = options;\n this.cht = this.opt.chart;\n this.rootEl = select(rootElement);\n this.throttledResize = _.throttle(this.resize.bind(this), 30);\n var elmRect = this.getElementRect();\n this.cvsRect = this.getCanvasRect(elmRect);\n this.colors = this.cht.color || schemeTableau10;\n\n //main container\n\n this.id = Math.random().toString(36).substr(2, 9);\n\n let root = this.rootEl\n .append(\"svg\")\n .attr(\"width\", \"100%\")\n .attr(\"height\", this.cht.height);\n\n this.svg = root\n .append(\"g\")\n .attr(\"transform\", this.getTransform(this.cht.margin.left, this.cht.margin.top));\n\n let defs =\n root.append(\"defs\")\n\n this.clip = defs.append(\"rect\")\n .attr(\"id\", \"clipRect\" + this.id)\n .attr(\"width\", this.cvsRect.width)\n .attr(\"height\", this.cvsRect.height)\n .attr(\"x\", 0)\n .attr(\"y\", 0);\n\n defs.append(\"clipPath\")\n .attr(\"id\", \"clipPath\" + this.id)\n .append(\"use\")\n .attr(\"xlink:href\", \"#clipRect\" + this.id);\n }\n init() {\n this.inititalized = true;\n this.svg.html(\"\");\n\n this.linesWrap = this.svg.append(\"g\")\n .attr(\"clip-path\", \"url(#clipPath\" +this.id+ \")\")\n .attr(\"fill\", \"rgba(0, 0, 0, 0.002)\");\n\n this.linesWrap.append( \"use\" ).attr( \"xlink:href\", \"#clipRect\" + this.id);\n\n // Initialise a X axis:\n this.xScale = scaleTime().range([0, this.cvsRect.width]);\n this.xAxis = axisBottom().scale(this.xScale).tickFormat(this.cht.xAxis.tickFormat);\n this.svg.append(\"g\").attr(\"transform\", this.getTransform(0, this.cvsRect.height))\n .attr(\"class\", \"xAxis\");\n\n // Initialise a Y axis and lines\n this.yScale = [];\n this.yAxis = [];\n this.yLines = [];\n this.createYAxis(0, axisLeft, this.getTransform(0, 0));\n if (this.cht.yAxis[1]) {\n this.createYAxis(1, axisRight, this.getTransform(this.cvsRect.width, 0));\n }\n }\n destroy() {\n this.svg.remove();\n }\n getCanvasRect(elmRect) {\n return {\n width: elmRect.width - this.cht.margin.left - this.cht.margin.right,\n height: this.cht.height - this.cht.margin.bottom - this.cht.margin.top\n };\n }\n updateYAxis(i) {\n var domain = this.data.filter(function (line) {\n return (line.yAxis == i);\n }.bind(this));\n\n var yDomain = this.cht.yAxis[i].domain(domain);\n\n this.yScale[i].domain(yDomain);\n if (!this.cht.showTicks && domain.length) {\n this.yAxis[i].tickValues(yDomain);//show min/max only\n }\n\n this.svg.selectAll(\".yAxis\" + i).call(this.yAxis[i]).transition().duration(0);\n }\n createYAxis(i, axis, coordinates) {\n this.yScale[i] = scaleLinear().range([this.cvsRect.height, 0]).nice();\n this.yAxis[i] = axis().scale(this.yScale[i]).tickFormat(this.cht.yAxis[i].tickFormat);\n this.yLines[i] = d3Line()\n .defined((d, i, lines) => {\n let isValueAvailable = !isNaN(d[1]);\n if (this.opt.is70Cluster && isValueAvailable && i) {\n isValueAvailable = (d[0] - lines[i-1][0]) == this.opt.step;\n }\n return isValueAvailable;\n })\n .x(d => this.xScale(d[0]))\n .y(d => this.yScale[i](d[1]));\n\n if (!this.cht.hideTicks) {\n this.svg.append(\"g\").attr(\"transform\", coordinates).attr(\"class\", \"yAxis yAxis\" + i);\n }\n }\n getElementRect() {\n return this.rootEl.node().getBoundingClientRect();\n }\n getTransform(x, y) {\n return \"translate(\" + x + \", \" + y + \")\";\n }\n redrawXAxis() {\n return this.svg.selectAll(\".xAxis\").transition().duration(0).call(this.xAxis);\n }\n drawLine(path) {\n path.attr(\"d\", function (d) {\n if (!d.disabled) {\n return this.yLines[d.yAxis](d.values);\n } else {\n return undefined;\n }\n }.bind(this))\n .call(this.drawLinePath.bind(this));\n }\n drawLinePath(pipe) {\n pipe.style(\"stroke\", v => v.color)\n .style(\"fill\", \"none\")\n .style(\"stroke-width\", 1);\n }\n drawCirclePath(pipe) {\n pipe.style(\"fill\", v => v.color);\n }\n updateXAxis(xDomain) {\n if (!xDomain.length) {\n return;\n }\n this.xScale.domain(xDomain);\n this.redrawXAxis();\n }\n cancelLineAnimation() {\n this.animationInterval && window.clearInterval(this.animationInterval);\n }\n stopLineAnimation() {\n this.cancelLineAnimation();\n this.linesWrap.selectAll('.lines').attr(\"transform\", null);\n }\n animateLine(fps) {\n let frame = 0;\n let v = this.xAxisTimestamps;\n let interpolateSvg = interpolateTransformSvg(\n this.getTransform(0, 0),\n this.getTransform(this.xScale(v[1]), 0));\n\n let layer = this.linesWrap.selectAll('.lines');\n\n this.animationInterval = window.setInterval(() => {\n frame++;\n\n let transformValue = interpolateSvg(-(frame / fps));\n\n layer.attr(\"transform\", transformValue);\n\n let step = (v[1] - v[0]) * (frame / fps);\n\n let domain = this.getXaxisDomain(this.xAxisTimestamps);\n\n this.updateXAxis([domain[0] + step, domain[1] + step]);\n\n if (frame >= fps) {\n window.clearInterval(this.animationInterval);\n }\n }, (v[1] - v[0]) / fps);\n }\n updateLine() {\n this.opt.enableAnimation && this.stopLineAnimation();\n\n this.linesWrap.selectAll('.lines')\n .data(this.data)\n .join(function (enter) {\n return enter\n .append('path').attr('class', 'lines')\n .call(this.drawLine.bind(this));\n }.bind(this), function (update) {\n return update.call(this.drawLine.bind(this));\n }.bind(this));\n\n this.opt.enableAnimation && this.animateLine(100);\n }\n getxAxisTimestamps(data) {\n let rv = [];\n let step = this.opt.step;\n let lengthInMS = this.opt.start;\n let start = d3Max(data, v => v.startTimestamp);\n\n while (lengthInMS > 0) {\n rv.push(start);\n lengthInMS -= step;\n start += step;\n }\n\n return rv;\n }\n updateData(data) {\n if (!data) {\n return;\n }\n\n data.forEach((item, index) => {\n item.color = this.colors[index % this.colors.length];\n });\n\n if (this.opt.is70Cluster) {\n\n this.xAxisTimestamps = this.getxAxisTimestamps(data);\n this.xAxisMap = data.map(line => line.values.reduce((acc, [ts, v]) => {\n acc[ts] = v;\n return acc;\n }, {}));\n\n this.data = data;\n\n if (!this.inititalized) {\n this.init();\n }\n this.updateXAxis(this.getXaxisDomain(this.xAxisTimestamps));\n } else {\n this.xAxisData = data\n .reduce((max, item) =>\n item.values.length > max.length ? item.values : max\n , []);\n\n this.data = data;\n\n if (this.xAxisData && this.xAxisData.length) {\n if (!this.inititalized) {\n this.init();\n }\n } else {\n this.showEmptyContent();\n return;\n }\n this.updateXAxis(this.getXaxisDomain(this.xAxisData));\n }\n\n this.updateYAxis(0);\n\n if (this.cht.yAxis[1]) {\n this.updateYAxis(1);\n }\n\n this.updateLine();\n\n return true;\n }\n showEmptyContent() {\n this.inititalized = false;\n this.svg.html(\"\"+this.cht.noData+\"\");\n }\n getXaxisDomain(data) {\n if (this.opt.is70Cluster) {\n if (this.opt.enableAnimation) {\n return [data[0], data[data.length-3]];\n } else {\n return [data[0], data[data.length-1]];\n }\n } else {\n return [data[0][0], data[data.length-1][0]];\n }\n }\n toggleLine(i) {\n var maybeLast = this.data.filter(v => !v.disabled);\n if ((maybeLast.length == 1) && (this.data.indexOf(maybeLast[0]) == i)) {\n return;\n }\n this.data[i].disabled = !this.data[i].disabled;\n this.updateData(this.data);\n return true;\n }\n resize() {\n this.cvsRect = this.getCanvasRect(this.getElementRect());\n this.clip.attr(\"width\", this.cvsRect.width).attr(\"height\", this.cvsRect.height);\n this.xScale.range([0, this.cvsRect.width]);\n this.xAxis.ticks(Math.max(this.cvsRect.width/100, 2));\n if (this.cht.yAxis[1] && !this.cht.hideTicks) {\n this.svg.select(\".yAxis1\").attr(\"transform\", this.getTransform(this.cvsRect.width, 0));\n }\n this.updateData(this.data);\n }\n }\n\n class mnD3Focus extends mnD3 {\n constructor(options, rootElement, chart) {\n super(options, rootElement[0]);\n this.chart = chart;\n }\n init() {\n super.init();\n\n if (this.opt.is70Cluster) {\n this.bisect = bisector(d => d).left;\n } else {\n this.bisect = bisector(function (d) { return d[0]; }).left;\n }\n\n this.brush = brushX()\n .extent([[0, 0], [this.cvsRect.width,\n this.cht.height]])\n .on(\"brush end\", this.brushed.bind(this));\n\n this.brushEl = this.svg.append(\"g\")\n .attr(\"class\", \"charts-brush\");\n\n this.svg.attr(\"class\", \"focus-chart\");\n\n this.brushEl\n .call(this.brush)\n .call(this.brush.move, null);\n\n this.onInit && this.onInit();\n }\n getDomain() {\n var s = brushSelection(this.brushEl.node());\n let data = this.opt.is70Cluster ? this.xAxisTimestamps : this.xAxisData;\n return s ? s.map(this.xScale.invert, this.xScale) : this.getXaxisDomain(data);\n }\n brushed() {\n if (!this.data) {\n return;\n }\n var domain = this.getDomain();\n this.chart.updateXAxis(domain);\n this.chart.updateLine();\n this.chart.drawTooltip();\n }\n updateData(data) {\n if (!super.updateData(data)) {\n return;\n }\n this.brushed();\n }\n resize() {\n var s = this.getDomain();\n\n super.resize();\n\n this.brush.extent([[0, 0], [this.cvsRect.width, this.cht.height]]);\n this.brushEl.call(this.brush);\n\n if (brushSelection(this.brushEl.node())) { //proportional resize of selection\n let data = this.opt.is70Cluster ? this.xAxisTimestamps : this.xAxisData;\n var i1 = this.bisect(data, s[0]);\n var i2 = this.bisect(data, s[1]);\n\n this.brush.move(this.brushEl, [\n this.xScale(this.opt.is70Cluster ? data[i1] : data[i1][0]),\n this.xScale(this.opt.is70Cluster ? data[i2] : data[i2][0])\n ]);\n\n this.brushed();\n }\n }\n }\n\n class mnD3Tooltip extends mnD3 {\n constructor(options, rootElement, onInit) {\n super(options, rootElement[0]);\n this.onInit = onInit;\n }\n init() {\n super.init();\n\n if (this.opt.is70Cluster) {\n this.bisect = bisector(d => d).left;\n } else {\n this.bisect = bisector(function (d) { return d[0]; }).left;\n }\n\n //Tooltip\n this.tip = select(\"body\").append(\"div\").attr('class', 'mnd3-tooltip');\n this.tipLineWrap = this.svg.append(\"g\").attr(\"class\", \"tip-line-wrap\");\n this.tipLineWrap.append(\"path\").attr(\"class\", \"tip-line\").style(\"opacity\", 0);\n this.tipBox = this.svg.append('rect')\n .attr(\"height\", this.cvsRect.height)\n .attr(\"width\", this.cvsRect.width).attr('opacity', 0);\n\n this.drawTooltipThrottle = _.throttle(this.drawTooltip.bind(this), 10, {leading: true});\n\n angular.element(this.tipBox.node()).on('mousemove', this.setMouseMoveEvent.bind(this));\n angular.element(this.tipBox.node()).on('mousemove', this.drawTooltipThrottle);\n angular.element(this.tipBox.node()).on('mouseout', this.hideTooltip.bind(this));\n if (this.opt.isPauseEnabled) {\n angular.element(this.tipBox.node()).on('mousemove', this.cancelLineAnimation.bind(this));\n }\n\n this.onInit && this.onInit();\n }\n destroy() {\n this.tip && this.tip.remove();\n this.svg && this.svg.remove();\n }\n showEmptyContent() {\n super.showEmptyContent();\n this.tip && this.tip.remove();\n this.legendsWrap && this.legendsWrap.remove();\n }\n updateData(data) {\n if (!super.updateData(data)) {\n return;\n }\n this.drawTooltip();\n }\n\n toggleLine(i) {\n if (!super.toggleLine(i)) {\n return;\n }\n select(this.getLegends.bind(this)().nodes()[i]).classed('disabled', this.data[i].disabled);\n }\n resize() {\n super.resize();\n if (this.tipBox) {\n this.tipBox.attr(\"height\", this.cvsRect.height).attr(\"width\", this.cvsRect.width);\n this.tipBoxRect = this.tipBox.node().getBoundingClientRect();\n }\n }\n }\n\n mnD3Tooltip.prototype.updateLabelRow = updateLabelRow;\n mnD3Tooltip.prototype.updateCirclePosition = updateCirclePosition;\n mnD3Tooltip.prototype.drawTooltip = drawTooltip;\n mnD3Tooltip.prototype.drawCircle = drawCircle;\n mnD3Tooltip.prototype.setMouseMoveEvent = setMouseMoveEvent;\n mnD3Tooltip.prototype.hideTooltip = hideTooltip;\n mnD3Tooltip.prototype.disableTooltip = disableTooltip;\n mnD3Tooltip.prototype.drawLegends = drawLegends;\n mnD3Tooltip.prototype.getLegends = getLegends;\n mnD3Tooltip.prototype.getLabelRowValues = getLabelRowValues;\n\n function getLegends() {\n return this.legendsWrap.selectAll('.legends');\n }\n\n function drawCircle(path) {\n path\n .call(this.drawCirclePath.bind(this))\n .call(this.updateCirclePosition.bind(this),\n this.opt.is70Cluster ? undefined : this.selectedValueIndex);\n }\n\n function drawTooltip() {\n if (!this.mouseMoveEvent || !this.data) {\n return;\n }\n\n var elementRect = this.tipBoxRect;\n\n var elementX = this.mouseMoveEvent.pageX - elementRect.left;\n\n var circlesPerLine;\n if (this.opt.is70Cluster) {\n\n let xDate = this.xScale.invert(elementX).getTime();\n let i = this.bisect(this.xAxisTimestamps, xDate);\n let d0 = this.xAxisTimestamps[i - 1];\n let d1 = this.xAxisTimestamps[i];\n this.selectedXDate = (!d0 || ((xDate - d0) > (d1 - xDate))) ? d1 : d0;\n\n this.svg.select(\".tip-line\")\n .style(\"opacity\", \"1\")\n .attr(\"d\", () => {\n var x = this.xScale(this.selectedXDate);\n x = x < 0 ? 0 : x > this.cvsRect.width ? this.cvsRect.width : x;\n var d = \"M\" + x + \",\" + elementRect.height;\n d += \" \" + x + \", 0\";\n return d;\n });\n\n circlesPerLine =\n this.tipLineWrap.selectAll('.circle-per-line')\n .data(this.data)\n .style('opacity', function (d, i) {\n var value = this.xAxisMap[i][this.selectedXDate];\n return ((value || value === 0) && !d.disabled) ? 1 : 0;\n }.bind(this));\n } else {\n\n let xDate = this.xScale.invert(elementX);\n let i = this.bisect(this.xAxisData, xDate);\n let d0 = this.xAxisData[i - 1];\n let d1 = this.xAxisData[i];\n\n // work out which date value is closest to the mouse\n this.selectedValueIndex = (!d0 || (xDate - d0[0]) > (d1[0] - xDate)) ? i : i-1;\n\n this.svg.select(\".tip-line\")\n .style(\"opacity\", \"1\")\n .attr(\"d\", function () {\n var idx = this.selectedValueIndex;\n var d = \"M\" + this.xScale(this.xAxisData[idx][0]) + \",\" + elementRect.height;\n d += \" \" + this.xScale(this.xAxisData[idx][0]) + \", 0\";\n return d;\n }.bind(this));\n\n circlesPerLine =\n this.tipLineWrap.selectAll('.circle-per-line')\n .data(this.data)\n .style('opacity', function (d) {\n var idx = this.selectedValueIndex;\n return (d.values.length && !d.disabled && !isNaN(d.values[idx] && d.values[idx][1])) ? 1 : 0;\n }.bind(this));\n }\n\n circlesPerLine.join(function (enter) {\n enter\n .append(\"circle\")\n .attr('class', 'circle-per-line')\n .attr(\"r\", 5)\n .call(this.drawCircle.bind(this));\n }.bind(this), function (update) {\n update\n .transition()\n .duration(0)\n .call(this.drawCircle.bind(this));\n }.bind(this));\n\n let offsetWidth = document.getElementsByTagName(\"body\")[0].clientWidth;\n let offsetHeight = document.getElementsByTagName(\"body\")[0].clientHeight;\n let rightPos = offsetWidth - this.mouseMoveEvent.pageX;\n let bottomPos = offsetHeight - this.mouseMoveEvent.pageY;\n let leftRight = rightPos < 200 ? \"right\" : \"left\";\n let topBottom = bottomPos < 150 ? \"bottom\" : \"top\";\n\n if (!this.disableTooltipFlag) {\n var tooltipRows = this.tip\n .style('display', 'block')\n .style(leftRight == \"left\" ? \"right\" : \"left\", \"auto\")\n .style(topBottom == \"top\" ? \"bottom\" : \"top\", \"auto\")\n .style(leftRight, (leftRight == \"left\" ? this.mouseMoveEvent.pageX + 30 : rightPos) + \"px\")\n .style(topBottom, (topBottom == \"top\" ? this.mouseMoveEvent.pageY + 20 : bottomPos) + \"px\")\n .selectAll(\".charts-tooltip-row\")\n .data(this.data\n .map(this.getLabelRowValues.bind(this)),\n line => line.color+line.key+line.value+line.yAxis+line.disabled);\n\n tooltipRows.join((enter) => {\n enter\n .append(\"div\")\n .attr('class', line => line.disabled ? \"\" : \"charts-tooltip-row\")\n .html(line => line.disabled ? \"\" : this.updateLabelRow(line))\n });\n }\n }\n\n function getLabelRowValues(line, i) {\n let value;\n if (this.opt.is70Cluster) {\n let selectedValue = this.xAxisMap[i][this.selectedXDate];\n let isValuePresent = (selectedValue || selectedValue === 0);\n value = isValuePresent ?\n this.cht.tooltip.valueFormatter(selectedValue, line.unit) : \"-\";\n } else {\n let idx = this.selectedValueIndex;\n value = (!line.values[idx] || line.values[idx][1] == undefined) ? \"-\" :\n this.cht.tooltip.valueFormatter(line.values[idx][1], line.unit);\n }\n return {\n disabled: line.disabled,\n yAxis: line.yAxis,\n color: line.color,\n key: line.key,\n value: value\n };\n }\n\n function drawLegends() {\n //Legends\n this.legendsWrap =\n this.rootEl.append(\"div\").attr(\"class\", \"legends-wrap\")\n .append(\"div\").attr(\"class\", \"charts-filter-icon\");\n\n this.getLegends()\n .data(this.data)\n .join(function (enter) {\n enter\n .append(\"div\")\n .attr('class', 'legends')\n .html(getLegendsHtml.bind(this));\n }.bind(this), function (update) {\n update\n .html(getLegendsHtml.bind(this));\n }.bind(this));\n\n this.clickCB = this.getLegends().nodes().map(function (node, i) {\n var cb = function () {\n this.toggleLine(i);\n this.rootEl.dispatch('toggleLegend', {detail: {index: i}});\n }.bind(this);\n angular.element(node).on('click', cb);\n return cb;\n }.bind(this));\n }\n\n function getLegendsHtml(line) {\n return \"\" +\n \"\" + line.key + \"\";\n }\n\n function updateLabelRow(line) {\n return \"\" +\n \"\" + line.key + (line.yAxis ? \" (2nd axis)\" : \"\") + \"\" +\n \"\" + line.value + \"\";\n }\n\n function updateCirclePosition(pipe, idx) {\n return this.opt.is70Cluster ? pipe.attr(\"transform\", (line, i) => {\n let selectedValue = this.xAxisMap[i][this.selectedXDate];\n if (selectedValue || selectedValue === 0) {\n let x = this.xScale(this.selectedXDate);\n x = x < 0 ? 0 : x > this.cvsRect.width ? this.cvsRect.width : x;\n return this.getTransform(x, this.yScale[line.yAxis](selectedValue));\n }\n }) : pipe.attr(\"transform\", function (line) {\n if (line.values[idx] && line.values[idx].length && !isNaN(line.values[idx][1])) {\n return this.getTransform(this.xScale(line.values[idx][0]),\n this.yScale[line.yAxis](line.values[idx][1]));\n }\n }.bind(this))\n }\n\n function hideTooltip() {\n this.mouseMoveEvent = false;\n this.svg.selectAll(\".tip-line\").style(\"opacity\", 0);\n this.svg.selectAll(\".circle-per-line\").style(\"opacity\", 0);\n this.tip.style(\"display\", \"none\");\n }\n\n function disableTooltip(flag) {\n this.disableTooltipFlag = flag;\n }\n\n function setMouseMoveEvent(e) {\n this.mouseMoveEvent = e;\n }\n\n return {\n mdD3: mnD3,\n mnD3Focus: mnD3Focus,\n mnD3Tooltip: mnD3Tooltip,\n };\n}\n", "/*\nCopyright 2020-Present Couchbase, Inc.\n\nUse of this software is governed by the Business Source License included in\nthe file licenses/BSL-Couchbase.txt. As of the Change Date specified in that\nfile, in accordance with the Business Source License, use of this software will\nbe governed by the Apache License, Version 2.0, included in the file\nlicenses/APL2.txt.\n*/\nimport angular from \"angular\";\nimport _ from \"lodash\"\n\nexport default mnMultiChartDirective;\n\nmnMultiChartDirective.$inject = [\"$window\", \"mnD3Service\"];\nfunction mnMultiChartDirective($window, mnD3Service) {\n return {\n restrict: 'AE',\n scope: {\n data: \"=?\",\n options: \"=?\",\n api: \"=?\",\n syncScope: \"=?\",\n statsPoller: \"=?\"\n },\n controller: [\"$element\", \"$scope\", \"$timeout\", controller]\n };\n\n function controller($element, $scope, $timeout) {\n var chart = new mnD3Service.mnD3Tooltip($scope.options, $element, function () {\n angular.element($window).on('resize', chart.throttledResize);\n chart.resize();\n if ($scope.syncScope) {\n syncTooltipsAndPauseCharts();\n }\n if ($scope.options.chart.showFocus) {\n addFocusChart();\n }\n if (this.cht.showLegends) {\n this.drawLegends();\n }\n });\n\n $scope.$watch(\"data\", chart.updateData.bind(chart));\n\n $scope.$on(\"$destroy\", function () {\n angular.element($window).off('resize', chart.throttledResize);\n chart.destroy();\n });\n\n if ($scope.api) {\n $scope.api.chart = chart;\n }\n\n function addFocusChart() {\n var focusChartOpt = _.cloneDeep($scope.options);\n focusChartOpt.chart.height = 80;\n focusChartOpt.chart.hideTicks = true;\n focusChartOpt.chart.showFocus = false;\n var chartF = new mnD3Service.mnD3Focus(focusChartOpt, $element, chart);\n angular.element($window).on('resize', chartF.throttledResize);\n\n $scope.$watch(\"data\", chartF.updateData.bind(chartF));\n\n chart.rootEl.on(\"toggleLegend\", function () {\n chartF.updateData(chartF.data);\n });\n\n if ($scope.api) {\n $scope.api.chartF = chartF;\n }\n\n $scope.$on(\"$destroy\", function () {\n angular.element($window).off('resize', chartF.throttledResize);\n chartF.destroy();\n });\n }\n\n function syncTooltipsAndPauseCharts() {\n let resumeStatsTimer;\n let chartNode = chart.tipBox.node();\n let cancelStatsTimer = () => $scope.syncScope.$broadcast(\"mnStatsCancelTimer\");\n\n let throttledSync = _.throttle(function (e) {\n if (e.bubbles) {\n $scope.syncScope.$broadcast(\"syncTooltips\", {element: $element,\n event: e,\n chart: chart});\n }\n }, 60, {leading: true});\n\n let throttledPause = _.throttle(function (e) {\n if (e.bubbles) {\n cancelStatsTimer();\n if (!$scope.statsPoller.heartbeat.isPaused) {\n $scope.statsPoller.heartbeat.pause();\n }\n }\n }, 10, {leading: true});\n\n let throttledResume = _.throttle(function (e) {\n if ($scope.statsPoller.heartbeat.isPaused && e.bubbles) {\n resumeStatsTimer && $timeout.cancel(resumeStatsTimer);\n resumeStatsTimer = $timeout(function () {\n $scope.statsPoller.heartbeat.resume();\n }, 1000);\n }\n }, 10, {leading: true});\n\n angular.element(chartNode).on(\"mousemove mouseup mousedown mouseout\", throttledSync);\n angular.element(chartNode).on(\"mouseenter\", throttledPause);\n angular.element(chartNode).on(\"mouseout\", throttledResume);\n\n document.addEventListener('visibilitychange', cancelStatsTimer);\n\n $scope.$on(\"mnStatsCancelTimer\", function () {\n resumeStatsTimer && $timeout.cancel(resumeStatsTimer);\n });\n\n $scope.$on(\"$destroy\", function () {\n angular.element(chartNode).off(\"mousemove mouseup mousedown mouseout\", throttledSync);\n angular.element(chartNode).off(\"mouseenter\", throttledPause);\n angular.element(chartNode).off(\"mouseout\", throttledResume);\n document.removeEventListener('visibilitychange', cancelStatsTimer);\n });\n\n $scope.$on(\"syncTooltips\", function (e, source) {\n if (source.element[0] !== $element[0]) {\n var sourcePos = source.chart.tipBoxRect;\n var elementPos = chart.tipBoxRect;\n var sourceGraphRelativeX = source.event.clientX - sourcePos.x;\n var sourceGraphRelativeY = source.event.clientY - sourcePos.y;\n\n var interpolateX = sourcePos.width / sourceGraphRelativeX;\n var clientX = elementPos.x + (elementPos.width / interpolateX);\n\n var interpolateY = sourcePos.height / sourceGraphRelativeY;\n var clientY = elementPos.y + (elementPos.height / interpolateY);\n\n source.chart.disableTooltip(false);\n chart.disableTooltip(true);\n\n chart.tipBox.node().dispatchEvent(createEvent(\n source.event.type,\n clientX,\n clientY\n ));\n }\n });\n }\n\n function createEvent(type, clientX, clientY){\n var event = new MouseEvent(type, {\n view: $window,\n bubbles: false,\n cancelable: true,\n clientX: clientX,\n clientY: clientY\n });\n return event;\n }\n }\n}\n", "/*\nCopyright 2020-Present Couchbase, Inc.\n\nUse of this software is governed by the Business Source License included in\nthe file licenses/BSL-Couchbase.txt. As of the Change Date specified in that\nfile, in accordance with the Business Source License, use of this software will\nbe governed by the Apache License, Version 2.0, included in the file\nlicenses/APL2.txt.\n*/\n\nimport angular from 'angular';\nimport _ from 'lodash';\nimport {min as d3Min, max as d3Max} from 'd3-array';\nimport uiRouter from '@uirouter/angularjs';\n\nimport mnFilters from \"../components/mn_filters.js\";\nimport mnHelper from \"../components/mn_helper.js\";\n\nimport mnD3Service from \"./mn_d3_service.js\";\nimport mnStatisticsNewService from \"./mn_statistics_service.js\";\nimport mnMultiChartDirective from \"./mn_multi_chart_directive.js\";\n\nimport mnPoolDefault from \"../components/mn_pool_default.js\";\nimport template from \"./mn_statistics_chart_directive.html\";\n\nexport default \"mnStatisticsChart\";\n\nangular\n .module('mnStatisticsChart', [\n uiRouter,\n mnFilters,\n mnHelper,\n mnD3Service,\n mnStatisticsNewService,\n mnPoolDefault\n ])\n .directive(\"mnStatisticsChart\", [\"mnStatisticsNewService\", \"mnFormatQuantityFilter\", \"$state\", \"mnTruncateTo3DigitsFilter\", \"mnHelper\", \"mnPoolDefault\", mnStatisticsNewChartDirective])\n .directive(\"mnMultiChart\", mnMultiChartDirective);\n\nfunction mnStatisticsNewChartDirective(mnStatisticsNewService, mnFormatQuantityFilter, $state, mnTruncateTo3DigitsFilter, mnHelper, mnPoolDefault) {\n return {\n restrict: 'AE',\n template,\n scope: {\n statsPoller: \"=?\",\n syncScope: \"=?\",\n config: \"=\",\n mnD3: \"=?\",\n bucket: \"@\",\n zoom: \"@\",\n node: \"@?\",\n items: \"=?\",\n api: \"=?\"\n },\n controller: [\"$scope\", controller]\n };\n\n function controller($scope) {\n if (!$scope.config) {\n return;\n }\n\n var units;\n var options;\n let poller = $scope.statsPoller || mnStatisticsNewService.mnAdminStatsPoller;\n let step = mnStatisticsNewService.getChartStep($scope.zoom);\n let start = mnStatisticsNewService.getChartStart($scope.zoom);\n\n if (!_.isEmpty($scope.config.stats)) {\n units = mnStatisticsNewService.getStatsUnits($scope.config.stats);\n $scope.title = mnStatisticsNewService.getStatsTitle($scope.config.stats);\n $scope.desc = mnStatisticsNewService.getStatsDesc($scope.config.stats);\n activate();\n }\n\n function activate() {\n initConfig();\n subscribeToMultiChartData();\n }\n\n function subscribeToMultiChartData() {\n poller.subscribeUIStatsPoller({\n bucket: $scope.bucket,\n node: $scope.node || \"all\",\n stats: $scope.config.stats,\n items: $scope.items,\n zoom: $scope.zoom,\n specificStat: $scope.config.specificStat,\n alignTimestamps: true\n }, $scope);\n\n\n $scope.$watch(\"mnUIStats\", onMultiChartDataUpdate);\n }\n\n function getChartSize(size) {\n switch (size) {\n case \"tiny\": return 62;\n case \"small\": return 102;\n case \"medium\": return 122;\n case \"large\": return 312;\n case \"extra\": return 432;\n default: return 122;\n }\n }\n\n function initConfig() {\n options = {\n step: step,\n start: start,\n isPauseEnabled: !!$scope.syncScope,\n enableAnimation: mnPoolDefault.export.compat.atLeast70 && $scope.zoom == \"minute\",\n is70Cluster: mnPoolDefault.export.compat.atLeast70,\n chart: {\n margin: $scope.config.margin || {top: 10, right: 36, bottom: 18, left: 44},\n height: getChartSize($scope.config.size),\n tooltip: {valueFormatter: formatValue},\n useInteractiveGuideline: true,\n yAxis: [],\n xAxis: {\n tickFormat: function (d) {\n return mnStatisticsNewService.tickMultiFormat(new Date(d));\n }\n },\n noData: \"Stats are not found or not ready yet\"\n }\n };\n\n Object.keys(units).forEach(function (unit, index) {\n units[unit] = index;\n options.chart.yAxis[index] = {};\n options.chart.yAxis[index].unit = unit;\n options.chart.yAxis[index].tickFormat = function (d) {\n return formatValue(d, unit);\n };\n options.chart.yAxis[index].domain = getScaledMinMax;\n });\n\n if ($scope.mnD3) {\n Object.assign(options.chart, $scope.mnD3);\n }\n\n $scope.options = options;\n }\n\n function formatValue(d, unit) {\n switch (unit) {\n case \"percent\": return mnTruncateTo3DigitsFilter(d) + \"%\";\n case \"bytes\": return mnFormatQuantityFilter(d, 1024);\n case \"bytes/sec\": return mnFormatQuantityFilter(d, 1024) + \"/s\";\n case \"second\": return mnFormatQuantityFilter(d, 1000);\n case \"millisecond\": return mnFormatQuantityFilter(d / 1000, 1000) + \"s\"\n case \"millisecond/sec\": return mnFormatQuantityFilter(d / 1000, 1000) + \"/s\";\n case \"microsecond\": return mnFormatQuantityFilter(d / 1000000, 1000) + \"s\"\n case \"nanoseconds\": return mnFormatQuantityFilter(d / 1000000000, 1000) + \"s\";\n case \"number\": return mnFormatQuantityFilter(d, 1000);\n case \"number/sec\": return mnFormatQuantityFilter(d, 1000) + \"/s\";\n default: return mnFormatQuantityFilter(d, 1000);\n }\n }\n\n function getScaledMinMax(chartData) {\n var min = d3Min(chartData, function (line) {return line.yMin/1.005;});\n var max = d3Max(chartData, function (line) {return line.yMax;});\n if (chartData[0] && chartData[0].unit == \"bytes\") {\n return [min <= 0 ? 0 : roundDownBytes(min), max == 0 ? 1 : roundUpBytes(max)];\n } else {\n return [min <= 0 ? 0 : roundDown(min), max == 0 ? 1 : roundUp(max)];\n }\n }\n\n // make 2nd digit either 0 or 5\n function roundUp(num) {\n var mag = Math.pow(10,Math.floor(Math.log10(num)));\n return(mag*Math.ceil(2*num/mag)/2);\n }\n\n function roundDown(num) {\n var mag = Math.pow(10,Math.floor(Math.log10(num)));\n return(mag*Math.floor(2*num/mag)/2);\n }\n\n function roundUpBytes(num) { // round up 3rd digit to 0\n var mag = Math.trunc(Math.log2(num)/10);\n var base_num = num/Math.pow(2,mag*10); // how many KB, MB, GB, TB, whatever\n var mag10 = Math.pow(10,Math.floor(Math.log10(base_num))-1);\n return Math.ceil(base_num/mag10) * mag10 * Math.pow(2,mag*10);\n }\n\n function roundDownBytes(num) {\n var mag = Math.trunc(Math.log2(num)/10);\n var base_num = num/Math.pow(2,mag*10);\n var mag10 = Math.pow(10,Math.floor(Math.log10(base_num))-1);\n return Math.floor(base_num/mag10) * mag10 * Math.pow(2,mag*10);\n }\n\n function onMultiChartDataUpdate(stats) {\n if (!stats) {\n return;\n }\n\n if (stats.status == 404) {\n $scope.options = {\n chart: {\n notFound: true,\n height: getChartSize($scope.config.size),\n margin : {top: 0, right: 0, bottom: 0, left: 0},\n type: 'multiChart',\n noData: \"Stats are not found or not ready yet\"\n }\n };\n $scope.chartData = [];\n return;\n }\n\n var chartData = [];\n\n if ($scope.config.specificStat) {\n var descPath = Object.keys($scope.config.stats)[0];\n var desc = mnStatisticsNewService.readByPath(descPath);\n if (!desc) {\n return;\n }\n var statName = Object.keys(stats.stats)[0];\n var nodes;\n if ($scope.node == \"all\") {\n nodes = Object.keys(stats.stats[statName] || {});\n if (!nodes.length) {\n nodes = mnPoolDefault.export.nodes.map(n => n.hostname);\n }\n } else {\n nodes = [$scope.node];\n }\n\n nodes.forEach((nodeName, i) => {\n var previousData = $scope.chartData && $scope.chartData[i];\n chartData.push(\n mnStatisticsNewService.buildChartConfig(stats, statName, nodeName,\n nodeName, desc.unit, units[desc.unit],\n previousData, poller.isThisInitCall(),\n start, step))\n });\n } else {\n Object.keys($scope.config.stats).forEach(function (descPath, i) {\n var desc = mnStatisticsNewService.readByPath(descPath);\n if (!desc) {\n return;\n }\n\n var statName =\n mnStatisticsNewService.descriptionPathToStatName(descPath, $scope.items);\n var previousData = $scope.chartData && $scope.chartData[i];\n chartData.push(\n mnStatisticsNewService.buildChartConfig(stats, statName, $scope.node,\n desc.title, desc.unit, units[desc.unit],\n previousData, poller.isThisInitCall(),\n start, step));\n\n });\n }\n\n if ($scope.chartData) {\n $scope.chartData.forEach(function (v, i) {\n if (!chartData[i]) {\n return;\n }\n chartData[i].disabled = v.disabled;\n });\n }\n\n $scope.chartData = chartData;\n }\n }\n}\n"],
"mappings": "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",
"names": []
}