From b06c5dffc0215221816cc3a7b6c64f9fceab939d Mon Sep 17 00:00:00 2001 From: Ivan Mikheykin Date: Wed, 26 Jun 2019 16:52:55 +0300 Subject: [PATCH] feat: migrate to typescript, support 6.3.0+ - use babel to 7, update dependencies, fix #72 - proper babel build to support ngInject, fix #78 - proper buckets display in 6.3.0+, fix #76 - rename js to ts, build d3 lib as js, build src as ts --- Gruntfile.js | 23 +- dist/annotations.js | 96 +- dist/annotations.js.map | 2 +- dist/color_legend.js | 118 +- dist/color_legend.js.map | 2 +- dist/color_mode_discrete.js | 193 +- dist/color_mode_discrete.js.map | 2 +- .../categorical/Accent.js.map | 2 +- .../categorical/Dark2.js.map | 2 +- .../categorical/Paired.js.map | 2 +- .../categorical/Pastel1.js.map | 2 +- .../categorical/Pastel2.js.map | 2 +- .../categorical/Set1.js.map | 2 +- .../categorical/Set2.js.map | 2 +- .../categorical/Set3.js.map | 2 +- dist/libs/d3-scale-chromatic/colors.js | 5 +- dist/libs/d3-scale-chromatic/colors.js.map | 2 +- .../libs/d3-scale-chromatic/diverging/BrBG.js | 2 - .../d3-scale-chromatic/diverging/BrBG.js.map | 2 +- .../d3-scale-chromatic/diverging/GnYlRd.js | 2 - .../diverging/GnYlRd.js.map | 2 +- .../libs/d3-scale-chromatic/diverging/PRGn.js | 2 - .../d3-scale-chromatic/diverging/PRGn.js.map | 2 +- .../libs/d3-scale-chromatic/diverging/PiYG.js | 2 - .../d3-scale-chromatic/diverging/PiYG.js.map | 2 +- .../libs/d3-scale-chromatic/diverging/PuOr.js | 2 - .../d3-scale-chromatic/diverging/PuOr.js.map | 2 +- .../libs/d3-scale-chromatic/diverging/RdBu.js | 2 - .../d3-scale-chromatic/diverging/RdBu.js.map | 2 +- .../libs/d3-scale-chromatic/diverging/RdGy.js | 2 - .../d3-scale-chromatic/diverging/RdGy.js.map | 2 +- .../d3-scale-chromatic/diverging/RdYlBu.js | 2 - .../diverging/RdYlBu.js.map | 2 +- .../d3-scale-chromatic/diverging/RdYlGn.js | 2 - .../diverging/RdYlGn.js.map | 2 +- .../d3-scale-chromatic/diverging/Spectral.js | 2 - .../diverging/Spectral.js.map | 2 +- dist/libs/d3-scale-chromatic/index.js | 292 +- dist/libs/d3-scale-chromatic/index.js.map | 2 +- dist/libs/d3-scale-chromatic/ramp.js | 6 +- dist/libs/d3-scale-chromatic/ramp.js.map | 2 +- .../sequential-multi/BuGn.js | 2 - .../sequential-multi/BuGn.js.map | 2 +- .../sequential-multi/BuPu.js | 2 - .../sequential-multi/BuPu.js.map | 2 +- .../sequential-multi/GnBu.js | 2 - .../sequential-multi/GnBu.js.map | 2 +- .../sequential-multi/OrRd.js | 2 - .../sequential-multi/OrRd.js.map | 2 +- .../sequential-multi/PuBu.js | 2 - .../sequential-multi/PuBu.js.map | 2 +- .../sequential-multi/PuBuGn.js | 2 - .../sequential-multi/PuBuGn.js.map | 2 +- .../sequential-multi/PuRd.js | 2 - .../sequential-multi/PuRd.js.map | 2 +- .../sequential-multi/RdPu.js | 2 - .../sequential-multi/RdPu.js.map | 2 +- .../sequential-multi/YlGn.js | 2 - .../sequential-multi/YlGn.js.map | 2 +- .../sequential-multi/YlGnBu.js | 2 - .../sequential-multi/YlGnBu.js.map | 2 +- .../sequential-multi/YlOrBr.js | 2 - .../sequential-multi/YlOrBr.js.map | 2 +- .../sequential-multi/YlOrRd.js | 2 - .../sequential-multi/YlOrRd.js.map | 2 +- .../sequential-single/Blues.js | 2 - .../sequential-single/Blues.js.map | 2 +- .../sequential-single/Greens.js | 2 - .../sequential-single/Greens.js.map | 2 +- .../sequential-single/Greys.js | 2 - .../sequential-single/Greys.js.map | 2 +- .../sequential-single/Oranges.js | 2 - .../sequential-single/Oranges.js.map | 2 +- .../sequential-single/Purples.js | 2 - .../sequential-single/Purples.js.map | 2 +- .../sequential-single/Reds.js | 2 - .../sequential-single/Reds.js.map | 2 +- dist/module.js | 636 +- dist/module.js.map | 2 +- dist/options_editor.js | 53 +- dist/options_editor.js.map | 2 +- dist/rendering.js | 1450 +-- dist/rendering.js.map | 2 +- dist/status_heatmap_ctrl.js | 463 - dist/status_heatmap_ctrl.js.map | 1 - dist/statusmap_data.js | 72 + dist/statusmap_data.js.map | 1 + dist/tooltip.js | 128 +- dist/tooltip.js.map | 2 +- package-lock.json | 8479 +++++++++++++++++ package.json | 47 +- src/{annotations.js => annotations.ts} | 12 +- src/{color_legend.js => color_legend.ts} | 22 +- ...ode_discrete.js => color_mode_discrete.ts} | 30 +- src/module.js | 11 - src/{status_heatmap_ctrl.js => module.ts} | 307 +- src/{options_editor.js => options_editor.ts} | 4 + src/rendering.js | 728 -- src/rendering.ts | 812 ++ src/statusmap_data.ts | 45 + src/{tooltip.js => tooltip.ts} | 13 +- tsconfig.json | 55 + 102 files changed, 11679 insertions(+), 2571 deletions(-) delete mode 100644 dist/status_heatmap_ctrl.js delete mode 100644 dist/status_heatmap_ctrl.js.map create mode 100644 dist/statusmap_data.js create mode 100644 dist/statusmap_data.js.map create mode 100644 package-lock.json rename src/{annotations.js => annotations.ts} (95%) rename src/{color_legend.js => color_legend.ts} (96%) rename src/{color_mode_discrete.js => color_mode_discrete.ts} (91%) delete mode 100644 src/module.js rename src/{status_heatmap_ctrl.js => module.ts} (67%) rename src/{options_editor.js => options_editor.ts} (92%) delete mode 100644 src/rendering.js create mode 100644 src/rendering.ts create mode 100644 src/statusmap_data.ts rename src/{tooltip.js => tooltip.ts} (94%) create mode 100644 tsconfig.json 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 ' + annoTitle + '\n ' + annoTime + '
\n
\n
' + annoText + '
\n ' + _.join(_.map(annoTags, function (t) { - return '' + t.text + ''; - }), "") + '\n
\n
'; - + var tooltipHtml = "
\n ".concat(annoTitle, "\n ").concat(annoTime, "
\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 ${annoTitle}\n ${annoTime}
\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 ${annoTitle}\n ${annoTime}
\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":";;;;;;;AAsBe,WAASA,IAAT,CAAcC,KAAd,EAAqBC,IAArB,EAA2BC,KAA3B,EAAkCC,IAAlC,EAAwC;AACrD,QAAIC,aAAJ;AAAA,QAAUC,kBAAV;AAAA,QAAqBC,kBAArB;AAAA,QAAgCC,cAAhC;AAAA,QAAuCC,gBAAvC;;AAEA;AACA,QAAIC,WAAWR,KAAKS,IAAL,CAAU,uBAAV,CAAf;AACA,QAAIC,UAAU,IAAIC,oBAAJ,CAAyBH,QAAzB,EAAmCT,KAAnC,CAAd;AACA,QAAIa,oBAAoB,IAAIC,iBAAJ,CAAsBL,QAAtB,EAAgCT,KAAhC,CAAxB;;AAEA,QAAIe,cAAJ;AAAA,QAAWC,eAAX;AAAA,QACIC,eADJ;AAAA,QACYC,eADZ;AAAA,QAEIC,mBAFJ;AAAA,QAEgBC,oBAFhB;AAAA,QAGIC,iBAHJ;AAAA,QAGcC,oBAHd;AAAA,QAIIC,mBAJJ;AAAA,QAIgBC,oBAJhB;AAAA,QAKIC,qBALJ;AAAA,QAKkBC,qBALlB;AAAA,QAKgCC,kBALhC;AAAA,QAMIC,kBANJ;AAAA,QAMeC,mBANf;AAAA,QAOIC,mBAPJ;AAAA,QAOgBC,qBAPhB;AAAA,QAQIC,uBARJ;AAAA,QASIC,kBATJ;AAAA,QASeC,kBATf;;AAWA,QAAIC,UAAU,CAAd;;AAEA,QAAIC,YAAY;AACdC,cAAQ,KADM;AAEdC,UAAI,CAAC,CAFS;AAGdC,UAAI,CAAC;AAHS,KAAhB;;AAMA,QAAIC,UAAU,EAACC,MAAM,CAAP,EAAUC,OAAO,CAAjB,EAAoBC,KAAK,CAAzB,EAA4BC,QAAQ,CAApC,EAAd;AAAA,QACIC,SAAS,EAACJ,MAAM,EAAP,EAAWC,OAAO,EAAlB,EAAsBC,KAAK,EAA3B,EAA+BC,QAAQ,EAAvC,EADb;AAAA,QAEIE,wBAAwBC,wBAF5B;;AAIA5C,SAAK6C,MAAL,CAAYC,EAAZ,CAAe,QAAf,EAAyB,YAAM;AAC7BC;AACD,KAFD;;AAIA,aAASC,gBAAT,GAA4B;AAC1B,UAAI;AACF,YAAInC,SAASb,KAAKa,MAAL,IAAeT,MAAMS,MAArB,IAA+Bb,KAAKiD,GAAL,CAASpC,MAArD;AACA,YAAIqC,EAAEC,QAAF,CAAWtC,MAAX,CAAJ,EAAwB;AACtBA,mBAASuC,SAASvC,OAAOwC,OAAP,CAAe,IAAf,EAAqB,EAArB,CAAT,EAAmC,EAAnC,CAAT;AACD;;AAEDxC,kBAAUT,MAAMkD,MAAN,CAAaC,IAAb,GAAoB,EAApB,GAAyB,EAAnC,CANE,CAMqC;;AAEvCjD,iBAASkD,GAAT,CAAa,QAAb,EAAuB3C,SAAS,IAAhC;;AAEA,eAAO,IAAP;AACD,OAXD,CAWE,OAAO4C,CAAP,EAAU;AAAE;AACZ,eAAO,KAAP;AACD;AACF;;AAED,aAASC,aAAT,CAAuB5D,IAAvB,EAA6B;AAC3B,UAAI6D,YAAY7D,KAAK8D,SAAL,CAAe,cAAf,EAA+BC,KAA/B,EAAhB;AACA,UAAIC,iBAAiBZ,EAAEa,GAAF,CAAMb,EAAEc,GAAF,CAAML,SAAN,EAAiB,gBAAQ;AAClD;AACA,eAAOM,KAAKC,OAAL,GAAetD,KAAtB;AACD,OAH0B,CAAN,CAArB;;AAKA,aAAOuD,KAAKC,IAAL,CAAUN,cAAV,CAAP;AACD;;AAED,aAASO,cAAT,CAAwBvE,IAAxB,EAA8B;AAC5B,UAAIwE,YAAYxE,KAAKyE,MAAL,CAAY,cAAZ,CAAhB;AACA,UAAI,CAACD,UAAUE,KAAV,EAAL,EAAwB;AACtB,YAAIC,qBAAqBC,WAAW5E,KAAKyE,MAAL,CAAY,cAAZ,EAA4BI,IAA5B,CAAiC,IAAjC,CAAX,CAAzB;AACA,YAAIC,eAAeF,WAAW5E,KAAK6E,IAAL,CAAU,QAAV,CAAX,CAAnB;AACA,eAAOC,eAAeH,kBAAtB;AACD,OAJD,MAIO;AACL;AACA,eAAO,EAAP;AACD;AACF;;AAED,aAASI,QAAT,GAAoB;AAClB;AACAhF,YAAMkB,MAAN,GAAeA,SAAS+D,GAAGC,SAAH,GACrBC,MADqB,CACd,CAAC7E,UAAU8E,IAAX,EAAiB9E,UAAU+E,EAA3B,CADc,EAErBC,KAFqB,CAEf,CAACrD,YAAU,CAAX,EAAcd,aAAWc,YAAU,CAAnC,CAFe,CAAxB;;AAIA,UAAIsD,QAAQpE,aAAaqE,sBAAzB;AACA,UAAIC,uBAAuBC,kBAAkBH,KAAlB,EAAyBjF,UAAU8E,IAAnC,EAAyC9E,UAAU+E,EAAnD,CAA3B;AACA,UAAIM,mBAAJ;AACA,UAAIC,oBAAoBzF,KAAK0F,SAAL,CAAeC,WAAf,EAAxB;AACA,UAAIF,sBAAsB,KAA1B,EAAiC;AAC/BD,qBAAaV,GAAGc,SAAH,CAAaN,oBAAb,CAAb;AACD,OAFD,MAEO;AACLE,qBAAaV,GAAGU,UAAH,CAAcF,oBAAd,CAAb;AACD;;AAED,UAAIO,QAAQf,GAAGgB,UAAH,CAAc/E,MAAd,EACTqE,KADS,CACHA,KADG,EAETW,UAFS,CAEEP,UAFF,EAGTQ,WAHS,CAGGC,mBAHH,EAITC,QAJS,CAIAjF,WAJA,CAAZ;;AAMA,UAAIkF,OAAOjF,QAAX;AACA,UAAIkF,OAAOhF,UAAX;;AAEAf,cAAQgG,MAAR,CAAe,GAAf,EACG1B,IADH,CACQ,OADR,EACiB,aADjB,EAEGA,IAFH,CAEQ,WAFR,EAEqB,eAAeyB,IAAf,GAAsB,GAAtB,GAA4BD,IAA5B,GAAmC,GAFxD,EAGGG,IAHH,CAGQT,KAHR;;AAKA;AACAxF,cAAQkE,MAAR,CAAe,SAAf,EAA0BA,MAA1B,CAAiC,SAAjC,EAA4CgC,MAA5C;AACD;;AAED;AACA,aAASC,SAAT,CAAmBpB,KAAnB,EAA0B;AACxB,UAAID,QAAQ,EAAZ;AACA,UAAIsB,OAAOxF,cAAcmE,MAAMsB,MAA/B;AACA;AACAvB,YAAMwB,IAAN,CAAWF,IAAX;AACA,WAAK,IAAIG,IAAI,CAAb,EAAgBA,IAAIxB,MAAMsB,MAA1B,EAAkCE,GAAlC,EAAuC;AACrCzB,cAAMwB,IAAN,CAAWF,QAAQG,IAAE,CAAV,CAAX;AACD;AACD,aAAO9B,GAAG+B,YAAH,GACJ7B,MADI,CACGI,KADH,EAEJD,KAFI,CAEEA,KAFF,CAAP;AAGD;;AAED;AACA,aAAS2B,aAAT,CAAuB1B,KAAvB,EAA8B;AAC5B,UAAID,QAAQ,EAAZ;AACA,UAAIsB,OAAOxF,cAAcmE,MAAMsB,MAA/B;AACA;AACAvB,YAAMwB,IAAN,CAAW3E,OAAX;AACA,WAAK,IAAI4E,IAAI,CAAb,EAAgBA,IAAIxB,MAAMsB,MAA1B,EAAkCE,GAAlC,EAAuC;AACrCzB,cAAMwB,IAAN,CAAWF,OAAOG,CAAP,GAAW5E,OAAtB;AACD;AACD,aAAO8C,GAAG+B,YAAH,GACJ7B,MADI,CACGI,KADH,EAEJD,KAFI,CAEEA,KAFF,CAAP;AAGD;;AAED,aAAS4B,QAAT,GAAoB;AAClB,UAAI3B,QAAQlC,EAAE8D,IAAF,CAAO9D,EAAEc,GAAF,CAAM/D,IAAN,EAAY;AAAA,eAAKgH,EAAEC,MAAP;AAAA,OAAZ,CAAP,CAAZ;;AAEA;AACA,UAAIhE,EAAEiE,OAAF,CAAUlH,IAAV,CAAJ,EAAqB;AACnBmF,gBAAQ,CAAC,EAAD,CAAR;AACD;;AAED,UAAIhF,MAAMgH,SAAN,IAAmB,OAAvB,EAAgC;AAC9BhC,cAAMiC,IAAN,CAAW,UAACC,CAAD,EAAIC,CAAJ;AAAA,iBAAUD,EAAEE,aAAF,CAAgBD,CAAhB,EAAmB,IAAnB,EAAyB,EAACE,mBAAmB,KAApB,EAA2BC,SAAS,IAApC,EAAzB,CAAV;AAAA,SAAX;AACD,OAFD,MAEO,IAAItH,MAAMgH,SAAN,IAAmB,OAAvB,EAAgC;AACrChC,cAAMiC,IAAN,CAAW,UAACE,CAAD,EAAID,CAAJ;AAAA,iBAAUA,EAAEE,aAAF,CAAgBD,CAAhB,EAAmB,IAAnB,EAAyB,EAACE,mBAAmB,KAApB,EAA2BC,SAAS,IAApC,EAAzB,CAAV;AAAA,SAAX;AACD;;AAED,UAAIC,aAAab,cAAc1B,KAAd,CAAjB;AACAvF,YAAMiB,MAAN,GAAeA,SAAS0F,UAAUpB,KAAV,CAAxB;;AAEA,UAAIwC,QAAQ9C,GAAG+C,QAAH,CAAYF,UAAZ,EACTG,UADS,CACE1C,KADF,EAET2C,aAFS,CAEK,IAAInH,KAFT,EAGToF,WAHS,CAGGgC,mBAHH,CAAZ;;AAKA3H,cAAQgG,MAAR,CAAe,GAAf,EACG1B,IADH,CACQ,OADR,EACiB,aADjB,EAEG2B,IAFH,CAEQsB,KAFR;;AAIA;AACA,UAAIzB,OAAOzD,OAAOF,GAAlB;AACA,UAAI4D,OAAO1C,cAAcrD,OAAd,IAAyB2H,mBAApC;AACA3H,cAAQkE,MAAR,CAAe,SAAf,EAA0BI,IAA1B,CAA+B,WAA/B,EAA4C,eAAeyB,IAAf,GAAsB,GAAtB,GAA4BD,IAA5B,GAAmC,GAA/E;;AAEA;AACA9F,cAAQkE,MAAR,CAAe,SAAf,EAA0BA,MAA1B,CAAiC,SAAjC,EAA4CgC,MAA5C;AACAlG,cAAQkE,MAAR,CAAe,SAAf,EAA0BX,SAA1B,CAAoC,YAApC,EAAkD2C,MAAlD;AACD;;AAED;AACA,aAAS0B,cAAT,CAAwBC,GAAxB,EAA6BnE,GAA7B,EAAkCoE,YAAlC,EAAgD;AAC9C,UAAIC,WAAW,CAACrE,OAAOpB,wBAAwB,CAA/B,IAAoCuF,OAAOvF,wBAAwB,CAA/B,CAArC,IAA0E,CAAzF;AACA,UAAI0F,cAAJ;AAAA,UAAWC,cAAX;;AAEA,UAAIH,iBAAiB,CAArB,EAAwB;AACtBG,gBAAQvE,MAAMpB,qBAAd;AACA0F,gBAAQH,MAAMA,OAAOvF,wBAAwB,CAA/B,CAAd;AACAwF,uBAAe,CAACG,QAAQD,KAAT,IAAkB,CAAjC;AACD,OAJD,MAIO;AACLC,gBAAQnE,KAAKC,IAAL,CAAU,CAACL,MAAMqE,QAAP,IAAmBD,YAA7B,IAA6CA,YAArD;AACAE,gBAAQlE,KAAKoE,KAAL,CAAW,CAACL,MAAME,QAAP,IAAmBD,YAA9B,IAA8CA,YAAtD;AACD;;AAED;AACA,UAAID,OAAO,CAAP,IAAYG,QAAQ,CAAxB,EAA2B;AACzBA,gBAAQ,CAAR;AACD;;AAED,aAAO,EAACA,YAAD,EAAQC,YAAR,EAAP;AACD;;AAED,aAASE,kBAAT,CAA4BC,QAA5B,EAA6D;AAAA,UAAvBC,cAAuB,uEAAN,IAAM;;AAC3D,UAAIC,SAASvI,MAAMwH,KAAN,CAAYe,MAAzB;AACA,aAAO,UAASC,KAAT,EAAgB;AACrB,eAAOC,IAAIC,YAAJ,CAAiBH,MAAjB,EAAyBC,KAAzB,EAAgCH,QAAhC,EAA0CC,cAA1C,CAAP;AACD,OAFD;AAGD;;AAED;AACA;AACA,aAASK,gBAAT,GAA4B;AAC1B,UAAIC,eAAe1I,SAAS,CAAT,CAAnB;;AAEAM,cAAQuD,KAAKoE,KAAL,CAAWjI,SAASM,KAAT,EAAX,IAA+ByB,QAAQE,KAA/C;AACA1B,eAASsD,KAAKoE,KAAL,CAAWjI,SAASO,MAAT,EAAX,IAAgCwB,QAAQI,MAAjD;;AAEA,UAAIpC,OAAJ,EAAa;AACXA,gBAAQkG,MAAR;AACD;;AAEDlG,gBAAUyE,GAAGP,MAAH,CAAUyE,YAAV,EACP3C,MADO,CACA,KADA,EAEP1B,IAFO,CAEF,OAFE,EAEO/D,KAFP,EAGP+D,IAHO,CAGF,QAHE,EAGQ9D,MAHR,CAAV;;AAKAI,oBAAcJ,SAAS6B,OAAOF,GAAhB,GAAsBE,OAAOD,MAA3C;AACAvB,iBAAWwB,OAAOF,GAAlB;AACArB,oBAAcD,WAAWD,WAAzB;;AAEAM,qBAAenB,MAAM6I,KAAN,CAAY1H,YAAZ,KAA6B,IAA7B,GAAoCnB,MAAM6I,KAAN,CAAY1H,YAAhD,GAA+D2H,cAA9E;AACA5H,qBAAelB,MAAM6I,KAAN,CAAY3H,YAAZ,KAA6B,IAA7B,GAAoClB,MAAM6I,KAAN,CAAY3H,YAAhD,GAA+D6H,cAA9E;AACA3H,kBAAYpB,MAAM6I,KAAN,CAAYzH,SAAZ,KAA0B,IAA1B,GAAiCpB,MAAM6I,KAAN,CAAYzH,SAA7C,GAAyD4H,UAArE;;AAEA;AACArH,kBAAYoC,KAAKoE,KAAL,CAAWtH,cAAcf,UAAUmJ,WAAnC,CAAZ;AACA3H,mBAAaK,YAAYA,YAAYT,YAAxB,GAAuC,CAApD;AACAU,gBAAUN,aAAa,CAAvB;;AAEAqF;;AAEA3F,mBAAasC,cAAcrD,OAAd,IAAyB2H,mBAAtC;AACAhH,mBAAaJ,QAAQQ,UAAR,GAAqBsB,OAAOH,KAAzC;;AAEA;AACA;AACAT,kBAAYd,cAAcd,UAAUoJ,WAAV,GAAsB,CAApC,CAAZ;AACA7H,kBAAYK,YAAYP,YAAxB;;AAEAsD;AACAxD,oBAAcgD,eAAehE,OAAf,CAAd;;AAEA,UAAI,CAACD,MAAMwH,KAAN,CAAYrE,IAAjB,EAAuB;AACrBlD,gBAAQkE,MAAR,CAAe,SAAf,EAA0BX,SAA1B,CAAoC,MAApC,EAA4C2F,KAA5C,CAAkD,SAAlD,EAA6D,CAA7D;AACD;;AAED,UAAI,CAACnJ,MAAMyF,KAAN,CAAYtC,IAAjB,EAAuB;AACrBlD,gBAAQkE,MAAR,CAAe,SAAf,EAA0BX,SAA1B,CAAoC,MAApC,EAA4C2F,KAA5C,CAAkD,SAAlD,EAA6D,CAA7D;AACD;AACF;;AAED,aAASC,UAAT,GAAsB;AACpBT;;AAEA,UAAIU,WAAWrJ,MAAMsJ,KAAN,CAAY3F,GAAZ,IAAmB7D,UAAUuJ,QAA5C;AACA,UAAIE,WAAWvJ,MAAMsJ,KAAN,CAAYxB,GAAZ,IAAmBhI,UAAUyJ,QAA5C;;AAEA,UAAIvJ,MAAMsJ,KAAN,CAAYE,IAAZ,KAAqB,UAAzB,EAAqC;AACnCjI,qBAAakI,cAAcJ,QAAd,EAAwBE,QAAxB,CAAb;AACD;AACDG,sBAAgBL,QAAhB;;AAEA,UAAIR,QAAQ5I,QAAQuD,SAAR,CAAkB,sBAAlB,EAA0C3D,IAA1C,CAA+CC,UAAU+I,KAAzD,CAAZ;AACAA,YAAM5C,MAAN,CAAa,OAAb;AACA4C,cAAQA,MAAMc,KAAN,GAAc1D,MAAd,CAAqB,MAArB,EACP1B,IADO,CACF,QADE,EACQ;AAAA,eAAKqF,EAAEC,EAAP;AAAA,OADR,EAEPtF,IAFO,CAEF,GAFE,EAEGuF,QAFH,EAGPvF,IAHO,CAGF,OAHE,EAGOwF,YAHP,EAIPxF,IAJO,CAIF,GAJE,EAIGyF,QAJH,EAKPzF,IALO,CAKF,QALE,EAKQ0F,aALR,EAMP1F,IANO,CAMF,IANE,EAMInD,SANJ,EAOPmD,IAPO,CAOF,IAPE,EAOInD,SAPJ,EAQPmD,IARO,CAQF,OARE,EAQO,8BARP,EASP4E,KATO,CASD,MATC,EASOe,YATP,EAUPf,KAVO,CAUD,QAVC,EAUSe,YAVT,EAWPf,KAXO,CAWD,cAXC,EAWe,CAXf;AAYR;AACA;AAbQ,OAcPA,KAdO,CAcD,SAdC,EAcUgB,cAdV,CAAR;;AAgBA,UAAIC,SAASlK,SAASC,IAAT,CAAc,sBAAd,CAAb;AACAiK,aAAO1H,EAAP,CAAU,YAAV,EAAwB,UAAC2H,KAAD,EAAW;AACjCjK,gBAAQkK,eAAR,GAA0B,IAA1B;AACAC,sBAAcF,KAAd;AACD,OAHD,EAIC3H,EAJD,CAII,YAJJ,EAIkB,UAAC2H,KAAD,EAAW;AAC3BjK,gBAAQkK,eAAR,GAA0B,KAA1B;AACAE,2BAAmBH,KAAnB;AACD,OAPD;;AASAI;;AAEA7K,WAAK6C,MAAL,CAAYiI,IAAZ,CAAiB,iBAAjB,EAAoC;AAClC,sBAAc9J;AADoB,OAApC;AAGD;;AAED,aAAS2J,aAAT,CAAuBF,KAAvB,EAA8B;AAC5B,UAAIf,QAAQ5E,GAAGP,MAAH,CAAUkG,MAAMvD,MAAhB,EAAwBqC,KAAxB,CAA8B,MAA9B,CAAZ;AACA,UAAIwB,iBAAiBjG,GAAG4E,KAAH,CAASA,KAAT,EAAgBsB,MAAhB,CAAuB,CAAvB,CAArB;AACA,UAAIC,cAAcnG,GAAG4E,KAAH,CAASA,KAAT,EAAgBwB,QAAhB,CAAyB,CAAzB,CAAlB;AACA,UAAIC,eAAerG,GAAGP,MAAH,CAAUkG,MAAMvD,MAAhB,CAAnB;AACA1G,cAAQ4K,iBAAR,GAA4B1B,KAA5B;AACAyB,mBAAa5B,KAAb,CAAmB,MAAnB,EAA2BwB,cAA3B,EACCxB,KADD,CACO,QADP,EACiB0B,WADjB,EAEC1B,KAFD,CAEO,cAFP,EAEuB,CAFvB;AAGD;;AAED,aAASqB,kBAAT,CAA4BH,KAA5B,EAAmC;AACjC3F,SACGP,MADH,CACUkG,MAAMvD,MADhB,EAEGqC,KAFH,CAES,MAFT,EAEiB/I,QAAQ4K,iBAFzB,EAGG7B,KAHH,CAGS,QAHT,EAGmB/I,QAAQ4K,iBAH3B,EAIG7B,KAJH,CAIS,cAJT,EAIyB,CAJzB;AAKD;;AAED,aAASM,aAAT,CAAuBJ,QAAvB,EAA+C;AAAA,UAAdE,QAAc,uEAAH,CAAG;;AAC7C,UAAI0B,cAAcnI,EAAE3C,IAAF,CAAOP,KAAKsL,YAAZ,EAA0B,EAAC1C,OAAOxI,MAAMsJ,KAAN,CAAY2B,WAApB,EAA1B,CAAlB;AACA,UAAIE,oBAAoBC,iBAAiBH,YAAYzC,KAA7B,CAAxB;AACA,UAAI6C,qBAAqBJ,YAAYK,MAAZ,KAAuB,QAAvB,IACtBL,YAAYK,MAAZ,KAAuB,MAAvB,IAAiC,CAACC,WAAWC,IAAX,CAAgBC,UADrD;;AAGA,UAAIpC,YAAYE,QAAhB,EACEF,WAAWE,WAAW,CAAtB;;AAEF,UAAImC,QAAQL,qBAAqBhC,QAArB,GAAgCE,QAA5C;AACA,UAAIoC,MAAMN,qBAAqB9B,QAArB,GAAgCF,QAA1C;;AAEA,aAAO3E,GAAGkH,eAAH,CAAmBT,iBAAnB,EAAsCvG,MAAtC,CAA6C,CAAC8G,KAAD,EAAQC,GAAR,CAA7C,CAAP;AACD;;AAED,aAASjC,eAAT,CAAyBL,QAAzB,EAAmC;AACjC,UAAIrJ,MAAMsJ,KAAN,CAAY/H,UAAZ,KAA2B,QAA/B,EAAyC;AACvCC,uBAAekD,GAAGmH,WAAH,GACdjH,MADc,CACP,CAAC,CAAD,EAAIyE,QAAJ,CADO,EAEdtE,KAFc,CAER,CAAC,CAAD,EAAI,CAAJ,CAFQ,CAAf;AAGD,OAJD,MAIO,IAAI/E,MAAMsJ,KAAN,CAAY/H,UAAZ,KAA2B,MAA/B,EAAuC;AAC5CC,uBAAekD,GAAGoH,QAAH,GAAcC,QAAd,CAAuB/L,MAAMsJ,KAAN,CAAYyC,QAAnC,EACdnH,MADc,CACP,CAAC,CAAD,EAAIyE,QAAJ,CADO,EAEdtE,KAFc,CAER,CAAC,CAAD,EAAI,CAAJ,CAFQ,CAAf;AAGD;AACF;;AAED,aAAS+E,QAAT,CAAkBjD,CAAlB,EAAqB;AACnB,UAAImF,UAAJ;AACA;AACA,UAAIC,KAAKtL,OAAOkG,EAAEmF,CAAT,CAAT;;AAEA,UAAIC,KAAK5K,YAAU,CAAf,GAAmB,CAAvB,EAA0B;AACxB2K,YAAIhL,aAAaG,eAAa,CAA9B;AACD,OAFD,MAEO;AACL6K,YAAIhL,aAAaiL,EAAb,GAAkB5K,YAAU,CAAhC;AACD;;AAED,aAAO2K,CAAP;AACD;;AAED;AACA,aAASjC,YAAT,CAAsBlD,CAAtB,EAAyB;AACvB,UAAIqF,UAAJ;AACA,UAAID,KAAKtL,OAAOkG,EAAEmF,CAAT,CAAT;;AAEA,UAAIC,KAAK5K,YAAU,CAAnB,EAAsB;AACpB;AACA;AACA,YAAI8K,eAAgBF,KAAK9K,eAAa,CAAnB,GAAwBE,YAAU,CAArD;AACA6K,YAAIC,eAAe,CAAf,GAAmBA,YAAnB,GAAkC,CAAtC;AACD,OALD,MAKO,IAAIvL,aAAaqL,EAAb,GAAkB5K,YAAU,CAAhC,EAAmC;AACxC;AACA6K,YAAI7K,YAAU,CAAV,IAAeT,aAAaqL,EAAb,GAAkB9K,eAAa,CAA9C,CAAJ;AACD,OAHM,MAGA;AACL+K,YAAI7K,SAAJ;AACD;;AAED;AACA6K,UAAInI,KAAKJ,GAAL,CAASuI,CAAT,EAAYE,aAAZ,CAAJ;;AAEA,UAAIjL,gBAAgB,CAApB,EAAuB;AACrB+K,YAAIA,IAAE,CAAN;AACD;;AAED,aAAOA,CAAP;AACD;;AAED,aAASlC,QAAT,CAAkBnD,CAAlB,EAAqB;AACnB,aAAOnG,OAAOmG,EAAEwF,CAAT,IAAcvL,QAAd,GAAyBQ,UAAzB,GAAsCJ,eAAa,CAA1D;AACD;;AAED,aAAS+I,aAAT,CAAuBpD,CAAvB,EAA0B;AACxB,UAAIyF,KAAK5L,OAAOmG,EAAEwF,CAAT,CAAT;AACA,UAAIA,IAAIC,KAAKxL,QAAL,GAAgBQ,UAAhB,GAA6BJ,eAAa,CAAlD;AACA,UAAIqL,IAAIjL,UAAR;;AAEA;AACA,UAAI+K,IAAIvL,QAAR,EAAkB;AAChByL,YAAID,KAAKpL,eAAa,CAAtB;AACD,OAFD,MAEO,IAAIoL,KAAKvL,WAAT,EAAsB;AAC3BwL,YAAIxL,cAAcsL,CAAlB;AACD,OAFM,MAEA,IAAIA,IAAI/K,UAAJ,GAAiBP,WAArB,EAAkC;AACvCwL,YAAIxL,cAAcsL,CAAlB;AACD;;AAED;AACAE,UAAIxI,KAAK+D,GAAL,CAASyE,CAAT,EAAY1L,WAAZ,CAAJ;AACA;AACA0L,UAAIxI,KAAKJ,GAAL,CAAS4I,CAAT,EAAYH,aAAZ,CAAJ;;AAEA,UAAIlL,gBAAgB,CAApB,EAAuB;AACrBqL,YAAIA,IAAE,CAAN;AACD;;AAED,aAAOA,CAAP;AACD;;AAED,aAASrC,YAAT,CAAsBrD,CAAtB,EAAyB;AACvB,UAAI7G,MAAMsJ,KAAN,CAAYE,IAAZ,KAAqB,SAAzB,EAAoC;AAClC,eAAOxJ,MAAMsJ,KAAN,CAAYkD,SAAnB;AACD,OAFD,MAEO,IAAIxM,MAAMsJ,KAAN,CAAYE,IAAZ,KAAqB,UAAzB,EAAqC;AAC1C,eAAOjI,WAAWsF,EAAE2B,KAAb,CAAP;AACD,OAFM,MAEA,IAAIxI,MAAMsJ,KAAN,CAAYE,IAAZ,KAAqB,UAAzB,EAAqC;AAC1C,eAAO5J,KAAK6M,cAAL,CAAoBC,cAApB,CAAmC7F,EAAE8F,MAArC,CAAP;AACD;AACF;;AAED,aAASxC,cAAT,CAAwBtD,CAAxB,EAA2B;AACzB,UAAI7G,MAAM4M,aAAN,KAAwB,UAAxB,IAAsC/F,EAAE2B,KAAF,IAAW,IAArD,EAA4D;AAC1D,eAAO,CAAP;AACD;AACD,UAAIxI,MAAMsJ,KAAN,CAAYE,IAAZ,KAAqB,SAAzB,EAAoC;AAClC,eAAOhI,aAAaqF,EAAE2B,KAAf,CAAP;AACD,OAFD,MAEO;AACL,eAAO,CAAP;AACD;AACF;;AAED,aAASqE,kBAAT,CAA4BhG,CAA5B,EAA+B;AAC7B,UAAI7G,MAAMsJ,KAAN,CAAYE,IAAZ,KAAqB,UAAzB,EAAqC;AACnC,eAAO,GAAP;AACD;AACD,aAAO,GAAP;AACD;;AAED;AACA;AACA;;AAEA;AACAsD,cAAUpK,EAAV,CAAa,aAAb,EAA4B,iBAAS;AACnCqK,0BAAoB1C,MAAM2C,GAA1B;AACD,KAFD,EAEGvN,KAFH;;AAIAqN,cAAUpK,EAAV,CAAa,mBAAb,EAAkC,YAAM;AACtCuK;AACD,KAFD,EAEGxN,KAFH;;AAIA,aAASyN,WAAT,CAAqB7C,KAArB,EAA4B;AAC1BxI,gBAAUC,MAAV,GAAmB,IAAnB;AACAD,gBAAUE,EAAV,GAAesI,MAAM8C,OAArB;;AAEA1L,uBAAiB,0BAAW;AAC1B2L;AACD,OAFD;;AAIAC,QAAEC,QAAF,EAAYC,GAAZ,CAAgB,SAAhB,EAA2B9L,cAA3B;AACD;;AAED,aAAS2L,SAAT,GAAqB;AACnBC,QAAEC,QAAF,EAAYE,MAAZ,CAAmB,SAAnB,EAA8B/L,cAA9B;AACAA,uBAAiB,IAAjB;AACAI,gBAAUC,MAAV,GAAmB,KAAnB;;AAEA,UAAI2L,iBAAiB1J,KAAK2J,GAAL,CAAS7L,UAAUG,EAAV,GAAeH,UAAUE,EAAlC,CAArB;AACA,UAAIF,UAAUG,EAAV,IAAgB,CAAhB,IAAqByL,iBAAiBE,mBAA1C,EAA+D;AAC7D,YAAIC,WAAWjN,OAAO2K,MAAP,CAAcvH,KAAK+D,GAAL,CAASjG,UAAUE,EAAnB,EAAuBF,UAAUG,EAAjC,IAAuChB,UAAvC,GAAoDU,YAAU,CAA5E,CAAf;AACA,YAAImM,SAASlN,OAAO2K,MAAP,CAAcvH,KAAKJ,GAAL,CAAS9B,UAAUE,EAAnB,EAAuBF,UAAUG,EAAjC,IAAuChB,UAAvC,GAAoDU,YAAU,CAA5E,CAAb;;AAEA9B,aAAKkO,OAAL,CAAaC,OAAb,CAAqB;AACnBlJ,gBAAMmJ,OAAOC,GAAP,CAAWL,QAAX,CADa;AAEnB9I,cAAIkJ,OAAOC,GAAP,CAAWJ,MAAX;AAFe,SAArB;AAID;;AAEDK;AACD;;AAED,aAASC,YAAT,GAAwB;AACtBrB,gBAAUpC,IAAV,CAAe,mBAAf;AACAuC;AACA;AACD;;AAED,aAASmB,WAAT,CAAqB/D,KAArB,EAA4B;AAC1B,UAAI,CAACpK,OAAL,EAAc;AAAE;AAAS;;AAEzB,UAAI4B,UAAUC,MAAd,EAAsB;AACpB;AACAmL;AACA7M,gBAAQiO,OAAR;AACA/N,0BAAkB+N,OAAlB;;AAEAxM,kBAAUG,EAAV,GAAesM,eAAejE,MAAM8C,OAArB,CAAf;AACAoB,sBAAc1M,UAAUE,EAAxB,EAA4BF,UAAUG,EAAtC;AACD,OARD,MAQO;AACLwM,2BAAmBnE,KAAnB;AACAoE,sBAAcpE,MAAM8C,OAApB;AACA/M,gBAAQ+C,IAAR,CAAakH,KAAb,EAHK,CAGgB;AACrB/J,0BAAkB6C,IAAlB,CAAuBkH,KAAvB;AACD;AACF;;AAED,aAASmE,kBAAT,CAA4BnE,KAA5B,EAAmC;AACjC,UAAI2B,IAAIrL,OAAO2K,MAAP,CAAcjB,MAAM8C,OAAN,GAAgBnM,UAAhB,GAA6BU,YAAU,CAArD,EAAwDgN,OAAxD,EAAR;AACA,UAAIrC,IAAI3L,OAAO2J,MAAMsE,OAAb,CAAR;AACA,UAAI3B,MAAM;AACR4B,eAAOvE,MAAMuE,KADL;AAERC,eAAOxE,MAAMwE,KAFL;AAGR7C,WAAGA,CAHK,EAGFjK,IAAIiK,CAHF;AAIRK,WAAGA,CAJK,EAIFyC,IAAIzC,CAJF;AAKR0C,mBAAW;AALH,OAAV;;AAQA;AACA/B,UAAI+B,SAAJ,GAAgBhL,KAAKJ,GAAL,CAAS0G,MAAMsE,OAAN,GAAgBlO,MAAzB,EAAiC,KAAjC,CAAhB;;AAEA;AACAqM,gBAAUpC,IAAV,CAAe,aAAf,EAA8B,EAACsC,KAAKA,GAAN,EAAWhN,OAAOA,KAAlB,EAA9B;AACD;;AAED,aAASsO,cAAT,CAAwBtM,EAAxB,EAA4B;AAC1BA,WAAK+B,KAAKJ,GAAL,CAAS3B,EAAT,EAAahB,UAAb,CAAL;AACAgB,WAAK+B,KAAK+D,GAAL,CAAS9F,EAAT,EAAapB,aAAaI,UAA1B,CAAL;AACA,aAAOgB,EAAP;AACD;;AAED,aAASuM,aAAT,CAAuBS,KAAvB,EAA8BC,KAA9B,EAAqC;AACnC,UAAIhP,OAAJ,EAAa;AACXA,gBAAQuD,SAAR,CAAkB,2BAAlB,EAA+C2C,MAA/C;AACA,YAAI+I,aAAanL,KAAK+D,GAAL,CAASkH,KAAT,EAAgBC,KAAhB,CAAjB;AACA,YAAIE,iBAAiBpL,KAAK2J,GAAL,CAASsB,QAAQC,KAAjB,CAArB;;AAEA,YAAIE,iBAAiBxB,mBAArB,EAA0C;AACxC1N,kBAAQgG,MAAR,CAAe,MAAf,EACC1B,IADD,CACM,OADN,EACe,0BADf,EAECA,IAFD,CAEM,GAFN,EAEW2K,UAFX,EAGC3K,IAHD,CAGM,OAHN,EAGe4K,cAHf,EAIC5K,IAJD,CAIM,GAJN,EAIWzD,QAJX,EAKCyD,IALD,CAKM,QALN,EAKgB1D,WALhB;AAMD;AACF;AACF;;AAED,aAASqN,cAAT,GAA0B;AACxBrM,gBAAUE,EAAV,GAAe,CAAC,CAAhB;AACAF,gBAAUG,EAAV,GAAe,CAAC,CAAhB;;AAEA,UAAI/B,OAAJ,EAAa;AACXA,gBAAQuD,SAAR,CAAkB,2BAAlB,EAA+C2C,MAA/C;AACD;AACF;;AAED,aAASsI,aAAT,CAAuBW,QAAvB,EAAiC;AAC/B,UAAInP,OAAJ,EAAa;AACXA,gBAAQuD,SAAR,CAAkB,2BAAlB,EAA+C2C,MAA/C;;AAEA,YAAIH,OAAOoJ,QAAX;AACApJ,eAAOjC,KAAKJ,GAAL,CAASqC,IAAT,EAAehF,UAAf,CAAP;AACAgF,eAAOjC,KAAK+D,GAAL,CAAS9B,IAAT,EAAepF,aAAaI,UAA5B,CAAP;;AAEAf,gBAAQgG,MAAR,CAAe,GAAf,EACC1B,IADD,CACM,OADN,EACe,0BADf,EAECA,IAFD,CAEM,WAFN,EAEmB,eAAeyB,IAAf,GAAsB,KAFzC,EAGCC,MAHD,CAGQ,MAHR,EAIC1B,IAJD,CAIM,IAJN,EAIY,CAJZ,EAKCA,IALD,CAKM,IALN,EAKYzD,QALZ,EAMCyD,IAND,CAMM,IANN,EAMY,CANZ,EAOCA,IAPD,CAOM,IAPN,EAOYxD,WAPZ,EAQCwD,IARD,CAQM,cARN,EAQsB,CARtB;AASD;AACF;;AAED;AACA,aAASwI,mBAAT,CAA6BC,GAA7B,EAAkC;AAChC,UAAI/M,WAAWL,KAAK0F,SAAL,CAAe+J,YAAf,KAAgC,CAA/C,EAAkD;AAChD,YAAIrJ,OAAOrF,OAAOqM,IAAIhB,CAAX,IAAgBhL,UAA3B;AACAyN,sBAAczI,IAAd;AACD;AACF;;AAED,aAASiH,cAAT,GAA0B;AACxB,UAAIhN,OAAJ,EAAa;AACXA,gBAAQuD,SAAR,CAAkB,2BAAlB,EAA+C2C,MAA/C;AACD;AACF;;AAED,aAASxD,MAAT,GAAkB;AAChB9C,aAAOD,KAAKC,IAAZ;AACAG,cAAQJ,KAAKI,KAAb;AACAD,kBAAYH,KAAKmF,KAAjB;AACAjF,kBAAYF,KAAKE,SAAjB;;AAEA,UAAI,CAACD,IAAD,IAAS,CAACC,SAAV,IAAuB,CAAC8C,kBAA5B,EAAgD;AAC9C;AACD;;AAED;AACA,UAAIE,EAAEiE,OAAF,CAAUjH,UAAU+I,KAApB,CAAJ,EAAgC;AAC9BF;AACA;AACD;;AAEDS;AACA3J,YAAMuB,UAAN,GAAmBA,UAAnB;AACAvB,YAAMwB,WAAN,GAAoBA,WAApB;AACAxB,YAAMoB,WAAN,GAAoBA,WAApB;AACApB,YAAMmB,UAAN,GAAmBA,UAAnB;AACAnB,YAAMqB,QAAN,GAAiBA,QAAjB;AACD;;AAED;AACAZ,aAASwC,EAAT,CAAY,WAAZ,EAAyBwK,WAAzB;AACAhN,aAASwC,EAAT,CAAY,WAAZ,EAAyB0L,WAAzB;AACAlO,aAASwC,EAAT,CAAY,YAAZ,EAA0ByL,YAA1B;;AAEA,aAAS1D,kBAAT,GAA8B;AAC5B,UAAI,CAAC7K,KAAK0P,WAAN,IAAqB1P,KAAK0P,WAAL,CAAiBhJ,MAAjB,IAA2B,CAApD,EAAuD;AACrD;AACD;;AAED,UAAI,CAACrG,OAAL,EAAc;AACZ;AACD;;AAED,UAAIsP,WAAWzM,EAAEc,GAAF,CAAMhE,KAAK0P,WAAX,EAAwB,UAACzI,CAAD,EAAGL,CAAH;AAAA,eAAU,EAAC,KAAKzC,KAAKoE,KAAL,CAAWnH,aAAaL,OAAOkG,EAAE2I,IAAT,CAAxB,CAAN,EAA+C,MAAKhJ,CAApD,EAAuD,QAAQK,EAAE4I,MAAjE,EAAV;AAAA,OAAxB,CAAf;;AAGA,UAAIC,OAAOzP,QACRgG,MADQ,CACD,GADC,EAER1B,IAFQ,CAEH,OAFG,EAEM,uBAFN,EAGRA,IAHQ,CAGH,WAHG,EAGU,kBAHV,EAIRf,SAJQ,CAIE,wBAJF,EAKR3D,IALQ,CAKH0P,QALG,EAMR5F,KANQ,GAMA1D,MANA,CAMO,GANP,CAAX;AAQAyJ,WAAKzJ,MAAL,CAAY,MAAZ;AACE;AADF,OAEG1B,IAFH,CAEQ,IAFR,EAEc;AAAA,eAAKsC,EAAEmF,CAAP;AAAA,OAFd,EAGGzH,IAHH,CAGQ,IAHR,EAGczD,QAHd,EAIGyD,IAJH,CAIQ,IAJR,EAIc;AAAA,eAAKsC,EAAEmF,CAAP;AAAA,OAJd,EAKGzH,IALH,CAKQ,IALR,EAKcxD,WALd,EAMGoI,KANH,CAMS,QANT,EAMmB;AAAA,eAAKtC,EAAE6I,IAAF,CAAOC,SAAZ;AAAA,OANnB,EAOGxG,KAPH,CAOS,cAPT,EAOyB,CAPzB,EAQGA,KARH,CAQS,kBART,EAQ6B,KAR7B;AAUAuG,WAAKzJ,MAAL,CAAY,SAAZ,EACG1B,IADH,CACQ,QADR,EACkB;AAAA,eAAK,CAAC,CAACsC,EAAEmF,CAAH,EAAMjL,cAAY,CAAlB,CAAD,EAAuB,CAAC8F,EAAEmF,CAAF,GAAI,CAAL,EAAQjL,cAAY,CAApB,CAAvB,EAA+C,CAAC8F,EAAEmF,CAAF,GAAI,CAAL,EAAQjL,cAAY,CAApB,CAA/C,EAAuE6O,IAAvE,CAA4E,GAA5E,CAAL;AAAA,OADlB,EAEGzG,KAFH,CAES,cAFT,EAEyB,CAFzB,EAGGA,KAHH,CAGS,MAHT,EAGiB;AAAA,eAAKtC,EAAE6I,IAAF,CAAOC,SAAZ;AAAA,OAHjB;AAKA;AACAD,WAAKzJ,MAAL,CAAY,MAAZ,EACG1B,IADH,CACQ,GADR,EACa;AAAA,eAAKsC,EAAEmF,CAAF,GAAI,CAAT;AAAA,OADb,EAEGzH,IAFH,CAEQ,OAFR,EAEiB,EAFjB,EAGGA,IAHH,CAGQ,GAHR,EAGaxD,cAAY,CAHzB,EAIGwD,IAJH,CAIQ,QAJR,EAIkB,CAJlB,EAKGA,IALH,CAKQ,OALR,EAKiB,2BALjB,EAMGA,IANH,CAMQ,QANR,EAMkB;AAAA,eAAKsC,EAAEgD,EAAP;AAAA,OANlB,EAOGV,KAPH,CAOS,SAPT,EAOoB,CAPpB;;AAUA,UAAI0G,SAAS3P,SAASC,IAAT,CAAc,4BAAd,CAAb;AACA0P,aAAOnN,EAAP,CAAU,YAAV,EAAwB,UAAC2H,KAAD,EAAW;AACjC/J,0BAAkBwP,uBAAlB,GAA4C,IAA5C;AACD,OAFD,EAGCpN,EAHD,CAGI,YAHJ,EAGkB,UAAC2H,KAAD,EAAW;AAC3B/J,0BAAkBwP,uBAAlB,GAA4C,KAA5C;AACD,OALD;AAOD;AACF;;qBAxqBuBtQ,I;;AA0qBxB,WAAS2F,iBAAT,CAA2BH,KAA3B,EAAkC8C,GAAlC,EAAuCnE,GAAvC,EAA4C;AAC1C,QAAImE,OAAOnE,GAAP,IAAcqB,KAAlB,EAAyB;AACvB,UAAID,QAAQpB,MAAMmE,GAAlB;AACA,UAAIiI,aAAchL,QAAMC,KAAP,GAAgB,IAAjC;AACA,UAAIgL,SAAS,QAAb;AACA,UAAIC,UAAU,WAAd;;AAEA,UAAIF,cAAc,EAAlB,EAAsB;AACpB,eAAO,UAAP;AACD;AACD,UAAIA,cAAc,IAAd,IAAsBhL,SAASiL,MAAnC,EAA2C;AACzC,eAAO,OAAP;AACD;AACD,UAAID,cAAc,KAAlB,EAAyB;AACvB,eAAO,aAAP;AACD;AACD,UAAIA,cAAc,OAAd,IAAyBhL,SAASkL,OAAtC,EAA+C;AAC7C,eAAO,OAAP;AACD;AACD,aAAO,OAAP;AACD;;AAED,WAAO,OAAP;AACD;;;AAvtBMnN,O;;AACAuK,O;;AACAW,Y;;AACAvF,S;;AACCqE,e,gBAAAA,S;AAAWvB,gB,gBAAAA,U;;AACX2E,c,sBAAAA,Q;AAAUC,uB,sBAAAA,iB;AAAmBC,qB,sBAAAA,e;;AAC9B1L,Q;;AACK0G,sB;;AACJ/K,0B,YAAAA,oB;;AACAE,uB,gBAAAA,iB;;;AAEJ6L,mB,GAAgB,C;AAChBtD,oB,GAAiB,C;AACjBC,oB,GAAiB,C;AACjBC,gB,GAAa,C;AACbxG,8B,GAA2B,G;AAC3ByC,4B,GAAyB,G;AACzBoL,4B,GAAyB,E;AACzBxK,yB,GAAsB,E;AACtB+B,yB,GAAsB,C;AACtB+F,yB,GAAsB,C","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":"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","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" + ] +}