diff --git a/Gruntfile.js b/Gruntfile.js
index 17fe576..7acea27 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -1,7 +1,7 @@
+'use strict';
module.exports = (grunt) => {
require('load-grunt-tasks')(grunt);
- grunt.loadNpmTasks('grunt-execute');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-notify');
@@ -22,10 +22,10 @@ module.exports = (grunt) => {
src_to_dist: {
cwd: 'src',
expand: true,
- src: ['**/*', '!**/*.js', '!**/*.scss'],
+ src: ['**/*', '!**/*.js', '!**/*.ts', '!**/*.scss'],
dest: 'dist'
},
- pluginDef: {
+ root_to_dist: {
expand: true,
src: ['plugin.json', 'README.md', 'CHANGELOG.md'],
dest: 'dist'
@@ -46,14 +46,23 @@ module.exports = (grunt) => {
babel: {
options: {
sourceMap: true,
- presets: ['es2015'],
- plugins: ['transform-es2015-modules-systemjs', 'transform-es2015-for-of', 'transform-class-properties', 'transform-object-rest-spread'],
+ presets: ['@babel/preset-env', '@babel/typescript'],
+ plugins: ['angularjs-annotate', '@babel/plugin-transform-modules-systemjs', '@babel/plugin-transform-for-of', '@babel/plugin-proposal-class-properties', '@babel/plugin-proposal-object-rest-spread'],
+ },
+ d3lib: {
+ files: [{
+ cwd: 'src',
+ expand: true,
+ src: ['libs/**/*.js'],
+ dest: 'dist',
+ ext: '.js'
+ }]
},
dist: {
files: [{
cwd: 'src',
expand: true,
- src: ['*.js', '**/*.js'],
+ src: ['*.ts', '**/*.ts'],
dest: 'dist',
ext: '.js'
}]
@@ -71,7 +80,7 @@ module.exports = (grunt) => {
});
- grunt.registerTask('default', ['clean', 'copy:src_to_dist', 'copy:pluginDef', 'babel', 'sass']);
+ grunt.registerTask('default', ['clean', 'copy:src_to_dist', 'copy:root_to_dist', 'babel', 'sass']);
// grunt.registerTask('clean', ['clean']);
// grunt.registerTask('watch', ['watch']);
};
diff --git a/dist/annotations.js b/dist/annotations.js
index e3c901c..e20b23b 100644
--- a/dist/annotations.js
+++ b/dist/annotations.js
@@ -1,15 +1,17 @@
-'use strict';
+"use strict";
-System.register(['d3', 'jquery', 'lodash', 'app/core/utils/kbn'], function (_export, _context) {
+System.register(["d3", "jquery", "lodash"], function (_export, _context) {
"use strict";
- var d3, $, _, kbn, _createClass, TOOLTIP_PADDING_X, TOOLTIP_PADDING_Y, AnnotationTooltip;
+ var d3, $, _, TOOLTIP_PADDING_X, TOOLTIP_PADDING_Y, AnnotationTooltip;
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- }
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
return {
setters: [function (_d) {
@@ -18,47 +20,42 @@ System.register(['d3', 'jquery', 'lodash', 'app/core/utils/kbn'], function (_exp
$ = _jquery.default;
}, function (_lodash) {
_ = _lodash.default;
- }, function (_appCoreUtilsKbn) {
- kbn = _appCoreUtilsKbn.default;
}],
execute: function () {
- _createClass = function () {
- function defineProperties(target, props) {
- for (var i = 0; i < props.length; i++) {
- var descriptor = props[i];
- descriptor.enumerable = descriptor.enumerable || false;
- descriptor.configurable = true;
- if ("value" in descriptor) descriptor.writable = true;
- Object.defineProperty(target, descriptor.key, descriptor);
- }
- }
-
- return function (Constructor, protoProps, staticProps) {
- if (protoProps) defineProperties(Constructor.prototype, protoProps);
- if (staticProps) defineProperties(Constructor, staticProps);
- return Constructor;
- };
- }();
-
TOOLTIP_PADDING_X = 30;
TOOLTIP_PADDING_Y = 10;
- _export('AnnotationTooltip', AnnotationTooltip = function () {
+ _export("AnnotationTooltip", AnnotationTooltip =
+ /*#__PURE__*/
+ function () {
function AnnotationTooltip(elem, scope) {
_classCallCheck(this, AnnotationTooltip);
+ _defineProperty(this, "scope", void 0);
+
+ _defineProperty(this, "dashboard", void 0);
+
+ _defineProperty(this, "panelCtrl", void 0);
+
+ _defineProperty(this, "panel", void 0);
+
+ _defineProperty(this, "mouseOverAnnotationTick", void 0);
+
+ _defineProperty(this, "tooltipBase", void 0);
+
+ _defineProperty(this, "tooltip", void 0);
+
this.scope = scope;
this.dashboard = scope.ctrl.dashboard;
this.panelCtrl = scope.ctrl;
this.panel = scope.ctrl.panel;
this.mouseOverAnnotationTick = false;
-
elem.on("mouseover", this.onMouseOver.bind(this));
elem.on("mouseleave", this.onMouseLeave.bind(this));
}
_createClass(AnnotationTooltip, [{
- key: 'onMouseOver',
+ key: "onMouseOver",
value: function onMouseOver(e) {
if (!this.panel.tooltip.show || !this.scope.ctrl.data || _.isEmpty(this.scope.ctrl.data)) {
return;
@@ -70,12 +67,12 @@ System.register(['d3', 'jquery', 'lodash', 'app/core/utils/kbn'], function (_exp
}
}
}, {
- key: 'onMouseLeave',
+ key: "onMouseLeave",
value: function onMouseLeave() {
this.destroy();
}
}, {
- key: 'onMouseMove',
+ key: "onMouseMove",
value: function onMouseMove(e) {
if (!this.panel.tooltip.show) {
return;
@@ -84,13 +81,13 @@ System.register(['d3', 'jquery', 'lodash', 'app/core/utils/kbn'], function (_exp
this.move(e);
}
}, {
- key: 'add',
+ key: "add",
value: function add() {
this.tooltipBase = d3.select("body").append("div").attr("class", "statusmap-annotation-tooltip drop drop-popover drop-popover--annotation drop-element drop-enabled drop-target-attached-center drop-open drop-open-transitionend drop-after-open").style("position", "absolute");
this.tooltip = this.tooltipBase.append("div").attr("class", "drop-content").append("div").append("annotation-tooltip").append("div").attr("class", "graph-annotation");
}
}, {
- key: 'destroy',
+ key: "destroy",
value: function destroy() {
if (this.tooltip) {
this.tooltip.remove();
@@ -105,50 +102,54 @@ System.register(['d3', 'jquery', 'lodash', 'app/core/utils/kbn'], function (_exp
this.tooltipBase = null;
}
}, {
- key: 'show',
+ key: "show",
value: function show(pos) {
if (!this.panel.tooltip.show || !this.tooltip) {
return;
- }
- // shared tooltip mode
+ } // shared tooltip mode
//if (pos.panelRelY) {
// return;
//}
+
var annoId = d3.select(pos.target).attr('annoId');
+
if (!annoId) {
this.destroy();
return;
}
var anno = this.panelCtrl.annotations[annoId];
+
if (!anno) {
this.destroy();
return;
}
var annoTitle = "";
-
var tooltipTimeFormat = 'YYYY-MM-DD HH:mm:ss';
var annoTime = this.dashboard.formatDate(anno.time, tooltipTimeFormat);
var annoText = anno.text;
var annoTags = [];
+
if (anno.tags) {
annoTags = _.map(anno.tags, function (t) {
- return { "text": t, "backColor": "rgb(63, 43, 91)", "borderColor": "rgb(101, 81, 129)" };
+ return {
+ "text": t,
+ "backColor": "rgb(63, 43, 91)",
+ "borderColor": "rgb(101, 81, 129)"
+ };
});
}
- var tooltipHtml = '
\n \n
' + annoText + '
\n ' + _.join(_.map(annoTags, function (t) {
- return '
' + t.text + '';
- }), "") + '\n
\n ';
-
+ var tooltipHtml = "\n \n
").concat(annoText, "
\n ").concat(_.join(_.map(annoTags, function (t) {
+ return "
").concat(t.text, "");
+ }), ""), "\n
\n ");
this.tooltip.html(tooltipHtml);
-
this.move(pos);
}
}, {
- key: 'move',
+ key: "move",
value: function move(pos) {
if (!this.tooltipBase) {
return;
@@ -157,7 +158,6 @@ System.register(['d3', 'jquery', 'lodash', 'app/core/utils/kbn'], function (_exp
var elem = $(this.tooltipBase.node())[0];
var tooltipWidth = elem.clientWidth;
var tooltipHeight = elem.clientHeight;
-
var left = pos.pageX - tooltipWidth / 2;
var top = pos.pageY + TOOLTIP_PADDING_Y;
@@ -175,8 +175,6 @@ System.register(['d3', 'jquery', 'lodash', 'app/core/utils/kbn'], function (_exp
return AnnotationTooltip;
}());
-
- _export('AnnotationTooltip', AnnotationTooltip);
}
};
});
diff --git a/dist/annotations.js.map b/dist/annotations.js.map
index 5c1d106..8fd6c88 100644
--- a/dist/annotations.js.map
+++ b/dist/annotations.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../src/annotations.js"],"names":["d3","$","_","kbn","TOOLTIP_PADDING_X","TOOLTIP_PADDING_Y","AnnotationTooltip","elem","scope","dashboard","ctrl","panelCtrl","panel","mouseOverAnnotationTick","on","onMouseOver","bind","onMouseLeave","e","tooltip","show","data","isEmpty","add","move","destroy","tooltipBase","select","append","attr","style","remove","pos","annoId","target","anno","annotations","annoTitle","tooltipTimeFormat","annoTime","formatDate","time","annoText","text","annoTags","tags","map","t","tooltipHtml","join","backColor","borderColor","html","node","tooltipWidth","clientWidth","tooltipHeight","clientHeight","left","pageX","top","pageY","window","innerWidth","pageYOffset","innerHeight"],"mappings":"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","file":"annotations.js","sourcesContent":["import d3 from 'd3';\nimport $ from 'jquery';\nimport _ from 'lodash';\nimport kbn from 'app/core/utils/kbn';\n\nlet TOOLTIP_PADDING_X = 30;\nlet TOOLTIP_PADDING_Y = 10;\n\nexport class AnnotationTooltip {\n constructor(elem, scope) {\n this.scope = scope;\n this.dashboard = scope.ctrl.dashboard;\n this.panelCtrl = scope.ctrl;\n this.panel = scope.ctrl.panel;\n this.mouseOverAnnotationTick = false;\n\n elem.on(\"mouseover\", this.onMouseOver.bind(this));\n elem.on(\"mouseleave\", this.onMouseLeave.bind(this));\n }\n\n onMouseOver(e) {\n if (!this.panel.tooltip.show || !this.scope.ctrl.data || _.isEmpty(this.scope.ctrl.data)) { return; }\n\n if (!this.tooltip) {\n this.add();\n this.move(e);\n }\n }\n\n onMouseLeave() {\n this.destroy();\n }\n\n onMouseMove(e) {\n if (!this.panel.tooltip.show) { return; }\n\n this.move(e);\n }\n\n add() {\n this.tooltipBase = d3.select(\"body\")\n .append(\"div\")\n .attr(\"class\", \"statusmap-annotation-tooltip drop drop-popover drop-popover--annotation drop-element drop-enabled drop-target-attached-center drop-open drop-open-transitionend drop-after-open\")\n .style(\"position\", \"absolute\")\n this.tooltip = this.tooltipBase\n .append(\"div\")\n .attr(\"class\", \"drop-content\")\n .append(\"div\")\n .append(\"annotation-tooltip\")\n .append(\"div\")\n .attr(\"class\", \"graph-annotation\");\n }\n\n destroy() {\n if (this.tooltip) {\n this.tooltip.remove();\n }\n\n this.tooltip = null;\n\n if (this.tooltipBase) {\n this.tooltipBase.remove();\n }\n\n this.tooltipBase = null;\n\n }\n\n show(pos) {\n if (!this.panel.tooltip.show || !this.tooltip) { return; }\n // shared tooltip mode\n //if (pos.panelRelY) {\n // return;\n //}\n\n let annoId = d3.select(pos.target).attr('annoId');\n if (!annoId) {\n this.destroy();\n return;\n }\n\n let anno = this.panelCtrl.annotations[annoId];\n if (!anno) {\n this.destroy();\n return;\n }\n\n let annoTitle = \"\";\n\n let tooltipTimeFormat = 'YYYY-MM-DD HH:mm:ss';\n let annoTime = this.dashboard.formatDate(anno.time, tooltipTimeFormat);\n let annoText = anno.text;\n let annoTags = [];\n if (anno.tags) {\n annoTags = _.map(anno.tags, t => ({\"text\": t, \"backColor\": \"rgb(63, 43, 91)\", \"borderColor\":\"rgb(101, 81, 129)\"}))\n }\n\n let tooltipHtml = `\n \n
${annoText}
\n ${_.join(_.map(annoTags, t => `
${t.text}`), \"\")}\n
\n `;\n\n this.tooltip.html(tooltipHtml);\n\n this.move(pos);\n }\n\n move(pos) {\n if (!this.tooltipBase) { return; }\n\n let elem = $(this.tooltipBase.node())[0];\n let tooltipWidth = elem.clientWidth;\n let tooltipHeight = elem.clientHeight;\n\n let left = pos.pageX - tooltipWidth/2;\n let top = pos.pageY + TOOLTIP_PADDING_Y;\n\n if (pos.pageX + tooltipWidth/2 + 10 > window.innerWidth) {\n left = pos.pageX - tooltipWidth - TOOLTIP_PADDING_X;\n }\n\n if (pos.pageY - window.pageYOffset + tooltipHeight + 20 > window.innerHeight) {\n top = pos.pageY - tooltipHeight - TOOLTIP_PADDING_Y;\n }\n\n return this.tooltipBase\n .style(\"left\", left + \"px\")\n .style(\"top\", top + \"px\");\n }\n}\n"]}
\ No newline at end of file
+{"version":3,"sources":["../src/annotations.ts"],"names":["d3","$","_","TOOLTIP_PADDING_X","TOOLTIP_PADDING_Y","AnnotationTooltip","elem","scope","dashboard","ctrl","panelCtrl","panel","mouseOverAnnotationTick","on","onMouseOver","bind","onMouseLeave","e","tooltip","show","data","isEmpty","add","move","destroy","tooltipBase","select","append","attr","style","remove","pos","annoId","target","anno","annotations","annoTitle","tooltipTimeFormat","annoTime","formatDate","time","annoText","text","annoTags","tags","map","t","tooltipHtml","join","backColor","borderColor","html","node","tooltipWidth","clientWidth","tooltipHeight","clientHeight","left","pageX","top","pageY","window","innerWidth","pageYOffset","innerHeight"],"mappings":"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","sourcesContent":["import d3 from 'd3';\nimport $ from 'jquery';\nimport _ from 'lodash';\n\nlet TOOLTIP_PADDING_X = 30;\nlet TOOLTIP_PADDING_Y = 10;\n\nexport class AnnotationTooltip {\n scope: any;\n dashboard: any;\n panelCtrl: any;\n panel: any;\n mouseOverAnnotationTick: boolean;\n\n tooltipBase: any;\n tooltip: any;\n\n constructor(elem, scope) {\n this.scope = scope;\n this.dashboard = scope.ctrl.dashboard;\n this.panelCtrl = scope.ctrl;\n this.panel = scope.ctrl.panel;\n this.mouseOverAnnotationTick = false;\n\n elem.on(\"mouseover\", this.onMouseOver.bind(this));\n elem.on(\"mouseleave\", this.onMouseLeave.bind(this));\n }\n\n onMouseOver(e) {\n if (!this.panel.tooltip.show || !this.scope.ctrl.data || _.isEmpty(this.scope.ctrl.data)) { return; }\n\n if (!this.tooltip) {\n this.add();\n this.move(e);\n }\n }\n\n onMouseLeave() {\n this.destroy();\n }\n\n onMouseMove(e) {\n if (!this.panel.tooltip.show) { return; }\n\n this.move(e);\n }\n\n add() {\n this.tooltipBase = d3.select(\"body\")\n .append(\"div\")\n .attr(\"class\", \"statusmap-annotation-tooltip drop drop-popover drop-popover--annotation drop-element drop-enabled drop-target-attached-center drop-open drop-open-transitionend drop-after-open\")\n .style(\"position\", \"absolute\")\n this.tooltip = this.tooltipBase\n .append(\"div\")\n .attr(\"class\", \"drop-content\")\n .append(\"div\")\n .append(\"annotation-tooltip\")\n .append(\"div\")\n .attr(\"class\", \"graph-annotation\");\n }\n\n destroy() {\n if (this.tooltip) {\n this.tooltip.remove();\n }\n\n this.tooltip = null;\n\n if (this.tooltipBase) {\n this.tooltipBase.remove();\n }\n\n this.tooltipBase = null;\n\n }\n\n show(pos) {\n if (!this.panel.tooltip.show || !this.tooltip) { return; }\n // shared tooltip mode\n //if (pos.panelRelY) {\n // return;\n //}\n\n let annoId = d3.select(pos.target).attr('annoId');\n if (!annoId) {\n this.destroy();\n return;\n }\n\n let anno = this.panelCtrl.annotations[annoId];\n if (!anno) {\n this.destroy();\n return;\n }\n\n let annoTitle = \"\";\n\n let tooltipTimeFormat = 'YYYY-MM-DD HH:mm:ss';\n let annoTime = this.dashboard.formatDate(anno.time, tooltipTimeFormat);\n let annoText = anno.text;\n let annoTags:any = [];\n if (anno.tags) {\n annoTags = _.map(anno.tags, t => ({\"text\": t, \"backColor\": \"rgb(63, 43, 91)\", \"borderColor\":\"rgb(101, 81, 129)\"}))\n }\n\n let tooltipHtml = `\n \n
${annoText}
\n ${_.join(_.map(annoTags, t => `
${t.text}`), \"\")}\n
\n `;\n\n this.tooltip.html(tooltipHtml);\n\n this.move(pos);\n }\n\n move(pos) {\n if (!this.tooltipBase) { return; }\n\n let elem = $(this.tooltipBase.node())[0];\n let tooltipWidth = elem.clientWidth;\n let tooltipHeight = elem.clientHeight;\n\n let left = pos.pageX - tooltipWidth/2;\n let top = pos.pageY + TOOLTIP_PADDING_Y;\n\n if (pos.pageX + tooltipWidth/2 + 10 > window.innerWidth) {\n left = pos.pageX - tooltipWidth - TOOLTIP_PADDING_X;\n }\n\n if (pos.pageY - window.pageYOffset + tooltipHeight + 20 > window.innerHeight) {\n top = pos.pageY - tooltipHeight - TOOLTIP_PADDING_Y;\n }\n\n return this.tooltipBase\n .style(\"left\", left + \"px\")\n .style(\"top\", top + \"px\");\n }\n}\n"],"file":"annotations.js"}
\ No newline at end of file
diff --git a/dist/color_legend.js b/dist/color_legend.js
index d017257..a69fd66 100644
--- a/dist/color_legend.js
+++ b/dist/color_legend.js
@@ -1,36 +1,31 @@
-'use strict';
+"use strict";
-System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic/index', 'app/core/core', 'app/core/utils/ticks'], function (_export, _context) {
+System.register(["lodash", "jquery", "d3", "./libs/d3-scale-chromatic/index", "app/core/core", "app/core/utils/ticks", "app/core/core_module"], function (_export, _context) {
"use strict";
- var angular, _, $, d3, d3ScaleChromatic, contextSrv, tickStep, mod, LEGEND_STEP_WIDTH;
+ var _, $, d3, d3ScaleChromatic, contextSrv, tickStep, coreModule, LEGEND_STEP_WIDTH;
function drawColorLegend(elem, colorScheme, rangeFrom, rangeTo, maxValue, minValue) {
var legendElem = $(elem).find('svg');
var legend = d3.select(legendElem.get(0));
clearLegend(elem);
-
var legendWidth = Math.floor(legendElem.outerWidth()) - 30; // narrow legendWidth by 30px to get space for first and last tick values
- var legendHeight = legendElem.attr("height");
- var rangeStep = (rangeTo - rangeFrom) / (legendWidth / LEGEND_STEP_WIDTH);
- // width in pixels in legend space of unit segment in range space
+ var legendHeight = legendElem.attr("height");
+ var rangeStep = (rangeTo - rangeFrom) / (legendWidth / LEGEND_STEP_WIDTH); // width in pixels in legend space of unit segment in range space
// rangeStep * witdhFactor == width in pixels of one rangeStep
+
var widthFactor = legendWidth / (rangeTo - rangeFrom);
var valuesRange = d3.range(rangeFrom, rangeTo, rangeStep);
-
var colorScale = getColorScale(colorScheme, maxValue, minValue);
- legend.selectAll(".status-heatmap-color-legend-rect").data(valuesRange).enter().append("rect")
- // translate from range space into pixels
+ legend.selectAll(".status-heatmap-color-legend-rect").data(valuesRange).enter().append("rect") // translate from range space into pixels
// and shift all rectangles to the right by 10
.attr("x", function (d) {
return d * widthFactor + 10;
- }).attr("y", 0)
- // rectangles are slightly overlaped to prevent gaps
+ }).attr("y", 0) // rectangles are slightly overlaped to prevent gaps
.attr("width", LEGEND_STEP_WIDTH + 1).attr("height", legendHeight).attr("stroke-width", 0).attr("fill", function (d) {
return colorScale(d);
});
-
drawLegendValues(elem, colorScale, rangeFrom, rangeTo, maxValue, minValue, legendWidth);
}
@@ -38,28 +33,23 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic
var legendElem = $(elem).find('svg');
var legend = d3.select(legendElem.get(0));
clearLegend(elem);
-
var legendWidth = Math.floor(legendElem.outerWidth()) - 30; // narrow legendWidth by 30px to get space for first and last tick values
- var legendHeight = legendElem.attr("height");
- var rangeStep = (rangeTo - rangeFrom) / (legendWidth / LEGEND_STEP_WIDTH);
- // width in pixels in legend space of unit segment in range space
+ var legendHeight = legendElem.attr("height");
+ var rangeStep = (rangeTo - rangeFrom) / (legendWidth / LEGEND_STEP_WIDTH); // width in pixels in legend space of unit segment in range space
// rangeStep * witdhFactor == width in pixels of one rangeStep
+
var widthFactor = legendWidth / (rangeTo - rangeFrom);
var valuesRange = d3.range(rangeFrom, rangeTo, rangeStep);
-
var opacityScale = getOpacityScale(options, maxValue, minValue);
- legend.selectAll(".status-heatmap-opacity-legend-rect").data(valuesRange).enter().append("rect")
- // translate from range space into pixels
+ legend.selectAll(".status-heatmap-opacity-legend-rect").data(valuesRange).enter().append("rect") // translate from range space into pixels
// and shift all rectangles to the right by 10
.attr("x", function (d) {
return d * widthFactor + 10;
- }).attr("y", 0)
- // rectangles are slightly overlaped to prevent gaps
+ }).attr("y", 0) // rectangles are slightly overlaped to prevent gaps
.attr("width", LEGEND_STEP_WIDTH + 1).attr("height", legendHeight).attr("stroke-width", 0).attr("fill", options.cardColor).style("opacity", function (d) {
return opacityScale(d);
});
-
drawLegendValues(elem, opacityScale, rangeFrom, rangeTo, maxValue, minValue, legendWidth);
}
@@ -67,18 +57,18 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic
var legendElem = $(elem).find('svg');
var legend = d3.select(legendElem.get(0));
clearLegend(elem);
-
var thresholds = colorOptions.thresholds;
+
var tooltips = _.map(thresholds, function (tr) {
return tr.tooltip;
});
- var valuesNumber = thresholds.length;
- // graph width as a fallback
+ var valuesNumber = thresholds.length; // graph width as a fallback
+
var $heatmap = $(elem).parent().parent().parent().find('.status-heatmap-panel');
- var graphWidth = $heatmap.find('svg').attr("width");
+ var graphWidthAttr = $heatmap.find('svg').attr("width");
+ var graphWidth = parseInt(graphWidthAttr); // calculate max width of tooltip and use it as width for each item
- // calculate max width of tooltip and use it as width for each item
var textWidth = [];
legend.selectAll(".hidden-texts").data(tooltips).enter().append("text").attr("class", "axis tick hidden-texts").attr("font-family", "sans-serif").text(function (d) {
return d;
@@ -87,12 +77,9 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic
textWidth.push(thisWidth);
});
legend.selectAll(".hidden-texts").remove();
-
var legendWidth = Math.floor(_.min([graphWidth - 30, (_.max(textWidth) + 3) * valuesNumber]));
legendElem.attr("width", legendWidth);
-
var legendHeight = legendElem.attr("height");
-
var itemWidth = Math.floor(legendWidth / valuesNumber);
var valuesRange = d3.range(valuesNumber); // from 0 to valuesNumber-1
@@ -102,7 +89,6 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic
.attr("height", legendHeight).attr("stroke-width", 0).attr("fill", function (d) {
return discreteHelper.getDiscreteColor(d);
});
-
drawDiscreteLegendValues(elem, colorOptions, legendWidth);
}
@@ -115,22 +101,17 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic
}
var legendValueScale = d3.scaleLinear().domain([0, rangeTo]).range([0, legendWidth]);
-
var ticks = buildLegendTicks(0, rangeTo, maxValue, minValue);
var xAxis = d3.axisBottom(legendValueScale).tickValues(ticks).tickSize(2);
-
var colorRect = legendElem.find(":first-child");
var posY = getSvgElemHeight(legendElem) + 2;
var posX = getSvgElemX(colorRect);
-
d3.select(legendElem.get(0)).append("g").attr("class", "axis").attr("transform", "translate(" + posX + "," + posY + ")").call(xAxis);
-
legend.select(".axis").select(".domain").remove();
}
function drawDiscreteLegendValues(elem, colorOptions, legendWidth) {
var thresholds = colorOptions.thresholds;
-
var legendElem = $(elem).find('svg');
var legend = d3.select(legendElem.get(0));
@@ -141,11 +122,10 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic
var valuesNumber = thresholds.length;
var rangeStep = Math.floor(legendWidth / valuesNumber);
var valuesRange = d3.range(0, legendWidth, rangeStep);
-
var legendValueScale = d3.scaleLinear().domain([0, valuesNumber]).range([0, legendWidth]);
-
var thresholdValues = [];
var thresholdTooltips = [];
+
for (var i = 0; i < thresholds.length; i++) {
thresholdValues.push(thresholds[i].value);
thresholdTooltips.push(thresholds[i].tooltip);
@@ -155,10 +135,12 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic
.tickSize(2).tickFormat(function (t) {
var i = Math.floor(t);
var v = thresholdTooltips[i];
+
if (v != undefined) {
return "" + v;
} else {
v = thresholdValues[i];
+
if (v != undefined) {
return "" + v;
} else {
@@ -166,13 +148,10 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic
}
}
});
-
var colorRect = legendElem.find(":first-child");
var posY = getSvgElemHeight(legendElem) + 2;
var posX = getSvgElemX(colorRect) + Math.floor(rangeStep / 2);
-
d3.select(legendElem.get(0)).append("g").attr("class", "axis").attr("transform", "translate(" + posX + "," + posY + ")").call(xAxis);
-
legend.select(".axis").select(".domain").remove();
}
@@ -180,13 +159,11 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic
var legendElem = $(elem).find('svg');
var legend = d3.select(legendElem.get(0));
clearLegend(elem);
-
var legendWidth = Math.floor(legendElem.outerWidth());
var legendHeight = legendElem.attr("height");
if (legendWidth) {
var valuesRange = d3.range(0, legendWidth, LEGEND_STEP_WIDTH);
-
legend.selectAll(".status-heatmap-color-legend-rect").data(valuesRange).enter().append("rect").attr("x", function (d) {
return d;
}).attr("y", 0).attr("width", LEGEND_STEP_WIDTH + 1) // Overlap rectangles to prevent gaps
@@ -200,12 +177,12 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic
var legendElem = $(elem).find('svg');
var legend = d3.select(legendElem.get(0));
clearLegend(elem);
-
var legendWidth = Math.floor(legendElem.outerWidth());
var legendHeight = legendElem.attr("height");
if (legendWidth) {
- var legendOpacityScale = void 0;
+ var legendOpacityScale;
+
if (options.colorScale === 'linear') {
legendOpacityScale = d3.scaleLinear().domain([0, legendWidth]).range([0, 1]);
} else if (options.colorScale === 'sqrt') {
@@ -213,7 +190,6 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic
}
var valuesRange = d3.range(0, legendWidth, LEGEND_STEP_WIDTH);
-
legend.selectAll(".status-heatmap-opacity-legend-rect").data(valuesRange).enter().append("rect").attr("x", function (d) {
return d;
}).attr("y", 0).attr("width", LEGEND_STEP_WIDTH + 1).attr("height", legendHeight).attr("stroke-width", 0).attr("fill", options.cardColor).style("opacity", function (d) {
@@ -229,30 +205,29 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic
function getColorScale(colorScheme, maxValue) {
var minValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
-
var colorInterpolator = d3ScaleChromatic[colorScheme.value];
var colorScaleInverted = colorScheme.invert === 'always' || colorScheme.invert === 'dark' && !contextSrv.user.lightTheme;
-
var start = colorScaleInverted ? maxValue : minValue;
var end = colorScaleInverted ? minValue : maxValue;
-
return d3.scaleSequential(colorInterpolator).domain([start, end]);
}
function getOpacityScale(options, maxValue) {
var minValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
+ var legendOpacityScale;
- var legendOpacityScale = void 0;
if (options.colorScale === 'linear') {
legendOpacityScale = d3.scaleLinear().domain([minValue, maxValue]).range([0, 1]);
} else if (options.colorScale === 'sqrt') {
legendOpacityScale = d3.scalePow().exponent(options.exponent).domain([minValue, maxValue]).range([0, 1]);
}
+
return legendOpacityScale;
}
function getSvgElemX(elem) {
var svgElem = elem.get(0);
+
if (svgElem && svgElem.x && svgElem.x.baseVal) {
return svgElem.x.baseVal.value;
} else {
@@ -262,6 +237,7 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic
function getSvgElemHeight(elem) {
var svgElem = elem.get(0);
+
if (svgElem && svgElem.height && svgElem.height.baseVal) {
return svgElem.height.baseVal.value;
} else {
@@ -276,25 +252,29 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic
var ticks = [];
for (var i = 0; i < ticksNum; i++) {
- var current = tickStepSize * i;
- // Add user-defined min and max if it had been set
+ var current = tickStepSize * i; // Add user-defined min and max if it had been set
+
if (isValueCloseTo(minValue, current, tickStepSize)) {
ticks.push(minValue);
continue;
} else if (minValue < current) {
ticks.push(minValue);
}
+
if (isValueCloseTo(maxValue, current, tickStepSize)) {
ticks.push(maxValue);
continue;
} else if (maxValue < current) {
ticks.push(maxValue);
}
+
ticks.push(tickStepSize * i);
}
+
if (!isValueCloseTo(maxValue, rangeTo, tickStepSize)) {
ticks.push(maxValue);
}
+
ticks.push(rangeTo);
ticks = _.sortBy(_.uniq(ticks));
return ticks;
@@ -304,10 +284,9 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic
var diff = Math.abs(val - valueTo);
return diff < step * 0.3;
}
+
return {
- setters: [function (_angular) {
- angular = _angular.default;
- }, function (_lodash) {
+ setters: [function (_lodash) {
_ = _lodash.default;
}, function (_jquery) {
$ = _jquery.default;
@@ -319,25 +298,23 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic
contextSrv = _appCoreCore.contextSrv;
}, function (_appCoreUtilsTicks) {
tickStep = _appCoreUtilsTicks.tickStep;
+ }, function (_appCoreCore_module) {
+ coreModule = _appCoreCore_module.default;
}],
execute: function () {
- mod = angular.module('grafana.directives');
LEGEND_STEP_WIDTH = 2;
-
-
/**
* Bigger color legend for opacity and spectrum modes editor.
*/
- mod.directive('optionsColorLegend', function () {
+
+ coreModule.directive('optionsColorLegend', function () {
return {
restrict: 'E',
template: '',
link: function link(scope, elem, attrs) {
var ctrl = scope.ctrl;
var panel = scope.ctrl.panel;
-
render();
-
ctrl.events.on('render', function () {
render();
});
@@ -347,7 +324,10 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic
var legendWidth = Math.floor(legendElem.outerWidth());
if (panel.color.mode === 'spectrum') {
- var colorScheme = _.find(ctrl.colorSchemes, { value: panel.color.colorScheme });
+ var colorScheme = _.find(ctrl.colorSchemes, {
+ value: panel.color.colorScheme
+ });
+
var colorScale = getColorScale(colorScheme, legendWidth);
drawSimpleColorLegend(elem, colorScale);
} else if (panel.color.mode === 'opacity') {
@@ -358,18 +338,17 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic
}
};
});
-
/**
* Graph legend with values.
*/
- mod.directive('statusHeatmapLegend', function () {
+
+ coreModule.directive('statusHeatmapLegend', function () {
return {
restrict: 'E',
template: '',
link: function link(scope, elem, attrs) {
var ctrl = scope.ctrl;
var panel = scope.ctrl.panel;
-
render();
ctrl.events.on('render', function () {
render();
@@ -377,9 +356,11 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic
function render() {
clearLegend(elem);
+
if (!ctrl.panel.legend.show) {
return;
}
+
if (!_.isEmpty(ctrl.cardsData) && !_.isEmpty(ctrl.cardsData.cards)) {
var rangeFrom = ctrl.cardsData.minValue;
var rangeTo = ctrl.cardsData.maxValue;
@@ -387,7 +368,10 @@ System.register(['angular', 'lodash', 'jquery', 'd3', './libs/d3-scale-chromatic
var minValue = panel.color.min || rangeFrom;
if (panel.color.mode === 'spectrum') {
- var colorScheme = _.find(ctrl.colorSchemes, { value: panel.color.colorScheme });
+ var colorScheme = _.find(ctrl.colorSchemes, {
+ value: panel.color.colorScheme
+ });
+
drawColorLegend(elem, colorScheme, rangeFrom, rangeTo, maxValue, minValue);
} else if (panel.color.mode === 'opacity') {
var colorOptions = panel.color;
diff --git a/dist/color_legend.js.map b/dist/color_legend.js.map
index 0d81955..bbacfb5 100644
--- a/dist/color_legend.js.map
+++ b/dist/color_legend.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../src/color_legend.js"],"names":["drawColorLegend","elem","colorScheme","rangeFrom","rangeTo","maxValue","minValue","legendElem","$","find","legend","d3","select","get","clearLegend","legendWidth","Math","floor","outerWidth","legendHeight","attr","rangeStep","LEGEND_STEP_WIDTH","widthFactor","valuesRange","range","colorScale","getColorScale","selectAll","data","enter","append","d","drawLegendValues","drawOpacityLegend","options","opacityScale","getOpacityScale","cardColor","style","drawDiscreteColorLegend","colorOptions","discreteHelper","thresholds","tooltips","_","map","tr","tooltip","valuesNumber","length","$heatmap","parent","graphWidth","textWidth","text","each","i","thisWidth","getBBox","width","push","remove","min","max","itemWidth","getDiscreteColor","drawDiscreteLegendValues","childNodes","legendValueScale","scaleLinear","domain","ticks","buildLegendTicks","xAxis","axisBottom","tickValues","tickSize","colorRect","posY","getSvgElemHeight","posX","getSvgElemX","call","thresholdValues","thresholdTooltips","value","tickFormat","t","v","undefined","drawSimpleColorLegend","drawSimpleOpacityLegend","legendOpacityScale","scalePow","exponent","empty","colorInterpolator","d3ScaleChromatic","colorScaleInverted","invert","contextSrv","user","lightTheme","start","end","scaleSequential","svgElem","x","baseVal","height","tickStepSize","tickStep","ticksNum","round","current","isValueCloseTo","sortBy","uniq","val","valueTo","step","diff","abs","angular","mod","module","directive","restrict","template","link","scope","attrs","ctrl","panel","render","events","on","color","mode","colorSchemes","show","isEmpty","cardsData","cards"],"mappings":"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","file":"color_legend.js","sourcesContent":["import angular from 'angular';\nimport _ from 'lodash';\nimport $ from 'jquery';\nimport d3 from 'd3';\nimport * as d3ScaleChromatic from './libs/d3-scale-chromatic/index';\nimport {contextSrv} from 'app/core/core';\nimport {tickStep} from 'app/core/utils/ticks';\n\nlet mod = angular.module('grafana.directives');\n\nconst LEGEND_STEP_WIDTH = 2;\n\n/**\n * Bigger color legend for opacity and spectrum modes editor.\n */\nmod.directive('optionsColorLegend', function() {\n return {\n restrict: 'E',\n template: '',\n link: function(scope, elem, attrs) {\n let ctrl = scope.ctrl;\n let panel = scope.ctrl.panel;\n\n render();\n\n ctrl.events.on('render', function() {\n render();\n });\n\n function render() {\n let legendElem = $(elem).find('svg');\n let legendWidth = Math.floor(legendElem.outerWidth());\n\n if (panel.color.mode === 'spectrum') {\n let colorScheme = _.find(ctrl.colorSchemes, {value: panel.color.colorScheme});\n let colorScale = getColorScale(colorScheme, legendWidth);\n drawSimpleColorLegend(elem, colorScale);\n } else if (panel.color.mode === 'opacity') {\n let colorOptions = panel.color;\n drawSimpleOpacityLegend(elem, colorOptions);\n }\n }\n }\n };\n});\n\n/**\n * Graph legend with values.\n */\nmod.directive('statusHeatmapLegend', function() {\n return {\n restrict: 'E',\n template: '',\n link: function(scope, elem, attrs) {\n let ctrl = scope.ctrl;\n let panel = scope.ctrl.panel;\n\n render();\n ctrl.events.on('render', function() {\n render();\n });\n\n function render() {\n clearLegend(elem);\n if (!ctrl.panel.legend.show) {\n return \n }\n if (!_.isEmpty(ctrl.cardsData) && !_.isEmpty(ctrl.cardsData.cards)) {\n let rangeFrom = ctrl.cardsData.minValue;\n let rangeTo = ctrl.cardsData.maxValue;\n let maxValue = panel.color.max || rangeTo;\n let minValue = panel.color.min || rangeFrom;\n\n if (panel.color.mode === 'spectrum') {\n let colorScheme = _.find(ctrl.colorSchemes, {value: panel.color.colorScheme});\n drawColorLegend(elem, colorScheme, rangeFrom, rangeTo, maxValue, minValue);\n } else if (panel.color.mode === 'opacity') {\n let colorOptions = panel.color;\n drawOpacityLegend(elem, colorOptions, rangeFrom, rangeTo, maxValue, minValue);\n } else if (panel.color.mode === 'discrete') {\n let colorOptions = panel.color;\n drawDiscreteColorLegend(elem, colorOptions, ctrl.discreteHelper);\n }\n }\n }\n }\n };\n});\n\nfunction drawColorLegend(elem, colorScheme, rangeFrom, rangeTo, maxValue, minValue) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth()) - 30; // narrow legendWidth by 30px to get space for first and last tick values\n let legendHeight = legendElem.attr(\"height\");\n\n let rangeStep = (rangeTo - rangeFrom) / (legendWidth/LEGEND_STEP_WIDTH);\n // width in pixels in legend space of unit segment in range space\n // rangeStep * witdhFactor == width in pixels of one rangeStep\n let widthFactor = legendWidth / (rangeTo - rangeFrom);\n let valuesRange = d3.range(rangeFrom, rangeTo, rangeStep);\n\n let colorScale = getColorScale(colorScheme, maxValue, minValue);\n legend.selectAll(\".status-heatmap-color-legend-rect\")\n .data(valuesRange)\n .enter().append(\"rect\")\n // translate from range space into pixels\n // and shift all rectangles to the right by 10\n .attr(\"x\", d => d * widthFactor+10)\n .attr(\"y\", 0)\n // rectangles are slightly overlaped to prevent gaps\n .attr(\"width\", LEGEND_STEP_WIDTH+1)\n .attr(\"height\", legendHeight)\n .attr(\"stroke-width\", 0)\n .attr(\"fill\", d => colorScale(d));\n\n drawLegendValues(elem, colorScale, rangeFrom, rangeTo, maxValue, minValue, legendWidth);\n}\n\nfunction drawOpacityLegend(elem, options, rangeFrom, rangeTo, maxValue, minValue) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth()) - 30; // narrow legendWidth by 30px to get space for first and last tick values\n let legendHeight = legendElem.attr(\"height\");\n\n let rangeStep = (rangeTo - rangeFrom) / (legendWidth/LEGEND_STEP_WIDTH);\n // width in pixels in legend space of unit segment in range space\n // rangeStep * witdhFactor == width in pixels of one rangeStep\n let widthFactor = legendWidth / (rangeTo - rangeFrom);\n let valuesRange = d3.range(rangeFrom, rangeTo, rangeStep);\n\n let opacityScale = getOpacityScale(options, maxValue, minValue);\n legend.selectAll(\".status-heatmap-opacity-legend-rect\")\n .data(valuesRange)\n .enter().append(\"rect\")\n // translate from range space into pixels\n // and shift all rectangles to the right by 10\n .attr(\"x\", d => d * widthFactor+10)\n .attr(\"y\", 0)\n // rectangles are slightly overlaped to prevent gaps\n .attr(\"width\", LEGEND_STEP_WIDTH+1)\n .attr(\"height\", legendHeight)\n .attr(\"stroke-width\", 0)\n .attr(\"fill\", options.cardColor)\n .style(\"opacity\", d => opacityScale(d));\n\n drawLegendValues(elem, opacityScale, rangeFrom, rangeTo, maxValue, minValue, legendWidth);\n}\n\nfunction drawDiscreteColorLegend(elem, colorOptions, discreteHelper) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let thresholds = colorOptions.thresholds;\n let tooltips = _.map(thresholds, tr => tr.tooltip);\n let valuesNumber = thresholds.length;\n\n // graph width as a fallback\n let $heatmap = $(elem).parent().parent().parent().find('.status-heatmap-panel');\n let graphWidth = $heatmap.find('svg').attr(\"width\");\n\n // calculate max width of tooltip and use it as width for each item\n let textWidth = [];\n legend.selectAll(\".hidden-texts\")\n .data(tooltips)\n .enter().append(\"text\")\n .attr(\"class\", \"axis tick hidden-texts\")\n .attr(\"font-family\", \"sans-serif\")\n .text(d => d)\n .each(function(d,i) {\n let thisWidth = this.getBBox().width;\n textWidth.push(thisWidth);\n });\n legend.selectAll(\".hidden-texts\").remove();\n\n let legendWidth = Math.floor(_.min([\n graphWidth - 30,\n (_.max(textWidth) + 3) * valuesNumber,\n ]));\n legendElem.attr(\"width\", legendWidth);\n\n let legendHeight = legendElem.attr(\"height\");\n\n let itemWidth = Math.floor(legendWidth / valuesNumber);\n let valuesRange = d3.range(valuesNumber); // from 0 to valuesNumber-1\n\n legend.selectAll(\".status-heatmap-color-legend-rect\")\n .data(valuesRange)\n .enter().append(\"rect\")\n .attr(\"x\", d => d*itemWidth)\n .attr(\"y\", 0)\n .attr(\"width\", itemWidth + 1) // Overlap rectangles to prevent gaps\n .attr(\"height\", legendHeight)\n .attr(\"stroke-width\", 0)\n .attr(\"fill\", d => discreteHelper.getDiscreteColor(d));\n\n drawDiscreteLegendValues(elem, colorOptions, legendWidth);\n}\n\n\nfunction drawLegendValues(elem, colorScale, rangeFrom, rangeTo, maxValue, minValue, legendWidth) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n\n if (legendWidth <= 0 || legendElem.get(0).childNodes.length === 0) {\n return;\n }\n\n let legendValueScale = d3.scaleLinear()\n .domain([0, rangeTo])\n .range([0, legendWidth]);\n\n let ticks = buildLegendTicks(0, rangeTo, maxValue, minValue);\n let xAxis = d3.axisBottom(legendValueScale)\n .tickValues(ticks)\n .tickSize(2);\n\n let colorRect = legendElem.find(\":first-child\");\n let posY = getSvgElemHeight(legendElem) + 2;\n let posX = getSvgElemX(colorRect);\n\n d3.select(legendElem.get(0)).append(\"g\")\n .attr(\"class\", \"axis\")\n .attr(\"transform\", \"translate(\" + posX + \",\" + posY + \")\")\n .call(xAxis);\n\n legend.select(\".axis\").select(\".domain\").remove();\n}\n\nfunction drawDiscreteLegendValues(elem, colorOptions, legendWidth) {\n let thresholds = colorOptions.thresholds;\n\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n\n if (legendWidth <= 0 || legendElem.get(0).childNodes.length === 0) {\n return;\n }\n\n let valuesNumber = thresholds.length;\n let rangeStep = Math.floor(legendWidth / valuesNumber);\n let valuesRange = d3.range(0, legendWidth, rangeStep);\n\n\n let legendValueScale = d3.scaleLinear()\n .domain([0, valuesNumber])\n .range([0, legendWidth]);\n\n let thresholdValues = [];\n let thresholdTooltips = [];\n for (let i = 0; i < thresholds.length; i++) {\n thresholdValues.push(thresholds[i].value);\n thresholdTooltips.push(thresholds[i].tooltip);\n }\n\n let xAxis = d3.axisBottom(legendValueScale)\n .tickValues(d3.range(0, valuesNumber, 1)) //thresholdValues)\n .tickSize(2)\n .tickFormat((t) => {\n let i = Math.floor(t);\n let v = thresholdTooltips[i];\n if (v != undefined) {\n return \"\"+v;\n } else {\n v = thresholdValues[i];\n if (v != undefined) {\n return \"\"+v;\n } else {\n return \"n/a\";\n }\n }\n });\n\n let colorRect = legendElem.find(\":first-child\");\n let posY = getSvgElemHeight(legendElem) + 2;\n let posX = getSvgElemX(colorRect) + Math.floor(rangeStep/2);\n\n d3.select(legendElem.get(0)).append(\"g\")\n .attr(\"class\", \"axis\")\n .attr(\"transform\", \"translate(\" + posX + \",\" + posY + \")\")\n .call(xAxis);\n\n legend.select(\".axis\").select(\".domain\").remove();\n}\n\nfunction drawSimpleColorLegend(elem, colorScale) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth());\n let legendHeight = legendElem.attr(\"height\");\n\n if (legendWidth) {\n let valuesRange = d3.range(0, legendWidth, LEGEND_STEP_WIDTH);\n\n legend.selectAll(\".status-heatmap-color-legend-rect\")\n .data(valuesRange)\n .enter().append(\"rect\")\n .attr(\"x\", d => d)\n .attr(\"y\", 0)\n .attr(\"width\", LEGEND_STEP_WIDTH + 1) // Overlap rectangles to prevent gaps\n .attr(\"height\", legendHeight)\n .attr(\"stroke-width\", 0)\n .attr(\"fill\", d => colorScale(d));\n }\n}\n\nfunction drawSimpleOpacityLegend(elem, options) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth());\n let legendHeight = legendElem.attr(\"height\");\n\n if (legendWidth) {\n let legendOpacityScale;\n if (options.colorScale === 'linear') {\n legendOpacityScale = d3.scaleLinear()\n .domain([0, legendWidth])\n .range([0, 1]);\n } else if (options.colorScale === 'sqrt') {\n legendOpacityScale = d3.scalePow().exponent(options.exponent)\n .domain([0, legendWidth])\n .range([0, 1]);\n }\n\n let valuesRange = d3.range(0, legendWidth, LEGEND_STEP_WIDTH);\n\n legend.selectAll(\".status-heatmap-opacity-legend-rect\")\n .data(valuesRange)\n .enter().append(\"rect\")\n .attr(\"x\", d => d)\n .attr(\"y\", 0)\n .attr(\"width\", LEGEND_STEP_WIDTH+1)\n .attr(\"height\", legendHeight)\n .attr(\"stroke-width\", 0)\n .attr(\"fill\", options.cardColor)\n .style(\"opacity\", d => legendOpacityScale(d));\n }\n}\n\n\nfunction clearLegend(elem) {\n let legendElem = $(elem).find('svg');\n legendElem.empty();\n}\n\nfunction getColorScale(colorScheme, maxValue, minValue = 0) {\n let colorInterpolator = d3ScaleChromatic[colorScheme.value];\n let colorScaleInverted = colorScheme.invert === 'always' ||\n (colorScheme.invert === 'dark' && !contextSrv.user.lightTheme);\n\n let start = colorScaleInverted ? maxValue : minValue;\n let end = colorScaleInverted ? minValue : maxValue;\n\n return d3.scaleSequential(colorInterpolator).domain([start, end]);\n}\n\nfunction getOpacityScale(options, maxValue, minValue = 0) {\n let legendOpacityScale;\n if (options.colorScale === 'linear') {\n legendOpacityScale = d3.scaleLinear()\n .domain([minValue, maxValue])\n .range([0, 1]);\n } else if (options.colorScale === 'sqrt') {\n legendOpacityScale = d3.scalePow().exponent(options.exponent)\n .domain([minValue, maxValue])\n .range([0, 1]);\n }\n return legendOpacityScale;\n}\n\nfunction getSvgElemX(elem) {\n let svgElem = elem.get(0);\n if (svgElem && svgElem.x && svgElem.x.baseVal) {\n return svgElem.x.baseVal.value;\n } else {\n return 0;\n }\n}\n\nfunction getSvgElemHeight(elem) {\n let svgElem = elem.get(0);\n if (svgElem && svgElem.height && svgElem.height.baseVal) {\n return svgElem.height.baseVal.value;\n } else {\n return 0;\n }\n}\n\nfunction buildLegendTicks(rangeFrom, rangeTo, maxValue, minValue) {\n let range = rangeTo - rangeFrom;\n let tickStepSize = tickStep(rangeFrom, rangeTo, 3);\n let ticksNum = Math.round(range / tickStepSize);\n let ticks = [];\n\n for (let i = 0; i < ticksNum; i++) {\n let current = tickStepSize * i;\n // Add user-defined min and max if it had been set\n if (isValueCloseTo(minValue, current, tickStepSize)) {\n ticks.push(minValue);\n continue;\n } else if (minValue < current) {\n ticks.push(minValue);\n }\n if (isValueCloseTo(maxValue, current, tickStepSize)) {\n ticks.push(maxValue);\n continue;\n } else if (maxValue < current) {\n ticks.push(maxValue);\n }\n ticks.push(tickStepSize * i);\n }\n if (!isValueCloseTo(maxValue, rangeTo, tickStepSize)) {\n ticks.push(maxValue);\n }\n ticks.push(rangeTo);\n ticks = _.sortBy(_.uniq(ticks));\n return ticks;\n}\n\nfunction isValueCloseTo(val, valueTo, step) {\n let diff = Math.abs(val - valueTo);\n return diff < step * 0.3;\n}\n"]}
\ No newline at end of file
+{"version":3,"sources":["../src/color_legend.ts"],"names":["drawColorLegend","elem","colorScheme","rangeFrom","rangeTo","maxValue","minValue","legendElem","$","find","legend","d3","select","get","clearLegend","legendWidth","Math","floor","outerWidth","legendHeight","attr","rangeStep","LEGEND_STEP_WIDTH","widthFactor","valuesRange","range","colorScale","getColorScale","selectAll","data","enter","append","d","drawLegendValues","drawOpacityLegend","options","opacityScale","getOpacityScale","cardColor","style","drawDiscreteColorLegend","colorOptions","discreteHelper","thresholds","tooltips","_","map","tr","tooltip","valuesNumber","length","$heatmap","parent","graphWidthAttr","graphWidth","parseInt","textWidth","text","each","i","thisWidth","getBBox","width","push","remove","min","max","itemWidth","getDiscreteColor","drawDiscreteLegendValues","childNodes","legendValueScale","scaleLinear","domain","ticks","buildLegendTicks","xAxis","axisBottom","tickValues","tickSize","colorRect","posY","getSvgElemHeight","posX","getSvgElemX","call","thresholdValues","thresholdTooltips","value","tickFormat","t","v","undefined","drawSimpleColorLegend","drawSimpleOpacityLegend","legendOpacityScale","scalePow","exponent","empty","colorInterpolator","d3ScaleChromatic","colorScaleInverted","invert","contextSrv","user","lightTheme","start","end","scaleSequential","svgElem","x","baseVal","height","tickStepSize","tickStep","ticksNum","round","current","isValueCloseTo","sortBy","uniq","val","valueTo","step","diff","abs","coreModule","directive","restrict","template","link","scope","attrs","ctrl","panel","render","events","on","color","mode","colorSchemes","show","isEmpty","cardsData","cards"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport $ from 'jquery';\nimport d3 from 'd3';\nimport * as d3ScaleChromatic from './libs/d3-scale-chromatic/index';\nimport {contextSrv} from 'app/core/core';\nimport {tickStep} from 'app/core/utils/ticks';\nimport coreModule from 'app/core/core_module';\n\nconst LEGEND_STEP_WIDTH = 2;\n\n/**\n * Bigger color legend for opacity and spectrum modes editor.\n */\ncoreModule.directive('optionsColorLegend', function() {\n return {\n restrict: 'E',\n template: '',\n link: function(scope, elem, attrs) {\n let ctrl = scope.ctrl;\n let panel = scope.ctrl.panel;\n\n render();\n\n ctrl.events.on('render', function() {\n render();\n });\n\n function render() {\n let legendElem = $(elem).find('svg');\n let legendWidth = Math.floor(legendElem.outerWidth());\n\n if (panel.color.mode === 'spectrum') {\n let colorScheme = _.find(ctrl.colorSchemes, {value: panel.color.colorScheme});\n let colorScale = getColorScale(colorScheme, legendWidth);\n drawSimpleColorLegend(elem, colorScale);\n } else if (panel.color.mode === 'opacity') {\n let colorOptions = panel.color;\n drawSimpleOpacityLegend(elem, colorOptions);\n }\n }\n }\n };\n});\n\n/**\n * Graph legend with values.\n */\ncoreModule.directive('statusHeatmapLegend', function() {\n return {\n restrict: 'E',\n template: '',\n link: function(scope, elem, attrs) {\n let ctrl = scope.ctrl;\n let panel = scope.ctrl.panel;\n\n render();\n ctrl.events.on('render', function() {\n render();\n });\n\n function render() {\n clearLegend(elem);\n if (!ctrl.panel.legend.show) {\n return \n }\n if (!_.isEmpty(ctrl.cardsData) && !_.isEmpty(ctrl.cardsData.cards)) {\n let rangeFrom = ctrl.cardsData.minValue;\n let rangeTo = ctrl.cardsData.maxValue;\n let maxValue = panel.color.max || rangeTo;\n let minValue = panel.color.min || rangeFrom;\n\n if (panel.color.mode === 'spectrum') {\n let colorScheme = _.find(ctrl.colorSchemes, {value: panel.color.colorScheme});\n drawColorLegend(elem, colorScheme, rangeFrom, rangeTo, maxValue, minValue);\n } else if (panel.color.mode === 'opacity') {\n let colorOptions = panel.color;\n drawOpacityLegend(elem, colorOptions, rangeFrom, rangeTo, maxValue, minValue);\n } else if (panel.color.mode === 'discrete') {\n let colorOptions = panel.color;\n drawDiscreteColorLegend(elem, colorOptions, ctrl.discreteHelper);\n }\n }\n }\n }\n };\n});\n\nfunction drawColorLegend(elem, colorScheme, rangeFrom, rangeTo, maxValue, minValue) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth()) - 30; // narrow legendWidth by 30px to get space for first and last tick values\n let legendHeight = legendElem.attr(\"height\");\n\n let rangeStep = (rangeTo - rangeFrom) / (legendWidth/LEGEND_STEP_WIDTH);\n // width in pixels in legend space of unit segment in range space\n // rangeStep * witdhFactor == width in pixels of one rangeStep\n let widthFactor = legendWidth / (rangeTo - rangeFrom);\n let valuesRange = d3.range(rangeFrom, rangeTo, rangeStep);\n\n let colorScale = getColorScale(colorScheme, maxValue, minValue);\n legend.selectAll(\".status-heatmap-color-legend-rect\")\n .data(valuesRange)\n .enter().append(\"rect\")\n // translate from range space into pixels\n // and shift all rectangles to the right by 10\n .attr(\"x\", d => d * widthFactor+10)\n .attr(\"y\", 0)\n // rectangles are slightly overlaped to prevent gaps\n .attr(\"width\", LEGEND_STEP_WIDTH+1)\n .attr(\"height\", legendHeight)\n .attr(\"stroke-width\", 0)\n .attr(\"fill\", d => colorScale(d));\n\n drawLegendValues(elem, colorScale, rangeFrom, rangeTo, maxValue, minValue, legendWidth);\n}\n\nfunction drawOpacityLegend(elem, options, rangeFrom, rangeTo, maxValue, minValue) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth()) - 30; // narrow legendWidth by 30px to get space for first and last tick values\n let legendHeight = legendElem.attr(\"height\");\n\n let rangeStep = (rangeTo - rangeFrom) / (legendWidth/LEGEND_STEP_WIDTH);\n // width in pixels in legend space of unit segment in range space\n // rangeStep * witdhFactor == width in pixels of one rangeStep\n let widthFactor = legendWidth / (rangeTo - rangeFrom);\n let valuesRange = d3.range(rangeFrom, rangeTo, rangeStep);\n\n let opacityScale = getOpacityScale(options, maxValue, minValue);\n legend.selectAll(\".status-heatmap-opacity-legend-rect\")\n .data(valuesRange)\n .enter().append(\"rect\")\n // translate from range space into pixels\n // and shift all rectangles to the right by 10\n .attr(\"x\", d => d * widthFactor+10)\n .attr(\"y\", 0)\n // rectangles are slightly overlaped to prevent gaps\n .attr(\"width\", LEGEND_STEP_WIDTH+1)\n .attr(\"height\", legendHeight)\n .attr(\"stroke-width\", 0)\n .attr(\"fill\", options.cardColor)\n .style(\"opacity\", d => opacityScale(d));\n\n drawLegendValues(elem, opacityScale, rangeFrom, rangeTo, maxValue, minValue, legendWidth);\n}\n\nfunction drawDiscreteColorLegend(elem, colorOptions, discreteHelper) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let thresholds = colorOptions.thresholds;\n let tooltips = _.map(thresholds, tr => tr.tooltip);\n let valuesNumber = thresholds.length;\n\n // graph width as a fallback\n const $heatmap = $(elem).parent().parent().parent().find('.status-heatmap-panel');\n const graphWidthAttr = $heatmap.find('svg').attr(\"width\");\n let graphWidth = parseInt(graphWidthAttr);\n\n\n // calculate max width of tooltip and use it as width for each item\n let textWidth:number[] = [];\n legend.selectAll(\".hidden-texts\")\n .data(tooltips)\n .enter().append(\"text\")\n .attr(\"class\", \"axis tick hidden-texts\")\n .attr(\"font-family\", \"sans-serif\")\n .text(d => d)\n .each(function(d,i) {\n let thisWidth = this.getBBox().width;\n textWidth.push(thisWidth);\n });\n legend.selectAll(\".hidden-texts\").remove();\n\n let legendWidth = Math.floor(_.min([\n graphWidth - 30,\n (_.max(textWidth)! + 3) * valuesNumber,\n ])!);\n legendElem.attr(\"width\", legendWidth);\n\n let legendHeight = legendElem.attr(\"height\");\n\n let itemWidth = Math.floor(legendWidth / valuesNumber);\n let valuesRange = d3.range(valuesNumber); // from 0 to valuesNumber-1\n\n legend.selectAll(\".status-heatmap-color-legend-rect\")\n .data(valuesRange)\n .enter().append(\"rect\")\n .attr(\"x\", d => d*itemWidth)\n .attr(\"y\", 0)\n .attr(\"width\", itemWidth + 1) // Overlap rectangles to prevent gaps\n .attr(\"height\", legendHeight)\n .attr(\"stroke-width\", 0)\n .attr(\"fill\", d => discreteHelper.getDiscreteColor(d));\n\n drawDiscreteLegendValues(elem, colorOptions, legendWidth);\n}\n\n\nfunction drawLegendValues(elem, colorScale, rangeFrom, rangeTo, maxValue, minValue, legendWidth) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n\n if (legendWidth <= 0 || legendElem.get(0).childNodes.length === 0) {\n return;\n }\n\n let legendValueScale = d3.scaleLinear()\n .domain([0, rangeTo])\n .range([0, legendWidth]);\n\n let ticks = buildLegendTicks(0, rangeTo, maxValue, minValue);\n let xAxis = d3.axisBottom(legendValueScale)\n .tickValues(ticks)\n .tickSize(2);\n\n let colorRect = legendElem.find(\":first-child\");\n let posY = getSvgElemHeight(legendElem) + 2;\n let posX = getSvgElemX(colorRect);\n\n d3.select(legendElem.get(0)).append(\"g\")\n .attr(\"class\", \"axis\")\n .attr(\"transform\", \"translate(\" + posX + \",\" + posY + \")\")\n .call(xAxis);\n\n legend.select(\".axis\").select(\".domain\").remove();\n}\n\nfunction drawDiscreteLegendValues(elem, colorOptions, legendWidth) {\n let thresholds = colorOptions.thresholds;\n\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n\n if (legendWidth <= 0 || legendElem.get(0).childNodes.length === 0) {\n return;\n }\n\n let valuesNumber = thresholds.length;\n let rangeStep = Math.floor(legendWidth / valuesNumber);\n let valuesRange = d3.range(0, legendWidth, rangeStep);\n\n\n let legendValueScale = d3.scaleLinear()\n .domain([0, valuesNumber])\n .range([0, legendWidth]);\n\n let thresholdValues = [];\n let thresholdTooltips = [];\n for (let i = 0; i < thresholds.length; i++) {\n thresholdValues.push(thresholds[i].value);\n thresholdTooltips.push(thresholds[i].tooltip);\n }\n\n let xAxis = d3.axisBottom(legendValueScale)\n .tickValues(d3.range(0, valuesNumber, 1)) //thresholdValues)\n .tickSize(2)\n .tickFormat((t) => {\n let i = Math.floor(t);\n let v = thresholdTooltips[i];\n if (v != undefined) {\n return \"\"+v;\n } else {\n v = thresholdValues[i];\n if (v != undefined) {\n return \"\"+v;\n } else {\n return \"n/a\";\n }\n }\n });\n\n let colorRect = legendElem.find(\":first-child\");\n let posY = getSvgElemHeight(legendElem) + 2;\n let posX = getSvgElemX(colorRect) + Math.floor(rangeStep/2);\n\n d3.select(legendElem.get(0)).append(\"g\")\n .attr(\"class\", \"axis\")\n .attr(\"transform\", \"translate(\" + posX + \",\" + posY + \")\")\n .call(xAxis);\n\n legend.select(\".axis\").select(\".domain\").remove();\n}\n\nfunction drawSimpleColorLegend(elem, colorScale) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth());\n let legendHeight = legendElem.attr(\"height\");\n\n if (legendWidth) {\n let valuesRange = d3.range(0, legendWidth, LEGEND_STEP_WIDTH);\n\n legend.selectAll(\".status-heatmap-color-legend-rect\")\n .data(valuesRange)\n .enter().append(\"rect\")\n .attr(\"x\", d => d)\n .attr(\"y\", 0)\n .attr(\"width\", LEGEND_STEP_WIDTH + 1) // Overlap rectangles to prevent gaps\n .attr(\"height\", legendHeight)\n .attr(\"stroke-width\", 0)\n .attr(\"fill\", d => colorScale(d));\n }\n}\n\nfunction drawSimpleOpacityLegend(elem, options) {\n let legendElem = $(elem).find('svg');\n let legend = d3.select(legendElem.get(0));\n clearLegend(elem);\n\n let legendWidth = Math.floor(legendElem.outerWidth());\n let legendHeight = legendElem.attr(\"height\");\n\n if (legendWidth) {\n let legendOpacityScale;\n if (options.colorScale === 'linear') {\n legendOpacityScale = d3.scaleLinear()\n .domain([0, legendWidth])\n .range([0, 1]);\n } else if (options.colorScale === 'sqrt') {\n legendOpacityScale = d3.scalePow().exponent(options.exponent)\n .domain([0, legendWidth])\n .range([0, 1]);\n }\n\n let valuesRange = d3.range(0, legendWidth, LEGEND_STEP_WIDTH);\n\n legend.selectAll(\".status-heatmap-opacity-legend-rect\")\n .data(valuesRange)\n .enter().append(\"rect\")\n .attr(\"x\", d => d)\n .attr(\"y\", 0)\n .attr(\"width\", LEGEND_STEP_WIDTH+1)\n .attr(\"height\", legendHeight)\n .attr(\"stroke-width\", 0)\n .attr(\"fill\", options.cardColor)\n .style(\"opacity\", d => legendOpacityScale(d));\n }\n}\n\n\nfunction clearLegend(elem) {\n let legendElem = $(elem).find('svg');\n legendElem.empty();\n}\n\nfunction getColorScale(colorScheme, maxValue, minValue = 0) {\n let colorInterpolator = d3ScaleChromatic[colorScheme.value];\n let colorScaleInverted = colorScheme.invert === 'always' ||\n (colorScheme.invert === 'dark' && !contextSrv.user.lightTheme);\n\n let start = colorScaleInverted ? maxValue : minValue;\n let end = colorScaleInverted ? minValue : maxValue;\n\n return d3.scaleSequential(colorInterpolator).domain([start, end]);\n}\n\nfunction getOpacityScale(options, maxValue, minValue = 0) {\n let legendOpacityScale;\n if (options.colorScale === 'linear') {\n legendOpacityScale = d3.scaleLinear()\n .domain([minValue, maxValue])\n .range([0, 1]);\n } else if (options.colorScale === 'sqrt') {\n legendOpacityScale = d3.scalePow().exponent(options.exponent)\n .domain([minValue, maxValue])\n .range([0, 1]);\n }\n return legendOpacityScale;\n}\n\nfunction getSvgElemX(elem) {\n let svgElem = elem.get(0);\n if (svgElem && svgElem.x && svgElem.x.baseVal) {\n return svgElem.x.baseVal.value;\n } else {\n return 0;\n }\n}\n\nfunction getSvgElemHeight(elem) {\n let svgElem = elem.get(0);\n if (svgElem && svgElem.height && svgElem.height.baseVal) {\n return svgElem.height.baseVal.value;\n } else {\n return 0;\n }\n}\n\nfunction buildLegendTicks(rangeFrom, rangeTo, maxValue, minValue) {\n let range = rangeTo - rangeFrom;\n let tickStepSize = tickStep(rangeFrom, rangeTo, 3);\n let ticksNum = Math.round(range / tickStepSize);\n let ticks:any = [];\n\n for (let i = 0; i < ticksNum; i++) {\n let current = tickStepSize * i;\n // Add user-defined min and max if it had been set\n if (isValueCloseTo(minValue, current, tickStepSize)) {\n ticks.push(minValue);\n continue;\n } else if (minValue < current) {\n ticks.push(minValue);\n }\n if (isValueCloseTo(maxValue, current, tickStepSize)) {\n ticks.push(maxValue);\n continue;\n } else if (maxValue < current) {\n ticks.push(maxValue);\n }\n ticks.push(tickStepSize * i);\n }\n if (!isValueCloseTo(maxValue, rangeTo, tickStepSize)) {\n ticks.push(maxValue);\n }\n ticks.push(rangeTo);\n ticks = _.sortBy(_.uniq(ticks));\n return ticks;\n}\n\nfunction isValueCloseTo(val, valueTo, step) {\n let diff = Math.abs(val - valueTo);\n return diff < step * 0.3;\n}\n"],"file":"color_legend.js"}
\ No newline at end of file
diff --git a/dist/color_mode_discrete.js b/dist/color_mode_discrete.js
index 34e1d59..74e964e 100644
--- a/dist/color_mode_discrete.js
+++ b/dist/color_mode_discrete.js
@@ -1,49 +1,38 @@
"use strict";
-System.register(["lodash"], function (_export, _context) {
+System.register([], function (_export, _context) {
"use strict";
- var _, _createClass, ColorModeDiscrete;
+ var ColorModeDiscrete;
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- }
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
return {
- setters: [function (_lodash) {
- _ = _lodash.default;
- }],
+ setters: [],
execute: function () {
- _createClass = function () {
- function defineProperties(target, props) {
- for (var i = 0; i < props.length; i++) {
- var descriptor = props[i];
- descriptor.enumerable = descriptor.enumerable || false;
- descriptor.configurable = true;
- if ("value" in descriptor) descriptor.writable = true;
- Object.defineProperty(target, descriptor.key, descriptor);
- }
- }
-
- return function (Constructor, protoProps, staticProps) {
- if (protoProps) defineProperties(Constructor.prototype, protoProps);
- if (staticProps) defineProperties(Constructor, staticProps);
- return Constructor;
- };
- }();
-
- _export("ColorModeDiscrete", ColorModeDiscrete = function () {
+ // Helper methods to handle discrete color mode
+ _export("ColorModeDiscrete", ColorModeDiscrete =
+ /*#__PURE__*/
+ function () {
function ColorModeDiscrete(scope) {
_classCallCheck(this, ColorModeDiscrete);
+ _defineProperty(this, "scope", void 0);
+
+ _defineProperty(this, "panelCtrl", void 0);
+
+ _defineProperty(this, "panel", void 0);
+
this.scope = scope;
this.panelCtrl = scope.ctrl;
this.panel = scope.ctrl.panel;
- }
-
- // get tooltip for each value ordered by thresholds priority
+ } // get tooltip for each value ordered by thresholds priority
_createClass(ColorModeDiscrete, [{
@@ -62,40 +51,49 @@ System.register(["lodash"], function (_export, _context) {
}
}
}
+
return tooltips;
}
}, {
key: "getNotMatchedValues",
value: function getNotMatchedValues(values) {
var notMatched = [];
+
for (var j = 0; j < values.length; j++) {
if (!this.getMatchedThreshold(values[j])) {
notMatched.push(values[j]);
}
}
+
return notMatched;
}
}, {
key: "getNotColoredValues",
value: function getNotColoredValues(values) {
var notMatched = [];
+
for (var j = 0; j < values.length; j++) {
var threshold = this.getMatchedThreshold(values[j]);
+
if (!threshold || !threshold.color || threshold.color == "") {
notMatched.push(values[j]);
}
}
+
return notMatched;
}
}, {
key: "getDiscreteColor",
value: function getDiscreteColor(index) {
var color = this.getThreshold(index).color;
+
if (!color || color == "") {
return 'rgba(0,0,0,1)';
}
+
return color;
- }
+ } // returns color from first matched thresold in order from 0 to thresholds.length
+
}, {
key: "getBucketColor",
value: function getBucketColor(values) {
@@ -108,6 +106,7 @@ System.register(["lodash"], function (_export, _context) {
if (values.length == 1) {
var threshold = this.getMatchedThreshold(values[0]);
+
if (!threshold || !threshold.color || threshold.color == "") {
return 'rgba(0,0,0,1)';
} else {
@@ -116,11 +115,13 @@ System.register(["lodash"], function (_export, _context) {
}
var isAllValuesNulls = true;
+
for (var j = 0; j < values.length; j++) {
if (values[j] != null) {
isAllValuesNulls = false;
}
}
+
if (isAllValuesNulls) {
return this.getMatchedThreshold(null).color;
}
@@ -132,6 +133,7 @@ System.register(["lodash"], function (_export, _context) {
}
}
}
+
return 'rgba(0,0,0,1)';
}
}, {
@@ -140,13 +142,17 @@ System.register(["lodash"], function (_export, _context) {
if (!this.panelCtrl.cardsData) {
return;
}
+
this.panelCtrl.cardsData.noColorDefined = false;
var cards = this.panelCtrl.cardsData.cards;
+
for (var i = 0; i < cards.length; i++) {
cards[i].noColorDefined = false;
var values = cards[i].values;
+
for (var j = 0; j < values.length; j++) {
var threshold = this.getMatchedThreshold(values[j]);
+
if (!threshold || !threshold.color || threshold.color == "") {
cards[i].noColorDefined = true;
this.panelCtrl.cardsData.noColorDefined = true;
@@ -173,17 +179,20 @@ System.register(["lodash"], function (_export, _context) {
}
var thresholds = this.panel.color.thresholds;
+
for (var k = 0; k < thresholds.length; k++) {
if (value == thresholds[k].value) {
return thresholds[k];
}
}
+
return null;
}
}, {
key: "getThreshold",
value: function getThreshold(index) {
var thresholds = this.panel.color.thresholds;
+
if (index < 0 || index >= thresholds.length == null) {
return {
"color": "rgba(0,0,0,0)",
@@ -191,6 +200,7 @@ System.register(["lodash"], function (_export, _context) {
"tooltip": "null"
};
}
+
return thresholds[index];
}
}, {
@@ -198,71 +208,126 @@ System.register(["lodash"], function (_export, _context) {
value: function roundIntervalCeil(interval) {
switch (true) {
case interval <= 10:
- return 10; // 0.01s
+ return 10;
+ // 0.01s
+
case interval <= 20:
- return 20; // 0.02s
+ return 20;
+ // 0.02s
+
case interval <= 50:
- return 50; // 0.05s
+ return 50;
+ // 0.05s
+
case interval <= 100:
- return 100; // 0.1s
+ return 100;
+ // 0.1s
+
case interval <= 200:
- return 200; // 0.2s
+ return 200;
+ // 0.2s
+
case interval <= 500:
- return 500; // 0.5s
+ return 500;
+ // 0.5s
+
case interval <= 1000:
- return 1000; // 1s
+ return 1000;
+ // 1s
+
case interval <= 2000:
- return 2000; // 2s
+ return 2000;
+ // 2s
+
case interval <= 5000:
- return 5000; // 5s
+ return 5000;
+ // 5s
+
case interval <= 10000:
- return 10000; // 10s
+ return 10000;
+ // 10s
+
case interval <= 15000:
- return 15000; // 15s
+ return 15000;
+ // 15s
+
case interval <= 20000:
- return 20000; // 20s
+ return 20000;
+ // 20s
+
case interval <= 30000:
- return 30000; // 30s
+ return 30000;
+ // 30s
+
case interval <= 60000:
- return 60000; // 1m
+ return 60000;
+ // 1m
+
case interval <= 120000:
- return 120000; // 2m
+ return 120000;
+ // 2m
+
case interval <= 300000:
- return 300000; // 5m
+ return 300000;
+ // 5m
+
case interval <= 600000:
- return 600000; // 10m
+ return 600000;
+ // 10m
+
case interval <= 900000:
- return 900000; // 15m
+ return 900000;
+ // 15m
+
case interval <= 1200000:
- return 1200000; // 20m
+ return 1200000;
+ // 20m
+
case interval <= 1800000:
- return 1800000; // 30m
+ return 1800000;
+ // 30m
+
case interval <= 3600000:
- return 3600000; // 1h
+ return 3600000;
+ // 1h
+
case interval <= 7200000:
- return 7200000; // 2h
+ return 7200000;
+ // 2h
+
case interval <= 10800000:
- return 10800000; // 3h
+ return 10800000;
+ // 3h
+
case interval <= 21600000:
- return 21600000; // 6h
+ return 21600000;
+ // 6h
+
case interval <= 43200000:
- return 43200000; // 12h
+ return 43200000;
+ // 12h
+
case interval <= 86400000:
- return 86400000; // 1d
+ return 86400000;
+ // 1d
+
case interval <= 604800000:
- return 604800000; // 1w
+ return 604800000;
+ // 1w
+
case interval <= 2592000000:
- return 2592000000; // 30d
+ return 2592000000;
+ // 30d
+
default:
- return 31536000000; // 1y
+ return 31536000000;
+ // 1y
}
}
}]);
return ColorModeDiscrete;
}());
-
- _export("ColorModeDiscrete", ColorModeDiscrete);
}
};
});
diff --git a/dist/color_mode_discrete.js.map b/dist/color_mode_discrete.js.map
index 77b35aa..dd8e025 100644
--- a/dist/color_mode_discrete.js.map
+++ b/dist/color_mode_discrete.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../src/color_mode_discrete.js"],"names":["_","ColorModeDiscrete","scope","panelCtrl","ctrl","panel","values","thresholds","color","tooltips","i","length","j","value","push","tooltip","notMatched","getMatchedThreshold","threshold","index","getThreshold","isAllValuesNulls","getDiscreteColor","cardsData","noColorDefined","cards","nullPointMode","k","interval"],"mappings":"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","file":"color_mode_discrete.js","sourcesContent":["import _ from 'lodash';\n\n// Helper methods to handle discrete color mode\nexport class ColorModeDiscrete {\n constructor(scope) {\n this.scope = scope;\n this.panelCtrl = scope.ctrl;\n this.panel = scope.ctrl.panel;\n }\n\n // get tooltip for each value ordered by thresholds priority\n convertValuesToTooltips(values) {\n let thresholds = this.panel.color.thresholds;\n let tooltips = [];\n\n for (let i = 0; i < thresholds.length; i++) {\n for (let j = 0; j < values.length; j++) {\n if (values[j] == thresholds[i].value) {\n tooltips.push({\n \"tooltip\": thresholds[i].tooltip?thresholds[i].tooltip:values[j],\n \"color\": thresholds[i].color\n });\n }\n }\n }\n return tooltips;\n }\n\n\n getNotMatchedValues(values) {\n let notMatched = [];\n for (let j = 0; j < values.length; j++) {\n if (!this.getMatchedThreshold(values[j])) {\n notMatched.push(values[j]);\n }\n }\n return notMatched;\n }\n\n getNotColoredValues(values) {\n let notMatched = [];\n for (let j = 0; j < values.length; j++) {\n let threshold = this.getMatchedThreshold(values[j]);\n if (!threshold || !threshold.color || threshold.color == \"\") {\n notMatched.push(values[j]);\n }\n }\n return notMatched;\n }\n\n\n getDiscreteColor(index) {\n let color = this.getThreshold(index).color;\n if (!color || color == \"\") {\n return 'rgba(0,0,0,1)';\n }\n return color;\n }\n\n // returns color from first matched thresold in order from 0 to thresholds.length\n getBucketColor(values) {\n let thresholds = this.panel.color.thresholds;\n\n if (!values || values.length == 0) {\n // treat as null value\n return this.getMatchedThreshold(null).color;\n }\n\n if (values.length == 1) {\n let threshold = this.getMatchedThreshold(values[0]);\n if (!threshold || !threshold.color || threshold.color == \"\") {\n return 'rgba(0,0,0,1)';\n } else {\n return threshold.color;\n }\n }\n\n let isAllValuesNulls = true;\n for (let j = 0; j < values.length; j++) {\n if (values[j] != null) {\n isAllValuesNulls = false;\n }\n }\n if (isAllValuesNulls) {\n return this.getMatchedThreshold(null).color;\n }\n\n for (let i = 0; i < thresholds.length; i++) {\n for (let j = 0; j < values.length; j++) {\n if (values[j] == thresholds[i].value) {\n return this.getDiscreteColor(i);\n }\n }\n }\n return 'rgba(0,0,0,1)';\n }\n\n updateCardsValuesHasColorInfo() {\n if (!this.panelCtrl.cardsData) {\n return\n }\n this.panelCtrl.cardsData.noColorDefined = false;\n let cards = this.panelCtrl.cardsData.cards;\n for (let i=0; i= thresholds.length == null) {\n return {\n \"color\": \"rgba(0,0,0,0)\",\n \"value\": \"null\",\n \"tooltip\": \"null\",\n }\n }\n return thresholds[index];\n }\n\n roundIntervalCeil(interval) {\n switch (true) {\n case interval <= 10:\n return 10; // 0.01s\n case interval <= 20:\n return 20; // 0.02s\n case interval <= 50:\n return 50; // 0.05s\n case interval <= 100:\n return 100; // 0.1s\n case interval <= 200:\n return 200; // 0.2s\n case interval <= 500:\n return 500; // 0.5s\n case interval <= 1000:\n return 1000; // 1s\n case interval <= 2000:\n return 2000; // 2s\n case interval <= 5000:\n return 5000; // 5s\n case interval <= 10000:\n return 10000; // 10s\n case interval <= 15000:\n return 15000; // 15s\n case interval <= 20000:\n return 20000; // 20s\n case interval <= 30000:\n return 30000; // 30s\n case interval <= 60000:\n return 60000; // 1m\n case interval <= 120000:\n return 120000; // 2m\n case interval <= 300000:\n return 300000; // 5m\n case interval <= 600000:\n return 600000; // 10m\n case interval <= 900000:\n return 900000; // 15m\n case interval <= 1200000:\n return 1200000; // 20m\n case interval <= 1800000:\n return 1800000; // 30m\n case interval <= 3600000:\n return 3600000; // 1h\n case interval <= 7200000:\n return 7200000; // 2h\n case interval <= 10800000:\n return 10800000; // 3h\n case interval <= 21600000:\n return 21600000; // 6h\n case interval <= 43200000:\n return 43200000; // 12h\n case interval <= 86400000:\n return 86400000; // 1d\n case interval <= 604800000:\n return 604800000; // 1w\n case interval <= 2592000000:\n return 2592000000; // 30d\n default:\n return 31536000000; // 1y\n }\n }\n}\n"]}
\ No newline at end of file
+{"version":3,"sources":["../src/color_mode_discrete.ts"],"names":["ColorModeDiscrete","scope","panelCtrl","ctrl","panel","values","thresholds","color","tooltips","i","length","j","value","push","tooltip","notMatched","getMatchedThreshold","threshold","index","getThreshold","isAllValuesNulls","getDiscreteColor","cardsData","noColorDefined","cards","nullPointMode","k","interval"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport {StatusHeatmapCtrl} from \"./status_heatmap_ctrl\";\n\ninterface Tooltip {\n tooltip: string;\n color: string;\n}\n\ndeclare class DiscreteColorThreshold {\n color: string;\n value: number;\n tooltip: string;\n}\n\n// Helper methods to handle discrete color mode\nexport class ColorModeDiscrete {\n scope: any;\n panelCtrl: StatusHeatmapCtrl;\n panel: any;\n\n constructor(scope) {\n this.scope = scope;\n this.panelCtrl = scope.ctrl;\n this.panel = scope.ctrl.panel;\n }\n\n // get tooltip for each value ordered by thresholds priority\n convertValuesToTooltips(values:any[]) : Tooltip[] {\n let thresholds = this.panel.color.thresholds;\n let tooltips:Tooltip[] = [];\n\n for (let i = 0; i < thresholds.length; i++) {\n for (let j = 0; j < values.length; j++) {\n if (values[j] == thresholds[i].value) {\n tooltips.push({\n \"tooltip\": thresholds[i].tooltip?thresholds[i].tooltip:values[j],\n \"color\": thresholds[i].color\n });\n }\n }\n }\n return tooltips;\n }\n\n getNotMatchedValues(values:any[]) {\n let notMatched:any[] = [];\n for (let j = 0; j < values.length; j++) {\n if (!this.getMatchedThreshold(values[j])) {\n notMatched.push(values[j]);\n }\n }\n return notMatched;\n }\n\n getNotColoredValues(values:any[]) {\n let notMatched:any[] = [];\n for (let j = 0; j < values.length; j++) {\n let threshold = this.getMatchedThreshold(values[j]);\n if (!threshold || !threshold.color || threshold.color == \"\") {\n notMatched.push(values[j]);\n }\n }\n return notMatched;\n }\n\n getDiscreteColor(index) {\n let color = this.getThreshold(index).color;\n if (!color || color == \"\") {\n return 'rgba(0,0,0,1)';\n }\n return color;\n }\n\n // returns color from first matched thresold in order from 0 to thresholds.length\n getBucketColor(values) {\n let thresholds = this.panel.color.thresholds;\n\n if (!values || values.length == 0) {\n // treat as null value\n return this.getMatchedThreshold(null).color;\n }\n\n if (values.length == 1) {\n let threshold = this.getMatchedThreshold(values[0]);\n if (!threshold || !threshold.color || threshold.color == \"\") {\n return 'rgba(0,0,0,1)';\n } else {\n return threshold.color;\n }\n }\n\n let isAllValuesNulls = true;\n for (let j = 0; j < values.length; j++) {\n if (values[j] != null) {\n isAllValuesNulls = false;\n }\n }\n if (isAllValuesNulls) {\n return this.getMatchedThreshold(null).color;\n }\n\n for (let i = 0; i < thresholds.length; i++) {\n for (let j = 0; j < values.length; j++) {\n if (values[j] == thresholds[i].value) {\n return this.getDiscreteColor(i);\n }\n }\n }\n return 'rgba(0,0,0,1)';\n }\n\n updateCardsValuesHasColorInfo() {\n if (!this.panelCtrl.cardsData) {\n return\n }\n this.panelCtrl.cardsData.noColorDefined = false;\n let cards = this.panelCtrl.cardsData.cards;\n for (let i=0; i= thresholds.length == null) {\n return {\n \"color\": \"rgba(0,0,0,0)\",\n \"value\": \"null\",\n \"tooltip\": \"null\",\n }\n }\n return thresholds[index];\n }\n\n roundIntervalCeil(interval) {\n switch (true) {\n case interval <= 10:\n return 10; // 0.01s\n case interval <= 20:\n return 20; // 0.02s\n case interval <= 50:\n return 50; // 0.05s\n case interval <= 100:\n return 100; // 0.1s\n case interval <= 200:\n return 200; // 0.2s\n case interval <= 500:\n return 500; // 0.5s\n case interval <= 1000:\n return 1000; // 1s\n case interval <= 2000:\n return 2000; // 2s\n case interval <= 5000:\n return 5000; // 5s\n case interval <= 10000:\n return 10000; // 10s\n case interval <= 15000:\n return 15000; // 15s\n case interval <= 20000:\n return 20000; // 20s\n case interval <= 30000:\n return 30000; // 30s\n case interval <= 60000:\n return 60000; // 1m\n case interval <= 120000:\n return 120000; // 2m\n case interval <= 300000:\n return 300000; // 5m\n case interval <= 600000:\n return 600000; // 10m\n case interval <= 900000:\n return 900000; // 15m\n case interval <= 1200000:\n return 1200000; // 20m\n case interval <= 1800000:\n return 1800000; // 30m\n case interval <= 3600000:\n return 3600000; // 1h\n case interval <= 7200000:\n return 7200000; // 2h\n case interval <= 10800000:\n return 10800000; // 3h\n case interval <= 21600000:\n return 21600000; // 6h\n case interval <= 43200000:\n return 43200000; // 12h\n case interval <= 86400000:\n return 86400000; // 1d\n case interval <= 604800000:\n return 604800000; // 1w\n case interval <= 2592000000:\n return 2592000000; // 30d\n default:\n return 31536000000; // 1y\n }\n }\n}\n"],"file":"color_mode_discrete.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/categorical/Accent.js.map b/dist/libs/d3-scale-chromatic/categorical/Accent.js.map
index 44173f7..865f612 100644
--- a/dist/libs/d3-scale-chromatic/categorical/Accent.js.map
+++ b/dist/libs/d3-scale-chromatic/categorical/Accent.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/categorical/Accent.js"],"names":["colors"],"mappings":";;;;;;;;AAAOA,Y;;;yBAEQA,OAAO,kDAAP,C","file":"Accent.js","sourcesContent":["import colors from \"../colors\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/categorical/Accent.js"],"names":["colors"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;;yBAEQA,MAAM,CAAC,kDAAD,C","sourcesContent":["import colors from \"../colors\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n"],"file":"Accent.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/categorical/Dark2.js.map b/dist/libs/d3-scale-chromatic/categorical/Dark2.js.map
index 273e762..d6e2679 100644
--- a/dist/libs/d3-scale-chromatic/categorical/Dark2.js.map
+++ b/dist/libs/d3-scale-chromatic/categorical/Dark2.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/categorical/Dark2.js"],"names":["colors"],"mappings":";;;;;;;;AAAOA,Y;;;yBAEQA,OAAO,kDAAP,C","file":"Dark2.js","sourcesContent":["import colors from \"../colors\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/categorical/Dark2.js"],"names":["colors"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;;yBAEQA,MAAM,CAAC,kDAAD,C","sourcesContent":["import colors from \"../colors\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n"],"file":"Dark2.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/categorical/Paired.js.map b/dist/libs/d3-scale-chromatic/categorical/Paired.js.map
index 26ebc51..5c5f693 100644
--- a/dist/libs/d3-scale-chromatic/categorical/Paired.js.map
+++ b/dist/libs/d3-scale-chromatic/categorical/Paired.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/categorical/Paired.js"],"names":["colors"],"mappings":";;;;;;;;AAAOA,Y;;;yBAEQA,OAAO,0EAAP,C","file":"Paired.js","sourcesContent":["import colors from \"../colors\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/categorical/Paired.js"],"names":["colors"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;;yBAEQA,MAAM,CAAC,0EAAD,C","sourcesContent":["import colors from \"../colors\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n"],"file":"Paired.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/categorical/Pastel1.js.map b/dist/libs/d3-scale-chromatic/categorical/Pastel1.js.map
index be35100..ffdd62b 100644
--- a/dist/libs/d3-scale-chromatic/categorical/Pastel1.js.map
+++ b/dist/libs/d3-scale-chromatic/categorical/Pastel1.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/categorical/Pastel1.js"],"names":["colors"],"mappings":";;;;;;;;AAAOA,Y;;;yBAEQA,OAAO,wDAAP,C","file":"Pastel1.js","sourcesContent":["import colors from \"../colors\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/categorical/Pastel1.js"],"names":["colors"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;;yBAEQA,MAAM,CAAC,wDAAD,C","sourcesContent":["import colors from \"../colors\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n"],"file":"Pastel1.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/categorical/Pastel2.js.map b/dist/libs/d3-scale-chromatic/categorical/Pastel2.js.map
index 1507a53..6e9547a 100644
--- a/dist/libs/d3-scale-chromatic/categorical/Pastel2.js.map
+++ b/dist/libs/d3-scale-chromatic/categorical/Pastel2.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/categorical/Pastel2.js"],"names":["colors"],"mappings":";;;;;;;;AAAOA,Y;;;yBAEQA,OAAO,kDAAP,C","file":"Pastel2.js","sourcesContent":["import colors from \"../colors\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/categorical/Pastel2.js"],"names":["colors"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;;yBAEQA,MAAM,CAAC,kDAAD,C","sourcesContent":["import colors from \"../colors\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n"],"file":"Pastel2.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/categorical/Set1.js.map b/dist/libs/d3-scale-chromatic/categorical/Set1.js.map
index 75f5cb9..9fd606b 100644
--- a/dist/libs/d3-scale-chromatic/categorical/Set1.js.map
+++ b/dist/libs/d3-scale-chromatic/categorical/Set1.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/categorical/Set1.js"],"names":["colors"],"mappings":";;;;;;;;AAAOA,Y;;;yBAEQA,OAAO,wDAAP,C","file":"Set1.js","sourcesContent":["import colors from \"../colors\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/categorical/Set1.js"],"names":["colors"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;;yBAEQA,MAAM,CAAC,wDAAD,C","sourcesContent":["import colors from \"../colors\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n"],"file":"Set1.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/categorical/Set2.js.map b/dist/libs/d3-scale-chromatic/categorical/Set2.js.map
index 7cd9e42..f15052c 100644
--- a/dist/libs/d3-scale-chromatic/categorical/Set2.js.map
+++ b/dist/libs/d3-scale-chromatic/categorical/Set2.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/categorical/Set2.js"],"names":["colors"],"mappings":";;;;;;;;AAAOA,Y;;;yBAEQA,OAAO,kDAAP,C","file":"Set2.js","sourcesContent":["import colors from \"../colors\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/categorical/Set2.js"],"names":["colors"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;;yBAEQA,MAAM,CAAC,kDAAD,C","sourcesContent":["import colors from \"../colors\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n"],"file":"Set2.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/categorical/Set3.js.map b/dist/libs/d3-scale-chromatic/categorical/Set3.js.map
index 1fe408c..92e9e18 100644
--- a/dist/libs/d3-scale-chromatic/categorical/Set3.js.map
+++ b/dist/libs/d3-scale-chromatic/categorical/Set3.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/categorical/Set3.js"],"names":["colors"],"mappings":";;;;;;;;AAAOA,Y;;;yBAEQA,OAAO,0EAAP,C","file":"Set3.js","sourcesContent":["import colors from \"../colors\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/categorical/Set3.js"],"names":["colors"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;;yBAEQA,MAAM,CAAC,0EAAD,C","sourcesContent":["import colors from \"../colors\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n"],"file":"Set3.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/colors.js b/dist/libs/d3-scale-chromatic/colors.js
index c81f52c..8ddb0ec 100644
--- a/dist/libs/d3-scale-chromatic/colors.js
+++ b/dist/libs/d3-scale-chromatic/colors.js
@@ -7,9 +7,12 @@ System.register([], function (_export, _context) {
var n = specifier.length / 6 | 0,
colors = new Array(n),
i = 0;
+
while (i < n) {
colors[i] = "#" + specifier.slice(i * 6, ++i * 6);
- }return colors;
+ }
+
+ return colors;
});
return {
diff --git a/dist/libs/d3-scale-chromatic/colors.js.map b/dist/libs/d3-scale-chromatic/colors.js.map
index a5aaacc..610a8de 100644
--- a/dist/libs/d3-scale-chromatic/colors.js.map
+++ b/dist/libs/d3-scale-chromatic/colors.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../src/libs/d3-scale-chromatic/colors.js"],"names":["specifier","n","length","colors","Array","i","slice"],"mappings":";;;;;qBAAe,UAASA,SAAT,EAAoB;AACjC,QAAIC,IAAID,UAAUE,MAAV,GAAmB,CAAnB,GAAuB,CAA/B;AAAA,QAAkCC,SAAS,IAAIC,KAAJ,CAAUH,CAAV,CAA3C;AAAA,QAAyDI,IAAI,CAA7D;AACA,WAAOA,IAAIJ,CAAX;AAAcE,aAAOE,CAAP,IAAY,MAAML,UAAUM,KAAV,CAAgBD,IAAI,CAApB,EAAuB,EAAEA,CAAF,GAAM,CAA7B,CAAlB;AAAd,KACA,OAAOF,MAAP;AACD,G","file":"colors.js","sourcesContent":["export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../src/libs/d3-scale-chromatic/colors.js"],"names":["specifier","n","length","colors","Array","i","slice"],"mappings":";;;;;qBAAe,UAASA,SAAT,EAAoB;AACjC,QAAIC,CAAC,GAAGD,SAAS,CAACE,MAAV,GAAmB,CAAnB,GAAuB,CAA/B;AAAA,QAAkCC,MAAM,GAAG,IAAIC,KAAJ,CAAUH,CAAV,CAA3C;AAAA,QAAyDI,CAAC,GAAG,CAA7D;;AACA,WAAOA,CAAC,GAAGJ,CAAX;AAAcE,MAAAA,MAAM,CAACE,CAAD,CAAN,GAAY,MAAML,SAAS,CAACM,KAAV,CAAgBD,CAAC,GAAG,CAApB,EAAuB,EAAEA,CAAF,GAAM,CAA7B,CAAlB;AAAd;;AACA,WAAOF,MAAP;AACD,G","sourcesContent":["export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n"],"file":"colors.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/diverging/BrBG.js b/dist/libs/d3-scale-chromatic/diverging/BrBG.js
index 38ca058..a688560 100644
--- a/dist/libs/d3-scale-chromatic/diverging/BrBG.js
+++ b/dist/libs/d3-scale-chromatic/diverging/BrBG.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("d8b365f5f5f55ab4ac", "a6611adfc27d80cdc1018571", "a6611adfc27df5f5f580cdc1018571", "8c510ad8b365f6e8c3c7eae55ab4ac01665e", "8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e", "8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e", "8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e", "5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30", "5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/diverging/BrBG.js.map b/dist/libs/d3-scale-chromatic/diverging/BrBG.js.map
index 6d7017e..159b4a8 100644
--- a/dist/libs/d3-scale-chromatic/diverging/BrBG.js.map
+++ b/dist/libs/d3-scale-chromatic/diverging/BrBG.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/diverging/BrBG.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlB,8DARkB,EASlB,oEATkB,EAUlBC,GAVkB,CAUdL,MAVc,C;;;;yBAYLC,KAAKC,MAAL,C","file":"BrBG.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/diverging/BrBG.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlB,8DARkB,EASlB,oEATkB,EAUlBC,GAVkB,CAUdL,MAVc,C;;yBAYLC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"BrBG.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/diverging/GnYlRd.js b/dist/libs/d3-scale-chromatic/diverging/GnYlRd.js
index 57ac244..0b53c68 100644
--- a/dist/libs/d3-scale-chromatic/diverging/GnYlRd.js
+++ b/dist/libs/d3-scale-chromatic/diverging/GnYlRd.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("91cf60ffffbffc8d59", "1a9641a6d96afdae61d7191c", "1a9641a6d96affffbffdae61d7191c", "1a985091cf60d9ef8bfee08bfc8d59d73027", "1a985091cf60d9ef8bffffbffee08bfc8d59d73027", "1a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027", "1a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027", "0068371a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027a50026", "0068371a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027a50026").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/diverging/GnYlRd.js.map b/dist/libs/d3-scale-chromatic/diverging/GnYlRd.js.map
index c748b5f..e9a371f 100644
--- a/dist/libs/d3-scale-chromatic/diverging/GnYlRd.js.map
+++ b/dist/libs/d3-scale-chromatic/diverging/GnYlRd.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/diverging/GnYlRd.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlB,8DARkB,EASlB,oEATkB,EAUlBC,GAVkB,CAUdL,MAVc,C;;;;yBAYLC,KAAKC,MAAL,C","file":"GnYlRd.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"91cf60ffffbffc8d59\",\n \"1a9641a6d96afdae61d7191c\",\n \"1a9641a6d96affffbffdae61d7191c\",\n \"1a985091cf60d9ef8bfee08bfc8d59d73027\",\n \"1a985091cf60d9ef8bffffbffee08bfc8d59d73027\",\n \"1a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027\",\n \"1a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027\",\n \"0068371a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027a50026\",\n \"0068371a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027a50026\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/diverging/GnYlRd.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlB,8DARkB,EASlB,oEATkB,EAUlBC,GAVkB,CAUdL,MAVc,C;;yBAYLC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"91cf60ffffbffc8d59\",\n \"1a9641a6d96afdae61d7191c\",\n \"1a9641a6d96affffbffdae61d7191c\",\n \"1a985091cf60d9ef8bfee08bfc8d59d73027\",\n \"1a985091cf60d9ef8bffffbffee08bfc8d59d73027\",\n \"1a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027\",\n \"1a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027\",\n \"0068371a985066bd63a6d96ad9ef8bfee08bfdae61f46d43d73027a50026\",\n \"0068371a985066bd63a6d96ad9ef8bffffbffee08bfdae61f46d43d73027a50026\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"GnYlRd.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/diverging/PRGn.js b/dist/libs/d3-scale-chromatic/diverging/PRGn.js
index 0ac6052..8a89952 100644
--- a/dist/libs/d3-scale-chromatic/diverging/PRGn.js
+++ b/dist/libs/d3-scale-chromatic/diverging/PRGn.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("af8dc3f7f7f77fbf7b", "7b3294c2a5cfa6dba0008837", "7b3294c2a5cff7f7f7a6dba0008837", "762a83af8dc3e7d4e8d9f0d37fbf7b1b7837", "762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837", "762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837", "762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837", "40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b", "40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/diverging/PRGn.js.map b/dist/libs/d3-scale-chromatic/diverging/PRGn.js.map
index 2b7d689..959db21 100644
--- a/dist/libs/d3-scale-chromatic/diverging/PRGn.js.map
+++ b/dist/libs/d3-scale-chromatic/diverging/PRGn.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/diverging/PRGn.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlB,8DARkB,EASlB,oEATkB,EAUlBC,GAVkB,CAUdL,MAVc,C;;;;yBAYLC,KAAKC,MAAL,C","file":"PRGn.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/diverging/PRGn.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlB,8DARkB,EASlB,oEATkB,EAUlBC,GAVkB,CAUdL,MAVc,C;;yBAYLC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"PRGn.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/diverging/PiYG.js b/dist/libs/d3-scale-chromatic/diverging/PiYG.js
index b7a5730..2602653 100644
--- a/dist/libs/d3-scale-chromatic/diverging/PiYG.js
+++ b/dist/libs/d3-scale-chromatic/diverging/PiYG.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("e9a3c9f7f7f7a1d76a", "d01c8bf1b6dab8e1864dac26", "d01c8bf1b6daf7f7f7b8e1864dac26", "c51b7de9a3c9fde0efe6f5d0a1d76a4d9221", "c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221", "c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221", "c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221", "8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419", "8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/diverging/PiYG.js.map b/dist/libs/d3-scale-chromatic/diverging/PiYG.js.map
index e100822..cd71680 100644
--- a/dist/libs/d3-scale-chromatic/diverging/PiYG.js.map
+++ b/dist/libs/d3-scale-chromatic/diverging/PiYG.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/diverging/PiYG.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlB,8DARkB,EASlB,oEATkB,EAUlBC,GAVkB,CAUdL,MAVc,C;;;;yBAYLC,KAAKC,MAAL,C","file":"PiYG.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/diverging/PiYG.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlB,8DARkB,EASlB,oEATkB,EAUlBC,GAVkB,CAUdL,MAVc,C;;yBAYLC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"PiYG.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/diverging/PuOr.js b/dist/libs/d3-scale-chromatic/diverging/PuOr.js
index 38947cb..1affe00 100644
--- a/dist/libs/d3-scale-chromatic/diverging/PuOr.js
+++ b/dist/libs/d3-scale-chromatic/diverging/PuOr.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("998ec3f7f7f7f1a340", "5e3c99b2abd2fdb863e66101", "5e3c99b2abd2f7f7f7fdb863e66101", "542788998ec3d8daebfee0b6f1a340b35806", "542788998ec3d8daebf7f7f7fee0b6f1a340b35806", "5427888073acb2abd2d8daebfee0b6fdb863e08214b35806", "5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806", "2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08", "2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/diverging/PuOr.js.map b/dist/libs/d3-scale-chromatic/diverging/PuOr.js.map
index 8986984..1ddcffa 100644
--- a/dist/libs/d3-scale-chromatic/diverging/PuOr.js.map
+++ b/dist/libs/d3-scale-chromatic/diverging/PuOr.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/diverging/PuOr.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlB,8DARkB,EASlB,oEATkB,EAUlBC,GAVkB,CAUdL,MAVc,C;;;;yBAYLC,KAAKC,MAAL,C","file":"PuOr.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/diverging/PuOr.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlB,8DARkB,EASlB,oEATkB,EAUlBC,GAVkB,CAUdL,MAVc,C;;yBAYLC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"PuOr.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/diverging/RdBu.js b/dist/libs/d3-scale-chromatic/diverging/RdBu.js
index fe9be5c..545becf 100644
--- a/dist/libs/d3-scale-chromatic/diverging/RdBu.js
+++ b/dist/libs/d3-scale-chromatic/diverging/RdBu.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("ef8a62f7f7f767a9cf", "ca0020f4a58292c5de0571b0", "ca0020f4a582f7f7f792c5de0571b0", "b2182bef8a62fddbc7d1e5f067a9cf2166ac", "b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac", "b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac", "b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac", "67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061", "67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/diverging/RdBu.js.map b/dist/libs/d3-scale-chromatic/diverging/RdBu.js.map
index 1470841..d353e7d 100644
--- a/dist/libs/d3-scale-chromatic/diverging/RdBu.js.map
+++ b/dist/libs/d3-scale-chromatic/diverging/RdBu.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/diverging/RdBu.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlB,8DARkB,EASlB,oEATkB,EAUlBC,GAVkB,CAUdL,MAVc,C;;;;yBAYLC,KAAKC,MAAL,C","file":"RdBu.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/diverging/RdBu.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlB,8DARkB,EASlB,oEATkB,EAUlBC,GAVkB,CAUdL,MAVc,C;;yBAYLC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"RdBu.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/diverging/RdGy.js b/dist/libs/d3-scale-chromatic/diverging/RdGy.js
index 46bf6fa..0cce618 100644
--- a/dist/libs/d3-scale-chromatic/diverging/RdGy.js
+++ b/dist/libs/d3-scale-chromatic/diverging/RdGy.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("ef8a62ffffff999999", "ca0020f4a582bababa404040", "ca0020f4a582ffffffbababa404040", "b2182bef8a62fddbc7e0e0e09999994d4d4d", "b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d", "b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d", "b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d", "67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a", "67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/diverging/RdGy.js.map b/dist/libs/d3-scale-chromatic/diverging/RdGy.js.map
index df3ebe5..6895446 100644
--- a/dist/libs/d3-scale-chromatic/diverging/RdGy.js.map
+++ b/dist/libs/d3-scale-chromatic/diverging/RdGy.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/diverging/RdGy.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlB,8DARkB,EASlB,oEATkB,EAUlBC,GAVkB,CAUdL,MAVc,C;;;;yBAYLC,KAAKC,MAAL,C","file":"RdGy.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/diverging/RdGy.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlB,8DARkB,EASlB,oEATkB,EAUlBC,GAVkB,CAUdL,MAVc,C;;yBAYLC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"RdGy.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/diverging/RdYlBu.js b/dist/libs/d3-scale-chromatic/diverging/RdYlBu.js
index 19656d3..eede453 100644
--- a/dist/libs/d3-scale-chromatic/diverging/RdYlBu.js
+++ b/dist/libs/d3-scale-chromatic/diverging/RdYlBu.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("fc8d59ffffbf91bfdb", "d7191cfdae61abd9e92c7bb6", "d7191cfdae61ffffbfabd9e92c7bb6", "d73027fc8d59fee090e0f3f891bfdb4575b4", "d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4", "d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4", "d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4", "a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695", "a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/diverging/RdYlBu.js.map b/dist/libs/d3-scale-chromatic/diverging/RdYlBu.js.map
index 076a24c..bf8b301 100644
--- a/dist/libs/d3-scale-chromatic/diverging/RdYlBu.js.map
+++ b/dist/libs/d3-scale-chromatic/diverging/RdYlBu.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/diverging/RdYlBu.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlB,8DARkB,EASlB,oEATkB,EAUlBC,GAVkB,CAUdL,MAVc,C;;;;yBAYLC,KAAKC,MAAL,C","file":"RdYlBu.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/diverging/RdYlBu.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlB,8DARkB,EASlB,oEATkB,EAUlBC,GAVkB,CAUdL,MAVc,C;;yBAYLC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"RdYlBu.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/diverging/RdYlGn.js b/dist/libs/d3-scale-chromatic/diverging/RdYlGn.js
index 457e919..7ebe964 100644
--- a/dist/libs/d3-scale-chromatic/diverging/RdYlGn.js
+++ b/dist/libs/d3-scale-chromatic/diverging/RdYlGn.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("fc8d59ffffbf91cf60", "d7191cfdae61a6d96a1a9641", "d7191cfdae61ffffbfa6d96a1a9641", "d73027fc8d59fee08bd9ef8b91cf601a9850", "d73027fc8d59fee08bffffbfd9ef8b91cf601a9850", "d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850", "d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850", "a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837", "a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/diverging/RdYlGn.js.map b/dist/libs/d3-scale-chromatic/diverging/RdYlGn.js.map
index f148266..5408f8c 100644
--- a/dist/libs/d3-scale-chromatic/diverging/RdYlGn.js.map
+++ b/dist/libs/d3-scale-chromatic/diverging/RdYlGn.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/diverging/RdYlGn.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlB,8DARkB,EASlB,oEATkB,EAUlBC,GAVkB,CAUdL,MAVc,C;;;;yBAYLC,KAAKC,MAAL,C","file":"RdYlGn.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/diverging/RdYlGn.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlB,8DARkB,EASlB,oEATkB,EAUlBC,GAVkB,CAUdL,MAVc,C;;yBAYLC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"RdYlGn.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/diverging/Spectral.js b/dist/libs/d3-scale-chromatic/diverging/Spectral.js
index d22e308..3343b4b 100644
--- a/dist/libs/d3-scale-chromatic/diverging/Spectral.js
+++ b/dist/libs/d3-scale-chromatic/diverging/Spectral.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("fc8d59ffffbf99d594", "d7191cfdae61abdda42b83ba", "d7191cfdae61ffffbfabdda42b83ba", "d53e4ffc8d59fee08be6f59899d5943288bd", "d53e4ffc8d59fee08bffffbfe6f59899d5943288bd", "d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd", "d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd", "9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2", "9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/diverging/Spectral.js.map b/dist/libs/d3-scale-chromatic/diverging/Spectral.js.map
index 8fac52e..0528aa7 100644
--- a/dist/libs/d3-scale-chromatic/diverging/Spectral.js.map
+++ b/dist/libs/d3-scale-chromatic/diverging/Spectral.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/diverging/Spectral.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlB,8DARkB,EASlB,oEATkB,EAUlBC,GAVkB,CAUdL,MAVc,C;;;;yBAYLC,KAAKC,MAAL,C","file":"Spectral.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/diverging/Spectral.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlB,8DARkB,EASlB,oEATkB,EAUlBC,GAVkB,CAUdL,MAVc,C;;yBAYLC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"Spectral.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/index.js b/dist/libs/d3-scale-chromatic/index.js
index 4e527d5..3416a93 100644
--- a/dist/libs/d3-scale-chromatic/index.js
+++ b/dist/libs/d3-scale-chromatic/index.js
@@ -5,213 +5,161 @@ System.register(["./categorical/Accent", "./categorical/Dark2", "./categorical/P
return {
setters: [function (_categoricalAccent) {
- var _exportObj = {};
- _exportObj.schemeAccent = _categoricalAccent.default;
-
- _export(_exportObj);
+ _export("schemeAccent", _categoricalAccent.default);
}, function (_categoricalDark) {
- var _exportObj2 = {};
- _exportObj2.schemeDark2 = _categoricalDark.default;
-
- _export(_exportObj2);
+ _export("schemeDark2", _categoricalDark.default);
}, function (_categoricalPaired) {
- var _exportObj3 = {};
- _exportObj3.schemePaired = _categoricalPaired.default;
-
- _export(_exportObj3);
+ _export("schemePaired", _categoricalPaired.default);
}, function (_categoricalPastel) {
- var _exportObj4 = {};
- _exportObj4.schemePastel1 = _categoricalPastel.default;
-
- _export(_exportObj4);
+ _export("schemePastel1", _categoricalPastel.default);
}, function (_categoricalPastel2) {
- var _exportObj5 = {};
- _exportObj5.schemePastel2 = _categoricalPastel2.default;
-
- _export(_exportObj5);
+ _export("schemePastel2", _categoricalPastel2.default);
}, function (_categoricalSet) {
- var _exportObj6 = {};
- _exportObj6.schemeSet1 = _categoricalSet.default;
-
- _export(_exportObj6);
+ _export("schemeSet1", _categoricalSet.default);
}, function (_categoricalSet2) {
- var _exportObj7 = {};
- _exportObj7.schemeSet2 = _categoricalSet2.default;
-
- _export(_exportObj7);
+ _export("schemeSet2", _categoricalSet2.default);
}, function (_categoricalSet3) {
- var _exportObj8 = {};
- _exportObj8.schemeSet3 = _categoricalSet3.default;
-
- _export(_exportObj8);
+ _export("schemeSet3", _categoricalSet3.default);
}, function (_divergingBrBG) {
- var _exportObj9 = {};
- _exportObj9.interpolateBrBG = _divergingBrBG.default;
- _exportObj9.schemeBrBG = _divergingBrBG.scheme;
-
- _export(_exportObj9);
+ _export({
+ interpolateBrBG: _divergingBrBG.default,
+ schemeBrBG: _divergingBrBG.scheme
+ });
}, function (_divergingPRGn) {
- var _exportObj10 = {};
- _exportObj10.interpolatePRGn = _divergingPRGn.default;
- _exportObj10.schemePRGn = _divergingPRGn.scheme;
-
- _export(_exportObj10);
+ _export({
+ interpolatePRGn: _divergingPRGn.default,
+ schemePRGn: _divergingPRGn.scheme
+ });
}, function (_divergingPiYG) {
- var _exportObj11 = {};
- _exportObj11.interpolatePiYG = _divergingPiYG.default;
- _exportObj11.schemePiYG = _divergingPiYG.scheme;
-
- _export(_exportObj11);
+ _export({
+ interpolatePiYG: _divergingPiYG.default,
+ schemePiYG: _divergingPiYG.scheme
+ });
}, function (_divergingPuOr) {
- var _exportObj12 = {};
- _exportObj12.interpolatePuOr = _divergingPuOr.default;
- _exportObj12.schemePuOr = _divergingPuOr.scheme;
-
- _export(_exportObj12);
+ _export({
+ interpolatePuOr: _divergingPuOr.default,
+ schemePuOr: _divergingPuOr.scheme
+ });
}, function (_divergingRdBu) {
- var _exportObj13 = {};
- _exportObj13.interpolateRdBu = _divergingRdBu.default;
- _exportObj13.schemeRdBu = _divergingRdBu.scheme;
-
- _export(_exportObj13);
+ _export({
+ interpolateRdBu: _divergingRdBu.default,
+ schemeRdBu: _divergingRdBu.scheme
+ });
}, function (_divergingRdGy) {
- var _exportObj14 = {};
- _exportObj14.interpolateRdGy = _divergingRdGy.default;
- _exportObj14.schemeRdGy = _divergingRdGy.scheme;
-
- _export(_exportObj14);
+ _export({
+ interpolateRdGy: _divergingRdGy.default,
+ schemeRdGy: _divergingRdGy.scheme
+ });
}, function (_divergingRdYlBu) {
- var _exportObj15 = {};
- _exportObj15.interpolateRdYlBu = _divergingRdYlBu.default;
- _exportObj15.schemeRdYlBu = _divergingRdYlBu.scheme;
-
- _export(_exportObj15);
+ _export({
+ interpolateRdYlBu: _divergingRdYlBu.default,
+ schemeRdYlBu: _divergingRdYlBu.scheme
+ });
}, function (_divergingRdYlGn) {
- var _exportObj16 = {};
- _exportObj16.interpolateRdYlGn = _divergingRdYlGn.default;
- _exportObj16.schemeRdYlGn = _divergingRdYlGn.scheme;
-
- _export(_exportObj16);
+ _export({
+ interpolateRdYlGn: _divergingRdYlGn.default,
+ schemeRdYlGn: _divergingRdYlGn.scheme
+ });
}, function (_divergingGnYlRd) {
- var _exportObj17 = {};
- _exportObj17.interpolateGnYlRd = _divergingGnYlRd.default;
- _exportObj17.schemeGnYlRd = _divergingGnYlRd.scheme;
-
- _export(_exportObj17);
+ _export({
+ interpolateGnYlRd: _divergingGnYlRd.default,
+ schemeGnYlRd: _divergingGnYlRd.scheme
+ });
}, function (_divergingSpectral) {
- var _exportObj18 = {};
- _exportObj18.interpolateSpectral = _divergingSpectral.default;
- _exportObj18.schemeSpectral = _divergingSpectral.scheme;
-
- _export(_exportObj18);
+ _export({
+ interpolateSpectral: _divergingSpectral.default,
+ schemeSpectral: _divergingSpectral.scheme
+ });
}, function (_sequentialMultiBuGn) {
- var _exportObj19 = {};
- _exportObj19.interpolateBuGn = _sequentialMultiBuGn.default;
- _exportObj19.schemeBuGn = _sequentialMultiBuGn.scheme;
-
- _export(_exportObj19);
+ _export({
+ interpolateBuGn: _sequentialMultiBuGn.default,
+ schemeBuGn: _sequentialMultiBuGn.scheme
+ });
}, function (_sequentialMultiBuPu) {
- var _exportObj20 = {};
- _exportObj20.interpolateBuPu = _sequentialMultiBuPu.default;
- _exportObj20.schemeBuPu = _sequentialMultiBuPu.scheme;
-
- _export(_exportObj20);
+ _export({
+ interpolateBuPu: _sequentialMultiBuPu.default,
+ schemeBuPu: _sequentialMultiBuPu.scheme
+ });
}, function (_sequentialMultiGnBu) {
- var _exportObj21 = {};
- _exportObj21.interpolateGnBu = _sequentialMultiGnBu.default;
- _exportObj21.schemeGnBu = _sequentialMultiGnBu.scheme;
-
- _export(_exportObj21);
+ _export({
+ interpolateGnBu: _sequentialMultiGnBu.default,
+ schemeGnBu: _sequentialMultiGnBu.scheme
+ });
}, function (_sequentialMultiOrRd) {
- var _exportObj22 = {};
- _exportObj22.interpolateOrRd = _sequentialMultiOrRd.default;
- _exportObj22.schemeOrRd = _sequentialMultiOrRd.scheme;
-
- _export(_exportObj22);
+ _export({
+ interpolateOrRd: _sequentialMultiOrRd.default,
+ schemeOrRd: _sequentialMultiOrRd.scheme
+ });
}, function (_sequentialMultiPuBuGn) {
- var _exportObj23 = {};
- _exportObj23.interpolatePuBuGn = _sequentialMultiPuBuGn.default;
- _exportObj23.schemePuBuGn = _sequentialMultiPuBuGn.scheme;
-
- _export(_exportObj23);
+ _export({
+ interpolatePuBuGn: _sequentialMultiPuBuGn.default,
+ schemePuBuGn: _sequentialMultiPuBuGn.scheme
+ });
}, function (_sequentialMultiPuBu) {
- var _exportObj24 = {};
- _exportObj24.interpolatePuBu = _sequentialMultiPuBu.default;
- _exportObj24.schemePuBu = _sequentialMultiPuBu.scheme;
-
- _export(_exportObj24);
+ _export({
+ interpolatePuBu: _sequentialMultiPuBu.default,
+ schemePuBu: _sequentialMultiPuBu.scheme
+ });
}, function (_sequentialMultiPuRd) {
- var _exportObj25 = {};
- _exportObj25.interpolatePuRd = _sequentialMultiPuRd.default;
- _exportObj25.schemePuRd = _sequentialMultiPuRd.scheme;
-
- _export(_exportObj25);
+ _export({
+ interpolatePuRd: _sequentialMultiPuRd.default,
+ schemePuRd: _sequentialMultiPuRd.scheme
+ });
}, function (_sequentialMultiRdPu) {
- var _exportObj26 = {};
- _exportObj26.interpolateRdPu = _sequentialMultiRdPu.default;
- _exportObj26.schemeRdPu = _sequentialMultiRdPu.scheme;
-
- _export(_exportObj26);
+ _export({
+ interpolateRdPu: _sequentialMultiRdPu.default,
+ schemeRdPu: _sequentialMultiRdPu.scheme
+ });
}, function (_sequentialMultiYlGnBu) {
- var _exportObj27 = {};
- _exportObj27.interpolateYlGnBu = _sequentialMultiYlGnBu.default;
- _exportObj27.schemeYlGnBu = _sequentialMultiYlGnBu.scheme;
-
- _export(_exportObj27);
+ _export({
+ interpolateYlGnBu: _sequentialMultiYlGnBu.default,
+ schemeYlGnBu: _sequentialMultiYlGnBu.scheme
+ });
}, function (_sequentialMultiYlGn) {
- var _exportObj28 = {};
- _exportObj28.interpolateYlGn = _sequentialMultiYlGn.default;
- _exportObj28.schemeYlGn = _sequentialMultiYlGn.scheme;
-
- _export(_exportObj28);
+ _export({
+ interpolateYlGn: _sequentialMultiYlGn.default,
+ schemeYlGn: _sequentialMultiYlGn.scheme
+ });
}, function (_sequentialMultiYlOrBr) {
- var _exportObj29 = {};
- _exportObj29.interpolateYlOrBr = _sequentialMultiYlOrBr.default;
- _exportObj29.schemeYlOrBr = _sequentialMultiYlOrBr.scheme;
-
- _export(_exportObj29);
+ _export({
+ interpolateYlOrBr: _sequentialMultiYlOrBr.default,
+ schemeYlOrBr: _sequentialMultiYlOrBr.scheme
+ });
}, function (_sequentialMultiYlOrRd) {
- var _exportObj30 = {};
- _exportObj30.interpolateYlOrRd = _sequentialMultiYlOrRd.default;
- _exportObj30.schemeYlOrRd = _sequentialMultiYlOrRd.scheme;
-
- _export(_exportObj30);
+ _export({
+ interpolateYlOrRd: _sequentialMultiYlOrRd.default,
+ schemeYlOrRd: _sequentialMultiYlOrRd.scheme
+ });
}, function (_sequentialSingleBlues) {
- var _exportObj31 = {};
- _exportObj31.interpolateBlues = _sequentialSingleBlues.default;
- _exportObj31.schemeBlues = _sequentialSingleBlues.scheme;
-
- _export(_exportObj31);
+ _export({
+ interpolateBlues: _sequentialSingleBlues.default,
+ schemeBlues: _sequentialSingleBlues.scheme
+ });
}, function (_sequentialSingleGreens) {
- var _exportObj32 = {};
- _exportObj32.interpolateGreens = _sequentialSingleGreens.default;
- _exportObj32.schemeGreens = _sequentialSingleGreens.scheme;
-
- _export(_exportObj32);
+ _export({
+ interpolateGreens: _sequentialSingleGreens.default,
+ schemeGreens: _sequentialSingleGreens.scheme
+ });
}, function (_sequentialSingleGreys) {
- var _exportObj33 = {};
- _exportObj33.interpolateGreys = _sequentialSingleGreys.default;
- _exportObj33.schemeGreys = _sequentialSingleGreys.scheme;
-
- _export(_exportObj33);
+ _export({
+ interpolateGreys: _sequentialSingleGreys.default,
+ schemeGreys: _sequentialSingleGreys.scheme
+ });
}, function (_sequentialSinglePurples) {
- var _exportObj34 = {};
- _exportObj34.interpolatePurples = _sequentialSinglePurples.default;
- _exportObj34.schemePurples = _sequentialSinglePurples.scheme;
-
- _export(_exportObj34);
+ _export({
+ interpolatePurples: _sequentialSinglePurples.default,
+ schemePurples: _sequentialSinglePurples.scheme
+ });
}, function (_sequentialSingleReds) {
- var _exportObj35 = {};
- _exportObj35.interpolateReds = _sequentialSingleReds.default;
- _exportObj35.schemeReds = _sequentialSingleReds.scheme;
-
- _export(_exportObj35);
+ _export({
+ interpolateReds: _sequentialSingleReds.default,
+ schemeReds: _sequentialSingleReds.scheme
+ });
}, function (_sequentialSingleOranges) {
- var _exportObj36 = {};
- _exportObj36.interpolateOranges = _sequentialSingleOranges.default;
- _exportObj36.schemeOranges = _sequentialSingleOranges.scheme;
-
- _export(_exportObj36);
+ _export({
+ interpolateOranges: _sequentialSingleOranges.default,
+ schemeOranges: _sequentialSingleOranges.scheme
+ });
}],
execute: function () {}
};
diff --git a/dist/libs/d3-scale-chromatic/index.js.map b/dist/libs/d3-scale-chromatic/index.js.map
index b2e3a4d..8934301 100644
--- a/dist/libs/d3-scale-chromatic/index.js.map
+++ b/dist/libs/d3-scale-chromatic/index.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../src/libs/d3-scale-chromatic/index.js"],"names":["schemeAccent","default","schemeDark2","schemePaired","schemePastel1","schemePastel2","schemeSet1","schemeSet2","schemeSet3","interpolateBrBG","schemeBrBG","scheme","interpolatePRGn","schemePRGn","interpolatePiYG","schemePiYG","interpolatePuOr","schemePuOr","interpolateRdBu","schemeRdBu","interpolateRdGy","schemeRdGy","interpolateRdYlBu","schemeRdYlBu","interpolateRdYlGn","schemeRdYlGn","interpolateGnYlRd","schemeGnYlRd","interpolateSpectral","schemeSpectral","interpolateBuGn","schemeBuGn","interpolateBuPu","schemeBuPu","interpolateGnBu","schemeGnBu","interpolateOrRd","schemeOrRd","interpolatePuBuGn","schemePuBuGn","interpolatePuBu","schemePuBu","interpolatePuRd","schemePuRd","interpolateRdPu","schemeRdPu","interpolateYlGnBu","schemeYlGnBu","interpolateYlGn","schemeYlGn","interpolateYlOrBr","schemeYlOrBr","interpolateYlOrRd","schemeYlOrRd","interpolateBlues","schemeBlues","interpolateGreens","schemeGreens","interpolateGreys","schemeGreys","interpolatePurples","schemePurples","interpolateReds","schemeReds","interpolateOranges","schemeOranges"],"mappings":";;;;;;;;iBAAmBA,Y,sBAAXC,O;;;;;kBACWC,W,oBAAXD,O;;;;;kBACWE,Y,sBAAXF,O;;;;;kBACWG,a,sBAAXH,O;;;;;kBACWI,a,uBAAXJ,O;;;;;kBACWK,U,mBAAXL,O;;;;;kBACWM,U,oBAAXN,O;;;;;kBACWO,U,oBAAXP,O;;;;;kBACWQ,e,kBAAXR,O;kBAAsCS,U,kBAAVC,M;;;;;mBACjBC,e,kBAAXX,O;mBAAsCY,U,kBAAVF,M;;;;;mBACjBG,e,kBAAXb,O;mBAAsCc,U,kBAAVJ,M;;;;;mBACjBK,e,kBAAXf,O;mBAAsCgB,U,kBAAVN,M;;;;;mBACjBO,e,kBAAXjB,O;mBAAsCkB,U,kBAAVR,M;;;;;mBACjBS,e,kBAAXnB,O;mBAAsCoB,U,kBAAVV,M;;;;;mBACjBW,iB,oBAAXrB,O;mBAAwCsB,Y,oBAAVZ,M;;;;;mBACnBa,iB,oBAAXvB,O;mBAAwCwB,Y,oBAAVd,M;;;;;mBACnBe,iB,oBAAXzB,O;mBAAwC0B,Y,oBAAVhB,M;;;;;mBACnBiB,mB,sBAAX3B,O;mBAA0C4B,c,sBAAVlB,M;;;;;mBACrBmB,e,wBAAX7B,O;mBAAsC8B,U,wBAAVpB,M;;;;;mBACjBqB,e,wBAAX/B,O;mBAAsCgC,U,wBAAVtB,M;;;;;mBACjBuB,e,wBAAXjC,O;mBAAsCkC,U,wBAAVxB,M;;;;;mBACjByB,e,wBAAXnC,O;mBAAsCoC,U,wBAAV1B,M;;;;;mBACjB2B,iB,0BAAXrC,O;mBAAwCsC,Y,0BAAV5B,M;;;;;mBACnB6B,e,wBAAXvC,O;mBAAsCwC,U,wBAAV9B,M;;;;;mBACjB+B,e,wBAAXzC,O;mBAAsC0C,U,wBAAVhC,M;;;;;mBACjBiC,e,wBAAX3C,O;mBAAsC4C,U,wBAAVlC,M;;;;;mBACjBmC,iB,0BAAX7C,O;mBAAwC8C,Y,0BAAVpC,M;;;;;mBACnBqC,e,wBAAX/C,O;mBAAsCgD,U,wBAAVtC,M;;;;;mBACjBuC,iB,0BAAXjD,O;mBAAwCkD,Y,0BAAVxC,M;;;;;mBACnByC,iB,0BAAXnD,O;mBAAwCoD,Y,0BAAV1C,M;;;;;mBACnB2C,gB,0BAAXrD,O;mBAAuCsD,W,0BAAV5C,M;;;;;mBAClB6C,iB,2BAAXvD,O;mBAAwCwD,Y,2BAAV9C,M;;;;;mBACnB+C,gB,0BAAXzD,O;mBAAuC0D,W,0BAAVhD,M;;;;;mBAClBiD,kB,4BAAX3D,O;mBAAyC4D,a,4BAAVlD,M;;;;;mBACpBmD,e,yBAAX7D,O;mBAAsC8D,U,yBAAVpD,M;;;;;mBACjBqD,kB,4BAAX/D,O;mBAAyCgE,a,4BAAVtD,M","file":"index.js","sourcesContent":["export {default as schemeAccent} from \"./categorical/Accent\";\nexport {default as schemeDark2} from \"./categorical/Dark2\";\nexport {default as schemePaired} from \"./categorical/Paired\";\nexport {default as schemePastel1} from \"./categorical/Pastel1\";\nexport {default as schemePastel2} from \"./categorical/Pastel2\";\nexport {default as schemeSet1} from \"./categorical/Set1\";\nexport {default as schemeSet2} from \"./categorical/Set2\";\nexport {default as schemeSet3} from \"./categorical/Set3\";\nexport {default as interpolateBrBG, scheme as schemeBrBG} from \"./diverging/BrBG\";\nexport {default as interpolatePRGn, scheme as schemePRGn} from \"./diverging/PRGn\";\nexport {default as interpolatePiYG, scheme as schemePiYG} from \"./diverging/PiYG\";\nexport {default as interpolatePuOr, scheme as schemePuOr} from \"./diverging/PuOr\";\nexport {default as interpolateRdBu, scheme as schemeRdBu} from \"./diverging/RdBu\";\nexport {default as interpolateRdGy, scheme as schemeRdGy} from \"./diverging/RdGy\";\nexport {default as interpolateRdYlBu, scheme as schemeRdYlBu} from \"./diverging/RdYlBu\";\nexport {default as interpolateRdYlGn, scheme as schemeRdYlGn} from \"./diverging/RdYlGn\";\nexport {default as interpolateGnYlRd, scheme as schemeGnYlRd} from \"./diverging/GnYlRd\";\nexport {default as interpolateSpectral, scheme as schemeSpectral} from \"./diverging/Spectral\";\nexport {default as interpolateBuGn, scheme as schemeBuGn} from \"./sequential-multi/BuGn\";\nexport {default as interpolateBuPu, scheme as schemeBuPu} from \"./sequential-multi/BuPu\";\nexport {default as interpolateGnBu, scheme as schemeGnBu} from \"./sequential-multi/GnBu\";\nexport {default as interpolateOrRd, scheme as schemeOrRd} from \"./sequential-multi/OrRd\";\nexport {default as interpolatePuBuGn, scheme as schemePuBuGn} from \"./sequential-multi/PuBuGn\";\nexport {default as interpolatePuBu, scheme as schemePuBu} from \"./sequential-multi/PuBu\";\nexport {default as interpolatePuRd, scheme as schemePuRd} from \"./sequential-multi/PuRd\";\nexport {default as interpolateRdPu, scheme as schemeRdPu} from \"./sequential-multi/RdPu\";\nexport {default as interpolateYlGnBu, scheme as schemeYlGnBu} from \"./sequential-multi/YlGnBu\";\nexport {default as interpolateYlGn, scheme as schemeYlGn} from \"./sequential-multi/YlGn\";\nexport {default as interpolateYlOrBr, scheme as schemeYlOrBr} from \"./sequential-multi/YlOrBr\";\nexport {default as interpolateYlOrRd, scheme as schemeYlOrRd} from \"./sequential-multi/YlOrRd\";\nexport {default as interpolateBlues, scheme as schemeBlues} from \"./sequential-single/Blues\";\nexport {default as interpolateGreens, scheme as schemeGreens} from \"./sequential-single/Greens\";\nexport {default as interpolateGreys, scheme as schemeGreys} from \"./sequential-single/Greys\";\nexport {default as interpolatePurples, scheme as schemePurples} from \"./sequential-single/Purples\";\nexport {default as interpolateReds, scheme as schemeReds} from \"./sequential-single/Reds\";\nexport {default as interpolateOranges, scheme as schemeOranges} from \"./sequential-single/Oranges\";\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../src/libs/d3-scale-chromatic/index.js"],"names":["default","scheme"],"mappings":";;;;;;;iDAAQA,O;;8CACAA,O;;iDACAA,O;;kDACAA,O;;mDACAA,O;;4CACAA,O;;6CACAA,O;;6CACAA,O;;;wCACAA,O;mCAA4BC;;;;wCAC5BD,O;mCAA4BC;;;;wCAC5BD,O;mCAA4BC;;;;wCAC5BD,O;mCAA4BC;;;;wCAC5BD,O;mCAA4BC;;;;wCAC5BD,O;mCAA4BC;;;;4CAC5BD,O;uCAA8BC;;;;4CAC9BD,O;uCAA8BC;;;;4CAC9BD,O;uCAA8BC;;;;gDAC9BD,O;2CAAgCC;;;;8CAChCD,O;yCAA4BC;;;;8CAC5BD,O;yCAA4BC;;;;8CAC5BD,O;yCAA4BC;;;;8CAC5BD,O;yCAA4BC;;;;kDAC5BD,O;6CAA8BC;;;;8CAC9BD,O;yCAA4BC;;;;8CAC5BD,O;yCAA4BC;;;;8CAC5BD,O;yCAA4BC;;;;kDAC5BD,O;6CAA8BC;;;;8CAC9BD,O;yCAA4BC;;;;kDAC5BD,O;6CAA8BC;;;;kDAC9BD,O;6CAA8BC;;;;iDAC9BD,O;4CAA6BC;;;;mDAC7BD,O;8CAA8BC;;;;iDAC9BD,O;4CAA6BC;;;;qDAC7BD,O;gDAA+BC;;;;+CAC/BD,O;0CAA4BC;;;;qDAC5BD,O;gDAA+BC","sourcesContent":["export {default as schemeAccent} from \"./categorical/Accent\";\nexport {default as schemeDark2} from \"./categorical/Dark2\";\nexport {default as schemePaired} from \"./categorical/Paired\";\nexport {default as schemePastel1} from \"./categorical/Pastel1\";\nexport {default as schemePastel2} from \"./categorical/Pastel2\";\nexport {default as schemeSet1} from \"./categorical/Set1\";\nexport {default as schemeSet2} from \"./categorical/Set2\";\nexport {default as schemeSet3} from \"./categorical/Set3\";\nexport {default as interpolateBrBG, scheme as schemeBrBG} from \"./diverging/BrBG\";\nexport {default as interpolatePRGn, scheme as schemePRGn} from \"./diverging/PRGn\";\nexport {default as interpolatePiYG, scheme as schemePiYG} from \"./diverging/PiYG\";\nexport {default as interpolatePuOr, scheme as schemePuOr} from \"./diverging/PuOr\";\nexport {default as interpolateRdBu, scheme as schemeRdBu} from \"./diverging/RdBu\";\nexport {default as interpolateRdGy, scheme as schemeRdGy} from \"./diverging/RdGy\";\nexport {default as interpolateRdYlBu, scheme as schemeRdYlBu} from \"./diverging/RdYlBu\";\nexport {default as interpolateRdYlGn, scheme as schemeRdYlGn} from \"./diverging/RdYlGn\";\nexport {default as interpolateGnYlRd, scheme as schemeGnYlRd} from \"./diverging/GnYlRd\";\nexport {default as interpolateSpectral, scheme as schemeSpectral} from \"./diverging/Spectral\";\nexport {default as interpolateBuGn, scheme as schemeBuGn} from \"./sequential-multi/BuGn\";\nexport {default as interpolateBuPu, scheme as schemeBuPu} from \"./sequential-multi/BuPu\";\nexport {default as interpolateGnBu, scheme as schemeGnBu} from \"./sequential-multi/GnBu\";\nexport {default as interpolateOrRd, scheme as schemeOrRd} from \"./sequential-multi/OrRd\";\nexport {default as interpolatePuBuGn, scheme as schemePuBuGn} from \"./sequential-multi/PuBuGn\";\nexport {default as interpolatePuBu, scheme as schemePuBu} from \"./sequential-multi/PuBu\";\nexport {default as interpolatePuRd, scheme as schemePuRd} from \"./sequential-multi/PuRd\";\nexport {default as interpolateRdPu, scheme as schemeRdPu} from \"./sequential-multi/RdPu\";\nexport {default as interpolateYlGnBu, scheme as schemeYlGnBu} from \"./sequential-multi/YlGnBu\";\nexport {default as interpolateYlGn, scheme as schemeYlGn} from \"./sequential-multi/YlGn\";\nexport {default as interpolateYlOrBr, scheme as schemeYlOrBr} from \"./sequential-multi/YlOrBr\";\nexport {default as interpolateYlOrRd, scheme as schemeYlOrRd} from \"./sequential-multi/YlOrRd\";\nexport {default as interpolateBlues, scheme as schemeBlues} from \"./sequential-single/Blues\";\nexport {default as interpolateGreens, scheme as schemeGreens} from \"./sequential-single/Greens\";\nexport {default as interpolateGreys, scheme as schemeGreys} from \"./sequential-single/Greys\";\nexport {default as interpolatePurples, scheme as schemePurples} from \"./sequential-single/Purples\";\nexport {default as interpolateReds, scheme as schemeReds} from \"./sequential-single/Reds\";\nexport {default as interpolateOranges, scheme as schemeOranges} from \"./sequential-single/Oranges\";\n"],"file":"index.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/ramp.js b/dist/libs/d3-scale-chromatic/ramp.js
index c0443a3..4969815 100644
--- a/dist/libs/d3-scale-chromatic/ramp.js
+++ b/dist/libs/d3-scale-chromatic/ramp.js
@@ -1,11 +1,11 @@
-'use strict';
+"use strict";
-System.register(['d3'], function (_export, _context) {
+System.register(["d3"], function (_export, _context) {
"use strict";
var d3;
- _export('default', function (scheme) {
+ _export("default", function (scheme) {
return d3.interpolateRgbBasis(scheme[scheme.length - 1]);
});
diff --git a/dist/libs/d3-scale-chromatic/ramp.js.map b/dist/libs/d3-scale-chromatic/ramp.js.map
index c377727..26ab843 100644
--- a/dist/libs/d3-scale-chromatic/ramp.js.map
+++ b/dist/libs/d3-scale-chromatic/ramp.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../src/libs/d3-scale-chromatic/ramp.js"],"names":["scheme","d3","interpolateRgbBasis","length"],"mappings":";;;;;;;qBAEe,UAASA,MAAT,EAAiB;AAC9B,WAAOC,GAAGC,mBAAH,CAAuBF,OAAOA,OAAOG,MAAP,GAAgB,CAAvB,CAAvB,CAAP;AACD,G;;;;AAJMF,Q","file":"ramp.js","sourcesContent":["import d3 from 'd3';\n\nexport default function(scheme) {\n return d3.interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../src/libs/d3-scale-chromatic/ramp.js"],"names":["scheme","d3","interpolateRgbBasis","length"],"mappings":";;;;;;;qBAEe,UAASA,MAAT,EAAiB;AAC9B,WAAOC,EAAE,CAACC,mBAAH,CAAuBF,MAAM,CAACA,MAAM,CAACG,MAAP,GAAgB,CAAjB,CAA7B,CAAP;AACD,G;;;;AAJMF,MAAAA,E","sourcesContent":["import d3 from 'd3';\n\nexport default function(scheme) {\n return d3.interpolateRgbBasis(scheme[scheme.length - 1]);\n}\n"],"file":"ramp.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/BuGn.js b/dist/libs/d3-scale-chromatic/sequential-multi/BuGn.js
index 60e5666..71b6592 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/BuGn.js
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/BuGn.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("e5f5f999d8c92ca25f", "edf8fbb2e2e266c2a4238b45", "edf8fbb2e2e266c2a42ca25f006d2c", "edf8fbccece699d8c966c2a42ca25f006d2c", "edf8fbccece699d8c966c2a441ae76238b45005824", "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824", "f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/BuGn.js.map b/dist/libs/d3-scale-chromatic/sequential-multi/BuGn.js.map
index 6967689..f8fe0f6 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/BuGn.js.map
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/BuGn.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/BuGn.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;;;yBAULC,KAAKC,MAAL,C","file":"BuGn.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/BuGn.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;yBAULC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"BuGn.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/BuPu.js b/dist/libs/d3-scale-chromatic/sequential-multi/BuPu.js
index 774f96a..926288b 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/BuPu.js
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/BuPu.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("e0ecf49ebcda8856a7", "edf8fbb3cde38c96c688419d", "edf8fbb3cde38c96c68856a7810f7c", "edf8fbbfd3e69ebcda8c96c68856a7810f7c", "edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b", "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b", "f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/BuPu.js.map b/dist/libs/d3-scale-chromatic/sequential-multi/BuPu.js.map
index b998c2e..9f7ea26 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/BuPu.js.map
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/BuPu.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/BuPu.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;;;yBAULC,KAAKC,MAAL,C","file":"BuPu.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/BuPu.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;yBAULC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"BuPu.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/GnBu.js b/dist/libs/d3-scale-chromatic/sequential-multi/GnBu.js
index 30a9168..950924c 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/GnBu.js
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/GnBu.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("e0f3dba8ddb543a2ca", "f0f9e8bae4bc7bccc42b8cbe", "f0f9e8bae4bc7bccc443a2ca0868ac", "f0f9e8ccebc5a8ddb57bccc443a2ca0868ac", "f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e", "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e", "f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/GnBu.js.map b/dist/libs/d3-scale-chromatic/sequential-multi/GnBu.js.map
index 1b42e17..81710c7 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/GnBu.js.map
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/GnBu.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/GnBu.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;;;yBAULC,KAAKC,MAAL,C","file":"GnBu.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/GnBu.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;yBAULC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"GnBu.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/OrRd.js b/dist/libs/d3-scale-chromatic/sequential-multi/OrRd.js
index 2274cb8..ae277fd 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/OrRd.js
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/OrRd.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("fee8c8fdbb84e34a33", "fef0d9fdcc8afc8d59d7301f", "fef0d9fdcc8afc8d59e34a33b30000", "fef0d9fdd49efdbb84fc8d59e34a33b30000", "fef0d9fdd49efdbb84fc8d59ef6548d7301f990000", "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000", "fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/OrRd.js.map b/dist/libs/d3-scale-chromatic/sequential-multi/OrRd.js.map
index 2c42bf3..fe782c6 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/OrRd.js.map
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/OrRd.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/OrRd.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;;;yBAULC,KAAKC,MAAL,C","file":"OrRd.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/OrRd.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;yBAULC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"OrRd.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/PuBu.js b/dist/libs/d3-scale-chromatic/sequential-multi/PuBu.js
index 0844375..4db25c1 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/PuBu.js
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/PuBu.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("ece7f2a6bddb2b8cbe", "f1eef6bdc9e174a9cf0570b0", "f1eef6bdc9e174a9cf2b8cbe045a8d", "f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d", "f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b", "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b", "fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/PuBu.js.map b/dist/libs/d3-scale-chromatic/sequential-multi/PuBu.js.map
index 9e804b9..997ca21 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/PuBu.js.map
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/PuBu.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/PuBu.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;;;yBAULC,KAAKC,MAAL,C","file":"PuBu.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/PuBu.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;yBAULC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"PuBu.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js b/dist/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js
index 33b51cd..5367534 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("ece2f0a6bddb1c9099", "f6eff7bdc9e167a9cf02818a", "f6eff7bdc9e167a9cf1c9099016c59", "f6eff7d0d1e6a6bddb67a9cf1c9099016c59", "f6eff7d0d1e6a6bddb67a9cf3690c002818a016450", "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450", "fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js.map b/dist/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js.map
index b1c8d89..dbd831a 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js.map
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;;;yBAULC,KAAKC,MAAL,C","file":"PuBuGn.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/PuBuGn.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;yBAULC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"PuBuGn.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/PuRd.js b/dist/libs/d3-scale-chromatic/sequential-multi/PuRd.js
index 8802365..5eb321f 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/PuRd.js
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/PuRd.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("e7e1efc994c7dd1c77", "f1eef6d7b5d8df65b0ce1256", "f1eef6d7b5d8df65b0dd1c77980043", "f1eef6d4b9dac994c7df65b0dd1c77980043", "f1eef6d4b9dac994c7df65b0e7298ace125691003f", "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f", "f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/PuRd.js.map b/dist/libs/d3-scale-chromatic/sequential-multi/PuRd.js.map
index 94d39f5..df1c72f 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/PuRd.js.map
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/PuRd.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/PuRd.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;;;yBAULC,KAAKC,MAAL,C","file":"PuRd.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/PuRd.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;yBAULC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"PuRd.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/RdPu.js b/dist/libs/d3-scale-chromatic/sequential-multi/RdPu.js
index 7528f72..2110b84 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/RdPu.js
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/RdPu.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("fde0ddfa9fb5c51b8a", "feebe2fbb4b9f768a1ae017e", "feebe2fbb4b9f768a1c51b8a7a0177", "feebe2fcc5c0fa9fb5f768a1c51b8a7a0177", "feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177", "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177", "fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/RdPu.js.map b/dist/libs/d3-scale-chromatic/sequential-multi/RdPu.js.map
index 2fe1715..69e9a98 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/RdPu.js.map
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/RdPu.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/RdPu.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;;;yBAULC,KAAKC,MAAL,C","file":"RdPu.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/RdPu.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;yBAULC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"RdPu.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/YlGn.js b/dist/libs/d3-scale-chromatic/sequential-multi/YlGn.js
index 620d490..747cd04 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/YlGn.js
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/YlGn.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("f7fcb9addd8e31a354", "ffffccc2e69978c679238443", "ffffccc2e69978c67931a354006837", "ffffccd9f0a3addd8e78c67931a354006837", "ffffccd9f0a3addd8e78c67941ab5d238443005a32", "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32", "ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/YlGn.js.map b/dist/libs/d3-scale-chromatic/sequential-multi/YlGn.js.map
index 2a3a26d..97c939f 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/YlGn.js.map
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/YlGn.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/YlGn.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;;;yBAULC,KAAKC,MAAL,C","file":"YlGn.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/YlGn.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;yBAULC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"YlGn.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js b/dist/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js
index c1d1caa..c3bbc9c 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("edf8b17fcdbb2c7fb8", "ffffcca1dab441b6c4225ea8", "ffffcca1dab441b6c42c7fb8253494", "ffffccc7e9b47fcdbb41b6c42c7fb8253494", "ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84", "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84", "ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js.map b/dist/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js.map
index 68ff5da..f0e7ed6 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js.map
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;;;yBAULC,KAAKC,MAAL,C","file":"YlGnBu.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/YlGnBu.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;yBAULC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"YlGnBu.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js b/dist/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js
index f9258cb..706cf6d 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("fff7bcfec44fd95f0e", "ffffd4fed98efe9929cc4c02", "ffffd4fed98efe9929d95f0e993404", "ffffd4fee391fec44ffe9929d95f0e993404", "ffffd4fee391fec44ffe9929ec7014cc4c028c2d04", "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04", "ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js.map b/dist/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js.map
index 6e29dd0..e66fac2 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js.map
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;;;yBAULC,KAAKC,MAAL,C","file":"YlOrBr.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/YlOrBr.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;yBAULC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"YlOrBr.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js b/dist/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js
index 90b3d6a..2cc0fc2 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("ffeda0feb24cf03b20", "ffffb2fecc5cfd8d3ce31a1c", "ffffb2fecc5cfd8d3cf03b20bd0026", "ffffb2fed976feb24cfd8d3cf03b20bd0026", "ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026", "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026", "ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js.map b/dist/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js.map
index fef7cad..903c0b4 100644
--- a/dist/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js.map
+++ b/dist/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;;;yBAULC,KAAKC,MAAL,C","file":"YlOrRd.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-multi/YlOrRd.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;yBAULC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"YlOrRd.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Blues.js b/dist/libs/d3-scale-chromatic/sequential-single/Blues.js
index 795b839..fd6a51a 100644
--- a/dist/libs/d3-scale-chromatic/sequential-single/Blues.js
+++ b/dist/libs/d3-scale-chromatic/sequential-single/Blues.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("deebf79ecae13182bd", "eff3ffbdd7e76baed62171b5", "eff3ffbdd7e76baed63182bd08519c", "eff3ffc6dbef9ecae16baed63182bd08519c", "eff3ffc6dbef9ecae16baed64292c62171b5084594", "f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594", "f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Blues.js.map b/dist/libs/d3-scale-chromatic/sequential-single/Blues.js.map
index fb4c968..fe532f6 100644
--- a/dist/libs/d3-scale-chromatic/sequential-single/Blues.js.map
+++ b/dist/libs/d3-scale-chromatic/sequential-single/Blues.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-single/Blues.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;;;yBAULC,KAAKC,MAAL,C","file":"Blues.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-single/Blues.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;yBAULC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"Blues.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Greens.js b/dist/libs/d3-scale-chromatic/sequential-single/Greens.js
index 35b0961..c6d709b 100644
--- a/dist/libs/d3-scale-chromatic/sequential-single/Greens.js
+++ b/dist/libs/d3-scale-chromatic/sequential-single/Greens.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("e5f5e0a1d99b31a354", "edf8e9bae4b374c476238b45", "edf8e9bae4b374c47631a354006d2c", "edf8e9c7e9c0a1d99b74c47631a354006d2c", "edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32", "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32", "f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Greens.js.map b/dist/libs/d3-scale-chromatic/sequential-single/Greens.js.map
index 87adc53..d0e8d1b 100644
--- a/dist/libs/d3-scale-chromatic/sequential-single/Greens.js.map
+++ b/dist/libs/d3-scale-chromatic/sequential-single/Greens.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-single/Greens.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;;;yBAULC,KAAKC,MAAL,C","file":"Greens.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-single/Greens.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;yBAULC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"Greens.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Greys.js b/dist/libs/d3-scale-chromatic/sequential-single/Greys.js
index 138bb17..da156e1 100644
--- a/dist/libs/d3-scale-chromatic/sequential-single/Greys.js
+++ b/dist/libs/d3-scale-chromatic/sequential-single/Greys.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("f0f0f0bdbdbd636363", "f7f7f7cccccc969696525252", "f7f7f7cccccc969696636363252525", "f7f7f7d9d9d9bdbdbd969696636363252525", "f7f7f7d9d9d9bdbdbd969696737373525252252525", "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525", "fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Greys.js.map b/dist/libs/d3-scale-chromatic/sequential-single/Greys.js.map
index 21ea9fc..02047e5 100644
--- a/dist/libs/d3-scale-chromatic/sequential-single/Greys.js.map
+++ b/dist/libs/d3-scale-chromatic/sequential-single/Greys.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-single/Greys.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;;;yBAULC,KAAKC,MAAL,C","file":"Greys.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-single/Greys.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;yBAULC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"Greys.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Oranges.js b/dist/libs/d3-scale-chromatic/sequential-single/Oranges.js
index e11f680..2ed7099 100644
--- a/dist/libs/d3-scale-chromatic/sequential-single/Oranges.js
+++ b/dist/libs/d3-scale-chromatic/sequential-single/Oranges.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("fee6cefdae6be6550d", "feeddefdbe85fd8d3cd94701", "feeddefdbe85fd8d3ce6550da63603", "feeddefdd0a2fdae6bfd8d3ce6550da63603", "feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04", "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04", "fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Oranges.js.map b/dist/libs/d3-scale-chromatic/sequential-single/Oranges.js.map
index 1b2fafb..eb55fd4 100644
--- a/dist/libs/d3-scale-chromatic/sequential-single/Oranges.js.map
+++ b/dist/libs/d3-scale-chromatic/sequential-single/Oranges.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-single/Oranges.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;;;yBAULC,KAAKC,MAAL,C","file":"Oranges.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-single/Oranges.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;yBAULC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"Oranges.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Purples.js b/dist/libs/d3-scale-chromatic/sequential-single/Purples.js
index b3d71f3..0cddc36 100644
--- a/dist/libs/d3-scale-chromatic/sequential-single/Purples.js
+++ b/dist/libs/d3-scale-chromatic/sequential-single/Purples.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("efedf5bcbddc756bb1", "f2f0f7cbc9e29e9ac86a51a3", "f2f0f7cbc9e29e9ac8756bb154278f", "f2f0f7dadaebbcbddc9e9ac8756bb154278f", "f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486", "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486", "fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Purples.js.map b/dist/libs/d3-scale-chromatic/sequential-single/Purples.js.map
index bf8daf5..22673ea 100644
--- a/dist/libs/d3-scale-chromatic/sequential-single/Purples.js.map
+++ b/dist/libs/d3-scale-chromatic/sequential-single/Purples.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-single/Purples.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;;;yBAULC,KAAKC,MAAL,C","file":"Purples.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-single/Purples.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;yBAULC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"Purples.js"}
\ No newline at end of file
diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Reds.js b/dist/libs/d3-scale-chromatic/sequential-single/Reds.js
index 8f9b751..5e158d7 100644
--- a/dist/libs/d3-scale-chromatic/sequential-single/Reds.js
+++ b/dist/libs/d3-scale-chromatic/sequential-single/Reds.js
@@ -13,8 +13,6 @@ System.register(["../colors", "../ramp"], function (_export, _context) {
execute: function () {
_export("scheme", scheme = new Array(3).concat("fee0d2fc9272de2d26", "fee5d9fcae91fb6a4acb181d", "fee5d9fcae91fb6a4ade2d26a50f15", "fee5d9fcbba1fc9272fb6a4ade2d26a50f15", "fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d", "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d", "fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d").map(colors));
- _export("scheme", scheme);
-
_export("default", ramp(scheme));
}
};
diff --git a/dist/libs/d3-scale-chromatic/sequential-single/Reds.js.map b/dist/libs/d3-scale-chromatic/sequential-single/Reds.js.map
index 246c412..7351023 100644
--- a/dist/libs/d3-scale-chromatic/sequential-single/Reds.js.map
+++ b/dist/libs/d3-scale-chromatic/sequential-single/Reds.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-single/Reds.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,Y;;AACAC,U;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;;;yBAULC,KAAKC,MAAL,C","file":"Reds.js","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n"]}
\ No newline at end of file
+{"version":3,"sources":["../../../../src/libs/d3-scale-chromatic/sequential-single/Reds.js"],"names":["colors","ramp","scheme","Array","concat","map"],"mappings":";;;;;;;;AAAOA,MAAAA,M;;AACAC,MAAAA,I;;;wBAEIC,M,GAAS,IAAIC,KAAJ,CAAU,CAAV,EAAaC,MAAb,CAClB,oBADkB,EAElB,0BAFkB,EAGlB,gCAHkB,EAIlB,sCAJkB,EAKlB,4CALkB,EAMlB,kDANkB,EAOlB,wDAPkB,EAQlBC,GARkB,CAQdL,MARc,C;;yBAULC,IAAI,CAACC,MAAD,C","sourcesContent":["import colors from \"../colors\";\nimport ramp from \"../ramp\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n"],"file":"Reds.js"}
\ No newline at end of file
diff --git a/dist/module.js b/dist/module.js
index 8a23a5a..408fd0d 100644
--- a/dist/module.js
+++ b/dist/module.js
@@ -1,23 +1,643 @@
-'use strict';
+"use strict";
-System.register(['app/plugins/sdk', './status_heatmap_ctrl'], function (_export, _context) {
+System.register(["lodash", "./color_legend", "app/core/utils/kbn", "app/plugins/sdk", "./graph", "./rendering", "./options_editor", "./color_mode_discrete"], function (_export, _context) {
"use strict";
- var loadPluginCss, StatusHeatmapCtrl;
+ var _, kbn, loadPluginCss, MetricsPanelCtrl, Card, rendering, statusHeatmapOptionsEditor, ColorModeDiscrete, CANVAS, SVG, VALUE_INDEX, TIME_INDEX, renderer, colorSchemes, colorModes, opacityScales, StatusHeatmapCtrl;
+
+ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
+
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+ function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }
+
+ function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }
+
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
return {
- setters: [function (_appPluginsSdk) {
+ setters: [function (_lodash) {
+ _ = _lodash.default;
+ }, function (_color_legend) {}, function (_appCoreUtilsKbn) {
+ kbn = _appCoreUtilsKbn.default;
+ }, function (_appPluginsSdk) {
loadPluginCss = _appPluginsSdk.loadPluginCss;
- }, function (_status_heatmap_ctrl) {
- StatusHeatmapCtrl = _status_heatmap_ctrl.StatusHeatmapCtrl;
+ MetricsPanelCtrl = _appPluginsSdk.MetricsPanelCtrl;
+ }, function (_graph) {
+ Card = _graph.Card;
+ }, function (_rendering) {
+ rendering = _rendering.default;
+ }, function (_options_editor) {
+ statusHeatmapOptionsEditor = _options_editor.statusHeatmapOptionsEditor;
+ }, function (_color_mode_discrete) {
+ ColorModeDiscrete = _color_mode_discrete.ColorModeDiscrete;
}],
execute: function () {
-
+ CANVAS = 'CANVAS';
+ SVG = 'SVG';
+ VALUE_INDEX = 0;
+ TIME_INDEX = 1;
+ renderer = CANVAS;
+ colorSchemes = [// Diverging
+ {
+ name: 'Spectral',
+ value: 'interpolateSpectral',
+ invert: 'always'
+ }, {
+ name: 'RdYlGn',
+ value: 'interpolateRdYlGn',
+ invert: 'always'
+ }, {
+ name: 'GnYlRd',
+ value: 'interpolateGnYlRd',
+ invert: 'always'
+ }, // Sequential (Single Hue)
+ {
+ name: 'Blues',
+ value: 'interpolateBlues',
+ invert: 'dark'
+ }, {
+ name: 'Greens',
+ value: 'interpolateGreens',
+ invert: 'dark'
+ }, {
+ name: 'Greys',
+ value: 'interpolateGreys',
+ invert: 'dark'
+ }, {
+ name: 'Oranges',
+ value: 'interpolateOranges',
+ invert: 'dark'
+ }, {
+ name: 'Purples',
+ value: 'interpolatePurples',
+ invert: 'dark'
+ }, {
+ name: 'Reds',
+ value: 'interpolateReds',
+ invert: 'dark'
+ }, // Sequential (Multi-Hue)
+ {
+ name: 'BuGn',
+ value: 'interpolateBuGn',
+ invert: 'dark'
+ }, {
+ name: 'BuPu',
+ value: 'interpolateBuPu',
+ invert: 'dark'
+ }, {
+ name: 'GnBu',
+ value: 'interpolateGnBu',
+ invert: 'dark'
+ }, {
+ name: 'OrRd',
+ value: 'interpolateOrRd',
+ invert: 'dark'
+ }, {
+ name: 'PuBuGn',
+ value: 'interpolatePuBuGn',
+ invert: 'dark'
+ }, {
+ name: 'PuBu',
+ value: 'interpolatePuBu',
+ invert: 'dark'
+ }, {
+ name: 'PuRd',
+ value: 'interpolatePuRd',
+ invert: 'dark'
+ }, {
+ name: 'RdPu',
+ value: 'interpolateRdPu',
+ invert: 'dark'
+ }, {
+ name: 'YlGnBu',
+ value: 'interpolateYlGnBu',
+ invert: 'dark'
+ }, {
+ name: 'YlGn',
+ value: 'interpolateYlGn',
+ invert: 'dark'
+ }, {
+ name: 'YlOrBr',
+ value: 'interpolateYlOrBr',
+ invert: 'dark'
+ }, {
+ name: 'YlOrRd',
+ value: 'interpolateYlOrRd',
+ invert: 'dark'
+ }];
+ colorModes = ['opacity', 'spectrum', 'discrete'];
+ opacityScales = ['linear', 'sqrt'];
loadPluginCss({
dark: 'plugins/flant-statusmap-panel/css/statusmap.dark.css',
light: 'plugins/flant-statusmap-panel/css/statusmap.light.css'
});
- _export('PanelCtrl', StatusHeatmapCtrl);
+ _export("PanelCtrl", _export("StatusHeatmapCtrl", StatusHeatmapCtrl =
+ /*#__PURE__*/
+ function (_MetricsPanelCtrl) {
+ StatusHeatmapCtrl.$inject = ["$scope", "$injector", "annotationsSrv"];
+
+ _inherits(StatusHeatmapCtrl, _MetricsPanelCtrl);
+
+ /** @ngInject */
+ function StatusHeatmapCtrl($scope, $injector, annotationsSrv) {
+ var _this;
+
+ _classCallCheck(this, StatusHeatmapCtrl);
+
+ _this = _possibleConstructorReturn(this, _getPrototypeOf(StatusHeatmapCtrl).call(this, $scope, $injector));
+ _this.annotationsSrv = annotationsSrv;
+
+ _defineProperty(_assertThisInitialized(_this), "opacityScales", []);
+
+ _defineProperty(_assertThisInitialized(_this), "colorModes", []);
+
+ _defineProperty(_assertThisInitialized(_this), "colorSchemes", []);
+
+ _defineProperty(_assertThisInitialized(_this), "unitFormats", void 0);
+
+ _defineProperty(_assertThisInitialized(_this), "data", void 0);
+
+ _defineProperty(_assertThisInitialized(_this), "cardsData", void 0);
+
+ _defineProperty(_assertThisInitialized(_this), "graph", void 0);
+
+ _defineProperty(_assertThisInitialized(_this), "multipleValues", void 0);
+
+ _defineProperty(_assertThisInitialized(_this), "noColorDefined", void 0);
+
+ _defineProperty(_assertThisInitialized(_this), "discreteHelper", void 0);
+
+ _defineProperty(_assertThisInitialized(_this), "dataWarnings", void 0);
+
+ _defineProperty(_assertThisInitialized(_this), "annotations", []);
+
+ _defineProperty(_assertThisInitialized(_this), "annotationsPromise", void 0);
+
+ _defineProperty(_assertThisInitialized(_this), "panelDefaults", {
+ // datasource name, null = default datasource
+ datasource: null,
+ // color mode
+ color: {
+ mode: 'spectrum',
+ cardColor: '#b4ff00',
+ colorScale: 'sqrt',
+ exponent: 0.5,
+ colorScheme: 'interpolateGnYlRd',
+ // discrete mode settings
+ defaultColor: '#757575',
+ thresholds: [] // manual colors
+
+ },
+ // buckets settings
+ cards: {
+ cardMinWidth: 5,
+ cardVSpacing: 2,
+ cardHSpacing: 2,
+ cardRound: null
+ },
+ xAxis: {
+ show: true,
+ showWeekends: true,
+ minBucketWidthToShowWeekends: 4,
+ showCrosshair: true,
+ labelFormat: '%a %m/%d'
+ },
+ yAxis: {
+ show: true,
+ showCrosshair: false
+ },
+ tooltip: {
+ show: true
+ },
+ legend: {
+ show: true
+ },
+ data: {
+ unitFormat: 'short',
+ decimals: null
+ },
+ // how null points should be handled
+ nullPointMode: 'as empty',
+ yAxisSort: 'metrics',
+ highlightCards: true,
+ useMax: true
+ });
+
+ _.defaultsDeep(_this.panel, _this.panelDefaults);
+
+ _this.opacityScales = opacityScales;
+ _this.colorModes = colorModes;
+ _this.colorSchemes = colorSchemes; // default graph width for discrete card width calculation
+
+ _this.graph = {
+ "chartWidth": -1
+ };
+ _this.multipleValues = false;
+ _this.noColorDefined = false;
+ _this.discreteHelper = new ColorModeDiscrete($scope);
+ _this.dataWarnings = {
+ "noColorDefined": {
+ title: 'Data has value with undefined color',
+ tip: 'Check metric values, color values or define a new color'
+ },
+ "multipleValues": {
+ title: 'Data has multiple values for one target',
+ tip: 'Change targets definitions or set "use max value"'
+ }
+ };
+ _this.annotations = [];
+
+ _this.events.on('render', _this.onRender.bind(_assertThisInitialized(_this)));
+
+ _this.events.on('data-received', _this.onDataReceived.bind(_assertThisInitialized(_this)));
+
+ _this.events.on('data-error', _this.onDataError.bind(_assertThisInitialized(_this)));
+
+ _this.events.on('data-snapshot-load', _this.onDataReceived.bind(_assertThisInitialized(_this)));
+
+ _this.events.on('init-edit-mode', _this.onInitEditMode.bind(_assertThisInitialized(_this)));
+
+ _this.events.on('refresh', _this.postRefresh.bind(_assertThisInitialized(_this))); // custom event from rendering.js
+
+
+ _this.events.on('render-complete', _this.onRenderComplete.bind(_assertThisInitialized(_this)));
+
+ return _this;
+ }
+
+ _createClass(StatusHeatmapCtrl, [{
+ key: "onRenderComplete",
+ value: function onRenderComplete(data) {
+ this.graph.chartWidth = data.chartWidth;
+ this.renderingCompleted();
+ }
+ }, {
+ key: "getChartWidth",
+ value: function getChartWidth() {
+ var wndWidth = $(window).width(); // gripPos.w is a width in grid's measurements. Grid size in Grafana is 24.
+
+ var panelWidthFactor = this.panel.gridPos.w / 24;
+ var panelWidth = Math.ceil(wndWidth * panelWidthFactor); // approximate chartWidth because y axis ticks not rendered yet on first data receive.
+
+ var chartWidth = _.max([panelWidth - 200, panelWidth / 2]);
+
+ return chartWidth;
+ } // override calculateInterval for discrete color mode
+
+ }, {
+ key: "calculateInterval",
+ value: function calculateInterval() {
+ var chartWidth = this.getChartWidth();
+ var minCardWidth = this.panel.cards.cardMinWidth;
+ var minSpacing = this.panel.cards.cardHSpacing;
+ var maxCardsCount = Math.ceil((chartWidth - minCardWidth) / (minCardWidth + minSpacing));
+ var intervalMs;
+ var rangeMs = this.range.to.valueOf() - this.range.from.valueOf(); // this is minimal interval! kbn.round_interval will lower it.
+
+ intervalMs = this.discreteHelper.roundIntervalCeil(rangeMs / maxCardsCount); // Calculate low limit of interval
+
+ var lowLimitMs = 1; // 1 millisecond default low limit
+
+ var intervalOverride = this.panel.interval; // if no panel interval check datasource
+
+ if (intervalOverride) {
+ intervalOverride = this.templateSrv.replace(intervalOverride, this.panel.scopedVars);
+ } else if (this.datasource && this.datasource.interval) {
+ intervalOverride = this.datasource.interval;
+ }
+
+ if (intervalOverride) {
+ if (intervalOverride[0] === '>') {
+ intervalOverride = intervalOverride.slice(1);
+ }
+
+ lowLimitMs = kbn.interval_to_ms(intervalOverride);
+ }
+
+ if (lowLimitMs > intervalMs) {
+ intervalMs = lowLimitMs;
+ }
+
+ var interval = kbn.secondsToHms(intervalMs / 1000);
+ this.intervalMs = intervalMs;
+ this.interval = interval;
+ }
+ }, {
+ key: "issueQueries",
+ value: function issueQueries(datasource) {
+ var _this2 = this;
+
+ this.annotationsPromise = this.annotationsSrv.getAnnotations({
+ dashboard: this.dashboard,
+ panel: this.panel,
+ range: this.range
+ });
+ /* Wait for annotationSrv requests to get datasources to
+ * resolve before issuing queries. This allows the annotations
+ * service to fire annotations queries before graph queries
+ * (but not wait for completion). This resolves
+ * issue 11806.
+ */
+ // 5.x before 5.4 doesn't have datasourcePromises.
+
+ if ("undefined" !== typeof this.annotationsSrv.datasourcePromises) {
+ return this.annotationsSrv.datasourcePromises.then(function (r) {
+ return _this2.issueQueriesWithInterval(datasource, _this2.interval);
+ });
+ } else {
+ return this.issueQueriesWithInterval(datasource, this.interval);
+ }
+ } // Grafana 6.2 (and older) is using this.interval for queries,
+ // but Grafana 6.3+ is calculating interval again in queryRunner,
+ // so we need to save-restore this.panel.interval.
+
+ }, {
+ key: "issueQueriesWithInterval",
+ value: function issueQueriesWithInterval(datasource, interval) {
+ var origInterval = this.panel.interval;
+ this.panel.interval = this.interval;
+
+ var res = _get(_getPrototypeOf(StatusHeatmapCtrl.prototype), "issueQueries", this).call(this, datasource);
+
+ this.panel.interval = origInterval;
+ return res;
+ }
+ }, {
+ key: "onDataReceived",
+ value: function onDataReceived(dataList) {
+ var _this3 = this;
+
+ this.data = dataList;
+ this.cardsData = this.convertToCards(this.data);
+ console.log("OnDataReceived");
+ this.annotationsPromise.then(function (result) {
+ _this3.loading = false; //this.alertState = result.alertState;
+
+ if (result.annotations && result.annotations.length > 0) {
+ _this3.annotations = result.annotations;
+ } else {
+ _this3.annotations = [];
+ }
+
+ console.log("annotationsPromise result " + _this3.annotations.length + " annotations");
+
+ _this3.render();
+ }, function () {
+ _this3.loading = false;
+ _this3.annotations = [];
+ console.log("annotationsPromise onrejected");
+
+ _this3.render();
+ }); //this.render();
+ }
+ }, {
+ key: "onInitEditMode",
+ value: function onInitEditMode() {
+ this.addEditorTab('Options', statusHeatmapOptionsEditor, 2);
+ this.unitFormats = kbn.getUnitFormats();
+ }
+ }, {
+ key: "onRender",
+ value: function onRender() {
+ if (!this.range || !this.data) {
+ return;
+ }
+
+ this.multipleValues = false;
+
+ if (!this.panel.useMax) {
+ if (this.cardsData) {
+ this.multipleValues = this.cardsData.multipleValues;
+ }
+ }
+
+ this.noColorDefined = false;
+
+ if (this.panel.color.mode === 'discrete') {
+ this.discreteHelper.updateCardsValuesHasColorInfo();
+
+ if (this.cardsData) {
+ this.noColorDefined = this.cardsData.noColorDefined;
+ }
+ }
+ }
+ }, {
+ key: "onCardColorChange",
+ value: function onCardColorChange(newColor) {
+ this.panel.color.cardColor = newColor;
+ this.render();
+ }
+ }, {
+ key: "onDataError",
+ value: function onDataError() {
+ this.data = [];
+ this.annotations = [];
+ this.render();
+ }
+ }, {
+ key: "postRefresh",
+ value: function postRefresh() {
+ this.noColorDefined = false;
+ }
+ }, {
+ key: "onEditorAddThreshold",
+ value: function onEditorAddThreshold() {
+ this.panel.color.thresholds.push({
+ color: this.panel.defaultColor
+ });
+ this.render();
+ }
+ }, {
+ key: "onEditorRemoveThreshold",
+ value: function onEditorRemoveThreshold(index) {
+ this.panel.color.thresholds.splice(index, 1);
+ this.render();
+ }
+ }, {
+ key: "onEditorRemoveThresholds",
+ value: function onEditorRemoveThresholds() {
+ this.panel.color.thresholds = [];
+ this.render();
+ }
+ }, {
+ key: "onEditorAddThreeLights",
+ value: function onEditorAddThreeLights() {
+ this.panel.color.thresholds.push({
+ color: "red",
+ value: 2,
+ tooltip: "error"
+ });
+ this.panel.color.thresholds.push({
+ color: "yellow",
+ value: 1,
+ tooltip: "warning"
+ });
+ this.panel.color.thresholds.push({
+ color: "green",
+ value: 0,
+ tooltip: "ok"
+ });
+ this.render();
+ }
+ /* https://ethanschoonover.com/solarized/ */
+
+ }, {
+ key: "onEditorAddSolarized",
+ value: function onEditorAddSolarized() {
+ this.panel.color.thresholds.push({
+ color: "#b58900",
+ value: 0,
+ tooltip: "yellow"
+ });
+ this.panel.color.thresholds.push({
+ color: "#cb4b16",
+ value: 1,
+ tooltip: "orange"
+ });
+ this.panel.color.thresholds.push({
+ color: "#dc322f",
+ value: 2,
+ tooltip: "red"
+ });
+ this.panel.color.thresholds.push({
+ color: "#d33682",
+ value: 3,
+ tooltip: "magenta"
+ });
+ this.panel.color.thresholds.push({
+ color: "#6c71c4",
+ value: 4,
+ tooltip: "violet"
+ });
+ this.panel.color.thresholds.push({
+ color: "#268bd2",
+ value: 5,
+ tooltip: "blue"
+ });
+ this.panel.color.thresholds.push({
+ color: "#2aa198",
+ value: 6,
+ tooltip: "cyan"
+ });
+ this.panel.color.thresholds.push({
+ color: "#859900",
+ value: 7,
+ tooltip: "green"
+ });
+ this.render();
+ }
+ }, {
+ key: "link",
+ value: function link(scope, elem, attrs, ctrl) {
+ rendering(scope, elem, attrs, ctrl);
+ } // group values into buckets by target
+
+ }, {
+ key: "convertToCards",
+ value: function convertToCards(data) {
+ var cardsData = {
+ cards: [],
+ xBucketSize: 0,
+ yBucketSize: 0,
+ maxValue: 0,
+ minValue: 0,
+ multipleValues: false,
+ noColorDefined: false,
+ targets: [],
+ // array of available unique targets
+ targetIndex: {} // indices in data array for each of available unique targets
+
+ };
+
+ if (!data || data.length == 0) {
+ return cardsData;
+ } // Collect uniq timestamps from data and spread over targets and timestamps
+ // collect uniq targets and their indices
+
+
+ _.map(data, function (d, i) {
+ cardsData.targetIndex[d.target] = _.concat(_.toArray(cardsData.targetIndex[d.target]), i);
+ }); // TODO add some logic for targets heirarchy
+
+
+ cardsData.targets = _.keys(cardsData.targetIndex);
+ cardsData.yBucketSize = cardsData.targets.length; // Maximum number of buckets over x axis
+
+ cardsData.xBucketSize = _.max(_.map(data, function (d) {
+ return d.datapoints.length;
+ })); // Collect all values for each bucket from datapoints with similar target.
+ // TODO aggregate values into buckets over datapoint[TIME_INDEX] not over datapoint index (j).
+
+ for (var i = 0; i < cardsData.targets.length; i++) {
+ var target = cardsData.targets[i];
+
+ for (var j = 0; j < cardsData.xBucketSize; j++) {
+ var card = new Card();
+ card.id = i * cardsData.xBucketSize + j;
+ card.values = [];
+ card.y = target;
+ card.x = -1; // collect values from all timeseries with target
+
+ for (var si = 0; si < cardsData.targetIndex[target].length; si++) {
+ var s = data[cardsData.targetIndex[target][si]];
+
+ if (s.datapoints.length <= j) {
+ continue;
+ }
+
+ var datapoint = s.datapoints[j];
+
+ if (card.values.length === 0) {
+ card.x = datapoint[TIME_INDEX];
+ }
+
+ card.values.push(datapoint[VALUE_INDEX]);
+ }
+
+ card.minValue = _.min(card.values);
+ card.maxValue = _.max(card.values);
+
+ if (card.values.length > 1) {
+ cardsData.multipleValues = true;
+ card.multipleValues = true;
+ card.value = card.maxValue; // max value by default
+ } else {
+ card.value = card.maxValue; // max value by default
+ }
+
+ if (cardsData.maxValue < card.maxValue) cardsData.maxValue = card.maxValue;
+ if (cardsData.minValue > card.minValue) cardsData.minValue = card.minValue;
+
+ if (card.x != -1) {
+ cardsData.cards.push(card);
+ }
+ }
+ }
+
+ return cardsData;
+ }
+ }]);
+
+ return StatusHeatmapCtrl;
+ }(MetricsPanelCtrl)));
+
+ _defineProperty(StatusHeatmapCtrl, "templateUrl", 'module.html');
}
};
});
diff --git a/dist/module.js.map b/dist/module.js.map
index 4358619..363aa82 100644
--- a/dist/module.js.map
+++ b/dist/module.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../src/module.js"],"names":["loadPluginCss","StatusHeatmapCtrl","dark","light"],"mappings":";;;;;;;;AAAQA,mB,kBAAAA,a;;AACCC,uB,wBAAAA,iB;;;;AAETD,oBAAc;AACZE,cAAM,sDADM;AAEZC,eAAO;AAFK,OAAd;;2BAMEF,iB","file":"module.js","sourcesContent":["import {loadPluginCss} from 'app/plugins/sdk';\nimport { StatusHeatmapCtrl } from './status_heatmap_ctrl';\n\nloadPluginCss({\n dark: 'plugins/flant-statusmap-panel/css/statusmap.dark.css',\n light: 'plugins/flant-statusmap-panel/css/statusmap.light.css'\n});\n\nexport {\n StatusHeatmapCtrl as PanelCtrl\n};\n"]}
\ No newline at end of file
+{"version":3,"sources":["../src/module.ts"],"names":["_","kbn","loadPluginCss","MetricsPanelCtrl","Card","rendering","statusHeatmapOptionsEditor","ColorModeDiscrete","CANVAS","SVG","VALUE_INDEX","TIME_INDEX","renderer","colorSchemes","name","value","invert","colorModes","opacityScales","dark","light","StatusHeatmapCtrl","$scope","$injector","annotationsSrv","datasource","color","mode","cardColor","colorScale","exponent","colorScheme","defaultColor","thresholds","cards","cardMinWidth","cardVSpacing","cardHSpacing","cardRound","xAxis","show","showWeekends","minBucketWidthToShowWeekends","showCrosshair","labelFormat","yAxis","tooltip","legend","data","unitFormat","decimals","nullPointMode","yAxisSort","highlightCards","useMax","defaultsDeep","panel","panelDefaults","graph","multipleValues","noColorDefined","discreteHelper","dataWarnings","title","tip","annotations","events","on","onRender","bind","onDataReceived","onDataError","onInitEditMode","postRefresh","onRenderComplete","chartWidth","renderingCompleted","wndWidth","$","window","width","panelWidthFactor","gridPos","w","panelWidth","Math","ceil","max","getChartWidth","minCardWidth","minSpacing","maxCardsCount","intervalMs","rangeMs","range","to","valueOf","from","roundIntervalCeil","lowLimitMs","intervalOverride","interval","templateSrv","replace","scopedVars","slice","interval_to_ms","secondsToHms","annotationsPromise","getAnnotations","dashboard","datasourcePromises","then","r","issueQueriesWithInterval","origInterval","res","dataList","cardsData","convertToCards","console","log","result","loading","length","render","addEditorTab","unitFormats","getUnitFormats","updateCardsValuesHasColorInfo","newColor","push","index","splice","scope","elem","attrs","ctrl","xBucketSize","yBucketSize","maxValue","minValue","targets","targetIndex","map","d","i","target","concat","toArray","keys","datapoints","j","card","id","values","y","x","si","s","datapoint","min"],"mappings":"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","sourcesContent":["// Libraries\nimport _ from 'lodash';\nimport { auto } from 'angular';\n\n// Components\nimport './color_legend';\n\n// Utils\nimport kbn from 'app/core/utils/kbn';\nimport {loadPluginCss} from 'app/plugins/sdk';\n\n// Types\nimport { MetricsPanelCtrl } from 'app/plugins/sdk';\nimport { contextSrv } from 'app/core/core';\nimport { AnnotationsSrv } from 'app/features/annotations/annotations_srv';\n\nimport {CardsStorage, Card} from './graph';\nimport rendering from './rendering';\n// import aggregates, { aggregatesMap } from './aggregates';\n// import fragments, { fragmentsMap } from './fragments';\n// import { labelFormats } from './xAxisLabelFormats';\nimport {statusHeatmapOptionsEditor} from './options_editor';\nimport {ColorModeDiscrete} from \"./color_mode_discrete\";\n\n\nconst CANVAS = 'CANVAS';\nconst SVG = 'SVG';\nconst VALUE_INDEX = 0,\n TIME_INDEX = 1;\n\nconst renderer = CANVAS;\n\nconst colorSchemes = [\n // Diverging\n { name: 'Spectral', value: 'interpolateSpectral', invert: 'always' },\n { name: 'RdYlGn', value: 'interpolateRdYlGn', invert: 'always' },\n { name: 'GnYlRd', value: 'interpolateGnYlRd', invert: 'always' },\n\n // Sequential (Single Hue)\n { name: 'Blues', value: 'interpolateBlues', invert: 'dark' },\n { name: 'Greens', value: 'interpolateGreens', invert: 'dark' },\n { name: 'Greys', value: 'interpolateGreys', invert: 'dark' },\n { name: 'Oranges', value: 'interpolateOranges', invert: 'dark' },\n { name: 'Purples', value: 'interpolatePurples', invert: 'dark' },\n { name: 'Reds', value: 'interpolateReds', invert: 'dark' },\n\n // Sequential (Multi-Hue)\n { name: 'BuGn', value: 'interpolateBuGn', invert: 'dark' },\n { name: 'BuPu', value: 'interpolateBuPu', invert: 'dark' },\n { name: 'GnBu', value: 'interpolateGnBu', invert: 'dark' },\n { name: 'OrRd', value: 'interpolateOrRd', invert: 'dark' },\n { name: 'PuBuGn', value: 'interpolatePuBuGn', invert: 'dark' },\n { name: 'PuBu', value: 'interpolatePuBu', invert: 'dark' },\n { name: 'PuRd', value: 'interpolatePuRd', invert: 'dark' },\n { name: 'RdPu', value: 'interpolateRdPu', invert: 'dark' },\n { name: 'YlGnBu', value: 'interpolateYlGnBu', invert: 'dark' },\n { name: 'YlGn', value: 'interpolateYlGn', invert: 'dark' },\n { name: 'YlOrBr', value: 'interpolateYlOrBr', invert: 'dark' },\n { name: 'YlOrRd', value: 'interpolateYlOrRd', invert: 'dark' }\n];\n\nlet colorModes = ['opacity', 'spectrum', 'discrete'];\nlet opacityScales = ['linear', 'sqrt'];\n\ninterface DataWarning {\n title: string;\n tip: string;\n}\n\ninterface DataWarnings {\n noColorDefined: DataWarning;\n multipleValues: DataWarning;\n}\n\ninterface ColorThreshold {\n\n}\n\n\n\n\nloadPluginCss({\n dark: 'plugins/flant-statusmap-panel/css/statusmap.dark.css',\n light: 'plugins/flant-statusmap-panel/css/statusmap.light.css'\n});\n\nclass StatusHeatmapCtrl extends MetricsPanelCtrl {\n static templateUrl = 'module.html';\n\n opacityScales: any = [];\n colorModes: any = [];\n colorSchemes: any = [];\n unitFormats: any;\n data: any;\n cardsData: any;\n graph: any;\n multipleValues: boolean;\n noColorDefined: boolean;\n discreteHelper: ColorModeDiscrete;\n dataWarnings: DataWarnings;\n\n annotations: object[] = [];\n annotationsPromise: any;\n\n panelDefaults: any = {\n // datasource name, null = default datasource\n datasource: null,\n // color mode\n color: {\n mode: 'spectrum',\n cardColor: '#b4ff00',\n colorScale: 'sqrt',\n exponent: 0.5,\n colorScheme: 'interpolateGnYlRd',\n // discrete mode settings\n defaultColor: '#757575',\n thresholds: [] // manual colors\n },\n // buckets settings\n cards: {\n cardMinWidth: 5,\n cardVSpacing: 2,\n cardHSpacing: 2,\n cardRound: null\n },\n xAxis: {\n show: true,\n showWeekends: true,\n minBucketWidthToShowWeekends: 4,\n showCrosshair: true,\n labelFormat: '%a %m/%d'\n },\n yAxis: {\n show: true,\n showCrosshair: false\n },\n tooltip: {\n show: true\n },\n legend: {\n show: true\n },\n data: {\n unitFormat: 'short',\n decimals: null\n },\n // how null points should be handled\n nullPointMode: 'as empty',\n yAxisSort: 'metrics',\n highlightCards: true,\n useMax: true\n };\n\n /** @ngInject */\n constructor($scope: any, $injector: auto.IInjectorService, private annotationsSrv: AnnotationsSrv) {\n super($scope, $injector);\n\n _.defaultsDeep(this.panel, this.panelDefaults);\n\n this.opacityScales = opacityScales;\n this.colorModes = colorModes;\n this.colorSchemes = colorSchemes;\n\n // default graph width for discrete card width calculation\n this.graph = {\n \"chartWidth\" : -1\n };\n\n this.multipleValues = false;\n this.noColorDefined = false;\n\n this.discreteHelper = new ColorModeDiscrete($scope);\n\n this.dataWarnings = {\n \"noColorDefined\": {\n title: 'Data has value with undefined color',\n tip: 'Check metric values, color values or define a new color',\n },\n \"multipleValues\": {\n title: 'Data has multiple values for one target',\n tip: 'Change targets definitions or set \"use max value\"',\n }\n };\n\n this.annotations = [];\n\n this.events.on('render', this.onRender.bind(this));\n this.events.on('data-received', this.onDataReceived.bind(this));\n this.events.on('data-error', this.onDataError.bind(this));\n this.events.on('data-snapshot-load', this.onDataReceived.bind(this));\n this.events.on('init-edit-mode', this.onInitEditMode.bind(this));\n this.events.on('refresh', this.postRefresh.bind(this));\n // custom event from rendering.js\n this.events.on('render-complete', this.onRenderComplete.bind(this));\n }\n\n onRenderComplete(data):void {\n this.graph.chartWidth = data.chartWidth;\n this.renderingCompleted();\n }\n\n getChartWidth():number {\n const wndWidth = $(window).width();\n // gripPos.w is a width in grid's measurements. Grid size in Grafana is 24.\n const panelWidthFactor = this.panel.gridPos.w / 24;\n const panelWidth = Math.ceil(wndWidth * panelWidthFactor);\n // approximate chartWidth because y axis ticks not rendered yet on first data receive.\n const chartWidth = _.max([\n panelWidth - 200,\n panelWidth/2\n ]);\n\n return chartWidth!;\n }\n\n // override calculateInterval for discrete color mode\n calculateInterval() {\n let chartWidth = this.getChartWidth();\n\n let minCardWidth = this.panel.cards.cardMinWidth;\n let minSpacing = this.panel.cards.cardHSpacing;\n let maxCardsCount = Math.ceil((chartWidth-minCardWidth) / (minCardWidth + minSpacing));\n\n let intervalMs;\n let rangeMs = this.range.to.valueOf() - this.range.from.valueOf();\n\n // this is minimal interval! kbn.round_interval will lower it.\n intervalMs = this.discreteHelper.roundIntervalCeil(rangeMs / maxCardsCount);\n\n // Calculate low limit of interval\n let lowLimitMs = 1; // 1 millisecond default low limit\n \n let intervalOverride = this.panel.interval;\n\n // if no panel interval check datasource\n if (intervalOverride) {\n intervalOverride = this.templateSrv.replace(intervalOverride, this.panel.scopedVars);\n } else if (this.datasource && this.datasource.interval) {\n intervalOverride = this.datasource.interval;\n }\n\n if (intervalOverride) {\n if (intervalOverride[0] === '>') {\n intervalOverride = intervalOverride.slice(1);\n }\n lowLimitMs = kbn.interval_to_ms(intervalOverride);\n }\n\n if (lowLimitMs > intervalMs) {\n intervalMs = lowLimitMs;\n }\n let interval = kbn.secondsToHms(intervalMs / 1000);\n\n this.intervalMs = intervalMs;\n this.interval = interval;\n }\n\n issueQueries(datasource: any) {\n this.annotationsPromise = this.annotationsSrv.getAnnotations({\n dashboard: this.dashboard,\n panel: this.panel,\n range: this.range,\n });\n\n /* Wait for annotationSrv requests to get datasources to\n * resolve before issuing queries. This allows the annotations\n * service to fire annotations queries before graph queries\n * (but not wait for completion). This resolves\n * issue 11806.\n */\n // 5.x before 5.4 doesn't have datasourcePromises. \n\n if (\"undefined\" !== typeof(this.annotationsSrv.datasourcePromises)) {\n return this.annotationsSrv.datasourcePromises.then(r => {\n return this.issueQueriesWithInterval(datasource, this.interval);\n });\n } else {\n return this.issueQueriesWithInterval(datasource, this.interval);\n }\n }\n\n // Grafana 6.2 (and older) is using this.interval for queries,\n // but Grafana 6.3+ is calculating interval again in queryRunner,\n // so we need to save-restore this.panel.interval.\n issueQueriesWithInterval(datasource: any, interval: any) {\n var origInterval = this.panel.interval;\n this.panel.interval = this.interval;\n var res = super.issueQueries(datasource);\n this.panel.interval = origInterval;\n return res;\n }\n\n\n onDataReceived(dataList: any) {\n this.data = dataList;\n this.cardsData = this.convertToCards(this.data);\n\n console.log(\"OnDataReceived\");\n\n this.annotationsPromise.then(\n (result: { alertState: any; annotations: any }) => {\n this.loading = false;\n //this.alertState = result.alertState;\n if (result.annotations && result.annotations.length > 0) {\n this.annotations = result.annotations;\n } else {\n this.annotations = [];\n }\n console.log(\"annotationsPromise result \" + this.annotations.length + \" annotations\");\n this.render();\n },\n () => {\n this.loading = false;\n this.annotations = [];\n console.log(\"annotationsPromise onrejected\");\n this.render();\n }\n );\n\n //this.render();\n }\n\n onInitEditMode() {\n this.addEditorTab('Options', statusHeatmapOptionsEditor, 2);\n this.unitFormats = kbn.getUnitFormats();\n }\n\n onRender() {\n if (!this.range || !this.data) { return; }\n\n this.multipleValues = false;\n if (!this.panel.useMax) {\n if (this.cardsData) {\n this.multipleValues = this.cardsData.multipleValues;\n }\n }\n\n this.noColorDefined = false;\n if (this.panel.color.mode === 'discrete') {\n this.discreteHelper.updateCardsValuesHasColorInfo();\n if (this.cardsData) {\n this.noColorDefined = this.cardsData.noColorDefined;\n }\n }\n }\n\n onCardColorChange(newColor) {\n this.panel.color.cardColor = newColor;\n this.render();\n }\n\n onDataError() {\n this.data = [];\n this.annotations = [];\n this.render();\n }\n\n postRefresh() {\n this.noColorDefined = false;\n }\n\n onEditorAddThreshold() {\n this.panel.color.thresholds.push({ color: this.panel.defaultColor });\n this.render();\n }\n\n onEditorRemoveThreshold(index:number) {\n this.panel.color.thresholds.splice(index, 1);\n this.render();\n }\n\n onEditorRemoveThresholds() {\n this.panel.color.thresholds = [];\n this.render();\n }\n\n onEditorAddThreeLights() {\n this.panel.color.thresholds.push({color: \"red\", value: 2, tooltip: \"error\" });\n this.panel.color.thresholds.push({color: \"yellow\", value: 1, tooltip: \"warning\" });\n this.panel.color.thresholds.push({color: \"green\", value: 0, tooltip: \"ok\" });\n this.render();\n }\n \n /* https://ethanschoonover.com/solarized/ */\n onEditorAddSolarized() {\n this.panel.color.thresholds.push({color: \"#b58900\", value: 0, tooltip: \"yellow\" });\n this.panel.color.thresholds.push({color: \"#cb4b16\", value: 1, tooltip: \"orange\" });\n this.panel.color.thresholds.push({color: \"#dc322f\", value: 2, tooltip: \"red\" });\n this.panel.color.thresholds.push({color: \"#d33682\", value: 3, tooltip: \"magenta\" });\n this.panel.color.thresholds.push({color: \"#6c71c4\", value: 4, tooltip: \"violet\" });\n this.panel.color.thresholds.push({color: \"#268bd2\", value: 5, tooltip: \"blue\" });\n this.panel.color.thresholds.push({color: \"#2aa198\", value: 6, tooltip: \"cyan\" });\n this.panel.color.thresholds.push({color: \"#859900\", value: 7, tooltip: \"green\" });\n this.render();\n }\n\n link(scope, elem, attrs, ctrl) {\n rendering(scope, elem, attrs, ctrl);\n }\n\n // group values into buckets by target\n convertToCards(data) {\n let cardsData = {\n cards: [],\n xBucketSize: 0,\n yBucketSize: 0,\n maxValue: 0,\n minValue: 0,\n multipleValues: false,\n noColorDefined: false,\n targets: [], // array of available unique targets\n targetIndex: {} // indices in data array for each of available unique targets\n };\n\n if (!data || data.length == 0) { return cardsData;}\n\n // Collect uniq timestamps from data and spread over targets and timestamps\n\n // collect uniq targets and their indices\n _.map(data, (d, i) => {\n cardsData.targetIndex[d.target] = _.concat(_.toArray(cardsData.targetIndex[d.target]), i)\n });\n\n // TODO add some logic for targets heirarchy\n cardsData.targets = _.keys(cardsData.targetIndex);\n cardsData.yBucketSize = cardsData.targets.length;\n // Maximum number of buckets over x axis\n cardsData.xBucketSize = _.max(_.map(data, d => d.datapoints.length));\n\n // Collect all values for each bucket from datapoints with similar target.\n // TODO aggregate values into buckets over datapoint[TIME_INDEX] not over datapoint index (j).\n for(let i = 0; i < cardsData.targets.length; i++) {\n let target = cardsData.targets[i];\n\n for (let j = 0; j < cardsData.xBucketSize; j++) {\n let card = new Card();\n card.id = i*cardsData.xBucketSize + j;\n card.values = [];\n card.y = target;\n card.x = -1;\n\n // collect values from all timeseries with target\n for (let si = 0; si < cardsData.targetIndex[target].length; si++) {\n let s = data[cardsData.targetIndex[target][si]];\n if (s.datapoints.length <= j) {\n continue;\n }\n let datapoint = s.datapoints[j];\n if (card.values.length === 0) {\n card.x = datapoint[TIME_INDEX];\n }\n card.values.push(datapoint[VALUE_INDEX]);\n }\n card.minValue = _.min(card.values);\n card.maxValue = _.max(card.values);\n if (card.values.length > 1) {\n cardsData.multipleValues = true;\n card.multipleValues = true;\n card.value = card.maxValue; // max value by default\n } else {\n card.value = card.maxValue; // max value by default\n }\n\n if (cardsData.maxValue < card.maxValue)\n cardsData.maxValue = card.maxValue;\n\n if (cardsData.minValue > card.minValue)\n cardsData.minValue = card.minValue;\n\n if (card.x != -1) {\n cardsData.cards.push(card);\n }\n }\n }\n\n return cardsData;\n }\n}\n\nexport {\n StatusHeatmapCtrl, StatusHeatmapCtrl as PanelCtrl\n};\n"],"file":"module.js"}
\ No newline at end of file
diff --git a/dist/options_editor.js b/dist/options_editor.js
index eecf006..995ce7f 100644
--- a/dist/options_editor.js
+++ b/dist/options_editor.js
@@ -1,15 +1,17 @@
-'use strict';
+"use strict";
-System.register(['app/core/utils/kbn'], function (_export, _context) {
+System.register(["app/core/utils/kbn"], function (_export, _context) {
"use strict";
- var kbn, _createClass, StatusHeatmapOptionsEditorCtrl;
+ var kbn, StatusHeatmapOptionsEditorCtrl;
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- }
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function statusHeatmapOptionsEditor() {
'use strict';
@@ -22,45 +24,34 @@ System.register(['app/core/utils/kbn'], function (_export, _context) {
};
}
- _export('statusHeatmapOptionsEditor', statusHeatmapOptionsEditor);
+ _export("statusHeatmapOptionsEditor", statusHeatmapOptionsEditor);
return {
setters: [function (_appCoreUtilsKbn) {
kbn = _appCoreUtilsKbn.default;
}],
execute: function () {
- _createClass = function () {
- function defineProperties(target, props) {
- for (var i = 0; i < props.length; i++) {
- var descriptor = props[i];
- descriptor.enumerable = descriptor.enumerable || false;
- descriptor.configurable = true;
- if ("value" in descriptor) descriptor.writable = true;
- Object.defineProperty(target, descriptor.key, descriptor);
- }
- }
-
- return function (Constructor, protoProps, staticProps) {
- if (protoProps) defineProperties(Constructor.prototype, protoProps);
- if (staticProps) defineProperties(Constructor, staticProps);
- return Constructor;
- };
- }();
-
- _export('StatusHeatmapOptionsEditorCtrl', StatusHeatmapOptionsEditorCtrl = function () {
+ _export("StatusHeatmapOptionsEditorCtrl", StatusHeatmapOptionsEditorCtrl =
+ /*#__PURE__*/
+ function () {
function StatusHeatmapOptionsEditorCtrl($scope) {
_classCallCheck(this, StatusHeatmapOptionsEditorCtrl);
+ _defineProperty(this, "panel", void 0);
+
+ _defineProperty(this, "panelCtrl", void 0);
+
+ _defineProperty(this, "unitFormats", void 0);
+
$scope.editor = this;
this.panelCtrl = $scope.ctrl;
this.panel = this.panelCtrl.panel;
this.unitFormats = kbn.getUnitFormats();
-
this.panelCtrl.render();
}
_createClass(StatusHeatmapOptionsEditorCtrl, [{
- key: 'setUnitFormat',
+ key: "setUnitFormat",
value: function setUnitFormat(subItem) {
this.panel.data.unitFormat = subItem.value;
this.panelCtrl.render();
@@ -69,8 +60,6 @@ System.register(['app/core/utils/kbn'], function (_export, _context) {
return StatusHeatmapOptionsEditorCtrl;
}());
-
- _export('StatusHeatmapOptionsEditorCtrl', StatusHeatmapOptionsEditorCtrl);
}
};
});
diff --git a/dist/options_editor.js.map b/dist/options_editor.js.map
index 105e78a..f41b297 100644
--- a/dist/options_editor.js.map
+++ b/dist/options_editor.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../src/options_editor.js"],"names":["statusHeatmapOptionsEditor","restrict","scope","templateUrl","controller","StatusHeatmapOptionsEditorCtrl","kbn","$scope","editor","panelCtrl","ctrl","panel","unitFormats","getUnitFormats","render","subItem","data","unitFormat","value"],"mappings":";;;;;;;;;;;;;AAkBO,WAASA,0BAAT,GAAsC;AAC3C;;AACA,WAAO;AACLC,gBAAU,GADL;AAELC,aAAO,IAFF;AAGLC,mBAAa,mEAHR;AAILC,kBAAYC;AAJP,KAAP;AAMD;;wCAReL,0B;;;;AAlBTM,S;;;;;;;;;;;;;;;;;;;;;gDAEMD,8B;AACX,gDAAYE,MAAZ,EAAoB;AAAA;;AAClBA,iBAAOC,MAAP,GAAgB,IAAhB;AACA,eAAKC,SAAL,GAAiBF,OAAOG,IAAxB;AACA,eAAKC,KAAL,GAAa,KAAKF,SAAL,CAAeE,KAA5B;AACA,eAAKC,WAAL,GAAmBN,IAAIO,cAAJ,EAAnB;;AAEA,eAAKJ,SAAL,CAAeK,MAAf;AACD;;;;wCAEaC,O,EAAS;AACrB,iBAAKJ,KAAL,CAAWK,IAAX,CAAgBC,UAAhB,GAA6BF,QAAQG,KAArC;AACA,iBAAKT,SAAL,CAAeK,MAAf;AACD","file":"options_editor.js","sourcesContent":["import kbn from 'app/core/utils/kbn';\n\nexport class StatusHeatmapOptionsEditorCtrl {\n constructor($scope) {\n $scope.editor = this;\n this.panelCtrl = $scope.ctrl;\n this.panel = this.panelCtrl.panel;\n this.unitFormats = kbn.getUnitFormats();\n\n this.panelCtrl.render();\n }\n\n setUnitFormat(subItem) {\n this.panel.data.unitFormat = subItem.value;\n this.panelCtrl.render();\n }\n}\n\nexport function statusHeatmapOptionsEditor() {\n 'use strict';\n return {\n restrict: 'E',\n scope: true,\n templateUrl: 'public/plugins/flant-statusmap-panel/partials/options_editor.html',\n controller: StatusHeatmapOptionsEditorCtrl,\n };\n}\n"]}
\ No newline at end of file
+{"version":3,"sources":["../src/options_editor.ts"],"names":["statusHeatmapOptionsEditor","restrict","scope","templateUrl","controller","StatusHeatmapOptionsEditorCtrl","kbn","$scope","editor","panelCtrl","ctrl","panel","unitFormats","getUnitFormats","render","subItem","data","unitFormat","value"],"mappings":";;;;;;;;;;;;;;;AAsBO,WAASA,0BAAT,GAAsC;AAC3C;;AACA,WAAO;AACLC,MAAAA,QAAQ,EAAE,GADL;AAELC,MAAAA,KAAK,EAAE,IAFF;AAGLC,MAAAA,WAAW,EAAE,mEAHR;AAILC,MAAAA,UAAU,EAAEC;AAJP,KAAP;AAMD;;wCAReL,0B;;;;AAtBTM,MAAAA,G;;;gDAEMD,8B;;;AAKX,gDAAYE,MAAZ,EAAoB;AAAA;;AAAA;;AAAA;;AAAA;;AAClBA,UAAAA,MAAM,CAACC,MAAP,GAAgB,IAAhB;AACA,eAAKC,SAAL,GAAiBF,MAAM,CAACG,IAAxB;AACA,eAAKC,KAAL,GAAa,KAAKF,SAAL,CAAeE,KAA5B;AACA,eAAKC,WAAL,GAAmBN,GAAG,CAACO,cAAJ,EAAnB;AAEA,eAAKJ,SAAL,CAAeK,MAAf;AACD;;;;wCAEaC,O,EAAS;AACrB,iBAAKJ,KAAL,CAAWK,IAAX,CAAgBC,UAAhB,GAA6BF,OAAO,CAACG,KAArC;AACA,iBAAKT,SAAL,CAAeK,MAAf;AACD","sourcesContent":["import kbn from 'app/core/utils/kbn';\n\nexport class StatusHeatmapOptionsEditorCtrl {\n panel: any;\n panelCtrl: any;\n unitFormats: any;\n\n constructor($scope) {\n $scope.editor = this;\n this.panelCtrl = $scope.ctrl;\n this.panel = this.panelCtrl.panel;\n this.unitFormats = kbn.getUnitFormats();\n\n this.panelCtrl.render();\n }\n\n setUnitFormat(subItem) {\n this.panel.data.unitFormat = subItem.value;\n this.panelCtrl.render();\n }\n}\n\nexport function statusHeatmapOptionsEditor() {\n 'use strict';\n return {\n restrict: 'E',\n scope: true,\n templateUrl: 'public/plugins/flant-statusmap-panel/partials/options_editor.html',\n controller: StatusHeatmapOptionsEditorCtrl,\n };\n}\n"],"file":"options_editor.js"}
\ No newline at end of file
diff --git a/dist/rendering.js b/dist/rendering.js
index 882b57c..90c3922 100644
--- a/dist/rendering.js
+++ b/dist/rendering.js
@@ -1,653 +1,22 @@
-'use strict';
+"use strict";
-System.register(['lodash', 'jquery', 'moment', 'app/core/utils/kbn', 'app/core/core', 'app/core/utils/ticks', 'd3', './libs/d3-scale-chromatic/index', './tooltip', './annotations'], function (_export, _context) {
+System.register(["lodash", "jquery", "moment", "app/core/utils/kbn", "app/core/core", "d3", "./libs/d3-scale-chromatic/index", "./tooltip", "./annotations"], function (_export, _context) {
"use strict";
- var _, $, moment, kbn, appEvents, contextSrv, tickStep, getScaledDecimals, getFlotTickSize, d3, d3ScaleChromatic, StatusHeatmapTooltip, AnnotationTooltip, MIN_CARD_SIZE, CARD_H_SPACING, CARD_V_SPACING, CARD_ROUND, DATA_RANGE_WIDING_FACTOR, DEFAULT_X_TICK_SIZE_PX, DEFAULT_Y_TICK_SIZE_PX, X_AXIS_TICK_PADDING, Y_AXIS_TICK_PADDING, MIN_SELECTION_WIDTH;
+ var _, $, moment, kbn, appEvents, contextSrv, d3, d3ScaleChromatic, StatusmapTooltip, AnnotationTooltip, MIN_CARD_SIZE, CARD_H_SPACING, CARD_V_SPACING, CARD_ROUND, DATA_RANGE_WIDING_FACTOR, DEFAULT_X_TICK_SIZE_PX, DEFAULT_Y_TICK_SIZE_PX, X_AXIS_TICK_PADDING, Y_AXIS_TICK_PADDING, MIN_SELECTION_WIDTH, StatusmapRenderer;
- function link(scope, elem, attrs, ctrl) {
- var data = void 0,
- cardsData = void 0,
- timeRange = void 0,
- panel = void 0,
- heatmap = void 0;
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- // $heatmap is JQuery object, but heatmap is D3
- var $heatmap = elem.find('.status-heatmap-panel');
- var tooltip = new StatusHeatmapTooltip($heatmap, scope);
- var annotationTooltip = new AnnotationTooltip($heatmap, scope);
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
- var width = void 0,
- height = void 0,
- yScale = void 0,
- xScale = void 0,
- chartWidth = void 0,
- chartHeight = void 0,
- chartTop = void 0,
- chartBottom = void 0,
- yAxisWidth = void 0,
- xAxisHeight = void 0,
- cardVSpacing = void 0,
- cardHSpacing = void 0,
- cardRound = void 0,
- cardWidth = void 0,
- cardHeight = void 0,
- colorScale = void 0,
- opacityScale = void 0,
- mouseUpHandler = void 0,
- xGridSize = void 0,
- yGridSize = void 0;
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
- var yOffset = 0;
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
- var selection = {
- active: false,
- x1: -1,
- x2: -1
- };
-
- var padding = { left: 0, right: 0, top: 0, bottom: 0 },
- margin = { left: 25, right: 15, top: 10, bottom: 20 },
- dataRangeWidingFactor = DATA_RANGE_WIDING_FACTOR;
-
- ctrl.events.on('render', function () {
- render();
- });
-
- function setElementHeight() {
- try {
- var height = ctrl.height || panel.height || ctrl.row.height;
- if (_.isString(height)) {
- height = parseInt(height.replace('px', ''), 10);
- }
-
- height -= panel.legend.show ? 32 : 10; // bottom padding and space for legend. Change margin in .status-heatmap-color-legend !
-
- $heatmap.css('height', height + 'px');
-
- return true;
- } catch (e) {
- // IE throws errors sometimes
- return false;
- }
- }
-
- function getYAxisWidth(elem) {
- var axis_text = elem.selectAll(".axis-y text").nodes();
- var max_text_width = _.max(_.map(axis_text, function (text) {
- // Use SVG getBBox method
- return text.getBBox().width;
- }));
-
- return Math.ceil(max_text_width);
- }
-
- function getXAxisHeight(elem) {
- var axis_line = elem.select(".axis-x line");
- if (!axis_line.empty()) {
- var axis_line_position = parseFloat(elem.select(".axis-x line").attr("y2"));
- var canvas_width = parseFloat(elem.attr("height"));
- return canvas_width - axis_line_position;
- } else {
- // Default height
- return 30;
- }
- }
-
- function addXAxis() {
- // Scale timestamps to cards centers
- scope.xScale = xScale = d3.scaleTime().domain([timeRange.from, timeRange.to]).range([xGridSize / 2, chartWidth - xGridSize / 2]);
-
- var ticks = chartWidth / DEFAULT_X_TICK_SIZE_PX;
- var grafanaTimeFormatter = grafanaTimeFormat(ticks, timeRange.from, timeRange.to);
- var timeFormat = void 0;
- var dashboardTimeZone = ctrl.dashboard.getTimezone();
- if (dashboardTimeZone === 'utc') {
- timeFormat = d3.utcFormat(grafanaTimeFormatter);
- } else {
- timeFormat = d3.timeFormat(grafanaTimeFormatter);
- }
-
- var xAxis = d3.axisBottom(xScale).ticks(ticks).tickFormat(timeFormat).tickPadding(X_AXIS_TICK_PADDING).tickSize(chartHeight);
-
- var posY = chartTop;
- var posX = yAxisWidth;
-
- heatmap.append("g").attr("class", "axis axis-x").attr("transform", "translate(" + posX + "," + posY + ")").call(xAxis);
-
- // Remove horizontal line in the top of axis labels (called domain in d3)
- heatmap.select(".axis-x").select(".domain").remove();
- }
-
- // divide chart height by ticks for cards drawing
- function getYScale(ticks) {
- var range = [];
- var step = chartHeight / ticks.length;
- // svg has y=0 on the top, so top card should have a minimal value in range
- range.push(step);
- for (var i = 1; i < ticks.length; i++) {
- range.push(step * (i + 1));
- }
- return d3.scaleOrdinal().domain(ticks).range(range);
- }
-
- // divide chart height by ticks with offset for ticks drawing
- function getYAxisScale(ticks) {
- var range = [];
- var step = chartHeight / ticks.length;
- // svg has y=0 on the top, so top tick should have a minimal value in range
- range.push(yOffset);
- for (var i = 1; i < ticks.length; i++) {
- range.push(step * i + yOffset);
- }
- return d3.scaleOrdinal().domain(ticks).range(range);
- }
-
- function addYAxis() {
- var ticks = _.uniq(_.map(data, function (d) {
- return d.target;
- }));
-
- // Set default Y min and max if no data
- if (_.isEmpty(data)) {
- ticks = [''];
- }
-
- if (panel.yAxisSort == 'a → z') {
- ticks.sort(function (a, b) {
- return a.localeCompare(b, 'en', { ignorePunctuation: false, numeric: true });
- });
- } else if (panel.yAxisSort == 'z → a') {
- ticks.sort(function (b, a) {
- return a.localeCompare(b, 'en', { ignorePunctuation: false, numeric: true });
- });
- }
-
- var yAxisScale = getYAxisScale(ticks);
- scope.yScale = yScale = getYScale(ticks);
-
- var yAxis = d3.axisLeft(yAxisScale).tickValues(ticks).tickSizeInner(0 - width).tickPadding(Y_AXIS_TICK_PADDING);
-
- heatmap.append("g").attr("class", "axis axis-y").call(yAxis);
-
- // Calculate Y axis width first, then move axis into visible area
- var posY = margin.top;
- var posX = getYAxisWidth(heatmap) + Y_AXIS_TICK_PADDING;
- heatmap.select(".axis-y").attr("transform", "translate(" + posX + "," + posY + ")");
-
- // Remove vertical line in the right of axis labels (called domain in d3)
- heatmap.select(".axis-y").select(".domain").remove();
- heatmap.select(".axis-y").selectAll(".tick line").remove();
- }
-
- // Wide Y values range and adjust to bucket size
- function wideYAxisRange(min, max, tickInterval) {
- var y_widing = (max * (dataRangeWidingFactor - 1) - min * (dataRangeWidingFactor - 1)) / 2;
- var y_min = void 0,
- y_max = void 0;
-
- if (tickInterval === 0) {
- y_max = max * dataRangeWidingFactor;
- y_min = min - min * (dataRangeWidingFactor - 1);
- tickInterval = (y_max - y_min) / 2;
- } else {
- y_max = Math.ceil((max + y_widing) / tickInterval) * tickInterval;
- y_min = Math.floor((min - y_widing) / tickInterval) * tickInterval;
- }
-
- // Don't wide axis below 0 if all values are positive
- if (min >= 0 && y_min < 0) {
- y_min = 0;
- }
-
- return { y_min: y_min, y_max: y_max };
- }
-
- function tickValueFormatter(decimals) {
- var scaledDecimals = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
-
- var format = panel.yAxis.format;
- return function (value) {
- return kbn.valueFormats[format](value, decimals, scaledDecimals);
- };
- }
-
- // Create svg element, add axes and
- // calculate sizes for cards drawing
- function addHeatmapCanvas() {
- var heatmap_elem = $heatmap[0];
-
- width = Math.floor($heatmap.width()) - padding.right;
- height = Math.floor($heatmap.height()) - padding.bottom;
-
- if (heatmap) {
- heatmap.remove();
- }
-
- heatmap = d3.select(heatmap_elem).append("svg").attr("width", width).attr("height", height);
-
- chartHeight = height - margin.top - margin.bottom;
- chartTop = margin.top;
- chartBottom = chartTop + chartHeight;
-
- cardHSpacing = panel.cards.cardHSpacing !== null ? panel.cards.cardHSpacing : CARD_H_SPACING;
- cardVSpacing = panel.cards.cardVSpacing !== null ? panel.cards.cardVSpacing : CARD_V_SPACING;
- cardRound = panel.cards.cardRound !== null ? panel.cards.cardRound : CARD_ROUND;
-
- // calculate yOffset for YAxis
- yGridSize = Math.floor(chartHeight / cardsData.yBucketSize);
- cardHeight = yGridSize ? yGridSize - cardVSpacing : 0;
- yOffset = cardHeight / 2;
-
- addYAxis();
-
- yAxisWidth = getYAxisWidth(heatmap) + Y_AXIS_TICK_PADDING;
- chartWidth = width - yAxisWidth - margin.right;
-
- // TODO allow per-y cardWidth!
- // we need to fill chartWidth with xBucketSize cards.
- xGridSize = chartWidth / (cardsData.xBucketSize + 1);
- cardWidth = xGridSize - cardHSpacing;
-
- addXAxis();
- xAxisHeight = getXAxisHeight(heatmap);
-
- if (!panel.yAxis.show) {
- heatmap.select(".axis-y").selectAll("line").style("opacity", 0);
- }
-
- if (!panel.xAxis.show) {
- heatmap.select(".axis-x").selectAll("line").style("opacity", 0);
- }
- }
-
- function addHeatmap() {
- addHeatmapCanvas();
-
- var maxValue = panel.color.max || cardsData.maxValue;
- var minValue = panel.color.min || cardsData.minValue;
-
- if (panel.color.mode !== 'discrete') {
- colorScale = getColorScale(maxValue, minValue);
- }
- setOpacityScale(maxValue);
-
- var cards = heatmap.selectAll(".status-heatmap-card").data(cardsData.cards);
- cards.append("title");
- cards = cards.enter().append("rect").attr("cardId", function (c) {
- return c.id;
- }).attr("x", getCardX).attr("width", getCardWidth).attr("y", getCardY).attr("height", getCardHeight).attr("rx", cardRound).attr("ry", cardRound).attr("class", "bordered status-heatmap-card").style("fill", getCardColor).style("stroke", getCardColor).style("stroke-width", 0)
- //.style("stroke-width", getCardStrokeWidth)
- //.style("stroke-dasharray", "3,3")
- .style("opacity", getCardOpacity);
-
- var $cards = $heatmap.find(".status-heatmap-card");
- $cards.on("mouseenter", function (event) {
- tooltip.mouseOverBucket = true;
- highlightCard(event);
- }).on("mouseleave", function (event) {
- tooltip.mouseOverBucket = false;
- resetCardHighLight(event);
- });
-
- _renderAnnotations();
-
- ctrl.events.emit('render-complete', {
- "chartWidth": chartWidth
- });
- }
-
- function highlightCard(event) {
- var color = d3.select(event.target).style("fill");
- var highlightColor = d3.color(color).darker(2);
- var strokeColor = d3.color(color).brighter(4);
- var current_card = d3.select(event.target);
- tooltip.originalFillColor = color;
- current_card.style("fill", highlightColor).style("stroke", strokeColor).style("stroke-width", 1);
- }
-
- function resetCardHighLight(event) {
- d3.select(event.target).style("fill", tooltip.originalFillColor).style("stroke", tooltip.originalFillColor).style("stroke-width", 0);
- }
-
- function getColorScale(maxValue) {
- var minValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
-
- var colorScheme = _.find(ctrl.colorSchemes, { value: panel.color.colorScheme });
- var colorInterpolator = d3ScaleChromatic[colorScheme.value];
- var colorScaleInverted = colorScheme.invert === 'always' || colorScheme.invert === 'dark' && !contextSrv.user.lightTheme;
-
- if (maxValue == minValue) maxValue = minValue + 1;
-
- var start = colorScaleInverted ? maxValue : minValue;
- var end = colorScaleInverted ? minValue : maxValue;
-
- return d3.scaleSequential(colorInterpolator).domain([start, end]);
- }
-
- function setOpacityScale(maxValue) {
- if (panel.color.colorScale === 'linear') {
- opacityScale = d3.scaleLinear().domain([0, maxValue]).range([0, 1]);
- } else if (panel.color.colorScale === 'sqrt') {
- opacityScale = d3.scalePow().exponent(panel.color.exponent).domain([0, maxValue]).range([0, 1]);
- }
- }
-
- function getCardX(d) {
- var x = void 0;
- // cx is the center of the card. Card should be placed to the left.
- var cx = xScale(d.x);
-
- if (cx - cardWidth / 2 < 0) {
- x = yAxisWidth + cardHSpacing / 2;
- } else {
- x = yAxisWidth + cx - cardWidth / 2;
- }
-
- return x;
- }
-
- // xScale returns card center. Adjust cardWidth in case of overlaping.
- function getCardWidth(d) {
- var w = void 0;
- var cx = xScale(d.x);
-
- if (cx < cardWidth / 2) {
- // Center should not exceed half of card.
- // Cut card to the left to prevent overlay of y axis.
- var cutted_width = cx - cardHSpacing / 2 + cardWidth / 2;
- w = cutted_width > 0 ? cutted_width : 0;
- } else if (chartWidth - cx < cardWidth / 2) {
- // Cut card to the right to prevent overlay of right graph edge.
- w = cardWidth / 2 + (chartWidth - cx - cardHSpacing / 2);
- } else {
- w = cardWidth;
- }
-
- // Card width should be MIN_CARD_SIZE at least
- w = Math.max(w, MIN_CARD_SIZE);
-
- if (cardHSpacing == 0) {
- w = w + 1;
- }
-
- return w;
- }
-
- function getCardY(d) {
- return yScale(d.y) + chartTop - cardHeight - cardVSpacing / 2;
- }
-
- function getCardHeight(d) {
- var ys = yScale(d.y);
- var y = ys + chartTop - cardHeight - cardVSpacing / 2;
- var h = cardHeight;
-
- // Cut card height to prevent overlay
- if (y < chartTop) {
- h = ys - cardVSpacing / 2;
- } else if (ys > chartBottom) {
- h = chartBottom - y;
- } else if (y + cardHeight > chartBottom) {
- h = chartBottom - y;
- }
-
- // Height can't be more than chart height
- h = Math.min(h, chartHeight);
- // Card height should be MIN_CARD_SIZE at least
- h = Math.max(h, MIN_CARD_SIZE);
-
- if (cardVSpacing == 0) {
- h = h + 1;
- }
-
- return h;
- }
-
- function getCardColor(d) {
- if (panel.color.mode === 'opacity') {
- return panel.color.cardColor;
- } else if (panel.color.mode === 'spectrum') {
- return colorScale(d.value);
- } else if (panel.color.mode === 'discrete') {
- return ctrl.discreteHelper.getBucketColor(d.values);
- }
- }
-
- function getCardOpacity(d) {
- if (panel.nullPointMode === 'as empty' && d.value == null) {
- return 0;
- }
- if (panel.color.mode === 'opacity') {
- return opacityScale(d.value);
- } else {
- return 1;
- }
- }
-
- function getCardStrokeWidth(d) {
- if (panel.color.mode === 'discrete') {
- return '1';
- }
- return '0';
- }
-
- /////////////////////////////
- // Selection and crosshair //
- /////////////////////////////
-
- // Shared crosshair and tooltip
- appEvents.on('graph-hover', function (event) {
- drawSharedCrosshair(event.pos);
- }, scope);
-
- appEvents.on('graph-hover-clear', function () {
- clearCrosshair();
- }, scope);
-
- function onMouseDown(event) {
- selection.active = true;
- selection.x1 = event.offsetX;
-
- mouseUpHandler = function mouseUpHandler() {
- onMouseUp();
- };
-
- $(document).one("mouseup", mouseUpHandler);
- }
-
- function onMouseUp() {
- $(document).unbind("mouseup", mouseUpHandler);
- mouseUpHandler = null;
- selection.active = false;
-
- var selectionRange = Math.abs(selection.x2 - selection.x1);
- if (selection.x2 >= 0 && selectionRange > MIN_SELECTION_WIDTH) {
- var timeFrom = xScale.invert(Math.min(selection.x1, selection.x2) - yAxisWidth - xGridSize / 2);
- var timeTo = xScale.invert(Math.max(selection.x1, selection.x2) - yAxisWidth - xGridSize / 2);
-
- ctrl.timeSrv.setTime({
- from: moment.utc(timeFrom),
- to: moment.utc(timeTo)
- });
- }
-
- clearSelection();
- }
-
- function onMouseLeave() {
- appEvents.emit('graph-hover-clear');
- clearCrosshair();
- //annotationTooltip.destroy();
- }
-
- function onMouseMove(event) {
- if (!heatmap) {
- return;
- }
-
- if (selection.active) {
- // Clear crosshair and tooltip
- clearCrosshair();
- tooltip.destroy();
- annotationTooltip.destroy();
-
- selection.x2 = limitSelection(event.offsetX);
- drawSelection(selection.x1, selection.x2);
- } else {
- emitGraphHoverEvet(event);
- drawCrosshair(event.offsetX);
- tooltip.show(event); //, data);
- annotationTooltip.show(event);
- }
- }
-
- function emitGraphHoverEvet(event) {
- var x = xScale.invert(event.offsetX - yAxisWidth - xGridSize / 2).valueOf();
- var y = yScale(event.offsetY);
- var pos = {
- pageX: event.pageX,
- pageY: event.pageY,
- x: x, x1: x,
- y: y, y1: y,
- panelRelY: null
- };
-
- // Set minimum offset to prevent showing legend from another panel
- pos.panelRelY = Math.max(event.offsetY / height, 0.001);
-
- // broadcast to other graph panels that we are hovering
- appEvents.emit('graph-hover', { pos: pos, panel: panel });
- }
-
- function limitSelection(x2) {
- x2 = Math.max(x2, yAxisWidth);
- x2 = Math.min(x2, chartWidth + yAxisWidth);
- return x2;
- }
-
- function drawSelection(posX1, posX2) {
- if (heatmap) {
- heatmap.selectAll(".status-heatmap-selection").remove();
- var selectionX = Math.min(posX1, posX2);
- var selectionWidth = Math.abs(posX1 - posX2);
-
- if (selectionWidth > MIN_SELECTION_WIDTH) {
- heatmap.append("rect").attr("class", "status-heatmap-selection").attr("x", selectionX).attr("width", selectionWidth).attr("y", chartTop).attr("height", chartHeight);
- }
- }
- }
-
- function clearSelection() {
- selection.x1 = -1;
- selection.x2 = -1;
-
- if (heatmap) {
- heatmap.selectAll(".status-heatmap-selection").remove();
- }
- }
-
- function drawCrosshair(position) {
- if (heatmap) {
- heatmap.selectAll(".status-heatmap-crosshair").remove();
-
- var posX = position;
- posX = Math.max(posX, yAxisWidth);
- posX = Math.min(posX, chartWidth + yAxisWidth);
-
- heatmap.append("g").attr("class", "status-heatmap-crosshair").attr("transform", "translate(" + posX + ",0)").append("line").attr("x1", 1).attr("y1", chartTop).attr("x2", 1).attr("y2", chartBottom).attr("stroke-width", 1);
- }
- }
-
- // map time to X
- function drawSharedCrosshair(pos) {
- if (heatmap && ctrl.dashboard.graphTooltip !== 0) {
- var posX = xScale(pos.x) + yAxisWidth;
- drawCrosshair(posX);
- }
- }
-
- function clearCrosshair() {
- if (heatmap) {
- heatmap.selectAll(".status-heatmap-crosshair").remove();
- }
- }
-
- function render() {
- data = ctrl.data;
- panel = ctrl.panel;
- timeRange = ctrl.range;
- cardsData = ctrl.cardsData;
-
- if (!data || !cardsData || !setElementHeight()) {
- return;
- }
-
- // Draw default axes and return if no data
- if (_.isEmpty(cardsData.cards)) {
- addHeatmapCanvas();
- return;
- }
-
- addHeatmap();
- scope.yAxisWidth = yAxisWidth;
- scope.xAxisHeight = xAxisHeight;
- scope.chartHeight = chartHeight;
- scope.chartWidth = chartWidth;
- scope.chartTop = chartTop;
- }
-
- // Register selection listeners
- $heatmap.on("mousedown", onMouseDown);
- $heatmap.on("mousemove", onMouseMove);
- $heatmap.on("mouseleave", onMouseLeave);
-
- function _renderAnnotations() {
- if (!ctrl.annotations || ctrl.annotations.length == 0) {
- return;
- }
-
- if (!heatmap) {
- return;
- }
-
- var annoData = _.map(ctrl.annotations, function (d, i) {
- return { "x": Math.floor(yAxisWidth + xScale(d.time)), "id": i, "anno": d.source };
- });
-
- var anno = heatmap.append("g").attr("class", "statusmap-annotations").attr("transform", "translate(0.5,0)").selectAll(".statusmap-annotations").data(annoData).enter().append("g");
- anno.append("line")
- //.attr("class", "statusmap-annotation-tick")
- .attr("x1", function (d) {
- return d.x;
- }).attr("y1", chartTop).attr("x2", function (d) {
- return d.x;
- }).attr("y2", chartBottom).style("stroke", function (d) {
- return d.anno.iconColor;
- }).style("stroke-width", 1).style("stroke-dasharray", "3,3");
- anno.append("polygon").attr("points", function (d) {
- return [[d.x, chartBottom + 1], [d.x - 5, chartBottom + 6], [d.x + 5, chartBottom + 6]].join(" ");
- }).style("stroke-width", 0).style("fill", function (d) {
- return d.anno.iconColor;
- });
- // Polygons didn't fire mouseevents
- anno.append("rect").attr("x", function (d) {
- return d.x - 5;
- }).attr("width", 10).attr("y", chartBottom + 1).attr("height", 5).attr("class", "statusmap-annotation-tick").attr("annoId", function (d) {
- return d.id;
- }).style("opacity", 0);
-
- var $ticks = $heatmap.find(".statusmap-annotation-tick");
- $ticks.on("mouseenter", function (event) {
- annotationTooltip.mouseOverAnnotationTick = true;
- }).on("mouseleave", function (event) {
- annotationTooltip.mouseOverAnnotationTick = false;
- });
- }
+ function rendering(scope, elem, attrs, ctrl) {
+ return new StatusmapRenderer(scope, elem, attrs, ctrl);
}
- _export('default', link);
-
function grafanaTimeFormat(ticks, min, max) {
if (min && max && ticks) {
var range = max - min;
@@ -658,20 +27,27 @@ System.register(['lodash', 'jquery', 'moment', 'app/core/utils/kbn', 'app/core/c
if (secPerTick <= 45) {
return "%H:%M:%S";
}
+
if (secPerTick <= 7200 || range <= oneDay) {
return "%H:%M";
}
+
if (secPerTick <= 80000) {
return "%m/%d %H:%M";
}
+
if (secPerTick <= 2419200 || range <= oneYear) {
return "%m/%d";
}
+
return "%Y-%m";
}
return "%H:%M";
}
+
+ _export("default", rendering);
+
return {
setters: [function (_lodash) {
_ = _lodash.default;
@@ -684,16 +60,12 @@ System.register(['lodash', 'jquery', 'moment', 'app/core/utils/kbn', 'app/core/c
}, function (_appCoreCore) {
appEvents = _appCoreCore.appEvents;
contextSrv = _appCoreCore.contextSrv;
- }, function (_appCoreUtilsTicks) {
- tickStep = _appCoreUtilsTicks.tickStep;
- getScaledDecimals = _appCoreUtilsTicks.getScaledDecimals;
- getFlotTickSize = _appCoreUtilsTicks.getFlotTickSize;
}, function (_d) {
- d3 = _d.default;
+ d3 = _d;
}, function (_libsD3ScaleChromaticIndex) {
d3ScaleChromatic = _libsD3ScaleChromaticIndex;
}, function (_tooltip) {
- StatusHeatmapTooltip = _tooltip.StatusHeatmapTooltip;
+ StatusmapTooltip = _tooltip.StatusmapTooltip;
}, function (_annotations) {
AnnotationTooltip = _annotations.AnnotationTooltip;
}],
@@ -708,6 +80,792 @@ System.register(['lodash', 'jquery', 'moment', 'app/core/utils/kbn', 'app/core/c
X_AXIS_TICK_PADDING = 10;
Y_AXIS_TICK_PADDING = 5;
MIN_SELECTION_WIDTH = 2;
+
+ _export("StatusmapRenderer", StatusmapRenderer =
+ /*#__PURE__*/
+ function () {
+ function StatusmapRenderer(scope, elem, attrs, ctrl) {
+ _classCallCheck(this, StatusmapRenderer);
+
+ this.scope = scope;
+ this.elem = elem;
+ this.ctrl = ctrl;
+
+ _defineProperty(this, "width", 0);
+
+ _defineProperty(this, "height", 0);
+
+ _defineProperty(this, "yScale", void 0);
+
+ _defineProperty(this, "xScale", void 0);
+
+ _defineProperty(this, "chartWidth", 0);
+
+ _defineProperty(this, "chartHeight", 0);
+
+ _defineProperty(this, "chartTop", 0);
+
+ _defineProperty(this, "chartBottom", 0);
+
+ _defineProperty(this, "yAxisWidth", 0);
+
+ _defineProperty(this, "xAxisHeight", 0);
+
+ _defineProperty(this, "cardVSpacing", 0);
+
+ _defineProperty(this, "cardHSpacing", 0);
+
+ _defineProperty(this, "cardRound", 0);
+
+ _defineProperty(this, "cardWidth", 0);
+
+ _defineProperty(this, "cardHeight", 0);
+
+ _defineProperty(this, "colorScale", void 0);
+
+ _defineProperty(this, "opacityScale", void 0);
+
+ _defineProperty(this, "mouseUpHandler", void 0);
+
+ _defineProperty(this, "xGridSize", 0);
+
+ _defineProperty(this, "yGridSize", 0);
+
+ _defineProperty(this, "data", void 0);
+
+ _defineProperty(this, "cardsData", void 0);
+
+ _defineProperty(this, "panel", void 0);
+
+ _defineProperty(this, "$heatmap", void 0);
+
+ _defineProperty(this, "tooltip", void 0);
+
+ _defineProperty(this, "annotationTooltip", void 0);
+
+ _defineProperty(this, "heatmap", void 0);
+
+ _defineProperty(this, "timeRange", void 0);
+
+ _defineProperty(this, "yOffset", void 0);
+
+ _defineProperty(this, "selection", void 0);
+
+ _defineProperty(this, "padding", void 0);
+
+ _defineProperty(this, "margin", void 0);
+
+ _defineProperty(this, "dataRangeWidingFactor", DATA_RANGE_WIDING_FACTOR);
+
+ // $heatmap is JQuery object, but heatmap is D3
+ this.$heatmap = this.elem.find('.status-heatmap-panel');
+ this.tooltip = new StatusmapTooltip(this.$heatmap, this.scope);
+ this.annotationTooltip = new AnnotationTooltip(this.$heatmap, this.scope);
+ this.yOffset = 0;
+ this.selection = {
+ active: false,
+ x1: -1,
+ x2: -1
+ };
+ this.padding = {
+ left: 0,
+ right: 0,
+ top: 0,
+ bottom: 0
+ };
+ this.margin = {
+ left: 25,
+ right: 15,
+ top: 10,
+ bottom: 20
+ };
+ this.ctrl.events.on('render', this.onRender.bind(this));
+ this.ctrl.tickValueFormatter = this.tickValueFormatter.bind(this); /////////////////////////////
+ // Selection and crosshair //
+ /////////////////////////////
+ // Shared crosshair and tooltip
+
+ appEvents.on('graph-hover', this.onGraphHover.bind(this), this.scope);
+ appEvents.on('graph-hover-clear', this.onGraphHoverClear.bind(this), this.scope); // Register selection listeners
+
+ this.$heatmap.on('mousedown', this.onMouseDown.bind(this));
+ this.$heatmap.on('mousemove', this.onMouseMove.bind(this));
+ this.$heatmap.on('mouseleave', this.onMouseLeave.bind(this));
+ }
+
+ _createClass(StatusmapRenderer, [{
+ key: "onGraphHoverClear",
+ value: function onGraphHoverClear() {
+ this.clearCrosshair();
+ }
+ }, {
+ key: "onGraphHover",
+ value: function onGraphHover(event) {
+ this.drawSharedCrosshair(event.pos);
+ }
+ }, {
+ key: "onRender",
+ value: function onRender() {
+ this.render();
+ this.ctrl.renderingCompleted();
+ }
+ }, {
+ key: "setElementHeight",
+ value: function setElementHeight() {
+ try {
+ var height = this.ctrl.height || this.panel.height || this.ctrl.row.height;
+
+ if (_.isString(height)) {
+ height = parseInt(height.replace('px', ''), 10);
+ }
+
+ height -= this.panel.legend.show ? 32 : 10; // bottom padding and space for legend. Change margin in .status-heatmap-color-legend !
+
+ this.$heatmap.css('height', height + 'px');
+ return true;
+ } catch (e) {
+ // IE throws errors sometimes
+ return false;
+ }
+ }
+ }, {
+ key: "getYAxisWidth",
+ value: function getYAxisWidth(elem) {
+ var axisText = elem.selectAll(".axis-y text").nodes();
+
+ var maxTextWidth = _.max(_.map(axisText, function (text) {
+ // Use SVG getBBox method
+ return text.getBBox().width;
+ }));
+
+ return Math.ceil(maxTextWidth);
+ }
+ }, {
+ key: "getXAxisHeight",
+ value: function getXAxisHeight(elem) {
+ var axisLine = elem.select(".axis-x line");
+
+ if (!axisLine.empty()) {
+ var axisLinePosition = parseFloat(elem.select(".axis-x line").attr("y2"));
+ var canvasWidth = parseFloat(elem.attr("height"));
+ return canvasWidth - axisLinePosition;
+ } else {
+ // Default height
+ return 30;
+ }
+ }
+ }, {
+ key: "addXAxis",
+ value: function addXAxis() {
+ // Scale timestamps to cards centers
+ this.scope.xScale = this.xScale = d3.scaleTime().domain([this.timeRange.from, this.timeRange.to]).range([this.xGridSize / 2, this.chartWidth - this.xGridSize / 2]);
+ var ticks = this.chartWidth / DEFAULT_X_TICK_SIZE_PX;
+ var grafanaTimeFormatter = grafanaTimeFormat(ticks, this.timeRange.from, this.timeRange.to);
+ var timeFormat;
+ var dashboardTimeZone = this.ctrl.dashboard.getTimezone();
+
+ if (dashboardTimeZone === 'utc') {
+ timeFormat = d3.utcFormat(grafanaTimeFormatter);
+ } else {
+ timeFormat = d3.timeFormat(grafanaTimeFormatter);
+ }
+
+ var xAxis = d3.axisBottom(this.xScale).ticks(ticks).tickFormat(timeFormat).tickPadding(X_AXIS_TICK_PADDING).tickSize(this.chartHeight);
+ var posY = this.chartTop; // this.margin.top !
+
+ var posX = this.yAxisWidth;
+ this.heatmap.append("g").attr("class", "axis axis-x").attr("transform", "translate(" + posX + "," + posY + ")").call(xAxis); // Remove horizontal line in the top of axis labels (called domain in d3)
+
+ this.heatmap.select(".axis-x").select(".domain").remove();
+ } // divide chart height by ticks for cards drawing
+
+ }, {
+ key: "getYScale",
+ value: function getYScale(ticks) {
+ var range = [];
+ var step = this.chartHeight / ticks.length; // svg has y=0 on the top, so top card should have a minimal value in range
+
+ range.push(step);
+
+ for (var i = 1; i < ticks.length; i++) {
+ range.push(step * (i + 1));
+ }
+
+ return d3.scaleOrdinal().domain(ticks).range(range);
+ } // divide chart height by ticks with offset for ticks drawing
+
+ }, {
+ key: "getYAxisScale",
+ value: function getYAxisScale(ticks) {
+ var range = [];
+ var step = this.chartHeight / ticks.length; // svg has y=0 on the top, so top tick should have a minimal value in range
+
+ range.push(this.yOffset);
+
+ for (var i = 1; i < ticks.length; i++) {
+ range.push(step * i + this.yOffset);
+ }
+
+ return d3.scaleOrdinal().domain(ticks).range(range);
+ }
+ }, {
+ key: "addYAxis",
+ value: function addYAxis() {
+ var ticks = _.uniq(_.map(this.data, function (d) {
+ return d.target;
+ })); // Set default Y min and max if no data
+
+
+ if (_.isEmpty(this.data)) {
+ ticks = [''];
+ }
+
+ if (this.panel.yAxisSort == 'a → z') {
+ ticks.sort(function (a, b) {
+ return a.localeCompare(b, 'en', {
+ ignorePunctuation: false,
+ numeric: true
+ });
+ });
+ } else if (this.panel.yAxisSort == 'z → a') {
+ ticks.sort(function (b, a) {
+ return a.localeCompare(b, 'en', {
+ ignorePunctuation: false,
+ numeric: true
+ });
+ });
+ }
+
+ var yAxisScale = this.getYAxisScale(ticks);
+ this.scope.yScale = this.yScale = this.getYScale(ticks);
+ var yAxis = d3.axisLeft(yAxisScale).tickValues(ticks).tickSizeInner(0 - this.width).tickPadding(Y_AXIS_TICK_PADDING);
+ this.heatmap.append("g").attr("class", "axis axis-y").call(yAxis); // Calculate Y axis width first, then move axis into visible area
+
+ var posY = this.margin.top;
+ var posX = this.getYAxisWidth(this.heatmap) + Y_AXIS_TICK_PADDING;
+ this.heatmap.select(".axis-y").attr("transform", "translate(" + posX + "," + posY + ")"); // Remove vertical line in the right of axis labels (called domain in d3)
+
+ this.heatmap.select(".axis-y").select(".domain").remove();
+ this.heatmap.select(".axis-y").selectAll(".tick line").remove();
+ } // Wide Y values range and adjust to bucket size
+
+ }, {
+ key: "wideYAxisRange",
+ value: function wideYAxisRange(min, max, tickInterval) {
+ var y_widing = (max * (this.dataRangeWidingFactor - 1) - min * (this.dataRangeWidingFactor - 1)) / 2;
+ var y_min, y_max;
+
+ if (tickInterval === 0) {
+ y_max = max * this.dataRangeWidingFactor;
+ y_min = min - min * (this.dataRangeWidingFactor - 1);
+ tickInterval = (y_max - y_min) / 2;
+ } else {
+ y_max = Math.ceil((max + y_widing) / tickInterval) * tickInterval;
+ y_min = Math.floor((min - y_widing) / tickInterval) * tickInterval;
+ } // Don't wide axis below 0 if all values are positive
+
+
+ if (min >= 0 && y_min < 0) {
+ y_min = 0;
+ }
+
+ return {
+ y_min: y_min,
+ y_max: y_max
+ };
+ }
+ }, {
+ key: "tickValueFormatter",
+ value: function tickValueFormatter(decimals) {
+ var scaledDecimals = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
+ var format = this.panel.yAxis.format;
+ return function (value) {
+ return kbn.valueFormats[format](value, decimals, scaledDecimals);
+ };
+ } // Create svg element, add axes and
+ // calculate sizes for cards drawing
+
+ }, {
+ key: "addHeatmapCanvas",
+ value: function addHeatmapCanvas() {
+ var heatmap_elem = this.$heatmap[0];
+ this.width = Math.floor(this.$heatmap.width()) - this.padding.right;
+ this.height = Math.floor(this.$heatmap.height()) - this.padding.bottom;
+
+ if (this.heatmap) {
+ this.heatmap.remove();
+ }
+
+ this.heatmap = d3.select(heatmap_elem).append("svg").attr("width", this.width).attr("height", this.height);
+ this.chartHeight = this.height - this.margin.top - this.margin.bottom;
+ this.chartTop = this.margin.top;
+ this.chartBottom = this.chartTop + this.chartHeight;
+ this.cardHSpacing = this.panel.cards.cardHSpacing !== null ? this.panel.cards.cardHSpacing : CARD_H_SPACING;
+ this.cardVSpacing = this.panel.cards.cardVSpacing !== null ? this.panel.cards.cardVSpacing : CARD_V_SPACING;
+ this.cardRound = this.panel.cards.cardRound !== null ? this.panel.cards.cardRound : CARD_ROUND; // calculate yOffset for YAxis
+
+ this.yGridSize = Math.floor(this.chartHeight / this.cardsData.yBucketSize);
+ this.cardHeight = this.yGridSize ? this.yGridSize - this.cardVSpacing : 0;
+ this.yOffset = this.cardHeight / 2;
+ this.addYAxis();
+ this.yAxisWidth = this.getYAxisWidth(this.heatmap) + Y_AXIS_TICK_PADDING;
+ this.chartWidth = this.width - this.yAxisWidth - this.margin.right; // TODO allow per-y cardWidth!
+ // we need to fill chartWidth with xBucketSize cards.
+
+ this.xGridSize = this.chartWidth / (this.cardsData.xBucketSize + 1);
+ this.cardWidth = this.xGridSize - this.cardHSpacing;
+ this.addXAxis();
+ this.xAxisHeight = this.getXAxisHeight(this.heatmap);
+
+ if (!this.panel.yAxis.show) {
+ this.heatmap.select(".axis-y").selectAll("line").style("opacity", 0);
+ }
+
+ if (!this.panel.xAxis.show) {
+ this.heatmap.select(".axis-x").selectAll("line").style("opacity", 0);
+ }
+ }
+ }, {
+ key: "addHeatmap",
+ value: function addHeatmap() {
+ var _this = this;
+
+ this.addHeatmapCanvas();
+ var maxValue = this.panel.color.max || this.cardsData.maxValue;
+ var minValue = this.panel.color.min || this.cardsData.minValue;
+
+ if (this.panel.color.mode !== 'discrete') {
+ this.colorScale = this.getColorScale(maxValue, minValue);
+ }
+
+ this.setOpacityScale(maxValue);
+ var cards = this.heatmap.selectAll(".status-heatmap-card").data(this.cardsData.cards);
+ cards.append("title");
+ cards = cards.enter().append("rect").attr("cardId", function (c) {
+ return c.id;
+ }).attr("x", this.getCardX.bind(this)).attr("width", this.getCardWidth.bind(this)).attr("y", this.getCardY.bind(this)).attr("height", this.getCardHeight.bind(this)).attr("rx", this.cardRound).attr("ry", this.cardRound).attr("class", "bordered status-heatmap-card").style("fill", this.getCardColor.bind(this)).style("stroke", this.getCardColor.bind(this)).style("stroke-width", 0) //.style("stroke-width", getCardStrokeWidth)
+ //.style("stroke-dasharray", "3,3")
+ .style("opacity", this.getCardOpacity.bind(this));
+ var $cards = this.$heatmap.find(".status-heatmap-card");
+ $cards.on("mouseenter", function (event) {
+ _this.tooltip.mouseOverBucket = true;
+
+ _this.highlightCard(event);
+ }).on("mouseleave", function (event) {
+ _this.tooltip.mouseOverBucket = false;
+
+ _this.resetCardHighLight(event);
+ });
+
+ this._renderAnnotations();
+
+ this.ctrl.events.emit('render-complete', {
+ "chartWidth": this.chartWidth
+ });
+ }
+ }, {
+ key: "highlightCard",
+ value: function highlightCard(event) {
+ var color = d3.select(event.target).style("fill");
+ var highlightColor = d3.color(color).darker(2);
+ var strokeColor = d3.color(color).brighter(4);
+ var current_card = d3.select(event.target);
+ this.tooltip.originalFillColor = color;
+ current_card.style("fill", highlightColor.toString()).style("stroke", strokeColor.toString()).style("stroke-width", 1);
+ }
+ }, {
+ key: "resetCardHighLight",
+ value: function resetCardHighLight(event) {
+ d3.select(event.target).style("fill", this.tooltip.originalFillColor).style("stroke", this.tooltip.originalFillColor).style("stroke-width", 0);
+ }
+ }, {
+ key: "getColorScale",
+ value: function getColorScale(maxValue) {
+ var minValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
+
+ var colorScheme = _.find(this.ctrl.colorSchemes, {
+ value: this.panel.color.colorScheme
+ }); // if (!colorScheme) {
+ //
+ // }
+
+
+ var colorInterpolator = d3ScaleChromatic[colorScheme.value];
+ var colorScaleInverted = colorScheme.invert === 'always' || colorScheme.invert === 'dark' && !contextSrv.user.lightTheme;
+ if (maxValue == minValue) maxValue = minValue + 1;
+ var start = colorScaleInverted ? maxValue : minValue;
+ var end = colorScaleInverted ? minValue : maxValue;
+ return d3.scaleSequential(colorInterpolator).domain([start, end]);
+ }
+ }, {
+ key: "setOpacityScale",
+ value: function setOpacityScale(maxValue) {
+ if (this.panel.color.colorScale === 'linear') {
+ this.opacityScale = d3.scaleLinear().domain([0, maxValue]).range([0, 1]);
+ } else if (this.panel.color.colorScale === 'sqrt') {
+ this.opacityScale = d3.scalePow().exponent(this.panel.color.exponent).domain([0, maxValue]).range([0, 1]);
+ }
+ }
+ }, {
+ key: "getCardX",
+ value: function getCardX(d) {
+ var x; // cx is the center of the card. Card should be placed to the left.
+
+ var cx = this.xScale(d.x);
+
+ if (cx - this.cardWidth / 2 < 0) {
+ x = this.yAxisWidth + this.cardHSpacing / 2;
+ } else {
+ x = this.yAxisWidth + cx - this.cardWidth / 2;
+ }
+
+ return x;
+ } // xScale returns card center. Adjust cardWidth in case of overlaping.
+
+ }, {
+ key: "getCardWidth",
+ value: function getCardWidth(d) {
+ var w;
+ var cx = this.xScale(d.x);
+
+ if (cx < this.cardWidth / 2) {
+ // Center should not exceed half of card.
+ // Cut card to the left to prevent overlay of y axis.
+ var cutted_width = cx - this.cardHSpacing / 2 + this.cardWidth / 2;
+ w = cutted_width > 0 ? cutted_width : 0;
+ } else if (this.chartWidth - cx < this.cardWidth / 2) {
+ // Cut card to the right to prevent overlay of right graph edge.
+ w = this.cardWidth / 2 + (this.chartWidth - cx - this.cardHSpacing / 2);
+ } else {
+ w = this.cardWidth;
+ } // Card width should be MIN_CARD_SIZE at least
+
+
+ w = Math.max(w, MIN_CARD_SIZE);
+
+ if (this.cardHSpacing == 0) {
+ w = w + 1;
+ }
+
+ return w;
+ }
+ }, {
+ key: "getCardY",
+ value: function getCardY(d) {
+ return this.yScale(d.y) + this.chartTop - this.cardHeight - this.cardVSpacing / 2;
+ }
+ }, {
+ key: "getCardHeight",
+ value: function getCardHeight(d) {
+ var ys = this.yScale(d.y);
+ var y = ys + this.chartTop - this.cardHeight - this.cardVSpacing / 2;
+ var h = this.cardHeight; // Cut card height to prevent overlay
+
+ if (y < this.chartTop) {
+ h = ys - this.cardVSpacing / 2;
+ } else if (ys > this.chartBottom) {
+ h = this.chartBottom - y;
+ } else if (y + this.cardHeight > this.chartBottom) {
+ h = this.chartBottom - y;
+ } // Height can't be more than chart height
+
+
+ h = Math.min(h, this.chartHeight); // Card height should be MIN_CARD_SIZE at least
+
+ h = Math.max(h, MIN_CARD_SIZE);
+
+ if (this.cardVSpacing == 0) {
+ h = h + 1;
+ }
+
+ return h;
+ }
+ }, {
+ key: "getCardColor",
+ value: function getCardColor(d) {
+ if (this.panel.color.mode === 'opacity') {
+ return this.panel.color.cardColor;
+ } else if (this.panel.color.mode === 'spectrum') {
+ return this.colorScale(d.value);
+ } else if (this.panel.color.mode === 'discrete') {
+ return this.ctrl.discreteHelper.getBucketColor(d.values);
+ }
+ }
+ }, {
+ key: "getCardOpacity",
+ value: function getCardOpacity(d) {
+ if (this.panel.nullPointMode === 'as empty' && d.value == null) {
+ return 0;
+ }
+
+ if (this.panel.color.mode === 'opacity') {
+ return this.opacityScale(d.value);
+ } else {
+ return 1;
+ }
+ }
+ }, {
+ key: "getCardStrokeWidth",
+ value: function getCardStrokeWidth(d) {
+ if (this.panel.color.mode === 'discrete') {
+ return '1';
+ }
+
+ return '0';
+ } /////////////////////////////
+ // Selection and crosshair //
+ /////////////////////////////
+
+ }, {
+ key: "getEventOffset",
+ value: function getEventOffset(event) {
+ var elemOffset = this.$heatmap.offset();
+ var x = Math.floor(event.clientX - elemOffset.left);
+ var y = Math.floor(event.clientY - elemOffset.top);
+ return {
+ x: x,
+ y: y
+ };
+ }
+ }, {
+ key: "onMouseDown",
+ value: function onMouseDown(event) {
+ var _this2 = this;
+
+ var offset = this.getEventOffset(event);
+ this.selection.active = true;
+ this.selection.x1 = offset.x;
+
+ this.mouseUpHandler = function () {
+ _this2.onMouseUp();
+ };
+
+ $(document).one("mouseup", this.mouseUpHandler.bind(this));
+ }
+ }, {
+ key: "onMouseUp",
+ value: function onMouseUp() {
+ $(document).unbind("mouseup", this.mouseUpHandler.bind(this));
+ this.mouseUpHandler = null;
+ this.selection.active = false;
+ var selectionRange = Math.abs(this.selection.x2 - this.selection.x1);
+
+ if (this.selection.x2 >= 0 && selectionRange > MIN_SELECTION_WIDTH) {
+ var timeFrom = this.xScale.invert(Math.min(this.selection.x1, this.selection.x2) - this.yAxisWidth - this.xGridSize / 2);
+ var timeTo = this.xScale.invert(Math.max(this.selection.x1, this.selection.x2) - this.yAxisWidth - this.xGridSize / 2);
+ this.ctrl.timeSrv.setTime({
+ from: moment.utc(timeFrom),
+ to: moment.utc(timeTo)
+ });
+ }
+
+ this.clearSelection();
+ }
+ }, {
+ key: "onMouseLeave",
+ value: function onMouseLeave() {
+ appEvents.emit('graph-hover-clear');
+ this.clearCrosshair(); //annotationTooltip.destroy();
+ }
+ }, {
+ key: "onMouseMove",
+ value: function onMouseMove(event) {
+ if (!this.heatmap) {
+ return;
+ }
+
+ var offset = this.getEventOffset(event);
+
+ if (this.selection.active) {
+ // Clear crosshair and tooltip
+ this.clearCrosshair();
+ this.tooltip.destroy();
+ this.annotationTooltip.destroy();
+ this.selection.x2 = this.limitSelection(event.offsetX);
+ this.drawSelection(this.selection.x1, this.selection.x2);
+ } else {
+ //const pos = this.getEventPos(event, offset);
+ this.emitGraphHoverEvent(event);
+ this.drawCrosshair(offset.x);
+ this.tooltip.show(event); //, data); // pos, this.data
+
+ this.annotationTooltip.show(event);
+ }
+ }
+ }, {
+ key: "getEventPos",
+ value: function getEventPos(event, offset) {
+ var x = this.xScale.invert(offset.x - this.yAxisWidth).valueOf();
+ var y = this.yScale.invert(offset.y - this.chartTop);
+ var pos = {
+ pageX: event.pageX,
+ pageY: event.pageY,
+ x: x,
+ x1: x,
+ y: y,
+ y1: y,
+ panelRelY: null,
+ offset: offset
+ };
+ return pos;
+ }
+ }, {
+ key: "emitGraphHoverEvent",
+ value: function emitGraphHoverEvent(event) {
+ var x = this.xScale.invert(event.offsetX - this.yAxisWidth - this.xGridSize / 2).valueOf();
+ var y = this.yScale(event.offsetY);
+ var pos = {
+ pageX: event.pageX,
+ pageY: event.pageY,
+ x: x,
+ x1: x,
+ y: y,
+ y1: y,
+ panelRelY: 0
+ }; // Set minimum offset to prevent showing legend from another panel
+
+ pos.panelRelY = Math.max(event.offsetY / this.height, 0.001); // broadcast to other graph panels that we are hovering
+
+ appEvents.emit('graph-hover', {
+ pos: pos,
+ panel: this.panel
+ });
+ }
+ }, {
+ key: "limitSelection",
+ value: function limitSelection(x2) {
+ x2 = Math.max(x2, this.yAxisWidth);
+ x2 = Math.min(x2, this.chartWidth + this.yAxisWidth);
+ return x2;
+ }
+ }, {
+ key: "drawSelection",
+ value: function drawSelection(posX1, posX2) {
+ if (this.heatmap) {
+ this.heatmap.selectAll(".status-heatmap-selection").remove();
+ var selectionX = Math.min(posX1, posX2);
+ var selectionWidth = Math.abs(posX1 - posX2);
+
+ if (selectionWidth > MIN_SELECTION_WIDTH) {
+ this.heatmap.append("rect").attr("class", "status-heatmap-selection").attr("x", selectionX).attr("width", selectionWidth).attr("y", this.chartTop).attr("height", this.chartHeight);
+ }
+ }
+ }
+ }, {
+ key: "clearSelection",
+ value: function clearSelection() {
+ this.selection.x1 = -1;
+ this.selection.x2 = -1;
+
+ if (this.heatmap) {
+ this.heatmap.selectAll(".status-heatmap-selection").remove();
+ }
+ }
+ }, {
+ key: "drawCrosshair",
+ value: function drawCrosshair(position) {
+ if (this.heatmap) {
+ this.heatmap.selectAll(".status-heatmap-crosshair").remove();
+ var posX = position;
+ posX = Math.max(posX, this.yAxisWidth);
+ posX = Math.min(posX, this.chartWidth + this.yAxisWidth);
+ this.heatmap.append("g").attr("class", "status-heatmap-crosshair").attr("transform", "translate(" + posX + ",0)").append("line").attr("x1", 1).attr("y1", this.chartTop).attr("x2", 1).attr("y2", this.chartBottom).attr("stroke-width", 1);
+ }
+ } // map time to X
+
+ }, {
+ key: "drawSharedCrosshair",
+ value: function drawSharedCrosshair(pos) {
+ if (this.heatmap && this.ctrl.dashboard.graphTooltip !== 0) {
+ var posX = this.xScale(pos.x) + this.yAxisWidth;
+ this.drawCrosshair(posX);
+ }
+ }
+ }, {
+ key: "clearCrosshair",
+ value: function clearCrosshair() {
+ if (this.heatmap) {
+ this.heatmap.selectAll(".status-heatmap-crosshair").remove();
+ }
+ }
+ }, {
+ key: "render",
+ value: function render() {
+ this.data = this.ctrl.data;
+ this.panel = this.ctrl.panel;
+ this.timeRange = this.ctrl.range;
+ this.cardsData = this.ctrl.cardsData;
+
+ if (!this.data || !this.cardsData || !this.setElementHeight()) {
+ return;
+ } // Draw default axes and return if no data
+
+
+ if (_.isEmpty(this.cardsData.cards)) {
+ this.addHeatmapCanvas();
+ return;
+ }
+
+ this.addHeatmap();
+ this.scope.yAxisWidth = this.yAxisWidth;
+ this.scope.xAxisHeight = this.xAxisHeight;
+ this.scope.chartHeight = this.chartHeight;
+ this.scope.chartWidth = this.chartWidth;
+ this.scope.chartTop = this.chartTop;
+ }
+ }, {
+ key: "_renderAnnotations",
+ value: function _renderAnnotations() {
+ var _this3 = this;
+
+ if (!this.ctrl.annotations || this.ctrl.annotations.length == 0) {
+ return;
+ }
+
+ if (!this.heatmap) {
+ return;
+ }
+
+ var annoData = _.map(this.ctrl.annotations, function (d, i) {
+ return {
+ "x": Math.floor(_this3.yAxisWidth + _this3.xScale(d.time)),
+ "id": i,
+ "anno": d.source
+ };
+ }); //console.log({"ctrl_annotations": this.ctrl.annotations, "annoData": annoData});
+
+
+ var anno = this.heatmap.append("g").attr("class", "statusmap-annotations").attr("transform", "translate(0.5,0)").selectAll(".statusmap-annotations").data(annoData).enter().append("g");
+ anno.append("line") //.attr("class", "statusmap-annotation-tick")
+ .attr("x1", function (d) {
+ return d.x;
+ }).attr("y1", this.chartTop).attr("x2", function (d) {
+ return d.x;
+ }).attr("y2", this.chartBottom).style("stroke", function (d) {
+ return d.anno.iconColor;
+ }).style("stroke-width", 1).style("stroke-dasharray", "3,3");
+ anno.append("polygon").attr("points", function (d) {
+ return [[d.x, _this3.chartBottom + 1], [d.x - 5, _this3.chartBottom + 6], [d.x + 5, _this3.chartBottom + 6]].join(" ");
+ }).style("stroke-width", 0).style("fill", function (d) {
+ return d.anno.iconColor;
+ }); // Polygons didn't fire mouseevents
+
+ anno.append("rect").attr("x", function (d) {
+ return d.x - 5;
+ }).attr("width", 10).attr("y", this.chartBottom + 1).attr("height", 5).attr("class", "statusmap-annotation-tick").attr("annoId", function (d) {
+ return d.id;
+ }).style("opacity", 0);
+ var $ticks = this.$heatmap.find(".statusmap-annotation-tick");
+ $ticks.on("mouseenter", function (event) {
+ _this3.annotationTooltip.mouseOverAnnotationTick = true;
+ }).on("mouseleave", function (event) {
+ _this3.annotationTooltip.mouseOverAnnotationTick = false;
+ });
+ }
+ }]);
+
+ return StatusmapRenderer;
+ }());
}
};
});
diff --git a/dist/rendering.js.map b/dist/rendering.js.map
index 4b57532..d7109f7 100644
--- a/dist/rendering.js.map
+++ b/dist/rendering.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../src/rendering.js"],"names":["link","scope","elem","attrs","ctrl","data","cardsData","timeRange","panel","heatmap","$heatmap","find","tooltip","StatusHeatmapTooltip","annotationTooltip","AnnotationTooltip","width","height","yScale","xScale","chartWidth","chartHeight","chartTop","chartBottom","yAxisWidth","xAxisHeight","cardVSpacing","cardHSpacing","cardRound","cardWidth","cardHeight","colorScale","opacityScale","mouseUpHandler","xGridSize","yGridSize","yOffset","selection","active","x1","x2","padding","left","right","top","bottom","margin","dataRangeWidingFactor","DATA_RANGE_WIDING_FACTOR","events","on","render","setElementHeight","row","_","isString","parseInt","replace","legend","show","css","e","getYAxisWidth","axis_text","selectAll","nodes","max_text_width","max","map","text","getBBox","Math","ceil","getXAxisHeight","axis_line","select","empty","axis_line_position","parseFloat","attr","canvas_width","addXAxis","d3","scaleTime","domain","from","to","range","ticks","DEFAULT_X_TICK_SIZE_PX","grafanaTimeFormatter","grafanaTimeFormat","timeFormat","dashboardTimeZone","dashboard","getTimezone","utcFormat","xAxis","axisBottom","tickFormat","tickPadding","X_AXIS_TICK_PADDING","tickSize","posY","posX","append","call","remove","getYScale","step","length","push","i","scaleOrdinal","getYAxisScale","addYAxis","uniq","d","target","isEmpty","yAxisSort","sort","a","b","localeCompare","ignorePunctuation","numeric","yAxisScale","yAxis","axisLeft","tickValues","tickSizeInner","Y_AXIS_TICK_PADDING","wideYAxisRange","min","tickInterval","y_widing","y_min","y_max","floor","tickValueFormatter","decimals","scaledDecimals","format","value","kbn","valueFormats","addHeatmapCanvas","heatmap_elem","cards","CARD_H_SPACING","CARD_V_SPACING","CARD_ROUND","yBucketSize","xBucketSize","style","addHeatmap","maxValue","color","minValue","mode","getColorScale","setOpacityScale","enter","c","id","getCardX","getCardWidth","getCardY","getCardHeight","getCardColor","getCardOpacity","$cards","event","mouseOverBucket","highlightCard","resetCardHighLight","_renderAnnotations","emit","highlightColor","darker","strokeColor","brighter","current_card","originalFillColor","colorScheme","colorSchemes","colorInterpolator","d3ScaleChromatic","colorScaleInverted","invert","contextSrv","user","lightTheme","start","end","scaleSequential","scaleLinear","scalePow","exponent","x","cx","w","cutted_width","MIN_CARD_SIZE","y","ys","h","cardColor","discreteHelper","getBucketColor","values","nullPointMode","getCardStrokeWidth","appEvents","drawSharedCrosshair","pos","clearCrosshair","onMouseDown","offsetX","onMouseUp","$","document","one","unbind","selectionRange","abs","MIN_SELECTION_WIDTH","timeFrom","timeTo","timeSrv","setTime","moment","utc","clearSelection","onMouseLeave","onMouseMove","destroy","limitSelection","drawSelection","emitGraphHoverEvet","drawCrosshair","valueOf","offsetY","pageX","pageY","y1","panelRelY","posX1","posX2","selectionX","selectionWidth","position","graphTooltip","annotations","annoData","time","source","anno","iconColor","join","$ticks","mouseOverAnnotationTick","secPerTick","oneDay","oneYear","tickStep","getScaledDecimals","getFlotTickSize","DEFAULT_Y_TICK_SIZE_PX"],"mappings":"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","file":"rendering.js","sourcesContent":["import _ from 'lodash';\nimport $ from 'jquery';\nimport moment from 'moment';\nimport kbn from 'app/core/utils/kbn';\nimport {appEvents, contextSrv} from 'app/core/core';\nimport {tickStep, getScaledDecimals, getFlotTickSize} from 'app/core/utils/ticks';\nimport d3 from 'd3';\nimport * as d3ScaleChromatic from './libs/d3-scale-chromatic/index';\nimport {StatusHeatmapTooltip} from './tooltip';\nimport {AnnotationTooltip} from './annotations';\n\nlet MIN_CARD_SIZE = 5,\n CARD_H_SPACING = 2,\n CARD_V_SPACING = 2,\n CARD_ROUND = 0,\n DATA_RANGE_WIDING_FACTOR = 1.2,\n DEFAULT_X_TICK_SIZE_PX = 100,\n DEFAULT_Y_TICK_SIZE_PX = 50,\n X_AXIS_TICK_PADDING = 10,\n Y_AXIS_TICK_PADDING = 5,\n MIN_SELECTION_WIDTH = 2;\n\nexport default function link(scope, elem, attrs, ctrl) {\n let data, cardsData, timeRange, panel, heatmap;\n\n // $heatmap is JQuery object, but heatmap is D3\n let $heatmap = elem.find('.status-heatmap-panel');\n let tooltip = new StatusHeatmapTooltip($heatmap, scope);\n let annotationTooltip = new AnnotationTooltip($heatmap, scope);\n\n let width, height,\n yScale, xScale,\n chartWidth, chartHeight,\n chartTop, chartBottom,\n yAxisWidth, xAxisHeight,\n cardVSpacing, cardHSpacing, cardRound,\n cardWidth, cardHeight,\n colorScale, opacityScale,\n mouseUpHandler,\n xGridSize, yGridSize;\n\n let yOffset = 0;\n\n let selection = {\n active: false,\n x1: -1,\n x2: -1\n };\n\n let padding = {left: 0, right: 0, top: 0, bottom: 0},\n margin = {left: 25, right: 15, top: 10, bottom: 20},\n dataRangeWidingFactor = DATA_RANGE_WIDING_FACTOR;\n\n ctrl.events.on('render', () => {\n render();\n });\n\n function setElementHeight() {\n try {\n var height = ctrl.height || panel.height || ctrl.row.height;\n if (_.isString(height)) {\n height = parseInt(height.replace('px', ''), 10);\n }\n\n height -= panel.legend.show ? 32 : 10; // bottom padding and space for legend. Change margin in .status-heatmap-color-legend !\n\n $heatmap.css('height', height + 'px');\n\n return true;\n } catch (e) { // IE throws errors sometimes\n return false;\n }\n }\n\n function getYAxisWidth(elem) {\n let axis_text = elem.selectAll(\".axis-y text\").nodes();\n let max_text_width = _.max(_.map(axis_text, text => {\n // Use SVG getBBox method\n return text.getBBox().width;\n }));\n\n return Math.ceil(max_text_width);\n }\n\n function getXAxisHeight(elem) {\n let axis_line = elem.select(\".axis-x line\");\n if (!axis_line.empty()) {\n let axis_line_position = parseFloat(elem.select(\".axis-x line\").attr(\"y2\"));\n let canvas_width = parseFloat(elem.attr(\"height\"));\n return canvas_width - axis_line_position;\n } else {\n // Default height\n return 30;\n }\n }\n\n function addXAxis() {\n // Scale timestamps to cards centers\n scope.xScale = xScale = d3.scaleTime()\n .domain([timeRange.from, timeRange.to])\n .range([xGridSize/2, chartWidth-xGridSize/2]);\n\n let ticks = chartWidth / DEFAULT_X_TICK_SIZE_PX;\n let grafanaTimeFormatter = grafanaTimeFormat(ticks, timeRange.from, timeRange.to);\n let timeFormat;\n let dashboardTimeZone = ctrl.dashboard.getTimezone();\n if (dashboardTimeZone === 'utc') {\n timeFormat = d3.utcFormat(grafanaTimeFormatter);\n } else {\n timeFormat = d3.timeFormat(grafanaTimeFormatter);\n }\n\n let xAxis = d3.axisBottom(xScale)\n .ticks(ticks)\n .tickFormat(timeFormat)\n .tickPadding(X_AXIS_TICK_PADDING)\n .tickSize(chartHeight);\n\n let posY = chartTop;\n let posX = yAxisWidth;\n\n heatmap.append(\"g\")\n .attr(\"class\", \"axis axis-x\")\n .attr(\"transform\", \"translate(\" + posX + \",\" + posY + \")\")\n .call(xAxis);\n\n // Remove horizontal line in the top of axis labels (called domain in d3)\n heatmap.select(\".axis-x\").select(\".domain\").remove();\n }\n\n // divide chart height by ticks for cards drawing\n function getYScale(ticks) {\n let range = [];\n let step = chartHeight / ticks.length;\n // svg has y=0 on the top, so top card should have a minimal value in range\n range.push(step);\n for (let i = 1; i < ticks.length; i++) {\n range.push(step * (i+1));\n }\n return d3.scaleOrdinal()\n .domain(ticks)\n .range(range);\n }\n\n // divide chart height by ticks with offset for ticks drawing\n function getYAxisScale(ticks) {\n let range = [];\n let step = chartHeight / ticks.length;\n // svg has y=0 on the top, so top tick should have a minimal value in range\n range.push(yOffset);\n for (let i = 1; i < ticks.length; i++) {\n range.push(step * i + yOffset);\n }\n return d3.scaleOrdinal()\n .domain(ticks)\n .range(range);\n }\n\n function addYAxis() {\n let ticks = _.uniq(_.map(data, d => d.target));\n\n // Set default Y min and max if no data\n if (_.isEmpty(data)) {\n ticks = [''];\n }\n\n if (panel.yAxisSort == 'a → z') {\n ticks.sort((a, b) => a.localeCompare(b, 'en', {ignorePunctuation: false, numeric: true}));\n } else if (panel.yAxisSort == 'z → a') {\n ticks.sort((b, a) => a.localeCompare(b, 'en', {ignorePunctuation: false, numeric: true}));\n }\n\n let yAxisScale = getYAxisScale(ticks);\n scope.yScale = yScale = getYScale(ticks);\n\n let yAxis = d3.axisLeft(yAxisScale)\n .tickValues(ticks)\n .tickSizeInner(0 - width)\n .tickPadding(Y_AXIS_TICK_PADDING);\n\n heatmap.append(\"g\")\n .attr(\"class\", \"axis axis-y\")\n .call(yAxis);\n\n // Calculate Y axis width first, then move axis into visible area\n let posY = margin.top;\n let posX = getYAxisWidth(heatmap) + Y_AXIS_TICK_PADDING;\n heatmap.select(\".axis-y\").attr(\"transform\", \"translate(\" + posX + \",\" + posY + \")\");\n\n // Remove vertical line in the right of axis labels (called domain in d3)\n heatmap.select(\".axis-y\").select(\".domain\").remove();\n heatmap.select(\".axis-y\").selectAll(\".tick line\").remove();\n }\n\n // Wide Y values range and adjust to bucket size\n function wideYAxisRange(min, max, tickInterval) {\n let y_widing = (max * (dataRangeWidingFactor - 1) - min * (dataRangeWidingFactor - 1)) / 2;\n let y_min, y_max;\n\n if (tickInterval === 0) {\n y_max = max * dataRangeWidingFactor;\n y_min = min - min * (dataRangeWidingFactor - 1);\n tickInterval = (y_max - y_min) / 2;\n } else {\n y_max = Math.ceil((max + y_widing) / tickInterval) * tickInterval;\n y_min = Math.floor((min - y_widing) / tickInterval) * tickInterval;\n }\n\n // Don't wide axis below 0 if all values are positive\n if (min >= 0 && y_min < 0) {\n y_min = 0;\n }\n\n return {y_min, y_max};\n }\n\n function tickValueFormatter(decimals, scaledDecimals = null) {\n let format = panel.yAxis.format;\n return function(value) {\n return kbn.valueFormats[format](value, decimals, scaledDecimals);\n };\n }\n\n // Create svg element, add axes and\n // calculate sizes for cards drawing\n function addHeatmapCanvas() {\n let heatmap_elem = $heatmap[0];\n\n width = Math.floor($heatmap.width()) - padding.right;\n height = Math.floor($heatmap.height()) - padding.bottom;\n\n if (heatmap) {\n heatmap.remove();\n }\n\n heatmap = d3.select(heatmap_elem)\n .append(\"svg\")\n .attr(\"width\", width)\n .attr(\"height\", height);\n\n chartHeight = height - margin.top - margin.bottom;\n chartTop = margin.top;\n chartBottom = chartTop + chartHeight;\n\n cardHSpacing = panel.cards.cardHSpacing !== null ? panel.cards.cardHSpacing : CARD_H_SPACING;\n cardVSpacing = panel.cards.cardVSpacing !== null ? panel.cards.cardVSpacing : CARD_V_SPACING;\n cardRound = panel.cards.cardRound !== null ? panel.cards.cardRound : CARD_ROUND;\n\n // calculate yOffset for YAxis\n yGridSize = Math.floor(chartHeight / cardsData.yBucketSize);\n cardHeight = yGridSize ? yGridSize - cardVSpacing : 0;\n yOffset = cardHeight / 2;\n\n addYAxis();\n\n yAxisWidth = getYAxisWidth(heatmap) + Y_AXIS_TICK_PADDING;\n chartWidth = width - yAxisWidth - margin.right;\n\n // TODO allow per-y cardWidth!\n // we need to fill chartWidth with xBucketSize cards.\n xGridSize = chartWidth / (cardsData.xBucketSize+1);\n cardWidth = xGridSize - cardHSpacing;\n\n addXAxis();\n xAxisHeight = getXAxisHeight(heatmap);\n\n if (!panel.yAxis.show) {\n heatmap.select(\".axis-y\").selectAll(\"line\").style(\"opacity\", 0);\n }\n\n if (!panel.xAxis.show) {\n heatmap.select(\".axis-x\").selectAll(\"line\").style(\"opacity\", 0);\n }\n }\n\n function addHeatmap() {\n addHeatmapCanvas();\n\n let maxValue = panel.color.max || cardsData.maxValue;\n let minValue = panel.color.min || cardsData.minValue;\n\n if (panel.color.mode !== 'discrete') {\n colorScale = getColorScale(maxValue, minValue);\n }\n setOpacityScale(maxValue);\n\n let cards = heatmap.selectAll(\".status-heatmap-card\").data(cardsData.cards);\n cards.append(\"title\");\n cards = cards.enter().append(\"rect\")\n .attr(\"cardId\", c => c.id)\n .attr(\"x\", getCardX)\n .attr(\"width\", getCardWidth)\n .attr(\"y\", getCardY)\n .attr(\"height\", getCardHeight)\n .attr(\"rx\", cardRound)\n .attr(\"ry\", cardRound)\n .attr(\"class\", \"bordered status-heatmap-card\")\n .style(\"fill\", getCardColor)\n .style(\"stroke\", getCardColor)\n .style(\"stroke-width\", 0)\n //.style(\"stroke-width\", getCardStrokeWidth)\n //.style(\"stroke-dasharray\", \"3,3\")\n .style(\"opacity\", getCardOpacity);\n\n let $cards = $heatmap.find(\".status-heatmap-card\");\n $cards.on(\"mouseenter\", (event) => {\n tooltip.mouseOverBucket = true;\n highlightCard(event);\n })\n .on(\"mouseleave\", (event) => {\n tooltip.mouseOverBucket = false;\n resetCardHighLight(event);\n });\n\n _renderAnnotations();\n\n ctrl.events.emit('render-complete', {\n \"chartWidth\": chartWidth\n });\n }\n\n function highlightCard(event) {\n let color = d3.select(event.target).style(\"fill\");\n let highlightColor = d3.color(color).darker(2);\n let strokeColor = d3.color(color).brighter(4);\n let current_card = d3.select(event.target);\n tooltip.originalFillColor = color;\n current_card.style(\"fill\", highlightColor)\n .style(\"stroke\", strokeColor)\n .style(\"stroke-width\", 1);\n }\n\n function resetCardHighLight(event) {\n d3\n .select(event.target)\n .style(\"fill\", tooltip.originalFillColor)\n .style(\"stroke\", tooltip.originalFillColor)\n .style(\"stroke-width\", 0);\n }\n\n function getColorScale(maxValue, minValue = 0) {\n let colorScheme = _.find(ctrl.colorSchemes, {value: panel.color.colorScheme});\n let colorInterpolator = d3ScaleChromatic[colorScheme.value];\n let colorScaleInverted = colorScheme.invert === 'always' ||\n (colorScheme.invert === 'dark' && !contextSrv.user.lightTheme);\n\n if (maxValue == minValue)\n maxValue = minValue + 1;\n\n let start = colorScaleInverted ? maxValue : minValue;\n let end = colorScaleInverted ? minValue : maxValue;\n\n return d3.scaleSequential(colorInterpolator).domain([start, end]);\n }\n\n function setOpacityScale(maxValue) {\n if (panel.color.colorScale === 'linear') {\n opacityScale = d3.scaleLinear()\n .domain([0, maxValue])\n .range([0, 1]);\n } else if (panel.color.colorScale === 'sqrt') {\n opacityScale = d3.scalePow().exponent(panel.color.exponent)\n .domain([0, maxValue])\n .range([0, 1]);\n }\n }\n\n function getCardX(d) {\n let x;\n // cx is the center of the card. Card should be placed to the left.\n let cx = xScale(d.x);\n\n if (cx - cardWidth/2 < 0) {\n x = yAxisWidth + cardHSpacing/2;\n } else {\n x = yAxisWidth + cx - cardWidth/2;\n }\n\n return x;\n }\n\n // xScale returns card center. Adjust cardWidth in case of overlaping.\n function getCardWidth(d) {\n let w;\n let cx = xScale(d.x);\n\n if (cx < cardWidth/2) {\n // Center should not exceed half of card.\n // Cut card to the left to prevent overlay of y axis.\n let cutted_width = (cx - cardHSpacing/2) + cardWidth/2;\n w = cutted_width > 0 ? cutted_width : 0;\n } else if (chartWidth - cx < cardWidth/2) {\n // Cut card to the right to prevent overlay of right graph edge.\n w = cardWidth/2 + (chartWidth - cx - cardHSpacing/2);\n } else {\n w = cardWidth;\n }\n\n // Card width should be MIN_CARD_SIZE at least\n w = Math.max(w, MIN_CARD_SIZE);\n\n if (cardHSpacing == 0) {\n w = w+1;\n }\n\n return w;\n }\n\n function getCardY(d) {\n return yScale(d.y) + chartTop - cardHeight - cardVSpacing/2;\n }\n\n function getCardHeight(d) {\n let ys = yScale(d.y);\n let y = ys + chartTop - cardHeight - cardVSpacing/2;\n let h = cardHeight;\n\n // Cut card height to prevent overlay\n if (y < chartTop) {\n h = ys - cardVSpacing/2;\n } else if (ys > chartBottom) {\n h = chartBottom - y;\n } else if (y + cardHeight > chartBottom) {\n h = chartBottom - y;\n }\n\n // Height can't be more than chart height\n h = Math.min(h, chartHeight);\n // Card height should be MIN_CARD_SIZE at least\n h = Math.max(h, MIN_CARD_SIZE);\n\n if (cardVSpacing == 0) {\n h = h+1\n }\n\n return h;\n }\n\n function getCardColor(d) {\n if (panel.color.mode === 'opacity') {\n return panel.color.cardColor;\n } else if (panel.color.mode === 'spectrum') {\n return colorScale(d.value);\n } else if (panel.color.mode === 'discrete') {\n return ctrl.discreteHelper.getBucketColor(d.values);\n }\n }\n\n function getCardOpacity(d) {\n if (panel.nullPointMode === 'as empty' && d.value == null ) {\n return 0;\n }\n if (panel.color.mode === 'opacity') {\n return opacityScale(d.value);\n } else {\n return 1;\n }\n }\n\n function getCardStrokeWidth(d) {\n if (panel.color.mode === 'discrete') {\n return '1';\n }\n return '0';\n }\n\n /////////////////////////////\n // Selection and crosshair //\n /////////////////////////////\n\n // Shared crosshair and tooltip\n appEvents.on('graph-hover', event => {\n drawSharedCrosshair(event.pos);\n }, scope);\n\n appEvents.on('graph-hover-clear', () => {\n clearCrosshair();\n }, scope);\n\n function onMouseDown(event) {\n selection.active = true;\n selection.x1 = event.offsetX;\n\n mouseUpHandler = function() {\n onMouseUp();\n };\n\n $(document).one(\"mouseup\", mouseUpHandler);\n }\n\n function onMouseUp() {\n $(document).unbind(\"mouseup\", mouseUpHandler);\n mouseUpHandler = null;\n selection.active = false;\n\n let selectionRange = Math.abs(selection.x2 - selection.x1);\n if (selection.x2 >= 0 && selectionRange > MIN_SELECTION_WIDTH) {\n let timeFrom = xScale.invert(Math.min(selection.x1, selection.x2) - yAxisWidth - xGridSize/2);\n let timeTo = xScale.invert(Math.max(selection.x1, selection.x2) - yAxisWidth - xGridSize/2);\n\n ctrl.timeSrv.setTime({\n from: moment.utc(timeFrom),\n to: moment.utc(timeTo)\n });\n }\n\n clearSelection();\n }\n\n function onMouseLeave() {\n appEvents.emit('graph-hover-clear');\n clearCrosshair();\n //annotationTooltip.destroy();\n }\n\n function onMouseMove(event) {\n if (!heatmap) { return; }\n\n if (selection.active) {\n // Clear crosshair and tooltip\n clearCrosshair();\n tooltip.destroy();\n annotationTooltip.destroy();\n\n selection.x2 = limitSelection(event.offsetX);\n drawSelection(selection.x1, selection.x2);\n } else {\n emitGraphHoverEvet(event);\n drawCrosshair(event.offsetX);\n tooltip.show(event); //, data);\n annotationTooltip.show(event);\n }\n }\n\n function emitGraphHoverEvet(event) {\n let x = xScale.invert(event.offsetX - yAxisWidth - xGridSize/2).valueOf();\n let y = yScale(event.offsetY);\n let pos = {\n pageX: event.pageX,\n pageY: event.pageY,\n x: x, x1: x,\n y: y, y1: y,\n panelRelY: null\n };\n\n // Set minimum offset to prevent showing legend from another panel\n pos.panelRelY = Math.max(event.offsetY / height, 0.001);\n\n // broadcast to other graph panels that we are hovering\n appEvents.emit('graph-hover', {pos: pos, panel: panel});\n }\n\n function limitSelection(x2) {\n x2 = Math.max(x2, yAxisWidth);\n x2 = Math.min(x2, chartWidth + yAxisWidth);\n return x2;\n }\n\n function drawSelection(posX1, posX2) {\n if (heatmap) {\n heatmap.selectAll(\".status-heatmap-selection\").remove();\n let selectionX = Math.min(posX1, posX2);\n let selectionWidth = Math.abs(posX1 - posX2);\n\n if (selectionWidth > MIN_SELECTION_WIDTH) {\n heatmap.append(\"rect\")\n .attr(\"class\", \"status-heatmap-selection\")\n .attr(\"x\", selectionX)\n .attr(\"width\", selectionWidth)\n .attr(\"y\", chartTop)\n .attr(\"height\", chartHeight);\n }\n }\n }\n\n function clearSelection() {\n selection.x1 = -1;\n selection.x2 = -1;\n\n if (heatmap) {\n heatmap.selectAll(\".status-heatmap-selection\").remove();\n }\n }\n\n function drawCrosshair(position) {\n if (heatmap) {\n heatmap.selectAll(\".status-heatmap-crosshair\").remove();\n\n let posX = position;\n posX = Math.max(posX, yAxisWidth);\n posX = Math.min(posX, chartWidth + yAxisWidth);\n\n heatmap.append(\"g\")\n .attr(\"class\", \"status-heatmap-crosshair\")\n .attr(\"transform\", \"translate(\" + posX + \",0)\")\n .append(\"line\")\n .attr(\"x1\", 1)\n .attr(\"y1\", chartTop)\n .attr(\"x2\", 1)\n .attr(\"y2\", chartBottom)\n .attr(\"stroke-width\", 1);\n }\n }\n\n // map time to X\n function drawSharedCrosshair(pos) {\n if (heatmap && ctrl.dashboard.graphTooltip !== 0) {\n let posX = xScale(pos.x) + yAxisWidth;\n drawCrosshair(posX);\n }\n }\n\n function clearCrosshair() {\n if (heatmap) {\n heatmap.selectAll(\".status-heatmap-crosshair\").remove();\n }\n }\n\n function render() {\n data = ctrl.data;\n panel = ctrl.panel;\n timeRange = ctrl.range;\n cardsData = ctrl.cardsData;\n\n if (!data || !cardsData || !setElementHeight()) {\n return;\n }\n\n // Draw default axes and return if no data\n if (_.isEmpty(cardsData.cards)) {\n addHeatmapCanvas();\n return;\n }\n\n addHeatmap();\n scope.yAxisWidth = yAxisWidth;\n scope.xAxisHeight = xAxisHeight;\n scope.chartHeight = chartHeight;\n scope.chartWidth = chartWidth;\n scope.chartTop = chartTop;\n }\n\n // Register selection listeners\n $heatmap.on(\"mousedown\", onMouseDown);\n $heatmap.on(\"mousemove\", onMouseMove);\n $heatmap.on(\"mouseleave\", onMouseLeave);\n\n function _renderAnnotations() {\n if (!ctrl.annotations || ctrl.annotations.length == 0) {\n return;\n }\n \n if (!heatmap) {\n return;\n }\n\n let annoData = _.map(ctrl.annotations, (d,i) => ({\"x\": Math.floor(yAxisWidth + xScale(d.time)), \"id\":i, \"anno\": d.source}));\n\n\n let anno = heatmap\n .append(\"g\")\n .attr(\"class\", \"statusmap-annotations\")\n .attr(\"transform\", \"translate(0.5,0)\")\n .selectAll(\".statusmap-annotations\")\n .data(annoData)\n .enter().append(\"g\")\n ;\n anno.append(\"line\")\n //.attr(\"class\", \"statusmap-annotation-tick\")\n .attr(\"x1\", d => d.x)\n .attr(\"y1\", chartTop)\n .attr(\"x2\", d => d.x)\n .attr(\"y2\", chartBottom)\n .style(\"stroke\", d => d.anno.iconColor)\n .style(\"stroke-width\", 1)\n .style(\"stroke-dasharray\", \"3,3\")\n ;\n anno.append(\"polygon\")\n .attr(\"points\", d => [[d.x, chartBottom+1], [d.x-5, chartBottom+6], [d.x+5, chartBottom+6]].join(\" \"))\n .style(\"stroke-width\", 0)\n .style(\"fill\", d => d.anno.iconColor)\n ;\n // Polygons didn't fire mouseevents\n anno.append(\"rect\") \n .attr(\"x\", d => d.x-5)\n .attr(\"width\", 10)\n .attr(\"y\", chartBottom+1)\n .attr(\"height\", 5)\n .attr(\"class\", \"statusmap-annotation-tick\")\n .attr(\"annoId\", d => d.id)\n .style(\"opacity\", 0)\n ;\n\n let $ticks = $heatmap.find(\".statusmap-annotation-tick\");\n $ticks.on(\"mouseenter\", (event) => {\n annotationTooltip.mouseOverAnnotationTick = true;\n })\n .on(\"mouseleave\", (event) => {\n annotationTooltip.mouseOverAnnotationTick = false;\n });\n \n }\n}\n\nfunction grafanaTimeFormat(ticks, min, max) {\n if (min && max && ticks) {\n let range = max - min;\n let secPerTick = (range/ticks) / 1000;\n let oneDay = 86400000;\n let oneYear = 31536000000;\n\n if (secPerTick <= 45) {\n return \"%H:%M:%S\";\n }\n if (secPerTick <= 7200 || range <= oneDay) {\n return \"%H:%M\";\n }\n if (secPerTick <= 80000) {\n return \"%m/%d %H:%M\";\n }\n if (secPerTick <= 2419200 || range <= oneYear) {\n return \"%m/%d\";\n }\n return \"%Y-%m\";\n }\n\n return \"%H:%M\";\n}\n"]}
\ No newline at end of file
+{"version":3,"sources":["../src/rendering.ts"],"names":["rendering","scope","elem","attrs","ctrl","StatusmapRenderer","grafanaTimeFormat","ticks","min","max","range","secPerTick","oneDay","oneYear","_","$","moment","kbn","appEvents","contextSrv","d3","d3ScaleChromatic","StatusmapTooltip","AnnotationTooltip","MIN_CARD_SIZE","CARD_H_SPACING","CARD_V_SPACING","CARD_ROUND","DATA_RANGE_WIDING_FACTOR","DEFAULT_X_TICK_SIZE_PX","DEFAULT_Y_TICK_SIZE_PX","X_AXIS_TICK_PADDING","Y_AXIS_TICK_PADDING","MIN_SELECTION_WIDTH","$heatmap","find","tooltip","annotationTooltip","yOffset","selection","active","x1","x2","padding","left","right","top","bottom","margin","events","on","onRender","bind","tickValueFormatter","onGraphHover","onGraphHoverClear","onMouseDown","onMouseMove","onMouseLeave","clearCrosshair","event","drawSharedCrosshair","pos","render","renderingCompleted","height","panel","row","isString","parseInt","replace","legend","show","css","e","axisText","selectAll","nodes","maxTextWidth","map","text","getBBox","width","Math","ceil","axisLine","select","empty","axisLinePosition","parseFloat","attr","canvasWidth","xScale","scaleTime","domain","timeRange","from","to","xGridSize","chartWidth","grafanaTimeFormatter","timeFormat","dashboardTimeZone","dashboard","getTimezone","utcFormat","xAxis","axisBottom","tickFormat","tickPadding","tickSize","chartHeight","posY","chartTop","posX","yAxisWidth","heatmap","append","call","remove","step","length","push","i","scaleOrdinal","uniq","data","d","target","isEmpty","yAxisSort","sort","a","b","localeCompare","ignorePunctuation","numeric","yAxisScale","getYAxisScale","yScale","getYScale","yAxis","axisLeft","tickValues","tickSizeInner","getYAxisWidth","tickInterval","y_widing","dataRangeWidingFactor","y_min","y_max","floor","decimals","scaledDecimals","format","value","valueFormats","heatmap_elem","chartBottom","cardHSpacing","cards","cardVSpacing","cardRound","yGridSize","cardsData","yBucketSize","cardHeight","addYAxis","xBucketSize","cardWidth","addXAxis","xAxisHeight","getXAxisHeight","style","addHeatmapCanvas","maxValue","color","minValue","mode","colorScale","getColorScale","setOpacityScale","enter","c","id","getCardX","getCardWidth","getCardY","getCardHeight","getCardColor","getCardOpacity","$cards","mouseOverBucket","highlightCard","resetCardHighLight","_renderAnnotations","emit","highlightColor","darker","strokeColor","brighter","current_card","originalFillColor","toString","colorScheme","colorSchemes","colorInterpolator","colorScaleInverted","invert","user","lightTheme","start","end","scaleSequential","opacityScale","scaleLinear","scalePow","exponent","x","cx","w","cutted_width","y","ys","h","cardColor","discreteHelper","getBucketColor","values","nullPointMode","elemOffset","offset","clientX","clientY","getEventOffset","mouseUpHandler","onMouseUp","document","one","unbind","selectionRange","abs","timeFrom","timeTo","timeSrv","setTime","utc","clearSelection","destroy","limitSelection","offsetX","drawSelection","emitGraphHoverEvent","drawCrosshair","valueOf","pageX","pageY","y1","panelRelY","offsetY","posX1","posX2","selectionX","selectionWidth","position","graphTooltip","setElementHeight","addHeatmap","annotations","annoData","time","source","anno","iconColor","join","$ticks","mouseOverAnnotationTick"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport $ from 'jquery';\nimport moment from 'moment';\nimport kbn from 'app/core/utils/kbn';\nimport {appEvents, contextSrv} from 'app/core/core';\nimport {tickStep, getScaledDecimals, getFlotTickSize} from 'app/core/utils/ticks';\nimport * as d3 from 'd3';\nimport * as d3ScaleChromatic from './libs/d3-scale-chromatic/index';\nimport {StatusmapTooltip} from './tooltip';\nimport {AnnotationTooltip} from './annotations';\n\nlet MIN_CARD_SIZE = 5,\n CARD_H_SPACING = 2,\n CARD_V_SPACING = 2,\n CARD_ROUND = 0,\n DATA_RANGE_WIDING_FACTOR = 1.2,\n DEFAULT_X_TICK_SIZE_PX = 100,\n DEFAULT_Y_TICK_SIZE_PX = 50,\n X_AXIS_TICK_PADDING = 10,\n Y_AXIS_TICK_PADDING = 5,\n MIN_SELECTION_WIDTH = 2;\n\nexport default function rendering(scope: any, elem: any, attrs: any, ctrl: any) {\n return new StatusmapRenderer(scope, elem, attrs, ctrl);\n}\n\nexport class StatusmapRenderer {\n width: number = 0;\n height: number = 0;\n yScale: any;\n xScale: any;\n chartWidth: number = 0;\n chartHeight: number = 0;\n chartTop: number = 0;\n chartBottom: number = 0;\n yAxisWidth: number = 0;\n xAxisHeight: number = 0;\n cardVSpacing: number = 0;\n cardHSpacing: number = 0;\n cardRound: number = 0;\n cardWidth: number = 0;\n cardHeight: number = 0;\n colorScale: any;\n opacityScale: any;\n mouseUpHandler: any;\n xGridSize: number = 0;\n yGridSize: number = 0;\n data: any;\n cardsData: any;\n panel: any;\n $heatmap: any;\n tooltip: StatusmapTooltip;\n annotationTooltip: AnnotationTooltip;\n heatmap: any;\n timeRange: any;\n\n yOffset: number;\n selection: any;\n padding: any;\n margin: any;\n dataRangeWidingFactor: number = DATA_RANGE_WIDING_FACTOR;\n\n constructor(private scope: any, private elem: any, attrs: any, private ctrl: any) {\n // $heatmap is JQuery object, but heatmap is D3\n this.$heatmap = this.elem.find('.status-heatmap-panel');\n this.tooltip = new StatusmapTooltip(this.$heatmap, this.scope);\n this.annotationTooltip = new AnnotationTooltip(this.$heatmap, this.scope);\n\n this.yOffset = 0;\n\n this.selection = {\n active: false,\n x1: -1,\n x2: -1,\n };\n\n this.padding = { left: 0, right: 0, top: 0, bottom: 0 };\n this.margin = { left: 25, right: 15, top: 10, bottom: 20 };\n\n this.ctrl.events.on('render', this.onRender.bind(this));\n\n this.ctrl.tickValueFormatter = this.tickValueFormatter.bind(this);\n\n /////////////////////////////\n // Selection and crosshair //\n /////////////////////////////\n\n // Shared crosshair and tooltip\n appEvents.on('graph-hover', this.onGraphHover.bind(this), this.scope);\n\n appEvents.on('graph-hover-clear', this.onGraphHoverClear.bind(this), this.scope);\n\n // Register selection listeners\n this.$heatmap.on('mousedown', this.onMouseDown.bind(this));\n this.$heatmap.on('mousemove', this.onMouseMove.bind(this));\n this.$heatmap.on('mouseleave', this.onMouseLeave.bind(this));\n }\n\n onGraphHoverClear() {\n this.clearCrosshair();\n }\n\n onGraphHover(event: { pos: any }) {\n this.drawSharedCrosshair(event.pos);\n }\n\n onRender() {\n this.render();\n this.ctrl.renderingCompleted();\n }\n\n\n setElementHeight() {\n try {\n var height = this.ctrl.height || this.panel.height || this.ctrl.row.height;\n if (_.isString(height)) {\n height = parseInt(height.replace('px', ''), 10);\n }\n\n height -= this.panel.legend.show ? 32 : 10; // bottom padding and space for legend. Change margin in .status-heatmap-color-legend !\n\n this.$heatmap.css('height', height + 'px');\n\n return true;\n } catch (e) { // IE throws errors sometimes\n return false;\n }\n }\n\n getYAxisWidth(elem: any) {\n const axisText = elem.selectAll(\".axis-y text\").nodes();\n const maxTextWidth = _.max(_.map(axisText, text => {\n // Use SVG getBBox method\n return text.getBBox().width;\n }));\n\n return Math.ceil(maxTextWidth);\n }\n\n getXAxisHeight(elem: any) {\n let axisLine = elem.select(\".axis-x line\");\n if (!axisLine.empty()) {\n let axisLinePosition = parseFloat(elem.select(\".axis-x line\").attr(\"y2\"));\n let canvasWidth = parseFloat(elem.attr(\"height\"));\n return canvasWidth - axisLinePosition;\n } else {\n // Default height\n return 30;\n }\n }\n\n addXAxis() {\n // Scale timestamps to cards centers\n this.scope.xScale = this.xScale = d3.scaleTime()\n .domain([this.timeRange.from, this.timeRange.to])\n .range([this.xGridSize/2, this.chartWidth-this.xGridSize/2]);\n\n let ticks = this.chartWidth / DEFAULT_X_TICK_SIZE_PX;\n let grafanaTimeFormatter = grafanaTimeFormat(ticks, this.timeRange.from, this.timeRange.to);\n let timeFormat;\n let dashboardTimeZone = this.ctrl.dashboard.getTimezone();\n if (dashboardTimeZone === 'utc') {\n timeFormat = d3.utcFormat(grafanaTimeFormatter);\n } else {\n timeFormat = d3.timeFormat(grafanaTimeFormatter);\n }\n\n let xAxis = d3\n .axisBottom(this.xScale)\n .ticks(ticks)\n .tickFormat(timeFormat)\n .tickPadding(X_AXIS_TICK_PADDING)\n .tickSize(this.chartHeight);\n\n let posY = this.chartTop; // this.margin.top !\n let posX = this.yAxisWidth;\n\n this.heatmap.append(\"g\")\n .attr(\"class\", \"axis axis-x\")\n .attr(\"transform\", \"translate(\" + posX + \",\" + posY + \")\")\n .call(xAxis);\n\n // Remove horizontal line in the top of axis labels (called domain in d3)\n this.heatmap\n .select(\".axis-x\")\n .select(\".domain\")\n .remove();\n }\n\n // divide chart height by ticks for cards drawing\n getYScale(ticks) {\n let range:any[] = [];\n let step = this.chartHeight / ticks.length;\n // svg has y=0 on the top, so top card should have a minimal value in range\n range.push(step);\n for (let i = 1; i < ticks.length; i++) {\n range.push(step * (i+1));\n }\n return d3.scaleOrdinal()\n .domain(ticks)\n .range(range);\n }\n\n // divide chart height by ticks with offset for ticks drawing\n getYAxisScale(ticks) {\n let range:any[] = [];\n let step = this.chartHeight / ticks.length;\n // svg has y=0 on the top, so top tick should have a minimal value in range\n range.push(this.yOffset);\n for (let i = 1; i < ticks.length; i++) {\n range.push(step * i + this.yOffset);\n }\n return d3.scaleOrdinal()\n .domain(ticks)\n .range(range);\n }\n\n addYAxis() {\n let ticks = _.uniq(_.map(this.data, d => d.target));\n\n // Set default Y min and max if no data\n if (_.isEmpty(this.data)) {\n ticks = [''];\n }\n\n if (this.panel.yAxisSort == 'a → z') {\n ticks.sort((a, b) => a.localeCompare(b, 'en', {ignorePunctuation: false, numeric: true}));\n } else if (this.panel.yAxisSort == 'z → a') {\n ticks.sort((b, a) => a.localeCompare(b, 'en', {ignorePunctuation: false, numeric: true}));\n }\n\n let yAxisScale = this.getYAxisScale(ticks);\n this.scope.yScale = this.yScale = this.getYScale(ticks);\n\n let yAxis = d3\n .axisLeft(yAxisScale)\n .tickValues(ticks)\n .tickSizeInner(0 - this.width)\n .tickPadding(Y_AXIS_TICK_PADDING);\n\n this.heatmap\n .append(\"g\")\n .attr(\"class\", \"axis axis-y\")\n .call(yAxis);\n\n // Calculate Y axis width first, then move axis into visible area\n let posY = this.margin.top;\n let posX = this.getYAxisWidth(this.heatmap) + Y_AXIS_TICK_PADDING;\n this.heatmap.select(\".axis-y\").attr(\"transform\", \"translate(\" + posX + \",\" + posY + \")\");\n\n // Remove vertical line in the right of axis labels (called domain in d3)\n this.heatmap.select(\".axis-y\").select(\".domain\").remove();\n this.heatmap.select(\".axis-y\").selectAll(\".tick line\").remove();\n }\n\n // Wide Y values range and adjust to bucket size\n wideYAxisRange(min, max, tickInterval) {\n let y_widing = (max * (this.dataRangeWidingFactor - 1) - min * (this.dataRangeWidingFactor - 1)) / 2;\n let y_min, y_max;\n\n if (tickInterval === 0) {\n y_max = max * this.dataRangeWidingFactor;\n y_min = min - min * (this.dataRangeWidingFactor - 1);\n tickInterval = (y_max - y_min) / 2;\n } else {\n y_max = Math.ceil((max + y_widing) / tickInterval) * tickInterval;\n y_min = Math.floor((min - y_widing) / tickInterval) * tickInterval;\n }\n\n // Don't wide axis below 0 if all values are positive\n if (min >= 0 && y_min < 0) {\n y_min = 0;\n }\n\n return {y_min, y_max};\n }\n\n tickValueFormatter(decimals, scaledDecimals = null) {\n let format = this.panel.yAxis.format;\n return function(value) {\n return kbn.valueFormats[format](value, decimals, scaledDecimals);\n };\n }\n\n // Create svg element, add axes and\n // calculate sizes for cards drawing\n addHeatmapCanvas() {\n let heatmap_elem = this.$heatmap[0];\n\n this.width = Math.floor(this.$heatmap.width()) - this.padding.right;\n this.height = Math.floor(this.$heatmap.height()) - this.padding.bottom;\n\n if (this.heatmap) {\n this.heatmap.remove();\n }\n\n this.heatmap = d3.select(heatmap_elem)\n .append(\"svg\")\n .attr(\"width\", this.width)\n .attr(\"height\", this.height);\n\n this.chartHeight = this.height - this.margin.top - this.margin.bottom;\n this.chartTop = this.margin.top;\n this.chartBottom = this.chartTop + this.chartHeight;\n\n this.cardHSpacing = this.panel.cards.cardHSpacing !== null ? this.panel.cards.cardHSpacing : CARD_H_SPACING;\n this.cardVSpacing = this.panel.cards.cardVSpacing !== null ? this.panel.cards.cardVSpacing : CARD_V_SPACING;\n this.cardRound = this.panel.cards.cardRound !== null ? this.panel.cards.cardRound : CARD_ROUND;\n\n // calculate yOffset for YAxis\n this.yGridSize = Math.floor(this.chartHeight / this.cardsData.yBucketSize);\n this.cardHeight = this.yGridSize ? this.yGridSize - this.cardVSpacing : 0;\n this.yOffset = this.cardHeight / 2;\n\n this.addYAxis();\n\n this.yAxisWidth = this.getYAxisWidth(this.heatmap) + Y_AXIS_TICK_PADDING;\n this.chartWidth = this.width - this.yAxisWidth - this.margin.right;\n\n // TODO allow per-y cardWidth!\n // we need to fill chartWidth with xBucketSize cards.\n this.xGridSize = this.chartWidth / (this.cardsData.xBucketSize+1);\n this.cardWidth = this.xGridSize - this.cardHSpacing;\n\n this.addXAxis();\n this.xAxisHeight = this.getXAxisHeight(this.heatmap);\n\n if (!this.panel.yAxis.show) {\n this.heatmap.select(\".axis-y\").selectAll(\"line\").style(\"opacity\", 0);\n }\n\n if (!this.panel.xAxis.show) {\n this.heatmap.select(\".axis-x\").selectAll(\"line\").style(\"opacity\", 0);\n }\n }\n\n addHeatmap() {\n this.addHeatmapCanvas();\n\n let maxValue = this.panel.color.max || this.cardsData.maxValue;\n let minValue = this.panel.color.min || this.cardsData.minValue;\n\n if (this.panel.color.mode !== 'discrete') {\n this.colorScale = this.getColorScale(maxValue, minValue);\n }\n this.setOpacityScale(maxValue);\n\n let cards = this.heatmap.selectAll(\".status-heatmap-card\").data(this.cardsData.cards);\n cards.append(\"title\");\n cards = cards.enter().append(\"rect\")\n .attr(\"cardId\", c => c.id)\n .attr(\"x\", this.getCardX.bind(this))\n .attr(\"width\", this.getCardWidth.bind(this))\n .attr(\"y\", this.getCardY.bind(this))\n .attr(\"height\", this.getCardHeight.bind(this))\n .attr(\"rx\", this.cardRound)\n .attr(\"ry\", this.cardRound)\n .attr(\"class\", \"bordered status-heatmap-card\")\n .style(\"fill\", this.getCardColor.bind(this))\n .style(\"stroke\", this.getCardColor.bind(this))\n .style(\"stroke-width\", 0)\n //.style(\"stroke-width\", getCardStrokeWidth)\n //.style(\"stroke-dasharray\", \"3,3\")\n .style(\"opacity\", this.getCardOpacity.bind(this));\n\n let $cards = this.$heatmap.find(\".status-heatmap-card\");\n $cards\n .on(\"mouseenter\", (event) => {\n this.tooltip.mouseOverBucket = true;\n this.highlightCard(event);\n })\n .on(\"mouseleave\", (event) => {\n this.tooltip.mouseOverBucket = false;\n this.resetCardHighLight(event);\n });\n\n this._renderAnnotations();\n\n this.ctrl.events.emit('render-complete', {\n \"chartWidth\": this.chartWidth\n });\n }\n\n highlightCard(event) {\n const color = d3.select(event.target).style(\"fill\");\n const highlightColor = d3.color(color).darker(2);\n const strokeColor = d3.color(color).brighter(4);\n const current_card = d3.select(event.target);\n this.tooltip.originalFillColor = color;\n current_card\n .style(\"fill\", highlightColor.toString())\n .style(\"stroke\", strokeColor.toString())\n .style(\"stroke-width\", 1);\n }\n\n resetCardHighLight(event) {\n d3.select(event.target)\n .style(\"fill\", this.tooltip.originalFillColor)\n .style(\"stroke\", this.tooltip.originalFillColor)\n .style(\"stroke-width\", 0);\n }\n\n getColorScale(maxValue, minValue = 0) {\n let colorScheme = _.find(this.ctrl.colorSchemes, {value: this.panel.color.colorScheme});\n // if (!colorScheme) {\n //\n // }\n let colorInterpolator = d3ScaleChromatic[colorScheme.value];\n let colorScaleInverted = colorScheme.invert === 'always' ||\n (colorScheme.invert === 'dark' && !contextSrv.user.lightTheme);\n\n if (maxValue == minValue)\n maxValue = minValue + 1;\n\n let start = colorScaleInverted ? maxValue : minValue;\n let end = colorScaleInverted ? minValue : maxValue;\n\n return d3.scaleSequential(colorInterpolator).domain([start, end]);\n }\n\n setOpacityScale(maxValue) {\n if (this.panel.color.colorScale === 'linear') {\n this.opacityScale = d3.scaleLinear()\n .domain([0, maxValue])\n .range([0, 1]);\n } else if (this.panel.color.colorScale === 'sqrt') {\n this.opacityScale = d3.scalePow().exponent(this.panel.color.exponent)\n .domain([0, maxValue])\n .range([0, 1]);\n }\n }\n\n getCardX(d) {\n let x;\n // cx is the center of the card. Card should be placed to the left.\n let cx = this.xScale(d.x);\n\n if (cx - this.cardWidth/2 < 0) {\n x = this.yAxisWidth + this.cardHSpacing/2;\n } else {\n x = this.yAxisWidth + cx - this.cardWidth/2;\n }\n\n return x;\n }\n\n // xScale returns card center. Adjust cardWidth in case of overlaping.\n getCardWidth(d) {\n let w;\n let cx = this.xScale(d.x);\n\n if (cx < this.cardWidth/2) {\n // Center should not exceed half of card.\n // Cut card to the left to prevent overlay of y axis.\n let cutted_width = (cx - this.cardHSpacing/2) + this.cardWidth/2;\n w = cutted_width > 0 ? cutted_width : 0;\n } else if (this.chartWidth - cx < this.cardWidth/2) {\n // Cut card to the right to prevent overlay of right graph edge.\n w = this.cardWidth/2 + (this.chartWidth - cx - this.cardHSpacing/2);\n } else {\n w = this.cardWidth;\n }\n\n // Card width should be MIN_CARD_SIZE at least\n w = Math.max(w, MIN_CARD_SIZE);\n\n if (this.cardHSpacing == 0) {\n w = w+1;\n }\n\n return w;\n }\n\n getCardY(d) {\n return this.yScale(d.y) + this.chartTop - this.cardHeight - this.cardVSpacing/2;\n }\n\n getCardHeight(d) {\n let ys = this.yScale(d.y);\n let y = ys + this.chartTop - this.cardHeight - this.cardVSpacing/2;\n let h = this.cardHeight;\n\n // Cut card height to prevent overlay\n if (y < this.chartTop) {\n h = ys - this.cardVSpacing/2;\n } else if (ys > this.chartBottom) {\n h = this.chartBottom - y;\n } else if (y + this.cardHeight > this.chartBottom) {\n h = this.chartBottom - y;\n }\n\n // Height can't be more than chart height\n h = Math.min(h, this.chartHeight);\n // Card height should be MIN_CARD_SIZE at least\n h = Math.max(h, MIN_CARD_SIZE);\n\n if (this.cardVSpacing == 0) {\n h = h+1\n }\n\n return h;\n }\n\n getCardColor(d) {\n if (this.panel.color.mode === 'opacity') {\n return this.panel.color.cardColor;\n } else if (this.panel.color.mode === 'spectrum') {\n return this.colorScale(d.value);\n } else if (this.panel.color.mode === 'discrete') {\n return this.ctrl.discreteHelper.getBucketColor(d.values);\n }\n }\n\n getCardOpacity(d) {\n if (this.panel.nullPointMode === 'as empty' && d.value == null ) {\n return 0;\n }\n if (this.panel.color.mode === 'opacity') {\n return this.opacityScale(d.value);\n } else {\n return 1;\n }\n }\n\n getCardStrokeWidth(d) {\n if (this.panel.color.mode === 'discrete') {\n return '1';\n }\n return '0';\n }\n\n\n /////////////////////////////\n // Selection and crosshair //\n /////////////////////////////\n\n getEventOffset(event) {\n const elemOffset = this.$heatmap.offset();\n const x = Math.floor(event.clientX - elemOffset.left);\n const y = Math.floor(event.clientY - elemOffset.top);\n return { x, y };\n }\n\n onMouseDown(event) {\n const offset = this.getEventOffset(event);\n this.selection.active = true;\n this.selection.x1 = offset.x;\n\n this.mouseUpHandler = () => {\n this.onMouseUp();\n };\n\n $(document).one(\"mouseup\", this.mouseUpHandler.bind(this));\n }\n\n onMouseUp() {\n $(document).unbind(\"mouseup\", this.mouseUpHandler.bind(this));\n this.mouseUpHandler = null;\n this.selection.active = false;\n\n let selectionRange = Math.abs(this.selection.x2 - this.selection.x1);\n if (this.selection.x2 >= 0 && selectionRange > MIN_SELECTION_WIDTH) {\n let timeFrom = this.xScale.invert(Math.min(this.selection.x1, this.selection.x2) - this.yAxisWidth - this.xGridSize/2);\n let timeTo = this.xScale.invert(Math.max(this.selection.x1, this.selection.x2) - this.yAxisWidth - this.xGridSize/2);\n\n this.ctrl.timeSrv.setTime({\n from: moment.utc(timeFrom),\n to: moment.utc(timeTo)\n });\n }\n\n this.clearSelection();\n }\n\n onMouseLeave() {\n appEvents.emit('graph-hover-clear');\n this.clearCrosshair();\n //annotationTooltip.destroy();\n }\n\n onMouseMove(event) {\n if (!this.heatmap) { return; }\n\n const offset = this.getEventOffset(event);\n if (this.selection.active) {\n // Clear crosshair and tooltip\n this.clearCrosshair();\n this.tooltip.destroy();\n this.annotationTooltip.destroy();\n\n this.selection.x2 = this.limitSelection(event.offsetX);\n this.drawSelection(this.selection.x1, this.selection.x2);\n } else {\n //const pos = this.getEventPos(event, offset);\n this.emitGraphHoverEvent(event);\n this.drawCrosshair(offset.x);\n this.tooltip.show(event); //, data); // pos, this.data\n this.annotationTooltip.show(event);\n }\n }\n\n getEventPos(event, offset) {\n const x = this.xScale.invert(offset.x - this.yAxisWidth).valueOf();\n const y = this.yScale.invert(offset.y - this.chartTop);\n const pos = {\n pageX: event.pageX,\n pageY: event.pageY,\n x: x,\n x1: x,\n y: y,\n y1: y,\n panelRelY: null,\n offset,\n };\n\n return pos;\n }\n\n emitGraphHoverEvent(event) {\n let x = this.xScale.invert(event.offsetX - this.yAxisWidth - this.xGridSize/2).valueOf();\n let y = this.yScale(event.offsetY);\n let pos = {\n pageX: event.pageX,\n pageY: event.pageY,\n x: x, x1: x,\n y: y, y1: y,\n panelRelY: 0\n };\n\n // Set minimum offset to prevent showing legend from another panel\n pos.panelRelY = Math.max(event.offsetY / this.height, 0.001);\n\n // broadcast to other graph panels that we are hovering\n appEvents.emit('graph-hover', {pos: pos, panel: this.panel});\n }\n\n limitSelection(x2) {\n x2 = Math.max(x2, this.yAxisWidth);\n x2 = Math.min(x2, this.chartWidth + this.yAxisWidth);\n return x2;\n }\n\n drawSelection(posX1, posX2) {\n if (this.heatmap) {\n this.heatmap.selectAll(\".status-heatmap-selection\").remove();\n let selectionX = Math.min(posX1, posX2);\n let selectionWidth = Math.abs(posX1 - posX2);\n\n if (selectionWidth > MIN_SELECTION_WIDTH) {\n this.heatmap.append(\"rect\")\n .attr(\"class\", \"status-heatmap-selection\")\n .attr(\"x\", selectionX)\n .attr(\"width\", selectionWidth)\n .attr(\"y\", this.chartTop)\n .attr(\"height\", this.chartHeight);\n }\n }\n }\n\n clearSelection() {\n this.selection.x1 = -1;\n this.selection.x2 = -1;\n\n if (this.heatmap) {\n this.heatmap.selectAll(\".status-heatmap-selection\").remove();\n }\n }\n\n\n drawCrosshair(position) {\n if (this.heatmap) {\n this.heatmap.selectAll(\".status-heatmap-crosshair\").remove();\n\n let posX = position;\n posX = Math.max(posX, this.yAxisWidth);\n posX = Math.min(posX, this.chartWidth + this.yAxisWidth);\n\n this.heatmap.append(\"g\")\n .attr(\"class\", \"status-heatmap-crosshair\")\n .attr(\"transform\", \"translate(\" + posX + \",0)\")\n .append(\"line\")\n .attr(\"x1\", 1)\n .attr(\"y1\", this.chartTop)\n .attr(\"x2\", 1)\n .attr(\"y2\", this.chartBottom)\n .attr(\"stroke-width\", 1);\n }\n }\n\n // map time to X\n drawSharedCrosshair(pos) {\n if (this.heatmap && this.ctrl.dashboard.graphTooltip !== 0) {\n const posX = this.xScale(pos.x) + this.yAxisWidth;\n this.drawCrosshair(posX);\n }\n }\n\n clearCrosshair() {\n if (this.heatmap) {\n this.heatmap.selectAll(\".status-heatmap-crosshair\").remove();\n }\n }\n\n\n render() {\n this.data = this.ctrl.data;\n this.panel = this.ctrl.panel;\n this.timeRange = this.ctrl.range;\n this.cardsData = this.ctrl.cardsData;\n\n if (!this.data || !this.cardsData || !this.setElementHeight()) {\n return;\n }\n\n // Draw default axes and return if no data\n if (_.isEmpty(this.cardsData.cards)) {\n this.addHeatmapCanvas();\n return;\n }\n\n this.addHeatmap();\n this.scope.yAxisWidth = this.yAxisWidth;\n this.scope.xAxisHeight = this.xAxisHeight;\n this.scope.chartHeight = this.chartHeight;\n this.scope.chartWidth = this.chartWidth;\n this.scope.chartTop = this.chartTop;\n }\n\n _renderAnnotations() {\n if (!this.ctrl.annotations || this.ctrl.annotations.length == 0) {\n return;\n }\n\n if (!this.heatmap) {\n return;\n }\n\n\n\n let annoData = _.map(this.ctrl.annotations, (d,i) => ({\"x\": Math.floor(this.yAxisWidth + this.xScale(d.time)), \"id\":i, \"anno\": d.source}));\n\n //console.log({\"ctrl_annotations\": this.ctrl.annotations, \"annoData\": annoData});\n\n let anno = this.heatmap\n .append(\"g\")\n .attr(\"class\", \"statusmap-annotations\")\n .attr(\"transform\", \"translate(0.5,0)\")\n .selectAll(\".statusmap-annotations\")\n .data(annoData)\n .enter().append(\"g\")\n ;\n anno.append(\"line\")\n //.attr(\"class\", \"statusmap-annotation-tick\")\n .attr(\"x1\", d => d.x)\n .attr(\"y1\", this.chartTop)\n .attr(\"x2\", d => d.x)\n .attr(\"y2\", this.chartBottom)\n .style(\"stroke\", d => d.anno.iconColor)\n .style(\"stroke-width\", 1)\n .style(\"stroke-dasharray\", \"3,3\")\n ;\n anno.append(\"polygon\")\n .attr(\"points\", d => [[d.x, this.chartBottom+1], [d.x-5, this.chartBottom+6], [d.x+5, this.chartBottom+6]].join(\" \"))\n .style(\"stroke-width\", 0)\n .style(\"fill\", d => d.anno.iconColor)\n ;\n // Polygons didn't fire mouseevents\n anno.append(\"rect\")\n .attr(\"x\", d => d.x-5)\n .attr(\"width\", 10)\n .attr(\"y\", this.chartBottom+1)\n .attr(\"height\", 5)\n .attr(\"class\", \"statusmap-annotation-tick\")\n .attr(\"annoId\", d => d.id)\n .style(\"opacity\", 0)\n ;\n\n let $ticks = this.$heatmap.find(\".statusmap-annotation-tick\");\n $ticks\n .on(\"mouseenter\", (event) => {\n this.annotationTooltip.mouseOverAnnotationTick = true;\n })\n .on(\"mouseleave\", (event) => {\n this.annotationTooltip.mouseOverAnnotationTick = false;\n });\n }\n}\n\nfunction grafanaTimeFormat(ticks, min, max) {\n if (min && max && ticks) {\n let range = max - min;\n let secPerTick = (range/ticks) / 1000;\n let oneDay = 86400000;\n let oneYear = 31536000000;\n\n if (secPerTick <= 45) {\n return \"%H:%M:%S\";\n }\n if (secPerTick <= 7200 || range <= oneDay) {\n return \"%H:%M\";\n }\n if (secPerTick <= 80000) {\n return \"%m/%d %H:%M\";\n }\n if (secPerTick <= 2419200 || range <= oneYear) {\n return \"%m/%d\";\n }\n return \"%Y-%m\";\n }\n\n return \"%H:%M\";\n}\n"],"file":"rendering.js"}
\ No newline at end of file
diff --git a/dist/status_heatmap_ctrl.js b/dist/status_heatmap_ctrl.js
deleted file mode 100644
index 3d603d5..0000000
--- a/dist/status_heatmap_ctrl.js
+++ /dev/null
@@ -1,463 +0,0 @@
-'use strict';
-
-System.register(['app/plugins/sdk', 'lodash', 'app/core/core', 'app/core/utils/kbn', './color_legend', './rendering', './options_editor', './color_mode_discrete'], function (_export, _context) {
- "use strict";
-
- var MetricsPanelCtrl, _, contextSrv, kbn, rendering, statusHeatmapOptionsEditor, ColorModeDiscrete, _get, CANVAS, SVG, VALUE_INDEX, TIME_INDEX, panelDefaults, renderer, colorSchemes, colorModes, opacityScales, StatusHeatmapCtrl;
-
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- }
-
- function _possibleConstructorReturn(self, call) {
- if (!self) {
- throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
- }
-
- return call && (typeof call === "object" || typeof call === "function") ? call : self;
- }
-
- function _inherits(subClass, superClass) {
- if (typeof superClass !== "function" && superClass !== null) {
- throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
- }
-
- subClass.prototype = Object.create(superClass && superClass.prototype, {
- constructor: {
- value: subClass,
- enumerable: false,
- writable: true,
- configurable: true
- }
- });
- if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
- }
-
- return {
- setters: [function (_appPluginsSdk) {
- MetricsPanelCtrl = _appPluginsSdk.MetricsPanelCtrl;
- }, function (_lodash) {
- _ = _lodash.default;
- }, function (_appCoreCore) {
- contextSrv = _appCoreCore.contextSrv;
- }, function (_appCoreUtilsKbn) {
- kbn = _appCoreUtilsKbn.default;
- }, function (_color_legend) {}, function (_rendering) {
- rendering = _rendering.default;
- }, function (_options_editor) {
- statusHeatmapOptionsEditor = _options_editor.statusHeatmapOptionsEditor;
- }, function (_color_mode_discrete) {
- ColorModeDiscrete = _color_mode_discrete.ColorModeDiscrete;
- }],
- execute: function () {
- _get = function get(object, property, receiver) {
- if (object === null) object = Function.prototype;
- var desc = Object.getOwnPropertyDescriptor(object, property);
-
- if (desc === undefined) {
- var parent = Object.getPrototypeOf(object);
-
- if (parent === null) {
- return undefined;
- } else {
- return get(parent, property, receiver);
- }
- } else if ("value" in desc) {
- return desc.value;
- } else {
- var getter = desc.get;
-
- if (getter === undefined) {
- return undefined;
- }
-
- return getter.call(receiver);
- }
- };
-
- CANVAS = 'CANVAS';
- SVG = 'SVG';
- VALUE_INDEX = 0;
- TIME_INDEX = 1;
- panelDefaults = {
- // aggregate: aggregates.AVG,
- // fragment: fragments.HOUR,
- color: {
- mode: 'spectrum',
- cardColor: '#b4ff00',
- colorScale: 'sqrt',
- exponent: 0.5,
- colorScheme: 'interpolateGnYlRd',
- // discrete mode settings
- defaultColor: '#757575',
- thresholds: [] // manual colors
- },
- cards: {
- cardMinWidth: 5,
- cardVSpacing: 2,
- cardHSpacing: 2,
- cardRound: null
- },
- xAxis: {
- show: true,
- showWeekends: true,
- minBucketWidthToShowWeekends: 4,
- showCrosshair: true,
- labelFormat: '%a %m/%d'
- },
- yAxis: {
- show: true,
- showCrosshair: false
- },
- tooltip: {
- show: true
- },
- legend: {
- show: true
- },
- data: {
- unitFormat: 'short',
- decimals: null
- },
- // how null points should be handled
- nullPointMode: 'as empty',
- yAxisSort: 'metrics',
- highlightCards: true,
- useMax: true
- };
- renderer = CANVAS;
- colorSchemes = [
- // Diverging
- { name: 'Spectral', value: 'interpolateSpectral', invert: 'always' }, { name: 'RdYlGn', value: 'interpolateRdYlGn', invert: 'always' }, { name: 'GnYlRd', value: 'interpolateGnYlRd', invert: 'always' },
-
- // Sequential (Single Hue)
- { name: 'Blues', value: 'interpolateBlues', invert: 'dark' }, { name: 'Greens', value: 'interpolateGreens', invert: 'dark' }, { name: 'Greys', value: 'interpolateGreys', invert: 'dark' }, { name: 'Oranges', value: 'interpolateOranges', invert: 'dark' }, { name: 'Purples', value: 'interpolatePurples', invert: 'dark' }, { name: 'Reds', value: 'interpolateReds', invert: 'dark' },
-
- // Sequential (Multi-Hue)
- { name: 'BuGn', value: 'interpolateBuGn', invert: 'dark' }, { name: 'BuPu', value: 'interpolateBuPu', invert: 'dark' }, { name: 'GnBu', value: 'interpolateGnBu', invert: 'dark' }, { name: 'OrRd', value: 'interpolateOrRd', invert: 'dark' }, { name: 'PuBuGn', value: 'interpolatePuBuGn', invert: 'dark' }, { name: 'PuBu', value: 'interpolatePuBu', invert: 'dark' }, { name: 'PuRd', value: 'interpolatePuRd', invert: 'dark' }, { name: 'RdPu', value: 'interpolateRdPu', invert: 'dark' }, { name: 'YlGnBu', value: 'interpolateYlGnBu', invert: 'dark' }, { name: 'YlGn', value: 'interpolateYlGn', invert: 'dark' }, { name: 'YlOrBr', value: 'interpolateYlOrBr', invert: 'dark' }, { name: 'YlOrRd', value: 'interpolateYlOrRd', invert: 'dark' }];
- colorModes = ['opacity', 'spectrum', 'discrete'];
- opacityScales = ['linear', 'sqrt'];
-
- _export('StatusHeatmapCtrl', StatusHeatmapCtrl = function (_MetricsPanelCtrl) {
- _inherits(StatusHeatmapCtrl, _MetricsPanelCtrl);
-
- /** @ngInject */
- function StatusHeatmapCtrl($scope, $injector, $rootScope, timeSrv, annotationsSrv) {
- _classCallCheck(this, StatusHeatmapCtrl);
-
- var _this = _possibleConstructorReturn(this, (StatusHeatmapCtrl.__proto__ || Object.getPrototypeOf(StatusHeatmapCtrl)).call(this, $scope, $injector));
-
- _this.onRenderComplete = function (data) {
- _this.graph.chartWidth = data.chartWidth;
- _this.renderingCompleted();
- };
-
- _this.calculateInterval = function () {
- var panelWidth = Math.ceil($(window).width() * (_this.panel.gridPos.w / 24));
- // approximate chartWidth because y axis ticks not rendered yet on first data receive.
- var chartWidth = _.max([panelWidth - 200, panelWidth / 2]);
-
- var minCardWidth = _this.panel.cards.cardMinWidth;
- var minSpacing = _this.panel.cards.cardHSpacing;
- var maxCardsCount = Math.ceil((chartWidth - minCardWidth) / (minCardWidth + minSpacing));
-
- var intervalMs = void 0;
- var rangeMs = _this.range.to.valueOf() - _this.range.from.valueOf();
-
- // this is minimal interval! kbn.round_interval will lower it.
- intervalMs = _this.discreteHelper.roundIntervalCeil(rangeMs / maxCardsCount);
-
- // Calculate low limit of interval
- var lowLimitMs = 1; // 1 millisecond default low limit
- var intervalOverride = _this.panel.interval;
-
- // if no panel interval check datasource
- if (intervalOverride) {
- intervalOverride = _this.templateSrv.replace(intervalOverride, _this.panel.scopedVars);
- } else if (_this.datasource && _this.datasource.interval) {
- intervalOverride = _this.datasource.interval;
- }
-
- if (intervalOverride) {
- if (intervalOverride[0] === '>') {
- intervalOverride = intervalOverride.slice(1);
- }
- lowLimitMs = kbn.interval_to_ms(intervalOverride);
- }
-
- if (lowLimitMs > intervalMs) {
- intervalMs = lowLimitMs;
- }
-
- _this.intervalMs = intervalMs;
- _this.interval = kbn.secondsToHms(intervalMs / 1000);
- };
-
- _this.issueQueries = function (datasource) {
- _this.annotationsPromise = _this.annotationsSrv.getAnnotations({
- dashboard: _this.dashboard,
- panel: _this.panel,
- range: _this.range
- });
-
- /* Wait for annotationSrv requests to get datasources to
- * resolve before issuing queries. This allows the annotations
- * service to fire annotations queries before graph queries
- * (but not wait for completion). This resolves
- * issue 11806.
- */
- // 5.x before 5.4 doesn't have dataPromises
- if ("undefined" !== typeof _this.annotationsSrv.datasourcePromises) {
- return _this.annotationsSrv.datasourcePromises.then(function (r) {
- return _get(StatusHeatmapCtrl.prototype.__proto__ || Object.getPrototypeOf(StatusHeatmapCtrl.prototype), 'issueQueries', _this).call(_this, datasource);
- });
- } else {
- return _get(StatusHeatmapCtrl.prototype.__proto__ || Object.getPrototypeOf(StatusHeatmapCtrl.prototype), 'issueQueries', _this).call(_this, datasource);
- }
- };
-
- _this.onDataReceived = function (dataList) {
- _this.data = dataList;
- _this.cardsData = _this.convertToCards(_this.data);
-
- _this.annotationsPromise.then(function (result) {
- _this.loading = false;
- //this.alertState = result.alertState;
- if (result.annotations && result.annotations.length > 0) {
- _this.annotations = result.annotations;
- } else {
- _this.annotations = null;
- }
- _this.render();
- }, function () {
- _this.loading = false;
- _this.annotations = null;
- _this.render();
- });
-
- //this.render();
- };
-
- _this.onInitEditMode = function () {
- _this.addEditorTab('Options', statusHeatmapOptionsEditor, 2);
- _this.unitFormats = kbn.getUnitFormats();
- };
-
- _this.onRender = function () {
- if (!_this.data) {
- return;
- }
-
- _this.multipleValues = false;
- if (!_this.panel.useMax) {
- if (_this.cardsData) {
- _this.multipleValues = _this.cardsData.multipleValues;
- }
- }
-
- _this.noColorDefined = false;
- if (_this.panel.color.mode === 'discrete') {
- _this.discreteHelper.updateCardsValuesHasColorInfo();
- if (_this.cardsData) {
- _this.noColorDefined = _this.cardsData.noColorDefined;
- }
- }
- };
-
- _this.onCardColorChange = function (newColor) {
- _this.panel.color.cardColor = newColor;
- _this.render();
- };
-
- _this.onDataError = function () {
- _this.data = [];
- _this.annotations = [];
- _this.render();
- };
-
- _this.postRefresh = function () {
- _this.noColorDefined = false;
- };
-
- _this.onEditorAddThreshold = function () {
- _this.panel.color.thresholds.push({ color: _this.panel.defaultColor });
- _this.render();
- };
-
- _this.onEditorRemoveThreshold = function (index) {
- _this.panel.color.thresholds.splice(index, 1);
- _this.render();
- };
-
- _this.onEditorRemoveThresholds = function () {
- _this.panel.color.thresholds = [];
- _this.render();
- };
-
- _this.onEditorAddThreeLights = function () {
- _this.panel.color.thresholds.push({ color: "red", value: 2, tooltip: "error" });
- _this.panel.color.thresholds.push({ color: "yellow", value: 1, tooltip: "warning" });
- _this.panel.color.thresholds.push({ color: "green", value: 0, tooltip: "ok" });
- _this.render();
- };
-
- _this.onEditorAddSolarized = function () {
- _this.panel.color.thresholds.push({ color: "#b58900", value: 0, tooltip: "yellow" });
- _this.panel.color.thresholds.push({ color: "#cb4b16", value: 1, tooltip: "orange" });
- _this.panel.color.thresholds.push({ color: "#dc322f", value: 2, tooltip: "red" });
- _this.panel.color.thresholds.push({ color: "#d33682", value: 3, tooltip: "magenta" });
- _this.panel.color.thresholds.push({ color: "#6c71c4", value: 4, tooltip: "violet" });
- _this.panel.color.thresholds.push({ color: "#268bd2", value: 5, tooltip: "blue" });
- _this.panel.color.thresholds.push({ color: "#2aa198", value: 6, tooltip: "cyan" });
- _this.panel.color.thresholds.push({ color: "#859900", value: 7, tooltip: "green" });
- _this.render();
- };
-
- _this.link = function (scope, elem, attrs, ctrl) {
- rendering(scope, elem, attrs, ctrl);
- };
-
- _this.convertToCards = function (data) {
- var cardsData = {
- cards: [],
- xBucketSize: 0,
- yBucketSize: 0,
- maxValue: 0,
- minValue: 0,
- multipleValues: false,
- noColorDefined: false,
- targets: [], // array of available unique targets
- targetIndex: {} // indices in data array for each of available unique targets
- };
-
- if (!data || data.length == 0) {
- return cardsData;
- }
-
- // Collect uniq timestamps from data and spread over targets and timestamps
-
- // collect uniq targets and their indices
- _.map(data, function (d, i) {
- cardsData.targetIndex[d.target] = _.concat(_.toArray(cardsData.targetIndex[d.target]), i);
- });
-
- // TODO add some logic for targets heirarchy
- cardsData.targets = _.keys(cardsData.targetIndex);
- cardsData.yBucketSize = cardsData.targets.length;
- // Maximum number of buckets over x axis
- cardsData.xBucketSize = _.max(_.map(data, function (d) {
- return d.datapoints.length;
- }));
-
- // Collect all values for each bucket from datapoints with similar target.
- // TODO aggregate values into buckets over datapoint[TIME_INDEX] not over datapoint index (j).
- for (var i = 0; i < cardsData.targets.length; i++) {
- var target = cardsData.targets[i];
-
- for (var j = 0; j < cardsData.xBucketSize; j++) {
- var card = {
- id: i * cardsData.xBucketSize + j,
- values: [],
- multipleValues: false,
- noColorDefined: false,
- y: target,
- x: -1
- };
-
- // collect values from all timeseries with target
- for (var si = 0; si < cardsData.targetIndex[target].length; si++) {
- var s = data[cardsData.targetIndex[target][si]];
- if (s.datapoints.length <= j) {
- continue;
- }
- var datapoint = s.datapoints[j];
- if (card.values.length === 0) {
- card.x = datapoint[TIME_INDEX];
- }
- card.values.push(datapoint[VALUE_INDEX]);
- }
- card.minValue = _.min(card.values);
- card.maxValue = _.max(card.values);
- if (card.values.length > 1) {
- cardsData.multipleValues = true;
- card.multipleValues = true;
- card.value = card.maxValue; // max value by default
- } else {
- card.value = card.maxValue; // max value by default
- }
-
- if (cardsData.maxValue < card.maxValue) cardsData.maxValue = card.maxValue;
-
- if (cardsData.minValue > card.minValue) cardsData.minValue = card.minValue;
-
- if (card.x != -1) {
- cardsData.cards.push(card);
- }
- }
- }
-
- return cardsData;
- };
-
- _.defaultsDeep(_this.panel, panelDefaults);
-
- _this.opacityScales = opacityScales;
- _this.colorModes = colorModes;
- _this.colorSchemes = colorSchemes;
-
- // default graph width for discrete card width calculation
- _this.graph = {
- "chartWidth": -1
- };
-
- _this.multipleValues = false;
- _this.noColorDefined = false;
-
- _this.discreteHelper = new ColorModeDiscrete($scope);
-
- _this.dataWarnings = {
- "noColorDefined": {
- title: 'Data has value with undefined color',
- tip: 'Check metric values, color values or define a new color'
- },
- "multipleValues": {
- title: 'Data has multiple values for one target',
- tip: 'Change targets definitions or set "use max value"'
- }
- };
-
- _this.annotations = [];
- _this.annotationsSrv = annotationsSrv;
-
- _this.events.on('data-received', _this.onDataReceived);
- _this.events.on('data-snapshot-load', _this.onDataReceived);
- _this.events.on('data-error', _this.onDataError);
- _this.events.on('init-edit-mode', _this.onInitEditMode);
- _this.events.on('render', _this.onRender);
- _this.events.on('refresh', _this.postRefresh);
- // custom event from rendering.js
- _this.events.on('render-complete', _this.onRenderComplete);
- return _this;
- }
-
- // override calculateInterval for discrete color mode
-
-
- /* https://ethanschoonover.com/solarized/ */
-
-
- // group values into buckets by target
-
-
- return StatusHeatmapCtrl;
- }(MetricsPanelCtrl));
-
- _export('StatusHeatmapCtrl', StatusHeatmapCtrl);
-
- StatusHeatmapCtrl.templateUrl = 'module.html';
- }
- };
-});
-//# sourceMappingURL=status_heatmap_ctrl.js.map
diff --git a/dist/status_heatmap_ctrl.js.map b/dist/status_heatmap_ctrl.js.map
deleted file mode 100644
index 2e50387..0000000
--- a/dist/status_heatmap_ctrl.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["../src/status_heatmap_ctrl.js"],"names":["MetricsPanelCtrl","_","contextSrv","kbn","rendering","statusHeatmapOptionsEditor","ColorModeDiscrete","CANVAS","SVG","VALUE_INDEX","TIME_INDEX","panelDefaults","color","mode","cardColor","colorScale","exponent","colorScheme","defaultColor","thresholds","cards","cardMinWidth","cardVSpacing","cardHSpacing","cardRound","xAxis","show","showWeekends","minBucketWidthToShowWeekends","showCrosshair","labelFormat","yAxis","tooltip","legend","data","unitFormat","decimals","nullPointMode","yAxisSort","highlightCards","useMax","renderer","colorSchemes","name","value","invert","colorModes","opacityScales","StatusHeatmapCtrl","$scope","$injector","$rootScope","timeSrv","annotationsSrv","onRenderComplete","graph","chartWidth","renderingCompleted","calculateInterval","panelWidth","Math","ceil","$","window","width","panel","gridPos","w","max","minCardWidth","minSpacing","maxCardsCount","intervalMs","rangeMs","range","to","valueOf","from","discreteHelper","roundIntervalCeil","lowLimitMs","intervalOverride","interval","templateSrv","replace","scopedVars","datasource","slice","interval_to_ms","secondsToHms","issueQueries","annotationsPromise","getAnnotations","dashboard","datasourcePromises","then","onDataReceived","dataList","cardsData","convertToCards","loading","result","annotations","length","render","onInitEditMode","addEditorTab","unitFormats","getUnitFormats","onRender","multipleValues","noColorDefined","updateCardsValuesHasColorInfo","onCardColorChange","newColor","onDataError","postRefresh","onEditorAddThreshold","push","onEditorRemoveThreshold","index","splice","onEditorRemoveThresholds","onEditorAddThreeLights","onEditorAddSolarized","link","scope","elem","attrs","ctrl","xBucketSize","yBucketSize","maxValue","minValue","targets","targetIndex","map","d","i","target","concat","toArray","keys","datapoints","j","card","id","values","y","x","si","s","datapoint","min","defaultsDeep","dataWarnings","title","tip","events","on","templateUrl"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAASA,sB,kBAAAA,gB;;AACFC,O;;AACEC,gB,gBAAAA,U;;AACFC,S;;AAGAC,e;;AAICC,gC,mBAAAA,0B;;AACAC,uB,wBAAAA,iB;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEFC,Y,GAAS,Q;AACTC,S,GAAM,K;AACNC,iB,GAAc,C;AACdC,gB,GAAa,C;AAEbC,mB,GAAgB;AACpB;AACA;AACAC,eAAO;AACLC,gBAAM,UADD;AAELC,qBAAW,SAFN;AAGLC,sBAAY,MAHP;AAILC,oBAAU,GAJL;AAKLC,uBAAa,mBALR;AAML;AACAC,wBAAc,SAPT;AAQLC,sBAAY,EARP,CAQU;AARV,SAHa;AAapBC,eAAO;AACLC,wBAAc,CADT;AAELC,wBAAc,CAFT;AAGLC,wBAAc,CAHT;AAILC,qBAAW;AAJN,SAba;AAmBpBC,eAAO;AACLC,gBAAM,IADD;AAELC,wBAAc,IAFT;AAGLC,wCAA8B,CAHzB;AAILC,yBAAe,IAJV;AAKLC,uBAAa;AALR,SAnBa;AA0BpBC,eAAO;AACLL,gBAAM,IADD;AAELG,yBAAe;AAFV,SA1Ba;AA8BpBG,iBAAS;AACPN,gBAAM;AADC,SA9BW;AAiCpBO,gBAAQ;AACNP,gBAAM;AADA,SAjCY;AAoCpBQ,cAAM;AACJC,sBAAY,OADR;AAEJC,oBAAU;AAFN,SApCc;AAwCpB;AACAC,uBAAe,UAzCK;AA0CpBC,mBAAW,SA1CS;AA2CpBC,wBAAgB,IA3CI;AA4CpBC,gBAAQ;AA5CY,O;AA+ChBC,c,GAAWlC,M;AAEXmC,kB,GAAe;AACnB;AACA,QAAEC,MAAM,UAAR,EAAoBC,OAAO,qBAA3B,EAAkDC,QAAQ,QAA1D,EAFmB,EAGnB,EAAEF,MAAM,QAAR,EAAkBC,OAAO,mBAAzB,EAA8CC,QAAQ,QAAtD,EAHmB,EAInB,EAAEF,MAAM,QAAR,EAAkBC,OAAO,mBAAzB,EAA8CC,QAAQ,QAAtD,EAJmB;;AAMnB;AACA,QAAEF,MAAM,OAAR,EAAiBC,OAAO,kBAAxB,EAA4CC,QAAQ,MAApD,EAPmB,EAQnB,EAAEF,MAAM,QAAR,EAAkBC,OAAO,mBAAzB,EAA8CC,QAAQ,MAAtD,EARmB,EASnB,EAAEF,MAAM,OAAR,EAAiBC,OAAO,kBAAxB,EAA4CC,QAAQ,MAApD,EATmB,EAUnB,EAAEF,MAAM,SAAR,EAAmBC,OAAO,oBAA1B,EAAgDC,QAAQ,MAAxD,EAVmB,EAWnB,EAAEF,MAAM,SAAR,EAAmBC,OAAO,oBAA1B,EAAgDC,QAAQ,MAAxD,EAXmB,EAYnB,EAAEF,MAAM,MAAR,EAAgBC,OAAO,iBAAvB,EAA0CC,QAAQ,MAAlD,EAZmB;;AAcnB;AACA,QAAEF,MAAM,MAAR,EAAgBC,OAAO,iBAAvB,EAA0CC,QAAQ,MAAlD,EAfmB,EAgBnB,EAAEF,MAAM,MAAR,EAAgBC,OAAO,iBAAvB,EAA0CC,QAAQ,MAAlD,EAhBmB,EAiBnB,EAAEF,MAAM,MAAR,EAAgBC,OAAO,iBAAvB,EAA0CC,QAAQ,MAAlD,EAjBmB,EAkBnB,EAAEF,MAAM,MAAR,EAAgBC,OAAO,iBAAvB,EAA0CC,QAAQ,MAAlD,EAlBmB,EAmBnB,EAAEF,MAAM,QAAR,EAAkBC,OAAO,mBAAzB,EAA8CC,QAAQ,MAAtD,EAnBmB,EAoBnB,EAAEF,MAAM,MAAR,EAAgBC,OAAO,iBAAvB,EAA0CC,QAAQ,MAAlD,EApBmB,EAqBnB,EAAEF,MAAM,MAAR,EAAgBC,OAAO,iBAAvB,EAA0CC,QAAQ,MAAlD,EArBmB,EAsBnB,EAAEF,MAAM,MAAR,EAAgBC,OAAO,iBAAvB,EAA0CC,QAAQ,MAAlD,EAtBmB,EAuBnB,EAAEF,MAAM,QAAR,EAAkBC,OAAO,mBAAzB,EAA8CC,QAAQ,MAAtD,EAvBmB,EAwBnB,EAAEF,MAAM,MAAR,EAAgBC,OAAO,iBAAvB,EAA0CC,QAAQ,MAAlD,EAxBmB,EAyBnB,EAAEF,MAAM,QAAR,EAAkBC,OAAO,mBAAzB,EAA8CC,QAAQ,MAAtD,EAzBmB,EA0BnB,EAAEF,MAAM,QAAR,EAAkBC,OAAO,mBAAzB,EAA8CC,QAAQ,MAAtD,EA1BmB,C;AA6BjBC,gB,GAAa,CAAC,SAAD,EAAY,UAAZ,EAAwB,UAAxB,C;AACbC,mB,GAAgB,CAAC,QAAD,EAAW,MAAX,C;;mCAEPC,iB;;;AAGX;AACA,mCAAYC,MAAZ,EAAoBC,SAApB,EAA+BC,UAA/B,EAA2CC,OAA3C,EAAoDC,cAApD,EAAoE;AAAA;;AAAA,4IAC5DJ,MAD4D,EACpDC,SADoD;;AAAA,gBA0CpEI,gBA1CoE,GA0CjD,UAACpB,IAAD,EAAU;AAC3B,kBAAKqB,KAAL,CAAWC,UAAX,GAAwBtB,KAAKsB,UAA7B;AACA,kBAAKC,kBAAL;AACD,WA7CmE;;AAAA,gBAgDpEC,iBAhDoE,GAgDhD,YAAM;AACxB,gBAAIC,aAAaC,KAAKC,IAAL,CAAUC,EAAEC,MAAF,EAAUC,KAAV,MAAqB,MAAKC,KAAL,CAAWC,OAAX,CAAmBC,CAAnB,GAAuB,EAA5C,CAAV,CAAjB;AACA;AACA,gBAAIX,aAAavD,EAAEmE,GAAF,CAAM,CACnBT,aAAa,GADM,EAEnBA,aAAW,CAFQ,CAAN,CAAjB;;AAKA,gBAAIU,eAAe,MAAKJ,KAAL,CAAW7C,KAAX,CAAiBC,YAApC;AACA,gBAAIiD,aAAa,MAAKL,KAAL,CAAW7C,KAAX,CAAiBG,YAAlC;AACA,gBAAIgD,gBAAgBX,KAAKC,IAAL,CAAU,CAACL,aAAWa,YAAZ,KAA6BA,eAAeC,UAA5C,CAAV,CAApB;;AAEA,gBAAIE,mBAAJ;AACA,gBAAIC,UAAU,MAAKC,KAAL,CAAWC,EAAX,CAAcC,OAAd,KAA0B,MAAKF,KAAL,CAAWG,IAAX,CAAgBD,OAAhB,EAAxC;;AAEA;AACAJ,yBAAa,MAAKM,cAAL,CAAoBC,iBAApB,CAAsCN,UAAUF,aAAhD,CAAb;;AAEA;AACA,gBAAIS,aAAa,CAAjB,CAnBwB,CAmBJ;AACpB,gBAAIC,mBAAmB,MAAKhB,KAAL,CAAWiB,QAAlC;;AAEA;AACA,gBAAID,gBAAJ,EAAsB;AACpBA,iCAAmB,MAAKE,WAAL,CAAiBC,OAAjB,CAAyBH,gBAAzB,EAA2C,MAAKhB,KAAL,CAAWoB,UAAtD,CAAnB;AACD,aAFD,MAEO,IAAI,MAAKC,UAAL,IAAmB,MAAKA,UAAL,CAAgBJ,QAAvC,EAAiD;AACtDD,iCAAmB,MAAKK,UAAL,CAAgBJ,QAAnC;AACD;;AAED,gBAAID,gBAAJ,EAAsB;AACpB,kBAAIA,iBAAiB,CAAjB,MAAwB,GAA5B,EAAiC;AAC/BA,mCAAmBA,iBAAiBM,KAAjB,CAAuB,CAAvB,CAAnB;AACD;AACDP,2BAAa7E,IAAIqF,cAAJ,CAAmBP,gBAAnB,CAAb;AACD;;AAED,gBAAID,aAAaR,UAAjB,EAA6B;AAC3BA,2BAAaQ,UAAb;AACD;;AAED,kBAAKR,UAAL,GAAkBA,UAAlB;AACA,kBAAKU,QAAL,GAAgB/E,IAAIsF,YAAJ,CAAiBjB,aAAa,IAA9B,CAAhB;AACD,WA1FmE;;AAAA,gBA4FpEkB,YA5FoE,GA4FrD,UAACJ,UAAD,EAAgB;AAC7B,kBAAKK,kBAAL,GAA0B,MAAKtC,cAAL,CAAoBuC,cAApB,CAAmC;AAC3DC,yBAAW,MAAKA,SAD2C;AAE3D5B,qBAAO,MAAKA,KAF+C;AAG3DS,qBAAO,MAAKA;AAH+C,aAAnC,CAA1B;;AAMA;;;;;;AAMA;AACA,gBAAI,gBAAgB,OAAO,MAAKrB,cAAL,CAAoByC,kBAA/C,EAAoE;AAClE,qBAAO,MAAKzC,cAAL,CAAoByC,kBAApB,CAAuCC,IAAvC,CAA4C,aAAK;AACtD,4JAA0BT,UAA1B;AACD,eAFM,CAAP;AAGD,aAJD,MAIO;AACL,0JAA0BA,UAA1B;AACD;AACF,WAjHmE;;AAAA,gBAoHpEU,cApHoE,GAoHnD,UAACC,QAAD,EAAc;AAC7B,kBAAK/D,IAAL,GAAiB+D,QAAjB;AACA,kBAAKC,SAAL,GAAiB,MAAKC,cAAL,CAAoB,MAAKjE,IAAzB,CAAjB;;AAEA,kBAAKyD,kBAAL,CAAwBI,IAAxB,CACE,kBAAU;AACR,oBAAKK,OAAL,GAAe,KAAf;AACA;AACA,kBAAIC,OAAOC,WAAP,IAAsBD,OAAOC,WAAP,CAAmBC,MAAnB,GAA4B,CAAtD,EAAyD;AACvD,sBAAKD,WAAL,GAAmBD,OAAOC,WAA1B;AACD,eAFD,MAEO;AACL,sBAAKA,WAAL,GAAmB,IAAnB;AACD;AACD,oBAAKE,MAAL;AACD,aAVH,EAWE,YAAM;AACJ,oBAAKJ,OAAL,GAAe,KAAf;AACA,oBAAKE,WAAL,GAAmB,IAAnB;AACA,oBAAKE,MAAL;AACD,aAfH;;AAkBA;AACD,WA3ImE;;AAAA,gBA6IpEC,cA7IoE,GA6InD,YAAM;AACrB,kBAAKC,YAAL,CAAkB,SAAlB,EAA6BrG,0BAA7B,EAAyD,CAAzD;AACA,kBAAKsG,WAAL,GAAmBxG,IAAIyG,cAAJ,EAAnB;AACD,WAhJmE;;AAAA,gBAkJpEC,QAlJoE,GAkJzD,YAAM;AACf,gBAAI,CAAC,MAAK3E,IAAV,EAAgB;AAAE;AAAS;;AAE3B,kBAAK4E,cAAL,GAAsB,KAAtB;AACA,gBAAI,CAAC,MAAK7C,KAAL,CAAWzB,MAAhB,EAAwB;AACtB,kBAAI,MAAK0D,SAAT,EAAoB;AAClB,sBAAKY,cAAL,GAAsB,MAAKZ,SAAL,CAAeY,cAArC;AACD;AACF;;AAED,kBAAKC,cAAL,GAAsB,KAAtB;AACA,gBAAI,MAAK9C,KAAL,CAAWrD,KAAX,CAAiBC,IAAjB,KAA0B,UAA9B,EAA0C;AACxC,oBAAKiE,cAAL,CAAoBkC,6BAApB;AACA,kBAAI,MAAKd,SAAT,EAAoB;AAClB,sBAAKa,cAAL,GAAsB,MAAKb,SAAL,CAAea,cAArC;AACD;AACF;AACF,WAnKmE;;AAAA,gBAqKpEE,iBArKoE,GAqKhD,UAACC,QAAD,EAAc;AAChC,kBAAKjD,KAAL,CAAWrD,KAAX,CAAiBE,SAAjB,GAA6BoG,QAA7B;AACA,kBAAKV,MAAL;AACD,WAxKmE;;AAAA,gBA0KpEW,WA1KoE,GA0KtD,YAAM;AAClB,kBAAKjF,IAAL,GAAY,EAAZ;AACA,kBAAKoE,WAAL,GAAmB,EAAnB;AACA,kBAAKE,MAAL;AACD,WA9KmE;;AAAA,gBAgLpEY,WAhLoE,GAgLtD,YAAM;AAClB,kBAAKL,cAAL,GAAsB,KAAtB;AACD,WAlLmE;;AAAA,gBAoLpEM,oBApLoE,GAoL7C,YAAM;AAC3B,kBAAKpD,KAAL,CAAWrD,KAAX,CAAiBO,UAAjB,CAA4BmG,IAA5B,CAAiC,EAAE1G,OAAO,MAAKqD,KAAL,CAAW/C,YAApB,EAAjC;AACA,kBAAKsF,MAAL;AACD,WAvLmE;;AAAA,gBAyLpEe,uBAzLoE,GAyL1C,UAACC,KAAD,EAAW;AACnC,kBAAKvD,KAAL,CAAWrD,KAAX,CAAiBO,UAAjB,CAA4BsG,MAA5B,CAAmCD,KAAnC,EAA0C,CAA1C;AACA,kBAAKhB,MAAL;AACD,WA5LmE;;AAAA,gBA8LpEkB,wBA9LoE,GA8LzC,YAAM;AAC/B,kBAAKzD,KAAL,CAAWrD,KAAX,CAAiBO,UAAjB,GAA8B,EAA9B;AACA,kBAAKqF,MAAL;AACD,WAjMmE;;AAAA,gBAmMpEmB,sBAnMoE,GAmM3C,YAAM;AAC7B,kBAAK1D,KAAL,CAAWrD,KAAX,CAAiBO,UAAjB,CAA4BmG,IAA5B,CAAiC,EAAC1G,OAAO,KAAR,EAAegC,OAAO,CAAtB,EAAyBZ,SAAS,OAAlC,EAAjC;AACA,kBAAKiC,KAAL,CAAWrD,KAAX,CAAiBO,UAAjB,CAA4BmG,IAA5B,CAAiC,EAAC1G,OAAO,QAAR,EAAkBgC,OAAO,CAAzB,EAA4BZ,SAAS,SAArC,EAAjC;AACA,kBAAKiC,KAAL,CAAWrD,KAAX,CAAiBO,UAAjB,CAA4BmG,IAA5B,CAAiC,EAAC1G,OAAO,OAAR,EAAiBgC,OAAO,CAAxB,EAA2BZ,SAAS,IAApC,EAAjC;AACA,kBAAKwE,MAAL;AACD,WAxMmE;;AAAA,gBA2MpEoB,oBA3MoE,GA2M7C,YAAM;AAC3B,kBAAK3D,KAAL,CAAWrD,KAAX,CAAiBO,UAAjB,CAA4BmG,IAA5B,CAAiC,EAAC1G,OAAO,SAAR,EAAmBgC,OAAO,CAA1B,EAA6BZ,SAAS,QAAtC,EAAjC;AACA,kBAAKiC,KAAL,CAAWrD,KAAX,CAAiBO,UAAjB,CAA4BmG,IAA5B,CAAiC,EAAC1G,OAAO,SAAR,EAAmBgC,OAAO,CAA1B,EAA6BZ,SAAS,QAAtC,EAAjC;AACA,kBAAKiC,KAAL,CAAWrD,KAAX,CAAiBO,UAAjB,CAA4BmG,IAA5B,CAAiC,EAAC1G,OAAO,SAAR,EAAmBgC,OAAO,CAA1B,EAA6BZ,SAAS,KAAtC,EAAjC;AACA,kBAAKiC,KAAL,CAAWrD,KAAX,CAAiBO,UAAjB,CAA4BmG,IAA5B,CAAiC,EAAC1G,OAAO,SAAR,EAAmBgC,OAAO,CAA1B,EAA6BZ,SAAS,SAAtC,EAAjC;AACA,kBAAKiC,KAAL,CAAWrD,KAAX,CAAiBO,UAAjB,CAA4BmG,IAA5B,CAAiC,EAAC1G,OAAO,SAAR,EAAmBgC,OAAO,CAA1B,EAA6BZ,SAAS,QAAtC,EAAjC;AACA,kBAAKiC,KAAL,CAAWrD,KAAX,CAAiBO,UAAjB,CAA4BmG,IAA5B,CAAiC,EAAC1G,OAAO,SAAR,EAAmBgC,OAAO,CAA1B,EAA6BZ,SAAS,MAAtC,EAAjC;AACA,kBAAKiC,KAAL,CAAWrD,KAAX,CAAiBO,UAAjB,CAA4BmG,IAA5B,CAAiC,EAAC1G,OAAO,SAAR,EAAmBgC,OAAO,CAA1B,EAA6BZ,SAAS,MAAtC,EAAjC;AACA,kBAAKiC,KAAL,CAAWrD,KAAX,CAAiBO,UAAjB,CAA4BmG,IAA5B,CAAiC,EAAC1G,OAAO,SAAR,EAAmBgC,OAAO,CAA1B,EAA6BZ,SAAS,OAAtC,EAAjC;AACA,kBAAKwE,MAAL;AACD,WArNmE;;AAAA,gBAuNpEqB,IAvNoE,GAuN7D,UAACC,KAAD,EAAQC,IAAR,EAAcC,KAAd,EAAqBC,IAArB,EAA8B;AACnC7H,sBAAU0H,KAAV,EAAiBC,IAAjB,EAAuBC,KAAvB,EAA8BC,IAA9B;AACD,WAzNmE;;AAAA,gBA4NpE9B,cA5NoE,GA4NnD,UAACjE,IAAD,EAAU;AACzB,gBAAIgE,YAAY;AACd9E,qBAAO,EADO;AAEd8G,2BAAa,CAFC;AAGdC,2BAAa,CAHC;AAIdC,wBAAU,CAJI;AAKdC,wBAAU,CALI;AAMdvB,8BAAgB,KANF;AAOdC,8BAAgB,KAPF;AAQduB,uBAAS,EARK,EAQD;AACbC,2BAAa,EATC,CASE;AATF,aAAhB;;AAYA,gBAAI,CAACrG,IAAD,IAASA,KAAKqE,MAAL,IAAe,CAA5B,EAA+B;AAAE,qBAAOL,SAAP;AAAkB;;AAEnD;;AAEA;AACAjG,cAAEuI,GAAF,CAAMtG,IAAN,EAAY,UAACuG,CAAD,EAAIC,CAAJ,EAAU;AACpBxC,wBAAUqC,WAAV,CAAsBE,EAAEE,MAAxB,IAAkC1I,EAAE2I,MAAF,CAAS3I,EAAE4I,OAAF,CAAU3C,UAAUqC,WAAV,CAAsBE,EAAEE,MAAxB,CAAV,CAAT,EAAqDD,CAArD,CAAlC;AACD,aAFD;;AAIA;AACAxC,sBAAUoC,OAAV,GAAoBrI,EAAE6I,IAAF,CAAO5C,UAAUqC,WAAjB,CAApB;AACArC,sBAAUiC,WAAV,GAAwBjC,UAAUoC,OAAV,CAAkB/B,MAA1C;AACA;AACAL,sBAAUgC,WAAV,GAAwBjI,EAAEmE,GAAF,CAAMnE,EAAEuI,GAAF,CAAMtG,IAAN,EAAY;AAAA,qBAAKuG,EAAEM,UAAF,CAAaxC,MAAlB;AAAA,aAAZ,CAAN,CAAxB;;AAEA;AACA;AACA,iBAAI,IAAImC,IAAI,CAAZ,EAAeA,IAAIxC,UAAUoC,OAAV,CAAkB/B,MAArC,EAA6CmC,GAA7C,EAAkD;AAChD,kBAAIC,SAASzC,UAAUoC,OAAV,CAAkBI,CAAlB,CAAb;;AAEA,mBAAK,IAAIM,IAAI,CAAb,EAAgBA,IAAI9C,UAAUgC,WAA9B,EAA2Cc,GAA3C,EAAgD;AAC9C,oBAAIC,OAAO;AACTC,sBAAIR,IAAExC,UAAUgC,WAAZ,GAA0Bc,CADrB;AAETG,0BAAQ,EAFC;AAGTrC,kCAAgB,KAHP;AAITC,kCAAgB,KAJP;AAKTqC,qBAAGT,MALM;AAMTU,qBAAG,CAAC;AANK,iBAAX;;AASA;AACA,qBAAK,IAAIC,KAAK,CAAd,EAAiBA,KAAKpD,UAAUqC,WAAV,CAAsBI,MAAtB,EAA8BpC,MAApD,EAA4D+C,IAA5D,EAAkE;AAChE,sBAAIC,IAAIrH,KAAKgE,UAAUqC,WAAV,CAAsBI,MAAtB,EAA8BW,EAA9B,CAAL,CAAR;AACA,sBAAIC,EAAER,UAAF,CAAaxC,MAAb,IAAuByC,CAA3B,EAA8B;AAC5B;AACD;AACD,sBAAIQ,YAAYD,EAAER,UAAF,CAAaC,CAAb,CAAhB;AACA,sBAAIC,KAAKE,MAAL,CAAY5C,MAAZ,KAAuB,CAA3B,EAA8B;AAC5B0C,yBAAKI,CAAL,GAASG,UAAU9I,UAAV,CAAT;AACD;AACDuI,uBAAKE,MAAL,CAAY7B,IAAZ,CAAiBkC,UAAU/I,WAAV,CAAjB;AACD;AACDwI,qBAAKZ,QAAL,GAAgBpI,EAAEwJ,GAAF,CAAMR,KAAKE,MAAX,CAAhB;AACAF,qBAAKb,QAAL,GAAgBnI,EAAEmE,GAAF,CAAM6E,KAAKE,MAAX,CAAhB;AACA,oBAAIF,KAAKE,MAAL,CAAY5C,MAAZ,GAAqB,CAAzB,EAA4B;AAC1BL,4BAAUY,cAAV,GAA2B,IAA3B;AACAmC,uBAAKnC,cAAL,GAAsB,IAAtB;AACAmC,uBAAKrG,KAAL,GAAaqG,KAAKb,QAAlB,CAH0B,CAGE;AAC7B,iBAJD,MAIO;AACLa,uBAAKrG,KAAL,GAAaqG,KAAKb,QAAlB,CADK,CACuB;AAC7B;;AAED,oBAAIlC,UAAUkC,QAAV,GAAqBa,KAAKb,QAA9B,EACElC,UAAUkC,QAAV,GAAqBa,KAAKb,QAA1B;;AAEF,oBAAIlC,UAAUmC,QAAV,GAAqBY,KAAKZ,QAA9B,EACEnC,UAAUmC,QAAV,GAAqBY,KAAKZ,QAA1B;;AAEF,oBAAIY,KAAKI,CAAL,IAAU,CAAC,CAAf,EAAkB;AAClBnD,4BAAU9E,KAAV,CAAgBkG,IAAhB,CAAqB2B,IAArB;AACC;AACF;AACF;;AAED,mBAAO/C,SAAP;AACD,WA1SmE;;AAElEjG,YAAEyJ,YAAF,CAAe,MAAKzF,KAApB,EAA2BtD,aAA3B;;AAEA,gBAAKoC,aAAL,GAAqBA,aAArB;AACA,gBAAKD,UAAL,GAAkBA,UAAlB;AACA,gBAAKJ,YAAL,GAAoBA,YAApB;;AAEA;AACA,gBAAKa,KAAL,GAAa;AACX,0BAAe,CAAC;AADL,WAAb;;AAIA,gBAAKuD,cAAL,GAAsB,KAAtB;AACA,gBAAKC,cAAL,GAAsB,KAAtB;;AAEA,gBAAKjC,cAAL,GAAsB,IAAIxE,iBAAJ,CAAsB2C,MAAtB,CAAtB;;AAEA,gBAAK0G,YAAL,GAAoB;AAClB,8BAAkB;AAChBC,qBAAO,qCADS;AAEhBC,mBAAK;AAFW,aADA;AAKlB,8BAAkB;AAChBD,qBAAO,yCADS;AAEhBC,mBAAK;AAFW;AALA,WAApB;;AAWA,gBAAKvD,WAAL,GAAmB,EAAnB;AACA,gBAAKjD,cAAL,GAAsBA,cAAtB;;AAEA,gBAAKyG,MAAL,CAAYC,EAAZ,CAAe,eAAf,EAAgC,MAAK/D,cAArC;AACA,gBAAK8D,MAAL,CAAYC,EAAZ,CAAe,oBAAf,EAAqC,MAAK/D,cAA1C;AACA,gBAAK8D,MAAL,CAAYC,EAAZ,CAAe,YAAf,EAA6B,MAAK5C,WAAlC;AACA,gBAAK2C,MAAL,CAAYC,EAAZ,CAAe,gBAAf,EAAiC,MAAKtD,cAAtC;AACA,gBAAKqD,MAAL,CAAYC,EAAZ,CAAe,QAAf,EAAyB,MAAKlD,QAA9B;AACA,gBAAKiD,MAAL,CAAYC,EAAZ,CAAe,SAAf,EAA0B,MAAK3C,WAA/B;AACA;AACA,gBAAK0C,MAAL,CAAYC,EAAZ,CAAe,iBAAf,EAAkC,MAAKzG,gBAAvC;AAvCkE;AAwCnE;;AAOD;;;AA2JA;;;AAiBA;;;;QA/NqCtD,gB;;;;AAA1BgD,uB,CACJgH,W,GAAc,a","file":"status_heatmap_ctrl.js","sourcesContent":["import { MetricsPanelCtrl } from 'app/plugins/sdk';\nimport _ from 'lodash';\nimport { contextSrv } from 'app/core/core';\nimport kbn from 'app/core/utils/kbn';\n\nimport './color_legend';\nimport rendering from './rendering';\n// import aggregates, { aggregatesMap } from './aggregates';\n// import fragments, { fragmentsMap } from './fragments';\n// import { labelFormats } from './xAxisLabelFormats';\nimport {statusHeatmapOptionsEditor} from './options_editor';\nimport {ColorModeDiscrete} from \"./color_mode_discrete\";\n\nconst CANVAS = 'CANVAS';\nconst SVG = 'SVG';\nconst VALUE_INDEX = 0,\n TIME_INDEX = 1;\n\nconst panelDefaults = {\n // aggregate: aggregates.AVG,\n // fragment: fragments.HOUR,\n color: {\n mode: 'spectrum',\n cardColor: '#b4ff00',\n colorScale: 'sqrt',\n exponent: 0.5,\n colorScheme: 'interpolateGnYlRd',\n // discrete mode settings\n defaultColor: '#757575',\n thresholds: [] // manual colors\n },\n cards: {\n cardMinWidth: 5,\n cardVSpacing: 2,\n cardHSpacing: 2,\n cardRound: null\n },\n xAxis: {\n show: true,\n showWeekends: true,\n minBucketWidthToShowWeekends: 4,\n showCrosshair: true,\n labelFormat: '%a %m/%d'\n },\n yAxis: {\n show: true,\n showCrosshair: false\n },\n tooltip: {\n show: true\n },\n legend: {\n show: true\n },\n data: {\n unitFormat: 'short',\n decimals: null\n },\n // how null points should be handled\n nullPointMode: 'as empty',\n yAxisSort: 'metrics',\n highlightCards: true,\n useMax: true\n};\n\nconst renderer = CANVAS;\n\nconst colorSchemes = [\n // Diverging\n { name: 'Spectral', value: 'interpolateSpectral', invert: 'always' },\n { name: 'RdYlGn', value: 'interpolateRdYlGn', invert: 'always' },\n { name: 'GnYlRd', value: 'interpolateGnYlRd', invert: 'always' },\n\n // Sequential (Single Hue)\n { name: 'Blues', value: 'interpolateBlues', invert: 'dark' },\n { name: 'Greens', value: 'interpolateGreens', invert: 'dark' },\n { name: 'Greys', value: 'interpolateGreys', invert: 'dark' },\n { name: 'Oranges', value: 'interpolateOranges', invert: 'dark' },\n { name: 'Purples', value: 'interpolatePurples', invert: 'dark' },\n { name: 'Reds', value: 'interpolateReds', invert: 'dark' },\n\n // Sequential (Multi-Hue)\n { name: 'BuGn', value: 'interpolateBuGn', invert: 'dark' },\n { name: 'BuPu', value: 'interpolateBuPu', invert: 'dark' },\n { name: 'GnBu', value: 'interpolateGnBu', invert: 'dark' },\n { name: 'OrRd', value: 'interpolateOrRd', invert: 'dark' },\n { name: 'PuBuGn', value: 'interpolatePuBuGn', invert: 'dark' },\n { name: 'PuBu', value: 'interpolatePuBu', invert: 'dark' },\n { name: 'PuRd', value: 'interpolatePuRd', invert: 'dark' },\n { name: 'RdPu', value: 'interpolateRdPu', invert: 'dark' },\n { name: 'YlGnBu', value: 'interpolateYlGnBu', invert: 'dark' },\n { name: 'YlGn', value: 'interpolateYlGn', invert: 'dark' },\n { name: 'YlOrBr', value: 'interpolateYlOrBr', invert: 'dark' },\n { name: 'YlOrRd', value: 'interpolateYlOrRd', invert: 'dark' }\n];\n\nlet colorModes = ['opacity', 'spectrum', 'discrete'];\nlet opacityScales = ['linear', 'sqrt'];\n\nexport class StatusHeatmapCtrl extends MetricsPanelCtrl {\n static templateUrl = 'module.html';\n\n /** @ngInject */\n constructor($scope, $injector, $rootScope, timeSrv, annotationsSrv) {\n super($scope, $injector);\n _.defaultsDeep(this.panel, panelDefaults);\n\n this.opacityScales = opacityScales;\n this.colorModes = colorModes;\n this.colorSchemes = colorSchemes;\n\n // default graph width for discrete card width calculation\n this.graph = {\n \"chartWidth\" : -1\n };\n\n this.multipleValues = false;\n this.noColorDefined = false;\n\n this.discreteHelper = new ColorModeDiscrete($scope);\n\n this.dataWarnings = {\n \"noColorDefined\": {\n title: 'Data has value with undefined color',\n tip: 'Check metric values, color values or define a new color',\n },\n \"multipleValues\": {\n title: 'Data has multiple values for one target',\n tip: 'Change targets definitions or set \"use max value\"',\n }\n };\n\n this.annotations = [];\n this.annotationsSrv = annotationsSrv;\n\n this.events.on('data-received', this.onDataReceived);\n this.events.on('data-snapshot-load', this.onDataReceived);\n this.events.on('data-error', this.onDataError);\n this.events.on('init-edit-mode', this.onInitEditMode);\n this.events.on('render', this.onRender);\n this.events.on('refresh', this.postRefresh);\n // custom event from rendering.js\n this.events.on('render-complete', this.onRenderComplete);\n }\n\n onRenderComplete = (data) => {\n this.graph.chartWidth = data.chartWidth;\n this.renderingCompleted();\n };\n\n // override calculateInterval for discrete color mode\n calculateInterval = () => {\n let panelWidth = Math.ceil($(window).width() * (this.panel.gridPos.w / 24));\n // approximate chartWidth because y axis ticks not rendered yet on first data receive.\n let chartWidth = _.max([\n panelWidth - 200,\n panelWidth/2\n ]);\n\n let minCardWidth = this.panel.cards.cardMinWidth;\n let minSpacing = this.panel.cards.cardHSpacing;\n let maxCardsCount = Math.ceil((chartWidth-minCardWidth) / (minCardWidth + minSpacing));\n\n let intervalMs;\n let rangeMs = this.range.to.valueOf() - this.range.from.valueOf();\n\n // this is minimal interval! kbn.round_interval will lower it.\n intervalMs = this.discreteHelper.roundIntervalCeil(rangeMs / maxCardsCount);\n\n // Calculate low limit of interval\n let lowLimitMs = 1; // 1 millisecond default low limit\n let intervalOverride = this.panel.interval;\n\n // if no panel interval check datasource\n if (intervalOverride) {\n intervalOverride = this.templateSrv.replace(intervalOverride, this.panel.scopedVars);\n } else if (this.datasource && this.datasource.interval) {\n intervalOverride = this.datasource.interval;\n }\n\n if (intervalOverride) {\n if (intervalOverride[0] === '>') {\n intervalOverride = intervalOverride.slice(1);\n }\n lowLimitMs = kbn.interval_to_ms(intervalOverride);\n }\n\n if (lowLimitMs > intervalMs) {\n intervalMs = lowLimitMs;\n }\n\n this.intervalMs = intervalMs;\n this.interval = kbn.secondsToHms(intervalMs / 1000);\n };\n\n issueQueries = (datasource) => {\n this.annotationsPromise = this.annotationsSrv.getAnnotations({\n dashboard: this.dashboard,\n panel: this.panel,\n range: this.range,\n });\n\n /* Wait for annotationSrv requests to get datasources to\n * resolve before issuing queries. This allows the annotations\n * service to fire annotations queries before graph queries\n * (but not wait for completion). This resolves\n * issue 11806.\n */\n // 5.x before 5.4 doesn't have dataPromises\n if (\"undefined\" !== typeof(this.annotationsSrv.datasourcePromises)) {\n return this.annotationsSrv.datasourcePromises.then(r => {\n return super.issueQueries(datasource);\n });\n } else {\n return super.issueQueries(datasource);\n }\n }\n\n\n onDataReceived = (dataList) => {\n this.data = dataList;\n this.cardsData = this.convertToCards(this.data);\n\n this.annotationsPromise.then(\n result => {\n this.loading = false;\n //this.alertState = result.alertState;\n if (result.annotations && result.annotations.length > 0) {\n this.annotations = result.annotations;\n } else {\n this.annotations = null;\n }\n this.render();\n },\n () => {\n this.loading = false;\n this.annotations = null;\n this.render();\n }\n );\n\n //this.render();\n };\n\n onInitEditMode = () => {\n this.addEditorTab('Options', statusHeatmapOptionsEditor, 2);\n this.unitFormats = kbn.getUnitFormats();\n };\n\n onRender = () => {\n if (!this.data) { return; }\n\n this.multipleValues = false;\n if (!this.panel.useMax) {\n if (this.cardsData) {\n this.multipleValues = this.cardsData.multipleValues;\n }\n }\n\n this.noColorDefined = false;\n if (this.panel.color.mode === 'discrete') {\n this.discreteHelper.updateCardsValuesHasColorInfo();\n if (this.cardsData) {\n this.noColorDefined = this.cardsData.noColorDefined;\n }\n }\n };\n\n onCardColorChange = (newColor) => {\n this.panel.color.cardColor = newColor;\n this.render();\n };\n\n onDataError = () => {\n this.data = [];\n this.annotations = [];\n this.render();\n };\n\n postRefresh = () => {\n this.noColorDefined = false;\n };\n\n onEditorAddThreshold = () => {\n this.panel.color.thresholds.push({ color: this.panel.defaultColor });\n this.render();\n };\n\n onEditorRemoveThreshold = (index) => {\n this.panel.color.thresholds.splice(index, 1);\n this.render();\n };\n\n onEditorRemoveThresholds = () => {\n this.panel.color.thresholds = [];\n this.render();\n };\n\n onEditorAddThreeLights = () => {\n this.panel.color.thresholds.push({color: \"red\", value: 2, tooltip: \"error\" });\n this.panel.color.thresholds.push({color: \"yellow\", value: 1, tooltip: \"warning\" });\n this.panel.color.thresholds.push({color: \"green\", value: 0, tooltip: \"ok\" });\n this.render();\n };\n \n /* https://ethanschoonover.com/solarized/ */\n onEditorAddSolarized = () => {\n this.panel.color.thresholds.push({color: \"#b58900\", value: 0, tooltip: \"yellow\" });\n this.panel.color.thresholds.push({color: \"#cb4b16\", value: 1, tooltip: \"orange\" });\n this.panel.color.thresholds.push({color: \"#dc322f\", value: 2, tooltip: \"red\" });\n this.panel.color.thresholds.push({color: \"#d33682\", value: 3, tooltip: \"magenta\" });\n this.panel.color.thresholds.push({color: \"#6c71c4\", value: 4, tooltip: \"violet\" });\n this.panel.color.thresholds.push({color: \"#268bd2\", value: 5, tooltip: \"blue\" });\n this.panel.color.thresholds.push({color: \"#2aa198\", value: 6, tooltip: \"cyan\" });\n this.panel.color.thresholds.push({color: \"#859900\", value: 7, tooltip: \"green\" });\n this.render();\n }\n\n link = (scope, elem, attrs, ctrl) => {\n rendering(scope, elem, attrs, ctrl);\n };\n\n // group values into buckets by target\n convertToCards = (data) => {\n let cardsData = {\n cards: [],\n xBucketSize: 0,\n yBucketSize: 0,\n maxValue: 0,\n minValue: 0,\n multipleValues: false,\n noColorDefined: false,\n targets: [], // array of available unique targets\n targetIndex: {} // indices in data array for each of available unique targets\n };\n\n if (!data || data.length == 0) { return cardsData;}\n\n // Collect uniq timestamps from data and spread over targets and timestamps\n\n // collect uniq targets and their indices\n _.map(data, (d, i) => {\n cardsData.targetIndex[d.target] = _.concat(_.toArray(cardsData.targetIndex[d.target]), i)\n });\n\n // TODO add some logic for targets heirarchy\n cardsData.targets = _.keys(cardsData.targetIndex);\n cardsData.yBucketSize = cardsData.targets.length;\n // Maximum number of buckets over x axis\n cardsData.xBucketSize = _.max(_.map(data, d => d.datapoints.length));\n\n // Collect all values for each bucket from datapoints with similar target.\n // TODO aggregate values into buckets over datapoint[TIME_INDEX] not over datapoint index (j).\n for(let i = 0; i < cardsData.targets.length; i++) {\n let target = cardsData.targets[i];\n\n for (let j = 0; j < cardsData.xBucketSize; j++) {\n let card = {\n id: i*cardsData.xBucketSize + j,\n values: [],\n multipleValues: false,\n noColorDefined: false,\n y: target,\n x: -1,\n };\n\n // collect values from all timeseries with target\n for (let si = 0; si < cardsData.targetIndex[target].length; si++) {\n let s = data[cardsData.targetIndex[target][si]];\n if (s.datapoints.length <= j) {\n continue;\n }\n let datapoint = s.datapoints[j];\n if (card.values.length === 0) {\n card.x = datapoint[TIME_INDEX];\n }\n card.values.push(datapoint[VALUE_INDEX]);\n }\n card.minValue = _.min(card.values);\n card.maxValue = _.max(card.values);\n if (card.values.length > 1) {\n cardsData.multipleValues = true;\n card.multipleValues = true;\n card.value = card.maxValue; // max value by default\n } else {\n card.value = card.maxValue; // max value by default\n }\n\n if (cardsData.maxValue < card.maxValue)\n cardsData.maxValue = card.maxValue;\n\n if (cardsData.minValue > card.minValue)\n cardsData.minValue = card.minValue;\n\n if (card.x != -1) {\n cardsData.cards.push(card);\n }\n }\n }\n\n return cardsData;\n };\n}\n"]}
\ No newline at end of file
diff --git a/dist/statusmap_data.js b/dist/statusmap_data.js
new file mode 100644
index 0000000..09bf159
--- /dev/null
+++ b/dist/statusmap_data.js
@@ -0,0 +1,72 @@
+"use strict";
+
+System.register([], function (_export, _context) {
+ "use strict";
+
+ var Card, CardsStorage;
+
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+ return {
+ setters: [],
+ execute: function () {
+ // A holder of values
+ _export("Card", Card = // uniq
+ // Array of values in this bucket
+ // card has multiple values
+ // card has values that has no color
+ //
+ //
+ //
+ function Card() {
+ _classCallCheck(this, Card);
+
+ _defineProperty(this, "id", 0);
+
+ _defineProperty(this, "values", []);
+
+ _defineProperty(this, "multipleValues", false);
+
+ _defineProperty(this, "noColorDefined", false);
+
+ _defineProperty(this, "y", "");
+
+ _defineProperty(this, "x", 0);
+
+ _defineProperty(this, "minValue", 0);
+
+ _defineProperty(this, "maxValue", 0);
+
+ _defineProperty(this, "value", 0);
+ });
+
+ _export("CardsStorage", CardsStorage = function CardsStorage() {
+ _classCallCheck(this, CardsStorage);
+
+ _defineProperty(this, "cards", []);
+
+ _defineProperty(this, "xBucketSize", 0);
+
+ _defineProperty(this, "yBucketSize", 0);
+
+ _defineProperty(this, "maxValue", void 0);
+
+ _defineProperty(this, "minValue", void 0);
+
+ _defineProperty(this, "multipleValues", false);
+
+ _defineProperty(this, "noColorDefined", false);
+
+ _defineProperty(this, "targets", []);
+
+ _defineProperty(this, "targetIndex", void 0);
+
+ this.maxValue = 0;
+ this.minValue = 0;
+ });
+ }
+ };
+});
+//# sourceMappingURL=statusmap_data.js.map
diff --git a/dist/statusmap_data.js.map b/dist/statusmap_data.js.map
new file mode 100644
index 0000000..59b0615
--- /dev/null
+++ b/dist/statusmap_data.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["../src/statusmap_data.ts"],"names":["Card","CardsStorage","maxValue","minValue"],"mappings":";;;;;;;;;;;;;;AAEA;sBACMA,I,GACF;AAEA;AAEA;AAEA;AAEA;AAEA;AAEA;AAKA,sBAAc;AAAA;;AAAA,oCAhBD,CAgBC;;AAAA,wCAdE,EAcF;;AAAA,gDAZY,KAYZ;;AAAA,gDAVY,KAUZ;;AAAA,mCARF,EAQE;;AAAA,mCANF,CAME;;AAAA,0CAJK,CAIL;;AAAA,0CAHK,CAGL;;AAAA,uCAFE,CAEF;AAEb,O;;8BAGCC,Y,GAWF,wBAAc;AAAA;;AAAA,uCAVE,EAUF;;AAAA,6CATQ,CASR;;AAAA,6CARQ,CAQR;;AAAA;;AAAA;;AAAA,gDALY,KAKZ;;AAAA,gDAJY,KAIZ;;AAAA,yCAHM,EAGN;;AAAA;;AACV,aAAKC,QAAL,GAAgB,CAAhB;AACA,aAAKC,QAAL,GAAgB,CAAhB;AAEH,O","sourcesContent":["\n\n// A holder of values\nclass Card {\n // uniq\n id: number = 0;\n // Array of values in this bucket\n values: any[] = [];\n // card has multiple values\n multipleValues: boolean = false;\n // card has values that has no color\n noColorDefined: boolean = false;\n //\n y: string = \"\";\n //\n x: number = 0;\n //\n minValue: number = 0;\n maxValue: number = 0;\n value: number = 0;\n \n constructor() {\n\n }\n }\n \nclass CardsStorage {\n cards: Card[] = [];\n xBucketSize: number = 0;\n yBucketSize: number = 0;\n maxValue: number;\n minValue: number;\n multipleValues: boolean = false;\n noColorDefined: boolean = false;\n targets: string[] = [];\n targetIndex: any;\n\n constructor() {\n this.maxValue = 0;\n this.minValue = 0;\n\n }\n }\n\nexport {CardsStorage, Card};"],"file":"statusmap_data.js"}
\ No newline at end of file
diff --git a/dist/tooltip.js b/dist/tooltip.js
index 3869451..735bdbc 100644
--- a/dist/tooltip.js
+++ b/dist/tooltip.js
@@ -1,15 +1,17 @@
-'use strict';
+"use strict";
-System.register(['d3', 'jquery', 'lodash', 'app/core/utils/kbn'], function (_export, _context) {
+System.register(["d3", "jquery", "lodash"], function (_export, _context) {
"use strict";
- var d3, $, _, kbn, _createClass, TOOLTIP_PADDING_X, TOOLTIP_PADDING_Y, StatusHeatmapTooltip;
+ var d3, $, _, TOOLTIP_PADDING_X, TOOLTIP_PADDING_Y, StatusmapTooltip;
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- }
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
return {
setters: [function (_d) {
@@ -18,34 +20,32 @@ System.register(['d3', 'jquery', 'lodash', 'app/core/utils/kbn'], function (_exp
$ = _jquery.default;
}, function (_lodash) {
_ = _lodash.default;
- }, function (_appCoreUtilsKbn) {
- kbn = _appCoreUtilsKbn.default;
}],
execute: function () {
- _createClass = function () {
- function defineProperties(target, props) {
- for (var i = 0; i < props.length; i++) {
- var descriptor = props[i];
- descriptor.enumerable = descriptor.enumerable || false;
- descriptor.configurable = true;
- if ("value" in descriptor) descriptor.writable = true;
- Object.defineProperty(target, descriptor.key, descriptor);
- }
- }
-
- return function (Constructor, protoProps, staticProps) {
- if (protoProps) defineProperties(Constructor.prototype, protoProps);
- if (staticProps) defineProperties(Constructor, staticProps);
- return Constructor;
- };
- }();
-
TOOLTIP_PADDING_X = 30;
TOOLTIP_PADDING_Y = 5;
- _export('StatusHeatmapTooltip', StatusHeatmapTooltip = function () {
- function StatusHeatmapTooltip(elem, scope) {
- _classCallCheck(this, StatusHeatmapTooltip);
+ _export("StatusmapTooltip", StatusmapTooltip =
+ /*#__PURE__*/
+ function () {
+ function StatusmapTooltip(elem, scope) {
+ _classCallCheck(this, StatusmapTooltip);
+
+ _defineProperty(this, "tooltip", void 0);
+
+ _defineProperty(this, "scope", void 0);
+
+ _defineProperty(this, "dashboard", void 0);
+
+ _defineProperty(this, "panelCtrl", void 0);
+
+ _defineProperty(this, "panel", void 0);
+
+ _defineProperty(this, "heatmapPanel", void 0);
+
+ _defineProperty(this, "mouseOverBucket", void 0);
+
+ _defineProperty(this, "originalFillColor", void 0);
this.scope = scope;
this.dashboard = scope.ctrl.dashboard;
@@ -54,13 +54,12 @@ System.register(['d3', 'jquery', 'lodash', 'app/core/utils/kbn'], function (_exp
this.heatmapPanel = elem;
this.mouseOverBucket = false;
this.originalFillColor = null;
-
elem.on("mouseover", this.onMouseOver.bind(this));
elem.on("mouseleave", this.onMouseLeave.bind(this));
}
- _createClass(StatusHeatmapTooltip, [{
- key: 'onMouseOver',
+ _createClass(StatusmapTooltip, [{
+ key: "onMouseOver",
value: function onMouseOver(e) {
if (!this.panel.tooltip.show || !this.scope.ctrl.data || _.isEmpty(this.scope.ctrl.data)) {
return;
@@ -72,12 +71,12 @@ System.register(['d3', 'jquery', 'lodash', 'app/core/utils/kbn'], function (_exp
}
}
}, {
- key: 'onMouseLeave',
+ key: "onMouseLeave",
value: function onMouseLeave() {
this.destroy();
}
}, {
- key: 'onMouseMove',
+ key: "onMouseMove",
value: function onMouseMove(e) {
if (!this.panel.tooltip.show) {
return;
@@ -86,12 +85,12 @@ System.register(['d3', 'jquery', 'lodash', 'app/core/utils/kbn'], function (_exp
this.move(e);
}
}, {
- key: 'add',
+ key: "add",
value: function add() {
this.tooltip = d3.select("body").append("div").attr("class", "statusmap-tooltip graph-tooltip grafana-tooltip");
}
}, {
- key: 'destroy',
+ key: "destroy",
value: function destroy() {
if (this.tooltip) {
this.tooltip.remove();
@@ -100,22 +99,26 @@ System.register(['d3', 'jquery', 'lodash', 'app/core/utils/kbn'], function (_exp
this.tooltip = null;
}
}, {
- key: 'show',
+ key: "show",
value: function show(pos) {
if (!this.panel.tooltip.show || !this.tooltip) {
return;
- }
- // shared tooltip mode
+ } // shared tooltip mode
+
+
if (pos.panelRelY) {
return;
}
+
var cardId = d3.select(pos.target).attr('cardId');
+
if (!cardId) {
this.destroy();
return;
}
var card = this.panelCtrl.cardsData.cards[cardId];
+
if (!card) {
this.destroy();
return;
@@ -127,51 +130,51 @@ System.register(['d3', 'jquery', 'lodash', 'app/core/utils/kbn'], function (_exp
var values = card.values;
var tooltipTimeFormat = 'YYYY-MM-DD HH:mm:ss';
var time = this.dashboard.formatDate(+x, tooltipTimeFormat);
-
- var tooltipHtml = '' + time + '
\n ';
+ var tooltipHtml = "".concat(time, "
\n ");
if (this.panel.color.mode === 'discrete') {
var statuses = this.panelCtrl.discreteHelper.convertValuesToTooltips(values);
var statusesHtml = '';
+
if (statuses.length === 1) {
statusesHtml = "status:";
} else if (statuses.length > 1) {
statusesHtml = "statuses:";
}
- tooltipHtml += '\n \n name:
' + y + ' \n ' + statusesHtml + '\n
\n ' + _.join(_.map(statuses, function (v) {
- return '- ' + v.tooltip + '
';
- }), "") + '\n
\n
';
+
+ tooltipHtml += "\n \n name:
".concat(y, " \n ").concat(statusesHtml, "\n
\n ").concat(_.join(_.map(statuses, function (v) {
+ return "- ").concat(v.tooltip, "
");
+ }), ""), "\n
\n
");
} else {
if (values.length === 1) {
- tooltipHtml += ' \n name: ' + y + '
\n value: ' + value + '
\n
';
+ tooltipHtml += " \n name: ".concat(y, "
\n value: ").concat(value, "
\n
");
} else {
- tooltipHtml += '\n name:
' + y + ' \n values:\n
\n ' + _.join(_.map(values, function (v) {
- return '- ' + v + '
';
- }), "") + '\n
\n
';
+ tooltipHtml += "\n name:
".concat(y, " \n values:\n
\n ").concat(_.join(_.map(values, function (v) {
+ return "- ".concat(v, "
");
+ }), ""), "\n
\n
");
}
- }
+ } // "Ambiguous bucket state: Multiple values!";
+
- // "Ambiguous bucket state: Multiple values!";
if (!this.panel.useMax && card.multipleValues) {
- tooltipHtml += 'Error: ' + this.panelCtrl.dataWarnings.multipleValues.title + '
';
- }
+ tooltipHtml += "Error: ".concat(this.panelCtrl.dataWarnings.multipleValues.title, "
");
+ } // Discrete mode errors
+
- // Discrete mode errors
if (this.panel.color.mode === 'discrete') {
if (card.noColorDefined) {
var badValues = this.panelCtrl.discreteHelper.getNotColoredValues(values);
- tooltipHtml += 'Error: ' + this.panelCtrl.dataWarnings.noColorDefined.title + '\n
not colored values:\n
\n ' + _.join(_.map(badValues, function (v) {
- return '- ' + v + '
';
- }), "") + '\n
\n
';
+ tooltipHtml += "Error: ".concat(this.panelCtrl.dataWarnings.noColorDefined.title, "\n
not colored values:\n
\n ").concat(_.join(_.map(badValues, function (v) {
+ return "- ".concat(v, "
");
+ }), ""), "\n
\n
");
}
}
this.tooltip.html(tooltipHtml);
-
this.move(pos);
}
}, {
- key: 'move',
+ key: "move",
value: function move(pos) {
if (!this.tooltip) {
return;
@@ -180,7 +183,6 @@ System.register(['d3', 'jquery', 'lodash', 'app/core/utils/kbn'], function (_exp
var elem = $(this.tooltip.node())[0];
var tooltipWidth = elem.clientWidth;
var tooltipHeight = elem.clientHeight;
-
var left = pos.pageX + TOOLTIP_PADDING_X;
var top = pos.pageY + TOOLTIP_PADDING_Y;
@@ -196,10 +198,8 @@ System.register(['d3', 'jquery', 'lodash', 'app/core/utils/kbn'], function (_exp
}
}]);
- return StatusHeatmapTooltip;
+ return StatusmapTooltip;
}());
-
- _export('StatusHeatmapTooltip', StatusHeatmapTooltip);
}
};
});
diff --git a/dist/tooltip.js.map b/dist/tooltip.js.map
index 37484dd..567bf88 100644
--- a/dist/tooltip.js.map
+++ b/dist/tooltip.js.map
@@ -1 +1 @@
-{"version":3,"sources":["../src/tooltip.js"],"names":["d3","$","_","kbn","TOOLTIP_PADDING_X","TOOLTIP_PADDING_Y","StatusHeatmapTooltip","elem","scope","dashboard","ctrl","panelCtrl","panel","heatmapPanel","mouseOverBucket","originalFillColor","on","onMouseOver","bind","onMouseLeave","e","tooltip","show","data","isEmpty","add","move","destroy","select","append","attr","remove","pos","panelRelY","cardId","target","card","cardsData","cards","x","y","value","values","tooltipTimeFormat","time","formatDate","tooltipHtml","color","mode","statuses","discreteHelper","convertValuesToTooltips","statusesHtml","length","join","map","v","useMax","multipleValues","dataWarnings","title","noColorDefined","badValues","getNotColoredValues","html","node","tooltipWidth","clientWidth","tooltipHeight","clientHeight","left","pageX","top","pageY","window","innerWidth","pageYOffset","innerHeight","style"],"mappings":"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","file":"tooltip.js","sourcesContent":["import d3 from 'd3';\nimport $ from 'jquery';\nimport _ from 'lodash';\nimport kbn from 'app/core/utils/kbn';\n\nlet TOOLTIP_PADDING_X = 30;\nlet TOOLTIP_PADDING_Y = 5;\n\nexport class StatusHeatmapTooltip {\n constructor(elem, scope) {\n this.scope = scope;\n this.dashboard = scope.ctrl.dashboard;\n this.panelCtrl = scope.ctrl;\n this.panel = scope.ctrl.panel;\n this.heatmapPanel = elem;\n this.mouseOverBucket = false;\n this.originalFillColor = null;\n\n elem.on(\"mouseover\", this.onMouseOver.bind(this));\n elem.on(\"mouseleave\", this.onMouseLeave.bind(this));\n }\n\n onMouseOver(e) {\n if (!this.panel.tooltip.show || !this.scope.ctrl.data || _.isEmpty(this.scope.ctrl.data)) { return; }\n\n if (!this.tooltip) {\n this.add();\n this.move(e);\n }\n }\n\n onMouseLeave() {\n this.destroy();\n }\n\n onMouseMove(e) {\n if (!this.panel.tooltip.show) { return; }\n\n this.move(e);\n }\n\n add() {\n this.tooltip = d3.select(\"body\")\n .append(\"div\")\n .attr(\"class\", \"statusmap-tooltip graph-tooltip grafana-tooltip\");\n }\n\n destroy() {\n if (this.tooltip) {\n this.tooltip.remove();\n }\n\n this.tooltip = null;\n }\n\n show(pos) {\n if (!this.panel.tooltip.show || !this.tooltip) { return; }\n // shared tooltip mode\n if (pos.panelRelY) {\n return;\n }\n let cardId = d3.select(pos.target).attr('cardId');\n if (!cardId) {\n this.destroy();\n return;\n }\n\n let card = this.panelCtrl.cardsData.cards[cardId];\n if (!card) {\n this.destroy();\n return;\n }\n\n let x = card.x;\n let y = card.y;\n let value = card.value;\n let values = card.values;\n let tooltipTimeFormat = 'YYYY-MM-DD HH:mm:ss';\n let time = this.dashboard.formatDate(+x, tooltipTimeFormat);\n\n let tooltipHtml = `${time}
\n `;\n\n if (this.panel.color.mode === 'discrete') {\n let statuses = this.panelCtrl.discreteHelper.convertValuesToTooltips(values);\n let statusesHtml = '';\n if (statuses.length === 1) {\n statusesHtml = \"status:\";\n } else if (statuses.length > 1) {\n statusesHtml = \"statuses:\";\n }\n tooltipHtml += `\n \n name:
${y} \n ${statusesHtml}\n
\n ${_.join(_.map(statuses, v => `- ${v.tooltip}
`), \"\")}\n
\n
`;\n } else {\n if (values.length === 1) {\n tooltipHtml += ` \n name: ${y}
\n value: ${value}
\n
`;\n } else {\n tooltipHtml += `\n name:
${y} \n values:\n
\n ${_.join(_.map(values, v => `- ${v}
`), \"\")}\n
\n
`;\n }\n }\n\n // \"Ambiguous bucket state: Multiple values!\";\n if (!this.panel.useMax && card.multipleValues) {\n tooltipHtml += `Error: ${this.panelCtrl.dataWarnings.multipleValues.title}
`;\n }\n\n // Discrete mode errors\n if (this.panel.color.mode === 'discrete') {\n if (card.noColorDefined) {\n let badValues = this.panelCtrl.discreteHelper.getNotColoredValues(values);\n tooltipHtml += `Error: ${this.panelCtrl.dataWarnings.noColorDefined.title}\n
not colored values:\n
\n ${_.join(_.map(badValues, v => `- ${v}
`), \"\")}\n
\n
`;\n\n }\n }\n\n this.tooltip.html(tooltipHtml);\n\n this.move(pos);\n }\n\n move(pos) {\n if (!this.tooltip) { return; }\n\n let elem = $(this.tooltip.node())[0];\n let tooltipWidth = elem.clientWidth;\n let tooltipHeight = elem.clientHeight;\n\n let left = pos.pageX + TOOLTIP_PADDING_X;\n let top = pos.pageY + TOOLTIP_PADDING_Y;\n\n if (pos.pageX + tooltipWidth + 40 > window.innerWidth) {\n left = pos.pageX - tooltipWidth - TOOLTIP_PADDING_X;\n }\n\n if (pos.pageY - window.pageYOffset + tooltipHeight + 20 > window.innerHeight) {\n top = pos.pageY - tooltipHeight - TOOLTIP_PADDING_Y;\n }\n\n return this.tooltip\n .style(\"left\", left + \"px\")\n .style(\"top\", top + \"px\");\n }\n}\n"]}
\ No newline at end of file
+{"version":3,"sources":["../src/tooltip.ts"],"names":["d3","$","_","TOOLTIP_PADDING_X","TOOLTIP_PADDING_Y","StatusmapTooltip","elem","scope","dashboard","ctrl","panelCtrl","panel","heatmapPanel","mouseOverBucket","originalFillColor","on","onMouseOver","bind","onMouseLeave","e","tooltip","show","data","isEmpty","add","move","destroy","select","append","attr","remove","pos","panelRelY","cardId","target","card","cardsData","cards","x","y","value","values","tooltipTimeFormat","time","formatDate","tooltipHtml","color","mode","statuses","discreteHelper","convertValuesToTooltips","statusesHtml","length","join","map","v","useMax","multipleValues","dataWarnings","title","noColorDefined","badValues","getNotColoredValues","html","node","tooltipWidth","clientWidth","tooltipHeight","clientHeight","left","pageX","top","pageY","window","innerWidth","pageYOffset","innerHeight","style"],"mappings":"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","sourcesContent":["import d3 from 'd3';\nimport $ from 'jquery';\nimport _ from 'lodash';\nimport {StatusHeatmapCtrl} from \"./status_heatmap_ctrl\";\n\nlet TOOLTIP_PADDING_X = 30;\nlet TOOLTIP_PADDING_Y = 5;\n\nexport class StatusmapTooltip {\n tooltip: any;\n scope: any;\n dashboard: any;\n panelCtrl: StatusHeatmapCtrl;\n panel: any;\n heatmapPanel: any;\n mouseOverBucket: any;\n originalFillColor: any;\n\n constructor(elem, scope) {\n this.scope = scope;\n this.dashboard = scope.ctrl.dashboard;\n this.panelCtrl = scope.ctrl;\n this.panel = scope.ctrl.panel;\n this.heatmapPanel = elem;\n this.mouseOverBucket = false;\n this.originalFillColor = null;\n\n elem.on(\"mouseover\", this.onMouseOver.bind(this));\n elem.on(\"mouseleave\", this.onMouseLeave.bind(this));\n }\n\n onMouseOver(e) {\n if (!this.panel.tooltip.show || !this.scope.ctrl.data || _.isEmpty(this.scope.ctrl.data)) { return; }\n\n if (!this.tooltip) {\n this.add();\n this.move(e);\n }\n }\n\n onMouseLeave() {\n this.destroy();\n }\n\n onMouseMove(e) {\n if (!this.panel.tooltip.show) { return; }\n\n this.move(e);\n }\n\n add() {\n this.tooltip = d3.select(\"body\")\n .append(\"div\")\n .attr(\"class\", \"statusmap-tooltip graph-tooltip grafana-tooltip\");\n }\n\n destroy() {\n if (this.tooltip) {\n this.tooltip.remove();\n }\n\n this.tooltip = null;\n }\n\n show(pos) {\n if (!this.panel.tooltip.show || !this.tooltip) { return; }\n // shared tooltip mode\n if (pos.panelRelY) {\n return;\n }\n let cardId = d3.select(pos.target).attr('cardId');\n if (!cardId) {\n this.destroy();\n return;\n }\n\n let card = this.panelCtrl.cardsData.cards[cardId];\n if (!card) {\n this.destroy();\n return;\n }\n\n let x = card.x;\n let y = card.y;\n let value = card.value;\n let values = card.values;\n let tooltipTimeFormat = 'YYYY-MM-DD HH:mm:ss';\n let time = this.dashboard.formatDate(+x, tooltipTimeFormat);\n\n let tooltipHtml = `${time}
\n `;\n\n if (this.panel.color.mode === 'discrete') {\n let statuses = this.panelCtrl.discreteHelper.convertValuesToTooltips(values);\n let statusesHtml = '';\n if (statuses.length === 1) {\n statusesHtml = \"status:\";\n } else if (statuses.length > 1) {\n statusesHtml = \"statuses:\";\n }\n tooltipHtml += `\n \n name:
${y} \n ${statusesHtml}\n
\n ${_.join(_.map(statuses, v => `- ${v.tooltip}
`), \"\")}\n
\n
`;\n } else {\n if (values.length === 1) {\n tooltipHtml += ` \n name: ${y}
\n value: ${value}
\n
`;\n } else {\n tooltipHtml += `\n name:
${y} \n values:\n
\n ${_.join(_.map(values, v => `- ${v}
`), \"\")}\n
\n
`;\n }\n }\n\n // \"Ambiguous bucket state: Multiple values!\";\n if (!this.panel.useMax && card.multipleValues) {\n tooltipHtml += `Error: ${this.panelCtrl.dataWarnings.multipleValues.title}
`;\n }\n\n // Discrete mode errors\n if (this.panel.color.mode === 'discrete') {\n if (card.noColorDefined) {\n let badValues = this.panelCtrl.discreteHelper.getNotColoredValues(values);\n tooltipHtml += `Error: ${this.panelCtrl.dataWarnings.noColorDefined.title}\n
not colored values:\n
\n ${_.join(_.map(badValues, v => `- ${v}
`), \"\")}\n
\n
`;\n\n }\n }\n\n this.tooltip.html(tooltipHtml);\n\n this.move(pos);\n }\n\n move(pos) {\n if (!this.tooltip) { return; }\n\n let elem = $(this.tooltip.node())[0];\n let tooltipWidth = elem.clientWidth;\n let tooltipHeight = elem.clientHeight;\n\n let left = pos.pageX + TOOLTIP_PADDING_X;\n let top = pos.pageY + TOOLTIP_PADDING_Y;\n\n if (pos.pageX + tooltipWidth + 40 > window.innerWidth) {\n left = pos.pageX - tooltipWidth - TOOLTIP_PADDING_X;\n }\n\n if (pos.pageY - window.pageYOffset + tooltipHeight + 20 > window.innerHeight) {\n top = pos.pageY - tooltipHeight - TOOLTIP_PADDING_Y;\n }\n\n return this.tooltip\n .style(\"left\", left + \"px\")\n .style(\"top\", top + \"px\");\n }\n}\n"],"file":"tooltip.js"}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..40266be
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,8479 @@
+{
+ "name": "flant-statusmap-panel",
+ "version": "0.1.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
+ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "@babel/core": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.6.4.tgz",
+ "integrity": "sha512-Rm0HGw101GY8FTzpWSyRbki/jzq+/PkNQJ+nSulrdY6gFGOsNseCqD6KHRYe2E+EdzuBdr2pxCp6s4Uk6eJ+XQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.5.5",
+ "@babel/generator": "^7.6.4",
+ "@babel/helpers": "^7.6.2",
+ "@babel/parser": "^7.6.4",
+ "@babel/template": "^7.6.0",
+ "@babel/traverse": "^7.6.3",
+ "@babel/types": "^7.6.3",
+ "convert-source-map": "^1.1.0",
+ "debug": "^4.1.0",
+ "json5": "^2.1.0",
+ "lodash": "^4.17.13",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+ "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.2.tgz",
+ "integrity": "sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.2",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz",
+ "integrity": "sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.7.0",
+ "@babel/template": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz",
+ "integrity": "sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz",
+ "integrity": "sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.3.tgz",
+ "integrity": "sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz",
+ "integrity": "sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.2.tgz",
+ "integrity": "sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.5.5",
+ "@babel/generator": "^7.7.2",
+ "@babel/helper-function-name": "^7.7.0",
+ "@babel/helper-split-export-declaration": "^7.7.0",
+ "@babel/parser": "^7.7.2",
+ "@babel/types": "^7.7.2",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/types": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz",
+ "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/generator": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz",
+ "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.4.4",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.11",
+ "source-map": "^0.5.0",
+ "trim-right": "^1.0.1"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/helper-annotate-as-pure": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.0.tgz",
+ "integrity": "sha512-k50CQxMlYTYo+GGyUGFwpxKVtxVJi9yh61sXZji3zYHccK9RYliZGSTOgci85T+r+0VFN2nWbGM04PIqwfrpMg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz",
+ "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.0.tgz",
+ "integrity": "sha512-Cd8r8zs4RKDwMG/92lpZcnn5WPQ3LAMQbCw42oqUh4s7vsSN5ANUZjMel0OOnxDLq57hoDDbai+ryygYfCTOsw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-explode-assignable-expression": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz",
+ "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/helper-call-delegate": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.7.0.tgz",
+ "integrity": "sha512-Su0Mdq7uSSWGZayGMMQ+z6lnL00mMCnGAbO/R0ZO9odIdB/WNU/VfQKqMQU0fdIsxQYbRjDM4BixIa93SQIpvw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.7.0",
+ "@babel/traverse": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+ "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.2.tgz",
+ "integrity": "sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.2",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz",
+ "integrity": "sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.7.0",
+ "@babel/template": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz",
+ "integrity": "sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.0.tgz",
+ "integrity": "sha512-LUe/92NqsDAkJjjCEWkNe+/PcpnisvnqdlRe19FahVapa4jndeuJ+FBiTX1rcAKWKcJGE+C3Q3tuEuxkSmCEiQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz",
+ "integrity": "sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.3.tgz",
+ "integrity": "sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz",
+ "integrity": "sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.2.tgz",
+ "integrity": "sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.5.5",
+ "@babel/generator": "^7.7.2",
+ "@babel/helper-function-name": "^7.7.0",
+ "@babel/helper-split-export-declaration": "^7.7.0",
+ "@babel/parser": "^7.7.2",
+ "@babel/types": "^7.7.2",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/types": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz",
+ "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/helper-create-class-features-plugin": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz",
+ "integrity": "sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-member-expression-to-functions": "^7.0.0",
+ "@babel/helper-optimise-call-expression": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.4.4",
+ "@babel/helper-split-export-declaration": "^7.4.4"
+ }
+ },
+ "@babel/helper-create-regexp-features-plugin": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.2.tgz",
+ "integrity": "sha512-pAil/ZixjTlrzNpjx+l/C/wJk002Wo7XbbZ8oujH/AoJ3Juv0iN/UTcPUHXKMFLqsfS0Hy6Aow8M31brUYBlQQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-regex": "^7.4.4",
+ "regexpu-core": "^4.6.0"
+ }
+ },
+ "@babel/helper-define-map": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.7.0.tgz",
+ "integrity": "sha512-kPKWPb0dMpZi+ov1hJiwse9dWweZsz3V9rP4KdytnX1E7z3cTNmFGglwklzFPuqIcHLIY3bgKSs4vkwXXdflQA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.7.0",
+ "@babel/types": "^7.7.0",
+ "lodash": "^4.17.13"
+ },
+ "dependencies": {
+ "@babel/helper-function-name": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz",
+ "integrity": "sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.7.0",
+ "@babel/template": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz",
+ "integrity": "sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.3.tgz",
+ "integrity": "sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz",
+ "integrity": "sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/types": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz",
+ "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/helper-explode-assignable-expression": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.0.tgz",
+ "integrity": "sha512-CDs26w2shdD1urNUAji2RJXyBFCaR+iBEGnFz3l7maizMkQe3saVw9WtjG1tz8CwbjvlFnaSLVhgnu1SWaherg==",
+ "dev": true,
+ "requires": {
+ "@babel/traverse": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+ "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.2.tgz",
+ "integrity": "sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.2",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz",
+ "integrity": "sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.7.0",
+ "@babel/template": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz",
+ "integrity": "sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz",
+ "integrity": "sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.3.tgz",
+ "integrity": "sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz",
+ "integrity": "sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.2.tgz",
+ "integrity": "sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.5.5",
+ "@babel/generator": "^7.7.2",
+ "@babel/helper-function-name": "^7.7.0",
+ "@babel/helper-split-export-declaration": "^7.7.0",
+ "@babel/parser": "^7.7.2",
+ "@babel/types": "^7.7.2",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/types": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz",
+ "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz",
+ "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.0.0",
+ "@babel/template": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz",
+ "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz",
+ "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.4.4"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz",
+ "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.0.tgz",
+ "integrity": "sha512-Dv3hLKIC1jyfTkClvyEkYP2OlkzNvWs5+Q8WgPbxM5LMeorons7iPP91JM+DU7tRbhqA1ZeooPaMFvQrn23RHw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz",
+ "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.7.0.tgz",
+ "integrity": "sha512-rXEefBuheUYQyX4WjV19tuknrJFwyKw0HgzRwbkyTbB+Dshlq7eqkWbyjzToLrMZk/5wKVKdWFluiAsVkHXvuQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.7.0",
+ "@babel/helper-simple-access": "^7.7.0",
+ "@babel/helper-split-export-declaration": "^7.7.0",
+ "@babel/template": "^7.7.0",
+ "@babel/types": "^7.7.0",
+ "lodash": "^4.17.13"
+ },
+ "dependencies": {
+ "@babel/helper-split-export-declaration": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz",
+ "integrity": "sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.3.tgz",
+ "integrity": "sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz",
+ "integrity": "sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/types": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz",
+ "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz",
+ "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz",
+ "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==",
+ "dev": true
+ },
+ "@babel/helper-regex": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz",
+ "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/helper-remap-async-to-generator": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.0.tgz",
+ "integrity": "sha512-pHx7RN8X0UNHPB/fnuDnRXVZ316ZigkO8y8D835JlZ2SSdFKb6yH9MIYRU4fy/KPe5sPHDFOPvf8QLdbAGGiyw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.7.0",
+ "@babel/helper-wrap-function": "^7.7.0",
+ "@babel/template": "^7.7.0",
+ "@babel/traverse": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ },
+ "dependencies": {
+ "@babel/generator": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.2.tgz",
+ "integrity": "sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.2",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz",
+ "integrity": "sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.7.0",
+ "@babel/template": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz",
+ "integrity": "sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz",
+ "integrity": "sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.3.tgz",
+ "integrity": "sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz",
+ "integrity": "sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.2.tgz",
+ "integrity": "sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.5.5",
+ "@babel/generator": "^7.7.2",
+ "@babel/helper-function-name": "^7.7.0",
+ "@babel/helper-split-export-declaration": "^7.7.0",
+ "@babel/parser": "^7.7.2",
+ "@babel/types": "^7.7.2",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.13"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+ "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz",
+ "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz",
+ "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.0.0",
+ "@babel/helper-optimise-call-expression": "^7.0.0",
+ "@babel/traverse": "^7.4.4",
+ "@babel/types": "^7.4.4"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.7.0.tgz",
+ "integrity": "sha512-AJ7IZD7Eem3zZRuj5JtzFAptBw7pMlS3y8Qv09vaBWoFsle0d1kAn5Wq6Q9MyBXITPOKnxwkZKoAm4bopmv26g==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ },
+ "dependencies": {
+ "@babel/parser": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.3.tgz",
+ "integrity": "sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz",
+ "integrity": "sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/types": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz",
+ "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz",
+ "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.4.4"
+ }
+ },
+ "@babel/helper-wrap-function": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.7.0.tgz",
+ "integrity": "sha512-sd4QjeMgQqzshSjecZjOp8uKfUtnpmCyQhKQrVJBBgeHAB/0FPi33h3AbVlVp07qQtMD4QgYSzaMI7VwncNK/w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.7.0",
+ "@babel/template": "^7.7.0",
+ "@babel/traverse": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ },
+ "dependencies": {
+ "@babel/generator": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.2.tgz",
+ "integrity": "sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.2",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz",
+ "integrity": "sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.7.0",
+ "@babel/template": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz",
+ "integrity": "sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz",
+ "integrity": "sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.3.tgz",
+ "integrity": "sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz",
+ "integrity": "sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.2.tgz",
+ "integrity": "sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.5.5",
+ "@babel/generator": "^7.7.2",
+ "@babel/helper-function-name": "^7.7.0",
+ "@babel/helper-split-export-declaration": "^7.7.0",
+ "@babel/parser": "^7.7.2",
+ "@babel/types": "^7.7.2",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.13"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+ "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz",
+ "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/helpers": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.0.tgz",
+ "integrity": "sha512-VnNwL4YOhbejHb7x/b5F39Zdg5vIQpUUNzJwx0ww1EcVRt41bbGRZWhAURrfY32T5zTT3qwNOQFWpn+P0i0a2g==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.7.0",
+ "@babel/traverse": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ },
+ "dependencies": {
+ "@babel/generator": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.2.tgz",
+ "integrity": "sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.2",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz",
+ "integrity": "sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.7.0",
+ "@babel/template": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz",
+ "integrity": "sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz",
+ "integrity": "sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.3.tgz",
+ "integrity": "sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz",
+ "integrity": "sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.2.tgz",
+ "integrity": "sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.5.5",
+ "@babel/generator": "^7.7.2",
+ "@babel/helper-function-name": "^7.7.0",
+ "@babel/helper-split-export-declaration": "^7.7.0",
+ "@babel/parser": "^7.7.2",
+ "@babel/types": "^7.7.2",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.13"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+ "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz",
+ "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
+ "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.0",
+ "esutils": "^2.0.2",
+ "js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@babel/parser": {
+ "version": "7.4.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz",
+ "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==",
+ "dev": true
+ },
+ "@babel/plugin-proposal-async-generator-functions": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.0.tgz",
+ "integrity": "sha512-ot/EZVvf3mXtZq0Pd0+tSOfGWMizqmOohXmNZg6LNFjHOV+wOPv7BvVYh8oPR8LhpIP3ye8nNooKL50YRWxpYA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-remap-async-to-generator": "^7.7.0",
+ "@babel/plugin-syntax-async-generators": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-class-properties": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.4.tgz",
+ "integrity": "sha512-WjKTI8g8d5w1Bc9zgwSz2nfrsNQsXcCf9J9cdCvrJV6RF56yztwm4TmJC0MgJ9tvwO9gUA/mcYe89bLdGfiXFg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.4.4",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-proposal-dynamic-import": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.0.tgz",
+ "integrity": "sha512-7poL3Xi+QFPC7sGAzEIbXUyYzGJwbc2+gSD0AkiC5k52kH2cqHdqxm5hNFfLW3cRSTcx9bN0Fl7/6zWcLLnKAQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-dynamic-import": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-json-strings": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz",
+ "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-json-strings": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz",
+ "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-optional-catch-binding": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz",
+ "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.2.0"
+ }
+ },
+ "@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.0.tgz",
+ "integrity": "sha512-mk34H+hp7kRBWJOOAR0ZMGCydgKMD4iN9TpDRp3IIcbunltxEY89XSimc6WbtSLCDrwcdy/EEw7h5CFCzxTchw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.7.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-async-generators": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz",
+ "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-dynamic-import": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz",
+ "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-json-strings": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz",
+ "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz",
+ "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz",
+ "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-syntax-typescript": {
+ "version": "7.3.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz",
+ "integrity": "sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz",
+ "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.0.tgz",
+ "integrity": "sha512-vLI2EFLVvRBL3d8roAMqtVY0Bm9C1QzLkdS57hiKrjUBSqsQYrBsMCeOg/0KK7B0eK9V71J5mWcha9yyoI2tZw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.7.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-remap-async-to-generator": "^7.7.0"
+ }
+ },
+ "@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz",
+ "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-block-scoping": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz",
+ "integrity": "sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/plugin-transform-classes": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.0.tgz",
+ "integrity": "sha512-/b3cKIZwGeUesZheU9jNYcwrEA7f/Bo4IdPmvp7oHgvks2majB5BoT5byAql44fiNQYOPzhk2w8DbgfuafkMoA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.7.0",
+ "@babel/helper-define-map": "^7.7.0",
+ "@babel/helper-function-name": "^7.7.0",
+ "@babel/helper-optimise-call-expression": "^7.7.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.7.0",
+ "@babel/helper-split-export-declaration": "^7.7.0",
+ "globals": "^11.1.0"
+ },
+ "dependencies": {
+ "@babel/generator": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.2.tgz",
+ "integrity": "sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.2",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz",
+ "integrity": "sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.7.0",
+ "@babel/template": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz",
+ "integrity": "sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.0.tgz",
+ "integrity": "sha512-QaCZLO2RtBcmvO/ekOLp8p7R5X2JriKRizeDpm5ChATAFWrrYDcDxPuCIBXKyBjY+i1vYSdcUTMIb8psfxHDPA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.0.tgz",
+ "integrity": "sha512-48TeqmbazjNU/65niiiJIJRc5JozB8acui1OS7bSd6PgxfuovWsvjfWSzlgx+gPFdVveNzUdpdIg5l56Pl5jqg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.7.0.tgz",
+ "integrity": "sha512-5ALYEul5V8xNdxEeWvRsBzLMxQksT7MaStpxjJf9KsnLxpAKBtfw5NeMKZJSYDa0lKdOcy0g+JT/f5mPSulUgg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.7.0",
+ "@babel/helper-optimise-call-expression": "^7.7.0",
+ "@babel/traverse": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz",
+ "integrity": "sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.3.tgz",
+ "integrity": "sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz",
+ "integrity": "sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.2.tgz",
+ "integrity": "sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.5.5",
+ "@babel/generator": "^7.7.2",
+ "@babel/helper-function-name": "^7.7.0",
+ "@babel/helper-split-export-declaration": "^7.7.0",
+ "@babel/parser": "^7.7.2",
+ "@babel/types": "^7.7.2",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.13"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+ "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz",
+ "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/plugin-transform-computed-properties": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz",
+ "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-destructuring": {
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz",
+ "integrity": "sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-dotall-regex": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.0.tgz",
+ "integrity": "sha512-3QQlF7hSBnSuM1hQ0pS3pmAbWLax/uGNCbPBND9y+oJ4Y776jsyujG2k0Sn2Aj2a0QwVOiOFL5QVPA7spjvzSA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.7.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-duplicate-keys": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz",
+ "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz",
+ "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-for-of": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz",
+ "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-function-name": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.0.tgz",
+ "integrity": "sha512-P5HKu0d9+CzZxP5jcrWdpe7ZlFDe24bmqP6a6X8BHEBl/eizAsY8K6LX8LASZL0Jxdjm5eEfzp+FIrxCm/p8bA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.7.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ },
+ "dependencies": {
+ "@babel/helper-function-name": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz",
+ "integrity": "sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.7.0",
+ "@babel/template": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz",
+ "integrity": "sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.3.tgz",
+ "integrity": "sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz",
+ "integrity": "sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/types": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz",
+ "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/plugin-transform-literals": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz",
+ "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-member-expression-literals": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz",
+ "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-amd": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz",
+ "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.1.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "babel-plugin-dynamic-import-node": "^2.3.0"
+ }
+ },
+ "@babel/plugin-transform-modules-commonjs": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.0.tgz",
+ "integrity": "sha512-KEMyWNNWnjOom8vR/1+d+Ocz/mILZG/eyHHO06OuBQ2aNhxT62fr4y6fGOplRx+CxCSp3IFwesL8WdINfY/3kg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.7.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-simple-access": "^7.7.0",
+ "babel-plugin-dynamic-import-node": "^2.3.0"
+ }
+ },
+ "@babel/plugin-transform-modules-systemjs": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz",
+ "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.4.4",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-modules-umd": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.0.tgz",
+ "integrity": "sha512-u7eBA03zmUswQ9LQ7Qw0/ieC1pcAkbp5OQatbWUzY1PaBccvuJXUkYzoN1g7cqp7dbTu6Dp9bXyalBvD04AANA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-transforms": "^7.7.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.0.tgz",
+ "integrity": "sha512-+SicSJoKouPctL+j1pqktRVCgy+xAch1hWWTMy13j0IflnyNjaoskj+DwRQFimHbLqO3sq2oN2CXMvXq3Bgapg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.7.0"
+ }
+ },
+ "@babel/plugin-transform-new-target": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz",
+ "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-object-super": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz",
+ "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.5.5"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+ "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.2.tgz",
+ "integrity": "sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.2",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz",
+ "integrity": "sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.7.0",
+ "@babel/template": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz",
+ "integrity": "sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.0.tgz",
+ "integrity": "sha512-QaCZLO2RtBcmvO/ekOLp8p7R5X2JriKRizeDpm5ChATAFWrrYDcDxPuCIBXKyBjY+i1vYSdcUTMIb8psfxHDPA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.0.tgz",
+ "integrity": "sha512-48TeqmbazjNU/65niiiJIJRc5JozB8acui1OS7bSd6PgxfuovWsvjfWSzlgx+gPFdVveNzUdpdIg5l56Pl5jqg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.7.0.tgz",
+ "integrity": "sha512-5ALYEul5V8xNdxEeWvRsBzLMxQksT7MaStpxjJf9KsnLxpAKBtfw5NeMKZJSYDa0lKdOcy0g+JT/f5mPSulUgg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.7.0",
+ "@babel/helper-optimise-call-expression": "^7.7.0",
+ "@babel/traverse": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz",
+ "integrity": "sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.3.tgz",
+ "integrity": "sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz",
+ "integrity": "sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.2.tgz",
+ "integrity": "sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.5.5",
+ "@babel/generator": "^7.7.2",
+ "@babel/helper-function-name": "^7.7.0",
+ "@babel/helper-split-export-declaration": "^7.7.0",
+ "@babel/parser": "^7.7.2",
+ "@babel/types": "^7.7.2",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/types": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz",
+ "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/plugin-transform-parameters": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz",
+ "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-call-delegate": "^7.4.4",
+ "@babel/helper-get-function-arity": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-property-literals": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz",
+ "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-regenerator": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.0.tgz",
+ "integrity": "sha512-AXmvnC+0wuj/cFkkS/HFHIojxH3ffSXE+ttulrqWjZZRaUOonfJc60e1wSNT4rV8tIunvu/R3wCp71/tLAa9xg==",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "^0.14.0"
+ }
+ },
+ "@babel/plugin-transform-reserved-words": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz",
+ "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-shorthand-properties": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz",
+ "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-spread": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz",
+ "integrity": "sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-sticky-regex": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz",
+ "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-regex": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-template-literals": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz",
+ "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-typeof-symbol": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz",
+ "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/plugin-transform-typescript": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.7.2.tgz",
+ "integrity": "sha512-UWhDaJRqdPUtdK1s0sKYdoRuqK0NepjZto2UZltvuCgMoMZmdjhgz5hcRokie/3aYEaSz3xvusyoayVaq4PjRg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.7.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-typescript": "^7.2.0"
+ },
+ "dependencies": {
+ "@babel/generator": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.2.tgz",
+ "integrity": "sha512-WthSArvAjYLz4TcbKOi88me+KmDJdKSlfwwN8CnUYn9jBkzhq0ZEPuBfkAWIvjJ3AdEV1Cf/+eSQTnp3IDJKlQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.2",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-create-class-features-plugin": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.7.0.tgz",
+ "integrity": "sha512-MZiB5qvTWoyiFOgootmRSDV1udjIqJW/8lmxgzKq6oDqxdmHUjeP2ZUOmgHdYjmUVNABqRrHjYAYRvj8Eox/UA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.7.0",
+ "@babel/helper-member-expression-to-functions": "^7.7.0",
+ "@babel/helper-optimise-call-expression": "^7.7.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/helper-replace-supers": "^7.7.0",
+ "@babel/helper-split-export-declaration": "^7.7.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz",
+ "integrity": "sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.7.0",
+ "@babel/template": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz",
+ "integrity": "sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.0.tgz",
+ "integrity": "sha512-QaCZLO2RtBcmvO/ekOLp8p7R5X2JriKRizeDpm5ChATAFWrrYDcDxPuCIBXKyBjY+i1vYSdcUTMIb8psfxHDPA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.0.tgz",
+ "integrity": "sha512-48TeqmbazjNU/65niiiJIJRc5JozB8acui1OS7bSd6PgxfuovWsvjfWSzlgx+gPFdVveNzUdpdIg5l56Pl5jqg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.7.0.tgz",
+ "integrity": "sha512-5ALYEul5V8xNdxEeWvRsBzLMxQksT7MaStpxjJf9KsnLxpAKBtfw5NeMKZJSYDa0lKdOcy0g+JT/f5mPSulUgg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.7.0",
+ "@babel/helper-optimise-call-expression": "^7.7.0",
+ "@babel/traverse": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz",
+ "integrity": "sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.3.tgz",
+ "integrity": "sha512-bqv+iCo9i+uLVbI0ILzKkvMorqxouI+GbV13ivcARXn9NNEabi2IEz912IgNpT/60BNXac5dgcfjb94NjsF33A==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz",
+ "integrity": "sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.7.0",
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.2.tgz",
+ "integrity": "sha512-TM01cXib2+rgIZrGJOLaHV/iZUAxf4A0dt5auY6KNZ+cm6aschuJGqKJM3ROTt3raPUdIDk9siAufIFEleRwtw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.5.5",
+ "@babel/generator": "^7.7.2",
+ "@babel/helper-function-name": "^7.7.0",
+ "@babel/helper-split-export-declaration": "^7.7.0",
+ "@babel/parser": "^7.7.2",
+ "@babel/types": "^7.7.2",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.13"
+ },
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.5.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+ "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz",
+ "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/plugin-transform-unicode-regex": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.0.tgz",
+ "integrity": "sha512-RrThb0gdrNwFAqEAAx9OWgtx6ICK69x7i9tCnMdVrxQwSDp/Abu9DXFU5Hh16VP33Rmxh04+NGW28NsIkFvFKA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.7.0",
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/preset-env": {
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.6.3.tgz",
+ "integrity": "sha512-CWQkn7EVnwzlOdR5NOm2+pfgSNEZmvGjOhlCHBDq0J8/EStr+G+FvPEiz9B56dR6MoiUFjXhfE4hjLoAKKJtIQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-async-generator-functions": "^7.2.0",
+ "@babel/plugin-proposal-dynamic-import": "^7.5.0",
+ "@babel/plugin-proposal-json-strings": "^7.2.0",
+ "@babel/plugin-proposal-object-rest-spread": "^7.6.2",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.6.2",
+ "@babel/plugin-syntax-async-generators": "^7.2.0",
+ "@babel/plugin-syntax-dynamic-import": "^7.2.0",
+ "@babel/plugin-syntax-json-strings": "^7.2.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.2.0",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.2.0",
+ "@babel/plugin-transform-arrow-functions": "^7.2.0",
+ "@babel/plugin-transform-async-to-generator": "^7.5.0",
+ "@babel/plugin-transform-block-scoped-functions": "^7.2.0",
+ "@babel/plugin-transform-block-scoping": "^7.6.3",
+ "@babel/plugin-transform-classes": "^7.5.5",
+ "@babel/plugin-transform-computed-properties": "^7.2.0",
+ "@babel/plugin-transform-destructuring": "^7.6.0",
+ "@babel/plugin-transform-dotall-regex": "^7.6.2",
+ "@babel/plugin-transform-duplicate-keys": "^7.5.0",
+ "@babel/plugin-transform-exponentiation-operator": "^7.2.0",
+ "@babel/plugin-transform-for-of": "^7.4.4",
+ "@babel/plugin-transform-function-name": "^7.4.4",
+ "@babel/plugin-transform-literals": "^7.2.0",
+ "@babel/plugin-transform-member-expression-literals": "^7.2.0",
+ "@babel/plugin-transform-modules-amd": "^7.5.0",
+ "@babel/plugin-transform-modules-commonjs": "^7.6.0",
+ "@babel/plugin-transform-modules-systemjs": "^7.5.0",
+ "@babel/plugin-transform-modules-umd": "^7.2.0",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.6.3",
+ "@babel/plugin-transform-new-target": "^7.4.4",
+ "@babel/plugin-transform-object-super": "^7.5.5",
+ "@babel/plugin-transform-parameters": "^7.4.4",
+ "@babel/plugin-transform-property-literals": "^7.2.0",
+ "@babel/plugin-transform-regenerator": "^7.4.5",
+ "@babel/plugin-transform-reserved-words": "^7.2.0",
+ "@babel/plugin-transform-shorthand-properties": "^7.2.0",
+ "@babel/plugin-transform-spread": "^7.6.2",
+ "@babel/plugin-transform-sticky-regex": "^7.2.0",
+ "@babel/plugin-transform-template-literals": "^7.4.4",
+ "@babel/plugin-transform-typeof-symbol": "^7.2.0",
+ "@babel/plugin-transform-unicode-regex": "^7.6.2",
+ "@babel/types": "^7.6.3",
+ "browserslist": "^4.6.0",
+ "core-js-compat": "^3.1.1",
+ "invariant": "^2.2.2",
+ "js-levenshtein": "^1.1.3",
+ "semver": "^5.5.0"
+ },
+ "dependencies": {
+ "@babel/helper-hoist-variables": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.0.tgz",
+ "integrity": "sha512-LUe/92NqsDAkJjjCEWkNe+/PcpnisvnqdlRe19FahVapa4jndeuJ+FBiTX1rcAKWKcJGE+C3Q3tuEuxkSmCEiQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.7.0"
+ }
+ },
+ "@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz",
+ "integrity": "sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-syntax-object-rest-spread": "^7.2.0"
+ }
+ },
+ "@babel/plugin-transform-modules-systemjs": {
+ "version": "7.7.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.0.tgz",
+ "integrity": "sha512-ZAuFgYjJzDNv77AjXRqzQGlQl4HdUM6j296ee4fwKVZfhDR9LAGxfvXjBkb06gNETPnN0sLqRm9Gxg4wZH6dXg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-hoist-variables": "^7.7.0",
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "babel-plugin-dynamic-import-node": "^2.3.0"
+ }
+ },
+ "@babel/types": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.2.tgz",
+ "integrity": "sha512-YTf6PXoh3+eZgRCBzzP25Bugd2ngmpQVrk7kXX0i5N9BO7TFBtIgZYs7WtxtOGs8e6A4ZI7ECkbBCEHeXocvOA==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/preset-typescript": {
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.6.0.tgz",
+ "integrity": "sha512-4xKw3tTcCm0qApyT6PqM9qniseCE79xGHiUnNdKGdxNsGUc2X7WwZybqIpnTmoukg3nhPceI5KPNzNqLNeIJww==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-transform-typescript": "^7.6.0"
+ }
+ },
+ "@babel/template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz",
+ "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.4.4",
+ "@babel/types": "^7.4.4"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.4.5",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz",
+ "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/generator": "^7.4.4",
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.4.4",
+ "@babel/parser": "^7.4.5",
+ "@babel/types": "^7.4.4",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.11"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz",
+ "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.11",
+ "to-fast-properties": "^2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ }
+ }
+ },
+ "@cnakazawa/watch": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz",
+ "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==",
+ "dev": true,
+ "requires": {
+ "exec-sh": "^0.3.2",
+ "minimist": "^1.2.0"
+ }
+ },
+ "@jest/console": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz",
+ "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==",
+ "dev": true,
+ "requires": {
+ "@jest/source-map": "^24.9.0",
+ "chalk": "^2.0.1",
+ "slash": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@jest/fake-timers": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz",
+ "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^24.9.0",
+ "jest-message-util": "^24.9.0",
+ "jest-mock": "^24.9.0"
+ }
+ },
+ "@jest/source-map": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz",
+ "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0",
+ "graceful-fs": "^4.1.15",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "@jest/test-result": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz",
+ "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==",
+ "dev": true,
+ "requires": {
+ "@jest/console": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "@types/istanbul-lib-coverage": "^2.0.0"
+ }
+ },
+ "@jest/transform": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz",
+ "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.1.0",
+ "@jest/types": "^24.9.0",
+ "babel-plugin-istanbul": "^5.1.0",
+ "chalk": "^2.0.1",
+ "convert-source-map": "^1.4.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "graceful-fs": "^4.1.15",
+ "jest-haste-map": "^24.9.0",
+ "jest-regex-util": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "micromatch": "^3.1.10",
+ "pirates": "^4.0.1",
+ "realpath-native": "^1.1.0",
+ "slash": "^2.0.0",
+ "source-map": "^0.6.1",
+ "write-file-atomic": "2.4.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@jest/types": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz",
+ "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==",
+ "dev": true,
+ "requires": {
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^1.1.1",
+ "@types/yargs": "^13.0.0"
+ }
+ },
+ "@types/angular": {
+ "version": "1.6.56",
+ "resolved": "https://registry.npmjs.org/@types/angular/-/angular-1.6.56.tgz",
+ "integrity": "sha512-HxtqilvklZ7i6XOaiP7uIJIrFXEVEhfbSY45nfv2DeBRngncI58Y4ZOUMiUkcT8sqgLL1ablmbfylChUg7A3GA==",
+ "dev": true
+ },
+ "@types/babel__core": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz",
+ "integrity": "sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA==",
+ "dev": true,
+ "requires": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "@types/babel__generator": {
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.0.tgz",
+ "integrity": "sha512-c1mZUu4up5cp9KROs/QAw0gTeHrw/x7m52LcnvMxxOZ03DmLwPV0MlGmlgzV3cnSdjhJOZsj7E7FHeioai+egw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@types/babel__template": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz",
+ "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==",
+ "dev": true,
+ "requires": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@types/babel__traverse": {
+ "version": "7.0.8",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.8.tgz",
+ "integrity": "sha512-yGeB2dHEdvxjP0y4UbRtQaSkXJ9649fYCmIdRoul5kfAoGCwxuCbMhag0k3RPfnuh9kPGm8x89btcfDEXdVWGw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.3.0"
+ }
+ },
+ "@types/d3": {
+ "version": "4.13.1",
+ "resolved": "https://registry.npmjs.org/@types/d3/-/d3-4.13.1.tgz",
+ "integrity": "sha512-aJDD18fjLurxior2/3aZ+Trvu5kcCEwoujGGt6LrLXsdxv9KR1gCeJQOve7tUwvSQhrIUsXNfTHhXNnfRxnyaA==",
+ "dev": true,
+ "requires": {
+ "@types/d3-array": "*",
+ "@types/d3-axis": "*",
+ "@types/d3-brush": "*",
+ "@types/d3-chord": "*",
+ "@types/d3-collection": "*",
+ "@types/d3-color": "*",
+ "@types/d3-dispatch": "*",
+ "@types/d3-drag": "*",
+ "@types/d3-dsv": "*",
+ "@types/d3-ease": "*",
+ "@types/d3-force": "*",
+ "@types/d3-format": "*",
+ "@types/d3-geo": "*",
+ "@types/d3-hierarchy": "*",
+ "@types/d3-interpolate": "*",
+ "@types/d3-path": "*",
+ "@types/d3-polygon": "*",
+ "@types/d3-quadtree": "*",
+ "@types/d3-queue": "*",
+ "@types/d3-random": "*",
+ "@types/d3-request": "*",
+ "@types/d3-scale": "^1",
+ "@types/d3-selection": "*",
+ "@types/d3-shape": "*",
+ "@types/d3-time": "*",
+ "@types/d3-time-format": "*",
+ "@types/d3-timer": "*",
+ "@types/d3-transition": "*",
+ "@types/d3-voronoi": "*",
+ "@types/d3-zoom": "*"
+ }
+ },
+ "@types/d3-array": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-2.0.0.tgz",
+ "integrity": "sha512-rGqfPVowNDTszSFvwoZIXvrPG7s/qKzm9piCRIH6xwTTRu7pPZ3ootULFnPkTt74B6i5lN0FpLQL24qGOw1uZA==",
+ "dev": true
+ },
+ "@types/d3-axis": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-1.0.12.tgz",
+ "integrity": "sha512-BZISgSD5M8TgURyNtcPAmUB9sk490CO1Thb6/gIn0WZTt3Y50IssX+2Z0vTccoqZksUDTep0b+o4ofXslvNbqg==",
+ "dev": true,
+ "requires": {
+ "@types/d3-selection": "*"
+ }
+ },
+ "@types/d3-brush": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-1.0.10.tgz",
+ "integrity": "sha512-J8jREATIrfJaAfhJivqaEKPnJsRlwwrOPje+ABqZFgamADjll+q9zaDXnYyjiGPPsiJEU+Qq9jQi5rECxIOfhg==",
+ "dev": true,
+ "requires": {
+ "@types/d3-selection": "*"
+ }
+ },
+ "@types/d3-chord": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-1.0.9.tgz",
+ "integrity": "sha512-UA6lI9CVW5cT5Ku/RV4hxoFn4mKySHm7HEgodtfRthAj1lt9rKZEPon58vyYfk+HIAm33DtJJgZwMXy2QgyPXw==",
+ "dev": true
+ },
+ "@types/d3-collection": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/d3-collection/-/d3-collection-1.0.8.tgz",
+ "integrity": "sha512-y5lGlazdc0HNO0F3UUX2DPE7OmYvd9Kcym4hXwrJcNUkDaypR5pX+apuMikl9LfTxKItJsY9KYvzBulpCKyvuQ==",
+ "dev": true
+ },
+ "@types/d3-color": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-1.2.2.tgz",
+ "integrity": "sha512-6pBxzJ8ZP3dYEQ4YjQ+NVbQaOflfgXq/JbDiS99oLobM2o72uAST4q6yPxHv6FOTCRC/n35ktuo8pvw/S4M7sw==",
+ "dev": true
+ },
+ "@types/d3-dispatch": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-1.0.7.tgz",
+ "integrity": "sha512-M+z84G7UKwK6hEPnGCSccOg8zJ3Nk2hgDQ9sCstHXgsFU0sMxlIZVKqKB5oxUDbALqQG6ucg0G9e8cmOSlishg==",
+ "dev": true
+ },
+ "@types/d3-drag": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-1.2.3.tgz",
+ "integrity": "sha512-rWB5SPvkYVxW3sqUxHOJUZwifD0KqvKwvt1bhNqcLpW6Azsd0BJgRNcyVW8GAferaAk5r8dzeZnf9zKlg9+xMQ==",
+ "dev": true,
+ "requires": {
+ "@types/d3-selection": "*"
+ }
+ },
+ "@types/d3-dsv": {
+ "version": "1.0.36",
+ "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-1.0.36.tgz",
+ "integrity": "sha512-jbIWQ27QJcBNMZbQv0NSQMHnBDCmxghAxePxgyiPH1XPCRkOsTBei7jcdi3fDrUCGpCV3lKrSZFSlOkhUQVClA==",
+ "dev": true
+ },
+ "@types/d3-ease": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-1.0.8.tgz",
+ "integrity": "sha512-VRf8czVWHSJPoUWxMunzpePK02//wHDAswknU8QWzcyrQn6pqe46bHRYi2smSpw5VjsT2CG8k/QeWIdWPS3Bmg==",
+ "dev": true
+ },
+ "@types/d3-force": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-1.2.1.tgz",
+ "integrity": "sha512-jqK+I36uz4kTBjyk39meed5y31Ab+tXYN/x1dn3nZEus9yOHCLc+VrcIYLc/aSQ0Y7tMPRlIhLetulME76EiiA==",
+ "dev": true
+ },
+ "@types/d3-format": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-1.3.1.tgz",
+ "integrity": "sha512-KAWvReOKMDreaAwOjdfQMm0HjcUMlQG47GwqdVKgmm20vTd2pucj0a70c3gUSHrnsmo6H2AMrkBsZU2UhJLq8A==",
+ "dev": true
+ },
+ "@types/d3-geo": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-1.11.1.tgz",
+ "integrity": "sha512-Ox8WWOG3igDRoep/dNsGbOiSJYdUG3ew/6z0ETvHyAtXZVBjOE0S96zSSmzgl0gqQ3RdZjn2eeJOj9oRcMZPkQ==",
+ "dev": true,
+ "requires": {
+ "@types/geojson": "*"
+ }
+ },
+ "@types/d3-hierarchy": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-1.1.6.tgz",
+ "integrity": "sha512-vvSaIDf/Ov0o3KwMT+1M8+WbnnlRiGjlGD5uvk83a1mPCTd/E5x12bUJ/oP55+wUY/4Kb5kc67rVpVGJ2KUHxg==",
+ "dev": true
+ },
+ "@types/d3-interpolate": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-1.3.1.tgz",
+ "integrity": "sha512-z8Zmi08XVwe8e62vP6wcA+CNuRhpuUU5XPEfqpG0hRypDE5BWNthQHB1UNWWDB7ojCbGaN4qBdsWp5kWxhT1IQ==",
+ "dev": true,
+ "requires": {
+ "@types/d3-color": "*"
+ }
+ },
+ "@types/d3-path": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-1.0.8.tgz",
+ "integrity": "sha512-AZGHWslq/oApTAHu9+yH/Bnk63y9oFOMROtqPAtxl5uB6qm1x2lueWdVEjsjjV3Qc2+QfuzKIwIR5MvVBakfzA==",
+ "dev": true
+ },
+ "@types/d3-polygon": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-1.0.7.tgz",
+ "integrity": "sha512-Xuw0eSjQQKs8jTiNbntWH0S+Xp+JyhqxmQ0YAQ3rDu6c3kKMFfgsaGN7Jv5u3zG6yVX/AsLP/Xs/QRjmi9g43Q==",
+ "dev": true
+ },
+ "@types/d3-quadtree": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-1.0.7.tgz",
+ "integrity": "sha512-0ajFawWicfjsaCLh6NzxOyVDYhQAmMFbsiI3MPGLInorauHFEh9/Cl6UHNf+kt/J1jfoxKY/ZJaKAoDpbvde5Q==",
+ "dev": true
+ },
+ "@types/d3-queue": {
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/@types/d3-queue/-/d3-queue-3.0.8.tgz",
+ "integrity": "sha512-1FWOiI/MYwS5Z1Sa9EvS1Xet3isiVIIX5ozD6iGnwHonGcqL+RcC1eThXN5VfDmAiYt9Me9EWNEv/9J9k9RIKQ==",
+ "dev": true
+ },
+ "@types/d3-random": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-1.1.2.tgz",
+ "integrity": "sha512-Jui+Zn28pQw/3EayPKaN4c/PqTvqNbIPjHkgIIFnxne1FdwNjfHtAIsZIBMKlquQNrrMjFzCrlF2gPs3xckqaA==",
+ "dev": true
+ },
+ "@types/d3-request": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/d3-request/-/d3-request-1.0.5.tgz",
+ "integrity": "sha512-X+/c/qXp92o056C5Qbcp7jL27YRHpmIqOchHb/WB7NwFFqkBtAircqO7oKWv2GTtX4LyEqiDF9gqXsV+ldOlIg==",
+ "dev": true,
+ "requires": {
+ "@types/d3-dsv": "*"
+ }
+ },
+ "@types/d3-scale": {
+ "version": "1.0.14",
+ "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-1.0.14.tgz",
+ "integrity": "sha512-dW6Ii8bH+10klJzVVPPeeQvRpCbX3BO3x9cLTngu/+lXNDbk2uC51aFAA/XhocehZroaG5ajwAFelMFsgpClMg==",
+ "dev": true,
+ "requires": {
+ "@types/d3-time": "*"
+ }
+ },
+ "@types/d3-scale-chromatic": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-1.3.1.tgz",
+ "integrity": "sha512-Ny3rLbV5tnmqgW7w/poCcef4kXP8mHPo/p8EjTS5d9OUk8MlqAeRaM8eF7Vyv7QMLiIXNE94Pa1cMLSPkXQBoQ==",
+ "dev": true
+ },
+ "@types/d3-selection": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-1.4.1.tgz",
+ "integrity": "sha512-bv8IfFYo/xG6dxri9OwDnK3yCagYPeRIjTlrcdYJSx+FDWlCeBDepIHUpqROmhPtZ53jyna0aUajZRk0I3rXNA==",
+ "dev": true
+ },
+ "@types/d3-shape": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-1.3.1.tgz",
+ "integrity": "sha512-usqdvUvPJ7AJNwpd2drOzRKs1ELie53p2m2GnPKr076/ADM579jVTJ5dPsoZ5E/CMNWk8lvPWYQSvilpp6jjwg==",
+ "dev": true,
+ "requires": {
+ "@types/d3-path": "*"
+ }
+ },
+ "@types/d3-time": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-1.0.10.tgz",
+ "integrity": "sha512-aKf62rRQafDQmSiv1NylKhIMmznsjRN+MnXRXTqHoqm0U/UZzVpdrtRnSIfdiLS616OuC1soYeX1dBg2n1u8Xw==",
+ "dev": true
+ },
+ "@types/d3-time-format": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-2.1.1.tgz",
+ "integrity": "sha512-tJSyXta8ZyJ52wDDHA96JEsvkbL6jl7wowGmuf45+fAkj5Y+SQOnz0N7/H68OWmPshPsAaWMQh+GAws44IzH3g==",
+ "dev": true
+ },
+ "@types/d3-timer": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-1.0.9.tgz",
+ "integrity": "sha512-WvfJ3LFxBbWjqRGz9n7GJt08RrTHPJDVsIwwoCMROlqF+iDacYiAFjf9oqnq0mXpb2juA2N/qjKP+MKdal3YNQ==",
+ "dev": true
+ },
+ "@types/d3-transition": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-1.1.4.tgz",
+ "integrity": "sha512-/vsmKVUIXEyCcIXYAlw7bnYkIs9/J/nZbptRJFKUN3FdXq/dF6j9z9xXzerkyU6TDHLrMrwx9eGwdKyTIy/j9w==",
+ "dev": true,
+ "requires": {
+ "@types/d3-selection": "*"
+ }
+ },
+ "@types/d3-voronoi": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/@types/d3-voronoi/-/d3-voronoi-1.1.9.tgz",
+ "integrity": "sha512-DExNQkaHd1F3dFPvGA/Aw2NGyjMln6E9QzsiqOcBgnE+VInYnFBHBBySbZQts6z6xD+5jTfKCP7M4OqMyVjdwQ==",
+ "dev": true
+ },
+ "@types/d3-zoom": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-1.7.4.tgz",
+ "integrity": "sha512-5jnFo/itYhJeB2khO/lKe730kW/h2EbKMOvY0uNp3+7NdPm4w63DwPEMxifQZ7n902xGYK5DdU67FmToSoy4VA==",
+ "dev": true,
+ "requires": {
+ "@types/d3-interpolate": "*",
+ "@types/d3-selection": "*"
+ }
+ },
+ "@types/geojson": {
+ "version": "7946.0.7",
+ "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.7.tgz",
+ "integrity": "sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ==",
+ "dev": true
+ },
+ "@types/grafana": {
+ "version": "github:flant/types-grafana#17c2d069e0f1133fa375494184114415a0188813",
+ "from": "github:flant/types-grafana",
+ "dev": true
+ },
+ "@types/istanbul-lib-coverage": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz",
+ "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==",
+ "dev": true
+ },
+ "@types/istanbul-lib-report": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz",
+ "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==",
+ "dev": true,
+ "requires": {
+ "@types/istanbul-lib-coverage": "*"
+ }
+ },
+ "@types/istanbul-reports": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz",
+ "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==",
+ "dev": true,
+ "requires": {
+ "@types/istanbul-lib-coverage": "*",
+ "@types/istanbul-lib-report": "*"
+ }
+ },
+ "@types/jquery": {
+ "version": "1.10.35",
+ "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-1.10.35.tgz",
+ "integrity": "sha512-SVtqEcudm7yjkTwoRA1gC6CNMhGDdMx4Pg8BPdiqI7bXXdCn1BPmtxgeWYQOgDxrq53/5YTlhq5ULxBEAlWIBg==",
+ "dev": true
+ },
+ "@types/lodash": {
+ "version": "4.14.123",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.123.tgz",
+ "integrity": "sha512-pQvPkc4Nltyx7G1Ww45OjVqUsJP4UsZm+GWJpigXgkikZqJgRm4c48g027o6tdgubWHwFRF15iFd+Y4Pmqv6+Q==",
+ "dev": true
+ },
+ "@types/stack-utils": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
+ "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==",
+ "dev": true
+ },
+ "@types/yargs": {
+ "version": "13.0.3",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.3.tgz",
+ "integrity": "sha512-K8/LfZq2duW33XW/tFwEAfnZlqIfVsoyRB3kfXdPXYhl0nfM8mmh7GS0jg7WrX2Dgq/0Ha/pR1PaR+BvmWwjiQ==",
+ "dev": true,
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "@types/yargs-parser": {
+ "version": "13.1.0",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz",
+ "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==",
+ "dev": true
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "dev": true
+ },
+ "acorn": {
+ "version": "5.7.3",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
+ "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
+ "dev": true,
+ "requires": {
+ "acorn": "^3.0.4"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
+ "dev": true
+ }
+ }
+ },
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "dev": true,
+ "requires": {
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
+ }
+ },
+ "ajv-keywords": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+ "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
+ "dev": true
+ },
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2",
+ "longest": "^1.0.1",
+ "repeat-string": "^1.5.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true
+ },
+ "ansi-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ },
+ "dependencies": {
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ }
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-differ": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
+ "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=",
+ "dev": true
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "^1.0.1"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "esutils": "^2.0.2",
+ "js-tokens": "^3.0.2"
+ }
+ },
+ "babel-core": {
+ "version": "7.0.0-bridge.0",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
+ "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==",
+ "dev": true
+ },
+ "babel-eslint": {
+ "version": "10.0.2",
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.2.tgz",
+ "integrity": "sha512-UdsurWPtgiPgpJ06ryUnuaSXC2s0WoSZnQmEpbAH65XZSdwowgN5MvyP7e88nW07FYXv72erVtpBkxyDVKhH1Q==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.0.0",
+ "@babel/traverse": "^7.0.0",
+ "@babel/types": "^7.0.0",
+ "eslint-scope": "3.7.1",
+ "eslint-visitor-keys": "^1.0.0"
+ }
+ },
+ "babel-jest": {
+ "version": "24.8.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.8.0.tgz",
+ "integrity": "sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==",
+ "dev": true,
+ "requires": {
+ "@jest/transform": "^24.8.0",
+ "@jest/types": "^24.8.0",
+ "@types/babel__core": "^7.1.0",
+ "babel-plugin-istanbul": "^5.1.0",
+ "babel-preset-jest": "^24.6.0",
+ "chalk": "^2.4.2",
+ "slash": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "babel-loader": {
+ "version": "8.0.5",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.5.tgz",
+ "integrity": "sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw==",
+ "dev": true,
+ "requires": {
+ "find-cache-dir": "^2.0.0",
+ "loader-utils": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "util.promisify": "^1.0.0"
+ }
+ },
+ "babel-plugin-angularjs-annotate": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-angularjs-annotate/-/babel-plugin-angularjs-annotate-0.10.0.tgz",
+ "integrity": "sha512-NPE7FOAxcLPCUR/kNkrhHIjoScR3RyIlRH3yRn79j8EZWtpILVnCOdA9yKfsOmRh6BHnLHKl8ZAThc+YDd/QwQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/types": "^7.2.0",
+ "simple-is": "~0.2.0"
+ }
+ },
+ "babel-plugin-dynamic-import-node": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz",
+ "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==",
+ "dev": true,
+ "requires": {
+ "object.assign": "^4.1.0"
+ }
+ },
+ "babel-plugin-istanbul": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz",
+ "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "find-up": "^3.0.0",
+ "istanbul-lib-instrument": "^3.3.0",
+ "test-exclude": "^5.2.3"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ }
+ }
+ },
+ "babel-plugin-jest-hoist": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz",
+ "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==",
+ "dev": true,
+ "requires": {
+ "@types/babel__traverse": "^7.0.6"
+ }
+ },
+ "babel-preset-jest": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz",
+ "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
+ "babel-plugin-jest-hoist": "^24.9.0"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "big.js": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+ "dev": true
+ },
+ "body": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz",
+ "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=",
+ "dev": true,
+ "requires": {
+ "continuable-cache": "^0.3.1",
+ "error": "^7.0.0",
+ "raw-body": "~1.1.0",
+ "safe-json-parse": "~1.0.1"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "browserslist": {
+ "version": "4.7.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.2.tgz",
+ "integrity": "sha512-uZavT/gZXJd2UTi9Ov7/Z340WOSQ3+m1iBVRUknf+okKxonL9P83S3ctiBDtuRmRu8PiCHjqyueqQ9HYlJhxiw==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "^1.0.30001004",
+ "electron-to-chromium": "^1.3.295",
+ "node-releases": "^1.1.38"
+ }
+ },
+ "bser": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
+ "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
+ "dev": true,
+ "requires": {
+ "node-int64": "^0.4.0"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+ "dev": true
+ },
+ "bytes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz",
+ "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=",
+ "dev": true
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
+ "caller-path": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
+ "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+ "dev": true,
+ "requires": {
+ "callsites": "^0.2.0"
+ }
+ },
+ "callsites": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
+ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
+ "dev": true
+ },
+ "camel-case": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+ "dev": true,
+ "requires": {
+ "no-case": "^2.2.0",
+ "upper-case": "^1.1.1"
+ }
+ },
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ }
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001010",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001010.tgz",
+ "integrity": "sha512-RA5GH9YjFNea4ZQszdWgh2SC+dpLiRAg4VDQS2b5JRI45OxmbGrYocYHTa9x0bKMQUE7uvHkNPNffUr+pCxSGw==",
+ "dev": true
+ },
+ "capture-exit": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
+ "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
+ "dev": true,
+ "requires": {
+ "rsvp": "^4.8.4"
+ }
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "dev": true,
+ "requires": {
+ "align-text": "^0.1.3",
+ "lazy-cache": "^1.0.3"
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "change-case": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz",
+ "integrity": "sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==",
+ "dev": true,
+ "requires": {
+ "camel-case": "^3.0.0",
+ "constant-case": "^2.0.0",
+ "dot-case": "^2.1.0",
+ "header-case": "^1.0.0",
+ "is-lower-case": "^1.1.0",
+ "is-upper-case": "^1.1.0",
+ "lower-case": "^1.1.1",
+ "lower-case-first": "^1.0.0",
+ "no-case": "^2.3.2",
+ "param-case": "^2.1.0",
+ "pascal-case": "^2.0.0",
+ "path-case": "^2.1.0",
+ "sentence-case": "^2.1.0",
+ "snake-case": "^2.1.0",
+ "swap-case": "^1.1.0",
+ "title-case": "^2.1.0",
+ "upper-case": "^1.1.1",
+ "upper-case-first": "^1.1.0"
+ }
+ },
+ "chardet": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
+ "dev": true
+ },
+ "ci-info": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
+ "dev": true
+ },
+ "circular-json": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
+ "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
+ "dev": true
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "clean-css": {
+ "version": "3.4.28",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz",
+ "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
+ "dev": true,
+ "requires": {
+ "commander": "2.8.x",
+ "source-map": "0.4.x"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
+ "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
+ "dev": true,
+ "requires": {
+ "graceful-readlink": ">= 1.0.0"
+ }
+ },
+ "source-map": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+ "dev": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ }
+ }
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "dev": true,
+ "requires": {
+ "center-align": "^0.1.1",
+ "right-align": "^0.1.1",
+ "wordwrap": "0.0.2"
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "coffeescript": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.10.0.tgz",
+ "integrity": "sha1-56qDAZF+9iGzXYo580jc3R234z4=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "colors": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+ "dev": true
+ },
+ "commander": {
+ "version": "2.18.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.18.0.tgz",
+ "integrity": "sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ=="
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "constant-case": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz",
+ "integrity": "sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY=",
+ "dev": true,
+ "requires": {
+ "snake-case": "^2.1.0",
+ "upper-case": "^1.1.1"
+ }
+ },
+ "continuable-cache": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz",
+ "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
+ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "core-js-compat": {
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.4.1.tgz",
+ "integrity": "sha512-YdeJI26gLc0CQJ9asLE5obEgBz2I0+CIgnoTbS2T0d5IPQw/OCgCIFR527RmpduxjrB3gSEHoGOCTq9sigOyfw==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.7.2",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-0.2.9.tgz",
+ "integrity": "sha1-vWf5bAfvtjA7f+lMHpefiEeOCjk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^2.5.0"
+ }
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true,
+ "requires": {
+ "array-find-index": "^1.0.1"
+ }
+ },
+ "d3": {
+ "version": "4.13.0",
+ "resolved": "https://registry.npmjs.org/d3/-/d3-4.13.0.tgz",
+ "integrity": "sha512-l8c4+0SldjVKLaE2WG++EQlqD7mh/dmQjvi2L2lKPadAVC+TbJC4ci7Uk9bRi+To0+ansgsS0iWfPjD7DBy+FQ==",
+ "requires": {
+ "d3-array": "1.2.1",
+ "d3-axis": "1.0.8",
+ "d3-brush": "1.0.4",
+ "d3-chord": "1.0.4",
+ "d3-collection": "1.0.4",
+ "d3-color": "1.0.3",
+ "d3-dispatch": "1.0.3",
+ "d3-drag": "1.2.1",
+ "d3-dsv": "1.0.8",
+ "d3-ease": "1.0.3",
+ "d3-force": "1.1.0",
+ "d3-format": "1.2.2",
+ "d3-geo": "1.9.1",
+ "d3-hierarchy": "1.1.5",
+ "d3-interpolate": "1.1.6",
+ "d3-path": "1.0.5",
+ "d3-polygon": "1.0.3",
+ "d3-quadtree": "1.0.3",
+ "d3-queue": "3.0.7",
+ "d3-random": "1.1.0",
+ "d3-request": "1.0.6",
+ "d3-scale": "1.0.7",
+ "d3-selection": "1.3.0",
+ "d3-shape": "1.2.0",
+ "d3-time": "1.0.8",
+ "d3-time-format": "2.1.1",
+ "d3-timer": "1.0.7",
+ "d3-transition": "1.1.1",
+ "d3-voronoi": "1.1.2",
+ "d3-zoom": "1.7.1"
+ }
+ },
+ "d3-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.1.tgz",
+ "integrity": "sha512-CyINJQ0SOUHojDdFDH4JEM0552vCR1utGyLHegJHyYH0JyCpSeTPxi4OBqHMA2jJZq4NH782LtaJWBImqI/HBw=="
+ },
+ "d3-axis": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.8.tgz",
+ "integrity": "sha1-MacFoLU15ldZ3hQXOjGTMTfxjvo="
+ },
+ "d3-brush": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.4.tgz",
+ "integrity": "sha1-AMLyOAGfJPbAoZSibUGhUw/+e8Q=",
+ "requires": {
+ "d3-dispatch": "1",
+ "d3-drag": "1",
+ "d3-interpolate": "1",
+ "d3-selection": "1",
+ "d3-transition": "1"
+ }
+ },
+ "d3-chord": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.4.tgz",
+ "integrity": "sha1-fexPC6iG9xP+ERxF92NBT290yiw=",
+ "requires": {
+ "d3-array": "1",
+ "d3-path": "1"
+ }
+ },
+ "d3-collection": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.4.tgz",
+ "integrity": "sha1-NC39EoN8kJdPM/HMCnha6lcNzcI="
+ },
+ "d3-color": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.0.3.tgz",
+ "integrity": "sha1-vHZD/KjlOoNH4vva/6I2eWtYUJs="
+ },
+ "d3-dispatch": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.3.tgz",
+ "integrity": "sha1-RuFJHqqbWMNY/OW+TovtYm54cfg="
+ },
+ "d3-drag": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.1.tgz",
+ "integrity": "sha512-Cg8/K2rTtzxzrb0fmnYOUeZHvwa4PHzwXOLZZPwtEs2SKLLKLXeYwZKBB+DlOxUvFmarOnmt//cU4+3US2lyyQ==",
+ "requires": {
+ "d3-dispatch": "1",
+ "d3-selection": "1"
+ }
+ },
+ "d3-dsv": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.8.tgz",
+ "integrity": "sha512-IVCJpQ+YGe3qu6odkPQI0KPqfxkhbP/oM1XhhE/DFiYmcXKfCRub4KXyiuehV1d4drjWVXHUWx4gHqhdZb6n/A==",
+ "requires": {
+ "commander": "2",
+ "iconv-lite": "0.4",
+ "rw": "1"
+ }
+ },
+ "d3-ease": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.3.tgz",
+ "integrity": "sha1-aL+8NJM4o4DETYrMT7wzBKotjA4="
+ },
+ "d3-force": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.1.0.tgz",
+ "integrity": "sha512-2HVQz3/VCQs0QeRNZTYb7GxoUCeb6bOzMp/cGcLa87awY9ZsPvXOGeZm0iaGBjXic6I1ysKwMn+g+5jSAdzwcg==",
+ "requires": {
+ "d3-collection": "1",
+ "d3-dispatch": "1",
+ "d3-quadtree": "1",
+ "d3-timer": "1"
+ }
+ },
+ "d3-format": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.2.2.tgz",
+ "integrity": "sha512-zH9CfF/3C8zUI47nsiKfD0+AGDEuM8LwBIP7pBVpyR4l/sKkZqITmMtxRp04rwBrlshIZ17XeFAaovN3++wzkw=="
+ },
+ "d3-geo": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.9.1.tgz",
+ "integrity": "sha512-l9wL/cEQkyZQYXw3xbmLsH3eQ5ij+icNfo4r0GrLa5rOCZR/e/3am45IQ0FvQ5uMsv+77zBRunLc9ufTWSQYFA==",
+ "requires": {
+ "d3-array": "1"
+ }
+ },
+ "d3-hierarchy": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.5.tgz",
+ "integrity": "sha1-ochFxC+Eoga88cAcAQmOpN2qeiY="
+ },
+ "d3-interpolate": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.6.tgz",
+ "integrity": "sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A==",
+ "requires": {
+ "d3-color": "1"
+ }
+ },
+ "d3-path": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.5.tgz",
+ "integrity": "sha1-JB6xhJvZ6egCHA0KeZ+KDo5EF2Q="
+ },
+ "d3-polygon": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.3.tgz",
+ "integrity": "sha1-FoiOkCZGCTPysXllKtN4Ik04LGI="
+ },
+ "d3-quadtree": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.3.tgz",
+ "integrity": "sha1-rHmH4+I/6AWpkPKOG1DTj8uCJDg="
+ },
+ "d3-queue": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-3.0.7.tgz",
+ "integrity": "sha1-yTouVLQXwJWRKdfXP2z31Ckudhg="
+ },
+ "d3-random": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.0.tgz",
+ "integrity": "sha1-ZkLlBsb6OmSFldKyRpeIqNElKdM="
+ },
+ "d3-request": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/d3-request/-/d3-request-1.0.6.tgz",
+ "integrity": "sha512-FJj8ySY6GYuAJHZMaCQ83xEYE4KbkPkmxZ3Hu6zA1xxG2GD+z6P+Lyp+zjdsHf0xEbp2xcluDI50rCS855EQ6w==",
+ "requires": {
+ "d3-collection": "1",
+ "d3-dispatch": "1",
+ "d3-dsv": "1",
+ "xmlhttprequest": "1"
+ }
+ },
+ "d3-scale": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz",
+ "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==",
+ "requires": {
+ "d3-array": "^1.2.0",
+ "d3-collection": "1",
+ "d3-color": "1",
+ "d3-format": "1",
+ "d3-interpolate": "1",
+ "d3-time": "1",
+ "d3-time-format": "2"
+ }
+ },
+ "d3-scale-chromatic": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz",
+ "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==",
+ "requires": {
+ "d3-color": "1",
+ "d3-interpolate": "1"
+ }
+ },
+ "d3-selection": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.3.0.tgz",
+ "integrity": "sha512-qgpUOg9tl5CirdqESUAu0t9MU/t3O9klYfGfyKsXEmhyxyzLpzpeh08gaxBUTQw1uXIOkr/30Ut2YRjSSxlmHA=="
+ },
+ "d3-shape": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.2.0.tgz",
+ "integrity": "sha1-RdAVOPBkuv0F6j1tLLdI/YxB93c=",
+ "requires": {
+ "d3-path": "1"
+ }
+ },
+ "d3-time": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.8.tgz",
+ "integrity": "sha512-YRZkNhphZh3KcnBfitvF3c6E0JOFGikHZ4YqD+Lzv83ZHn1/u6yGenRU1m+KAk9J1GnZMnKcrtfvSktlA1DXNQ=="
+ },
+ "d3-time-format": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.1.tgz",
+ "integrity": "sha512-8kAkymq2WMfzW7e+s/IUNAtN/y3gZXGRrdGfo6R8NKPAA85UBTxZg5E61bR6nLwjPjj4d3zywSQe1CkYLPFyrw==",
+ "requires": {
+ "d3-time": "1"
+ }
+ },
+ "d3-timer": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.7.tgz",
+ "integrity": "sha512-vMZXR88XujmG/L5oB96NNKH5lCWwiLM/S2HyyAQLcjWJCloK5shxta4CwOFYLZoY3AWX73v8Lgv4cCAdWtRmOA=="
+ },
+ "d3-transition": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.1.tgz",
+ "integrity": "sha512-xeg8oggyQ+y5eb4J13iDgKIjUcEfIOZs2BqV/eEmXm2twx80wTzJ4tB4vaZ5BKfz7XsI/DFmQL5me6O27/5ykQ==",
+ "requires": {
+ "d3-color": "1",
+ "d3-dispatch": "1",
+ "d3-ease": "1",
+ "d3-interpolate": "1",
+ "d3-selection": "^1.1.0",
+ "d3-timer": "1"
+ }
+ },
+ "d3-voronoi": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz",
+ "integrity": "sha1-Fodmfo8TotFYyAwUgMWinLDYlzw="
+ },
+ "d3-zoom": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.7.1.tgz",
+ "integrity": "sha512-sZHQ55DGq5BZBFGnRshUT8tm2sfhPHFnOlmPbbwTkAoPeVdRTkB4Xsf9GCY0TSHrTD8PeJPZGmP/TpGicwJDJQ==",
+ "requires": {
+ "d3-dispatch": "1",
+ "d3-drag": "1",
+ "d3-interpolate": "1",
+ "d3-selection": "1",
+ "d3-transition": "1"
+ }
+ },
+ "dargs": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz",
+ "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "dateformat": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
+ "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1",
+ "meow": "^3.3.0"
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+ "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+ "dev": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dot-case": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz",
+ "integrity": "sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4=",
+ "dev": true,
+ "requires": {
+ "no-case": "^2.2.0"
+ }
+ },
+ "duplexer": {
+ "version": "0.1.1",
+ "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+ "dev": true
+ },
+ "electron-to-chromium": {
+ "version": "1.3.306",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.306.tgz",
+ "integrity": "sha512-frDqXvrIROoYvikSKTIKbHbzO6M3/qC6kCIt/1FOa9kALe++c4VAJnwjSFvf1tYLEUsP2n9XZ4XSCyqc3l7A/A==",
+ "dev": true
+ },
+ "emojis-list": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+ "dev": true
+ },
+ "end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "error": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz",
+ "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=",
+ "dev": true,
+ "requires": {
+ "string-template": "~0.2.1",
+ "xtend": "~4.0.0"
+ }
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.16.2",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.2.tgz",
+ "integrity": "sha512-jYo/J8XU2emLXl3OLwfwtuFfuF2w6DYPs+xy9ZfVyPkDcrauu6LYrw/q2TyCtrbc/KUdCiC5e9UajRhgNkVopA==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.1.4",
+ "is-regex": "^1.0.4",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "string.prototype.trimleft": "^2.1.0",
+ "string.prototype.trimright": "^2.1.0"
+ },
+ "dependencies": {
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ }
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "eslint": {
+ "version": "4.19.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz",
+ "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==",
+ "dev": true,
+ "requires": {
+ "ajv": "^5.3.0",
+ "babel-code-frame": "^6.22.0",
+ "chalk": "^2.1.0",
+ "concat-stream": "^1.6.0",
+ "cross-spawn": "^5.1.0",
+ "debug": "^3.1.0",
+ "doctrine": "^2.1.0",
+ "eslint-scope": "^3.7.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^3.5.4",
+ "esquery": "^1.0.0",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^2.0.0",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.0.1",
+ "ignore": "^3.3.3",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^3.0.6",
+ "is-resolvable": "^1.0.0",
+ "js-yaml": "^3.9.1",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.4",
+ "minimatch": "^3.0.2",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "pluralize": "^7.0.0",
+ "progress": "^2.0.0",
+ "regexpp": "^1.0.1",
+ "require-uncached": "^1.0.3",
+ "semver": "^5.3.0",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "~2.0.1",
+ "table": "4.0.2",
+ "text-table": "~0.2.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "glob": {
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+ "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "eslint-scope": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
+ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
+ "dev": true
+ },
+ "espree": {
+ "version": "3.5.4",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
+ "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
+ "dev": true,
+ "requires": {
+ "acorn": "^5.5.0",
+ "acorn-jsx": "^3.0.0"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true
+ },
+ "esquery": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.0.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.1.0"
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "eventemitter2": {
+ "version": "0.4.14",
+ "resolved": "http://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
+ "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=",
+ "dev": true
+ },
+ "exec-sh": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz",
+ "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==",
+ "dev": true
+ },
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ },
+ "dependencies": {
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ }
+ }
+ },
+ "exit": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+ "dev": true
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "external-editor": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+ "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.4.0",
+ "iconv-lite": "^0.4.17",
+ "tmp": "^0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "fast-deep-equal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "faye-websocket": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+ "dev": true,
+ "requires": {
+ "websocket-driver": ">=0.5.1"
+ }
+ },
+ "fb-watchman": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz",
+ "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=",
+ "dev": true,
+ "requires": {
+ "bser": "^2.0.0"
+ }
+ },
+ "figures": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5",
+ "object-assign": "^4.1.0"
+ }
+ },
+ "file-entry-cache": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
+ "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^1.2.1",
+ "object-assign": "^4.0.1"
+ }
+ },
+ "file-sync-cmp": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz",
+ "integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs=",
+ "dev": true
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "find-cache-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^2.0.0",
+ "pkg-dir": "^3.0.0"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "findup-sync": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz",
+ "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=",
+ "dev": true,
+ "requires": {
+ "glob": "~5.0.0"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "5.0.15",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+ "dev": true,
+ "requires": {
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "2 || 3",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "flat-cache": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
+ "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==",
+ "dev": true,
+ "requires": {
+ "circular-json": "^0.3.1",
+ "graceful-fs": "^4.1.2",
+ "rimraf": "~2.6.2",
+ "write": "^0.2.1"
+ }
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
+ "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "nan": "^2.12.1",
+ "node-pre-gyp": "^0.12.0"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "debug": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "minipass": {
+ "version": "2.3.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.2.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "needle": {
+ "version": "2.3.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "debug": "^4.1.0",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.12.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.1",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.2.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "npm-packlist": {
+ "version": "1.4.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "rc": {
+ "version": "1.2.8",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.7.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "tar": {
+ "version": "4.4.8",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chownr": "^1.1.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.3.4",
+ "minizlib": "^1.1.1",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.2"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "gaze": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
+ "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
+ "dev": true,
+ "requires": {
+ "globule": "^1.0.0"
+ }
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "getobject": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz",
+ "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
+ "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.2",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
+ },
+ "globule": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
+ "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==",
+ "dev": true,
+ "requires": {
+ "glob": "~7.1.1",
+ "lodash": "~4.17.10",
+ "minimatch": "~3.0.2"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.15",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+ "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+ "dev": true
+ },
+ "graceful-readlink": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+ "dev": true
+ },
+ "grunt": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.4.tgz",
+ "integrity": "sha512-PYsMOrOC+MsdGEkFVwMaMyc6Ob7pKmq+deg1Sjr+vvMWp35sztfwKE7qoN51V+UEtHsyNuMcGdgMLFkBHvMxHQ==",
+ "dev": true,
+ "requires": {
+ "coffeescript": "~1.10.0",
+ "dateformat": "~1.0.12",
+ "eventemitter2": "~0.4.13",
+ "exit": "~0.1.1",
+ "findup-sync": "~0.3.0",
+ "glob": "~7.0.0",
+ "grunt-cli": "~1.2.0",
+ "grunt-known-options": "~1.1.0",
+ "grunt-legacy-log": "~2.0.0",
+ "grunt-legacy-util": "~1.1.1",
+ "iconv-lite": "~0.4.13",
+ "js-yaml": "~3.13.0",
+ "minimatch": "~3.0.2",
+ "mkdirp": "~0.5.1",
+ "nopt": "~3.0.6",
+ "path-is-absolute": "~1.0.0",
+ "rimraf": "~2.6.2"
+ },
+ "dependencies": {
+ "grunt-cli": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz",
+ "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=",
+ "dev": true,
+ "requires": {
+ "findup-sync": "~0.3.0",
+ "grunt-known-options": "~1.1.0",
+ "nopt": "~3.0.6",
+ "resolve": "~1.1.0"
+ }
+ },
+ "resolve": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+ "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+ "dev": true
+ }
+ }
+ },
+ "grunt-angular-templates": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/grunt-angular-templates/-/grunt-angular-templates-1.1.0.tgz",
+ "integrity": "sha1-EJYDorlf8BAZtxjHA0EmjwnYvhk=",
+ "dev": true,
+ "requires": {
+ "html-minifier": "~2.1.2"
+ }
+ },
+ "grunt-babel": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-babel/-/grunt-babel-8.0.0.tgz",
+ "integrity": "sha512-WuiZFvGzcyzlEoPIcY1snI234ydDWeWWV5bpnB7PZsOLHcDsxWKnrR1rMWEUsbdVPPjvIirwFNsuo4CbJmsdFQ==",
+ "dev": true
+ },
+ "grunt-contrib-clean": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-1.1.0.tgz",
+ "integrity": "sha1-Vkq/LQN4qYOhW54/MO51tzjEBjg=",
+ "dev": true,
+ "requires": {
+ "async": "^1.5.2",
+ "rimraf": "^2.5.1"
+ }
+ },
+ "grunt-contrib-copy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz",
+ "integrity": "sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.1",
+ "file-sync-cmp": "^0.1.0"
+ }
+ },
+ "grunt-contrib-sass": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-sass/-/grunt-contrib-sass-1.0.0.tgz",
+ "integrity": "sha1-gGg4JRy8DhqU1k1RXN00z2dNcBs=",
+ "dev": true,
+ "requires": {
+ "async": "^0.9.0",
+ "chalk": "^1.0.0",
+ "cross-spawn": "^0.2.3",
+ "dargs": "^4.0.0",
+ "which": "^1.0.5"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
+ "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
+ "dev": true
+ }
+ }
+ },
+ "grunt-contrib-uglify": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-3.4.0.tgz",
+ "integrity": "sha512-UXsTpeP0pytpTYlmll3RDndsRXfdwmrf1tI/AtD/PrArQAzGmKMvj83aVt3D8egWlE6KqPjsJBLCCvfC52LI/A==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.0.0",
+ "maxmin": "^2.1.0",
+ "uglify-js": "~3.4.0",
+ "uri-path": "^1.0.0"
+ }
+ },
+ "grunt-contrib-watch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz",
+ "integrity": "sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg==",
+ "dev": true,
+ "requires": {
+ "async": "^2.6.0",
+ "gaze": "^1.1.0",
+ "lodash": "^4.17.10",
+ "tiny-lr": "^1.1.1"
+ },
+ "dependencies": {
+ "async": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
+ "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.10"
+ }
+ }
+ }
+ },
+ "grunt-known-options": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz",
+ "integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ==",
+ "dev": true
+ },
+ "grunt-legacy-log": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz",
+ "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==",
+ "dev": true,
+ "requires": {
+ "colors": "~1.1.2",
+ "grunt-legacy-log-utils": "~2.0.0",
+ "hooker": "~0.2.3",
+ "lodash": "~4.17.5"
+ }
+ },
+ "grunt-legacy-log-utils": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz",
+ "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==",
+ "dev": true,
+ "requires": {
+ "chalk": "~2.4.1",
+ "lodash": "~4.17.10"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "grunt-legacy-util": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz",
+ "integrity": "sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A==",
+ "dev": true,
+ "requires": {
+ "async": "~1.5.2",
+ "exit": "~0.1.1",
+ "getobject": "~0.1.0",
+ "hooker": "~0.2.3",
+ "lodash": "~4.17.10",
+ "underscore.string": "~3.3.4",
+ "which": "~1.3.0"
+ }
+ },
+ "grunt-notify": {
+ "version": "0.4.5",
+ "resolved": "https://registry.npmjs.org/grunt-notify/-/grunt-notify-0.4.5.tgz",
+ "integrity": "sha1-BSk5kGFhENtrwK0V5sBZL/4YrDE=",
+ "dev": true,
+ "requires": {
+ "semver": "^5.1.0",
+ "stack-parser": "^0.0.1",
+ "which": "^1.2.4"
+ }
+ },
+ "gzip-size": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz",
+ "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=",
+ "dev": true,
+ "requires": {
+ "duplexer": "^0.1.1"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
+ "dev": true
+ },
+ "has-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "he": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
+ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
+ "dev": true
+ },
+ "header-case": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz",
+ "integrity": "sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=",
+ "dev": true,
+ "requires": {
+ "no-case": "^2.2.0",
+ "upper-case": "^1.1.3"
+ }
+ },
+ "hooker": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz",
+ "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=",
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
+ "dev": true
+ },
+ "html-minifier": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-2.1.7.tgz",
+ "integrity": "sha1-kFHW/LvPIU7TB+GtdPQyu5rWVcw=",
+ "dev": true,
+ "requires": {
+ "change-case": "3.0.x",
+ "clean-css": "3.4.x",
+ "commander": "2.9.x",
+ "he": "1.1.x",
+ "ncname": "1.0.x",
+ "relateurl": "0.2.x",
+ "uglify-js": "2.6.x"
+ },
+ "dependencies": {
+ "async": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
+ "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=",
+ "dev": true
+ },
+ "commander": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+ "dev": true,
+ "requires": {
+ "graceful-readlink": ">= 1.0.0"
+ }
+ },
+ "uglify-js": {
+ "version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz",
+ "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=",
+ "dev": true,
+ "requires": {
+ "async": "~0.2.6",
+ "source-map": "~0.5.1",
+ "uglify-to-browserify": "~1.0.0",
+ "yargs": "~3.10.0"
+ }
+ }
+ }
+ },
+ "http-parser-js": {
+ "version": "0.4.13",
+ "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.13.tgz",
+ "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=",
+ "dev": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore": {
+ "version": "3.3.10",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+ "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.0",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^2.0.4",
+ "figures": "^2.0.0",
+ "lodash": "^4.3.0",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rx-lite": "^4.0.8",
+ "rx-lite-aggregates": "^4.0.8",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^4.0.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "invariant": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+ "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
+ "dev": true
+ },
+ "is-ci": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
+ "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
+ "dev": true,
+ "requires": {
+ "ci-info": "^2.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+ "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
+ "dev": true
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "is-lower-case": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz",
+ "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=",
+ "dev": true,
+ "requires": {
+ "lower-case": "^1.1.0"
+ }
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
+ "is-resolvable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "is-symbol": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
+ "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.1"
+ },
+ "dependencies": {
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ }
+ }
+ },
+ "is-upper-case": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz",
+ "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=",
+ "dev": true,
+ "requires": {
+ "upper-case": "^1.1.0"
+ }
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "istanbul-lib-coverage": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz",
+ "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==",
+ "dev": true
+ },
+ "istanbul-lib-instrument": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz",
+ "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==",
+ "dev": true,
+ "requires": {
+ "@babel/generator": "^7.4.0",
+ "@babel/parser": "^7.4.3",
+ "@babel/template": "^7.4.0",
+ "@babel/traverse": "^7.4.3",
+ "@babel/types": "^7.4.0",
+ "istanbul-lib-coverage": "^2.0.5",
+ "semver": "^6.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "jest-haste-map": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz",
+ "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^24.9.0",
+ "anymatch": "^2.0.0",
+ "fb-watchman": "^2.0.0",
+ "fsevents": "^1.2.7",
+ "graceful-fs": "^4.1.15",
+ "invariant": "^2.2.4",
+ "jest-serializer": "^24.9.0",
+ "jest-util": "^24.9.0",
+ "jest-worker": "^24.9.0",
+ "micromatch": "^3.1.10",
+ "sane": "^4.0.3",
+ "walker": "^1.0.7"
+ }
+ },
+ "jest-message-util": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz",
+ "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@jest/test-result": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "@types/stack-utils": "^1.0.1",
+ "chalk": "^2.0.1",
+ "micromatch": "^3.1.10",
+ "slash": "^2.0.0",
+ "stack-utils": "^1.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "jest-mock": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz",
+ "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==",
+ "dev": true,
+ "requires": {
+ "@jest/types": "^24.9.0"
+ }
+ },
+ "jest-regex-util": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz",
+ "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==",
+ "dev": true
+ },
+ "jest-serializer": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz",
+ "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==",
+ "dev": true
+ },
+ "jest-util": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz",
+ "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==",
+ "dev": true,
+ "requires": {
+ "@jest/console": "^24.9.0",
+ "@jest/fake-timers": "^24.9.0",
+ "@jest/source-map": "^24.9.0",
+ "@jest/test-result": "^24.9.0",
+ "@jest/types": "^24.9.0",
+ "callsites": "^3.0.0",
+ "chalk": "^2.0.1",
+ "graceful-fs": "^4.1.15",
+ "is-ci": "^2.0.0",
+ "mkdirp": "^0.5.1",
+ "slash": "^2.0.0",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "jest-worker": {
+ "version": "24.9.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz",
+ "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==",
+ "dev": true,
+ "requires": {
+ "merge-stream": "^2.0.0",
+ "supports-color": "^6.1.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "js-levenshtein": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
+ "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==",
+ "dev": true
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json5": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz",
+ "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "livereload-js": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.3.0.tgz",
+ "integrity": "sha512-j1R0/FeGa64Y+NmqfZhyoVRzcFlOZ8sNlKzHjh4VvLULFACZhn68XrX5DFg2FhMvSMJmROuFxRSa560ECWKBMg==",
+ "dev": true
+ },
+ "load-grunt-tasks": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/load-grunt-tasks/-/load-grunt-tasks-3.5.2.tgz",
+ "integrity": "sha1-ByhWEYD9IP+KaSdQWFL8WKrqDIg=",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.0",
+ "multimatch": "^2.0.0",
+ "pkg-up": "^1.0.0",
+ "resolve-pkg": "^0.1.0"
+ }
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.0"
+ }
+ },
+ "loader-utils": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+ "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+ "dev": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^2.0.0",
+ "json5": "^1.0.1"
+ },
+ "dependencies": {
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ }
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "dependencies": {
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ }
+ }
+ },
+ "lodash": {
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true,
+ "requires": {
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
+ }
+ },
+ "lower-case": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+ "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
+ "dev": true
+ },
+ "lower-case-first": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz",
+ "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=",
+ "dev": true,
+ "requires": {
+ "lower-case": "^1.1.2"
+ }
+ },
+ "lru-cache": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
+ "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
+ "dev": true
+ },
+ "make-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "dev": true,
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "dev": true
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
+ }
+ },
+ "makeerror": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
+ "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
+ "dev": true,
+ "requires": {
+ "tmpl": "1.0.x"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "maxmin": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz",
+ "integrity": "sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.0.0",
+ "figures": "^1.0.1",
+ "gzip-size": "^3.0.0",
+ "pretty-bytes": "^3.0.0"
+ }
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ }
+ },
+ "merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "mixin-deep": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "moment": {
+ "version": "2.24.0",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
+ "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "multimatch": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz",
+ "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=",
+ "dev": true,
+ "requires": {
+ "array-differ": "^1.0.0",
+ "array-union": "^1.0.1",
+ "arrify": "^1.0.0",
+ "minimatch": "^3.0.0"
+ }
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "nan": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
+ "dev": true,
+ "optional": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "ncname": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz",
+ "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=",
+ "dev": true,
+ "requires": {
+ "xml-char-classes": "^1.0.0"
+ }
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "no-case": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+ "dev": true,
+ "requires": {
+ "lower-case": "^1.1.1"
+ }
+ },
+ "node-int64": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
+ "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
+ "dev": true
+ },
+ "node-modules-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
+ "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
+ "dev": true
+ },
+ "node-releases": {
+ "version": "1.1.40",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.40.tgz",
+ "integrity": "sha512-r4LPcC5b/bS8BdtWH1fbeK88ib/wg9aqmg6/s3ngNLn2Ewkn/8J6Iw3P9RTlfIAdSdvYvQl2thCY5Y+qTAQ2iQ==",
+ "dev": true,
+ "requires": {
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "normalize-path": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+ "dev": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-inspect": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
+ "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
+ }
+ },
+ "object.getownpropertydescriptors": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
+ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.5.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ }
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
+ "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "param-case": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
+ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
+ "dev": true,
+ "requires": {
+ "no-case": "^2.2.0"
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "pascal-case": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz",
+ "integrity": "sha1-LVeNNFX2YNpl7KGO+VtODekSdh4=",
+ "dev": true,
+ "requires": {
+ "camel-case": "^3.0.0",
+ "upper-case-first": "^1.1.0"
+ }
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "path-case": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz",
+ "integrity": "sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU=",
+ "dev": true,
+ "requires": {
+ "no-case": "^2.2.0"
+ }
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pirates": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
+ "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
+ "dev": true,
+ "requires": {
+ "node-modules-regexp": "^1.0.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ }
+ }
+ },
+ "pkg-up": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz",
+ "integrity": "sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY=",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0"
+ }
+ },
+ "pluralize": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
+ "dev": true
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "pretty-bytes": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz",
+ "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "dev": true
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "dev": true
+ },
+ "raw-body": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz",
+ "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=",
+ "dev": true,
+ "requires": {
+ "bytes": "1",
+ "string_decoder": "0.10"
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "realpath-native": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz",
+ "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==",
+ "dev": true,
+ "requires": {
+ "util.promisify": "^1.0.0"
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ }
+ },
+ "regenerate": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+ "dev": true
+ },
+ "regenerate-unicode-properties": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz",
+ "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.0"
+ }
+ },
+ "regenerator-transform": {
+ "version": "0.14.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz",
+ "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==",
+ "dev": true,
+ "requires": {
+ "private": "^0.1.6"
+ }
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexpp": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz",
+ "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==",
+ "dev": true
+ },
+ "regexpu-core": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz",
+ "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.0",
+ "regenerate-unicode-properties": "^8.1.0",
+ "regjsgen": "^0.5.0",
+ "regjsparser": "^0.6.0",
+ "unicode-match-property-ecmascript": "^1.0.4",
+ "unicode-match-property-value-ecmascript": "^1.1.0"
+ }
+ },
+ "regjsgen": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz",
+ "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz",
+ "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
+ "dev": true,
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "relateurl": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
+ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=",
+ "dev": true
+ },
+ "remove-trailing-separator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+ "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
+ },
+ "require-uncached": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
+ "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
+ "dev": true,
+ "requires": {
+ "caller-path": "^0.1.0",
+ "resolve-from": "^1.0.0"
+ },
+ "dependencies": {
+ "resolve-from": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
+ "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
+ "dev": true
+ }
+ }
+ },
+ "resolve": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",
+ "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-from": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
+ "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=",
+ "dev": true
+ },
+ "resolve-pkg": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg/-/resolve-pkg-0.1.0.tgz",
+ "integrity": "sha1-AsyZNBDik2livZcWahsHfalyVTE=",
+ "dev": true,
+ "requires": {
+ "resolve-from": "^2.0.0"
+ }
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "dev": true,
+ "requires": {
+ "align-text": "^0.1.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "rsvp": {
+ "version": "4.8.5",
+ "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
+ "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
+ "dev": true
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "^2.1.0"
+ }
+ },
+ "rw": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
+ "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q="
+ },
+ "rx-lite": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+ "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
+ "dev": true
+ },
+ "rx-lite-aggregates": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "dev": true,
+ "requires": {
+ "rx-lite": "*"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
+ "safe-json-parse": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz",
+ "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=",
+ "dev": true
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "sane": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
+ "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
+ "dev": true,
+ "requires": {
+ "@cnakazawa/watch": "^1.0.3",
+ "anymatch": "^2.0.0",
+ "capture-exit": "^2.0.0",
+ "exec-sh": "^0.3.2",
+ "execa": "^1.0.0",
+ "fb-watchman": "^2.0.0",
+ "micromatch": "^3.1.4",
+ "minimist": "^1.1.1",
+ "walker": "~1.0.5"
+ }
+ },
+ "semver": {
+ "version": "5.5.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
+ "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==",
+ "dev": true
+ },
+ "sentence-case": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz",
+ "integrity": "sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ=",
+ "dev": true,
+ "requires": {
+ "no-case": "^2.2.0",
+ "upper-case-first": "^1.1.2"
+ }
+ },
+ "set-value": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "simple-is": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/simple-is/-/simple-is-0.2.0.tgz",
+ "integrity": "sha1-Krt1qt453rXMgVzhDmGRFkhQuvA=",
+ "dev": true
+ },
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0"
+ }
+ },
+ "snake-case": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz",
+ "integrity": "sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8=",
+ "dev": true,
+ "requires": {
+ "no-case": "^2.2.0"
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "spdx-correct": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+ "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
+ "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz",
+ "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
+ "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
+ "dev": true
+ },
+ "stack-parser": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/stack-parser/-/stack-parser-0.0.1.tgz",
+ "integrity": "sha1-fTtjoXiH6eLCv1Xb0zGP40o50ec=",
+ "dev": true
+ },
+ "stack-utils": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz",
+ "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "string-template": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz",
+ "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "string.prototype.trimleft": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz",
+ "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "function-bind": "^1.1.1"
+ }
+ },
+ "string.prototype.trimright": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz",
+ "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "function-bind": "^1.1.1"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "swap-case": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz",
+ "integrity": "sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=",
+ "dev": true,
+ "requires": {
+ "lower-case": "^1.1.1",
+ "upper-case": "^1.1.1"
+ }
+ },
+ "table": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
+ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
+ "dev": true,
+ "requires": {
+ "ajv": "^5.2.3",
+ "ajv-keywords": "^2.1.0",
+ "chalk": "^2.1.0",
+ "lodash": "^4.17.4",
+ "slice-ansi": "1.0.0",
+ "string-width": "^2.1.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "test-exclude": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz",
+ "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3",
+ "minimatch": "^3.0.4",
+ "read-pkg-up": "^4.0.0",
+ "require-main-filename": "^2.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz",
+ "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0",
+ "read-pkg": "^3.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true
+ }
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "tiny-lr": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz",
+ "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==",
+ "dev": true,
+ "requires": {
+ "body": "^5.1.0",
+ "debug": "^3.1.0",
+ "faye-websocket": "~0.10.0",
+ "livereload-js": "^2.3.0",
+ "object-assign": "^4.1.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz",
+ "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ }
+ }
+ },
+ "title-case": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz",
+ "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=",
+ "dev": true,
+ "requires": {
+ "no-case": "^2.2.0",
+ "upper-case": "^1.0.3"
+ }
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "tmpl": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
+ "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ },
+ "to-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "typescript": {
+ "version": "3.7.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.2.tgz",
+ "integrity": "sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ==",
+ "dev": true
+ },
+ "uglify-js": {
+ "version": "3.4.9",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
+ "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
+ "dev": true,
+ "requires": {
+ "commander": "~2.17.1",
+ "source-map": "~0.6.1"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.17.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+ "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true
+ }
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "dev": true
+ },
+ "underscore.string": {
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz",
+ "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "^1.0.3",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "unicode-canonical-property-names-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
+ "dev": true
+ },
+ "unicode-match-property-ecmascript": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
+ "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
+ "dev": true,
+ "requires": {
+ "unicode-canonical-property-names-ecmascript": "^1.0.4",
+ "unicode-property-aliases-ecmascript": "^1.0.4"
+ }
+ },
+ "unicode-match-property-value-ecmascript": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz",
+ "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==",
+ "dev": true
+ },
+ "unicode-property-aliases-ecmascript": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz",
+ "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==",
+ "dev": true
+ },
+ "union-value": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^2.0.1"
+ }
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "upper-case": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+ "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
+ "dev": true
+ },
+ "upper-case-first": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz",
+ "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=",
+ "dev": true,
+ "requires": {
+ "upper-case": "^1.1.1"
+ }
+ },
+ "uri-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/uri-path/-/uri-path-1.0.0.tgz",
+ "integrity": "sha1-l0fwGDWJM8Md4PzP2C0TjmcmLjI=",
+ "dev": true
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "util.promisify": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
+ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "object.getownpropertydescriptors": "^2.0.3"
+ }
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "walker": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
+ "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
+ "dev": true,
+ "requires": {
+ "makeerror": "1.0.x"
+ }
+ },
+ "websocket-driver": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz",
+ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=",
+ "dev": true,
+ "requires": {
+ "http-parser-js": ">=0.4.0",
+ "websocket-extensions": ">=0.1.1"
+ }
+ },
+ "websocket-extensions": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
+ "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
+ "dev": true
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=",
+ "dev": true
+ },
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
+ "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "write-file-atomic": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz",
+ "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "xml-char-classes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz",
+ "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=",
+ "dev": true
+ },
+ "xmlhttprequest": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
+ "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw="
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
+ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^1.0.2",
+ "cliui": "^2.1.0",
+ "decamelize": "^1.0.0",
+ "window-size": "0.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+ "dev": true
+ }
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
index 7a1cea2..3f04bc6 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,8 @@
"description": "Grafana panel plugin to visualize status of multiple objects over time",
"main": "README.md",
"scripts": {
- "build": "grunt"
+ "build": "grunt",
+ "check-types": "node_modules/typescript/bin/tsc"
},
"author": "Flant JSC",
"license": "Apache-2.0",
@@ -13,28 +14,42 @@
"url": "https://github.com/flant/grafana-statusmap.git"
},
"devDependencies": {
- "babel": "^6.23.0",
- "babel-eslint": "^7.2.3",
- "babel-plugin-transform-class-properties": "^6.24.1",
- "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1",
- "babel-plugin-transform-object-rest-spread": "^6.23.0",
- "babel-preset-es2015": "^6.24.1",
- "grunt": "^1.0.1",
- "grunt-babel": "^6.0.0",
+ "@babel/core": "7.6.4",
+ "@babel/plugin-proposal-class-properties": "^7.4.4",
+ "@babel/plugin-proposal-object-rest-spread": "^7.4.4",
+ "@babel/plugin-transform-for-of": "^7.0.0",
+ "@babel/plugin-transform-modules-systemjs": "^7.0.0",
+ "@babel/plugin-syntax-dynamic-import": "7.2.0",
+ "@babel/preset-env": "7.6.3",
+ "@babel/preset-typescript": "7.6.0",
+ "@types/d3": "4.13.1",
+ "@types/d3-scale-chromatic": "1.3.1",
+ "@types/angular": "1.6.56",
+ "@types/grafana": "github:flant/types-grafana",
+ "@types/jquery": "1.10.35",
+ "@types/lodash": "4.14.123",
+ "babel-core": "7.0.0-bridge.0",
+ "babel-jest": "24.8.0",
+ "babel-loader": "8.0.5",
+ "babel-plugin-angularjs-annotate": "0.10.0",
+ "babel-eslint": "^10.0.2",
+ "eslint": "^4.12.1",
+ "grunt": "^1.0.4",
+ "grunt-angular-templates": "1.1.0",
+ "grunt-babel": "^8.0.0",
"grunt-contrib-clean": "^1.1.0",
"grunt-contrib-copy": "^1.0.0",
"grunt-contrib-sass": "^1.0.0",
"grunt-contrib-uglify": "^3.0.1",
"grunt-contrib-watch": "^1.0.0",
- "grunt-execute": "^0.2.2",
"grunt-notify": "^0.4.5",
- "grunt-systemjs-builder": "^1.0.0",
- "load-grunt-tasks": "^3.5.2"
+ "load-grunt-tasks": "^3.5.2",
+ "typescript": "3.7.2"
},
"dependencies": {
- "d3": "^4.11.0",
- "d3-scale-chromatic": "^1.1.1",
- "lodash": "^4.17.4",
- "moment": "^2.18.1"
+ "d3": "4.13.0",
+ "d3-scale-chromatic": "1.5.0",
+ "lodash": "4.17.15",
+ "moment": "2.24.0"
}
}
diff --git a/src/annotations.js b/src/annotations.ts
similarity index 95%
rename from src/annotations.js
rename to src/annotations.ts
index 044faa3..f4a5279 100644
--- a/src/annotations.js
+++ b/src/annotations.ts
@@ -1,12 +1,20 @@
import d3 from 'd3';
import $ from 'jquery';
import _ from 'lodash';
-import kbn from 'app/core/utils/kbn';
let TOOLTIP_PADDING_X = 30;
let TOOLTIP_PADDING_Y = 10;
export class AnnotationTooltip {
+ scope: any;
+ dashboard: any;
+ panelCtrl: any;
+ panel: any;
+ mouseOverAnnotationTick: boolean;
+
+ tooltipBase: any;
+ tooltip: any;
+
constructor(elem, scope) {
this.scope = scope;
this.dashboard = scope.ctrl.dashboard;
@@ -90,7 +98,7 @@ export class AnnotationTooltip {
let tooltipTimeFormat = 'YYYY-MM-DD HH:mm:ss';
let annoTime = this.dashboard.formatDate(anno.time, tooltipTimeFormat);
let annoText = anno.text;
- let annoTags = [];
+ let annoTags:any = [];
if (anno.tags) {
annoTags = _.map(anno.tags, t => ({"text": t, "backColor": "rgb(63, 43, 91)", "borderColor":"rgb(101, 81, 129)"}))
}
diff --git a/src/color_legend.js b/src/color_legend.ts
similarity index 96%
rename from src/color_legend.js
rename to src/color_legend.ts
index 0014ff1..8e2ce93 100644
--- a/src/color_legend.js
+++ b/src/color_legend.ts
@@ -1,19 +1,17 @@
-import angular from 'angular';
import _ from 'lodash';
import $ from 'jquery';
import d3 from 'd3';
import * as d3ScaleChromatic from './libs/d3-scale-chromatic/index';
import {contextSrv} from 'app/core/core';
import {tickStep} from 'app/core/utils/ticks';
-
-let mod = angular.module('grafana.directives');
+import coreModule from 'app/core/core_module';
const LEGEND_STEP_WIDTH = 2;
/**
* Bigger color legend for opacity and spectrum modes editor.
*/
-mod.directive('optionsColorLegend', function() {
+coreModule.directive('optionsColorLegend', function() {
return {
restrict: 'E',
template: '',
@@ -47,7 +45,7 @@ mod.directive('optionsColorLegend', function() {
/**
* Graph legend with values.
*/
-mod.directive('statusHeatmapLegend', function() {
+coreModule.directive('statusHeatmapLegend', function() {
return {
restrict: 'E',
template: '',
@@ -160,11 +158,13 @@ function drawDiscreteColorLegend(elem, colorOptions, discreteHelper) {
let valuesNumber = thresholds.length;
// graph width as a fallback
- let $heatmap = $(elem).parent().parent().parent().find('.status-heatmap-panel');
- let graphWidth = $heatmap.find('svg').attr("width");
+ const $heatmap = $(elem).parent().parent().parent().find('.status-heatmap-panel');
+ const graphWidthAttr = $heatmap.find('svg').attr("width");
+ let graphWidth = parseInt(graphWidthAttr);
+
// calculate max width of tooltip and use it as width for each item
- let textWidth = [];
+ let textWidth:number[] = [];
legend.selectAll(".hidden-texts")
.data(tooltips)
.enter().append("text")
@@ -179,8 +179,8 @@ function drawDiscreteColorLegend(elem, colorOptions, discreteHelper) {
let legendWidth = Math.floor(_.min([
graphWidth - 30,
- (_.max(textWidth) + 3) * valuesNumber,
- ]));
+ (_.max(textWidth)! + 3) * valuesNumber,
+ ])!);
legendElem.attr("width", legendWidth);
let legendHeight = legendElem.attr("height");
@@ -398,7 +398,7 @@ function buildLegendTicks(rangeFrom, rangeTo, maxValue, minValue) {
let range = rangeTo - rangeFrom;
let tickStepSize = tickStep(rangeFrom, rangeTo, 3);
let ticksNum = Math.round(range / tickStepSize);
- let ticks = [];
+ let ticks:any = [];
for (let i = 0; i < ticksNum; i++) {
let current = tickStepSize * i;
diff --git a/src/color_mode_discrete.js b/src/color_mode_discrete.ts
similarity index 91%
rename from src/color_mode_discrete.js
rename to src/color_mode_discrete.ts
index 3f2141e..a812560 100644
--- a/src/color_mode_discrete.js
+++ b/src/color_mode_discrete.ts
@@ -1,7 +1,23 @@
import _ from 'lodash';
+import {StatusHeatmapCtrl} from "./status_heatmap_ctrl";
+
+interface Tooltip {
+ tooltip: string;
+ color: string;
+}
+
+declare class DiscreteColorThreshold {
+ color: string;
+ value: number;
+ tooltip: string;
+}
// Helper methods to handle discrete color mode
export class ColorModeDiscrete {
+ scope: any;
+ panelCtrl: StatusHeatmapCtrl;
+ panel: any;
+
constructor(scope) {
this.scope = scope;
this.panelCtrl = scope.ctrl;
@@ -9,9 +25,9 @@ export class ColorModeDiscrete {
}
// get tooltip for each value ordered by thresholds priority
- convertValuesToTooltips(values) {
+ convertValuesToTooltips(values:any[]) : Tooltip[] {
let thresholds = this.panel.color.thresholds;
- let tooltips = [];
+ let tooltips:Tooltip[] = [];
for (let i = 0; i < thresholds.length; i++) {
for (let j = 0; j < values.length; j++) {
@@ -26,9 +42,8 @@ export class ColorModeDiscrete {
return tooltips;
}
-
- getNotMatchedValues(values) {
- let notMatched = [];
+ getNotMatchedValues(values:any[]) {
+ let notMatched:any[] = [];
for (let j = 0; j < values.length; j++) {
if (!this.getMatchedThreshold(values[j])) {
notMatched.push(values[j]);
@@ -37,8 +52,8 @@ export class ColorModeDiscrete {
return notMatched;
}
- getNotColoredValues(values) {
- let notMatched = [];
+ getNotColoredValues(values:any[]) {
+ let notMatched:any[] = [];
for (let j = 0; j < values.length; j++) {
let threshold = this.getMatchedThreshold(values[j]);
if (!threshold || !threshold.color || threshold.color == "") {
@@ -48,7 +63,6 @@ export class ColorModeDiscrete {
return notMatched;
}
-
getDiscreteColor(index) {
let color = this.getThreshold(index).color;
if (!color || color == "") {
diff --git a/src/module.js b/src/module.js
deleted file mode 100644
index 639d67f..0000000
--- a/src/module.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import {loadPluginCss} from 'app/plugins/sdk';
-import { StatusHeatmapCtrl } from './status_heatmap_ctrl';
-
-loadPluginCss({
- dark: 'plugins/flant-statusmap-panel/css/statusmap.dark.css',
- light: 'plugins/flant-statusmap-panel/css/statusmap.light.css'
-});
-
-export {
- StatusHeatmapCtrl as PanelCtrl
-};
diff --git a/src/status_heatmap_ctrl.js b/src/module.ts
similarity index 67%
rename from src/status_heatmap_ctrl.js
rename to src/module.ts
index 3e44c1f..b90ec66 100644
--- a/src/status_heatmap_ctrl.js
+++ b/src/module.ts
@@ -1,9 +1,20 @@
-import { MetricsPanelCtrl } from 'app/plugins/sdk';
+// Libraries
import _ from 'lodash';
-import { contextSrv } from 'app/core/core';
-import kbn from 'app/core/utils/kbn';
+import { auto } from 'angular';
+// Components
import './color_legend';
+
+// Utils
+import kbn from 'app/core/utils/kbn';
+import {loadPluginCss} from 'app/plugins/sdk';
+
+// Types
+import { MetricsPanelCtrl } from 'app/plugins/sdk';
+import { contextSrv } from 'app/core/core';
+import { AnnotationsSrv } from 'app/features/annotations/annotations_srv';
+
+import {CardsStorage, Card} from './graph';
import rendering from './rendering';
// import aggregates, { aggregatesMap } from './aggregates';
// import fragments, { fragmentsMap } from './fragments';
@@ -11,58 +22,12 @@ import rendering from './rendering';
import {statusHeatmapOptionsEditor} from './options_editor';
import {ColorModeDiscrete} from "./color_mode_discrete";
+
const CANVAS = 'CANVAS';
const SVG = 'SVG';
const VALUE_INDEX = 0,
TIME_INDEX = 1;
-const panelDefaults = {
- // aggregate: aggregates.AVG,
- // fragment: fragments.HOUR,
- color: {
- mode: 'spectrum',
- cardColor: '#b4ff00',
- colorScale: 'sqrt',
- exponent: 0.5,
- colorScheme: 'interpolateGnYlRd',
- // discrete mode settings
- defaultColor: '#757575',
- thresholds: [] // manual colors
- },
- cards: {
- cardMinWidth: 5,
- cardVSpacing: 2,
- cardHSpacing: 2,
- cardRound: null
- },
- xAxis: {
- show: true,
- showWeekends: true,
- minBucketWidthToShowWeekends: 4,
- showCrosshair: true,
- labelFormat: '%a %m/%d'
- },
- yAxis: {
- show: true,
- showCrosshair: false
- },
- tooltip: {
- show: true
- },
- legend: {
- show: true
- },
- data: {
- unitFormat: 'short',
- decimals: null
- },
- // how null points should be handled
- nullPointMode: 'as empty',
- yAxisSort: 'metrics',
- highlightCards: true,
- useMax: true
-};
-
const renderer = CANVAS;
const colorSchemes = [
@@ -97,13 +62,100 @@ const colorSchemes = [
let colorModes = ['opacity', 'spectrum', 'discrete'];
let opacityScales = ['linear', 'sqrt'];
-export class StatusHeatmapCtrl extends MetricsPanelCtrl {
+interface DataWarning {
+ title: string;
+ tip: string;
+}
+
+interface DataWarnings {
+ noColorDefined: DataWarning;
+ multipleValues: DataWarning;
+}
+
+interface ColorThreshold {
+
+}
+
+
+
+
+loadPluginCss({
+ dark: 'plugins/flant-statusmap-panel/css/statusmap.dark.css',
+ light: 'plugins/flant-statusmap-panel/css/statusmap.light.css'
+});
+
+class StatusHeatmapCtrl extends MetricsPanelCtrl {
static templateUrl = 'module.html';
+ opacityScales: any = [];
+ colorModes: any = [];
+ colorSchemes: any = [];
+ unitFormats: any;
+ data: any;
+ cardsData: any;
+ graph: any;
+ multipleValues: boolean;
+ noColorDefined: boolean;
+ discreteHelper: ColorModeDiscrete;
+ dataWarnings: DataWarnings;
+
+ annotations: object[] = [];
+ annotationsPromise: any;
+
+ panelDefaults: any = {
+ // datasource name, null = default datasource
+ datasource: null,
+ // color mode
+ color: {
+ mode: 'spectrum',
+ cardColor: '#b4ff00',
+ colorScale: 'sqrt',
+ exponent: 0.5,
+ colorScheme: 'interpolateGnYlRd',
+ // discrete mode settings
+ defaultColor: '#757575',
+ thresholds: [] // manual colors
+ },
+ // buckets settings
+ cards: {
+ cardMinWidth: 5,
+ cardVSpacing: 2,
+ cardHSpacing: 2,
+ cardRound: null
+ },
+ xAxis: {
+ show: true,
+ showWeekends: true,
+ minBucketWidthToShowWeekends: 4,
+ showCrosshair: true,
+ labelFormat: '%a %m/%d'
+ },
+ yAxis: {
+ show: true,
+ showCrosshair: false
+ },
+ tooltip: {
+ show: true
+ },
+ legend: {
+ show: true
+ },
+ data: {
+ unitFormat: 'short',
+ decimals: null
+ },
+ // how null points should be handled
+ nullPointMode: 'as empty',
+ yAxisSort: 'metrics',
+ highlightCards: true,
+ useMax: true
+ };
+
/** @ngInject */
- constructor($scope, $injector, $rootScope, timeSrv, annotationsSrv) {
+ constructor($scope: any, $injector: auto.IInjectorService, private annotationsSrv: AnnotationsSrv) {
super($scope, $injector);
- _.defaultsDeep(this.panel, panelDefaults);
+
+ _.defaultsDeep(this.panel, this.panelDefaults);
this.opacityScales = opacityScales;
this.colorModes = colorModes;
@@ -131,31 +183,39 @@ export class StatusHeatmapCtrl extends MetricsPanelCtrl {
};
this.annotations = [];
- this.annotationsSrv = annotationsSrv;
- this.events.on('data-received', this.onDataReceived);
- this.events.on('data-snapshot-load', this.onDataReceived);
- this.events.on('data-error', this.onDataError);
- this.events.on('init-edit-mode', this.onInitEditMode);
- this.events.on('render', this.onRender);
- this.events.on('refresh', this.postRefresh);
+ this.events.on('render', this.onRender.bind(this));
+ this.events.on('data-received', this.onDataReceived.bind(this));
+ this.events.on('data-error', this.onDataError.bind(this));
+ this.events.on('data-snapshot-load', this.onDataReceived.bind(this));
+ this.events.on('init-edit-mode', this.onInitEditMode.bind(this));
+ this.events.on('refresh', this.postRefresh.bind(this));
// custom event from rendering.js
- this.events.on('render-complete', this.onRenderComplete);
+ this.events.on('render-complete', this.onRenderComplete.bind(this));
}
- onRenderComplete = (data) => {
+ onRenderComplete(data):void {
this.graph.chartWidth = data.chartWidth;
this.renderingCompleted();
- };
+ }
+
+ getChartWidth():number {
+ const wndWidth = $(window).width();
+ // gripPos.w is a width in grid's measurements. Grid size in Grafana is 24.
+ const panelWidthFactor = this.panel.gridPos.w / 24;
+ const panelWidth = Math.ceil(wndWidth * panelWidthFactor);
+ // approximate chartWidth because y axis ticks not rendered yet on first data receive.
+ const chartWidth = _.max([
+ panelWidth - 200,
+ panelWidth/2
+ ]);
+
+ return chartWidth!;
+ }
// override calculateInterval for discrete color mode
- calculateInterval = () => {
- let panelWidth = Math.ceil($(window).width() * (this.panel.gridPos.w / 24));
- // approximate chartWidth because y axis ticks not rendered yet on first data receive.
- let chartWidth = _.max([
- panelWidth - 200,
- panelWidth/2
- ]);
+ calculateInterval() {
+ let chartWidth = this.getChartWidth();
let minCardWidth = this.panel.cards.cardMinWidth;
let minSpacing = this.panel.cards.cardHSpacing;
@@ -169,6 +229,7 @@ export class StatusHeatmapCtrl extends MetricsPanelCtrl {
// Calculate low limit of interval
let lowLimitMs = 1; // 1 millisecond default low limit
+
let intervalOverride = this.panel.interval;
// if no panel interval check datasource
@@ -188,12 +249,13 @@ export class StatusHeatmapCtrl extends MetricsPanelCtrl {
if (lowLimitMs > intervalMs) {
intervalMs = lowLimitMs;
}
+ let interval = kbn.secondsToHms(intervalMs / 1000);
this.intervalMs = intervalMs;
- this.interval = kbn.secondsToHms(intervalMs / 1000);
- };
+ this.interval = interval;
+ }
- issueQueries = (datasource) => {
+ issueQueries(datasource: any) {
this.annotationsPromise = this.annotationsSrv.getAnnotations({
dashboard: this.dashboard,
panel: this.panel,
@@ -206,49 +268,65 @@ export class StatusHeatmapCtrl extends MetricsPanelCtrl {
* (but not wait for completion). This resolves
* issue 11806.
*/
- // 5.x before 5.4 doesn't have dataPromises
+ // 5.x before 5.4 doesn't have datasourcePromises.
+
if ("undefined" !== typeof(this.annotationsSrv.datasourcePromises)) {
return this.annotationsSrv.datasourcePromises.then(r => {
- return super.issueQueries(datasource);
+ return this.issueQueriesWithInterval(datasource, this.interval);
});
} else {
- return super.issueQueries(datasource);
+ return this.issueQueriesWithInterval(datasource, this.interval);
}
}
+ // Grafana 6.2 (and older) is using this.interval for queries,
+ // but Grafana 6.3+ is calculating interval again in queryRunner,
+ // so we need to save-restore this.panel.interval.
+ issueQueriesWithInterval(datasource: any, interval: any) {
+ var origInterval = this.panel.interval;
+ this.panel.interval = this.interval;
+ var res = super.issueQueries(datasource);
+ this.panel.interval = origInterval;
+ return res;
+ }
- onDataReceived = (dataList) => {
+
+ onDataReceived(dataList: any) {
this.data = dataList;
this.cardsData = this.convertToCards(this.data);
+ console.log("OnDataReceived");
+
this.annotationsPromise.then(
- result => {
+ (result: { alertState: any; annotations: any }) => {
this.loading = false;
//this.alertState = result.alertState;
if (result.annotations && result.annotations.length > 0) {
this.annotations = result.annotations;
} else {
- this.annotations = null;
+ this.annotations = [];
}
+ console.log("annotationsPromise result " + this.annotations.length + " annotations");
this.render();
},
() => {
this.loading = false;
- this.annotations = null;
+ this.annotations = [];
+ console.log("annotationsPromise onrejected");
this.render();
}
);
//this.render();
- };
+ }
- onInitEditMode = () => {
+ onInitEditMode() {
this.addEditorTab('Options', statusHeatmapOptionsEditor, 2);
this.unitFormats = kbn.getUnitFormats();
- };
+ }
- onRender = () => {
- if (!this.data) { return; }
+ onRender() {
+ if (!this.range || !this.data) { return; }
this.multipleValues = false;
if (!this.panel.useMax) {
@@ -264,47 +342,47 @@ export class StatusHeatmapCtrl extends MetricsPanelCtrl {
this.noColorDefined = this.cardsData.noColorDefined;
}
}
- };
+ }
- onCardColorChange = (newColor) => {
+ onCardColorChange(newColor) {
this.panel.color.cardColor = newColor;
this.render();
- };
+ }
- onDataError = () => {
+ onDataError() {
this.data = [];
this.annotations = [];
this.render();
- };
+ }
- postRefresh = () => {
+ postRefresh() {
this.noColorDefined = false;
- };
+ }
- onEditorAddThreshold = () => {
+ onEditorAddThreshold() {
this.panel.color.thresholds.push({ color: this.panel.defaultColor });
this.render();
- };
+ }
- onEditorRemoveThreshold = (index) => {
+ onEditorRemoveThreshold(index:number) {
this.panel.color.thresholds.splice(index, 1);
this.render();
- };
+ }
- onEditorRemoveThresholds = () => {
+ onEditorRemoveThresholds() {
this.panel.color.thresholds = [];
this.render();
- };
+ }
- onEditorAddThreeLights = () => {
+ onEditorAddThreeLights() {
this.panel.color.thresholds.push({color: "red", value: 2, tooltip: "error" });
this.panel.color.thresholds.push({color: "yellow", value: 1, tooltip: "warning" });
this.panel.color.thresholds.push({color: "green", value: 0, tooltip: "ok" });
this.render();
- };
+ }
/* https://ethanschoonover.com/solarized/ */
- onEditorAddSolarized = () => {
+ onEditorAddSolarized() {
this.panel.color.thresholds.push({color: "#b58900", value: 0, tooltip: "yellow" });
this.panel.color.thresholds.push({color: "#cb4b16", value: 1, tooltip: "orange" });
this.panel.color.thresholds.push({color: "#dc322f", value: 2, tooltip: "red" });
@@ -316,13 +394,13 @@ export class StatusHeatmapCtrl extends MetricsPanelCtrl {
this.render();
}
- link = (scope, elem, attrs, ctrl) => {
+ link(scope, elem, attrs, ctrl) {
rendering(scope, elem, attrs, ctrl);
- };
+ }
// group values into buckets by target
- convertToCards = (data) => {
- let cardsData = {
+ convertToCards(data) {
+ let cardsData = {
cards: [],
xBucketSize: 0,
yBucketSize: 0,
@@ -355,14 +433,11 @@ export class StatusHeatmapCtrl extends MetricsPanelCtrl {
let target = cardsData.targets[i];
for (let j = 0; j < cardsData.xBucketSize; j++) {
- let card = {
- id: i*cardsData.xBucketSize + j,
- values: [],
- multipleValues: false,
- noColorDefined: false,
- y: target,
- x: -1,
- };
+ let card = new Card();
+ card.id = i*cardsData.xBucketSize + j;
+ card.values = [];
+ card.y = target;
+ card.x = -1;
// collect values from all timeseries with target
for (let si = 0; si < cardsData.targetIndex[target].length; si++) {
@@ -399,5 +474,9 @@ export class StatusHeatmapCtrl extends MetricsPanelCtrl {
}
return cardsData;
- };
+ }
}
+
+export {
+ StatusHeatmapCtrl, StatusHeatmapCtrl as PanelCtrl
+};
diff --git a/src/options_editor.js b/src/options_editor.ts
similarity index 92%
rename from src/options_editor.js
rename to src/options_editor.ts
index fae4669..66cdffb 100644
--- a/src/options_editor.js
+++ b/src/options_editor.ts
@@ -1,6 +1,10 @@
import kbn from 'app/core/utils/kbn';
export class StatusHeatmapOptionsEditorCtrl {
+ panel: any;
+ panelCtrl: any;
+ unitFormats: any;
+
constructor($scope) {
$scope.editor = this;
this.panelCtrl = $scope.ctrl;
diff --git a/src/rendering.js b/src/rendering.js
deleted file mode 100644
index bb69b2f..0000000
--- a/src/rendering.js
+++ /dev/null
@@ -1,728 +0,0 @@
-import _ from 'lodash';
-import $ from 'jquery';
-import moment from 'moment';
-import kbn from 'app/core/utils/kbn';
-import {appEvents, contextSrv} from 'app/core/core';
-import {tickStep, getScaledDecimals, getFlotTickSize} from 'app/core/utils/ticks';
-import d3 from 'd3';
-import * as d3ScaleChromatic from './libs/d3-scale-chromatic/index';
-import {StatusHeatmapTooltip} from './tooltip';
-import {AnnotationTooltip} from './annotations';
-
-let MIN_CARD_SIZE = 5,
- CARD_H_SPACING = 2,
- CARD_V_SPACING = 2,
- CARD_ROUND = 0,
- DATA_RANGE_WIDING_FACTOR = 1.2,
- DEFAULT_X_TICK_SIZE_PX = 100,
- DEFAULT_Y_TICK_SIZE_PX = 50,
- X_AXIS_TICK_PADDING = 10,
- Y_AXIS_TICK_PADDING = 5,
- MIN_SELECTION_WIDTH = 2;
-
-export default function link(scope, elem, attrs, ctrl) {
- let data, cardsData, timeRange, panel, heatmap;
-
- // $heatmap is JQuery object, but heatmap is D3
- let $heatmap = elem.find('.status-heatmap-panel');
- let tooltip = new StatusHeatmapTooltip($heatmap, scope);
- let annotationTooltip = new AnnotationTooltip($heatmap, scope);
-
- let width, height,
- yScale, xScale,
- chartWidth, chartHeight,
- chartTop, chartBottom,
- yAxisWidth, xAxisHeight,
- cardVSpacing, cardHSpacing, cardRound,
- cardWidth, cardHeight,
- colorScale, opacityScale,
- mouseUpHandler,
- xGridSize, yGridSize;
-
- let yOffset = 0;
-
- let selection = {
- active: false,
- x1: -1,
- x2: -1
- };
-
- let padding = {left: 0, right: 0, top: 0, bottom: 0},
- margin = {left: 25, right: 15, top: 10, bottom: 20},
- dataRangeWidingFactor = DATA_RANGE_WIDING_FACTOR;
-
- ctrl.events.on('render', () => {
- render();
- });
-
- function setElementHeight() {
- try {
- var height = ctrl.height || panel.height || ctrl.row.height;
- if (_.isString(height)) {
- height = parseInt(height.replace('px', ''), 10);
- }
-
- height -= panel.legend.show ? 32 : 10; // bottom padding and space for legend. Change margin in .status-heatmap-color-legend !
-
- $heatmap.css('height', height + 'px');
-
- return true;
- } catch (e) { // IE throws errors sometimes
- return false;
- }
- }
-
- function getYAxisWidth(elem) {
- let axis_text = elem.selectAll(".axis-y text").nodes();
- let max_text_width = _.max(_.map(axis_text, text => {
- // Use SVG getBBox method
- return text.getBBox().width;
- }));
-
- return Math.ceil(max_text_width);
- }
-
- function getXAxisHeight(elem) {
- let axis_line = elem.select(".axis-x line");
- if (!axis_line.empty()) {
- let axis_line_position = parseFloat(elem.select(".axis-x line").attr("y2"));
- let canvas_width = parseFloat(elem.attr("height"));
- return canvas_width - axis_line_position;
- } else {
- // Default height
- return 30;
- }
- }
-
- function addXAxis() {
- // Scale timestamps to cards centers
- scope.xScale = xScale = d3.scaleTime()
- .domain([timeRange.from, timeRange.to])
- .range([xGridSize/2, chartWidth-xGridSize/2]);
-
- let ticks = chartWidth / DEFAULT_X_TICK_SIZE_PX;
- let grafanaTimeFormatter = grafanaTimeFormat(ticks, timeRange.from, timeRange.to);
- let timeFormat;
- let dashboardTimeZone = ctrl.dashboard.getTimezone();
- if (dashboardTimeZone === 'utc') {
- timeFormat = d3.utcFormat(grafanaTimeFormatter);
- } else {
- timeFormat = d3.timeFormat(grafanaTimeFormatter);
- }
-
- let xAxis = d3.axisBottom(xScale)
- .ticks(ticks)
- .tickFormat(timeFormat)
- .tickPadding(X_AXIS_TICK_PADDING)
- .tickSize(chartHeight);
-
- let posY = chartTop;
- let posX = yAxisWidth;
-
- heatmap.append("g")
- .attr("class", "axis axis-x")
- .attr("transform", "translate(" + posX + "," + posY + ")")
- .call(xAxis);
-
- // Remove horizontal line in the top of axis labels (called domain in d3)
- heatmap.select(".axis-x").select(".domain").remove();
- }
-
- // divide chart height by ticks for cards drawing
- function getYScale(ticks) {
- let range = [];
- let step = chartHeight / ticks.length;
- // svg has y=0 on the top, so top card should have a minimal value in range
- range.push(step);
- for (let i = 1; i < ticks.length; i++) {
- range.push(step * (i+1));
- }
- return d3.scaleOrdinal()
- .domain(ticks)
- .range(range);
- }
-
- // divide chart height by ticks with offset for ticks drawing
- function getYAxisScale(ticks) {
- let range = [];
- let step = chartHeight / ticks.length;
- // svg has y=0 on the top, so top tick should have a minimal value in range
- range.push(yOffset);
- for (let i = 1; i < ticks.length; i++) {
- range.push(step * i + yOffset);
- }
- return d3.scaleOrdinal()
- .domain(ticks)
- .range(range);
- }
-
- function addYAxis() {
- let ticks = _.uniq(_.map(data, d => d.target));
-
- // Set default Y min and max if no data
- if (_.isEmpty(data)) {
- ticks = [''];
- }
-
- if (panel.yAxisSort == 'a → z') {
- ticks.sort((a, b) => a.localeCompare(b, 'en', {ignorePunctuation: false, numeric: true}));
- } else if (panel.yAxisSort == 'z → a') {
- ticks.sort((b, a) => a.localeCompare(b, 'en', {ignorePunctuation: false, numeric: true}));
- }
-
- let yAxisScale = getYAxisScale(ticks);
- scope.yScale = yScale = getYScale(ticks);
-
- let yAxis = d3.axisLeft(yAxisScale)
- .tickValues(ticks)
- .tickSizeInner(0 - width)
- .tickPadding(Y_AXIS_TICK_PADDING);
-
- heatmap.append("g")
- .attr("class", "axis axis-y")
- .call(yAxis);
-
- // Calculate Y axis width first, then move axis into visible area
- let posY = margin.top;
- let posX = getYAxisWidth(heatmap) + Y_AXIS_TICK_PADDING;
- heatmap.select(".axis-y").attr("transform", "translate(" + posX + "," + posY + ")");
-
- // Remove vertical line in the right of axis labels (called domain in d3)
- heatmap.select(".axis-y").select(".domain").remove();
- heatmap.select(".axis-y").selectAll(".tick line").remove();
- }
-
- // Wide Y values range and adjust to bucket size
- function wideYAxisRange(min, max, tickInterval) {
- let y_widing = (max * (dataRangeWidingFactor - 1) - min * (dataRangeWidingFactor - 1)) / 2;
- let y_min, y_max;
-
- if (tickInterval === 0) {
- y_max = max * dataRangeWidingFactor;
- y_min = min - min * (dataRangeWidingFactor - 1);
- tickInterval = (y_max - y_min) / 2;
- } else {
- y_max = Math.ceil((max + y_widing) / tickInterval) * tickInterval;
- y_min = Math.floor((min - y_widing) / tickInterval) * tickInterval;
- }
-
- // Don't wide axis below 0 if all values are positive
- if (min >= 0 && y_min < 0) {
- y_min = 0;
- }
-
- return {y_min, y_max};
- }
-
- function tickValueFormatter(decimals, scaledDecimals = null) {
- let format = panel.yAxis.format;
- return function(value) {
- return kbn.valueFormats[format](value, decimals, scaledDecimals);
- };
- }
-
- // Create svg element, add axes and
- // calculate sizes for cards drawing
- function addHeatmapCanvas() {
- let heatmap_elem = $heatmap[0];
-
- width = Math.floor($heatmap.width()) - padding.right;
- height = Math.floor($heatmap.height()) - padding.bottom;
-
- if (heatmap) {
- heatmap.remove();
- }
-
- heatmap = d3.select(heatmap_elem)
- .append("svg")
- .attr("width", width)
- .attr("height", height);
-
- chartHeight = height - margin.top - margin.bottom;
- chartTop = margin.top;
- chartBottom = chartTop + chartHeight;
-
- cardHSpacing = panel.cards.cardHSpacing !== null ? panel.cards.cardHSpacing : CARD_H_SPACING;
- cardVSpacing = panel.cards.cardVSpacing !== null ? panel.cards.cardVSpacing : CARD_V_SPACING;
- cardRound = panel.cards.cardRound !== null ? panel.cards.cardRound : CARD_ROUND;
-
- // calculate yOffset for YAxis
- yGridSize = Math.floor(chartHeight / cardsData.yBucketSize);
- cardHeight = yGridSize ? yGridSize - cardVSpacing : 0;
- yOffset = cardHeight / 2;
-
- addYAxis();
-
- yAxisWidth = getYAxisWidth(heatmap) + Y_AXIS_TICK_PADDING;
- chartWidth = width - yAxisWidth - margin.right;
-
- // TODO allow per-y cardWidth!
- // we need to fill chartWidth with xBucketSize cards.
- xGridSize = chartWidth / (cardsData.xBucketSize+1);
- cardWidth = xGridSize - cardHSpacing;
-
- addXAxis();
- xAxisHeight = getXAxisHeight(heatmap);
-
- if (!panel.yAxis.show) {
- heatmap.select(".axis-y").selectAll("line").style("opacity", 0);
- }
-
- if (!panel.xAxis.show) {
- heatmap.select(".axis-x").selectAll("line").style("opacity", 0);
- }
- }
-
- function addHeatmap() {
- addHeatmapCanvas();
-
- let maxValue = panel.color.max || cardsData.maxValue;
- let minValue = panel.color.min || cardsData.minValue;
-
- if (panel.color.mode !== 'discrete') {
- colorScale = getColorScale(maxValue, minValue);
- }
- setOpacityScale(maxValue);
-
- let cards = heatmap.selectAll(".status-heatmap-card").data(cardsData.cards);
- cards.append("title");
- cards = cards.enter().append("rect")
- .attr("cardId", c => c.id)
- .attr("x", getCardX)
- .attr("width", getCardWidth)
- .attr("y", getCardY)
- .attr("height", getCardHeight)
- .attr("rx", cardRound)
- .attr("ry", cardRound)
- .attr("class", "bordered status-heatmap-card")
- .style("fill", getCardColor)
- .style("stroke", getCardColor)
- .style("stroke-width", 0)
- //.style("stroke-width", getCardStrokeWidth)
- //.style("stroke-dasharray", "3,3")
- .style("opacity", getCardOpacity);
-
- let $cards = $heatmap.find(".status-heatmap-card");
- $cards.on("mouseenter", (event) => {
- tooltip.mouseOverBucket = true;
- highlightCard(event);
- })
- .on("mouseleave", (event) => {
- tooltip.mouseOverBucket = false;
- resetCardHighLight(event);
- });
-
- _renderAnnotations();
-
- ctrl.events.emit('render-complete', {
- "chartWidth": chartWidth
- });
- }
-
- function highlightCard(event) {
- let color = d3.select(event.target).style("fill");
- let highlightColor = d3.color(color).darker(2);
- let strokeColor = d3.color(color).brighter(4);
- let current_card = d3.select(event.target);
- tooltip.originalFillColor = color;
- current_card.style("fill", highlightColor)
- .style("stroke", strokeColor)
- .style("stroke-width", 1);
- }
-
- function resetCardHighLight(event) {
- d3
- .select(event.target)
- .style("fill", tooltip.originalFillColor)
- .style("stroke", tooltip.originalFillColor)
- .style("stroke-width", 0);
- }
-
- function getColorScale(maxValue, minValue = 0) {
- let colorScheme = _.find(ctrl.colorSchemes, {value: panel.color.colorScheme});
- let colorInterpolator = d3ScaleChromatic[colorScheme.value];
- let colorScaleInverted = colorScheme.invert === 'always' ||
- (colorScheme.invert === 'dark' && !contextSrv.user.lightTheme);
-
- if (maxValue == minValue)
- maxValue = minValue + 1;
-
- let start = colorScaleInverted ? maxValue : minValue;
- let end = colorScaleInverted ? minValue : maxValue;
-
- return d3.scaleSequential(colorInterpolator).domain([start, end]);
- }
-
- function setOpacityScale(maxValue) {
- if (panel.color.colorScale === 'linear') {
- opacityScale = d3.scaleLinear()
- .domain([0, maxValue])
- .range([0, 1]);
- } else if (panel.color.colorScale === 'sqrt') {
- opacityScale = d3.scalePow().exponent(panel.color.exponent)
- .domain([0, maxValue])
- .range([0, 1]);
- }
- }
-
- function getCardX(d) {
- let x;
- // cx is the center of the card. Card should be placed to the left.
- let cx = xScale(d.x);
-
- if (cx - cardWidth/2 < 0) {
- x = yAxisWidth + cardHSpacing/2;
- } else {
- x = yAxisWidth + cx - cardWidth/2;
- }
-
- return x;
- }
-
- // xScale returns card center. Adjust cardWidth in case of overlaping.
- function getCardWidth(d) {
- let w;
- let cx = xScale(d.x);
-
- if (cx < cardWidth/2) {
- // Center should not exceed half of card.
- // Cut card to the left to prevent overlay of y axis.
- let cutted_width = (cx - cardHSpacing/2) + cardWidth/2;
- w = cutted_width > 0 ? cutted_width : 0;
- } else if (chartWidth - cx < cardWidth/2) {
- // Cut card to the right to prevent overlay of right graph edge.
- w = cardWidth/2 + (chartWidth - cx - cardHSpacing/2);
- } else {
- w = cardWidth;
- }
-
- // Card width should be MIN_CARD_SIZE at least
- w = Math.max(w, MIN_CARD_SIZE);
-
- if (cardHSpacing == 0) {
- w = w+1;
- }
-
- return w;
- }
-
- function getCardY(d) {
- return yScale(d.y) + chartTop - cardHeight - cardVSpacing/2;
- }
-
- function getCardHeight(d) {
- let ys = yScale(d.y);
- let y = ys + chartTop - cardHeight - cardVSpacing/2;
- let h = cardHeight;
-
- // Cut card height to prevent overlay
- if (y < chartTop) {
- h = ys - cardVSpacing/2;
- } else if (ys > chartBottom) {
- h = chartBottom - y;
- } else if (y + cardHeight > chartBottom) {
- h = chartBottom - y;
- }
-
- // Height can't be more than chart height
- h = Math.min(h, chartHeight);
- // Card height should be MIN_CARD_SIZE at least
- h = Math.max(h, MIN_CARD_SIZE);
-
- if (cardVSpacing == 0) {
- h = h+1
- }
-
- return h;
- }
-
- function getCardColor(d) {
- if (panel.color.mode === 'opacity') {
- return panel.color.cardColor;
- } else if (panel.color.mode === 'spectrum') {
- return colorScale(d.value);
- } else if (panel.color.mode === 'discrete') {
- return ctrl.discreteHelper.getBucketColor(d.values);
- }
- }
-
- function getCardOpacity(d) {
- if (panel.nullPointMode === 'as empty' && d.value == null ) {
- return 0;
- }
- if (panel.color.mode === 'opacity') {
- return opacityScale(d.value);
- } else {
- return 1;
- }
- }
-
- function getCardStrokeWidth(d) {
- if (panel.color.mode === 'discrete') {
- return '1';
- }
- return '0';
- }
-
- /////////////////////////////
- // Selection and crosshair //
- /////////////////////////////
-
- // Shared crosshair and tooltip
- appEvents.on('graph-hover', event => {
- drawSharedCrosshair(event.pos);
- }, scope);
-
- appEvents.on('graph-hover-clear', () => {
- clearCrosshair();
- }, scope);
-
- function onMouseDown(event) {
- selection.active = true;
- selection.x1 = event.offsetX;
-
- mouseUpHandler = function() {
- onMouseUp();
- };
-
- $(document).one("mouseup", mouseUpHandler);
- }
-
- function onMouseUp() {
- $(document).unbind("mouseup", mouseUpHandler);
- mouseUpHandler = null;
- selection.active = false;
-
- let selectionRange = Math.abs(selection.x2 - selection.x1);
- if (selection.x2 >= 0 && selectionRange > MIN_SELECTION_WIDTH) {
- let timeFrom = xScale.invert(Math.min(selection.x1, selection.x2) - yAxisWidth - xGridSize/2);
- let timeTo = xScale.invert(Math.max(selection.x1, selection.x2) - yAxisWidth - xGridSize/2);
-
- ctrl.timeSrv.setTime({
- from: moment.utc(timeFrom),
- to: moment.utc(timeTo)
- });
- }
-
- clearSelection();
- }
-
- function onMouseLeave() {
- appEvents.emit('graph-hover-clear');
- clearCrosshair();
- //annotationTooltip.destroy();
- }
-
- function onMouseMove(event) {
- if (!heatmap) { return; }
-
- if (selection.active) {
- // Clear crosshair and tooltip
- clearCrosshair();
- tooltip.destroy();
- annotationTooltip.destroy();
-
- selection.x2 = limitSelection(event.offsetX);
- drawSelection(selection.x1, selection.x2);
- } else {
- emitGraphHoverEvet(event);
- drawCrosshair(event.offsetX);
- tooltip.show(event); //, data);
- annotationTooltip.show(event);
- }
- }
-
- function emitGraphHoverEvet(event) {
- let x = xScale.invert(event.offsetX - yAxisWidth - xGridSize/2).valueOf();
- let y = yScale(event.offsetY);
- let pos = {
- pageX: event.pageX,
- pageY: event.pageY,
- x: x, x1: x,
- y: y, y1: y,
- panelRelY: null
- };
-
- // Set minimum offset to prevent showing legend from another panel
- pos.panelRelY = Math.max(event.offsetY / height, 0.001);
-
- // broadcast to other graph panels that we are hovering
- appEvents.emit('graph-hover', {pos: pos, panel: panel});
- }
-
- function limitSelection(x2) {
- x2 = Math.max(x2, yAxisWidth);
- x2 = Math.min(x2, chartWidth + yAxisWidth);
- return x2;
- }
-
- function drawSelection(posX1, posX2) {
- if (heatmap) {
- heatmap.selectAll(".status-heatmap-selection").remove();
- let selectionX = Math.min(posX1, posX2);
- let selectionWidth = Math.abs(posX1 - posX2);
-
- if (selectionWidth > MIN_SELECTION_WIDTH) {
- heatmap.append("rect")
- .attr("class", "status-heatmap-selection")
- .attr("x", selectionX)
- .attr("width", selectionWidth)
- .attr("y", chartTop)
- .attr("height", chartHeight);
- }
- }
- }
-
- function clearSelection() {
- selection.x1 = -1;
- selection.x2 = -1;
-
- if (heatmap) {
- heatmap.selectAll(".status-heatmap-selection").remove();
- }
- }
-
- function drawCrosshair(position) {
- if (heatmap) {
- heatmap.selectAll(".status-heatmap-crosshair").remove();
-
- let posX = position;
- posX = Math.max(posX, yAxisWidth);
- posX = Math.min(posX, chartWidth + yAxisWidth);
-
- heatmap.append("g")
- .attr("class", "status-heatmap-crosshair")
- .attr("transform", "translate(" + posX + ",0)")
- .append("line")
- .attr("x1", 1)
- .attr("y1", chartTop)
- .attr("x2", 1)
- .attr("y2", chartBottom)
- .attr("stroke-width", 1);
- }
- }
-
- // map time to X
- function drawSharedCrosshair(pos) {
- if (heatmap && ctrl.dashboard.graphTooltip !== 0) {
- let posX = xScale(pos.x) + yAxisWidth;
- drawCrosshair(posX);
- }
- }
-
- function clearCrosshair() {
- if (heatmap) {
- heatmap.selectAll(".status-heatmap-crosshair").remove();
- }
- }
-
- function render() {
- data = ctrl.data;
- panel = ctrl.panel;
- timeRange = ctrl.range;
- cardsData = ctrl.cardsData;
-
- if (!data || !cardsData || !setElementHeight()) {
- return;
- }
-
- // Draw default axes and return if no data
- if (_.isEmpty(cardsData.cards)) {
- addHeatmapCanvas();
- return;
- }
-
- addHeatmap();
- scope.yAxisWidth = yAxisWidth;
- scope.xAxisHeight = xAxisHeight;
- scope.chartHeight = chartHeight;
- scope.chartWidth = chartWidth;
- scope.chartTop = chartTop;
- }
-
- // Register selection listeners
- $heatmap.on("mousedown", onMouseDown);
- $heatmap.on("mousemove", onMouseMove);
- $heatmap.on("mouseleave", onMouseLeave);
-
- function _renderAnnotations() {
- if (!ctrl.annotations || ctrl.annotations.length == 0) {
- return;
- }
-
- if (!heatmap) {
- return;
- }
-
- let annoData = _.map(ctrl.annotations, (d,i) => ({"x": Math.floor(yAxisWidth + xScale(d.time)), "id":i, "anno": d.source}));
-
-
- let anno = heatmap
- .append("g")
- .attr("class", "statusmap-annotations")
- .attr("transform", "translate(0.5,0)")
- .selectAll(".statusmap-annotations")
- .data(annoData)
- .enter().append("g")
- ;
- anno.append("line")
- //.attr("class", "statusmap-annotation-tick")
- .attr("x1", d => d.x)
- .attr("y1", chartTop)
- .attr("x2", d => d.x)
- .attr("y2", chartBottom)
- .style("stroke", d => d.anno.iconColor)
- .style("stroke-width", 1)
- .style("stroke-dasharray", "3,3")
- ;
- anno.append("polygon")
- .attr("points", d => [[d.x, chartBottom+1], [d.x-5, chartBottom+6], [d.x+5, chartBottom+6]].join(" "))
- .style("stroke-width", 0)
- .style("fill", d => d.anno.iconColor)
- ;
- // Polygons didn't fire mouseevents
- anno.append("rect")
- .attr("x", d => d.x-5)
- .attr("width", 10)
- .attr("y", chartBottom+1)
- .attr("height", 5)
- .attr("class", "statusmap-annotation-tick")
- .attr("annoId", d => d.id)
- .style("opacity", 0)
- ;
-
- let $ticks = $heatmap.find(".statusmap-annotation-tick");
- $ticks.on("mouseenter", (event) => {
- annotationTooltip.mouseOverAnnotationTick = true;
- })
- .on("mouseleave", (event) => {
- annotationTooltip.mouseOverAnnotationTick = false;
- });
-
- }
-}
-
-function grafanaTimeFormat(ticks, min, max) {
- if (min && max && ticks) {
- let range = max - min;
- let secPerTick = (range/ticks) / 1000;
- let oneDay = 86400000;
- let oneYear = 31536000000;
-
- if (secPerTick <= 45) {
- return "%H:%M:%S";
- }
- if (secPerTick <= 7200 || range <= oneDay) {
- return "%H:%M";
- }
- if (secPerTick <= 80000) {
- return "%m/%d %H:%M";
- }
- if (secPerTick <= 2419200 || range <= oneYear) {
- return "%m/%d";
- }
- return "%Y-%m";
- }
-
- return "%H:%M";
-}
diff --git a/src/rendering.ts b/src/rendering.ts
new file mode 100644
index 0000000..03bf772
--- /dev/null
+++ b/src/rendering.ts
@@ -0,0 +1,812 @@
+import _ from 'lodash';
+import $ from 'jquery';
+import moment from 'moment';
+import kbn from 'app/core/utils/kbn';
+import {appEvents, contextSrv} from 'app/core/core';
+import {tickStep, getScaledDecimals, getFlotTickSize} from 'app/core/utils/ticks';
+import * as d3 from 'd3';
+import * as d3ScaleChromatic from './libs/d3-scale-chromatic/index';
+import {StatusmapTooltip} from './tooltip';
+import {AnnotationTooltip} from './annotations';
+
+let MIN_CARD_SIZE = 5,
+ CARD_H_SPACING = 2,
+ CARD_V_SPACING = 2,
+ CARD_ROUND = 0,
+ DATA_RANGE_WIDING_FACTOR = 1.2,
+ DEFAULT_X_TICK_SIZE_PX = 100,
+ DEFAULT_Y_TICK_SIZE_PX = 50,
+ X_AXIS_TICK_PADDING = 10,
+ Y_AXIS_TICK_PADDING = 5,
+ MIN_SELECTION_WIDTH = 2;
+
+export default function rendering(scope: any, elem: any, attrs: any, ctrl: any) {
+ return new StatusmapRenderer(scope, elem, attrs, ctrl);
+}
+
+export class StatusmapRenderer {
+ width: number = 0;
+ height: number = 0;
+ yScale: any;
+ xScale: any;
+ chartWidth: number = 0;
+ chartHeight: number = 0;
+ chartTop: number = 0;
+ chartBottom: number = 0;
+ yAxisWidth: number = 0;
+ xAxisHeight: number = 0;
+ cardVSpacing: number = 0;
+ cardHSpacing: number = 0;
+ cardRound: number = 0;
+ cardWidth: number = 0;
+ cardHeight: number = 0;
+ colorScale: any;
+ opacityScale: any;
+ mouseUpHandler: any;
+ xGridSize: number = 0;
+ yGridSize: number = 0;
+ data: any;
+ cardsData: any;
+ panel: any;
+ $heatmap: any;
+ tooltip: StatusmapTooltip;
+ annotationTooltip: AnnotationTooltip;
+ heatmap: any;
+ timeRange: any;
+
+ yOffset: number;
+ selection: any;
+ padding: any;
+ margin: any;
+ dataRangeWidingFactor: number = DATA_RANGE_WIDING_FACTOR;
+
+ constructor(private scope: any, private elem: any, attrs: any, private ctrl: any) {
+ // $heatmap is JQuery object, but heatmap is D3
+ this.$heatmap = this.elem.find('.status-heatmap-panel');
+ this.tooltip = new StatusmapTooltip(this.$heatmap, this.scope);
+ this.annotationTooltip = new AnnotationTooltip(this.$heatmap, this.scope);
+
+ this.yOffset = 0;
+
+ this.selection = {
+ active: false,
+ x1: -1,
+ x2: -1,
+ };
+
+ this.padding = { left: 0, right: 0, top: 0, bottom: 0 };
+ this.margin = { left: 25, right: 15, top: 10, bottom: 20 };
+
+ this.ctrl.events.on('render', this.onRender.bind(this));
+
+ this.ctrl.tickValueFormatter = this.tickValueFormatter.bind(this);
+
+ /////////////////////////////
+ // Selection and crosshair //
+ /////////////////////////////
+
+ // Shared crosshair and tooltip
+ appEvents.on('graph-hover', this.onGraphHover.bind(this), this.scope);
+
+ appEvents.on('graph-hover-clear', this.onGraphHoverClear.bind(this), this.scope);
+
+ // Register selection listeners
+ this.$heatmap.on('mousedown', this.onMouseDown.bind(this));
+ this.$heatmap.on('mousemove', this.onMouseMove.bind(this));
+ this.$heatmap.on('mouseleave', this.onMouseLeave.bind(this));
+ }
+
+ onGraphHoverClear() {
+ this.clearCrosshair();
+ }
+
+ onGraphHover(event: { pos: any }) {
+ this.drawSharedCrosshair(event.pos);
+ }
+
+ onRender() {
+ this.render();
+ this.ctrl.renderingCompleted();
+ }
+
+
+ setElementHeight() {
+ try {
+ var height = this.ctrl.height || this.panel.height || this.ctrl.row.height;
+ if (_.isString(height)) {
+ height = parseInt(height.replace('px', ''), 10);
+ }
+
+ height -= this.panel.legend.show ? 32 : 10; // bottom padding and space for legend. Change margin in .status-heatmap-color-legend !
+
+ this.$heatmap.css('height', height + 'px');
+
+ return true;
+ } catch (e) { // IE throws errors sometimes
+ return false;
+ }
+ }
+
+ getYAxisWidth(elem: any) {
+ const axisText = elem.selectAll(".axis-y text").nodes();
+ const maxTextWidth = _.max(_.map(axisText, text => {
+ // Use SVG getBBox method
+ return text.getBBox().width;
+ }));
+
+ return Math.ceil(maxTextWidth);
+ }
+
+ getXAxisHeight(elem: any) {
+ let axisLine = elem.select(".axis-x line");
+ if (!axisLine.empty()) {
+ let axisLinePosition = parseFloat(elem.select(".axis-x line").attr("y2"));
+ let canvasWidth = parseFloat(elem.attr("height"));
+ return canvasWidth - axisLinePosition;
+ } else {
+ // Default height
+ return 30;
+ }
+ }
+
+ addXAxis() {
+ // Scale timestamps to cards centers
+ this.scope.xScale = this.xScale = d3.scaleTime()
+ .domain([this.timeRange.from, this.timeRange.to])
+ .range([this.xGridSize/2, this.chartWidth-this.xGridSize/2]);
+
+ let ticks = this.chartWidth / DEFAULT_X_TICK_SIZE_PX;
+ let grafanaTimeFormatter = grafanaTimeFormat(ticks, this.timeRange.from, this.timeRange.to);
+ let timeFormat;
+ let dashboardTimeZone = this.ctrl.dashboard.getTimezone();
+ if (dashboardTimeZone === 'utc') {
+ timeFormat = d3.utcFormat(grafanaTimeFormatter);
+ } else {
+ timeFormat = d3.timeFormat(grafanaTimeFormatter);
+ }
+
+ let xAxis = d3
+ .axisBottom(this.xScale)
+ .ticks(ticks)
+ .tickFormat(timeFormat)
+ .tickPadding(X_AXIS_TICK_PADDING)
+ .tickSize(this.chartHeight);
+
+ let posY = this.chartTop; // this.margin.top !
+ let posX = this.yAxisWidth;
+
+ this.heatmap.append("g")
+ .attr("class", "axis axis-x")
+ .attr("transform", "translate(" + posX + "," + posY + ")")
+ .call(xAxis);
+
+ // Remove horizontal line in the top of axis labels (called domain in d3)
+ this.heatmap
+ .select(".axis-x")
+ .select(".domain")
+ .remove();
+ }
+
+ // divide chart height by ticks for cards drawing
+ getYScale(ticks) {
+ let range:any[] = [];
+ let step = this.chartHeight / ticks.length;
+ // svg has y=0 on the top, so top card should have a minimal value in range
+ range.push(step);
+ for (let i = 1; i < ticks.length; i++) {
+ range.push(step * (i+1));
+ }
+ return d3.scaleOrdinal()
+ .domain(ticks)
+ .range(range);
+ }
+
+ // divide chart height by ticks with offset for ticks drawing
+ getYAxisScale(ticks) {
+ let range:any[] = [];
+ let step = this.chartHeight / ticks.length;
+ // svg has y=0 on the top, so top tick should have a minimal value in range
+ range.push(this.yOffset);
+ for (let i = 1; i < ticks.length; i++) {
+ range.push(step * i + this.yOffset);
+ }
+ return d3.scaleOrdinal()
+ .domain(ticks)
+ .range(range);
+ }
+
+ addYAxis() {
+ let ticks = _.uniq(_.map(this.data, d => d.target));
+
+ // Set default Y min and max if no data
+ if (_.isEmpty(this.data)) {
+ ticks = [''];
+ }
+
+ if (this.panel.yAxisSort == 'a → z') {
+ ticks.sort((a, b) => a.localeCompare(b, 'en', {ignorePunctuation: false, numeric: true}));
+ } else if (this.panel.yAxisSort == 'z → a') {
+ ticks.sort((b, a) => a.localeCompare(b, 'en', {ignorePunctuation: false, numeric: true}));
+ }
+
+ let yAxisScale = this.getYAxisScale(ticks);
+ this.scope.yScale = this.yScale = this.getYScale(ticks);
+
+ let yAxis = d3
+ .axisLeft(yAxisScale)
+ .tickValues(ticks)
+ .tickSizeInner(0 - this.width)
+ .tickPadding(Y_AXIS_TICK_PADDING);
+
+ this.heatmap
+ .append("g")
+ .attr("class", "axis axis-y")
+ .call(yAxis);
+
+ // Calculate Y axis width first, then move axis into visible area
+ let posY = this.margin.top;
+ let posX = this.getYAxisWidth(this.heatmap) + Y_AXIS_TICK_PADDING;
+ this.heatmap.select(".axis-y").attr("transform", "translate(" + posX + "," + posY + ")");
+
+ // Remove vertical line in the right of axis labels (called domain in d3)
+ this.heatmap.select(".axis-y").select(".domain").remove();
+ this.heatmap.select(".axis-y").selectAll(".tick line").remove();
+ }
+
+ // Wide Y values range and adjust to bucket size
+ wideYAxisRange(min, max, tickInterval) {
+ let y_widing = (max * (this.dataRangeWidingFactor - 1) - min * (this.dataRangeWidingFactor - 1)) / 2;
+ let y_min, y_max;
+
+ if (tickInterval === 0) {
+ y_max = max * this.dataRangeWidingFactor;
+ y_min = min - min * (this.dataRangeWidingFactor - 1);
+ tickInterval = (y_max - y_min) / 2;
+ } else {
+ y_max = Math.ceil((max + y_widing) / tickInterval) * tickInterval;
+ y_min = Math.floor((min - y_widing) / tickInterval) * tickInterval;
+ }
+
+ // Don't wide axis below 0 if all values are positive
+ if (min >= 0 && y_min < 0) {
+ y_min = 0;
+ }
+
+ return {y_min, y_max};
+ }
+
+ tickValueFormatter(decimals, scaledDecimals = null) {
+ let format = this.panel.yAxis.format;
+ return function(value) {
+ return kbn.valueFormats[format](value, decimals, scaledDecimals);
+ };
+ }
+
+ // Create svg element, add axes and
+ // calculate sizes for cards drawing
+ addHeatmapCanvas() {
+ let heatmap_elem = this.$heatmap[0];
+
+ this.width = Math.floor(this.$heatmap.width()) - this.padding.right;
+ this.height = Math.floor(this.$heatmap.height()) - this.padding.bottom;
+
+ if (this.heatmap) {
+ this.heatmap.remove();
+ }
+
+ this.heatmap = d3.select(heatmap_elem)
+ .append("svg")
+ .attr("width", this.width)
+ .attr("height", this.height);
+
+ this.chartHeight = this.height - this.margin.top - this.margin.bottom;
+ this.chartTop = this.margin.top;
+ this.chartBottom = this.chartTop + this.chartHeight;
+
+ this.cardHSpacing = this.panel.cards.cardHSpacing !== null ? this.panel.cards.cardHSpacing : CARD_H_SPACING;
+ this.cardVSpacing = this.panel.cards.cardVSpacing !== null ? this.panel.cards.cardVSpacing : CARD_V_SPACING;
+ this.cardRound = this.panel.cards.cardRound !== null ? this.panel.cards.cardRound : CARD_ROUND;
+
+ // calculate yOffset for YAxis
+ this.yGridSize = Math.floor(this.chartHeight / this.cardsData.yBucketSize);
+ this.cardHeight = this.yGridSize ? this.yGridSize - this.cardVSpacing : 0;
+ this.yOffset = this.cardHeight / 2;
+
+ this.addYAxis();
+
+ this.yAxisWidth = this.getYAxisWidth(this.heatmap) + Y_AXIS_TICK_PADDING;
+ this.chartWidth = this.width - this.yAxisWidth - this.margin.right;
+
+ // TODO allow per-y cardWidth!
+ // we need to fill chartWidth with xBucketSize cards.
+ this.xGridSize = this.chartWidth / (this.cardsData.xBucketSize+1);
+ this.cardWidth = this.xGridSize - this.cardHSpacing;
+
+ this.addXAxis();
+ this.xAxisHeight = this.getXAxisHeight(this.heatmap);
+
+ if (!this.panel.yAxis.show) {
+ this.heatmap.select(".axis-y").selectAll("line").style("opacity", 0);
+ }
+
+ if (!this.panel.xAxis.show) {
+ this.heatmap.select(".axis-x").selectAll("line").style("opacity", 0);
+ }
+ }
+
+ addHeatmap() {
+ this.addHeatmapCanvas();
+
+ let maxValue = this.panel.color.max || this.cardsData.maxValue;
+ let minValue = this.panel.color.min || this.cardsData.minValue;
+
+ if (this.panel.color.mode !== 'discrete') {
+ this.colorScale = this.getColorScale(maxValue, minValue);
+ }
+ this.setOpacityScale(maxValue);
+
+ let cards = this.heatmap.selectAll(".status-heatmap-card").data(this.cardsData.cards);
+ cards.append("title");
+ cards = cards.enter().append("rect")
+ .attr("cardId", c => c.id)
+ .attr("x", this.getCardX.bind(this))
+ .attr("width", this.getCardWidth.bind(this))
+ .attr("y", this.getCardY.bind(this))
+ .attr("height", this.getCardHeight.bind(this))
+ .attr("rx", this.cardRound)
+ .attr("ry", this.cardRound)
+ .attr("class", "bordered status-heatmap-card")
+ .style("fill", this.getCardColor.bind(this))
+ .style("stroke", this.getCardColor.bind(this))
+ .style("stroke-width", 0)
+ //.style("stroke-width", getCardStrokeWidth)
+ //.style("stroke-dasharray", "3,3")
+ .style("opacity", this.getCardOpacity.bind(this));
+
+ let $cards = this.$heatmap.find(".status-heatmap-card");
+ $cards
+ .on("mouseenter", (event) => {
+ this.tooltip.mouseOverBucket = true;
+ this.highlightCard(event);
+ })
+ .on("mouseleave", (event) => {
+ this.tooltip.mouseOverBucket = false;
+ this.resetCardHighLight(event);
+ });
+
+ this._renderAnnotations();
+
+ this.ctrl.events.emit('render-complete', {
+ "chartWidth": this.chartWidth
+ });
+ }
+
+ highlightCard(event) {
+ const color = d3.select(event.target).style("fill");
+ const highlightColor = d3.color(color).darker(2);
+ const strokeColor = d3.color(color).brighter(4);
+ const current_card = d3.select(event.target);
+ this.tooltip.originalFillColor = color;
+ current_card
+ .style("fill", highlightColor.toString())
+ .style("stroke", strokeColor.toString())
+ .style("stroke-width", 1);
+ }
+
+ resetCardHighLight(event) {
+ d3.select(event.target)
+ .style("fill", this.tooltip.originalFillColor)
+ .style("stroke", this.tooltip.originalFillColor)
+ .style("stroke-width", 0);
+ }
+
+ getColorScale(maxValue, minValue = 0) {
+ let colorScheme = _.find(this.ctrl.colorSchemes, {value: this.panel.color.colorScheme});
+ // if (!colorScheme) {
+ //
+ // }
+ let colorInterpolator = d3ScaleChromatic[colorScheme.value];
+ let colorScaleInverted = colorScheme.invert === 'always' ||
+ (colorScheme.invert === 'dark' && !contextSrv.user.lightTheme);
+
+ if (maxValue == minValue)
+ maxValue = minValue + 1;
+
+ let start = colorScaleInverted ? maxValue : minValue;
+ let end = colorScaleInverted ? minValue : maxValue;
+
+ return d3.scaleSequential(colorInterpolator).domain([start, end]);
+ }
+
+ setOpacityScale(maxValue) {
+ if (this.panel.color.colorScale === 'linear') {
+ this.opacityScale = d3.scaleLinear()
+ .domain([0, maxValue])
+ .range([0, 1]);
+ } else if (this.panel.color.colorScale === 'sqrt') {
+ this.opacityScale = d3.scalePow().exponent(this.panel.color.exponent)
+ .domain([0, maxValue])
+ .range([0, 1]);
+ }
+ }
+
+ getCardX(d) {
+ let x;
+ // cx is the center of the card. Card should be placed to the left.
+ let cx = this.xScale(d.x);
+
+ if (cx - this.cardWidth/2 < 0) {
+ x = this.yAxisWidth + this.cardHSpacing/2;
+ } else {
+ x = this.yAxisWidth + cx - this.cardWidth/2;
+ }
+
+ return x;
+ }
+
+ // xScale returns card center. Adjust cardWidth in case of overlaping.
+ getCardWidth(d) {
+ let w;
+ let cx = this.xScale(d.x);
+
+ if (cx < this.cardWidth/2) {
+ // Center should not exceed half of card.
+ // Cut card to the left to prevent overlay of y axis.
+ let cutted_width = (cx - this.cardHSpacing/2) + this.cardWidth/2;
+ w = cutted_width > 0 ? cutted_width : 0;
+ } else if (this.chartWidth - cx < this.cardWidth/2) {
+ // Cut card to the right to prevent overlay of right graph edge.
+ w = this.cardWidth/2 + (this.chartWidth - cx - this.cardHSpacing/2);
+ } else {
+ w = this.cardWidth;
+ }
+
+ // Card width should be MIN_CARD_SIZE at least
+ w = Math.max(w, MIN_CARD_SIZE);
+
+ if (this.cardHSpacing == 0) {
+ w = w+1;
+ }
+
+ return w;
+ }
+
+ getCardY(d) {
+ return this.yScale(d.y) + this.chartTop - this.cardHeight - this.cardVSpacing/2;
+ }
+
+ getCardHeight(d) {
+ let ys = this.yScale(d.y);
+ let y = ys + this.chartTop - this.cardHeight - this.cardVSpacing/2;
+ let h = this.cardHeight;
+
+ // Cut card height to prevent overlay
+ if (y < this.chartTop) {
+ h = ys - this.cardVSpacing/2;
+ } else if (ys > this.chartBottom) {
+ h = this.chartBottom - y;
+ } else if (y + this.cardHeight > this.chartBottom) {
+ h = this.chartBottom - y;
+ }
+
+ // Height can't be more than chart height
+ h = Math.min(h, this.chartHeight);
+ // Card height should be MIN_CARD_SIZE at least
+ h = Math.max(h, MIN_CARD_SIZE);
+
+ if (this.cardVSpacing == 0) {
+ h = h+1
+ }
+
+ return h;
+ }
+
+ getCardColor(d) {
+ if (this.panel.color.mode === 'opacity') {
+ return this.panel.color.cardColor;
+ } else if (this.panel.color.mode === 'spectrum') {
+ return this.colorScale(d.value);
+ } else if (this.panel.color.mode === 'discrete') {
+ return this.ctrl.discreteHelper.getBucketColor(d.values);
+ }
+ }
+
+ getCardOpacity(d) {
+ if (this.panel.nullPointMode === 'as empty' && d.value == null ) {
+ return 0;
+ }
+ if (this.panel.color.mode === 'opacity') {
+ return this.opacityScale(d.value);
+ } else {
+ return 1;
+ }
+ }
+
+ getCardStrokeWidth(d) {
+ if (this.panel.color.mode === 'discrete') {
+ return '1';
+ }
+ return '0';
+ }
+
+
+ /////////////////////////////
+ // Selection and crosshair //
+ /////////////////////////////
+
+ getEventOffset(event) {
+ const elemOffset = this.$heatmap.offset();
+ const x = Math.floor(event.clientX - elemOffset.left);
+ const y = Math.floor(event.clientY - elemOffset.top);
+ return { x, y };
+ }
+
+ onMouseDown(event) {
+ const offset = this.getEventOffset(event);
+ this.selection.active = true;
+ this.selection.x1 = offset.x;
+
+ this.mouseUpHandler = () => {
+ this.onMouseUp();
+ };
+
+ $(document).one("mouseup", this.mouseUpHandler.bind(this));
+ }
+
+ onMouseUp() {
+ $(document).unbind("mouseup", this.mouseUpHandler.bind(this));
+ this.mouseUpHandler = null;
+ this.selection.active = false;
+
+ let selectionRange = Math.abs(this.selection.x2 - this.selection.x1);
+ if (this.selection.x2 >= 0 && selectionRange > MIN_SELECTION_WIDTH) {
+ let timeFrom = this.xScale.invert(Math.min(this.selection.x1, this.selection.x2) - this.yAxisWidth - this.xGridSize/2);
+ let timeTo = this.xScale.invert(Math.max(this.selection.x1, this.selection.x2) - this.yAxisWidth - this.xGridSize/2);
+
+ this.ctrl.timeSrv.setTime({
+ from: moment.utc(timeFrom),
+ to: moment.utc(timeTo)
+ });
+ }
+
+ this.clearSelection();
+ }
+
+ onMouseLeave() {
+ appEvents.emit('graph-hover-clear');
+ this.clearCrosshair();
+ //annotationTooltip.destroy();
+ }
+
+ onMouseMove(event) {
+ if (!this.heatmap) { return; }
+
+ const offset = this.getEventOffset(event);
+ if (this.selection.active) {
+ // Clear crosshair and tooltip
+ this.clearCrosshair();
+ this.tooltip.destroy();
+ this.annotationTooltip.destroy();
+
+ this.selection.x2 = this.limitSelection(event.offsetX);
+ this.drawSelection(this.selection.x1, this.selection.x2);
+ } else {
+ //const pos = this.getEventPos(event, offset);
+ this.emitGraphHoverEvent(event);
+ this.drawCrosshair(offset.x);
+ this.tooltip.show(event); //, data); // pos, this.data
+ this.annotationTooltip.show(event);
+ }
+ }
+
+ getEventPos(event, offset) {
+ const x = this.xScale.invert(offset.x - this.yAxisWidth).valueOf();
+ const y = this.yScale.invert(offset.y - this.chartTop);
+ const pos = {
+ pageX: event.pageX,
+ pageY: event.pageY,
+ x: x,
+ x1: x,
+ y: y,
+ y1: y,
+ panelRelY: null,
+ offset,
+ };
+
+ return pos;
+ }
+
+ emitGraphHoverEvent(event) {
+ let x = this.xScale.invert(event.offsetX - this.yAxisWidth - this.xGridSize/2).valueOf();
+ let y = this.yScale(event.offsetY);
+ let pos = {
+ pageX: event.pageX,
+ pageY: event.pageY,
+ x: x, x1: x,
+ y: y, y1: y,
+ panelRelY: 0
+ };
+
+ // Set minimum offset to prevent showing legend from another panel
+ pos.panelRelY = Math.max(event.offsetY / this.height, 0.001);
+
+ // broadcast to other graph panels that we are hovering
+ appEvents.emit('graph-hover', {pos: pos, panel: this.panel});
+ }
+
+ limitSelection(x2) {
+ x2 = Math.max(x2, this.yAxisWidth);
+ x2 = Math.min(x2, this.chartWidth + this.yAxisWidth);
+ return x2;
+ }
+
+ drawSelection(posX1, posX2) {
+ if (this.heatmap) {
+ this.heatmap.selectAll(".status-heatmap-selection").remove();
+ let selectionX = Math.min(posX1, posX2);
+ let selectionWidth = Math.abs(posX1 - posX2);
+
+ if (selectionWidth > MIN_SELECTION_WIDTH) {
+ this.heatmap.append("rect")
+ .attr("class", "status-heatmap-selection")
+ .attr("x", selectionX)
+ .attr("width", selectionWidth)
+ .attr("y", this.chartTop)
+ .attr("height", this.chartHeight);
+ }
+ }
+ }
+
+ clearSelection() {
+ this.selection.x1 = -1;
+ this.selection.x2 = -1;
+
+ if (this.heatmap) {
+ this.heatmap.selectAll(".status-heatmap-selection").remove();
+ }
+ }
+
+
+ drawCrosshair(position) {
+ if (this.heatmap) {
+ this.heatmap.selectAll(".status-heatmap-crosshair").remove();
+
+ let posX = position;
+ posX = Math.max(posX, this.yAxisWidth);
+ posX = Math.min(posX, this.chartWidth + this.yAxisWidth);
+
+ this.heatmap.append("g")
+ .attr("class", "status-heatmap-crosshair")
+ .attr("transform", "translate(" + posX + ",0)")
+ .append("line")
+ .attr("x1", 1)
+ .attr("y1", this.chartTop)
+ .attr("x2", 1)
+ .attr("y2", this.chartBottom)
+ .attr("stroke-width", 1);
+ }
+ }
+
+ // map time to X
+ drawSharedCrosshair(pos) {
+ if (this.heatmap && this.ctrl.dashboard.graphTooltip !== 0) {
+ const posX = this.xScale(pos.x) + this.yAxisWidth;
+ this.drawCrosshair(posX);
+ }
+ }
+
+ clearCrosshair() {
+ if (this.heatmap) {
+ this.heatmap.selectAll(".status-heatmap-crosshair").remove();
+ }
+ }
+
+
+ render() {
+ this.data = this.ctrl.data;
+ this.panel = this.ctrl.panel;
+ this.timeRange = this.ctrl.range;
+ this.cardsData = this.ctrl.cardsData;
+
+ if (!this.data || !this.cardsData || !this.setElementHeight()) {
+ return;
+ }
+
+ // Draw default axes and return if no data
+ if (_.isEmpty(this.cardsData.cards)) {
+ this.addHeatmapCanvas();
+ return;
+ }
+
+ this.addHeatmap();
+ this.scope.yAxisWidth = this.yAxisWidth;
+ this.scope.xAxisHeight = this.xAxisHeight;
+ this.scope.chartHeight = this.chartHeight;
+ this.scope.chartWidth = this.chartWidth;
+ this.scope.chartTop = this.chartTop;
+ }
+
+ _renderAnnotations() {
+ if (!this.ctrl.annotations || this.ctrl.annotations.length == 0) {
+ return;
+ }
+
+ if (!this.heatmap) {
+ return;
+ }
+
+
+
+ let annoData = _.map(this.ctrl.annotations, (d,i) => ({"x": Math.floor(this.yAxisWidth + this.xScale(d.time)), "id":i, "anno": d.source}));
+
+ //console.log({"ctrl_annotations": this.ctrl.annotations, "annoData": annoData});
+
+ let anno = this.heatmap
+ .append("g")
+ .attr("class", "statusmap-annotations")
+ .attr("transform", "translate(0.5,0)")
+ .selectAll(".statusmap-annotations")
+ .data(annoData)
+ .enter().append("g")
+ ;
+ anno.append("line")
+ //.attr("class", "statusmap-annotation-tick")
+ .attr("x1", d => d.x)
+ .attr("y1", this.chartTop)
+ .attr("x2", d => d.x)
+ .attr("y2", this.chartBottom)
+ .style("stroke", d => d.anno.iconColor)
+ .style("stroke-width", 1)
+ .style("stroke-dasharray", "3,3")
+ ;
+ anno.append("polygon")
+ .attr("points", d => [[d.x, this.chartBottom+1], [d.x-5, this.chartBottom+6], [d.x+5, this.chartBottom+6]].join(" "))
+ .style("stroke-width", 0)
+ .style("fill", d => d.anno.iconColor)
+ ;
+ // Polygons didn't fire mouseevents
+ anno.append("rect")
+ .attr("x", d => d.x-5)
+ .attr("width", 10)
+ .attr("y", this.chartBottom+1)
+ .attr("height", 5)
+ .attr("class", "statusmap-annotation-tick")
+ .attr("annoId", d => d.id)
+ .style("opacity", 0)
+ ;
+
+ let $ticks = this.$heatmap.find(".statusmap-annotation-tick");
+ $ticks
+ .on("mouseenter", (event) => {
+ this.annotationTooltip.mouseOverAnnotationTick = true;
+ })
+ .on("mouseleave", (event) => {
+ this.annotationTooltip.mouseOverAnnotationTick = false;
+ });
+ }
+}
+
+function grafanaTimeFormat(ticks, min, max) {
+ if (min && max && ticks) {
+ let range = max - min;
+ let secPerTick = (range/ticks) / 1000;
+ let oneDay = 86400000;
+ let oneYear = 31536000000;
+
+ if (secPerTick <= 45) {
+ return "%H:%M:%S";
+ }
+ if (secPerTick <= 7200 || range <= oneDay) {
+ return "%H:%M";
+ }
+ if (secPerTick <= 80000) {
+ return "%m/%d %H:%M";
+ }
+ if (secPerTick <= 2419200 || range <= oneYear) {
+ return "%m/%d";
+ }
+ return "%Y-%m";
+ }
+
+ return "%H:%M";
+}
diff --git a/src/statusmap_data.ts b/src/statusmap_data.ts
new file mode 100644
index 0000000..3560151
--- /dev/null
+++ b/src/statusmap_data.ts
@@ -0,0 +1,45 @@
+
+
+// A holder of values
+class Card {
+ // uniq
+ id: number = 0;
+ // Array of values in this bucket
+ values: any[] = [];
+ // card has multiple values
+ multipleValues: boolean = false;
+ // card has values that has no color
+ noColorDefined: boolean = false;
+ //
+ y: string = "";
+ //
+ x: number = 0;
+ //
+ minValue: number = 0;
+ maxValue: number = 0;
+ value: number = 0;
+
+ constructor() {
+
+ }
+ }
+
+class CardsStorage {
+ cards: Card[] = [];
+ xBucketSize: number = 0;
+ yBucketSize: number = 0;
+ maxValue: number;
+ minValue: number;
+ multipleValues: boolean = false;
+ noColorDefined: boolean = false;
+ targets: string[] = [];
+ targetIndex: any;
+
+ constructor() {
+ this.maxValue = 0;
+ this.minValue = 0;
+
+ }
+ }
+
+export {CardsStorage, Card};
\ No newline at end of file
diff --git a/src/tooltip.js b/src/tooltip.ts
similarity index 94%
rename from src/tooltip.js
rename to src/tooltip.ts
index fa13883..8b131e0 100644
--- a/src/tooltip.js
+++ b/src/tooltip.ts
@@ -1,12 +1,21 @@
import d3 from 'd3';
import $ from 'jquery';
import _ from 'lodash';
-import kbn from 'app/core/utils/kbn';
+import {StatusHeatmapCtrl} from "./status_heatmap_ctrl";
let TOOLTIP_PADDING_X = 30;
let TOOLTIP_PADDING_Y = 5;
-export class StatusHeatmapTooltip {
+export class StatusmapTooltip {
+ tooltip: any;
+ scope: any;
+ dashboard: any;
+ panelCtrl: StatusHeatmapCtrl;
+ panel: any;
+ heatmapPanel: any;
+ mouseOverBucket: any;
+ originalFillColor: any;
+
constructor(elem, scope) {
this.scope = scope;
this.dashboard = scope.ctrl.dashboard;
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..f4cefe2
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,55 @@
+{
+ "compileOnSave": false,
+ "compilerOptions": {
+ "moduleResolution": "node",
+ "outDir": "dist",
+ "target": "es5",
+ "lib": ["es6", "dom"],
+ "rootDir": ".",
+ "module": "esnext",
+ "allowJs": true,
+ // Don't emit; allow Babel to transform files.
+ "noEmit": true,
+ // Enable strictest settings like strictNullChecks & noImplicitAny.
+ "strict": true,
+ // Disallow features that require cross-file information for emit.
+ "isolatedModules": true,
+ "declaration": false,
+ "allowSyntheticDefaultImports": true,
+ // Import non-ES modules as default imports.
+ "esModuleInterop": true,
+ "forceConsistentCasingInFileNames": true,
+ "importHelpers": true,
+ "noEmitHelpers": true,
+ "removeComments": false,
+ "inlineSourceMap": false,
+ "sourceMap": true,
+ "emitDecoratorMetadata": false,
+ "experimentalDecorators": true,
+ "strictNullChecks": false,
+ "noImplicitReturns": true,
+ "noImplicitThis": true,
+ "noImplicitUseStrict": false,
+ "noImplicitAny": true,
+ "noEmitOnError": false,
+ "downlevelIteration": true,
+ "noUnusedLocals": true,
+ "pretty": true,
+ "typeRoots": ["./node_modules/@types"] //,/* ,"src/types"*/
+ //"types": [
+ // "lodash"
+ //]
+ ,
+ "baseUrl": ".",
+ "paths": {
+ "app/*": ["./node_modules/@types/grafana/app/*"]
+ }
+ },
+ "include": [
+ "src/**/*.ts"
+ ],
+ "exclude": [
+ "node_modules",
+ "**/*.spec.ts"
+ ]
+}